]> git.neil.brown.name Git - history.git/commitdiff
Import pre2.0.12 pre2.0.12
authorLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:11:05 +0000 (15:11 -0500)
committerLinus Torvalds <torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:11:05 +0000 (15:11 -0500)
41 files changed:
Documentation/Changes
Documentation/cdrom/optcd
Makefile
arch/alpha/config.in
arch/alpha/kernel/Makefile
arch/alpha/kernel/alcor.c [deleted file]
arch/alpha/kernel/apecs.c
arch/alpha/kernel/bios32.c
arch/alpha/kernel/cia.c [new file with mode: 0644]
arch/alpha/kernel/irq.c
arch/alpha/kernel/setup.c
drivers/block/ll_rw_blk.c
drivers/cdrom/optcd.c
drivers/char/serial.c
drivers/char/tga.c
drivers/scsi/53c7,8xx.c
drivers/scsi/53c7,8xx.h
drivers/scsi/Config.in
drivers/scsi/constants.c
drivers/scsi/hosts.c
drivers/scsi/qlogicisp.c
drivers/scsi/qlogicisp.h
drivers/scsi/qlogicisp_asm.c
drivers/scsi/scsi_ioctl.c
drivers/scsi/sd.c
drivers/scsi/sr.c
drivers/sound/Config.in
fs/buffer.c
include/asm-alpha/alcor.h [deleted file]
include/asm-alpha/apecs.h
include/asm-alpha/cia.h [new file with mode: 0644]
include/asm-alpha/dma.h
include/asm-alpha/io.h
include/asm-alpha/irq.h
include/linux/optcd.h
include/net/sock.h
include/scsi/scsi.h
mm/mmap.c
net/ipv4/raw.c
net/ipv4/udp.c
scripts/Menuconfig

index a4d3bf39c86d5ff23d15671a585d49e33124b642..dc82670f24305c8a0d38713da971c950cd59796b 100644 (file)
@@ -34,7 +34,7 @@ Current Releases
 - Termcap               2.0.8
 - Procps                0.99a
 - Gpm                   1.09
-- SysVinit              2.60
+- sysvinit              2.62
 - Util-linux            2.5
 
 Upgrade notes
@@ -164,7 +164,9 @@ or earlier, you will probably get a weird error on shutdown in which
 your computer shuts down fine but "INIT: error reading initrequest" or
 words to that effect scroll across your screen hundreds of times.  To
 fix, upgrade to
-ftp://ftp.cistron.nl/pub/people/miquels/debian/sysvinit-2.60.tar.gz.
+ftp://sunsite.unc.edu/pub/Linux/system/Daemons/init/sysvinit-2.62.tar.gz
+ftp://tsx-11.mit.edu/pub/linux/sources/sbin/sysvinit-2.62.tar.gz
+ftp://ftp.cistron.nl/pub/people/miquels/software/sysvinit-2.62.tar.gz.
 
    If you're trying to run NCSA httpd, you have to set pre-spawning of
 daemons to zero, as it incorrectly assumes SunOS behavior.  I recommend
index 23fcae349e358ac2d41674326fbc01618ba85127..6f46c7adb243ad1116fdf50fe2fce918eca30f24 100644 (file)
@@ -2,9 +2,10 @@ This is the README file for the Optics Storage 8000 AT CDROM device driver.
 
 This is the driver for the so-called 'DOLPHIN' drive, with the 34-pin
 Sony-compatible interface. For the IDE-compatible Optics Storage 8001
-drive, you will want the ATAPI CDROM driver. If you have a drive that
-works with this driver, and that doesn't report itself as DOLPHIN,
-please drop me a mail.
+drive, you will want the ATAPI CDROM driver. The driver also seems to
+work with the Lasermate CR328A. If you have a drive that works with
+this driver, and that doesn't report itself as DOLPHIN, please drop me
+a mail.
 
 The support for multisession CDs is in ALPHA stage. If you use it,
 please mail me your experiences. Multisession support can be disabled
index 964b144e851b86c8f9218db5e2a7f474bbeea803..bfce14d5a0f63ca5ee9c18283ca8d6e823896a71 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 1
 PATCHLEVEL = 99
-SUBLEVEL = 11
+SUBLEVEL = 12
 
 ARCH = i386
 
index 871009f6465ed87ee086a0134ee7637d0a506f60..0705f8dbf25d8bb80e80cc5bf63d261c90c7a092 100644 (file)
@@ -35,6 +35,7 @@ fi
 
 choice 'Alpha system type' \
        "Avanti         CONFIG_ALPHA_AVANTI             \
+        Alpha-XL       CONFIG_ALPHA_XL                 \
         Cabriolet      CONFIG_ALPHA_CABRIOLET          \
         EB66           CONFIG_ALPHA_EB66               \
         EB66+          CONFIG_ALPHA_EB66P              \
@@ -43,6 +44,8 @@ choice 'Alpha system type' \
         PC164          CONFIG_ALPHA_PC164              \
         Jensen         CONFIG_ALPHA_JENSEN             \
         Noname         CONFIG_ALPHA_NONAME             \
+        Mikasa         CONFIG_ALPHA_MIKASA             \
+        Alcor          CONFIG_ALPHA_ALCOR              \
         Platform2000   CONFIG_ALPHA_P2K" Cabriolet
 if [ "$CONFIG_ALPHA_NONAME" = "y" -o "$CONFIG_ALPHA_EB66" = "y" \
        -o "$CONFIG_ALPHA_EB66P" = "y" -o "$CONFIG_ALPHA_P2K" = "y" ]
@@ -50,33 +53,33 @@ then
        define_bool CONFIG_PCI y
        define_bool CONFIG_ALPHA_LCA y
 fi
-if [ "$CONFIG_ALPHA_AVANTI" = "y" ]
-then
-       bool 'Is it really a true XL' CONFIG_ALPHA_XL
-fi
 if [ "$CONFIG_ALPHA_CABRIOLET" = "y" -o "$CONFIG_ALPHA_AVANTI" = "y" \
-       -o "$CONFIG_ALPHA_EB64P" = "y" ]
+       -o "$CONFIG_ALPHA_EB64P" = "y" -o "$CONFIG_ALPHA_MIKASA" = "y" \
+       -o "$CONFIG_ALPHA_XL" = "y" ]
 then
        define_bool CONFIG_PCI y
        define_bool CONFIG_ALPHA_APECS y
 fi
-if [ "$CONFIG_ALPHA_EB164" = "y" -o "$CONFIG_ALPHA_PC164" = "y" ]
+if [ "$CONFIG_ALPHA_EB164" = "y" -o "$CONFIG_ALPHA_PC164" = "y" \
+       -o "$CONFIG_ALPHA_ALCOR" = "y" ]
 then
        define_bool CONFIG_PCI y
        define_bool CONFIG_ALPHA_EV5 y
-       define_bool CONFIG_ALPHA_ALCOR y
+       define_bool CONFIG_ALPHA_CIA y
 else
        # EV5 and newer supports all rounding modes in hw:
        define_bool CONFIG_ALPHA_NEED_ROUNDING_EMULATION y
 fi
 
 if [ "$CONFIG_ALPHA_CABRIOLET" = "y" -o "$CONFIG_ALPHA_AVANTI" = "y" \
-       -o "$CONFIG_ALPHA_EB64P" = "y" -o "$CONFIG_ALPHA_JENSEN" = "y" ]
+       -o "$CONFIG_ALPHA_EB64P" = "y" -o "$CONFIG_ALPHA_JENSEN" = "y" \
+       -o "$CONFIG_ALPHA_MIKASA" = "y" -o "$CONFIG_ALPHA_ALCOR" = "y" ]
+then
+       bool 'Using SRM as bootloader' CONFIG_ALPHA_SRM
+fi
+if [ "$CONFIG_ALPHA_XL" = "y" ]
 then
-       if [ "$CONFIG_ALPHA_XL" = "n" ]
-       then
-               bool 'Using SRM as bootloader' CONFIG_ALPHA_SRM
-       fi
+       define_bool CONFIG_ALPHA_AVANTI y
 fi
 
 bool 'Echo console messages on /dev/ttyS1' CONFIG_SERIAL_ECHO
index f5bb0925c3097cccd89d15506ad67b575a2bbb26..4aa11ce788622073df7e4044aa34d1998db6a22d 100644 (file)
@@ -16,7 +16,7 @@ all: kernel.o head.o
 
 O_TARGET := kernel.o
 O_OBJS   := entry.o traps.o process.o osf_sys.o irq.o signal.o setup.o \
-           bios32.o ptrace.o time.o apecs.o lca.o alcor.o ksyms.o
+           bios32.o ptrace.o time.o apecs.o lca.o cia.o ksyms.o
 
 all: kernel.o head.o
 
diff --git a/arch/alpha/kernel/alcor.c b/arch/alpha/kernel/alcor.c
deleted file mode 100644 (file)
index a93da03..0000000
+++ /dev/null
@@ -1,486 +0,0 @@
-/*
- * Code common to all ALCOR chips.
- *
- * Written by David A Rusling (david.rusling@reo.mts.dec.com).
- * December 1995.
- *
- */
-#include <linux/kernel.h>
-#include <linux/config.h>
-#include <linux/types.h>
-#include <linux/bios32.h>
-#include <linux/pci.h>
-#include <linux/sched.h>
-
-#include <asm/system.h>
-#include <asm/io.h>
-#include <asm/hwrpb.h>
-#include <asm/ptrace.h>
-#include <asm/mmu_context.h>
-
-extern struct hwrpb_struct *hwrpb;
-extern asmlinkage void wrmces(unsigned long mces);
-extern int alpha_sys_type;
-/*
- * BIOS32-style PCI interface:
- */
-
-#ifdef CONFIG_ALPHA_ALCOR
-
-#ifdef DEBUG 
-# define DBG(args)     printk args
-#else
-# define DBG(args)
-#endif
-
-#define vulp   volatile unsigned long *
-#define vuip   volatile unsigned int  *
-
-static volatile unsigned int ALCOR_mcheck_expected = 0;
-static volatile unsigned int ALCOR_mcheck_taken = 0;
-static unsigned long ALCOR_jd, ALCOR_jd1, ALCOR_jd2;
-
-
-/*
- * Given a bus, device, and function number, compute resulting
- * configuration space address and setup the ALCOR_HAXR2 register
- * accordingly.  It is therefore not safe to have concurrent
- * invocations to configuration space access routines, but there
- * really shouldn't be any need for this.
- *
- * Type 0:
- *
- *  3 3|3 3 2 2|2 2 2 2|2 2 2 2|1 1 1 1|1 1 1 1|1 1 
- *  3 2|1 0 9 8|7 6 5 4|3 2 1 0|9 8 7 6|5 4 3 2|1 0 9 8|7 6 5 4|3 2 1 0
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- * | | |D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|F|F|F|R|R|R|R|R|R|0|0|
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- *
- *     31:11   Device select bit.
- *     10:8    Function number
- *      7:2    Register number
- *
- * Type 1:
- *
- *  3 3|3 3 2 2|2 2 2 2|2 2 2 2|1 1 1 1|1 1 1 1|1 1 
- *  3 2|1 0 9 8|7 6 5 4|3 2 1 0|9 8 7 6|5 4 3 2|1 0 9 8|7 6 5 4|3 2 1 0
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- * | | | | | | | | | | |B|B|B|B|B|B|B|B|D|D|D|D|D|F|F|F|R|R|R|R|R|R|0|1|
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- *
- *     31:24   reserved
- *     23:16   bus number (8 bits = 128 possible buses)
- *     15:11   Device number (5 bits)
- *     10:8    function number
- *      7:2    register number
- *  
- * Notes:
- *     The function number selects which function of a multi-function device 
- *     (e.g., scsi and ethernet).
- * 
- *     The register selects a DWORD (32 bit) register offset.  Hence it
- *     doesn't get shifted by 2 bits as we want to "drop" the bottom two
- *     bits.
- */
-static int mk_conf_addr(unsigned char bus, unsigned char device_fn,
-                       unsigned char where, unsigned long *pci_addr,
-                       unsigned char *type1)
-{
-       unsigned long addr;
-
-       DBG(("mk_conf_addr(bus=%d ,device_fn=0x%x, where=0x%x, pci_addr=0x%p, type1=0x%p)\n",
-            bus, device_fn, where, pci_addr, type1));
-
-       if (bus == 0) {
-               int device = device_fn >> 3;
-
-               /* type 0 configuration cycle: */
-
-               if (device > 20) {
-                       DBG(("mk_conf_addr: device (%d) > 20, returning -1\n", device));
-                       return -1;
-               }
-
-               *type1 = 0;
-               addr = (device_fn << 8) | (where);
-       } else {
-               /* type 1 configuration cycle: */
-               *type1 = 1;
-               addr = (bus << 16) | (device_fn << 8) | (where);
-       }
-       *pci_addr = addr;
-       DBG(("mk_conf_addr: returning pci_addr 0x%lx\n", addr));
-       return 0;
-}
-
-
-static unsigned int conf_read(unsigned long addr, unsigned char type1)
-{
-       unsigned long flags;
-       unsigned int stat0, value;
-       unsigned int cia_cfg = 0; /* to keep gcc quiet */
-
-       save_flags(flags);      /* avoid getting hit by machine check */
-       cli();
-
-       DBG(("conf_read(addr=0x%lx, type1=%d)\n", addr, type1));
-
-       /* reset status register to avoid losing errors: */
-       stat0 = *((volatile unsigned int *)ALCOR_IOC_CIA_ERR);
-       *((volatile unsigned int *)ALCOR_IOC_CIA_ERR) = stat0;
-       mb();
-       DBG(("conf_read: ALCOR CIA ERR was 0x%x\n", stat0));
-       /* if Type1 access, must set CIA CFG */
-       if (type1) {
-               cia_cfg = *((unsigned int *)ALCOR_IOC_CFG);
-               mb();
-               *((unsigned int *)ALCOR_IOC_CFG) = cia_cfg | 1;
-               DBG(("conf_read: TYPE1 access\n"));
-       }
-
-       draina();
-       ALCOR_mcheck_expected = 1;
-       ALCOR_mcheck_taken = 0;
-       mb();
-       /* access configuration space: */
-       value = *((volatile unsigned int *)addr);
-       mb();
-       mb();
-       if (ALCOR_mcheck_taken) {
-               ALCOR_mcheck_taken = 0;
-               value = 0xffffffffU;
-               mb();
-       }
-       ALCOR_mcheck_expected = 0;
-       mb();
-       /*
-        * david.rusling@reo.mts.dec.com.  This code is needed for the
-        * EB64+ as it does not generate a machine check (why I don't
-        * know).  When we build kernels for one particular platform
-        * then we can make this conditional on the type.
-        */
-#if 1
-       draina();
-
-       /* now look for any errors */
-       stat0 = *((unsigned int *)ALCOR_IOC_CIA_ERR);
-       DBG(("conf_read: ALCOR CIA ERR after read 0x%x\n", stat0));
-       if (stat0 & 0x8280U) { /* is any error bit set? */
-               /* if not NDEV, print status */
-               if (!(stat0 & 0x0080)) {
-                       printk("ALCOR.c:conf_read: got stat0=%x\n", stat0);
-               }
-
-               /* reset error status: */
-               *((volatile unsigned long *)ALCOR_IOC_CIA_ERR) = stat0;
-               mb();
-               wrmces(0x7);                    /* reset machine check */
-               value = 0xffffffff;
-       }
-#endif
-
-       /* if Type1 access, must reset IOC CFG so normal IO space ops work */
-       if (type1) {
-               *((unsigned int *)ALCOR_IOC_CFG) = cia_cfg & ~1;
-               mb();
-       }
-
-       DBG(("conf_read(): finished\n"));
-
-       restore_flags(flags);
-       return value;
-}
-
-
-static void conf_write(unsigned long addr, unsigned int value, unsigned char type1)
-{
-       unsigned long flags;
-       unsigned int stat0;
-       unsigned int cia_cfg = 0; /* to keep gcc quiet */
-
-       save_flags(flags);      /* avoid getting hit by machine check */
-       cli();
-
-       /* reset status register to avoid losing errors: */
-       stat0 = *((volatile unsigned int *)ALCOR_IOC_CIA_ERR);
-       *((volatile unsigned int *)ALCOR_IOC_CIA_ERR) = stat0;
-       mb();
-       DBG(("conf_write: ALCOR CIA ERR was 0x%x\n", stat0));
-       /* if Type1 access, must set CIA CFG */
-       if (type1) {
-               cia_cfg = *((unsigned int *)ALCOR_IOC_CFG);
-               mb();
-               *((unsigned int *)ALCOR_IOC_CFG) = cia_cfg | 1;
-               DBG(("conf_read: TYPE1 access\n"));
-       }
-
-       draina();
-       ALCOR_mcheck_expected = 1;
-       mb();
-       /* access configuration space: */
-       *((volatile unsigned int *)addr) = value;
-       mb();
-       mb();
-       ALCOR_mcheck_expected = 0;
-       mb();
-       /*
-        * david.rusling@reo.mts.dec.com.  This code is needed for the
-        * EB64+ as it does not generate a machine check (why I don't
-        * know).  When we build kernels for one particular platform
-        * then we can make this conditional on the type.
-        */
-#if 1
-       draina();
-
-       /* now look for any errors */
-       stat0 = *((unsigned int *)ALCOR_IOC_CIA_ERR);
-       DBG(("conf_write: ALCOR CIA ERR after write 0x%x\n", stat0));
-       if (stat0 & 0x8280U) { /* is any error bit set? */
-               /* if not NDEV, print status */
-               if (!(stat0 & 0x0080)) {
-                       printk("ALCOR.c:conf_read: got stat0=%x\n", stat0);
-               }
-
-               /* reset error status: */
-               *((volatile unsigned long *)ALCOR_IOC_CIA_ERR) = stat0;
-               mb();
-               wrmces(0x7);                    /* reset machine check */
-               value = 0xffffffff;
-       }
-#endif
-
-       /* if Type1 access, must reset IOC CFG so normal IO space ops work */
-       if (type1) {
-               *((unsigned int *)ALCOR_IOC_CFG) = cia_cfg & ~1;
-               mb();
-       }
-
-       DBG(("conf_write(): finished\n"));
-       restore_flags(flags);
-}
-
-
-int pcibios_read_config_byte (unsigned char bus, unsigned char device_fn,
-                             unsigned char where, unsigned char *value)
-{
-       unsigned long addr = ALCOR_CONF;
-       unsigned long pci_addr;
-       unsigned char type1;
-
-       *value = 0xff;
-
-       if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1) < 0) {
-               return PCIBIOS_SUCCESSFUL;
-       }
-
-       addr |= (pci_addr << 5) + 0x00;
-
-       *value = conf_read(addr, type1) >> ((where & 3) * 8);
-
-       return PCIBIOS_SUCCESSFUL;
-}
-
-
-int pcibios_read_config_word (unsigned char bus, unsigned char device_fn,
-                             unsigned char where, unsigned short *value)
-{
-       unsigned long addr = ALCOR_CONF;
-       unsigned long pci_addr;
-       unsigned char type1;
-
-       *value = 0xffff;
-
-       if (where & 0x1) {
-               return PCIBIOS_BAD_REGISTER_NUMBER;
-       }
-
-       if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1)) {
-               return PCIBIOS_SUCCESSFUL;
-       }
-
-       addr |= (pci_addr << 5) + 0x08;
-
-       *value = conf_read(addr, type1) >> ((where & 3) * 8);
-       return PCIBIOS_SUCCESSFUL;
-}
-
-
-int pcibios_read_config_dword (unsigned char bus, unsigned char device_fn,
-                              unsigned char where, unsigned int *value)
-{
-       unsigned long addr = ALCOR_CONF;
-       unsigned long pci_addr;
-       unsigned char type1;
-
-       *value = 0xffffffff;
-       if (where & 0x3) {
-               return PCIBIOS_BAD_REGISTER_NUMBER;
-       }
-
-       if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1)) {
-               return PCIBIOS_SUCCESSFUL;
-       }
-       addr |= (pci_addr << 5) + 0x18;
-       *value = conf_read(addr, type1);
-       return PCIBIOS_SUCCESSFUL;
-}
-
-
-int pcibios_write_config_byte (unsigned char bus, unsigned char device_fn,
-                              unsigned char where, unsigned char value)
-{
-       unsigned long addr = ALCOR_CONF;
-       unsigned long pci_addr;
-       unsigned char type1;
-
-       if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1) < 0) {
-               return PCIBIOS_SUCCESSFUL;
-       }
-       addr |= (pci_addr << 5) + 0x00;
-       conf_write(addr, value << ((where & 3) * 8), type1);
-       return PCIBIOS_SUCCESSFUL;
-}
-
-
-int pcibios_write_config_word (unsigned char bus, unsigned char device_fn,
-                              unsigned char where, unsigned short value)
-{
-       unsigned long addr = ALCOR_CONF;
-       unsigned long pci_addr;
-       unsigned char type1;
-
-       if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1) < 0) {
-               return PCIBIOS_SUCCESSFUL;
-       }
-       addr |= (pci_addr << 5) + 0x08;
-       conf_write(addr, value << ((where & 3) * 8), type1);
-       return PCIBIOS_SUCCESSFUL;
-}
-
-
-int pcibios_write_config_dword (unsigned char bus, unsigned char device_fn,
-                               unsigned char where, unsigned int value)
-{
-       unsigned long addr = ALCOR_CONF;
-       unsigned long pci_addr;
-       unsigned char type1;
-
-       if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1) < 0) {
-               return PCIBIOS_SUCCESSFUL;
-       }
-       addr |= (pci_addr << 5) + 0x18;
-       conf_write(addr, value << ((where & 3) * 8), type1);
-       return PCIBIOS_SUCCESSFUL;
-}
-
-
-unsigned long alcor_init(unsigned long mem_start, unsigned long mem_end)
-{
-        unsigned int cia_err ;
-
-        /* 
-        * Set up error reporting.
-        */
-       cia_err = *(vuip)ALCOR_IOC_CIA_ERR ;
-       cia_err |= (0x1 << 7) ;   /* master abort */
-       *(vuip)ALCOR_IOC_CIA_ERR = cia_err ;
-       mb() ;
-
-       /*
-        * Set up the PCI->physical memory translation windows.
-        * For now, windows 1,2 and 3 are disabled.  In the future, we may
-        * want to use them to do scatter/gather DMA.  Window 0
-        * goes at 1 GB and is 1 GB large.
-        */
-
-       *(vuip)ALCOR_IOC_PCI_W0_BASE = 1U | (ALCOR_DMA_WIN_BASE & 0xfff00000U);
-       *(vuip)ALCOR_IOC_PCI_W0_MASK = (ALCOR_DMA_WIN_SIZE - 1) & 0xfff00000U;
-       *(vuip)ALCOR_IOC_PCI_T0_BASE = 0;
-
-       *(vuip)ALCOR_IOC_PCI_W1_BASE = 0x0 ;
-       *(vuip)ALCOR_IOC_PCI_W2_BASE = 0x0 ;
-       *(vuip)ALCOR_IOC_PCI_W3_BASE = 0x0 ;
-
-       /*
-        * check ASN in HWRPB for validity, report if bad
-        */
-       if (hwrpb->max_asn != MAX_ASN) {
-               printk("alcor_init: max ASN from HWRPB is bad (0x%lx)\n",
-                       hwrpb->max_asn);
-               hwrpb->max_asn = MAX_ASN;
-       }
-
-        /*
-         * Finally, clear the CIA_CFG register, which gets used
-         *  for PCI Config Space accesses. That is the way
-         *  we want to use it, and we do not want to depend on
-         *  what ARC or SRM might have left behind...
-         */
-        {
-#if 0
-          unsigned int cia_cfg = *((unsigned int *)ALCOR_IOC_CFG); mb();
-          if (cia_cfg) printk("alcor_init: CFG was 0x%x\n", cia_cfg);
-#endif
-          *((unsigned int *)ALCOR_IOC_CFG) = 0; mb();
-        }
-       return mem_start;
-}
-
-int ALCOR_pci_clr_err(void)
-{
-       ALCOR_jd = *((unsigned int *)ALCOR_IOC_CIA_ERR);
-       DBG(("ALCOR_pci_clr_err: ALCOR CIA ERR after read 0x%x\n", ALCOR_jd));
-       *((unsigned long *)ALCOR_IOC_CIA_ERR) = 0x0080;
-       mb();
-       return 0;
-}
-
-void alcor_machine_check(unsigned long vector, unsigned long la_ptr,
-                        struct pt_regs * regs)
-{
-#if 1
-        printk("ALCOR machine check\n") ;
-#else
-       struct el_common *mchk_header;
-       struct el_ALCOR_sysdata_mcheck *mchk_sysdata;
-
-       mchk_header = (struct el_common *)la_ptr;
-
-       mchk_sysdata = 
-         (struct el_ALCOR_sysdata_mcheck *)(la_ptr + mchk_header->sys_offset);
-
-       DBG(("ALCOR_machine_check: vector=0x%lx la_ptr=0x%lx\n", vector, la_ptr));
-       DBG(("                     pc=0x%lx size=0x%x procoffset=0x%x sysoffset 0x%x\n",
-            regs->pc, mchk_header->size, mchk_header->proc_offset, mchk_header->sys_offset));
-       DBG(("ALCOR_machine_check: expected %d DCSR 0x%lx PEAR 0x%lx\n",
-            ALCOR_mcheck_expected, mchk_sysdata->epic_dcsr, mchk_sysdata->epic_pear));
-#ifdef DEBUG
-       {
-           unsigned long *ptr;
-           int i;
-
-           ptr = (unsigned long *)la_ptr;
-           for (i = 0; i < mchk_header->size / sizeof(long); i += 2) {
-               printk(" +%lx %lx %lx\n", i*sizeof(long), ptr[i], ptr[i+1]);
-           }
-       }
-#endif /* DEBUG */
-       /*
-        * Check if machine check is due to a badaddr() and if so,
-        * ignore the machine check.
-        */
-       if (ALCOR_mcheck_expected && (mchk_sysdata->epic_dcsr && 0x0c00UL)) {
-               ALCOR_mcheck_expected = 0;
-               ALCOR_mcheck_taken = 1;
-               mb();
-               mb();
-               ALCOR_pci_clr_err();
-               wrmces(0x7);
-               mb();
-               draina();
-       }
-#endif
-}
-
-#endif /* CONFIG_ALPHA_ALCOR */
index 8f101c39514d9926c276d3c0dfe85bf84bdd665d..28840eb3bd96a7a87c20a5d37c5e6909f36ee7bd 100644 (file)
@@ -519,7 +519,13 @@ void apecs_machine_check(unsigned long vector, unsigned long la_ptr,
         * Check if machine check is due to a badaddr() and if so,
         * ignore the machine check.
         */
+#ifdef CONFIG_ALPHA_MIKASA
+       /* for now on MIKASA, if it was expected, ignore it */
+       /* we need the details of the mcheck frame to really know... */
+       if (apecs_mcheck_expected) {
+#else
        if (apecs_mcheck_expected && (mchk_sysdata->epic_dcsr && 0x0c00UL)) {
+#endif
                apecs_mcheck_expected = 0;
                apecs_mcheck_taken = 1;
                mb();
index aafeecbe306e3488b4374991948ecdb0d5465465..ad6b22e15371bb687a643cab5b87e8befa198c84 100644 (file)
@@ -87,7 +87,7 @@ extern struct hwrpb_struct *hwrpb;
 
 #if PCI_MODIFY
 
-#if 0
+#if defined(CONFIG_ALPHA_MIKASA) || defined(CONFIG_ALPHA_ALCOR)
 static unsigned int    io_base  = 64*KB;       /* <64KB are (E)ISA ports */
 #else
 static unsigned int    io_base  = 0xb000;
@@ -116,6 +116,17 @@ static void disable_dev(struct pci_dev *dev)
        struct pci_bus *bus;
        unsigned short cmd;
 
+#if defined(CONFIG_ALPHA_MIKASA) || defined(CONFIG_ALPHA_ALCOR)
+       /*
+        * HACK: the PCI-to-EISA bridge does not seem to identify
+        *       itself as a bridge... :-(
+        */
+        if (dev->vendor == 0x8086 && dev->device == 0x0482) {
+          DBG_DEVS(("disable_dev: ignoring...\n"));
+          return;
+        }
+#endif
+
        bus = dev->bus;
        pcibios_read_config_word(bus->number, dev->devfn, PCI_COMMAND, &cmd);
 
@@ -525,7 +536,13 @@ static inline void common_fixup(long min_idsel, long max_idsel, long irqs_per_sl
         * Go through all devices, fixing up irqs as we see fit:
         */
        for (dev = pci_devices; dev; dev = dev->next) {
-               if (dev->class >> 16 != PCI_BASE_CLASS_BRIDGE) {
+               if (dev->class >> 16 != PCI_BASE_CLASS_BRIDGE
+#if defined(CONFIG_ALPHA_MIKASA) || defined(CONFIG_ALPHA_ALCOR)
+                   /* PCEB (PCI to EISA bridge) does not identify
+                      itself as a bridge... :-( */
+                   && !((dev->vendor==0x8086) && (dev->device==0x482))
+#endif
+                   ) {
                        dev->irq = 0;
                        /*
                         * This device is not on the primary bus, we need to figure out which
@@ -554,8 +571,10 @@ static inline void common_fixup(long min_idsel, long max_idsel, long irqs_per_sl
                                /* work out the slot */
                                slot = PCI_SLOT(dev->devfn) ;
                                /* read the pin */
-                               pcibios_read_config_byte(dev->bus->number, dev->devfn,
-                                                PCI_INTERRUPT_PIN, &pin);
+                               pcibios_read_config_byte(dev->bus->number,
+                                                        dev->devfn,
+                                                        PCI_INTERRUPT_PIN,
+                                                        &pin);
                        }
                        if (irq_tab[slot - min_idsel][pin] != -1)
                                dev->irq = irq_tab[slot - min_idsel][pin];
@@ -568,7 +587,8 @@ static inline void common_fixup(long min_idsel, long max_idsel, long irqs_per_sl
                         * if it's a VGA, enable its BIOS ROM at C0000
                         */
                        if ((dev->class >> 8) == PCI_CLASS_DISPLAY_VGA) {
-                         pcibios_write_config_dword(dev->bus->number, dev->devfn,
+                         pcibios_write_config_dword(dev->bus->number,
+                                                    dev->devfn,
                                                     PCI_ROM_ADDRESS,
                                                     0x000c0000 | PCI_ROM_ADDRESS_ENABLE);
                        }
@@ -749,6 +769,116 @@ static inline void eb66_and_eb64p_fixup(void)
 }
 
 
+/*
+ * Fixup configuration for MIKASA (NORITAKE is different)
+ *
+ * Summary @ 0x536:
+ * Bit      Meaning
+ * 0        Interrupt Line A from slot 0
+ * 1        Interrupt Line B from slot 0
+ * 2        Interrupt Line C from slot 0
+ * 3        Interrupt Line D from slot 0
+ * 4        Interrupt Line A from slot 1
+ * 5        Interrupt line B from slot 1
+ * 6        Interrupt Line C from slot 1
+ * 7        Interrupt Line D from slot 1
+ * 8        Interrupt Line A from slot 2
+ * 9        Interrupt Line B from slot 2
+ *10        Interrupt Line C from slot 2
+ *11        Interrupt Line D from slot 2
+ *12        NCR 810 SCSI
+ *13        Power Supply Fail
+ *14        Temperature Warn
+ *15        Reserved
+ *
+ * The device to slot mapping looks like:
+ *
+ * Slot     Device
+ *  6       NCR SCSI controller
+ *  7       Intel PCI-EISA bridge chip
+ * 11       PCI on board slot 0
+ * 12       PCI on board slot 1
+ * 13       PCI on board slot 2
+ *   
+ *
+ * This two layered interrupt approach means that we allocate IRQ 16 and 
+ * above for PCI interrupts.  The IRQ relates to which bit the interrupt
+ * comes in on.  This makes interrupt processing much easier.
+ */
+static inline void mikasa_fixup(void)
+{
+       char irq_tab[8][5] = {
+         /*INT    INTA   INTB   INTC   INTD */
+         {16+12, 16+12, 16+12, 16+12, 16+12},  /* IdSel 17,  SCSI */
+         {   -1,    -1,    -1,    -1,    -1},  /* IdSel 18,  PCEB */
+         {   -1,    -1,    -1,    -1,    -1},  /* IdSel 19,  ???? */
+         {   -1,    -1,    -1,    -1,    -1},  /* IdSel 20,  ???? */
+         {   -1,    -1,    -1,    -1,    -1},  /* IdSel 21,  ???? */
+         { 16+0,  16+0,  16+1,  16+2,  16+3},  /* IdSel 22,  slot 0 */
+         { 16+4,  16+4,  16+5,  16+6,  16+7},  /* IdSel 23,  slot 1 */
+         { 16+8,  16+8,  16+9, 16+10, 16+11},  /* IdSel 24,  slot 2 */
+       };
+       common_fixup(6, 13, 5, irq_tab, 0);
+}
+
+/*
+ * Fixup configuration for ALCOR
+ *
+ * Summary @ GRU_INT_REQ:
+ * Bit      Meaning
+ * 0        Interrupt Line A from slot 2
+ * 1        Interrupt Line B from slot 2
+ * 2        Interrupt Line C from slot 2
+ * 3        Interrupt Line D from slot 2
+ * 4        Interrupt Line A from slot 1
+ * 5        Interrupt line B from slot 1
+ * 6        Interrupt Line C from slot 1
+ * 7        Interrupt Line D from slot 1
+ * 8        Interrupt Line A from slot 0
+ * 9        Interrupt Line B from slot 0
+ *10        Interrupt Line C from slot 0
+ *11        Interrupt Line D from slot 0
+ *12        Interrupt Line A from slot 4
+ *13        Interrupt Line B from slot 4
+ *14        Interrupt Line C from slot 4
+ *15        Interrupt Line D from slot 4
+ *16        Interrupt Line D from slot 3
+ *17        Interrupt Line D from slot 3
+ *18        Interrupt Line D from slot 3
+ *19        Interrupt Line D from slot 3
+ *20-30     Reserved
+ *31        EISA interrupt
+ *
+ * The device to slot mapping looks like:
+ *
+ * Slot     Device
+ *  7       PCI on board slot 0
+ *  8       PCI on board slot 3
+ *  9       PCI on board slot 4
+ * 10       PCEB (PCI-EISA bridge)
+ * 11       PCI on board slot 2
+ * 12       PCI on board slot 1
+ *   
+ *
+ * This two layered interrupt approach means that we allocate IRQ 16 and 
+ * above for PCI interrupts.  The IRQ relates to which bit the interrupt
+ * comes in on.  This makes interrupt processing much easier.
+ */
+static inline void alcor_fixup(void)
+{
+       char irq_tab[6][5] = {
+         /*INT    INTA   INTB   INTC   INTD */
+         { 16+8,  16+8,  16+9, 16+10, 16+11},  /* IdSel 18,  slot 0 */
+         {16+16, 16+16, 16+17, 16+18, 16+19},  /* IdSel 19,  slot 3 */
+         {16+12, 16+12, 16+13, 16+14, 16+15},  /* IdSel 20,  slot 4 */
+         {   -1,    -1,    -1,    -1,    -1},  /* IdSel 21,  PCEB   */
+         { 16+0,  16+0,  16+1,  16+2,  16+3},  /* IdSel 22,  slot 2 */
+         { 16+4,  16+4,  16+5,  16+6,  16+7},  /* IdSel 23,  slot 1 */
+       };
+       common_fixup(7, 12, 5, irq_tab, 0);
+}
+
+
 /*
  * Fixup configuration for all boards that route the PCI interrupts
  * through the SIO PCI/ISA bridge.  This includes Noname (AXPpci33),
@@ -929,6 +1059,10 @@ unsigned long pcibios_fixup(unsigned long mem_start, unsigned long mem_end)
        eb66_and_eb64p_fixup();
 #elif defined(CONFIG_ALPHA_EB64P)
        eb66_and_eb64p_fixup();
+#elif defined(CONFIG_ALPHA_MIKASA)
+       mikasa_fixup();
+#elif defined(CONFIG_ALPHA_ALCOR)
+       alcor_fixup();
 #else
 #      error You must tell me what kind of platform you want.
 #endif
diff --git a/arch/alpha/kernel/cia.c b/arch/alpha/kernel/cia.c
new file mode 100644 (file)
index 0000000..242a3d4
--- /dev/null
@@ -0,0 +1,486 @@
+/*
+ * Code common to all CIA chips.
+ *
+ * Written by David A Rusling (david.rusling@reo.mts.dec.com).
+ * December 1995.
+ *
+ */
+#include <linux/kernel.h>
+#include <linux/config.h>
+#include <linux/types.h>
+#include <linux/bios32.h>
+#include <linux/pci.h>
+#include <linux/sched.h>
+
+#include <asm/system.h>
+#include <asm/io.h>
+#include <asm/hwrpb.h>
+#include <asm/ptrace.h>
+#include <asm/mmu_context.h>
+
+extern struct hwrpb_struct *hwrpb;
+extern asmlinkage void wrmces(unsigned long mces);
+extern int alpha_sys_type;
+/*
+ * BIOS32-style PCI interface:
+ */
+
+#ifdef CONFIG_ALPHA_CIA
+
+#ifdef DEBUG 
+# define DBG(args)     printk args
+#else
+# define DBG(args)
+#endif
+
+#define vulp   volatile unsigned long *
+#define vuip   volatile unsigned int  *
+
+static volatile unsigned int CIA_mcheck_expected = 0;
+static volatile unsigned int CIA_mcheck_taken = 0;
+static unsigned long CIA_jd, CIA_jd1, CIA_jd2;
+
+
+/*
+ * Given a bus, device, and function number, compute resulting
+ * configuration space address and setup the CIA_HAXR2 register
+ * accordingly.  It is therefore not safe to have concurrent
+ * invocations to configuration space access routines, but there
+ * really shouldn't be any need for this.
+ *
+ * Type 0:
+ *
+ *  3 3|3 3 2 2|2 2 2 2|2 2 2 2|1 1 1 1|1 1 1 1|1 1 
+ *  3 2|1 0 9 8|7 6 5 4|3 2 1 0|9 8 7 6|5 4 3 2|1 0 9 8|7 6 5 4|3 2 1 0
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | | |D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|F|F|F|R|R|R|R|R|R|0|0|
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ *     31:11   Device select bit.
+ *     10:8    Function number
+ *      7:2    Register number
+ *
+ * Type 1:
+ *
+ *  3 3|3 3 2 2|2 2 2 2|2 2 2 2|1 1 1 1|1 1 1 1|1 1 
+ *  3 2|1 0 9 8|7 6 5 4|3 2 1 0|9 8 7 6|5 4 3 2|1 0 9 8|7 6 5 4|3 2 1 0
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * | | | | | | | | | | |B|B|B|B|B|B|B|B|D|D|D|D|D|F|F|F|R|R|R|R|R|R|0|1|
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ *
+ *     31:24   reserved
+ *     23:16   bus number (8 bits = 128 possible buses)
+ *     15:11   Device number (5 bits)
+ *     10:8    function number
+ *      7:2    register number
+ *  
+ * Notes:
+ *     The function number selects which function of a multi-function device 
+ *     (e.g., scsi and ethernet).
+ * 
+ *     The register selects a DWORD (32 bit) register offset.  Hence it
+ *     doesn't get shifted by 2 bits as we want to "drop" the bottom two
+ *     bits.
+ */
+static int mk_conf_addr(unsigned char bus, unsigned char device_fn,
+                       unsigned char where, unsigned long *pci_addr,
+                       unsigned char *type1)
+{
+       unsigned long addr;
+
+       DBG(("mk_conf_addr(bus=%d ,device_fn=0x%x, where=0x%x, pci_addr=0x%p, type1=0x%p)\n",
+            bus, device_fn, where, pci_addr, type1));
+
+       if (bus == 0) {
+               int device = device_fn >> 3;
+
+               /* type 0 configuration cycle: */
+
+               if (device > 20) {
+                       DBG(("mk_conf_addr: device (%d) > 20, returning -1\n", device));
+                       return -1;
+               }
+
+               *type1 = 0;
+               addr = (device_fn << 8) | (where);
+       } else {
+               /* type 1 configuration cycle: */
+               *type1 = 1;
+               addr = (bus << 16) | (device_fn << 8) | (where);
+       }
+       *pci_addr = addr;
+       DBG(("mk_conf_addr: returning pci_addr 0x%lx\n", addr));
+       return 0;
+}
+
+
+static unsigned int conf_read(unsigned long addr, unsigned char type1)
+{
+       unsigned long flags;
+       unsigned int stat0, value;
+       unsigned int cia_cfg = 0; /* to keep gcc quiet */
+
+       save_flags(flags);      /* avoid getting hit by machine check */
+       cli();
+
+       DBG(("conf_read(addr=0x%lx, type1=%d)\n", addr, type1));
+
+       /* reset status register to avoid losing errors: */
+       stat0 = *((volatile unsigned int *)CIA_IOC_CIA_ERR);
+       *((volatile unsigned int *)CIA_IOC_CIA_ERR) = stat0;
+       mb();
+       DBG(("conf_read: CIA ERR was 0x%x\n", stat0));
+       /* if Type1 access, must set CIA CFG */
+       if (type1) {
+               cia_cfg = *((unsigned int *)CIA_IOC_CFG);
+               mb();
+               *((unsigned int *)CIA_IOC_CFG) = cia_cfg | 1;
+               DBG(("conf_read: TYPE1 access\n"));
+       }
+
+       draina();
+       CIA_mcheck_expected = 1;
+       CIA_mcheck_taken = 0;
+       mb();
+       /* access configuration space: */
+       value = *((volatile unsigned int *)addr);
+       mb();
+       mb();
+       if (CIA_mcheck_taken) {
+               CIA_mcheck_taken = 0;
+               value = 0xffffffffU;
+               mb();
+       }
+       CIA_mcheck_expected = 0;
+       mb();
+       /*
+        * david.rusling@reo.mts.dec.com.  This code is needed for the
+        * EB64+ as it does not generate a machine check (why I don't
+        * know).  When we build kernels for one particular platform
+        * then we can make this conditional on the type.
+        */
+#if 1
+       draina();
+
+       /* now look for any errors */
+       stat0 = *((unsigned int *)CIA_IOC_CIA_ERR);
+       DBG(("conf_read: CIA ERR after read 0x%x\n", stat0));
+       if (stat0 & 0x8280U) { /* is any error bit set? */
+               /* if not NDEV, print status */
+               if (!(stat0 & 0x0080)) {
+                       printk("CIA.c:conf_read: got stat0=%x\n", stat0);
+               }
+
+               /* reset error status: */
+               *((volatile unsigned long *)CIA_IOC_CIA_ERR) = stat0;
+               mb();
+               wrmces(0x7);                    /* reset machine check */
+               value = 0xffffffff;
+       }
+#endif
+
+       /* if Type1 access, must reset IOC CFG so normal IO space ops work */
+       if (type1) {
+               *((unsigned int *)CIA_IOC_CFG) = cia_cfg & ~1;
+               mb();
+       }
+
+       DBG(("conf_read(): finished\n"));
+
+       restore_flags(flags);
+       return value;
+}
+
+
+static void conf_write(unsigned long addr, unsigned int value, unsigned char type1)
+{
+       unsigned long flags;
+       unsigned int stat0;
+       unsigned int cia_cfg = 0; /* to keep gcc quiet */
+
+       save_flags(flags);      /* avoid getting hit by machine check */
+       cli();
+
+       /* reset status register to avoid losing errors: */
+       stat0 = *((volatile unsigned int *)CIA_IOC_CIA_ERR);
+       *((volatile unsigned int *)CIA_IOC_CIA_ERR) = stat0;
+       mb();
+       DBG(("conf_write: CIA ERR was 0x%x\n", stat0));
+       /* if Type1 access, must set CIA CFG */
+       if (type1) {
+               cia_cfg = *((unsigned int *)CIA_IOC_CFG);
+               mb();
+               *((unsigned int *)CIA_IOC_CFG) = cia_cfg | 1;
+               DBG(("conf_read: TYPE1 access\n"));
+       }
+
+       draina();
+       CIA_mcheck_expected = 1;
+       mb();
+       /* access configuration space: */
+       *((volatile unsigned int *)addr) = value;
+       mb();
+       mb();
+       CIA_mcheck_expected = 0;
+       mb();
+       /*
+        * david.rusling@reo.mts.dec.com.  This code is needed for the
+        * EB64+ as it does not generate a machine check (why I don't
+        * know).  When we build kernels for one particular platform
+        * then we can make this conditional on the type.
+        */
+#if 1
+       draina();
+
+       /* now look for any errors */
+       stat0 = *((unsigned int *)CIA_IOC_CIA_ERR);
+       DBG(("conf_write: CIA ERR after write 0x%x\n", stat0));
+       if (stat0 & 0x8280U) { /* is any error bit set? */
+               /* if not NDEV, print status */
+               if (!(stat0 & 0x0080)) {
+                       printk("CIA.c:conf_read: got stat0=%x\n", stat0);
+               }
+
+               /* reset error status: */
+               *((volatile unsigned long *)CIA_IOC_CIA_ERR) = stat0;
+               mb();
+               wrmces(0x7);                    /* reset machine check */
+               value = 0xffffffff;
+       }
+#endif
+
+       /* if Type1 access, must reset IOC CFG so normal IO space ops work */
+       if (type1) {
+               *((unsigned int *)CIA_IOC_CFG) = cia_cfg & ~1;
+               mb();
+       }
+
+       DBG(("conf_write(): finished\n"));
+       restore_flags(flags);
+}
+
+
+int pcibios_read_config_byte (unsigned char bus, unsigned char device_fn,
+                             unsigned char where, unsigned char *value)
+{
+       unsigned long addr = CIA_CONF;
+       unsigned long pci_addr;
+       unsigned char type1;
+
+       *value = 0xff;
+
+       if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1) < 0) {
+               return PCIBIOS_SUCCESSFUL;
+       }
+
+       addr |= (pci_addr << 5) + 0x00;
+
+       *value = conf_read(addr, type1) >> ((where & 3) * 8);
+
+       return PCIBIOS_SUCCESSFUL;
+}
+
+
+int pcibios_read_config_word (unsigned char bus, unsigned char device_fn,
+                             unsigned char where, unsigned short *value)
+{
+       unsigned long addr = CIA_CONF;
+       unsigned long pci_addr;
+       unsigned char type1;
+
+       *value = 0xffff;
+
+       if (where & 0x1) {
+               return PCIBIOS_BAD_REGISTER_NUMBER;
+       }
+
+       if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1)) {
+               return PCIBIOS_SUCCESSFUL;
+       }
+
+       addr |= (pci_addr << 5) + 0x08;
+
+       *value = conf_read(addr, type1) >> ((where & 3) * 8);
+       return PCIBIOS_SUCCESSFUL;
+}
+
+
+int pcibios_read_config_dword (unsigned char bus, unsigned char device_fn,
+                              unsigned char where, unsigned int *value)
+{
+       unsigned long addr = CIA_CONF;
+       unsigned long pci_addr;
+       unsigned char type1;
+
+       *value = 0xffffffff;
+       if (where & 0x3) {
+               return PCIBIOS_BAD_REGISTER_NUMBER;
+       }
+
+       if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1)) {
+               return PCIBIOS_SUCCESSFUL;
+       }
+       addr |= (pci_addr << 5) + 0x18;
+       *value = conf_read(addr, type1);
+       return PCIBIOS_SUCCESSFUL;
+}
+
+
+int pcibios_write_config_byte (unsigned char bus, unsigned char device_fn,
+                              unsigned char where, unsigned char value)
+{
+       unsigned long addr = CIA_CONF;
+       unsigned long pci_addr;
+       unsigned char type1;
+
+       if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1) < 0) {
+               return PCIBIOS_SUCCESSFUL;
+       }
+       addr |= (pci_addr << 5) + 0x00;
+       conf_write(addr, value << ((where & 3) * 8), type1);
+       return PCIBIOS_SUCCESSFUL;
+}
+
+
+int pcibios_write_config_word (unsigned char bus, unsigned char device_fn,
+                              unsigned char where, unsigned short value)
+{
+       unsigned long addr = CIA_CONF;
+       unsigned long pci_addr;
+       unsigned char type1;
+
+       if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1) < 0) {
+               return PCIBIOS_SUCCESSFUL;
+       }
+       addr |= (pci_addr << 5) + 0x08;
+       conf_write(addr, value << ((where & 3) * 8), type1);
+       return PCIBIOS_SUCCESSFUL;
+}
+
+
+int pcibios_write_config_dword (unsigned char bus, unsigned char device_fn,
+                               unsigned char where, unsigned int value)
+{
+       unsigned long addr = CIA_CONF;
+       unsigned long pci_addr;
+       unsigned char type1;
+
+       if (mk_conf_addr(bus, device_fn, where, &pci_addr, &type1) < 0) {
+               return PCIBIOS_SUCCESSFUL;
+       }
+       addr |= (pci_addr << 5) + 0x18;
+       conf_write(addr, value << ((where & 3) * 8), type1);
+       return PCIBIOS_SUCCESSFUL;
+}
+
+
+unsigned long cia_init(unsigned long mem_start, unsigned long mem_end)
+{
+        unsigned int cia_err ;
+
+        /* 
+        * Set up error reporting.
+        */
+       cia_err = *(vuip)CIA_IOC_CIA_ERR ;
+       cia_err |= (0x1 << 7) ;   /* master abort */
+       *(vuip)CIA_IOC_CIA_ERR = cia_err ;
+       mb() ;
+
+       /*
+        * Set up the PCI->physical memory translation windows.
+        * For now, windows 1,2 and 3 are disabled.  In the future, we may
+        * want to use them to do scatter/gather DMA.  Window 0
+        * goes at 1 GB and is 1 GB large.
+        */
+
+       *(vuip)CIA_IOC_PCI_W0_BASE = 1U | (CIA_DMA_WIN_BASE & 0xfff00000U);
+       *(vuip)CIA_IOC_PCI_W0_MASK = (CIA_DMA_WIN_SIZE - 1) & 0xfff00000U;
+       *(vuip)CIA_IOC_PCI_T0_BASE = 0;
+
+       *(vuip)CIA_IOC_PCI_W1_BASE = 0x0 ;
+       *(vuip)CIA_IOC_PCI_W2_BASE = 0x0 ;
+       *(vuip)CIA_IOC_PCI_W3_BASE = 0x0 ;
+
+       /*
+        * check ASN in HWRPB for validity, report if bad
+        */
+       if (hwrpb->max_asn != MAX_ASN) {
+               printk("CIA_init: max ASN from HWRPB is bad (0x%lx)\n",
+                       hwrpb->max_asn);
+               hwrpb->max_asn = MAX_ASN;
+       }
+
+        /*
+         * Finally, clear the CIA_CFG register, which gets used
+         *  for PCI Config Space accesses. That is the way
+         *  we want to use it, and we do not want to depend on
+         *  what ARC or SRM might have left behind...
+         */
+        {
+#if 0
+          unsigned int cia_cfg = *((unsigned int *)CIA_IOC_CFG); mb();
+          if (cia_cfg) printk("CIA_init: CFG was 0x%x\n", cia_cfg);
+#endif
+          *((unsigned int *)CIA_IOC_CFG) = 0; mb();
+        }
+       return mem_start;
+}
+
+int cia_pci_clr_err(void)
+{
+       CIA_jd = *((unsigned int *)CIA_IOC_CIA_ERR);
+       DBG(("CIA_pci_clr_err: CIA ERR after read 0x%x\n", CIA_jd));
+       *((unsigned long *)CIA_IOC_CIA_ERR) = 0x0080;
+       mb();
+       return 0;
+}
+
+void cia_machine_check(unsigned long vector, unsigned long la_ptr,
+                        struct pt_regs * regs)
+{
+#if 1
+        printk("CIA machine check\n") ;
+#else
+       struct el_common *mchk_header;
+       struct el_CIA_sysdata_mcheck *mchk_sysdata;
+
+       mchk_header = (struct el_common *)la_ptr;
+
+       mchk_sysdata = 
+         (struct el_CIA_sysdata_mcheck *)(la_ptr + mchk_header->sys_offset);
+
+       DBG(("cia_machine_check: vector=0x%lx la_ptr=0x%lx\n", vector, la_ptr));
+       DBG(("                     pc=0x%lx size=0x%x procoffset=0x%x sysoffset 0x%x\n",
+            regs->pc, mchk_header->size, mchk_header->proc_offset, mchk_header->sys_offset));
+       DBG(("cia_machine_check: expected %d DCSR 0x%lx PEAR 0x%lx\n",
+            CIA_mcheck_expected, mchk_sysdata->epic_dcsr, mchk_sysdata->epic_pear));
+#ifdef DEBUG
+       {
+           unsigned long *ptr;
+           int i;
+
+           ptr = (unsigned long *)la_ptr;
+           for (i = 0; i < mchk_header->size / sizeof(long); i += 2) {
+               printk(" +%lx %lx %lx\n", i*sizeof(long), ptr[i], ptr[i+1]);
+           }
+       }
+#endif /* DEBUG */
+       /*
+        * Check if machine check is due to a badaddr() and if so,
+        * ignore the machine check.
+        */
+       if (CIA_mcheck_expected && (mchk_sysdata->epic_dcsr && 0x0c00UL)) {
+               CIA_mcheck_expected = 0;
+               CIA_mcheck_taken = 1;
+               mb();
+               mb();
+               cia_pci_clr_err();
+               wrmces(0x7);
+               mb();
+               draina();
+       }
+#endif
+}
+
+#endif /* CONFIG_ALPHA_CIA */
index 04d4f85ad17a66a85d332879723ab51a6407f26c..e6a1417f1e8eefcb794a9e0d8c9bc7fdfab86100 100644 (file)
@@ -31,12 +31,18 @@ extern void timer_interrupt(struct pt_regs * regs);
 static unsigned char cache_21 = 0xff;
 static unsigned char cache_A1 = 0xff;
 
-#if NR_IRQS == 33
+#if NR_IRQS == 48
+  static unsigned int cache_irq_mask = 0x7fffffff; /* enable EISA */
+#elif NR_IRQS == 33
   static unsigned int  cache_804 = 0x00ffffef;
 #elif NR_IRQS == 32
+#ifdef CONFIG_ALPHA_MIKASA
+  static unsigned short cache_536 = 0xffff;
+#else
   static unsigned char cache_26 = 0xdf;
   static unsigned char cache_27 = 0xff;
 #endif
+#endif
 
 static void mask_irq(int irq)
 {
@@ -51,12 +57,23 @@ static void mask_irq(int irq)
                        cache_A1 |= mask;
                        outb(cache_A1, 0xA1);
                }
-#if NR_IRQS == 33
+#if NR_IRQS == 48
+       } else {
+               mask = 1 << (irq - 16);
+               cache_irq_mask |= mask;
+               *(unsigned int *)GRU_INT_MASK = ~cache_irq_mask; /* invert */
+#elif NR_IRQS == 33
        } else {
                mask = 1 << (irq - 16);
                cache_804 |= mask;
                outl(cache_804, 0x804);
 #elif NR_IRQS == 32
+#ifdef CONFIG_ALPHA_MIKASA
+       } else {
+               mask = 1 << (irq & 15);
+               cache_536 |= mask;
+               outw(~cache_536, 0x536); /* note invert */
+#else
        } else {
                mask = 1 << (irq & 7);
                if (irq < 24) {
@@ -66,6 +83,7 @@ static void mask_irq(int irq)
                        cache_27 |= mask;
                        outb(cache_27, 0x27);
                }
+#endif
 #endif
        }
 }
@@ -83,12 +101,23 @@ static void unmask_irq(unsigned long irq)
                        cache_A1 &= mask;
                        outb(cache_A1, 0xA1);
                }
-#if NR_IRQS == 33
+#if NR_IRQS == 48
+       } else {
+               mask = ~(1 << (irq - 16));
+               cache_irq_mask &= mask;
+               *(unsigned int *)GRU_INT_MASK = ~cache_irq_mask; /* invert */
+#elif NR_IRQS == 33
        } else {
                mask = ~(1 << (irq - 16));
                cache_804 &= mask;
                outl(cache_804, 0x804);
 #elif NR_IRQS == 32
+#ifdef CONFIG_ALPHA_MIKASA
+       } else {
+               mask = ~(1 << (irq & 15));
+               cache_536 &= mask;
+               outw(~cache_536, 0x536); /* note invert */
+#else
        } else {
                mask = ~(1 << (irq & 7));
 
@@ -99,6 +128,7 @@ static void unmask_irq(unsigned long irq)
                        cache_27 &= mask;
                        outb(cache_27, 0x27);
                }
+#endif
 #endif
        }
 }
@@ -115,9 +145,8 @@ void disable_irq(unsigned int irq_nr)
 
 void enable_irq(unsigned int irq_nr)
 {
-       unsigned long flags, mask;
+       unsigned long flags;
 
-       mask = ~(1 << (irq_nr & 7));
        save_flags(flags);
        cli();
        unmask_irq(irq_nr);
@@ -199,7 +228,8 @@ int request_irq(unsigned int irq,
                shared = 1;
        }
 
-       action = (struct irqaction *)kmalloc(sizeof(struct irqaction), GFP_KERNEL);
+       action = (struct irqaction *)kmalloc(sizeof(struct irqaction),
+                                            GFP_KERNEL);
        if (!action)
                return -ENOMEM;
 
@@ -352,8 +382,8 @@ static inline void isa_device_interrupt(unsigned long vector,
 #      define IACK_SC  APECS_IACK_SC
 #elif defined(CONFIG_ALPHA_LCA)
 #      define IACK_SC  LCA_IACK_SC
-#elif defined(CONFIG_ALPHA_ALCOR)
-#      define IACK_SC  ALCOR_IACK_SC
+#elif defined(CONFIG_ALPHA_CIA)
+#      define IACK_SC  CIA_IACK_SC
 #else
        /*
         * This is bogus but necessary to get it to compile
@@ -559,11 +589,17 @@ unsigned long probe_irq_on(void)
        
        /* now filter out any obviously spurious interrupts */
        irqmask = (((unsigned long)cache_A1)<<8) | (unsigned long) cache_21;
-#if NR_IRQS == 33
+#if NR_IRQS == 48
+       irqmask |= (unsigned long) cache_irq_mask << 16;
+#elif NR_IRQS == 33
        irqmask |= (unsigned long) cache_804 << 16;
 #elif NR_IRQS == 32
+#ifdef CONFIG_ALPHA_MIKASA
+       irqmask |= (unsigned long) cache_536 << 16;
+#else
        irqmask |= ((((unsigned long)cache_26)<<16) |
                    (((unsigned long)cache_27)<<24));
+#endif
 #endif
        irqs &= ~irqmask;
        return irqs;
@@ -580,11 +616,17 @@ int probe_irq_off(unsigned long irqs)
        int i;
        
        irqmask = (((unsigned int)cache_A1)<<8) | (unsigned int)cache_21;
-#if NR_IRQS == 33
+#if NR_IRQS == 48
+       irqmask |= (unsigned long) cache_irq_mask << 16;
+#elif NR_IRQS == 33
        irqmask |= (unsigned long) cache_804 << 16;
 #elif NR_IRQS == 32
+#ifdef CONFIG_ALPHA_MIKASA
+       irqmask |= (unsigned long) cache_536 << 16;
+#else
        irqmask |= ((((unsigned long)cache_26)<<16) |
                    (((unsigned long)cache_27)<<24));
+#endif
 #endif
        irqs &= irqmask & ~1;   /* always mask out irq 0---it's the unused timer */
 #ifdef CONFIG_ALPHA_P2K
@@ -608,10 +650,10 @@ static void machine_check(unsigned long vector, unsigned long la, struct pt_regs
        extern void apecs_machine_check(unsigned long vector, unsigned long la,
                                        struct pt_regs * regs);
        apecs_machine_check(vector, la, regs);
-#elif defined(CONFIG_ALPHA_ALCOR)
-       extern void alcor_machine_check(unsigned long vector, unsigned long la,
+#elif defined(CONFIG_ALPHA_CIA)
+       extern void cia_machine_check(unsigned long vector, unsigned long la,
                                        struct pt_regs * regs);
-       alcor_machine_check(vector, la, regs);
+       cia_machine_check(vector, la, regs);
 #else
        printk("Machine check\n");
 #endif
@@ -638,7 +680,11 @@ asmlinkage void do_entInt(unsigned long type, unsigned long vector, unsigned lon
 #elif NR_IRQS == 33
                        cabriolet_and_eb66p_device_interrupt(vector, &regs);
 #elif NR_IRQS == 32
+#ifdef CONFIG_ALPHA_MIKASA
+#      error  we got a problem here Charlie MIKASA should be SRM console
+#else
                        eb66_and_eb64p_device_interrupt(vector, &regs);
+#endif
 #elif NR_IRQS == 16
                        isa_device_interrupt(vector, &regs);
 #endif
@@ -661,11 +707,17 @@ void init_IRQ(void)
        dma_outb(0, DMA2_RESET_REG);
        dma_outb(0, DMA1_CLR_MASK_REG);
        dma_outb(0, DMA2_CLR_MASK_REG);
-#if NR_IRQS == 33
+#if NR_IRQS == 48
+       *(unsigned int *)GRU_INT_MASK = ~cache_irq_mask; /* invert */
+#elif NR_IRQS == 33
        outl(cache_804, 0x804);
 #elif NR_IRQS == 32
+#ifdef CONFIG_ALPHA_MIKASA
+       outw(~cache_536, 0x536); /* note invert */
+#else
        outb(cache_26, 0x26);
        outb(cache_27, 0x27);
+#endif
 #endif
        enable_irq(2);          /* enable cascade */
 }
index ee9598f687dcaaeb6c7ee6fcb100e079c07c2963..2cacfa5f623e31b31a34188414ab78aa3b8cab9e 100644 (file)
@@ -153,8 +153,8 @@ void setup_arch(char **cmdline_p,
        *memory_start_p = lca_init(*memory_start_p, *memory_end_p);
 #elif defined(CONFIG_ALPHA_APECS)
        *memory_start_p = apecs_init(*memory_start_p, *memory_end_p);
-#elif defined(CONFIG_ALPHA_ALCOR)
-       *memory_start_p = alcor_init(*memory_start_p, *memory_end_p);
+#elif defined(CONFIG_ALPHA_CIA)
+       *memory_start_p = cia_init(*memory_start_p, *memory_end_p);
 #endif
 }
 
index 7a85f707f99de0fc3de9d9b71dc8d2ae99be4a98..501d0e36f6912201adcf7194c0ff98d697f6a7dd 100644 (file)
@@ -92,10 +92,12 @@ void unplug_device(void * data)
        save_flags(flags);
        cli();
        if (dev->current_request == &dev->plug) {
-               dev->current_request = dev->plug.next;
-               dev->plug.next = NULL;
-               if (dev->current_request)
+               struct request * next = dev->plug.next;
+               dev->current_request = next;
+               if (next) {
+                       dev->plug.next = NULL;
                        (dev->request_fn)();
+               }
        }
        restore_flags(flags);
 }
index fdac53acb9ac7774e37b7a2ff4a4b10a18f2b136..0e86c50a0dd8bbe2fed56a0b1e1e4b10ba4405d5 100644 (file)
                                copied from Werner Zimmermann, who copied it
                                from Heiko Schlittermann's mcdx.
        17-1-96         v0.6    Multisession works; some cleanup too.
+       18-4-96         v0.7    Increased some timing constants;
+                               thanks to Luke McFarlane. Also tidied up some
+                               printk behaviour. ISP16 initialization
+                               is now handled by a separate driver.
 */
 \f
 /* Includes */
@@ -87,7 +91,7 @@ static void debug(int debug_this, const char* fmt, ...)
 
        va_start(args, fmt);
        vsprintf(s, fmt, args);
-       printk("optcd: %s\n", s);
+       printk(KERN_DEBUG "optcd: %s\n", s);
        va_end(args);
 }
 #else
@@ -732,7 +736,7 @@ static struct cdrom_subchnl toc[MAX_TRACKS];
 #if DEBUG_TOC
 void toc_debug_info(int i)
 {
-       printk("#%3d ctl %1x, adr %1x, track %2d index %3d"
+       printk(KERN_DEBUG "#%3d ctl %1x, adr %1x, track %2d index %3d"
                "  %2d:%02d.%02d %2d:%02d.%02d\n",
                i, toc[i].cdsc_ctrl, toc[i].cdsc_adr,
                toc[i].cdsc_trk, toc[i].cdsc_ind,
@@ -951,7 +955,7 @@ static int update_toc(void)
                get_multi_disk_info();  /* Here disk_info.multi is set */
 #endif MULTISESSION
        if (disk_info.multi)
-               printk("optcd: Multisession support experimental, "
+               printk(KERN_WARNING "optcd: Multisession support experimental, "
                        "see linux/Documentation/cdrom/optcd\n");
 
        DEBUG((DEBUG_TOC, "exiting update_toc"));
@@ -992,7 +996,7 @@ inline static void opt_invalidate_buffers(void)
 static void transfer(void)
 {
 #if DEBUG_BUFFERS | DEBUG_REQUEST
-       printk("optcd: executing transfer\n");
+       printk(KERN_DEBUG "optcd: executing transfer\n");
 #endif
 
        if (!CURRENT_VALID)
@@ -1078,11 +1082,11 @@ static void poll(void)
        int skip = 0;
 
        if (error) {
-               printk("optcd: I/O error 0x%02x\n", error);
+               printk(KERN_ERR "optcd: I/O error 0x%02x\n", error);
                opt_invalidate_buffers();
                if (!tries--) {
-                       printk("optcd: read block %d failed; Giving up\n",
-                              next_bn);
+                       printk(KERN_ERR "optcd: read block %d failed;"
+                               " Giving up\n", next_bn);
                        if (transfer_is_active)
                                loop_again = 0;
                        if (CURRENT_VALID)
@@ -1104,9 +1108,9 @@ static void poll(void)
                else {
                        state_old = state;
                        if (++state_n > 1)
-                               printk("optcd: %ld times in previous state\n",
-                                       state_n);
-                       printk("optcd: state %d\n", state);
+                               printk(KERN_DEBUG "optcd: %ld times "
+                                       "in previous state\n", state_n);
+                       printk(KERN_DEBUG "optcd: state %d\n", state);
                        state_n = 0;
                }
 #endif
@@ -1141,9 +1145,10 @@ static void poll(void)
                        if ((status & ST_DOOR_OPEN) || (status & ST_DRVERR)) {
                                toc_uptodate = 0;
                                opt_invalidate_buffers();
-                               printk((status & ST_DOOR_OPEN)
-                                      ? "optcd: door open\n"
-                                      : "optcd: disk removed\n");
+                               printk(KERN_WARNING "optcd: %s\n",
+                                       (status & ST_DOOR_OPEN)
+                                       ? "door open"
+                                       : "disk removed");
                                state = S_IDLE;
                                while (CURRENT_VALID)
                                        end_request(0);
@@ -1184,16 +1189,17 @@ static void poll(void)
 #if DEBUG_STATE
                        if (flags != flags_old) {
                                flags_old = flags;
-                               printk("optcd: flags:%x\n", flags);
+                               printk(KERN_DEBUG "optcd: flags:%x\n", flags);
                        }
                        if (flags == FL_STEN)
-                               printk("timeout cnt: %d\n", timeout);
+                               printk(KERN_DEBUG "timeout cnt: %d\n", timeout);
 #endif
 
                        switch (flags) {
                        case FL_DTEN:           /* only STEN low */
                                if (!tries--) {
-                                       printk("optcd: read block %d failed; "
+                                       printk(KERN_ERR
+                                               "optcd: read block %d failed; "
                                                "Giving up\n", next_bn);
                                        if (transfer_is_active) {
                                                tries = 0;
@@ -1216,19 +1222,22 @@ static void poll(void)
                                        break;
                                }
                                if (read_count<=0)
-                                       printk("optcd: warning - try to read"
+                                       printk(KERN_WARNING
+                                               "optcd: warning - try to read"
                                                " 0 frames\n");
                                while (read_count) {
                                        buf_bn[buf_in] = NOBUF;
                                        if (!flag_low(FL_DTEN, BUSY_TIMEOUT)) {
                                        /* should be no waiting here!?? */
-                                               printk("read_count:%d "
+                                               printk(KERN_ERR
+                                                  "read_count:%d "
                                                   "CURRENT->nr_sectors:%ld "
                                                   "buf_in:%d\n",
                                                        read_count,
                                                        CURRENT->nr_sectors,
                                                        buf_in);
-                                               printk("transfer active: %x\n",
+                                               printk(KERN_ERR
+                                                       "transfer active: %x\n",
                                                        transfer_is_active);
                                                read_count = 0;
                                                state = S_STOP;
@@ -1287,7 +1296,8 @@ static void poll(void)
                        break;
                case S_STOP:
                        if (read_count != 0)
-                               printk("optcd: discard data=%x frames\n",
+                               printk(KERN_ERR
+                                       "optcd: discard data=%x frames\n",
                                        read_count);
                        flush_data();
                        if (send_cmd(COMDRVST)) {
@@ -1323,13 +1333,13 @@ static void poll(void)
                        }
                        break;
                default:
-                       printk("optcd: invalid state %d\n", state);
+                       printk(KERN_ERR "optcd: invalid state %d\n", state);
                        return;
                } /* case */
        } /* while */
 
        if (!timeout--) {
-               printk("optcd: timeout in state %d\n", state);
+               printk(KERN_ERR "optcd: timeout in state %d\n", state);
                state = S_STOP;
                if (exec_cmd(COMSTOP) < 0) {
                        state = S_IDLE;
@@ -1349,7 +1359,7 @@ static void do_optcd_request(void)
               CURRENT -> sector, CURRENT -> nr_sectors));
 
        if (disk_info.audio) {
-               printk("optcd: Error: tried to mount an Audio CD\n");
+               printk(KERN_WARNING "optcd: tried to mount an Audio CD\n");
                end_request(0);
                return;
        }
@@ -1521,9 +1531,6 @@ static int cdromreadtocentry(unsigned long arg)
        struct cdrom_tocentry entry;
        struct cdrom_subchnl *tocptr;
 
-       status = verify_area(VERIFY_READ, (void *) arg, sizeof entry);
-       if (status)
-               return status;
        status = verify_area(VERIFY_WRITE, (void *) arg, sizeof entry);
        if (status)
                return status;
@@ -1586,9 +1593,6 @@ static int cdromsubchnl(unsigned long arg)
        int status;
        struct cdrom_subchnl subchnl;
 
-       status = verify_area(VERIFY_READ, (void *) arg, sizeof subchnl);
-       if (status)
-               return status;
        status = verify_area(VERIFY_WRITE, (void *) arg, sizeof subchnl);
        if (status)
                return status;
@@ -1615,9 +1619,6 @@ static int cdromread(unsigned long arg, int blocksize, int cmd)
        struct cdrom_msf msf;
        char buf[CD_FRAMESIZE_RAWER];
 
-       status = verify_area(VERIFY_READ, (void *) arg, sizeof msf);
-       if (status)
-               return status;
        status = verify_area(VERIFY_WRITE, (void *) arg, blocksize);
        if (status)
                return status;
@@ -1667,9 +1668,6 @@ static int cdrommultisession(unsigned long arg)
        int status;
        struct cdrom_multisession ms;
 
-       status = verify_area(VERIFY_READ, (void*) arg, sizeof ms);
-       if (status)
-               return status;
        status = verify_area(VERIFY_WRITE, (void*) arg, sizeof ms);
        if (status)
                return status;
@@ -1692,13 +1690,15 @@ static int cdrommultisession(unsigned long arg)
 
 #if DEBUG_MULTIS
        if (ms.addr_format == CDROM_MSF)
-                       printk("optcd: multisession xa:%d, msf:%02d:%02d.%02d\n",
+                       printk(KERN_DEBUG
+                       "optcd: multisession xa:%d, msf:%02d:%02d.%02d\n",
                        ms.xa_flag,
                        ms.addr.msf.minute,
                        ms.addr.msf.second,
                        ms.addr.msf.frame);
        else
-               printk("optcd: multisession %d, lba:0x%08x [%02d:%02d.%02d])\n",
+               printk(KERN_DEBUG
+                   "optcd: multisession %d, lba:0x%08x [%02d:%02d.%02d])\n",
                        ms.xa_flag,
                        ms.addr.lba,
                        disk_info.last_session.minute,
@@ -1884,7 +1884,7 @@ static int opt_open(struct inode *ip, struct file *fp)
                }
                DEBUG((DEBUG_VFS, "status: %02x", status));
                if ((status & ST_DOOR_OPEN) || (status & ST_DRVERR)) {
-                       printk("optcd: no disk or door open\n");
+                       printk(KERN_INFO "optcd: no disk or door open\n");
                        return -EIO;
                }
                status = exec_cmd(COMLOCK);             /* Lock door */
@@ -1984,7 +1984,7 @@ static int version_ok(void)
        if (ch < 0)
                return 0;
 
-       printk("optcd: Device %s detected\n", devname);
+       printk(KERN_INFO "optcd: Device %s detected\n", devname);
        return ((devname[0] == 'D')
             && (devname[1] == 'O')
             && (devname[2] == 'L')
@@ -2026,32 +2026,33 @@ int optcd_init(void)
        int status;
 
        if (optcd_port <= 0) {
-               printk("optcd: no Optics Storage CDROM Initialization\n");
+               printk(KERN_INFO
+                       "optcd: no Optics Storage CDROM Initialization\n");
                return -EIO;
        }
        if (check_region(optcd_port, 4)) {
-               printk("optcd: conflict, I/O port 0x%x already used\n",
+               printk(KERN_ERR "optcd: conflict, I/O port 0x%x already used\n",
                        optcd_port);
                return -EIO;
        }
 
        if (!reset_drive()) {
-               printk("optcd: drive at 0x%x not ready\n", optcd_port);
+               printk(KERN_ERR "optcd: drive at 0x%x not ready\n", optcd_port);
                return -EIO;
        }
        if (!version_ok()) {
-               printk("optcd: unknown drive detected; aborting\n");
+               printk(KERN_ERR "optcd: unknown drive detected; aborting\n");
                return -EIO;
        }
        status = exec_cmd(COMINITDOUBLE);
        if (status < 0) {
-               printk("optcd: cannot init double speed mode\n");
+               printk(KERN_ERR "optcd: cannot init double speed mode\n");
                DEBUG((DEBUG_VFS, "exec_cmd COMINITDOUBLE: %02x", -status));
                return -EIO;
        }
        if (register_blkdev(MAJOR_NR, "optcd", &opt_fops) != 0)
        {
-               printk("optcd: unable to get major %d\n", MAJOR_NR);
+               printk(KERN_ERR "optcd: unable to get major %d\n", MAJOR_NR);
                return -EIO;
        }
 
@@ -2074,7 +2075,7 @@ int init_module(void)
 void cleanup_module(void)
 {
        if (unregister_blkdev(MAJOR_NR, "optcd") == -EINVAL) {
-               printk("optcd: what's that: can't unregister\n");
+               printk(KERN_ERR "optcd: what's that: can't unregister\n");
                return;
        }
        release_region(optcd_port, 4);
index bcd8b2ebcf1b3105a3ffdb3f1bc8f1f8dfae9f32..5904112db6ed581176d9809d4c7df2ceaeef8bb5 100644 (file)
  *
  *  03/96: Modularised by Angelo Haritsis <ah@doc.ic.ac.uk>
  *
+ *  rs_set_termios fixed to look also for changes of the input
+ *      flags INPCK, BRKINT, PARMRK, IGNPAR and IGNBRK.
+ *                                            Bernd Anhdupl 05/17/96.
+ * 
  * This module exports the following rs232 io functions:
  *
  *     int rs_init(void);
@@ -405,7 +409,9 @@ static _INLINE_ void receive_chars(struct async_struct *info,
                        break;
                tty->flip.count++;
                if (*status & (UART_LSR_BI)) {
+#ifdef SERIAL_DEBUG_INTR
                        printk("handling break....");
+#endif
                        *tty->flip.flag_buf_ptr++ = TTY_BREAK;
                        if (info->flags & ASYNC_SAK)
                                do_SAK(tty);
@@ -1266,6 +1272,8 @@ static void change_speed(struct async_struct *info)
        /*
         * Set up parity check flag
         */
+#define RELEVANT_IFLAG(iflag) (iflag & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
+
        info->read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR;
        if (I_INPCK(info->tty))
                info->read_status_mask |= UART_LSR_FE | UART_LSR_PE;
@@ -1273,10 +1281,13 @@ static void change_speed(struct async_struct *info)
                info->read_status_mask |= UART_LSR_BI;
        
        info->ignore_status_mask = 0;
+#if 0
+       /* This should be safe, but for some broken bits of hardware... */
        if (I_IGNPAR(info->tty)) {
                info->ignore_status_mask |= UART_LSR_PE | UART_LSR_FE;
                info->read_status_mask |= UART_LSR_PE | UART_LSR_FE;
        }
+#endif
        if (I_IGNBRK(info->tty)) {
                info->ignore_status_mask |= UART_LSR_BI;
                info->read_status_mask |= UART_LSR_BI;
@@ -1285,11 +1296,12 @@ static void change_speed(struct async_struct *info)
                 * overruns too.  (For real raw support).
                 */
                if (I_IGNPAR(info->tty)) {
-                       info->ignore_status_mask |= UART_LSR_OE;
-                       info->read_status_mask |= UART_LSR_OE;
+                       info->ignore_status_mask |= UART_LSR_OE | \
+                               UART_LSR_PE | UART_LSR_FE;
+                       info->read_status_mask |= UART_LSR_OE | \
+                               UART_LSR_PE | UART_LSR_FE;
                }
        }
-       
        cli();
        serial_outp(info, UART_LCR, cval | UART_LCR_DLAB);      /* set DLAB */
        serial_outp(info, UART_DLL, quot & 0xff);       /* LS of divisor */
@@ -2065,8 +2077,10 @@ static void rs_set_termios(struct tty_struct *tty, struct termios *old_termios)
 {
        struct async_struct *info = (struct async_struct *)tty->driver_data;
 
-       if (tty->termios->c_cflag == old_termios->c_cflag)
-               return;
+       if (   (tty->termios->c_cflag == old_termios->c_cflag)
+           && (   RELEVANT_IFLAG(tty->termios->c_iflag) 
+               == RELEVANT_IFLAG(old_termios->c_iflag)))
+         return;
 
        change_speed(info);
 
index dd3335611ec40f6b19a1646d5fa05eb93f9ad8af..a992029641a4b36d4669190f5f114a5d827a4965 100644 (file)
@@ -205,6 +205,10 @@ set_palette (void)
 {
   int i, j;
 
+  if (console_blanked || vt_cons[fg_console]->vc_mode == KD_GRAPHICS)
+    return;
+
+
   if (tga_type == 0) { /* 8-plane */
     BT485_WRITE(0x00, BT485_ADDR_PAL_WRITE);
     TGA_WRITE_REG(BT485_DATA_PAL, TGA_RAMDAC_SETUP_REG);
index db25d92d762209fa6082ab31b0dbf1798781846f..9a35ea726e765a2fdd97781c147ef563802fa39b 100644 (file)
@@ -5600,7 +5600,7 @@ NCR53c7xx_abort (Scsi_Cmnd *cmd) {
  */
  
 int 
-NCR53c7xx_reset (Scsi_Cmnd *cmd) {
+NCR53c7xx_reset (Scsi_Cmnd *cmd, unsigned int reset_flags) {
     NCR53c7x0_local_declare();
     unsigned long flags;
     int found = 0;
index 3380a0ea7f440f5a08c2815aebd88c16f4dfa15b..80fbad3b51e00ec4a36af2e920ef91fbc8bc38f9 100644 (file)
@@ -59,7 +59,7 @@
 extern int NCR53c7xx_abort(Scsi_Cmnd *);
 extern int NCR53c7xx_detect(Scsi_Host_Template *tpnt);
 extern int NCR53c7xx_queue_command(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
-extern int NCR53c7xx_reset(Scsi_Cmnd *);
+extern int NCR53c7xx_reset(Scsi_Cmnd *, unsigned int);
 #ifdef MODULE
 extern int NCR53c7xx_release(struct Scsi_Host *);
 #else
index 650b20b4a80bfbccf8d56e77212cec77382b728f..3b376cab08d20830d0603b5bbeff1105acdbc615 100644 (file)
@@ -1,8 +1,8 @@
-comment 'SCSI support type (disk, tape, CDrom)'
+comment 'SCSI support type (disk, tape, CD-ROM)'
 
 dep_tristate 'SCSI disk support' CONFIG_BLK_DEV_SD $CONFIG_SCSI
 dep_tristate 'SCSI tape support' CONFIG_CHR_DEV_ST $CONFIG_SCSI
-dep_tristate 'SCSI CDROM support' CONFIG_BLK_DEV_SR $CONFIG_SCSI
+dep_tristate 'SCSI CD-ROM support' CONFIG_BLK_DEV_SR $CONFIG_SCSI
 dep_tristate 'SCSI generic support' CONFIG_CHR_DEV_SG $CONFIG_SCSI
 
 comment 'Some SCSI devices (e.g. CD jukebox) support multiple LUNs'
index 6250fefdd2eb0650b53040de48f4040f86a3e960..1495a5d81a8a4825cab2bc4c85fba94869d0f8bb 100644 (file)
@@ -63,7 +63,7 @@ static const char *group_1_commands[] = {
 
 static const char *group_2_commands[] = {
 /* 40-41 */ "Change Definition", "Write Same", 
-/* 42-48 */ unknown, unknown, unknown, unknown, unknown, unknown, unknown, 
+/* 42-48 */ unknown, "Read TOC", unknown, unknown, unknown, unknown, unknown, 
 /* 49-4f */ unknown, unknown, unknown, "Log Select", "Log Sense", unknown, unknown,
 /* 50-55 */ unknown, unknown, unknown, unknown, unknown, "Mode Select (10)",
 /* 56-5b */ unknown, unknown, unknown, unknown, "Mode Sense (10)", unknown,
@@ -101,7 +101,11 @@ static void print_opcode(int opcode) {
        printk("%s(0x%02x) ", vendor, opcode); 
        break;
     default:
-       printk("%s ",table[opcode & 0x1f]);
+       if (table[opcode & 0x1f] != unknown)
+           printk("%s ",table[opcode & 0x1f]);
+       else
+           printk("%s(0x%02x) ", unknown, opcode);
+       break;
     }
 }
 #else /* CONST & CONST_COMMAND */
index 6bf0a13f22893518d10d481c81ec7f1a3cc8c9b1..a48b6a49408961be0ffdcacffceae9c455f1833e 100644 (file)
@@ -257,9 +257,6 @@ static Scsi_Host_Template builtin_scsi_hosts[] =
 #ifdef CONFIG_SCSI_QLOGIC_FAS
     QLOGICFAS,
 #endif
-#ifdef CONFIG_SCSI_QLOGIC_ISP
-    QLOGICISP,
-#endif
 #ifdef CONFIG_SCSI_PAS16
     MV_PAS16,
 #endif
@@ -290,6 +287,9 @@ static Scsi_Host_Template builtin_scsi_hosts[] =
 #ifdef CONFIG_SCSI_AM53C974
     AM53C974,
 #endif
+#ifdef CONFIG_SCSI_QLOGIC_ISP
+    QLOGICISP,
+#endif
 #ifdef CONFIG_SCSI_PPA
     PPA,
 #endif
index 710501abd211d4af93ad995645c35e059253d276..586c02f2117a192ad47da224602e4d2fa9af93ad 100644 (file)
@@ -51,6 +51,7 @@
 #include <unistd.h>
 #include <asm/io.h>
 #include <asm/irq.h>
+#include <asm/delay.h>
 
 #include "sd.h"
 #include "hosts.h"
@@ -80,6 +81,8 @@
 #define DEBUG_ISP1020_INT      0
 #define DEBUG_ISP1020_SETUP    0
 
+#define DEFAULT_LOOP_COUNT     1000000
+
 /* End Configuration section *************************************************/
 
 #include <linux/module.h>
 
 #define ISP1020_REV_ID 1
 
+#define MAX_TARGETS    16
+#define MAX_LUNS       8
+
 /* host configuration and control registers */
 #define HOST_HCCR      0xc0    /* host command and control */
 
 #define PCI_ID_LOW     0x00    /* vendor id */
 #define PCI_ID_HIGH    0x02    /* device id */
 #define ISP_CFG0       0x04    /* configuration register #0 */
-#define ISP_CFG1       0x08    /* configuration register #1 */
+#define ISP_CFG1       0x06    /* configuration register #1 */
 #define PCI_INTF_CTL   0x08    /* pci interface control */
 #define PCI_INTF_STS   0x0a    /* pci interface status */
 #define PCI_SEMAPHORE  0x0c    /* pci semaphore */
 /* async event status codes */
 #define ASYNC_SCSI_BUS_RESET           0x8001
 #define SYSTEM_ERROR                   0x8002
-#define REQUEST_TRANSFER ERROR         0x8003
+#define REQUEST_TRANSFER_ERROR         0x8003
 #define RESPONSE_TRANSFER_ERROR                0x8004
 #define REQUEST_QUEUE_WAKEUP           0x8005
 #define EXECUTION_TIMEOUT_RESET                0x8006
@@ -164,13 +170,13 @@ struct Entry_header {
 #define EFLAG_BAD_PAYLOAD      8
 
 struct dataseg {
-    caddr_t   d_base;
-    u_long    d_count;
+    u_int   d_base;
+    u_int   d_count;
 };
 
 struct Command_Entry {
     struct    Entry_header    hdr;
-    caddr_t   handle;
+    u_int     handle;
     u_char    target_lun;
     u_char    target_id;
     u_short   cdb_length;
@@ -196,7 +202,7 @@ struct Command_Entry {
 
 struct Ext_Command_Entry {
     struct    Entry_header    hdr;
-    caddr_t   handle;
+    u_int     handle;
     u_char    target_lun;
     u_char    target_id;
     u_short   cdb_length;
@@ -209,7 +215,7 @@ struct Ext_Command_Entry {
 
 struct Continuation_Entry {
     struct    Entry_header    hdr;
-    u_long    reserved;
+    u_int     reserved;
     struct    dataseg    dataseg0;
     struct    dataseg    dataseg1;
     struct    dataseg    dataseg2;
@@ -221,7 +227,7 @@ struct Continuation_Entry {
 
 struct Marker_Entry {
     struct    Entry_header    hdr;
-    caddr_t   reserved;
+    u_int     reserved;
     u_char    target_lun;
     u_char    target_id;
     u_char    modifier;
@@ -236,14 +242,14 @@ struct Marker_Entry {
 
 struct Status_Entry {
     struct    Entry_header    hdr;
-    caddr_t   handle;
+    u_int     handle;
     u_short   scsi_status;
     u_short   completion_status;
     u_short   state_flags;
     u_short   status_flags;
     u_short   time;
     u_short   req_sense_len;
-    u_long    residual;
+    u_int     residual;
     u_char    rsvd[8];
     u_char    req_sense_data[32];
 };
@@ -290,6 +296,11 @@ struct Status_Entry {
 #define STF_TIMEOUT                    0x0040
 #define STF_NEGOTIATION                        0x0080
 
+/* interface control commands */
+#define ISP_RESET                      0x0001
+#define ISP_EN_INT                     0x0002
+#define ISP_EN_RISC                    0x0004
+
 /* host control commands */
 #define HCCR_NOP                       0x0000
 #define HCCR_RESET                     0x1000
@@ -300,9 +311,11 @@ struct Status_Entry {
 #define HCCR_CLEAR_HOST_INTR           0x6000
 #define HCCR_CLEAR_RISC_INTR           0x7000
 #define HCCR_BP_ENABLE                 0x8000
-#define HCCR_BIOS_ENABLE               0x9000
+#define HCCR_BIOS_DISABLE              0x9000
 #define HCCR_TEST_MODE                 0xf000
 
+#define RISC_BUSY                      0x0004
+
 /* mailbox commands */
 #define MBOX_NO_OP                     0x0000
 #define MBOX_LOAD_RAM                  0x0001
@@ -467,6 +480,7 @@ struct dev_param {
     u_short    synchronous_period;
     u_short    synchronous_offset;
     u_short    device_enable;
+    u_short    reserved; /* pad */
 };
 
 #define REQ_QUEUE_LEN          32
@@ -474,9 +488,9 @@ struct dev_param {
 #define QUEUE_ENTRY_LEN                64
 
 struct isp1020_hostdata {
+    u_int     io_base;
     u_char    irq;
     u_char    bus;
-    u_long    io_base;
     u_char    revision;
     u_char    device_fn;
     u_short   res_queue_in_ptr;
@@ -484,12 +498,12 @@ struct isp1020_hostdata {
     u_short   req_queue_in_ptr;
     u_short   req_queue_out_ptr;
     struct    host_param host_param;
-    struct    dev_param dev_param[16];
+    struct    dev_param dev_param[MAX_TARGETS];
     char      res_queue[RES_QUEUE_LEN][QUEUE_ENTRY_LEN];
     char      req_queue[REQ_QUEUE_LEN][QUEUE_ENTRY_LEN];
 };
 
-struct isp1020_hostdata *irq2host[16];
+struct isp1020_hostdata *irq2host[NR_IRQS];
 
 void isp1020_enable_irqs(struct isp1020_hostdata *);
 void isp1020_disable_irqs(struct isp1020_hostdata *);
@@ -505,8 +519,12 @@ void isp1020_print_status_entry(struct Status_Entry *);
 void isp1020_print_scsi_cmd(Scsi_Cmnd *);
 void isp1020_scsi_done(Scsi_Cmnd *);
 int isp1020_return_status(struct Status_Entry *);
-void isp1020_intr_handler(int, struct pt_regs *);
+void isp1020_intr_handler(int, void *, struct pt_regs *);
 
+struct proc_dir_entry proc_scsi_isp1020 = {
+    PROC_SCSI_QLOGICISP, 7, "isp1020",
+    S_IFDIR | S_IRUGO | S_IXUGO, 2
+};
 
 int isp1020_detect(Scsi_Host_Template *tmpt)
 {
@@ -518,6 +536,8 @@ int isp1020_detect(Scsi_Host_Template *tmpt)
 
     ENTER("isp1020_detect");
 
+    tmpt->proc_dir = &proc_scsi_isp1020;
+
     if (pcibios_present() == 0) {
         printk("qlogicisp : PCI bios not present\n");
         return 0;
@@ -549,7 +569,7 @@ int isp1020_detect(Scsi_Host_Template *tmpt)
 
         scsihost->this_id = hostdata->host_param.initiator_scsi_id;
 
-        if (request_irq(hostdata->irq, isp1020_intr_handler, 0,
+        if (request_irq(hostdata->irq, isp1020_intr_handler, SA_INTERRUPT,
                 "qlogicisp", NULL)) {
             printk("qlogicisp : interrupt %d already in use\n", hostdata->irq);
             scsi_unregister(scsihost);
@@ -557,7 +577,7 @@ int isp1020_detect(Scsi_Host_Template *tmpt)
         }
 
         if (check_region(hostdata->io_base, 0xff)) {
-            printk("qlogicisp : i/o region 0x%04lx-0x%04lx already in use\n",
+            printk("qlogicisp : i/o region 0x%04x-0x%04x already in use\n",
                 hostdata->io_base, hostdata->io_base + 0xff);
             free_irq(hostdata->irq, NULL);
             scsi_unregister(scsihost);
@@ -567,6 +587,8 @@ int isp1020_detect(Scsi_Host_Template *tmpt)
         request_region(hostdata->io_base, 0xff, "qlogicisp");
         irq2host[hostdata->irq] = hostdata;
 
+        outw(0x0, hostdata->io_base + PCI_SEMAPHORE);
+       outw(HCCR_CLEAR_RISC_INTR, hostdata->io_base + HOST_HCCR);
         isp1020_enable_irqs(hostdata);
 
         hosts++;
@@ -605,8 +627,9 @@ const char *isp1020_info(struct Scsi_Host *host)
     ENTER("isp1020_info");
 
     hostdata = (struct isp1020_hostdata *) host->hostdata;
-    sprintf(buf, "QLogic ISP1020 SCSI on PCI bus %d, device %d, irq %d",
-        hostdata->bus, (hostdata->device_fn & 0xf8) >> 3, hostdata->irq);
+    sprintf(buf, "QLogic ISP1020 SCSI on PCI bus %d device %d irq %d base 0x%x",
+           hostdata->bus, (hostdata->device_fn & 0xf8) >> 3, hostdata->irq,
+           hostdata->io_base);
 
     LEAVE("isp1020_info");
 
@@ -627,6 +650,7 @@ int isp1020_queuecommand(Scsi_Cmnd *Cmnd, void (* done)(Scsi_Cmnd *))
     struct scatterlist *sg;
     struct Command_Entry *cmd;
     struct isp1020_hostdata *hostdata;
+    unsigned long flags;
 
     ENTER("isp1020_queuecommand");
 
@@ -635,10 +659,14 @@ int isp1020_queuecommand(Scsi_Cmnd *Cmnd, void (* done)(Scsi_Cmnd *))
 
     DEBUG(isp1020_print_scsi_cmd(Cmnd);)
 
+    save_flags(flags);
+    cli();
+
     hostdata->req_queue_out_ptr = inw(hostdata->io_base + MBOX4);
 
     if ((hostdata->req_queue_in_ptr + 1) % REQ_QUEUE_LEN ==
             hostdata->req_queue_out_ptr) {
+        restore_flags(flags);
         printk("qlogicisp : request queue overflow\n");
         return 1;
     }
@@ -653,11 +681,12 @@ int isp1020_queuecommand(Scsi_Cmnd *Cmnd, void (* done)(Scsi_Cmnd *))
     cmd->hdr.entry_type = ENTRY_COMMAND;
     cmd->hdr.entry_cnt = 1;
 
-    cmd->handle = (caddr_t) Cmnd;
+    cmd->handle = (u_int) virt_to_bus(Cmnd);
     cmd->target_lun = Cmnd->lun;
     cmd->target_id = Cmnd->target;
     cmd->cdb_length = Cmnd->cmd_len;
     cmd->control_flags = CFLAG_READ | CFLAG_WRITE;
+    cmd->time_out = 30;
 
     for (i = 0; i < Cmnd->cmd_len; i++)
         cmd->cdb[i] = Cmnd->cmnd[i];
@@ -668,13 +697,13 @@ int isp1020_queuecommand(Scsi_Cmnd *Cmnd, void (* done)(Scsi_Cmnd *))
         iptr = (int *) &cmd->dataseg0.d_base;
 
         for (i = 0; sg_count > 0; sg_count--, i++) {
-            *iptr++ = (int) sg[i].address;
+            *iptr++ = (int) virt_to_bus(sg[i].address);
             *iptr++ = sg[i].length;
         }
     }
     else {
-        cmd->dataseg0.d_base = (caddr_t) Cmnd->request_buffer;
-        cmd->dataseg0.d_count = (u_long) Cmnd->request_bufflen;
+        cmd->dataseg0.d_base = (u_int) virt_to_bus(Cmnd->request_buffer);
+        cmd->dataseg0.d_count = (u_int) Cmnd->request_bufflen;
         cmd->segment_cnt = 1;
     }
 
@@ -683,6 +712,8 @@ int isp1020_queuecommand(Scsi_Cmnd *Cmnd, void (* done)(Scsi_Cmnd *))
 
     outw(hostdata->req_queue_in_ptr, hostdata->io_base + MBOX4);
 
+    restore_flags(flags);
+
     LEAVE("isp1020_queuecommand");
 
     return 0;
@@ -701,6 +732,7 @@ int isp1020_abort(Scsi_Cmnd *Cmnd)
     u_short param[6];
     struct isp1020_hostdata *hostdata;
     int return_status = SCSI_ABORT_SUCCESS;
+    u_int cmdaddr = virt_to_bus(Cmnd);
 
     ENTER("isp1020_abort");
 
@@ -712,8 +744,8 @@ int isp1020_abort(Scsi_Cmnd *Cmnd)
 
     param[0] = MBOX_ABORT;
     param[1] = (((u_short) Cmnd->target) << 8) | Cmnd->lun;
-    param[2] = (u_long) Cmnd >> 16;
-    param[3] = (u_long) Cmnd & 0xffff;
+    param[2] = cmdaddr >> 16;
+    param[3] = cmdaddr & 0xffff;
 
     isp1020_mbox_command(hostdata, param);
 
@@ -730,7 +762,7 @@ int isp1020_abort(Scsi_Cmnd *Cmnd)
 }
 
 
-int isp1020_reset(Scsi_Cmnd *Cmnd)
+int isp1020_reset(Scsi_Cmnd *Cmnd, unsigned int reset_flags)
 {
     u_short param[6];
     struct isp1020_hostdata *hostdata;
@@ -756,11 +788,11 @@ int isp1020_reset(Scsi_Cmnd *Cmnd)
 
     LEAVE("isp1020_reset");
 
-    return SCSI_RESET_SUCCESS;
+    return return_status;;
 }
 
 
-int isp1020_biosparam(Disk *disk, int n, int ip[])
+int isp1020_biosparam(Disk *disk, kdev_t n, int ip[])
 {
     int size = disk->capacity;
 
@@ -786,16 +818,22 @@ int isp1020_biosparam(Disk *disk, int n, int ip[])
 int isp1020_reset_hardware(struct isp1020_hostdata *hostdata)
 {
     u_short param[6];
+    int loop_count;
 
     ENTER("isp1020_reset_hardware");
 
-    outw(0x0001, hostdata->io_base + PCI_INTF_CTL);
+    outw(ISP_RESET, hostdata->io_base + PCI_INTF_CTL);
     outw(HCCR_RESET, hostdata->io_base + HOST_HCCR);
     outw(HCCR_RELEASE, hostdata->io_base + HOST_HCCR);
-    outw(HCCR_BIOS_ENABLE, hostdata->io_base + HOST_HCCR);
+    outw(HCCR_BIOS_DISABLE, hostdata->io_base + HOST_HCCR);
 
-    while (inw(hostdata->io_base + MBOX0))
+    loop_count = DEFAULT_LOOP_COUNT;
+    while (--loop_count && inw(hostdata->io_base + HOST_HCCR) == RISC_BUSY)
         barrier();
+    if (!loop_count)
+        printk("qlogicisp: reset_hardware loop timeout\n");
+
+    outw(0, hostdata->io_base + ISP_CFG1);
 
 #if DEBUG_ISP1020
     printk("qlogicisp : mbox 0 0x%04x \n", inw(hostdata->io_base + MBOX0));
@@ -864,7 +902,7 @@ int isp1020_reset_hardware(struct isp1020_hostdata *hostdata)
 
 int isp1020_init(struct Scsi_Host *sh)
 {
-    u_long io_base;
+    u_int io_base;
     struct isp1020_hostdata *hostdata;
     u_char bus, device_fn, revision, irq;
     u_short vendor_id, device_id, command;
@@ -914,7 +952,7 @@ int isp1020_init(struct Scsi_Host *sh)
     }
 
     if (revision != ISP1020_REV_ID)
-       printk("qlogicisp : warning : new isp1020 revision id\n");
+       printk("qlogicisp : new isp1020 revision ID (%d)\n", revision);
 
     if (inw(io_base + PCI_ID_LOW) != PCI_VENDOR_ID_QLOGIC
             || inw(io_base + PCI_ID_HIGH) != PCI_DEVICE_ID_QLOGIC_ISP1020) {
@@ -941,7 +979,8 @@ int isp1020_get_defaults(struct isp1020_hostdata *hostdata)
 
     if (!isp1020_verify_nvram(hostdata)) {
         printk("qlogicisp : nvram checksum failure\n");
-        return 1;
+        printk("qlogicisp : attempting to use default parameters\n");
+        return isp1020_set_defaults(hostdata);
     }
 
     value = isp1020_read_nvram_word(hostdata, 2);
@@ -999,7 +1038,7 @@ int isp1020_get_defaults(struct isp1020_hostdata *hostdata)
         hostdata->host_param.max_queue_depth);
 #endif /* DEBUG_ISP1020_SETUP */
 
-    for (i = 0; i < 16; i++) {
+    for (i = 0; i < MAX_TARGETS; i++) {
 
         value = isp1020_read_nvram_word(hostdata, 14 + i * 3);
         hostdata->dev_param[i].device_flags = value & 0xff;
@@ -1042,7 +1081,7 @@ int isp1020_set_defaults(struct isp1020_hostdata *hostdata)
     hostdata->host_param.initiator_scsi_id = 7;
     hostdata->host_param.bus_reset_delay = 3;
     hostdata->host_param.retry_count = 0;
-    hostdata->host_param.retry_delay = 0;
+    hostdata->host_param.retry_delay = 1;
     hostdata->host_param.async_data_setup_time = 6;
     hostdata->host_param.req_ack_active_negation = 1;
     hostdata->host_param.data_line_active_negation = 1;
@@ -1052,8 +1091,8 @@ int isp1020_set_defaults(struct isp1020_hostdata *hostdata)
     hostdata->host_param.selection_timeout = 250;
     hostdata->host_param.max_queue_depth = 256;
 
-    for (i = 0; i < 16; i++) {
-        hostdata->dev_param[i].device_flags = 0xc4;
+    for (i = 0; i < MAX_TARGETS; i++) {
+        hostdata->dev_param[i].device_flags = 0xfd;
         hostdata->dev_param[i].execution_throttle = 16;
         hostdata->dev_param[i].synchronous_period = 25;
         hostdata->dev_param[i].synchronous_offset = 12;
@@ -1069,12 +1108,16 @@ int isp1020_set_defaults(struct isp1020_hostdata *hostdata)
 int isp1020_load_parameters(struct isp1020_hostdata *hostdata)
 {
     int i, k;
-    u_long queue_addr;
+    u_int queue_addr;
     u_short param[6];
     u_short isp_cfg1;
+    unsigned long flags;
 
     ENTER("isp1020_load_parameters");
 
+    save_flags(flags);
+    cli();
+
     outw(hostdata->host_param.fifo_threshold, hostdata->io_base + ISP_CFG1);
 
     param[0] = MBOX_SET_INIT_SCSI_ID;
@@ -1083,6 +1126,7 @@ int isp1020_load_parameters(struct isp1020_hostdata *hostdata)
     isp1020_mbox_command(hostdata, param);
 
     if (param[0] != MBOX_COMMAND_COMPLETE) {
+       restore_flags(flags);
         printk("qlogicisp : set initiator id failure\n");
         return 1;
     }
@@ -1094,6 +1138,7 @@ int isp1020_load_parameters(struct isp1020_hostdata *hostdata)
     isp1020_mbox_command(hostdata, param);
 
     if (param[0] != MBOX_COMMAND_COMPLETE) {
+       restore_flags(flags);
         printk("qlogicisp : set retry count failure\n");
         return 1;
     }
@@ -1104,6 +1149,7 @@ int isp1020_load_parameters(struct isp1020_hostdata *hostdata)
     isp1020_mbox_command(hostdata, param);
 
     if (param[0] != MBOX_COMMAND_COMPLETE) {
+       restore_flags(flags);
         printk("qlogicisp : async data setup time failure\n");
         return 1;
     }
@@ -1115,6 +1161,7 @@ int isp1020_load_parameters(struct isp1020_hostdata *hostdata)
     isp1020_mbox_command(hostdata, param);
 
     if (param[0] != MBOX_COMMAND_COMPLETE) {
+       restore_flags(flags);
         printk("qlogicisp : set active negation state failure\n");
         return 1;
     }
@@ -1126,6 +1173,7 @@ int isp1020_load_parameters(struct isp1020_hostdata *hostdata)
     isp1020_mbox_command(hostdata, param);
 
     if (param[0] != MBOX_COMMAND_COMPLETE) {
+       restore_flags(flags);
         printk("qlogicisp : set pci control parameter failure\n");
         return 1;
     }
@@ -1146,6 +1194,7 @@ int isp1020_load_parameters(struct isp1020_hostdata *hostdata)
     isp1020_mbox_command(hostdata, param);
 
     if (param[0] != MBOX_COMMAND_COMPLETE) {
+       restore_flags(flags);
         printk("qlogicisp : set tag age limit failure\n");
         return 1;
     }
@@ -1156,11 +1205,12 @@ int isp1020_load_parameters(struct isp1020_hostdata *hostdata)
     isp1020_mbox_command(hostdata, param);
 
     if (param[0] != MBOX_COMMAND_COMPLETE) {
+       restore_flags(flags);
         printk("qlogicisp : set selection timeout failure\n");
         return 1;
     }
 
-    for (i = 0; i < 16; i++) {
+    for (i = 0; i < MAX_TARGETS; i++) {
 
         if (!hostdata->dev_param[i].device_enable)
             continue;
@@ -1174,11 +1224,12 @@ int isp1020_load_parameters(struct isp1020_hostdata *hostdata)
         isp1020_mbox_command(hostdata, param);
 
         if (param[0] != MBOX_COMMAND_COMPLETE) {
+           restore_flags(flags);
             printk("qlogicisp : set target parameter failure\n");
             return 1;
         }
 
-        for (k = 0; k < 8; k++) {
+        for (k = 0; k < MAX_LUNS; k++) {
 
             param[0] = MBOX_SET_DEV_QUEUE_PARAMS;
             param[1] = (i << 8) | k;
@@ -1188,13 +1239,14 @@ int isp1020_load_parameters(struct isp1020_hostdata *hostdata)
             isp1020_mbox_command(hostdata, param);
 
             if (param[0] != MBOX_COMMAND_COMPLETE) {
+               restore_flags(flags);
                 printk("qlogicisp : set device queue parameter failure\n");
                 return 1;
             }
         }
     }
 
-    queue_addr = (u_long) &hostdata->res_queue[0][0];
+    queue_addr = (u_int) virt_to_bus(&hostdata->res_queue[0][0]);
 
     param[0] = MBOX_INIT_RES_QUEUE;
     param[1] = RES_QUEUE_LEN;
@@ -1206,11 +1258,12 @@ int isp1020_load_parameters(struct isp1020_hostdata *hostdata)
     isp1020_mbox_command(hostdata, param);
 
     if (param[0] != MBOX_COMMAND_COMPLETE) {
+       restore_flags(flags);
         printk("qlogicisp : set response queue failure\n");
         return 1;
     }
 
-    queue_addr = (u_long) &hostdata->req_queue[0][0];
+    queue_addr = (u_int) virt_to_bus(&hostdata->req_queue[0][0]);
 
     param[0] = MBOX_INIT_REQ_QUEUE;
     param[1] = REQ_QUEUE_LEN;
@@ -1221,23 +1274,35 @@ int isp1020_load_parameters(struct isp1020_hostdata *hostdata)
     isp1020_mbox_command(hostdata, param);
 
     if (param[0] != MBOX_COMMAND_COMPLETE) {
+       restore_flags(flags);
         printk("qlogicisp : set request queue failure\n");
         return 1;
     }
 
+    restore_flags(flags);
+
     LEAVE("isp1020_load_parameters");
 
     return 0;
 }
 
 
+/*
+ * currently, this is only called during initialization or abort/reset,
+ * at which times interrupts are disabled, so polling is OK, I guess...
+ */
 int isp1020_mbox_command(struct isp1020_hostdata *hostdata, u_short param[])
 {
+    int loop_count;
+
     if (mbox_param[param[0]] == 0)
         return 1;
 
-    while (inw(hostdata->io_base + HOST_HCCR) & 0x0080)
+    loop_count = DEFAULT_LOOP_COUNT;
+    while (--loop_count && inw(hostdata->io_base + HOST_HCCR) & 0x0080)
         barrier();
+    if (!loop_count)
+        printk("qlogicisp: mbox_command loop timeout #1\n");
 
     switch(mbox_param[param[0]] >> 4) {
         case 6: outw(param[5], hostdata->io_base + MBOX5);
@@ -1248,19 +1313,21 @@ int isp1020_mbox_command(struct isp1020_hostdata *hostdata, u_short param[])
         case 1: outw(param[0], hostdata->io_base + MBOX0);
     }
 
-    outw(HCCR_CLEAR_RISC_INTR, hostdata->io_base + HOST_HCCR);
     outw(0x0, hostdata->io_base + PCI_SEMAPHORE);
-
+    outw(HCCR_CLEAR_RISC_INTR, hostdata->io_base + HOST_HCCR);
     outw(HCCR_SET_HOST_INTR, hostdata->io_base + HOST_HCCR);
 
-    while (!(inw(hostdata->io_base + PCI_INTF_STS) & 0x04))
+    loop_count = DEFAULT_LOOP_COUNT;
+    while (--loop_count && !(inw(hostdata->io_base + PCI_INTF_STS) & 0x04))
         barrier();
+    if (!loop_count)
+        printk("qlogicisp: mbox_command loop timeout #2\n");
 
-    while (inw(hostdata->io_base + MBOX0) == 0x04)
+    loop_count = DEFAULT_LOOP_COUNT;
+    while (--loop_count && inw(hostdata->io_base + MBOX0) == 0x04)
         barrier();
-
-    outw(HCCR_CLEAR_RISC_INTR, hostdata->io_base + HOST_HCCR);
-    outw(0x0, hostdata->io_base + PCI_SEMAPHORE);
+    if (!loop_count)
+        printk("qlogicisp: mbox_command loop timeout #3\n");
 
     switch(mbox_param[param[0]] & 0xf) {
         case 6: param[5] = inw(hostdata->io_base + MBOX5);
@@ -1271,19 +1338,23 @@ int isp1020_mbox_command(struct isp1020_hostdata *hostdata, u_short param[])
         case 1: param[0] = inw(hostdata->io_base + MBOX0);
     }
 
+    outw(0x0, hostdata->io_base + PCI_SEMAPHORE);
+    outw(HCCR_CLEAR_RISC_INTR, hostdata->io_base + HOST_HCCR);
+
     return 0;
 }
 
 
-#define RESPONSE_QUEUE_UPDATE  0x01
+#define MAILBOX_INTERRUPT      0x01
 
-void isp1020_intr_handler(int irq, struct pt_regs *regs)
+void isp1020_intr_handler(int irq, void *dev_id, struct pt_regs *regs)
 {
     Scsi_Cmnd *Cmnd;
     struct Status_Entry *sts;
     struct Marker_Entry *marker;
     u_short status, add_marker = 0;
     struct isp1020_hostdata *hostdata;
+    int loop_count;
 
     ENTER_INTR("isp1020_intr_handler");
 
@@ -1294,14 +1365,18 @@ void isp1020_intr_handler(int irq, struct pt_regs *regs)
 
     DEBUG_INTR(printk("qlogicisp : interrupt on line %d\n", irq);)
 
-    while (!(inw(hostdata->io_base + PCI_INTF_STS) & 0x04))
+    loop_count = DEFAULT_LOOP_COUNT;
+    while (--loop_count && !(inw(hostdata->io_base + PCI_INTF_STS) & 0x04))
         barrier();
+    if (!loop_count)
+        printk("qlogicisp: intr_handler loop timeout\n");
 
-    hostdata->res_queue_in_ptr = inw(hostdata->io_base + MBOX5);
-    outw(HCCR_CLEAR_RISC_INTR, hostdata->io_base + HOST_HCCR);
     status = inw(hostdata->io_base + PCI_SEMAPHORE);
 
-    if ((status & RESPONSE_QUEUE_UPDATE) == 0) {
+    if ((status & MAILBOX_INTERRUPT) == 0) {
+
+        hostdata->res_queue_in_ptr = inw(hostdata->io_base + MBOX5);
+       outw(HCCR_CLEAR_RISC_INTR, hostdata->io_base + HOST_HCCR);
 
         DEBUG_INTR(printk("qlogicisp : response queue update\n");)
         DEBUG_INTR(printk("qlogicisp : response queue depth %d\n",
@@ -1312,7 +1387,7 @@ void isp1020_intr_handler(int irq, struct pt_regs *regs)
             sts = (struct Status_Entry *)
                 &hostdata->res_queue[hostdata->res_queue_out_ptr][0];
 
-            Cmnd = (Scsi_Cmnd *) sts->handle;
+            Cmnd = (Scsi_Cmnd *) bus_to_virt(sts->handle);
 
             if (sts->completion_status == CS_RESET_OCCURRED
                     || sts->completion_status == CS_ABORTED
@@ -1321,7 +1396,7 @@ void isp1020_intr_handler(int irq, struct pt_regs *regs)
 
             if (sts->state_flags & SF_GOT_SENSE)
                 memcpy(Cmnd->sense_buffer, sts->req_sense_data,
-                    sizeof(Cmnd->sense_buffer));
+                      sizeof(Cmnd->sense_buffer));
 
             DEBUG_INTR(isp1020_print_status_entry(sts);)
 
@@ -1340,10 +1415,7 @@ void isp1020_intr_handler(int irq, struct pt_regs *regs)
     }
     else {
 
-        DEBUG_INTR(printk("qlogicisp : mbox completion\n");)
-
         status = inw(hostdata->io_base + MBOX0);
-        outw(0x0, hostdata->io_base + PCI_SEMAPHORE);
 
         DEBUG_INTR(printk("qlogicisp : mbox completion status: %x\n", status);)
 
@@ -1359,14 +1431,26 @@ void isp1020_intr_handler(int irq, struct pt_regs *regs)
                 printk("qlogicisp : bad mailbox return status\n");
                 break;
         }
+
+        outw(0x0, hostdata->io_base + PCI_SEMAPHORE);
+       outw(HCCR_CLEAR_RISC_INTR, hostdata->io_base + HOST_HCCR);
     }
 
     if (add_marker) {
+#if 0
+        unsigned long flags;
+
+       save_flags(flags);
+       cli();
+#endif
 
         DEBUG_INTR(printk("qlogicisp : adding marker entry\n");)
 
         if ((hostdata->req_queue_in_ptr + 1) % REQ_QUEUE_LEN
                 == hostdata->req_queue_out_ptr) {
+#if 0
+           restore_flags(flags);
+#endif
             printk("qlogicisp : request queue overflow\n");
             return;
         }
@@ -1384,14 +1468,19 @@ void isp1020_intr_handler(int irq, struct pt_regs *regs)
             % REQ_QUEUE_LEN;
 
         outw(hostdata->req_queue_in_ptr, hostdata->io_base + MBOX4);
+
+#if 0
+       restore_flags(flags);
+#endif
     }
 
+    isp1020_enable_irqs(hostdata);
+
     LEAVE_INTR("isp1020_intr_handler");
 }
 
 
-#define NVRAM_DELAY() { \
-    int counter = 0; while (counter++ < 0xc8) barrier(); }
+#define NVRAM_DELAY() udelay(2) /* 2 microsecond delay */
 
 
 u_short isp1020_read_nvram_word(struct isp1020_hostdata *hostdata, u_short byte)
@@ -1409,14 +1498,14 @@ u_short isp1020_read_nvram_word(struct isp1020_hostdata *hostdata, u_short byte)
     }
 
     for (i = 0xf, value = 0; i >= 0; i--) {
-        value = value << 0x1;
+        value <<= 1;
         outw(0x3, hostdata->io_base + PCI_NVRAM); NVRAM_DELAY();
         input = inw(hostdata->io_base + PCI_NVRAM); NVRAM_DELAY();
         outw(0x2, hostdata->io_base + PCI_NVRAM); NVRAM_DELAY();
-        if (input & 0x8) value |= 0x1;
+        if (input & 0x8) value |= 1;
     }
 
-    outw(0x0, hostdata->io_base + PCI_NVRAM);
+    outw(0x0, hostdata->io_base + PCI_NVRAM); NVRAM_DELAY();
 
     return(value);
 }
@@ -1455,7 +1544,7 @@ int isp1020_verify_nvram(struct isp1020_hostdata *hostdata)
 
 void isp1020_enable_irqs(struct isp1020_hostdata *hostdata)
 {
-    outw(0x6, hostdata->io_base + PCI_INTF_CTL);
+    outw(ISP_EN_INT|ISP_EN_RISC, hostdata->io_base + PCI_INTF_CTL);
 }
 
 
@@ -1479,7 +1568,7 @@ void isp1020_print_status_entry(struct Status_Entry *status)
         status->state_flags, status->status_flags);
     printk("qlogicisp : time = 0x%04x, request sense length = 0x%04x\n",
         status->time, status->req_sense_len);
-    printk("qlogicisp : residual transfer length = 0x%08lx\n", status->residual);
+    printk("qlogicisp : residual transfer length = 0x%08x\n", status->residual);
 
     for (i = 0; i < status->req_sense_len; i++)
         printk("qlogicisp : sense data = 0x%02x\n", status->req_sense_data[i]);
index c64d172ad00542e9c06003942bca5a6dd7b1bf1a..465a33c1e09a5766eebd70ae27a2c1761149c6d0 100644 (file)
@@ -48,13 +48,15 @@ int isp1020_release(struct Scsi_Host *);
 const char * isp1020_info(struct Scsi_Host *);
 int isp1020_queuecommand(Scsi_Cmnd *, void (* done)(Scsi_Cmnd *));
 int isp1020_abort(Scsi_Cmnd *);
-int isp1020_reset(Scsi_Cmnd *);
-int isp1020_biosparam(Disk *, int, int[]);
+int isp1020_reset(Scsi_Cmnd *, unsigned int);
+int isp1020_biosparam(Disk *, kdev_t, int[]);
 
 #ifndef NULL
 #define NULL (0)
 #endif
 
+extern struct proc_dir_entry proc_scsi_isp1020;
+
 #define QLOGICISP {                                    \
        /* next */              NULL,                   \
        /* usage_count */       NULL,                   \
index 7ab9189bc9ce71e3fc41936d06b8937ef9718e85..1fafc7ecbba567bc108f1c6b33a4b6eccb9d384a 100644 (file)
@@ -1,24 +1,24 @@
-/* 
- *     Version 2.02 (10:42 June 16, 1995)
- */    
+/*
+ *     Version 2.10 Initiator Firmware (16:13 Oct 18, 1995)
+ */
 
-unsigned short risc_code_version = 2*1024+02;
+unsigned short risc_code_version = 2*1024+10;
 
 unsigned short risc_code_addr01 = 0x1000 ;
 
 #if RELOAD_FIRMWARE
 
 unsigned short risc_code01[] = { 
-       0x0078, 0x1041, 0x0000, 0x2744, 0x0000, 0x2043, 0x4f50, 0x5952,
+       0x0078, 0x1041, 0x0000, 0x283a, 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, 0x322e, 0x3032, 0x2020, 0x2043,
+       0x6572, 0x7369, 0x6f6e, 0x2030, 0x322e, 0x3130, 0x2020, 0x2043,
        0x7573, 0x746f, 0x6d65, 0x7220, 0x4e6f, 0x2e20, 0x3030, 0x2050,
        0x726f, 0x6475, 0x6374, 0x204e, 0x6f2e, 0x2020, 0x3030, 0x2020,
        0x2400, 0x20b9, 0x1212, 0x2071, 0x0010, 0x70c3, 0x0004, 0x20c9,
-       0x42ff, 0x2089, 0x1159, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf,
+       0x43ff, 0x2089, 0x115b, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf,
        0x2020, 0x70d3, 0x0002, 0x3f00, 0x70d6, 0x20c1, 0x0008, 0x2019,
        0x0000, 0x2009, 0xfeff, 0x2100, 0x200b, 0xa5a5, 0xa1ec, 0x7fff,
        0x2d64, 0x206b, 0x0a0a, 0xaddc, 0x3fff, 0x2b54, 0x205b, 0x5050,
@@ -28,923 +28,955 @@ unsigned short risc_code01[] = {
        0x2944, 0x204b, 0x0a0a, 0xa9bc, 0x3fff, 0x2734, 0x203b, 0x5050,
        0x2114, 0xa286, 0x0a0a, 0x0040, 0x109d, 0x284a, 0x263a, 0x20c1,
        0x0004, 0x2009, 0x3fff, 0x2134, 0x200b, 0x5050, 0x2114, 0xa286,
-       0x5050, 0x0040, 0x109e, 0x0078, 0x1161, 0x284a, 0x263a, 0x98c0,
+       0x5050, 0x0040, 0x109e, 0x0078, 0x1163, 0x284a, 0x263a, 0x98c0,
        0xa188, 0x1000, 0x212c, 0x200b, 0xa5a5, 0x2114, 0xa286, 0xa5a5,
        0x0040, 0x10b0, 0x250a, 0xa18a, 0x1000, 0x98c1, 0x0078, 0x10b5,
        0x250a, 0x0078, 0x10b5, 0x2c6a, 0x2a5a, 0x2130, 0xa18a, 0x0040,
-       0x2128, 0xa1a2, 0x3800, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424,
-       0x8424, 0xa192, 0x4300, 0x2009, 0x0000, 0x2001, 0x002f, 0x1078,
-       0x19ee, 0x2218, 0x2079, 0x3800, 0x2fa0, 0x2408, 0x2011, 0x0000,
-       0x20a9, 0x0040, 0x42a4, 0x8109, 0x00c0, 0x10d0, 0x7eda, 0x7dce,
-       0x8528, 0x7dca, 0x7cd2, 0x7bd6, 0x2031, 0x0030, 0x78b3, 0x0101,
-       0x780b, 0x0002, 0x780f, 0x0002, 0x784f, 0x0003, 0x2069, 0x3840,
-       0x681b, 0x0028, 0x6807, 0x0007, 0x680b, 0x00fa, 0x680f, 0x0008,
-       0x6813, 0x0005, 0x681f, 0x0000, 0x6823, 0x0006, 0x6817, 0x0008,
-       0x6827, 0x0000, 0x2069, 0x3900, 0x2011, 0x0020, 0x2009, 0x0010,
-       0x680b, 0x0c19, 0x680f, 0x0019, 0x6803, 0xfd00, 0x6807, 0x0018,
-       0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290, 0x0004, 0x8109, 0x00c0,
-       0x1100, 0x2069, 0x3980, 0x20a9, 0x0080, 0x680b, 0x0040, 0x7bd8,
-       0xa386, 0xfeff, 0x00c0, 0x1122, 0x6817, 0x0100, 0x681f, 0x0064,
-       0x0078, 0x1126, 0x6817, 0x0064, 0x681f, 0x0002, 0xade8, 0x0010,
-       0x0070, 0x112c, 0x0078, 0x1115, 0x1078, 0x1c93, 0x1078, 0x3266,
-       0x1078, 0x182c, 0x1078, 0x3706, 0x3200, 0xa085, 0x000d, 0x2090,
-       0x70c3, 0x0000, 0x0090, 0x1143, 0x70c0, 0xa086, 0x0002, 0x00c0,
-       0x1143, 0x1078, 0x1272, 0x1078, 0x1184, 0x78b0, 0xa005, 0x00c0,
-       0x114f, 0x1078, 0x1a17, 0x0068, 0x1153, 0x1078, 0x1bed, 0x0068,
-       0x1153, 0x1078, 0x191f, 0x00e0, 0x1143, 0x1078, 0x35a4, 0x0078,
-       0x1143, 0x1161, 0x1163, 0x1e39, 0x1e39, 0x32c6, 0x32c6, 0x1e39,
-       0x1e39, 0x0078, 0x1161, 0x0078, 0x1163, 0x0078, 0x1165, 0x0078,
-       0x1167, 0x2009, 0x0022, 0x2104, 0xa086, 0x4000, 0x0040, 0x117f,
-       0x7008, 0x800b, 0x00c8, 0x117f, 0x7007, 0x0002, 0xa08c, 0x0060,
-       0x00c0, 0x1180, 0xa084, 0x0008, 0x0040, 0x117f, 0x087a, 0x097a,
-       0x70c3, 0x4002, 0x0078, 0x1275, 0x0068, 0x11ef, 0x2061, 0x0000,
-       0x6018, 0xa084, 0x0001, 0x00c0, 0x11ef, 0x7814, 0xa005, 0x00c0,
-       0x1195, 0x0010, 0x11f0, 0x0078, 0x11ef, 0x2009, 0x3868, 0x2104,
-       0xa005, 0x00c0, 0x11ef, 0x2009, 0x3871, 0x200b, 0x0000, 0x7914,
-       0xa186, 0x0042, 0x00c0, 0x11ba, 0x7816, 0x2009, 0x386f, 0x2164,
-       0x200b, 0x0000, 0x6018, 0x70c6, 0x6014, 0x70ca, 0x611c, 0xa18c,
-       0xff00, 0x6020, 0xa084, 0x00ff, 0xa105, 0x70ce, 0x1078, 0x181e,
-       0x0078, 0x11ed, 0x7814, 0xa086, 0x0018, 0x00c0, 0x11c1, 0x1078,
-       0x15ce, 0x7817, 0x0000, 0x2009, 0x386f, 0x2104, 0xa065, 0x0040,
-       0x11dd, 0x0c7e, 0x609c, 0x2060, 0x1078, 0x187e, 0x0c7f, 0x609f,
-       0x0000, 0x1078, 0x1695, 0x2009, 0x001c, 0x6087, 0x0103, 0x1078,
-       0x17a5, 0x00c0, 0x11e9, 0x1078, 0x181e, 0x2009, 0x386f, 0x200b,
-       0x0000, 0x2009, 0x3869, 0x2104, 0x200b, 0x0000, 0xa005, 0x0040,
-       0x11ed, 0x2001, 0x4005, 0x0078, 0x1274, 0x0078, 0x1272, 0x007c,
-       0x70c3, 0x0000, 0x70c7, 0x0000, 0x70cb, 0x0000, 0x70cf, 0x0000,
-       0x70c0, 0xa0bc, 0xffc0, 0x00c0, 0x1240, 0x2038, 0x0079, 0x1200,
-       0x1272, 0x12cd, 0x1291, 0x12cd, 0x1336, 0x1336, 0x1288, 0x16a9,
-       0x1341, 0x1280, 0x1295, 0x1297, 0x1299, 0x129b, 0x16ae, 0x1280,
-       0x1353, 0x137e, 0x15e6, 0x16a3, 0x129d, 0x1546, 0x1568, 0x157e,
-       0x159b, 0x1503, 0x1511, 0x1525, 0x1539, 0x13f1, 0x1280, 0x139f,
-       0x13a5, 0x13aa, 0x13af, 0x13b5, 0x13ba, 0x13bf, 0x13c4, 0x13c9,
-       0x13cd, 0x13e2, 0x13ee, 0x1280, 0x1280, 0x1280, 0x1280, 0x13fd,
-       0x1406, 0x1415, 0x143b, 0x1445, 0x144c, 0x1472, 0x1481, 0x1490,
-       0x14a2, 0x14e3, 0x14f3, 0x1280, 0x1280, 0x1280, 0x1280, 0x14f8,
-       0xa0bc, 0xffa0, 0x00c0, 0x1280, 0x2038, 0xa084, 0x001f, 0x0079,
-       0x1249, 0x16c5, 0x16c8, 0x16d8, 0x1754, 0x178d, 0x1280, 0x1280,
-       0x1280, 0x1280, 0x1280, 0x1280, 0x1280, 0x1280, 0x1280, 0x1280,
-       0x1280, 0x12c3, 0x132c, 0x1349, 0x1374, 0x15dc, 0x1280, 0x1280,
-       0x1280, 0x1280, 0x1280, 0x1280, 0x1280, 0x1280, 0x1280, 0x1280,
-       0x1280, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0078, 0x1274, 0x73ce,
-       0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0068, 0x1275, 0x2061,
-       0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x2091, 0x4080, 0x007c,
-       0x70c3, 0x4001, 0x0078, 0x1275, 0x70c3, 0x4006, 0x0078, 0x1275,
-       0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005, 0x53a3, 0x0078,
-       0x1272, 0x70c4, 0x70c3, 0x0004, 0x007a, 0x0078, 0x1272, 0x0078,
-       0x1272, 0x0078, 0x1272, 0x0078, 0x1272, 0x2091, 0x8000, 0x70c3,
-       0x0000, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf, 0x2020, 0x70d3,
-       0x0002, 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, 0x198c, 0x00c0, 0x1284, 0x75d8,
-       0x74dc, 0x75da, 0x74de, 0x0078, 0x12d0, 0x2029, 0x0000, 0x2520,
-       0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x20a0, 0x2098, 0x2031, 0x0030,
-       0x81ff, 0x0040, 0x1272, 0x7007, 0x0004, 0x731a, 0x721e, 0x7422,
-       0x7526, 0x2051, 0x0012, 0x2049, 0x130b, 0x2041, 0x1272, 0x7003,
-       0x0002, 0xa786, 0x0001, 0x0040, 0x12f3, 0xa786, 0x0050, 0x0040,
-       0x12f3, 0x0078, 0x12f9, 0x2049, 0x1318, 0x2041, 0x1324, 0x7003,
-       0x0003, 0x7017, 0x0000, 0x810b, 0x7112, 0x00c8, 0x1301, 0x7017,
-       0x0001, 0x7007, 0x0001, 0xa786, 0x0001, 0x0040, 0x1318, 0xa786,
-       0x0050, 0x0040, 0x1318, 0x700c, 0xa084, 0x007f, 0x2009, 0x0040,
-       0xa102, 0x8004, 0x094a, 0x20a8, 0x26a0, 0x53a6, 0x0078, 0x1169,
-       0x700c, 0xa084, 0x007f, 0x0040, 0x1318, 0x80ac, 0x0048, 0x1318,
-       0x2698, 0x53a5, 0x0078, 0x1169, 0x700c, 0xa084, 0x007f, 0x80ac,
-       0x2698, 0x53a5, 0x0078, 0x1272, 0x1078, 0x198c, 0x00c0, 0x1284,
-       0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x12d0, 0x71c4, 0x70c8,
-       0x2114, 0xa79e, 0x0004, 0x00c0, 0x133e, 0x200a, 0x72ca, 0x0078,
-       0x1271, 0x70c7, 0x0002, 0x70cb, 0x0002, 0x70cf, 0x0000, 0x0078,
-       0x1272, 0x1078, 0x198c, 0x00c0, 0x1284, 0x75d8, 0x76dc, 0x75da,
-       0x76de, 0x0078, 0x1356, 0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8,
-       0x73cc, 0x74d0, 0x70c6, 0x72ca, 0x73ce, 0x74d2, 0xa005, 0x0040,
-       0x136e, 0x8001, 0x787a, 0x7a82, 0x7b86, 0x7d8a, 0x7e8e, 0x7c7e,
-       0x78b0, 0xa084, 0xfffc, 0x78b2, 0x0078, 0x1372, 0x78b0, 0xa085,
-       0x0001, 0x78b2, 0x0078, 0x1272, 0x1078, 0x198c, 0x00c0, 0x1284,
-       0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078, 0x1381, 0x2029, 0x0000,
-       0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d4, 0x70c6, 0x72ca, 0x73ce,
-       0x74d6, 0xa005, 0x0040, 0x1399, 0x8001, 0x7896, 0x7a9e, 0x7ba2,
-       0x7da6, 0x7eaa, 0x7c9a, 0x78b0, 0xa084, 0xfcff, 0x78b2, 0x0078,
-       0x139d, 0x78b0, 0xa085, 0x0100, 0x78b2, 0x0078, 0x1272, 0x2009,
-       0x385b, 0x210c, 0x7ad4, 0x0078, 0x1270, 0x2009, 0x3841, 0x210c,
-       0x0078, 0x1271, 0x2009, 0x3842, 0x210c, 0x0078, 0x1271, 0x2061,
-       0x3840, 0x610c, 0x6210, 0x0078, 0x1270, 0x2009, 0x3845, 0x210c,
-       0x0078, 0x1271, 0x2009, 0x3846, 0x210c, 0x0078, 0x1271, 0x2009,
-       0x3847, 0x210c, 0x0078, 0x1271, 0x2009, 0x3848, 0x210c, 0x0078,
-       0x1271, 0x7908, 0x7a0c, 0x0078, 0x1270, 0x71c4, 0x8107, 0xa084,
-       0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8, 0x3900, 0x6a00, 0x6804,
-       0xa084, 0x0008, 0x0040, 0x13df, 0x6b08, 0x0078, 0x13e0, 0x6b0c,
-       0x0078, 0x126f, 0x77c4, 0x1078, 0x183c, 0x2091, 0x8000, 0x6b1c,
-       0x6a14, 0x2091, 0x8001, 0x2708, 0x0078, 0x126f, 0x794c, 0x0078,
-       0x1271, 0x77c4, 0x1078, 0x183c, 0x2091, 0x8000, 0x6908, 0x6a18,
-       0x6b10, 0x2091, 0x8001, 0x0078, 0x126f, 0x71c4, 0xa182, 0x0010,
-       0x00c8, 0x126a, 0x1078, 0x1d19, 0x0078, 0x126f, 0x71c4, 0xa182,
-       0x0010, 0x00c8, 0x126a, 0x2011, 0x3841, 0x2204, 0x007e, 0x2112,
-       0x1078, 0x1cd2, 0x017f, 0x0078, 0x1271, 0x71c4, 0x2011, 0x1433,
-       0x20a9, 0x0008, 0x2204, 0xa106, 0x0040, 0x1425, 0x8210, 0x0070,
-       0x1423, 0x0078, 0x141a, 0x0078, 0x126a, 0xa292, 0x1433, 0x027e,
-       0x2011, 0x3842, 0x2204, 0x2112, 0x017f, 0x007e, 0x1078, 0x1cde,
-       0x017f, 0x0078, 0x1271, 0x03e8, 0x00fa, 0x01f4, 0x02ee, 0x0064,
-       0x0019, 0x0032, 0x004b, 0x2061, 0x3840, 0x610c, 0x6210, 0x70c4,
-       0x600e, 0x70c8, 0x6012, 0x0078, 0x1270, 0x2061, 0x3840, 0x6114,
-       0x70c4, 0x6016, 0x0078, 0x1271, 0x71c4, 0x2011, 0x0004, 0x2019,
-       0x1212, 0xa186, 0x0028, 0x0040, 0x1465, 0x2011, 0x0005, 0x2019,
-       0x1212, 0xa186, 0x0032, 0x0040, 0x1465, 0x2011, 0x0006, 0x2019,
-       0x2323, 0xa186, 0x003c, 0x00c0, 0x126a, 0x2061, 0x3840, 0x6018,
-       0x007e, 0x611a, 0x23b8, 0x1078, 0x1cef, 0x1078, 0x3706, 0x017f,
-       0x0078, 0x1271, 0x71c4, 0xa184, 0xffcf, 0x00c0, 0x126a, 0x2011,
-       0x3847, 0x2204, 0x2112, 0x007e, 0x1078, 0x1d11, 0x017f, 0x0078,
-       0x1271, 0x71c4, 0xa182, 0x0010, 0x00c8, 0x126a, 0x2011, 0x3848,
-       0x2204, 0x007e, 0x2112, 0x1078, 0x1d00, 0x017f, 0x0078, 0x1271,
-       0x71c4, 0x72c8, 0xa184, 0xfffd, 0x00c0, 0x1269, 0xa284, 0xfffd,
-       0x00c0, 0x1269, 0x2100, 0x7908, 0x780a, 0x2200, 0x7a0c, 0x780e,
-       0x0078, 0x1270, 0x71c4, 0x8107, 0xa084, 0x000f, 0x8003, 0x8003,
-       0x8003, 0xa0e8, 0x3900, 0x2019, 0x0000, 0x72c8, 0x6800, 0x007e,
-       0xa226, 0x0040, 0x14d1, 0x6a02, 0xa484, 0x2000, 0x0040, 0x14ba,
-       0xa39d, 0x0010, 0xa484, 0x1000, 0x0040, 0x14c0, 0xa39d, 0x0008,
-       0xa484, 0x4000, 0x0040, 0x14d1, 0x810f, 0xa284, 0x4000, 0x0040,
-       0x14cd, 0x1078, 0x1d33, 0x0078, 0x14d1, 0x1078, 0x1d25, 0x0078,
-       0x14d1, 0x72cc, 0x82ff, 0x0040, 0x14dc, 0x6808, 0xa206, 0x0040,
-       0x14dc, 0x6a0a, 0xa39d, 0x000a, 0x6804, 0xa305, 0x6806, 0x027f,
-       0x6b0c, 0x0078, 0x126f, 0x77c4, 0x1078, 0x183c, 0x2091, 0x8000,
-       0x6a14, 0x6b1c, 0x2091, 0x8001, 0x70c8, 0x6816, 0x70cc, 0x681e,
-       0x2708, 0x0078, 0x126f, 0x70c4, 0x794c, 0x784e, 0x0078, 0x1271,
-       0x71c4, 0x72c8, 0x73cc, 0xa182, 0x0010, 0x00c8, 0x126a, 0x1078,
-       0x1d41, 0x0078, 0x126f, 0x77c4, 0x1078, 0x183c, 0x2091, 0x8000,
-       0x6a08, 0xa295, 0x0002, 0x6a0a, 0x2091, 0x8001, 0x2708, 0x0078,
-       0x1270, 0x77c4, 0x1078, 0x183c, 0x2091, 0x8000, 0x6a08, 0xa294,
-       0xfff9, 0x6a0a, 0x6804, 0xa005, 0x0040, 0x1520, 0x1078, 0x1c74,
-       0x2091, 0x8001, 0x2708, 0x0078, 0x1270, 0x77c4, 0x1078, 0x183c,
-       0x2091, 0x8000, 0x6a08, 0xa295, 0x0004, 0x6a0a, 0x6804, 0xa005,
-       0x0040, 0x1534, 0x1078, 0x1c74, 0x2091, 0x8001, 0x2708, 0x0078,
-       0x1270, 0x77c4, 0x2041, 0x0001, 0x2049, 0x0005, 0x2051, 0x0020,
-       0x1078, 0x1849, 0x2708, 0x6a08, 0x0078, 0x1270, 0x77c4, 0x73c8,
-       0x72cc, 0x77c6, 0x73ca, 0x72ce, 0x1078, 0x18c4, 0x00c0, 0x1564,
-       0x6818, 0xa005, 0x0040, 0x155e, 0x2708, 0x1078, 0x1d51, 0x00c0,
-       0x155e, 0x7817, 0x0015, 0x2091, 0x8001, 0x007c, 0x2091, 0x8001,
-       0x2001, 0x4005, 0x0078, 0x1274, 0x2091, 0x8001, 0x0078, 0x1272,
-       0x77c4, 0x77c6, 0x2061, 0x3840, 0x60a3, 0x0003, 0x67b6, 0x60c7,
-       0x0005, 0x2041, 0x0021, 0x2049, 0x0005, 0x2051, 0x0020, 0x1078,
-       0x1849, 0x7817, 0x0016, 0x1078, 0x1c74, 0x007c, 0x77c4, 0x77c6,
-       0xa7bc, 0xff00, 0x2061, 0x3840, 0x60a3, 0x0002, 0x67b6, 0x60c7,
-       0x0005, 0x7817, 0x0017, 0x1078, 0x1c74, 0x2041, 0x0021, 0x2049,
-       0x0004, 0x2051, 0x0010, 0x1078, 0x1849, 0x8738, 0xa784, 0x0007,
-       0x00c0, 0x1593, 0x007c, 0x78b0, 0xa084, 0x0003, 0x00c0, 0x15bf,
-       0x2039, 0x0000, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008,
-       0x1078, 0x183c, 0x2091, 0x8000, 0x6808, 0xa80d, 0x690a, 0x2091,
-       0x8001, 0x8738, 0xa784, 0x0007, 0x00c0, 0x15a8, 0xa7bc, 0xff00,
-       0x873f, 0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0, 0x15a8, 0x7817,
-       0x0018, 0x2061, 0x3840, 0x60a3, 0x0001, 0x60c7, 0x0005, 0x1078,
-       0x1c74, 0x78b0, 0xa085, 0x0002, 0x78b2, 0x007c, 0x78b0, 0xa084,
-       0xfffd, 0x78b2, 0xa084, 0x0001, 0x00c0, 0x15d8, 0x1078, 0x1906,
-       0x71c4, 0x71c6, 0x794a, 0x007c, 0x1078, 0x198c, 0x00c0, 0x1284,
-       0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x15e9, 0x2029, 0x0000,
-       0x2520, 0x71c4, 0x73c8, 0x72cc, 0x71c6, 0x73ca, 0x72ce, 0x2079,
-       0x3800, 0x1078, 0x1815, 0x0040, 0x1691, 0x20a9, 0x0005, 0x20a1,
-       0x3816, 0x41a1, 0x2009, 0x0040, 0x1078, 0x17df, 0x0040, 0x1604,
-       0x1078, 0x181e, 0x0078, 0x1691, 0x6004, 0xa084, 0xff00, 0x8007,
-       0x8009, 0x0040, 0x1665, 0x0c7e, 0x2c68, 0x1078, 0x1815, 0x0040,
-       0x1634, 0x2c00, 0x689e, 0x8109, 0x00c0, 0x160c, 0x609f, 0x0000,
-       0x0c7f, 0x0c7e, 0x7218, 0x731c, 0x7420, 0x7524, 0x2c68, 0x689c,
-       0xa065, 0x0040, 0x1664, 0x2009, 0x0040, 0x1078, 0x17df, 0x00c0,
-       0x164d, 0x6004, 0xa084, 0x00ff, 0xa086, 0x0002, 0x00c0, 0x1634,
-       0x2d00, 0x6002, 0x0078, 0x161a, 0x0c7f, 0x0c7e, 0x609c, 0x2060,
-       0x1078, 0x187e, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1695, 0x2009,
-       0x001c, 0x6008, 0xa085, 0x0200, 0x600a, 0x6004, 0x6086, 0x1078,
-       0x17a5, 0x1078, 0x181e, 0x0078, 0x1691, 0x0c7f, 0x0c7e, 0x609c,
-       0x2060, 0x1078, 0x187e, 0x0c7f, 0x609f, 0x0000, 0x1078, 0x1695,
-       0x2009, 0x001c, 0x6087, 0x0103, 0x601b, 0x0003, 0x1078, 0x17a5,
-       0x1078, 0x181e, 0x0078, 0x1691, 0x0c7f, 0x74c4, 0x73c8, 0x72cc,
-       0x6014, 0x7817, 0x0012, 0x0e7e, 0x2071, 0x3840, 0x70a3, 0x0005,
-       0x70a7, 0x0000, 0x73aa, 0x72ae, 0x74b2, 0x70b6, 0x70bb, 0x0000,
-       0x2c00, 0x70be, 0x70c3, 0x0000, 0xa02e, 0x2530, 0x611c, 0xa184,
-       0x0060, 0x0040, 0x1685, 0x1078, 0x320a, 0x0e7f, 0x6596, 0x65a6,
-       0x669a, 0x669a, 0x60af, 0x0000, 0x60b3, 0x0000, 0x1078, 0x1c74,
-       0x007c, 0x70c3, 0x4005, 0x0078, 0x1275, 0x20a9, 0x0005, 0x2099,
-       0x3816, 0x530a, 0x2100, 0xa210, 0xa399, 0x0000, 0xa4a1, 0x0000,
-       0xa5a9, 0x0000, 0x007c, 0x71c4, 0x70c7, 0x0000, 0x7906, 0x0078,
-       0x1272, 0x71c4, 0x71c6, 0x2168, 0x0078, 0x16b0, 0x2069, 0x1000,
-       0x690c, 0xa016, 0x2d04, 0xa210, 0x8d68, 0x8109, 0x00c0, 0x16b2,
-       0xa285, 0x0000, 0x00c0, 0x16c0, 0x70c3, 0x4000, 0x0078, 0x16c2,
-       0x70c3, 0x4003, 0x70ca, 0x0078, 0x1275, 0x79c8, 0x0078, 0x1271,
-       0x71c4, 0x71c6, 0x2198, 0x20a1, 0x0042, 0x20a9, 0x0004, 0x53a3,
-       0x21a0, 0x2099, 0x0042, 0x20a9, 0x0004, 0x53a3, 0x0078, 0x1272,
-       0x70c4, 0x2068, 0x2079, 0x3800, 0x1078, 0x1815, 0x0040, 0x1750,
-       0x6007, 0x0001, 0x600b, 0x0000, 0x602b, 0x0000, 0x601b, 0x0006,
-       0x6a10, 0xa28c, 0x0007, 0xa284, 0x00f0, 0x8003, 0x8003, 0x8003,
-       0x8003, 0xa105, 0x6016, 0xa284, 0x0800, 0x0040, 0x16fb, 0x601b,
-       0x000a, 0x0078, 0x1701, 0xa284, 0x1000, 0x0040, 0x1701, 0x601b,
-       0x000c, 0xa284, 0x0300, 0x0040, 0x170a, 0x602b, 0x0001, 0x8004,
-       0x8004, 0x8004, 0xa085, 0x0001, 0x601e, 0x6023, 0x0000, 0x6027,
-       0x000a, 0xa284, 0x0400, 0x0040, 0x1717, 0x602b, 0x0000, 0x20a9,
-       0x0006, 0xac80, 0x000b, 0x20a0, 0xad80, 0x0005, 0x2098, 0x53a3,
-       0xa284, 0x0300, 0x00c0, 0x172c, 0x6046, 0x604a, 0x604e, 0x6052,
-       0x6096, 0x609a, 0x0078, 0x1736, 0x6800, 0x6046, 0x6804, 0x604a,
-       0x6e08, 0x664e, 0x6d0c, 0x6552, 0x6596, 0x669a, 0x6014, 0x7817,
-       0x0042, 0x2c08, 0x2061, 0x3840, 0x60a3, 0x0005, 0x60a7, 0x0000,
-       0x60ab, 0x0000, 0x60af, 0x0000, 0x60b3, 0x0000, 0x60b6, 0x61be,
-       0xa284, 0x0400, 0x60c2, 0x1078, 0x31f5, 0x1078, 0x1c74, 0x007c,
-       0x70c3, 0x4005, 0x0078, 0x1275, 0x78e0, 0xa005, 0x0040, 0x1280,
-       0x2091, 0x8000, 0x70c4, 0x800a, 0x2011, 0x0010, 0x810c, 0x0048,
-       0x1766, 0x3a00, 0xa084, 0xfff7, 0x0078, 0x1769, 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, 0x175e, 0x3a00, 0xa085, 0x0008,
-       0x20d0, 0x2091, 0x8001, 0x0078, 0x1272, 0x2011, 0x04fd, 0x2204,
-       0xa082, 0x0004, 0x0048, 0x17a1, 0x78e3, 0x0001, 0x2009, 0xff01,
-       0x200a, 0x2001, 0x000c, 0x20d8, 0x2001, 0x000c, 0x20d0, 0x0078,
-       0x1272, 0x2001, 0x4005, 0x0078, 0x1274, 0x700c, 0xa084, 0x00ff,
-       0x0040, 0x17b1, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0,
-       0x17ac, 0x7017, 0x0000, 0x7112, 0x721a, 0x731e, 0x7422, 0x7526,
+       0x2128, 0xa1a2, 0x3900, 0x8424, 0x8424, 0x8424, 0x8424, 0x8424,
+       0x8424, 0xa192, 0x4400, 0x2009, 0x0000, 0x2001, 0x002f, 0x1078,
+       0x1a70, 0x2218, 0x2079, 0x3900, 0x2fa0, 0x2408, 0x2011, 0x0000,
+       0x20a9, 0x0040, 0x42a4, 0x8109, 0x00c0, 0x10d0, 0x7eea, 0x7dde,
+       0x8528, 0x7dda, 0x7ce2, 0x7be6, 0x787b, 0x0000, 0x2031, 0x0030,
+       0x78c3, 0x0101, 0x780b, 0x0002, 0x780f, 0x0002, 0x784f, 0x0003,
+       0x2069, 0x3940, 0x681b, 0x0028, 0x6807, 0x0007, 0x680b, 0x00fa,
+       0x680f, 0x0008, 0x6813, 0x0005, 0x681f, 0x0000, 0x6823, 0x0006,
+       0x6817, 0x0008, 0x6827, 0x0000, 0x2069, 0x3a00, 0x2011, 0x0020,
+       0x2009, 0x0010, 0x680b, 0x0c19, 0x680f, 0x0019, 0x6803, 0xfd00,
+       0x6807, 0x0018, 0x6a1a, 0x2d00, 0xa0e8, 0x0008, 0xa290, 0x0004,
+       0x8109, 0x00c0, 0x1102, 0x2069, 0x3a80, 0x20a9, 0x0080, 0x680b,
+       0x0040, 0x7be8, 0xa386, 0xfeff, 0x00c0, 0x1124, 0x6817, 0x0100,
+       0x681f, 0x0064, 0x0078, 0x1128, 0x6817, 0x0064, 0x681f, 0x0002,
+       0xade8, 0x0010, 0x0070, 0x112e, 0x0078, 0x1117, 0x1078, 0x1d15,
+       0x1078, 0x3366, 0x1078, 0x18a4, 0x1078, 0x37fc, 0x3200, 0xa085,
+       0x000d, 0x2090, 0x70c3, 0x0000, 0x0090, 0x1145, 0x70c0, 0xa086,
+       0x0002, 0x00c0, 0x1145, 0x1078, 0x1274, 0x1078, 0x1186, 0x78c0,
+       0xa005, 0x00c0, 0x1151, 0x1078, 0x1a99, 0x0068, 0x1155, 0x1078,
+       0x1c6f, 0x0068, 0x1155, 0x1078, 0x1997, 0x00e0, 0x1145, 0x1078,
+       0x369a, 0x0078, 0x1145, 0x1163, 0x1165, 0x1ebb, 0x1ebb, 0x33d7,
+       0x33d7, 0x1ebb, 0x1ebb, 0x0078, 0x1163, 0x0078, 0x1165, 0x0078,
+       0x1167, 0x0078, 0x1169, 0x2009, 0x0022, 0x2104, 0xa086, 0x4000,
+       0x0040, 0x1181, 0x7008, 0x800b, 0x00c8, 0x1181, 0x7007, 0x0002,
+       0xa08c, 0x0060, 0x00c0, 0x1182, 0xa084, 0x0008, 0x0040, 0x1181,
+       0x087a, 0x097a, 0x70c3, 0x4002, 0x0078, 0x1277, 0x0068, 0x11f1,
+       0x2061, 0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x11f1, 0x7814,
+       0xa005, 0x00c0, 0x1197, 0x0010, 0x11f2, 0x0078, 0x11f1, 0x2009,
+       0x3968, 0x2104, 0xa005, 0x00c0, 0x11f1, 0x2009, 0x3971, 0x200b,
+       0x0000, 0x7914, 0xa186, 0x0042, 0x00c0, 0x11bc, 0x7816, 0x2009,
+       0x396f, 0x2164, 0x200b, 0x0000, 0x6018, 0x70c6, 0x6014, 0x70ca,
+       0x611c, 0xa18c, 0xff00, 0x6020, 0xa084, 0x00ff, 0xa105, 0x70ce,
+       0x1078, 0x1896, 0x0078, 0x11ef, 0x7814, 0xa086, 0x0018, 0x00c0,
+       0x11c3, 0x1078, 0x1622, 0x7817, 0x0000, 0x2009, 0x396f, 0x2104,
+       0xa065, 0x0040, 0x11df, 0x0c7e, 0x609c, 0x2060, 0x1078, 0x18f6,
+       0x0c7f, 0x609f, 0x0000, 0x1078, 0x16e9, 0x2009, 0x001c, 0x6087,
+       0x0103, 0x1078, 0x181d, 0x00c0, 0x11eb, 0x1078, 0x1896, 0x2009,
+       0x396f, 0x200b, 0x0000, 0x2009, 0x3969, 0x2104, 0x200b, 0x0000,
+       0xa005, 0x0040, 0x11ef, 0x2001, 0x4005, 0x0078, 0x1276, 0x0078,
+       0x1274, 0x007c, 0x70c3, 0x0000, 0x70c7, 0x0000, 0x70cb, 0x0000,
+       0x70cf, 0x0000, 0x70c0, 0xa0bc, 0xffc0, 0x00c0, 0x1242, 0x2038,
+       0x0079, 0x1202, 0x1274, 0x12cf, 0x1293, 0x12cf, 0x1338, 0x1338,
+       0x128a, 0x16fd, 0x1343, 0x1282, 0x1297, 0x1299, 0x129b, 0x129d,
+       0x1702, 0x1282, 0x1355, 0x1380, 0x163a, 0x16f7, 0x129f, 0x1569,
+       0x158b, 0x15a1, 0x15be, 0x1526, 0x1534, 0x1548, 0x155c, 0x13f3,
+       0x1282, 0x13a1, 0x13a7, 0x13ac, 0x13b1, 0x13b7, 0x13bc, 0x13c1,
+       0x13c6, 0x13cb, 0x13cf, 0x13e4, 0x13f0, 0x1282, 0x1282, 0x1282,
+       0x1282, 0x13ff, 0x1408, 0x1417, 0x143d, 0x1447, 0x144e, 0x1474,
+       0x1483, 0x1492, 0x14a4, 0x1506, 0x1516, 0x1282, 0x1282, 0x1282,
+       0x1282, 0x151b, 0xa0bc, 0xffa0, 0x00c0, 0x1282, 0x2038, 0xa084,
+       0x001f, 0x0079, 0x124b, 0x1719, 0x171c, 0x172c, 0x17a8, 0x17e1,
+       0x1282, 0x1282, 0x1282, 0x1282, 0x1282, 0x1282, 0x1282, 0x1282,
+       0x1282, 0x1282, 0x1282, 0x12c5, 0x132e, 0x134b, 0x1376, 0x1630,
+       0x1282, 0x1282, 0x1282, 0x1282, 0x1282, 0x17f9, 0x1803, 0x1807,
+       0x1815, 0x1282, 0x1282, 0x72ca, 0x71c6, 0x2001, 0x4006, 0x0078,
+       0x1276, 0x73ce, 0x72ca, 0x71c6, 0x2001, 0x4000, 0x70c2, 0x0068,
+       0x1277, 0x2061, 0x0000, 0x601b, 0x0001, 0x2091, 0x5000, 0x2091,
+       0x4080, 0x007c, 0x70c3, 0x4001, 0x0078, 0x1277, 0x70c3, 0x4006,
+       0x0078, 0x1277, 0x2099, 0x0041, 0x20a1, 0x0041, 0x20a9, 0x0005,
+       0x53a3, 0x0078, 0x1274, 0x70c4, 0x70c3, 0x0004, 0x007a, 0x0078,
+       0x1274, 0x0078, 0x1274, 0x0078, 0x1274, 0x0078, 0x1274, 0x2091,
+       0x8000, 0x70c3, 0x0000, 0x70c7, 0x4953, 0x70cb, 0x5020, 0x70cf,
+       0x2020, 0x70d3, 0x0002, 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, 0x1a04, 0x00c0,
+       0x1286, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x12d2, 0x2029,
+       0x0000, 0x2520, 0x71d0, 0x72c8, 0x73cc, 0x70c4, 0x20a0, 0x2098,
+       0x2031, 0x0030, 0x81ff, 0x0040, 0x1274, 0x7007, 0x0004, 0x731a,
+       0x721e, 0x7422, 0x7526, 0x2051, 0x0012, 0x2049, 0x130d, 0x2041,
+       0x1274, 0x7003, 0x0002, 0xa786, 0x0001, 0x0040, 0x12f5, 0xa786,
+       0x0050, 0x0040, 0x12f5, 0x0078, 0x12fb, 0x2049, 0x131a, 0x2041,
+       0x1326, 0x7003, 0x0003, 0x7017, 0x0000, 0x810b, 0x7112, 0x00c8,
+       0x1303, 0x7017, 0x0001, 0x7007, 0x0001, 0xa786, 0x0001, 0x0040,
+       0x131a, 0xa786, 0x0050, 0x0040, 0x131a, 0x700c, 0xa084, 0x007f,
+       0x2009, 0x0040, 0xa102, 0x8004, 0x094a, 0x20a8, 0x26a0, 0x53a6,
+       0x0078, 0x116b, 0x700c, 0xa084, 0x007f, 0x0040, 0x131a, 0x80ac,
+       0x0048, 0x131a, 0x2698, 0x53a5, 0x0078, 0x116b, 0x700c, 0xa084,
+       0x007f, 0x80ac, 0x2698, 0x53a5, 0x0078, 0x1274, 0x1078, 0x1a04,
+       0x00c0, 0x1286, 0x75d8, 0x74dc, 0x75da, 0x74de, 0x0078, 0x12d2,
+       0x71c4, 0x70c8, 0x2114, 0xa79e, 0x0004, 0x00c0, 0x1340, 0x200a,
+       0x72ca, 0x0078, 0x1273, 0x70c7, 0x0002, 0x70cb, 0x000a, 0x70cf,
+       0x0000, 0x0078, 0x1274, 0x1078, 0x1a04, 0x00c0, 0x1286, 0x75d8,
+       0x76dc, 0x75da, 0x76de, 0x0078, 0x1358, 0x2029, 0x0000, 0x2530,
+       0x70c4, 0x72c8, 0x73cc, 0x74d0, 0x70c6, 0x72ca, 0x73ce, 0x74d2,
+       0xa005, 0x0040, 0x1370, 0x8001, 0x788a, 0x7a92, 0x7b96, 0x7d9a,
+       0x7e9e, 0x7c8e, 0x78c0, 0xa084, 0xfffc, 0x78c2, 0x0078, 0x1374,
+       0x78c0, 0xa085, 0x0001, 0x78c2, 0x0078, 0x1274, 0x1078, 0x1a04,
+       0x00c0, 0x1286, 0x75d8, 0x76dc, 0x75da, 0x76de, 0x0078, 0x1383,
+       0x2029, 0x0000, 0x2530, 0x70c4, 0x72c8, 0x73cc, 0x74d4, 0x70c6,
+       0x72ca, 0x73ce, 0x74d6, 0xa005, 0x0040, 0x139b, 0x8001, 0x78a6,
+       0x7aae, 0x7bb2, 0x7db6, 0x7eba, 0x7caa, 0x78c0, 0xa084, 0xfcff,
+       0x78c2, 0x0078, 0x139f, 0x78c0, 0xa085, 0x0100, 0x78c2, 0x0078,
+       0x1274, 0x2009, 0x395f, 0x210c, 0x7ae4, 0x0078, 0x1272, 0x2009,
+       0x3941, 0x210c, 0x0078, 0x1273, 0x2009, 0x3942, 0x210c, 0x0078,
+       0x1273, 0x2061, 0x3940, 0x610c, 0x6210, 0x0078, 0x1272, 0x2009,
+       0x3945, 0x210c, 0x0078, 0x1273, 0x2009, 0x3946, 0x210c, 0x0078,
+       0x1273, 0x2009, 0x3947, 0x210c, 0x0078, 0x1273, 0x2009, 0x3948,
+       0x210c, 0x0078, 0x1273, 0x7908, 0x7a0c, 0x0078, 0x1272, 0x71c4,
+       0x8107, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e8, 0x3a00,
+       0x6a00, 0x6804, 0xa084, 0x0008, 0x0040, 0x13e1, 0x6b08, 0x0078,
+       0x13e2, 0x6b0c, 0x0078, 0x1271, 0x77c4, 0x1078, 0x18b4, 0x2091,
+       0x8000, 0x6b1c, 0x6a14, 0x2091, 0x8001, 0x2708, 0x0078, 0x1271,
+       0x794c, 0x0078, 0x1273, 0x77c4, 0x1078, 0x18b4, 0x2091, 0x8000,
+       0x6908, 0x6a18, 0x6b10, 0x2091, 0x8001, 0x0078, 0x1271, 0x71c4,
+       0xa182, 0x0010, 0x00c8, 0x126c, 0x1078, 0x1d9b, 0x0078, 0x1271,
+       0x71c4, 0xa182, 0x0010, 0x00c8, 0x126c, 0x2011, 0x3941, 0x2204,
+       0x007e, 0x2112, 0x1078, 0x1d54, 0x017f, 0x0078, 0x1273, 0x71c4,
+       0x2011, 0x1435, 0x20a9, 0x0008, 0x2204, 0xa106, 0x0040, 0x1427,
+       0x8210, 0x0070, 0x1425, 0x0078, 0x141c, 0x0078, 0x126c, 0xa292,
+       0x1435, 0x027e, 0x2011, 0x3942, 0x2204, 0x2112, 0x017f, 0x007e,
+       0x1078, 0x1d60, 0x017f, 0x0078, 0x1273, 0x03e8, 0x00fa, 0x01f4,
+       0x02ee, 0x0064, 0x0019, 0x0032, 0x004b, 0x2061, 0x3940, 0x610c,
+       0x6210, 0x70c4, 0x600e, 0x70c8, 0x6012, 0x0078, 0x1272, 0x2061,
+       0x3940, 0x6114, 0x70c4, 0x6016, 0x0078, 0x1273, 0x71c4, 0x2011,
+       0x0004, 0x2019, 0x1212, 0xa186, 0x0028, 0x0040, 0x1467, 0x2011,
+       0x0005, 0x2019, 0x1212, 0xa186, 0x0032, 0x0040, 0x1467, 0x2011,
+       0x0006, 0x2019, 0x2323, 0xa186, 0x003c, 0x00c0, 0x126c, 0x2061,
+       0x3940, 0x6018, 0x007e, 0x611a, 0x23b8, 0x1078, 0x1d71, 0x1078,
+       0x37fc, 0x017f, 0x0078, 0x1273, 0x71c4, 0xa184, 0xffcf, 0x00c0,
+       0x126c, 0x2011, 0x3947, 0x2204, 0x2112, 0x007e, 0x1078, 0x1d93,
+       0x017f, 0x0078, 0x1273, 0x71c4, 0xa182, 0x0010, 0x00c8, 0x126c,
+       0x2011, 0x3948, 0x2204, 0x007e, 0x2112, 0x1078, 0x1d82, 0x017f,
+       0x0078, 0x1273, 0x71c4, 0x72c8, 0xa184, 0xfffd, 0x00c0, 0x126b,
+       0xa284, 0xfffd, 0x00c0, 0x126b, 0x2100, 0x7908, 0x780a, 0x2200,
+       0x7a0c, 0x780e, 0x0078, 0x1272, 0x71c4, 0x8107, 0xa084, 0x000f,
+       0x8003, 0x8003, 0x8003, 0xa0e8, 0x3a00, 0x2019, 0x0000, 0x72c8,
+       0x6800, 0x007e, 0xa226, 0x0040, 0x14d3, 0x6a02, 0xa484, 0x2000,
+       0x0040, 0x14bc, 0xa39d, 0x0010, 0xa484, 0x1000, 0x0040, 0x14c2,
+       0xa39d, 0x0008, 0xa484, 0x4000, 0x0040, 0x14d3, 0x810f, 0xa284,
+       0x4000, 0x0040, 0x14cf, 0x1078, 0x1db5, 0x0078, 0x14d3, 0x1078,
+       0x1da7, 0x0078, 0x14d3, 0x72cc, 0x82ff, 0x0040, 0x14ff, 0x6808,
+       0xa206, 0x0040, 0x14ff, 0xa2a4, 0x00ff, 0x2061, 0x3940, 0x6118,
+       0xa186, 0x0028, 0x0040, 0x14ec, 0xa186, 0x0032, 0x0040, 0x14f2,
+       0xa186, 0x003c, 0x0040, 0x14f8, 0xa482, 0x0064, 0x00c8, 0x126d,
+       0x0078, 0x14fc, 0xa482, 0x0050, 0x00c8, 0x126d, 0x0078, 0x14fc,
+       0xa482, 0x0043, 0x00c8, 0x126d, 0x6a0a, 0xa39d, 0x000a, 0x6804,
+       0xa305, 0x6806, 0x027f, 0x6b0c, 0x0078, 0x1271, 0x77c4, 0x1078,
+       0x18b4, 0x2091, 0x8000, 0x6a14, 0x6b1c, 0x2091, 0x8001, 0x70c8,
+       0x6816, 0x70cc, 0x681e, 0x2708, 0x0078, 0x1271, 0x70c4, 0x794c,
+       0x784e, 0x0078, 0x1273, 0x71c4, 0x72c8, 0x73cc, 0xa182, 0x0010,
+       0x00c8, 0x126c, 0x1078, 0x1dc3, 0x0078, 0x1271, 0x77c4, 0x1078,
+       0x18b4, 0x2091, 0x8000, 0x6a08, 0xa295, 0x0002, 0x6a0a, 0x2091,
+       0x8001, 0x2708, 0x0078, 0x1272, 0x77c4, 0x1078, 0x18b4, 0x2091,
+       0x8000, 0x6a08, 0xa294, 0xfff9, 0x6a0a, 0x6804, 0xa005, 0x0040,
+       0x1543, 0x1078, 0x1cf6, 0x2091, 0x8001, 0x2708, 0x0078, 0x1272,
+       0x77c4, 0x1078, 0x18b4, 0x2091, 0x8000, 0x6a08, 0xa295, 0x0004,
+       0x6a0a, 0x6804, 0xa005, 0x0040, 0x1557, 0x1078, 0x1cf6, 0x2091,
+       0x8001, 0x2708, 0x0078, 0x1272, 0x77c4, 0x2041, 0x0001, 0x2049,
+       0x0005, 0x2051, 0x0020, 0x1078, 0x18c1, 0x2708, 0x6a08, 0x0078,
+       0x1272, 0x77c4, 0x73c8, 0x72cc, 0x77c6, 0x73ca, 0x72ce, 0x1078,
+       0x193c, 0x00c0, 0x1587, 0x6818, 0xa005, 0x0040, 0x1581, 0x2708,
+       0x1078, 0x1dd3, 0x00c0, 0x1581, 0x7817, 0x0015, 0x2091, 0x8001,
+       0x007c, 0x2091, 0x8001, 0x2001, 0x4005, 0x0078, 0x1276, 0x2091,
+       0x8001, 0x0078, 0x1274, 0x77c4, 0x77c6, 0x2061, 0x3940, 0x60a3,
+       0x0003, 0x67b6, 0x60c7, 0x000f, 0x2041, 0x0021, 0x2049, 0x0005,
+       0x2051, 0x0020, 0x1078, 0x18c1, 0x7817, 0x0016, 0x1078, 0x1cf6,
+       0x007c, 0x77c4, 0x77c6, 0xa7bc, 0xff00, 0x2061, 0x3940, 0x60a3,
+       0x0002, 0x67b6, 0x60c7, 0x000f, 0x7817, 0x0017, 0x1078, 0x1cf6,
+       0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0010, 0x1078, 0x18c1,
+       0x8738, 0xa784, 0x0007, 0x00c0, 0x15b6, 0x007c, 0x78c0, 0xa084,
+       0x0003, 0x00c0, 0x15e2, 0x2039, 0x0000, 0x2041, 0x0021, 0x2049,
+       0x0004, 0x2051, 0x0008, 0x1078, 0x18b4, 0x2091, 0x8000, 0x6808,
+       0xa80d, 0x690a, 0x2091, 0x8001, 0x8738, 0xa784, 0x0007, 0x00c0,
+       0x15cb, 0xa7bc, 0xff00, 0x873f, 0x8738, 0x873f, 0xa784, 0x0f00,
+       0x00c0, 0x15cb, 0x2091, 0x8000, 0x2069, 0x0100, 0x6830, 0xa084,
+       0x0040, 0x0040, 0x160b, 0x684b, 0x0004, 0x20a9, 0x0014, 0x6848,
+       0xa084, 0x0004, 0x0040, 0x15f8, 0x0070, 0x15f8, 0x0078, 0x15ef,
+       0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0001, 0x0040,
+       0x1605, 0x0070, 0x1605, 0x0078, 0x15fc, 0x20a9, 0x00fa, 0x0070,
+       0x160b, 0x0078, 0x1607, 0x2079, 0x3900, 0x7817, 0x0018, 0x2061,
+       0x3940, 0x60a3, 0x0001, 0x60c7, 0x000f, 0x78c0, 0xa085, 0x0002,
+       0x78c2, 0x6808, 0xa084, 0xfffd, 0x680a, 0x681b, 0x0047, 0x2091,
+       0x8001, 0x007c, 0x78c0, 0xa084, 0xfffd, 0x78c2, 0xa084, 0x0001,
+       0x00c0, 0x162c, 0x1078, 0x197e, 0x71c4, 0x71c6, 0x794a, 0x007c,
+       0x1078, 0x1a04, 0x00c0, 0x1286, 0x75d8, 0x74dc, 0x75da, 0x74de,
+       0x0078, 0x163d, 0x2029, 0x0000, 0x2520, 0x71c4, 0x73c8, 0x72cc,
+       0x71c6, 0x73ca, 0x72ce, 0x2079, 0x3900, 0x1078, 0x188d, 0x0040,
+       0x16e5, 0x20a9, 0x0005, 0x20a1, 0x3916, 0x41a1, 0x2009, 0x0040,
+       0x1078, 0x1857, 0x0040, 0x1658, 0x1078, 0x1896, 0x0078, 0x16e5,
+       0x6004, 0xa084, 0xff00, 0x8007, 0x8009, 0x0040, 0x16b9, 0x0c7e,
+       0x2c68, 0x1078, 0x188d, 0x0040, 0x1688, 0x2c00, 0x689e, 0x8109,
+       0x00c0, 0x1660, 0x609f, 0x0000, 0x0c7f, 0x0c7e, 0x7218, 0x731c,
+       0x7420, 0x7524, 0x2c68, 0x689c, 0xa065, 0x0040, 0x16b8, 0x2009,
+       0x0040, 0x1078, 0x1857, 0x00c0, 0x16a1, 0x6004, 0xa084, 0x00ff,
+       0xa086, 0x0002, 0x00c0, 0x1688, 0x2d00, 0x6002, 0x0078, 0x166e,
+       0x0c7f, 0x0c7e, 0x609c, 0x2060, 0x1078, 0x18f6, 0x0c7f, 0x609f,
+       0x0000, 0x1078, 0x16e9, 0x2009, 0x001c, 0x6008, 0xa085, 0x0200,
+       0x600a, 0x6004, 0x6086, 0x1078, 0x181d, 0x1078, 0x1896, 0x0078,
+       0x16e5, 0x0c7f, 0x0c7e, 0x609c, 0x2060, 0x1078, 0x18f6, 0x0c7f,
+       0x609f, 0x0000, 0x1078, 0x16e9, 0x2009, 0x001c, 0x6087, 0x0103,
+       0x601b, 0x0003, 0x1078, 0x181d, 0x1078, 0x1896, 0x0078, 0x16e5,
+       0x0c7f, 0x74c4, 0x73c8, 0x72cc, 0x6014, 0x7817, 0x0012, 0x0e7e,
+       0x2071, 0x3940, 0x70a3, 0x0005, 0x70a7, 0x0000, 0x73aa, 0x72ae,
+       0x74b2, 0x70b6, 0x70bb, 0x0000, 0x2c00, 0x70be, 0x70c3, 0x0000,
+       0xa02e, 0x2530, 0x611c, 0xa184, 0x0060, 0x0040, 0x16d9, 0x1078,
+       0x330a, 0x0e7f, 0x6596, 0x65a6, 0x669a, 0x669a, 0x60af, 0x0000,
+       0x60b3, 0x0000, 0x1078, 0x1cf6, 0x007c, 0x70c3, 0x4005, 0x0078,
+       0x1277, 0x20a9, 0x0005, 0x2099, 0x3916, 0x530a, 0x2100, 0xa210,
+       0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x007c, 0x71c4,
+       0x70c7, 0x0000, 0x7906, 0x0078, 0x1274, 0x71c4, 0x71c6, 0x2168,
+       0x0078, 0x1704, 0x2069, 0x1000, 0x690c, 0xa016, 0x2d04, 0xa210,
+       0x8d68, 0x8109, 0x00c0, 0x1706, 0xa285, 0x0000, 0x00c0, 0x1714,
+       0x70c3, 0x4000, 0x0078, 0x1716, 0x70c3, 0x4003, 0x70ca, 0x0078,
+       0x1277, 0x79d8, 0x0078, 0x1273, 0x71c4, 0x71c6, 0x2198, 0x20a1,
+       0x0042, 0x20a9, 0x0004, 0x53a3, 0x21a0, 0x2099, 0x0042, 0x20a9,
+       0x0004, 0x53a3, 0x0078, 0x1274, 0x70c4, 0x2068, 0x2079, 0x3900,
+       0x1078, 0x188d, 0x0040, 0x17a4, 0x6007, 0x0001, 0x600b, 0x0000,
+       0x602b, 0x0000, 0x601b, 0x0006, 0x6a10, 0xa28c, 0x0007, 0xa284,
+       0x00f0, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0x6016, 0xa284,
+       0x0800, 0x0040, 0x174f, 0x601b, 0x000a, 0x0078, 0x1755, 0xa284,
+       0x1000, 0x0040, 0x1755, 0x601b, 0x000c, 0xa284, 0x0300, 0x0040,
+       0x175e, 0x602b, 0x0001, 0x8004, 0x8004, 0x8004, 0xa085, 0x0001,
+       0x601e, 0x6023, 0x0000, 0x6027, 0x000a, 0xa284, 0x0400, 0x0040,
+       0x176b, 0x602b, 0x0000, 0x20a9, 0x0006, 0xac80, 0x000b, 0x20a0,
+       0xad80, 0x0005, 0x2098, 0x53a3, 0xa284, 0x0300, 0x00c0, 0x1780,
+       0x6046, 0x604a, 0x604e, 0x6052, 0x6096, 0x609a, 0x0078, 0x178a,
+       0x6800, 0x6046, 0x6804, 0x604a, 0x6e08, 0x664e, 0x6d0c, 0x6552,
+       0x6596, 0x669a, 0x6014, 0x7817, 0x0042, 0x2c08, 0x2061, 0x3940,
+       0x60a3, 0x0005, 0x60a7, 0x0000, 0x60ab, 0x0000, 0x60af, 0x0000,
+       0x60b3, 0x0000, 0x60b6, 0x61be, 0xa284, 0x0400, 0x60c2, 0x1078,
+       0x32f5, 0x1078, 0x1cf6, 0x007c, 0x70c3, 0x4005, 0x0078, 0x1277,
+       0x78f0, 0xa005, 0x0040, 0x1282, 0x2091, 0x8000, 0x70c4, 0x800a,
+       0x2011, 0x0010, 0x810c, 0x0048, 0x17ba, 0x3a00, 0xa084, 0xfff7,
+       0x0078, 0x17bd, 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,
+       0x17b2, 0x3a00, 0xa085, 0x0008, 0x20d0, 0x2091, 0x8001, 0x0078,
+       0x1274, 0x2011, 0x04fd, 0x2204, 0xa082, 0x0004, 0x0048, 0x17f5,
+       0x78f3, 0x0001, 0x2009, 0xff01, 0x200a, 0x2001, 0x000c, 0x20d8,
+       0x2001, 0x000c, 0x20d0, 0x0078, 0x1274, 0x2001, 0x4005, 0x0078,
+       0x1276, 0x7978, 0x71c6, 0x71c4, 0xa182, 0x0003, 0x00c8, 0x126c,
+       0x797a, 0x0078, 0x1274, 0x7978, 0x71c6, 0x0078, 0x1274, 0x796c,
+       0x71c6, 0x71c4, 0x796e, 0x7970, 0x71ca, 0x71c8, 0x7972, 0x7974,
+       0x71ce, 0x71cc, 0x7976, 0x0078, 0x1274, 0x796c, 0x71c6, 0x7970,
+       0x71ca, 0x7974, 0x71ce, 0x0078, 0x1274, 0x700c, 0xa084, 0x00ff,
+       0x0040, 0x1829, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0,
+       0x1824, 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, 0x17c9,
-       0x7108, 0x8103, 0x00c8, 0x17c9, 0x7014, 0xa005, 0x0040, 0x17c9,
+       0x0001, 0x2009, 0x0022, 0x2104, 0xa084, 0x4000, 0x00c0, 0x1841,
+       0x7108, 0x8103, 0x00c8, 0x1841, 0x7014, 0xa005, 0x0040, 0x1841,
        0x7007, 0x0002, 0xa184, 0x0060, 0x7003, 0x0000, 0x007c, 0x700c,
-       0xa084, 0x00ff, 0x0040, 0x17eb, 0x7007, 0x0004, 0x7004, 0xa084,
-       0x0004, 0x00c0, 0x17e6, 0x7017, 0x0000, 0x7112, 0x721a, 0x7422,
+       0xa084, 0x00ff, 0x0040, 0x1863, 0x7007, 0x0004, 0x7004, 0xa084,
+       0x0004, 0x00c0, 0x185e, 0x7017, 0x0000, 0x7112, 0x721a, 0x7422,
        0x7526, 0x731e, 0x2099, 0x0030, 0x8108, 0x81ac, 0x780c, 0xa085,
        0x0001, 0x7002, 0x7007, 0x0001, 0x2009, 0x0022, 0x2104, 0xa084,
-       0x4000, 0x00c0, 0x17fc, 0x7008, 0x800b, 0x00c8, 0x17fc, 0x7007,
-       0x0002, 0xa08c, 0x0060, 0x00c0, 0x1812, 0xac80, 0x0001, 0x20a0,
+       0x4000, 0x00c0, 0x1874, 0x7008, 0x800b, 0x00c8, 0x1874, 0x7007,
+       0x0002, 0xa08c, 0x0060, 0x00c0, 0x188a, 0xac80, 0x0001, 0x20a0,
        0x53a5, 0xa006, 0x7003, 0x0000, 0x007c, 0x7850, 0xa065, 0x0040,
-       0x181d, 0x2c04, 0x7852, 0x2063, 0x0000, 0x007c, 0x0f7e, 0x2079,
-       0x3800, 0x7850, 0x2062, 0x2c00, 0xa005, 0x00c0, 0x1829, 0x1078,
-       0x1e2a, 0x7852, 0x0f7f, 0x007c, 0x2011, 0x4300, 0x7a52, 0x7bd4,
-       0x8319, 0x0040, 0x1839, 0xa280, 0x002f, 0x2012, 0x2010, 0x0078,
-       0x1830, 0x2013, 0x0000, 0x007c, 0xa784, 0x0f00, 0x800c, 0xa784,
-       0x0007, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xa0e8, 0x3980,
-       0x007c, 0x1078, 0x183c, 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808,
-       0xa084, 0xffef, 0xa80d, 0x690a, 0x2091, 0x8000, 0x2009, 0x384f,
-       0x210c, 0x6804, 0xa005, 0x0040, 0x1866, 0xa116, 0x00c0, 0x1866,
-       0x2060, 0x6000, 0x6806, 0x017e, 0x0078, 0x1869, 0x2009, 0x0000,
-       0x017e, 0x6804, 0xa065, 0x0040, 0x1878, 0x6000, 0x6806, 0x1078,
-       0x188b, 0x1078, 0x1992, 0x6810, 0x8001, 0x6812, 0x00c0, 0x1869,
+       0x1895, 0x2c04, 0x7852, 0x2063, 0x0000, 0x007c, 0x0f7e, 0x2079,
+       0x3900, 0x7850, 0x2062, 0x2c00, 0xa005, 0x00c0, 0x18a1, 0x1078,
+       0x1eac, 0x7852, 0x0f7f, 0x007c, 0x2011, 0x4400, 0x7a52, 0x7be4,
+       0x8319, 0x0040, 0x18b1, 0xa280, 0x002f, 0x2012, 0x2010, 0x0078,
+       0x18a8, 0x2013, 0x0000, 0x007c, 0xa784, 0x0f00, 0x800c, 0xa784,
+       0x0007, 0x8003, 0x8003, 0x8003, 0x8003, 0xa105, 0xa0e8, 0x3a80,
+       0x007c, 0x1078, 0x18b4, 0x2900, 0x682a, 0x2a00, 0x682e, 0x6808,
+       0xa084, 0xffef, 0xa80d, 0x690a, 0x2091, 0x8000, 0x2009, 0x394f,
+       0x210c, 0x6804, 0xa005, 0x0040, 0x18de, 0xa116, 0x00c0, 0x18de,
+       0x2060, 0x6000, 0x6806, 0x017e, 0x0078, 0x18e1, 0x2009, 0x0000,
+       0x017e, 0x6804, 0xa065, 0x0040, 0x18f0, 0x6000, 0x6806, 0x1078,
+       0x1903, 0x1078, 0x1a14, 0x6810, 0x8001, 0x6812, 0x00c0, 0x18e1,
        0x017f, 0x6902, 0x6906, 0x2091, 0x8001, 0x007c, 0xa065, 0x0040,
-       0x188a, 0x609c, 0x609f, 0x0000, 0x2008, 0x1078, 0x181e, 0x2100,
-       0x0078, 0x187e, 0x007c, 0x6007, 0x0103, 0x20a9, 0x001c, 0xac80,
+       0x1902, 0x609c, 0x609f, 0x0000, 0x2008, 0x1078, 0x1896, 0x2100,
+       0x0078, 0x18f6, 0x007c, 0x6007, 0x0103, 0x20a9, 0x001c, 0xac80,
        0x0005, 0x20a0, 0x2001, 0x0000, 0x40a4, 0x6828, 0x601a, 0x682c,
-       0x6022, 0x007c, 0x0e7e, 0x2071, 0x3840, 0x7040, 0xa08c, 0x0080,
-       0x00c0, 0x18a8, 0xa088, 0x3880, 0x2d0a, 0x8000, 0x7042, 0xa006,
-       0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x3840, 0x2009, 0x3880, 0x7240,
-       0x8221, 0x8211, 0x0048, 0x18c2, 0x2104, 0x8108, 0xad06, 0x00c0,
-       0x18b1, 0x8119, 0x211e, 0x8108, 0x8318, 0x8211, 0x00c8, 0x18ba,
-       0x7442, 0xa006, 0x0e7f, 0x007c, 0x1078, 0x183c, 0x2091, 0x8000,
-       0x6804, 0x781e, 0xa065, 0x0040, 0x1905, 0x0078, 0x18d5, 0x2c00,
-       0x781e, 0x6000, 0xa065, 0x0040, 0x1905, 0x6010, 0xa306, 0x00c0,
-       0x18cf, 0x600c, 0xa206, 0x00c0, 0x18cf, 0x2c28, 0x6804, 0xac06,
-       0x00c0, 0x18ec, 0x6000, 0x2060, 0x6806, 0xa005, 0x00c0, 0x18ec,
-       0x6803, 0x0000, 0x0078, 0x18f6, 0x6400, 0x781c, 0x2060, 0x6402,
-       0xa486, 0x0000, 0x00c0, 0x18f6, 0x2c00, 0x6802, 0x2560, 0x1078,
-       0x188b, 0x601b, 0x0005, 0x6023, 0x0020, 0x1078, 0x1992, 0x6810,
+       0x6022, 0x007c, 0x0e7e, 0x2071, 0x3940, 0x7040, 0xa08c, 0x0080,
+       0x00c0, 0x1920, 0xa088, 0x3980, 0x2d0a, 0x8000, 0x7042, 0xa006,
+       0x0e7f, 0x007c, 0x0e7e, 0x2071, 0x3940, 0x2009, 0x3980, 0x7240,
+       0x8221, 0x8211, 0x0048, 0x193a, 0x2104, 0x8108, 0xad06, 0x00c0,
+       0x1929, 0x8119, 0x211e, 0x8108, 0x8318, 0x8211, 0x00c8, 0x1932,
+       0x7442, 0xa006, 0x0e7f, 0x007c, 0x1078, 0x18b4, 0x2091, 0x8000,
+       0x6804, 0x781e, 0xa065, 0x0040, 0x197d, 0x0078, 0x194d, 0x2c00,
+       0x781e, 0x6000, 0xa065, 0x0040, 0x197d, 0x6010, 0xa306, 0x00c0,
+       0x1947, 0x600c, 0xa206, 0x00c0, 0x1947, 0x2c28, 0x6804, 0xac06,
+       0x00c0, 0x1964, 0x6000, 0x2060, 0x6806, 0xa005, 0x00c0, 0x1964,
+       0x6803, 0x0000, 0x0078, 0x196e, 0x6400, 0x781c, 0x2060, 0x6402,
+       0xa486, 0x0000, 0x00c0, 0x196e, 0x2c00, 0x6802, 0x2560, 0x1078,
+       0x1903, 0x601b, 0x0005, 0x6023, 0x0020, 0x1078, 0x1a14, 0x6810,
        0x8001, 0x6812, 0x2001, 0xffff, 0xa005, 0x007c, 0x2039, 0x0000,
-       0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x1078, 0x1849,
-       0x8738, 0xa784, 0x0007, 0x00c0, 0x190e, 0xa7bc, 0xff00, 0x873f,
-       0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0, 0x190e, 0x007c, 0x2061,
-       0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x1930, 0x2091, 0x8000,
-       0x78c4, 0x78c7, 0x0000, 0x2091, 0x8001, 0xa005, 0x00c0, 0x1931,
-       0x007c, 0xa08c, 0xfff0, 0x0040, 0x1937, 0x1078, 0x1e2a, 0x0079,
-       0x1939, 0x1949, 0x194b, 0x1951, 0x1955, 0x1949, 0x1959, 0x1949,
-       0x1960, 0x1964, 0x1968, 0x1949, 0x1949, 0x1949, 0x1949, 0x1949,
-       0x1949, 0x1078, 0x1e2a, 0x1078, 0x1906, 0x2001, 0x8001, 0x0078,
-       0x1274, 0x2001, 0x8003, 0x0078, 0x1274, 0x2001, 0x8004, 0x0078,
-       0x1274, 0x1078, 0x1906, 0x2001, 0x8006, 0x007c, 0x0078, 0x1274,
-       0x2001, 0x8008, 0x0078, 0x1274, 0x2001, 0x8009, 0x0078, 0x1274,
-       0x2091, 0x8000, 0x2069, 0x3840, 0x6800, 0xa086, 0x0000, 0x0040,
-       0x1976, 0x2091, 0x8001, 0x78c7, 0x0009, 0x007c, 0x68b4, 0xa0bc,
+       0x2041, 0x0021, 0x2049, 0x0004, 0x2051, 0x0008, 0x1078, 0x18c1,
+       0x8738, 0xa784, 0x0007, 0x00c0, 0x1986, 0xa7bc, 0xff00, 0x873f,
+       0x8738, 0x873f, 0xa784, 0x0f00, 0x00c0, 0x1986, 0x007c, 0x2061,
+       0x0000, 0x6018, 0xa084, 0x0001, 0x00c0, 0x19a8, 0x2091, 0x8000,
+       0x78d4, 0x78d7, 0x0000, 0x2091, 0x8001, 0xa005, 0x00c0, 0x19a9,
+       0x007c, 0xa08c, 0xfff0, 0x0040, 0x19af, 0x1078, 0x1eac, 0x0079,
+       0x19b1, 0x19c1, 0x19c3, 0x19c9, 0x19cd, 0x19c1, 0x19d1, 0x19c1,
+       0x19d8, 0x19dc, 0x19e0, 0x1a0a, 0x1a0e, 0x19c1, 0x19c1, 0x19c1,
+       0x19c1, 0x1078, 0x1eac, 0x1078, 0x197e, 0x2001, 0x8001, 0x0078,
+       0x1276, 0x2001, 0x8003, 0x0078, 0x1276, 0x2001, 0x8004, 0x0078,
+       0x1276, 0x1078, 0x197e, 0x2001, 0x8006, 0x007c, 0x0078, 0x1276,
+       0x2001, 0x8008, 0x0078, 0x1276, 0x2001, 0x8009, 0x0078, 0x1276,
+       0x2091, 0x8000, 0x2069, 0x3940, 0x6800, 0xa086, 0x0000, 0x0040,
+       0x19ee, 0x2091, 0x8001, 0x78d7, 0x0009, 0x007c, 0x68b4, 0xa0bc,
        0xff00, 0x2091, 0x8000, 0x2041, 0x0021, 0x2049, 0x0004, 0x2051,
-       0x0010, 0x1078, 0x1849, 0x8738, 0xa784, 0x0007, 0x00c0, 0x1981,
-       0x2001, 0x800a, 0x0078, 0x1274, 0x2001, 0x04fd, 0x2004, 0xa086,
-       0x0004, 0x007c, 0x6004, 0x6086, 0x2c08, 0x2063, 0x0000, 0x786c,
-       0x8000, 0x786e, 0x7870, 0xa005, 0x7972, 0x0040, 0x19a2, 0x2c02,
-       0x0078, 0x19a3, 0x7976, 0x007c, 0x0c7e, 0x2061, 0x3800, 0x6887,
-       0x0103, 0x2d08, 0x206b, 0x0000, 0x606c, 0x8000, 0x606e, 0x6070,
-       0xa005, 0x6172, 0x0040, 0x19b7, 0x2d02, 0x0078, 0x19b8, 0x6176,
-       0x0c7f, 0x007c, 0x1078, 0x19cb, 0x0040, 0x19ca, 0x0c7e, 0x609c,
-       0xa065, 0x0040, 0x19c5, 0x1078, 0x187e, 0x0c7f, 0x609f, 0x0000,
-       0x1078, 0x181e, 0x007c, 0x7874, 0xa065, 0x0040, 0x19dd, 0x2091,
-       0x8000, 0x786c, 0x8001, 0x786e, 0x2c04, 0x7876, 0xa005, 0x00c0,
-       0x19db, 0x7872, 0x8000, 0x2091, 0x8001, 0x007c, 0x20a9, 0x0010,
-       0xa006, 0x8004, 0x8086, 0x818e, 0x00c8, 0x19e7, 0xa200, 0x0070,
-       0x19eb, 0x0078, 0x19e2, 0x8086, 0x818e, 0x007c, 0x157e, 0x20a9,
-       0x0010, 0xa005, 0x0040, 0x1a11, 0xa11a, 0x00c8, 0x1a11, 0x8213,
-       0x818d, 0x0048, 0x1a02, 0xa11a, 0x00c8, 0x1a03, 0x0070, 0x1a09,
-       0x0078, 0x19f7, 0xa11a, 0x2308, 0x8210, 0x0070, 0x1a09, 0x0078,
-       0x19f7, 0x007e, 0x3200, 0xa084, 0xf7ff, 0x2080, 0x007f, 0x157f,
-       0x007c, 0x007e, 0x3200, 0xa085, 0x0800, 0x0078, 0x1a0d, 0x797c,
-       0x70d0, 0x007e, 0x007f, 0xa106, 0x0040, 0x1a67, 0x2091, 0x8000,
-       0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x1a67, 0x7008, 0x7208,
-       0xa206, 0x00c0, 0x1a67, 0xa286, 0x0008, 0x00c0, 0x1a67, 0x2071,
-       0x0010, 0x1078, 0x1815, 0x0040, 0x1a67, 0x7a84, 0x7b80, 0x7c8c,
-       0x7d88, 0x8107, 0x8004, 0x8004, 0xa210, 0xa399, 0x0000, 0x2009,
-       0x0040, 0x1078, 0x17df, 0x2091, 0x8001, 0x0040, 0x1a5e, 0x1078,
-       0x181e, 0x7890, 0x8000, 0x7892, 0xa086, 0x0002, 0x00c0, 0x1a67,
-       0x2091, 0x8000, 0x78c7, 0x0002, 0x7893, 0x0000, 0x78b0, 0xa085,
-       0x0003, 0x78b2, 0x2091, 0x8001, 0x0078, 0x1a67, 0x7893, 0x0000,
-       0x1078, 0x1bb6, 0x6004, 0xa084, 0x000f, 0x0079, 0x1a6c, 0x2071,
-       0x0010, 0x2091, 0x8001, 0x007c, 0x1a7c, 0x1a9e, 0x1ac4, 0x1a7c,
-       0x1ad6, 0x1a8b, 0x1a7c, 0x1a7c, 0x1a7c, 0x1a98, 0x1abe, 0x1a7c,
-       0x1a7c, 0x1a7c, 0x1a7c, 0x1a7c, 0x2039, 0x0400, 0x78c0, 0xa705,
-       0x78c2, 0x6008, 0xa705, 0x600a, 0x1078, 0x1b14, 0x609c, 0x78be,
-       0x1078, 0x1b9e, 0x007c, 0x78c0, 0xa084, 0x0100, 0x0040, 0x1a92,
-       0x0078, 0x1a7c, 0x601c, 0xa085, 0x0080, 0x601e, 0x0078, 0x1aa5,
-       0x1078, 0x198c, 0x00c0, 0x1a7c, 0x1078, 0x1bd0, 0x78c0, 0xa084,
-       0x0100, 0x0040, 0x1aa5, 0x0078, 0x1a7c, 0x78c3, 0x0000, 0x6004,
-       0x8007, 0xa084, 0x00ff, 0x78b6, 0x8001, 0x609f, 0x0000, 0x0040,
-       0x1abb, 0x1078, 0x1b14, 0x0040, 0x1abb, 0x78c0, 0xa085, 0x0100,
-       0x78c2, 0x0078, 0x1abd, 0x1078, 0x1b38, 0x007c, 0x1078, 0x198c,
-       0x00c0, 0x1a7c, 0x1078, 0x1bcc, 0x78c0, 0xa08c, 0x0e00, 0x00c0,
-       0x1acd, 0xa084, 0x0100, 0x00c0, 0x1acf, 0x0078, 0x1a7c, 0x1078,
-       0x1b14, 0x00c0, 0x1ad5, 0x1078, 0x1b38, 0x007c, 0x78c0, 0xa084,
-       0x0100, 0x0040, 0x1add, 0x0078, 0x1a7c, 0x78c3, 0x0000, 0x6714,
-       0x20a9, 0x0001, 0x6018, 0xa005, 0x0040, 0x1af8, 0xa7bc, 0xff00,
-       0x20a9, 0x0008, 0xa08e, 0x0001, 0x0040, 0x1af8, 0x2039, 0x0000,
-       0x20a9, 0x0080, 0xa08e, 0x0002, 0x0040, 0x1af8, 0x0078, 0x1b11,
-       0x1078, 0x183c, 0x2d00, 0xa088, 0x0002, 0x2091, 0x8000, 0x2168,
-       0x682b, 0x0000, 0x682f, 0x0000, 0x2104, 0xa084, 0xffde, 0x200a,
-       0x2100, 0xa088, 0x0010, 0x2091, 0x8001, 0x0070, 0x1b11, 0x0078,
-       0x1afd, 0x1078, 0x181e, 0x007c, 0x78b8, 0xa06d, 0x00c0, 0x1b1f,
-       0x2c00, 0x78ba, 0x78be, 0x609f, 0x0000, 0x0078, 0x1b2b, 0x2c00,
-       0x689e, 0x609f, 0x0000, 0x78ba, 0x2d00, 0x6002, 0x78bc, 0xad06,
-       0x00c0, 0x1b2b, 0x6002, 0x78b4, 0x8001, 0x78b6, 0x00c0, 0x1b37,
-       0x78c0, 0xa084, 0x0000, 0x78c2, 0x78bc, 0x2060, 0xa006, 0x007c,
-       0xa02e, 0x2530, 0x611c, 0x61a2, 0xa184, 0xc1ff, 0x601e, 0xa184,
-       0x0060, 0x0040, 0x1b47, 0x0e7e, 0x1078, 0x320a, 0x0e7f, 0x6596,
-       0x669a, 0x6714, 0x1078, 0x183c, 0x2091, 0x8000, 0x6808, 0xa084,
-       0x0001, 0x0040, 0x1b63, 0x2091, 0x8001, 0x1078, 0x188b, 0x2091,
-       0x8000, 0x1078, 0x1992, 0x2091, 0x8001, 0x78bb, 0x0000, 0x78bf,
-       0x0000, 0x0078, 0x1b9d, 0x6024, 0xa096, 0x0001, 0x00c0, 0x1b6a,
-       0x8000, 0x6026, 0x6a10, 0x6814, 0x2091, 0x8001, 0xa202, 0x0048,
-       0x1b79, 0x0040, 0x1b79, 0x2039, 0x0200, 0x1078, 0x1b9e, 0x0078,
-       0x1b9d, 0x2c08, 0x2091, 0x8000, 0x6800, 0xa065, 0x0040, 0x1b81,
-       0x6102, 0x6902, 0x00c0, 0x1b85, 0x6906, 0x2160, 0x6003, 0x0000,
-       0x6810, 0x8000, 0x6812, 0x2091, 0x8001, 0x6808, 0xa08c, 0x0040,
-       0x0040, 0x1b97, 0xa086, 0x0040, 0x680a, 0x1078, 0x189a, 0x1078,
-       0x1c74, 0x78bf, 0x0000, 0x78bb, 0x0000, 0x007c, 0x6008, 0xa705,
-       0x600a, 0x2091, 0x8000, 0x1078, 0x1992, 0x2091, 0x8001, 0x78bc,
-       0xa065, 0x0040, 0x1bb1, 0x609c, 0x78be, 0x609f, 0x0000, 0x0078,
-       0x1ba1, 0x78bb, 0x0000, 0x78bf, 0x0000, 0x007c, 0x7978, 0x787c,
-       0x8000, 0xa10a, 0x00c8, 0x1bbd, 0xa006, 0x787e, 0x70d2, 0x7804,
-       0xa005, 0x0040, 0x1bcb, 0x8001, 0x7806, 0x00c0, 0x1bcb, 0x0068,
-       0x1bcb, 0x2091, 0x4080, 0x007c, 0x2039, 0x1be4, 0x0078, 0x1bd2,
-       0x2039, 0x1bea, 0x2704, 0xa005, 0x0040, 0x1be3, 0xac00, 0x2068,
-       0x6b08, 0x6c0c, 0x6910, 0x6a14, 0x690a, 0x6a0e, 0x6b12, 0x6c16,
-       0x8738, 0x0078, 0x1bd2, 0x007c, 0x0003, 0x0009, 0x000f, 0x0015,
-       0x001b, 0x0000, 0x0015, 0x001b, 0x0000, 0x0068, 0x1c05, 0x2029,
-       0x0000, 0x7874, 0xa065, 0x0040, 0x1c00, 0x1078, 0x1c06, 0x0040,
-       0x1c00, 0x1078, 0x1c17, 0x00c0, 0x1c00, 0x8528, 0x0078, 0x1bf1,
-       0x85ff, 0x0040, 0x1c05, 0x2091, 0x4080, 0x007c, 0x7b94, 0x7998,
-       0x70d4, 0x007e, 0x007f, 0xa102, 0x00c0, 0x1c11, 0x2300, 0xa005,
-       0x007c, 0x0048, 0x1c15, 0xa302, 0x007c, 0x8002, 0x007c, 0x2091,
-       0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x1c5b, 0x7008,
-       0x7208, 0xa206, 0x00c0, 0x1c5b, 0xa286, 0x0008, 0x00c0, 0x1c5b,
-       0x2071, 0x0010, 0x1078, 0x1c60, 0x2009, 0x001c, 0x6028, 0xa005,
-       0x0040, 0x1c34, 0x2009, 0x0040, 0x1078, 0x17a5, 0x0040, 0x1c4d,
-       0x78ac, 0x8000, 0x78ae, 0xa086, 0x0002, 0x00c0, 0x1c5b, 0x2091,
-       0x8000, 0x78c7, 0x0003, 0x78af, 0x0000, 0x78b0, 0xa085, 0x0300,
-       0x78b2, 0x2091, 0x8001, 0x0078, 0x1c5b, 0x78af, 0x0000, 0x1078,
-       0x19ba, 0x7994, 0x7898, 0x8000, 0xa10a, 0x00c8, 0x1c58, 0xa006,
-       0x789a, 0x70d6, 0xa006, 0x2071, 0x0010, 0x2091, 0x8001, 0x007c,
-       0x8107, 0x8004, 0x8004, 0x7aa0, 0x7b9c, 0x7ca8, 0x7da4, 0xa210,
-       0xa399, 0x0000, 0xa4a1, 0x0000, 0xa5a9, 0x0000, 0x007c, 0x2009,
-       0x3868, 0x2091, 0x8000, 0x200a, 0x0f7e, 0x2079, 0x0100, 0x2009,
-       0x3840, 0x2091, 0x8000, 0x2104, 0xa086, 0x0000, 0x00c0, 0x1c8f,
-       0x2009, 0x3812, 0x2104, 0xa005, 0x00c0, 0x1c8f, 0x7830, 0xa084,
-       0x00c0, 0x00c0, 0x1c8f, 0x0018, 0x1c8f, 0x781b, 0x0045, 0x2091,
-       0x8001, 0x0f7f, 0x007c, 0x127e, 0x2091, 0x2300, 0x2071, 0x3840,
-       0x2079, 0x0100, 0x784b, 0x000f, 0x2019, 0x3105, 0x20a1, 0x012b,
-       0x2304, 0xa005, 0x0040, 0x1cad, 0x789a, 0x8318, 0x23ac, 0x8318,
-       0x2398, 0x53a6, 0x3318, 0x0078, 0x1ca0, 0x789b, 0x0020, 0x20a9,
-       0x0010, 0x78af, 0x0000, 0x78af, 0x0020, 0x0070, 0x1cb9, 0x0078,
-       0x1cb1, 0x7003, 0x0000, 0x1078, 0x1dbe, 0x7004, 0xa084, 0x000f,
-       0xa085, 0x6280, 0x7806, 0x780f, 0x9200, 0x7843, 0x00d8, 0x7853,
-       0x0080, 0x780b, 0x0008, 0x7047, 0x387f, 0x7043, 0x0000, 0x127f,
-       0x2000, 0x007c, 0xa18c, 0x000f, 0x2011, 0x0101, 0x2204, 0xa084,
-       0xfff0, 0xa105, 0x2012, 0x1078, 0x1dbe, 0x007c, 0x2011, 0x0101,
-       0x20a9, 0x0009, 0x810b, 0x0070, 0x1ce7, 0x0078, 0x1ce2, 0xa18c,
-       0x0e00, 0x2204, 0xa084, 0xf1ff, 0xa105, 0x2012, 0x007c, 0x2009,
-       0x0101, 0x20a9, 0x0005, 0x8213, 0x0070, 0x1cf8, 0x0078, 0x1cf3,
-       0xa294, 0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205, 0x200a, 0x007c,
-       0x2011, 0x0101, 0x20a9, 0x000c, 0x810b, 0x0070, 0x1d09, 0x0078,
-       0x1d04, 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, 0x0c7e, 0x0e7e, 0x6818, 0xa005, 0x0040, 0x1d9a, 0x2061,
-       0x4280, 0x1078, 0x1da0, 0x0040, 0x1d84, 0x20a9, 0x0000, 0x2061,
-       0x4180, 0x0c7e, 0x1078, 0x1da0, 0x0040, 0x1d6e, 0x0c7f, 0x8c60,
-       0x0070, 0x1d6c, 0x0078, 0x1d61, 0x0078, 0x1d9a, 0x007f, 0xa082,
-       0x4180, 0x2071, 0x3840, 0x70ba, 0x6020, 0xa085, 0x0800, 0x6022,
-       0x2091, 0x8001, 0x71b6, 0x2001, 0x0004, 0x70a2, 0x70c7, 0x0005,
-       0x1078, 0x1c6f, 0x0078, 0x1d96, 0x2071, 0x3840, 0x6020, 0xa085,
-       0x0800, 0x6022, 0x2091, 0x8001, 0x71b6, 0x2c00, 0x70be, 0x2001,
-       0x0006, 0x70a2, 0x70c7, 0x0005, 0x1078, 0x1c6f, 0x2001, 0x0000,
-       0x0078, 0x1d9c, 0x2001, 0x0001, 0xa005, 0x0e7f, 0x0c7f, 0x007c,
-       0x2091, 0x8000, 0x2c04, 0xa005, 0x0040, 0x1db9, 0x2060, 0x6010,
-       0xa306, 0x00c0, 0x1db6, 0x600c, 0xa206, 0x00c0, 0x1db6, 0x6014,
-       0xa106, 0x00c0, 0x1db6, 0xa006, 0x0078, 0x1dbd, 0x6000, 0x0078,
-       0x1da3, 0xa085, 0x0001, 0x2091, 0x8001, 0x007c, 0x2011, 0x3841,
-       0x220c, 0xa18c, 0x000f, 0x2011, 0x013b, 0x2204, 0xa084, 0x0100,
-       0x0040, 0x1dd4, 0x2021, 0xff04, 0x2122, 0x810b, 0x810b, 0x810b,
-       0x810b, 0xa18d, 0x0f00, 0x2104, 0x007c, 0x0e7e, 0x68e4, 0xa08c,
-       0x0020, 0x0040, 0x1e28, 0xa084, 0x0006, 0x00c0, 0x1e28, 0x6014,
-       0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0f0, 0x3900,
-       0x7004, 0xa084, 0x000a, 0x00c0, 0x1e28, 0x7108, 0xa194, 0xff00,
-       0x0040, 0x1e28, 0xa18c, 0x00ff, 0x2001, 0x000c, 0xa106, 0x0040,
-       0x1e0f, 0x2001, 0x0012, 0xa106, 0x0040, 0x1e13, 0x2001, 0x0014,
-       0xa106, 0x0040, 0x1e17, 0x2001, 0x0019, 0xa106, 0x0040, 0x1e1b,
-       0x2001, 0x0032, 0xa106, 0x0040, 0x1e1f, 0x0078, 0x1e23, 0x2009,
-       0x0012, 0x0078, 0x1e25, 0x2009, 0x0014, 0x0078, 0x1e25, 0x2009,
-       0x0019, 0x0078, 0x1e25, 0x2009, 0x0020, 0x0078, 0x1e25, 0x2009,
-       0x003f, 0x0078, 0x1e25, 0x2011, 0x0000, 0x2100, 0xa205, 0x700a,
-       0x0e7f, 0x007c, 0x2071, 0x0010, 0x70ca, 0x007f, 0x70c6, 0x70c3,
-       0x8002, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091, 0x4080, 0x0078,
-       0x1e37, 0x107e, 0x007e, 0x127e, 0x2091, 0x2300, 0x7f3c, 0x7e58,
-       0x7c30, 0x7d38, 0x2009, 0x3874, 0x78a0, 0x200a, 0x8108, 0x250a,
-       0x8108, 0x240a, 0x8108, 0x260a, 0x8108, 0x270a, 0xa594, 0x003f,
-       0xa484, 0x4000, 0x0040, 0x1e5a, 0xa784, 0x007c, 0x00c0, 0x308f,
-       0x1078, 0x1e2a, 0xa49c, 0x000f, 0xa382, 0x0004, 0x0050, 0x1e62,
-       0x1078, 0x1e2a, 0x8507, 0xa084, 0x000f, 0x0079, 0x1e67, 0x22d0,
-       0x236f, 0x238c, 0x25f7, 0x283b, 0x287e, 0x28c7, 0x2925, 0x29bc,
-       0x2a49, 0x1e8f, 0x1e77, 0x2139, 0x21fe, 0x281a, 0x1e77, 0x1078,
-       0x1e2a, 0x0018, 0x1e3e, 0x127f, 0x2091, 0x8001, 0x007f, 0x107f,
-       0x007c, 0x7003, 0x0000, 0x703f, 0x0000, 0x7030, 0xa005, 0x0040,
-       0x1e8b, 0x7033, 0x0000, 0x1078, 0x306a, 0x0018, 0x1e3e, 0x2009,
-       0x380f, 0x200b, 0x0000, 0x705c, 0xa005, 0x00c0, 0x1f58, 0x70a0,
-       0xa084, 0x0007, 0x0079, 0x1e9c, 0x1f7b, 0x1ea4, 0x1eb2, 0x1ecd,
-       0x1eed, 0x1f36, 0x1f11, 0x1ea4, 0x7808, 0xa084, 0xfffd, 0x780a,
-       0x2009, 0x0047, 0x1078, 0x271f, 0x00c0, 0x1eb0, 0x7003, 0x0004,
-       0x0078, 0x1e79, 0x1078, 0x3051, 0x00c0, 0x1ecb, 0x70b4, 0x8007,
-       0x7882, 0x789b, 0x0010, 0x78ab, 0x000c, 0x789b, 0x0060, 0x78ab,
-       0x0001, 0x785b, 0x0004, 0x2009, 0x00fb, 0x1078, 0x271d, 0x00c0,
-       0x1ecb, 0x7003, 0x0004, 0x0078, 0x1e79, 0x1078, 0x3051, 0x00c0,
-       0x1eeb, 0x71b4, 0x8107, 0x7882, 0x789b, 0x0010, 0xa18c, 0x0007,
-       0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0006, 0x789b, 0x0060, 0x78ab,
-       0x0002, 0x785b, 0x0004, 0x2009, 0x00fb, 0x1078, 0x271d, 0x00c0,
-       0x1eeb, 0x7003, 0x0004, 0x0078, 0x1e79, 0x1078, 0x3051, 0x00c0,
-       0x1f0f, 0x71b4, 0x8107, 0x7882, 0x789b, 0x0010, 0xa18c, 0x0007,
-       0xa18d, 0x00c0, 0x79aa, 0x78ab, 0x0020, 0x71b8, 0x79aa, 0x78ab,
-       0x000d, 0x789b, 0x0060, 0x78ab, 0x0004, 0x785b, 0x0004, 0x2009,
-       0x00fb, 0x1078, 0x271d, 0x00c0, 0x1f0f, 0x7003, 0x0004, 0x0078,
-       0x1e79, 0x1078, 0x3051, 0x00c0, 0x1f34, 0x71b4, 0x8107, 0x7882,
+       0x0010, 0x1078, 0x18c1, 0x8738, 0xa784, 0x0007, 0x00c0, 0x19f9,
+       0x2001, 0x800a, 0x0078, 0x1276, 0x2001, 0x04fd, 0x2004, 0xa086,
+       0x0004, 0x007c, 0x2001, 0x800c, 0x0078, 0x1276, 0x1078, 0x197e,
+       0x2001, 0x800d, 0x0078, 0x1276, 0x6004, 0x6086, 0x2c08, 0x2063,
+       0x0000, 0x787c, 0x8000, 0x787e, 0x7880, 0xa005, 0x7982, 0x0040,
+       0x1a24, 0x2c02, 0x0078, 0x1a25, 0x7986, 0x007c, 0x0c7e, 0x2061,
+       0x3900, 0x6887, 0x0103, 0x2d08, 0x206b, 0x0000, 0x607c, 0x8000,
+       0x607e, 0x6080, 0xa005, 0x6182, 0x0040, 0x1a39, 0x2d02, 0x0078,
+       0x1a3a, 0x6186, 0x0c7f, 0x007c, 0x1078, 0x1a4d, 0x0040, 0x1a4c,
+       0x0c7e, 0x609c, 0xa065, 0x0040, 0x1a47, 0x1078, 0x18f6, 0x0c7f,
+       0x609f, 0x0000, 0x1078, 0x1896, 0x007c, 0x7884, 0xa065, 0x0040,
+       0x1a5f, 0x2091, 0x8000, 0x787c, 0x8001, 0x787e, 0x2c04, 0x7886,
+       0xa005, 0x00c0, 0x1a5d, 0x7882, 0x8000, 0x2091, 0x8001, 0x007c,
+       0x20a9, 0x0010, 0xa006, 0x8004, 0x8086, 0x818e, 0x00c8, 0x1a69,
+       0xa200, 0x0070, 0x1a6d, 0x0078, 0x1a64, 0x8086, 0x818e, 0x007c,
+       0x157e, 0x20a9, 0x0010, 0xa005, 0x0040, 0x1a93, 0xa11a, 0x00c8,
+       0x1a93, 0x8213, 0x818d, 0x0048, 0x1a84, 0xa11a, 0x00c8, 0x1a85,
+       0x0070, 0x1a8b, 0x0078, 0x1a79, 0xa11a, 0x2308, 0x8210, 0x0070,
+       0x1a8b, 0x0078, 0x1a79, 0x007e, 0x3200, 0xa084, 0xf7ff, 0x2080,
+       0x007f, 0x157f, 0x007c, 0x007e, 0x3200, 0xa085, 0x0800, 0x0078,
+       0x1a8f, 0x798c, 0x70d0, 0x007e, 0x007f, 0xa106, 0x0040, 0x1ae9,
+       0x2091, 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0, 0x1ae9,
+       0x7008, 0x7208, 0xa206, 0x00c0, 0x1ae9, 0xa286, 0x0008, 0x00c0,
+       0x1ae9, 0x2071, 0x0010, 0x1078, 0x188d, 0x0040, 0x1ae9, 0x7a94,
+       0x7b90, 0x7c9c, 0x7d98, 0x8107, 0x8004, 0x8004, 0xa210, 0xa399,
+       0x0000, 0x2009, 0x0040, 0x1078, 0x1857, 0x2091, 0x8001, 0x0040,
+       0x1ae0, 0x1078, 0x1896, 0x78a0, 0x8000, 0x78a2, 0xa086, 0x0002,
+       0x00c0, 0x1ae9, 0x2091, 0x8000, 0x78d7, 0x0002, 0x78a3, 0x0000,
+       0x78c0, 0xa085, 0x0003, 0x78c2, 0x2091, 0x8001, 0x0078, 0x1ae9,
+       0x78a3, 0x0000, 0x1078, 0x1c38, 0x6004, 0xa084, 0x000f, 0x0079,
+       0x1aee, 0x2071, 0x0010, 0x2091, 0x8001, 0x007c, 0x1afe, 0x1b20,
+       0x1b46, 0x1afe, 0x1b58, 0x1b0d, 0x1afe, 0x1afe, 0x1afe, 0x1b1a,
+       0x1b40, 0x1afe, 0x1afe, 0x1afe, 0x1afe, 0x1afe, 0x2039, 0x0400,
+       0x78d0, 0xa705, 0x78d2, 0x6008, 0xa705, 0x600a, 0x1078, 0x1b96,
+       0x609c, 0x78ce, 0x1078, 0x1c20, 0x007c, 0x78d0, 0xa084, 0x0100,
+       0x0040, 0x1b14, 0x0078, 0x1afe, 0x601c, 0xa085, 0x0080, 0x601e,
+       0x0078, 0x1b27, 0x1078, 0x1a04, 0x00c0, 0x1afe, 0x1078, 0x1c52,
+       0x78d0, 0xa084, 0x0100, 0x0040, 0x1b27, 0x0078, 0x1afe, 0x78d3,
+       0x0000, 0x6004, 0x8007, 0xa084, 0x00ff, 0x78c6, 0x8001, 0x609f,
+       0x0000, 0x0040, 0x1b3d, 0x1078, 0x1b96, 0x0040, 0x1b3d, 0x78d0,
+       0xa085, 0x0100, 0x78d2, 0x0078, 0x1b3f, 0x1078, 0x1bba, 0x007c,
+       0x1078, 0x1a04, 0x00c0, 0x1afe, 0x1078, 0x1c4e, 0x78d0, 0xa08c,
+       0x0e00, 0x00c0, 0x1b4f, 0xa084, 0x0100, 0x00c0, 0x1b51, 0x0078,
+       0x1afe, 0x1078, 0x1b96, 0x00c0, 0x1b57, 0x1078, 0x1bba, 0x007c,
+       0x78d0, 0xa084, 0x0100, 0x0040, 0x1b5f, 0x0078, 0x1afe, 0x78d3,
+       0x0000, 0x6714, 0x20a9, 0x0001, 0x6018, 0xa005, 0x0040, 0x1b7a,
+       0xa7bc, 0xff00, 0x20a9, 0x0008, 0xa08e, 0x0001, 0x0040, 0x1b7a,
+       0x2039, 0x0000, 0x20a9, 0x0080, 0xa08e, 0x0002, 0x0040, 0x1b7a,
+       0x0078, 0x1b93, 0x1078, 0x18b4, 0x2d00, 0xa088, 0x0002, 0x2091,
+       0x8000, 0x2168, 0x682b, 0x0000, 0x682f, 0x0000, 0x2104, 0xa084,
+       0xffde, 0x200a, 0x2100, 0xa088, 0x0010, 0x2091, 0x8001, 0x0070,
+       0x1b93, 0x0078, 0x1b7f, 0x1078, 0x1896, 0x007c, 0x78c8, 0xa06d,
+       0x00c0, 0x1ba1, 0x2c00, 0x78ca, 0x78ce, 0x609f, 0x0000, 0x0078,
+       0x1bad, 0x2c00, 0x689e, 0x609f, 0x0000, 0x78ca, 0x2d00, 0x6002,
+       0x78cc, 0xad06, 0x00c0, 0x1bad, 0x6002, 0x78c4, 0x8001, 0x78c6,
+       0x00c0, 0x1bb9, 0x78d0, 0xa084, 0x0000, 0x78d2, 0x78cc, 0x2060,
+       0xa006, 0x007c, 0xa02e, 0x2530, 0x611c, 0x61a2, 0xa184, 0xc1ff,
+       0x601e, 0xa184, 0x0060, 0x0040, 0x1bc9, 0x0e7e, 0x1078, 0x330a,
+       0x0e7f, 0x6596, 0x669a, 0x6714, 0x1078, 0x18b4, 0x2091, 0x8000,
+       0x6808, 0xa084, 0x0001, 0x0040, 0x1be5, 0x2091, 0x8001, 0x1078,
+       0x1903, 0x2091, 0x8000, 0x1078, 0x1a14, 0x2091, 0x8001, 0x78cb,
+       0x0000, 0x78cf, 0x0000, 0x0078, 0x1c1f, 0x6024, 0xa096, 0x0001,
+       0x00c0, 0x1bec, 0x8000, 0x6026, 0x6a10, 0x6814, 0x2091, 0x8001,
+       0xa202, 0x0048, 0x1bfb, 0x0040, 0x1bfb, 0x2039, 0x0200, 0x1078,
+       0x1c20, 0x0078, 0x1c1f, 0x2c08, 0x2091, 0x8000, 0x6800, 0xa065,
+       0x0040, 0x1c03, 0x6102, 0x6902, 0x00c0, 0x1c07, 0x6906, 0x2160,
+       0x6003, 0x0000, 0x6810, 0x8000, 0x6812, 0x2091, 0x8001, 0x6808,
+       0xa08c, 0x0040, 0x0040, 0x1c19, 0xa086, 0x0040, 0x680a, 0x1078,
+       0x1912, 0x1078, 0x1cf6, 0x78cf, 0x0000, 0x78cb, 0x0000, 0x007c,
+       0x6008, 0xa705, 0x600a, 0x2091, 0x8000, 0x1078, 0x1a14, 0x2091,
+       0x8001, 0x78cc, 0xa065, 0x0040, 0x1c33, 0x609c, 0x78ce, 0x609f,
+       0x0000, 0x0078, 0x1c23, 0x78cb, 0x0000, 0x78cf, 0x0000, 0x007c,
+       0x7988, 0x788c, 0x8000, 0xa10a, 0x00c8, 0x1c3f, 0xa006, 0x788e,
+       0x70d2, 0x7804, 0xa005, 0x0040, 0x1c4d, 0x8001, 0x7806, 0x00c0,
+       0x1c4d, 0x0068, 0x1c4d, 0x2091, 0x4080, 0x007c, 0x2039, 0x1c66,
+       0x0078, 0x1c54, 0x2039, 0x1c6c, 0x2704, 0xa005, 0x0040, 0x1c65,
+       0xac00, 0x2068, 0x6b08, 0x6c0c, 0x6910, 0x6a14, 0x690a, 0x6a0e,
+       0x6b12, 0x6c16, 0x8738, 0x0078, 0x1c54, 0x007c, 0x0003, 0x0009,
+       0x000f, 0x0015, 0x001b, 0x0000, 0x0015, 0x001b, 0x0000, 0x0068,
+       0x1c87, 0x2029, 0x0000, 0x7884, 0xa065, 0x0040, 0x1c82, 0x1078,
+       0x1c88, 0x0040, 0x1c82, 0x1078, 0x1c99, 0x00c0, 0x1c82, 0x8528,
+       0x0078, 0x1c73, 0x85ff, 0x0040, 0x1c87, 0x2091, 0x4080, 0x007c,
+       0x7ba4, 0x79a8, 0x70d4, 0x007e, 0x007f, 0xa102, 0x00c0, 0x1c93,
+       0x2300, 0xa005, 0x007c, 0x0048, 0x1c97, 0xa302, 0x007c, 0x8002,
+       0x007c, 0x2091, 0x8000, 0x2071, 0x0020, 0x7004, 0xa005, 0x00c0,
+       0x1cdd, 0x7008, 0x7208, 0xa206, 0x00c0, 0x1cdd, 0xa286, 0x0008,
+       0x00c0, 0x1cdd, 0x2071, 0x0010, 0x1078, 0x1ce2, 0x2009, 0x001c,
+       0x6028, 0xa005, 0x0040, 0x1cb6, 0x2009, 0x0040, 0x1078, 0x181d,
+       0x0040, 0x1ccf, 0x78bc, 0x8000, 0x78be, 0xa086, 0x0002, 0x00c0,
+       0x1cdd, 0x2091, 0x8000, 0x78d7, 0x0003, 0x78bf, 0x0000, 0x78c0,
+       0xa085, 0x0300, 0x78c2, 0x2091, 0x8001, 0x0078, 0x1cdd, 0x78bf,
+       0x0000, 0x1078, 0x1a3c, 0x79a4, 0x78a8, 0x8000, 0xa10a, 0x00c8,
+       0x1cda, 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, 0x3968, 0x2091, 0x8000, 0x200a, 0x0f7e, 0x2079,
+       0x0100, 0x2009, 0x3940, 0x2091, 0x8000, 0x2104, 0xa086, 0x0000,
+       0x00c0, 0x1d11, 0x2009, 0x3912, 0x2104, 0xa005, 0x00c0, 0x1d11,
+       0x7830, 0xa084, 0x00c0, 0x00c0, 0x1d11, 0x0018, 0x1d11, 0x781b,
+       0x0045, 0x2091, 0x8001, 0x0f7f, 0x007c, 0x127e, 0x2091, 0x2300,
+       0x2071, 0x3940, 0x2079, 0x0100, 0x784b, 0x000f, 0x2019, 0x3205,
+       0x20a1, 0x012b, 0x2304, 0xa005, 0x0040, 0x1d2f, 0x789a, 0x8318,
+       0x23ac, 0x8318, 0x2398, 0x53a6, 0x3318, 0x0078, 0x1d22, 0x789b,
+       0x0020, 0x20a9, 0x0010, 0x78af, 0x0000, 0x78af, 0x0020, 0x0070,
+       0x1d3b, 0x0078, 0x1d33, 0x7003, 0x0000, 0x1078, 0x1e40, 0x7004,
+       0xa084, 0x000f, 0xa085, 0x6280, 0x7806, 0x780f, 0x9200, 0x7843,
+       0x00d8, 0x7853, 0x0080, 0x780b, 0x0008, 0x7047, 0x397f, 0x7043,
+       0x0000, 0x127f, 0x2000, 0x007c, 0xa18c, 0x000f, 0x2011, 0x0101,
+       0x2204, 0xa084, 0xfff0, 0xa105, 0x2012, 0x1078, 0x1e40, 0x007c,
+       0x2011, 0x0101, 0x20a9, 0x0009, 0x810b, 0x0070, 0x1d69, 0x0078,
+       0x1d64, 0xa18c, 0x0e00, 0x2204, 0xa084, 0xf1ff, 0xa105, 0x2012,
+       0x007c, 0x2009, 0x0101, 0x20a9, 0x0005, 0x8213, 0x0070, 0x1d7a,
+       0x0078, 0x1d75, 0xa294, 0x00e0, 0x2104, 0xa084, 0xff1f, 0xa205,
+       0x200a, 0x007c, 0x2011, 0x0101, 0x20a9, 0x000c, 0x810b, 0x0070,
+       0x1d8b, 0x0078, 0x1d86, 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, 0x0c7e, 0x0e7e, 0x6818, 0xa005, 0x0040,
+       0x1e1c, 0x2061, 0x4380, 0x1078, 0x1e22, 0x0040, 0x1e06, 0x20a9,
+       0x0000, 0x2061, 0x4280, 0x0c7e, 0x1078, 0x1e22, 0x0040, 0x1df0,
+       0x0c7f, 0x8c60, 0x0070, 0x1dee, 0x0078, 0x1de3, 0x0078, 0x1e1c,
+       0x007f, 0xa082, 0x4280, 0x2071, 0x3940, 0x70ba, 0x6020, 0xa085,
+       0x0800, 0x6022, 0x2091, 0x8001, 0x71b6, 0x2001, 0x0004, 0x70a2,
+       0x70c7, 0x000f, 0x1078, 0x1cf1, 0x0078, 0x1e18, 0x2071, 0x3940,
+       0x6020, 0xa085, 0x0800, 0x6022, 0x2091, 0x8001, 0x71b6, 0x2c00,
+       0x70be, 0x2001, 0x0006, 0x70a2, 0x70c7, 0x000f, 0x1078, 0x1cf1,
+       0x2001, 0x0000, 0x0078, 0x1e1e, 0x2001, 0x0001, 0xa005, 0x0e7f,
+       0x0c7f, 0x007c, 0x2091, 0x8000, 0x2c04, 0xa005, 0x0040, 0x1e3b,
+       0x2060, 0x6010, 0xa306, 0x00c0, 0x1e38, 0x600c, 0xa206, 0x00c0,
+       0x1e38, 0x6014, 0xa106, 0x00c0, 0x1e38, 0xa006, 0x0078, 0x1e3f,
+       0x6000, 0x0078, 0x1e25, 0xa085, 0x0001, 0x2091, 0x8001, 0x007c,
+       0x2011, 0x3941, 0x220c, 0xa18c, 0x000f, 0x2011, 0x013b, 0x2204,
+       0xa084, 0x0100, 0x0040, 0x1e56, 0x2021, 0xff04, 0x2122, 0x810b,
+       0x810b, 0x810b, 0x810b, 0xa18d, 0x0f00, 0x2104, 0x007c, 0x0e7e,
+       0x68e4, 0xa08c, 0x0020, 0x0040, 0x1eaa, 0xa084, 0x0006, 0x00c0,
+       0x1eaa, 0x6014, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003,
+       0xa0f0, 0x3a00, 0x7004, 0xa084, 0x000a, 0x00c0, 0x1eaa, 0x7108,
+       0xa194, 0xff00, 0x0040, 0x1eaa, 0xa18c, 0x00ff, 0x2001, 0x000c,
+       0xa106, 0x0040, 0x1e91, 0x2001, 0x0012, 0xa106, 0x0040, 0x1e95,
+       0x2001, 0x0014, 0xa106, 0x0040, 0x1e99, 0x2001, 0x0019, 0xa106,
+       0x0040, 0x1e9d, 0x2001, 0x0032, 0xa106, 0x0040, 0x1ea1, 0x0078,
+       0x1ea5, 0x2009, 0x0012, 0x0078, 0x1ea7, 0x2009, 0x0014, 0x0078,
+       0x1ea7, 0x2009, 0x0019, 0x0078, 0x1ea7, 0x2009, 0x0020, 0x0078,
+       0x1ea7, 0x2009, 0x003f, 0x0078, 0x1ea7, 0x2011, 0x0000, 0x2100,
+       0xa205, 0x700a, 0x0e7f, 0x007c, 0x2071, 0x0010, 0x70ca, 0x007f,
+       0x70c6, 0x70c3, 0x8002, 0x2071, 0x0000, 0x701b, 0x0001, 0x2091,
+       0x4080, 0x0078, 0x1eb9, 0x107e, 0x007e, 0x127e, 0x2091, 0x2300,
+       0x7f3c, 0x7e58, 0x7c30, 0x7d38, 0x2009, 0x3974, 0x78a0, 0x200a,
+       0x8108, 0x250a, 0x8108, 0x240a, 0x8108, 0x260a, 0x8108, 0x270a,
+       0xa594, 0x003f, 0xa484, 0x4000, 0x0040, 0x1edc, 0xa784, 0x007c,
+       0x00c0, 0x318f, 0x1078, 0x1eac, 0xa49c, 0x000f, 0xa382, 0x0004,
+       0x0050, 0x1ee4, 0x1078, 0x1eac, 0x8507, 0xa084, 0x000f, 0x0079,
+       0x1ee9, 0x236e, 0x240d, 0x242e, 0x2699, 0x28dd, 0x293b, 0x2984,
+       0x29f0, 0x2a8d, 0x2b1a, 0x1f11, 0x1ef9, 0x21c3, 0x2288, 0x28bc,
+       0x1ef9, 0x1078, 0x1eac, 0x0018, 0x1ec0, 0x127f, 0x2091, 0x8001,
+       0x007f, 0x107f, 0x007c, 0x7003, 0x0000, 0x703f, 0x0000, 0x7030,
+       0xa005, 0x0040, 0x1f0d, 0x7033, 0x0000, 0x1078, 0x316a, 0x0018,
+       0x1ec0, 0x2009, 0x390f, 0x200b, 0x0000, 0x705c, 0xa005, 0x00c0,
+       0x1fe2, 0x70a0, 0xa084, 0x0007, 0x0079, 0x1f1e, 0x2005, 0x1f26,
+       0x1f34, 0x1f51, 0x1f73, 0x1fc0, 0x1f99, 0x1f26, 0x7808, 0xa084,
+       0xfffd, 0x780a, 0x2009, 0x0047, 0x1078, 0x27c1, 0x00c0, 0x1f32,
+       0x7003, 0x0004, 0x0078, 0x1efb, 0x1078, 0x3151, 0x00c0, 0x1f4f,
+       0x70b4, 0x8007, 0x7882, 0x789b, 0x0010, 0x78ab, 0x000c, 0x789b,
+       0x0060, 0x78ab, 0x0001, 0x785b, 0x0004, 0x2009, 0x00fb, 0x1078,
+       0x27bf, 0x00c0, 0x1f4f, 0x7003, 0x0004, 0x70c7, 0x000f, 0x0078,
+       0x1efb, 0x1078, 0x3151, 0x00c0, 0x1f71, 0x71b4, 0x8107, 0x7882,
        0x789b, 0x0010, 0xa18c, 0x0007, 0xa18d, 0x00c0, 0x79aa, 0x78ab,
        0x0006, 0x789b, 0x0060, 0x78ab, 0x0002, 0x785b, 0x0004, 0x2009,
-       0x00fb, 0x1078, 0x271d, 0x00c0, 0x1f34, 0x70bc, 0x70bf, 0x0000,
-       0x2068, 0x703e, 0x7003, 0x0002, 0x0078, 0x1e79, 0x1078, 0x3051,
-       0x00c0, 0x1e79, 0x70bc, 0x2068, 0x1078, 0x30f3, 0x789b, 0x0010,
-       0x6814, 0xa084, 0x0007, 0xa085, 0x0080, 0x007e, 0x007f, 0x78aa,
-       0x6e1c, 0x067e, 0x067f, 0x2041, 0x0001, 0x70c0, 0xa084, 0x0400,
-       0x2001, 0x0004, 0x0040, 0x1f56, 0x2001, 0x0006, 0x0078, 0x2057,
-       0x1078, 0x3051, 0x00c0, 0x1e79, 0x789b, 0x0010, 0x705c, 0x2068,
-       0x1078, 0x30f3, 0x6f14, 0x1078, 0x2f99, 0x6008, 0xa085, 0x0010,
-       0x600a, 0xad80, 0x0009, 0x2003, 0x0005, 0x6814, 0xa084, 0x0007,
-       0xa085, 0x0080, 0x78aa, 0x2031, 0x0020, 0x2041, 0x0001, 0x2001,
-       0x0003, 0x0078, 0x2057, 0x0018, 0x1e3e, 0x7440, 0xa485, 0x0000,
-       0x0040, 0x1f95, 0xa080, 0x3880, 0x2030, 0x7144, 0x8108, 0xa12a,
-       0x0048, 0x1f8c, 0x2009, 0x3880, 0x2164, 0x6504, 0x85ff, 0x00c0,
-       0x1fa2, 0x8421, 0x00c0, 0x1f86, 0x7146, 0x7003, 0x0000, 0x703f,
-       0x0000, 0x0078, 0x1e79, 0x7640, 0xa6b0, 0x3880, 0x7144, 0x2600,
-       0x0078, 0x1f91, 0x7146, 0x2568, 0x2558, 0x753e, 0x2c50, 0x6708,
-       0x7736, 0xa784, 0x013f, 0x0040, 0x1fcf, 0xa784, 0x0021, 0x00c0,
-       0x1f9f, 0xa784, 0x0002, 0x0040, 0x1fbc, 0xa784, 0x0004, 0x0040,
-       0x1f9f, 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0008, 0x00c0, 0x1f9f,
-       0xa784, 0x0010, 0x00c0, 0x1f9f, 0xa784, 0x0100, 0x0040, 0x1fcf,
-       0x6018, 0xa005, 0x00c0, 0x1f9f, 0xa7bc, 0xfeff, 0x670a, 0x6823,
-       0x0000, 0x6e1c, 0xa684, 0x000e, 0x6118, 0x0040, 0x1fdf, 0x601c,
-       0xa102, 0x0048, 0x1fe2, 0x0040, 0x1fe2, 0x0078, 0x1f9b, 0x81ff,
-       0x00c0, 0x1f9b, 0xa784, 0x0080, 0x00c0, 0x1fe8, 0x700c, 0x6022,
-       0x1078, 0x30f3, 0x0018, 0x1e3e, 0x789b, 0x0010, 0xa046, 0x1078,
-       0x3051, 0x00c0, 0x1e79, 0x6b14, 0xa39c, 0x0007, 0xa39d, 0x00c0,
-       0x704c, 0xa084, 0x8000, 0x0040, 0x2001, 0xa684, 0x0001, 0x0040,
-       0x2003, 0xa39c, 0xffbf, 0xa684, 0x0010, 0x0040, 0x2009, 0xa39d,
-       0x0020, 0x7baa, 0x8840, 0xa684, 0x000e, 0x00c0, 0x2014, 0xa7bd,
-       0x0010, 0x670a, 0x0078, 0x2055, 0x714c, 0xa18c, 0x0800, 0x0040,
-       0x2c2b, 0x2011, 0x0021, 0x8004, 0x8004, 0x0048, 0x202b, 0x2011,
-       0x0022, 0x8004, 0x0048, 0x202b, 0x2011, 0x0020, 0x8004, 0x0048,
-       0x202b, 0x0040, 0x2055, 0x7aaa, 0x8840, 0x1078, 0x306a, 0x6a14,
-       0x610c, 0x8108, 0xa18c, 0x00ff, 0xa1e0, 0x4180, 0x2c64, 0x8cff,
-       0x0040, 0x204c, 0x6014, 0xa206, 0x00c0, 0x2036, 0x60b8, 0x8001,
-       0x60ba, 0x00c0, 0x2031, 0x0c7e, 0x2a60, 0x6008, 0xa085, 0x0100,
-       0x600a, 0x0c7f, 0x0078, 0x1f7b, 0x1078, 0x3051, 0x00c0, 0x1e79,
-       0x2a60, 0x610e, 0x79aa, 0x8840, 0x712e, 0x2001, 0x0001, 0x007e,
-       0x7150, 0xa184, 0x0018, 0x0040, 0x2072, 0xa184, 0x0010, 0x0040,
-       0x2065, 0x1078, 0x2de3, 0x00c0, 0x2095, 0xa184, 0x0008, 0x0040,
-       0x2072, 0x69a0, 0xa184, 0x0600, 0x00c0, 0x2072, 0x1078, 0x2cdf,
-       0x0078, 0x2095, 0x69a0, 0xa184, 0x0800, 0x0040, 0x2089, 0x0c7e,
-       0x027e, 0x2960, 0x6000, 0xa085, 0x2000, 0x6002, 0x6104, 0xa18d,
-       0x0010, 0x6106, 0x027f, 0x0c7f, 0x1078, 0x2de3, 0x00c0, 0x2095,
-       0x69a0, 0xa184, 0x0200, 0x0040, 0x2091, 0x1078, 0x2d2e, 0x0078,
-       0x2095, 0xa184, 0x0400, 0x00c0, 0x206e, 0x69a0, 0xa184, 0x1000,
-       0x0040, 0x20a0, 0x6914, 0xa18c, 0xff00, 0x810f, 0x1078, 0x1d25,
-       0x007f, 0x7002, 0xa68c, 0x00e0, 0xa684, 0x0060, 0x0040, 0x20ae,
-       0xa086, 0x0060, 0x00c0, 0x20ae, 0xa18d, 0x4000, 0x88ff, 0x0040,
-       0x20b3, 0xa18d, 0x0004, 0x795a, 0x69b6, 0x789b, 0x0060, 0x2800,
-       0x78aa, 0x789b, 0x0061, 0x6818, 0xa08d, 0x8000, 0xa084, 0x7fff,
-       0x691a, 0xa68c, 0x0080, 0x0040, 0x20d2, 0x70cb, 0x0000, 0xa08a,
-       0x000d, 0x0050, 0x20d0, 0xa08a, 0x000c, 0x71ca, 0x2001, 0x000c,
-       0x800c, 0x71ce, 0x78aa, 0x8008, 0x810c, 0x0040, 0x2c36, 0xa18c,
-       0x00f8, 0x00c0, 0x2c36, 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,
-       0x20fb, 0x0098, 0x2103, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078,
-       0x306a, 0x0078, 0x1e81, 0x7200, 0xa284, 0x0007, 0xa086, 0x0001,
-       0x00c0, 0x2110, 0x781b, 0x004a, 0x1078, 0x306a, 0x0078, 0x2121,
-       0x6ab4, 0xa295, 0x2000, 0x7a5a, 0x781b, 0x004a, 0x1078, 0x306a,
-       0x7200, 0x2500, 0xa605, 0x0040, 0x2121, 0xa284, 0x0007, 0x1079,
-       0x212f, 0xa284, 0x0007, 0xa086, 0x0001, 0x00c0, 0x1e79, 0x6018,
-       0x8000, 0x601a, 0xad80, 0x0009, 0x7032, 0x0078, 0x1e79, 0x2137,
-       0x347d, 0x347d, 0x346c, 0x347d, 0x2137, 0x346c, 0x2137, 0x1078,
-       0x1e2a, 0x7808, 0xa084, 0xfffd, 0x780a, 0x0f7e, 0x2079, 0x3800,
-       0x78b0, 0x0f7f, 0xa084, 0x0001, 0x0040, 0x215f, 0x70a0, 0xa086,
-       0x0001, 0x00c0, 0x214e, 0x70a2, 0x0078, 0x21e2, 0x70a0, 0xa086,
-       0x0005, 0x00c0, 0x215d, 0x70bc, 0x2068, 0x681b, 0x0004, 0x6817,
-       0x0000, 0x6820, 0xa085, 0x0008, 0x6822, 0x70a3, 0x0000, 0x157e,
-       0x2011, 0x0004, 0x71a0, 0xa186, 0x0001, 0x0040, 0x217d, 0xa186,
-       0x0007, 0x00c0, 0x2171, 0x2009, 0x3831, 0x200b, 0x0005, 0x0078,
-       0x217d, 0x2009, 0x3813, 0x2104, 0x2009, 0x3812, 0x200a, 0x2009,
-       0x3831, 0x200b, 0x0001, 0x0078, 0x217f, 0x70a3, 0x0000, 0x1078,
-       0x31f5, 0x20a9, 0x0010, 0x2039, 0x0000, 0x1078, 0x2e9a, 0xa7b8,
-       0x0100, 0x0070, 0x218d, 0x0078, 0x2185, 0x7000, 0x0079, 0x2190,
-       0x21be, 0x21a7, 0x21a7, 0x219a, 0x21be, 0x21be, 0x21be, 0x2198,
-       0x1078, 0x1e2a, 0x2021, 0x3857, 0x2404, 0xa005, 0x0040, 0x21be,
-       0xad06, 0x00c0, 0x21a7, 0x6800, 0x2022, 0x0078, 0x21b7, 0x6820,
-       0xa084, 0x0001, 0x00c0, 0x21b3, 0x6f14, 0x1078, 0x2f99, 0x1078,
-       0x2bf8, 0x0078, 0x21b7, 0x7054, 0x2060, 0x6800, 0x6002, 0x6a1a,
-       0x6820, 0xa085, 0x0008, 0x6822, 0x1078, 0x19a4, 0x2021, 0x4280,
-       0x1078, 0x21e8, 0x2021, 0x3857, 0x1078, 0x21e8, 0x20a9, 0x0000,
-       0x2021, 0x4180, 0x1078, 0x21e8, 0x8420, 0x0070, 0x21d1, 0x0078,
-       0x21ca, 0x20a9, 0x0080, 0x2061, 0x3980, 0x6018, 0x6110, 0xa102,
-       0x6012, 0x601b, 0x0000, 0xace0, 0x0010, 0x0070, 0x21e1, 0x0078,
-       0x21d5, 0x157f, 0x7003, 0x0000, 0x703f, 0x0000, 0x0078, 0x1e79,
-       0x047e, 0x2404, 0xa005, 0x0040, 0x21fa, 0x2068, 0x6800, 0x007e,
-       0x6a1a, 0x6820, 0xa085, 0x0008, 0x6822, 0x1078, 0x19a4, 0x007f,
-       0x0078, 0x21ea, 0x047f, 0x2023, 0x0000, 0x007c, 0xa282, 0x0003,
-       0x0050, 0x2204, 0x1078, 0x1e2a, 0x2300, 0x0079, 0x2207, 0x220a,
-       0x2271, 0x228e, 0xa282, 0x0002, 0x0040, 0x2210, 0x1078, 0x1e2a,
-       0x70a0, 0x70a3, 0x0000, 0x0079, 0x2215, 0x221d, 0x221d, 0x221f,
-       0x2251, 0x224f, 0x221d, 0x2251, 0x221d, 0x1078, 0x1e2a, 0x77b4,
-       0x1078, 0x2e9a, 0x77b4, 0xa7bc, 0x0f00, 0x1078, 0x2f99, 0x6018,
-       0xa005, 0x0040, 0x2248, 0x2021, 0x4280, 0x1078, 0x22a9, 0x0040,
-       0x2248, 0x157e, 0x20a9, 0x0000, 0x2021, 0x4180, 0x047e, 0x1078,
-       0x22a9, 0x047f, 0x0040, 0x2241, 0x8420, 0x0070, 0x2241, 0x0078,
-       0x2236, 0x157f, 0x2021, 0x3857, 0x1078, 0x22a9, 0x0040, 0x2248,
-       0x8738, 0xa784, 0x0007, 0x00c0, 0x2225, 0x0078, 0x1e81, 0x0078,
-       0x1e81, 0x77b4, 0x1078, 0x2f99, 0x6018, 0xa005, 0x0040, 0x226f,
-       0x2021, 0x4280, 0x1078, 0x22a9, 0x0040, 0x226f, 0x157e, 0x20a9,
-       0x0000, 0x2021, 0x4180, 0x047e, 0x1078, 0x22a9, 0x047f, 0x0040,
-       0x226e, 0x8420, 0x0070, 0x226e, 0x0078, 0x2263, 0x157f, 0x0078,
-       0x1e81, 0x2200, 0x0079, 0x2274, 0x2277, 0x2279, 0x2279, 0x1078,
-       0x1e2a, 0x2009, 0x0012, 0x70a0, 0xa086, 0x0002, 0x0040, 0x2282,
-       0x2009, 0x000e, 0x6818, 0xa084, 0x8000, 0x0040, 0x2288, 0x691a,
-       0x70a3, 0x0000, 0x70a7, 0x0001, 0x0078, 0x301c, 0x2200, 0x0079,
-       0x2291, 0x2296, 0x2279, 0x2294, 0x1078, 0x1e2a, 0x1078, 0x272c,
-       0x7000, 0xa086, 0x0001, 0x00c0, 0x2bce, 0x1078, 0x2c0e, 0x6008,
-       0xa084, 0xffef, 0x600a, 0x1078, 0x2bc1, 0x0040, 0x2bce, 0x0078,
-       0x1f7b, 0x2404, 0xa005, 0x0040, 0x22cc, 0x2068, 0x2d04, 0x007e,
-       0x6814, 0xa706, 0x0040, 0x22b8, 0x2d20, 0x007f, 0x0078, 0x22aa,
-       0x007f, 0x2022, 0x681b, 0x0004, 0x6820, 0xa085, 0x0010, 0x6822,
-       0x1078, 0x19a4, 0x6010, 0x8001, 0x6012, 0x6008, 0xa084, 0xffef,
-       0x600a, 0x1078, 0x2c0e, 0x007c, 0xa085, 0x0001, 0x0078, 0x22cb,
-       0x2300, 0x0079, 0x22d3, 0x22d8, 0x22d6, 0x2324, 0x1078, 0x1e2a,
-       0x78e4, 0xa005, 0x00d0, 0x22ec, 0x0018, 0x22ec, 0xa084, 0x0007,
-       0x0079, 0x22e2, 0x22fd, 0x230a, 0x22f0, 0x22ea, 0x3044, 0x3044,
-       0x22ea, 0x2317, 0x1078, 0x1e2a, 0x2001, 0x0003, 0x0078, 0x260b,
-       0x6818, 0xa084, 0x8000, 0x0040, 0x22f7, 0x681b, 0x001d, 0x1078,
-       0x2e7d, 0x781b, 0x0053, 0x0078, 0x1e79, 0x6818, 0xa084, 0x8000,
-       0x0040, 0x2304, 0x681b, 0x001d, 0x1078, 0x2e7d, 0x781b, 0x00de,
-       0x0078, 0x1e79, 0x6818, 0xa084, 0x8000, 0x0040, 0x2311, 0x681b,
-       0x001d, 0x1078, 0x2e7d, 0x781b, 0x00e5, 0x0078, 0x1e79, 0x6818,
-       0xa084, 0x8000, 0x0040, 0x231e, 0x681b, 0x001d, 0x1078, 0x2e7d,
-       0x781b, 0x009c, 0x0078, 0x1e79, 0xa584, 0x000f, 0x00c0, 0x2343,
-       0x1078, 0x272c, 0x7000, 0x0079, 0x232d, 0x2335, 0x2337, 0x2335,
-       0x2bce, 0x2bce, 0x2bce, 0x2bce, 0x2335, 0x1078, 0x1e2a, 0x1078,
-       0x2c0e, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x2bc1, 0x0040,
-       0x2bce, 0x0078, 0x1f7b, 0x79e4, 0xa005, 0x00d0, 0x22ec, 0x0018,
-       0x22ec, 0xa184, 0x0007, 0x0079, 0x234d, 0x235d, 0x2363, 0x2357,
-       0x2355, 0x3044, 0x3044, 0x2355, 0x303c, 0x1078, 0x1e2a, 0x1078,
-       0x2e85, 0x781b, 0x0053, 0x0078, 0x1e79, 0x1078, 0x2e85, 0x781b,
-       0x00de, 0x0078, 0x1e79, 0x1078, 0x2e85, 0x781b, 0x00e5, 0x0078,
-       0x1e79, 0x1078, 0x2e85, 0x781b, 0x009c, 0x0078, 0x1e79, 0x2300,
-       0x0079, 0x2372, 0x2377, 0x2375, 0x2379, 0x1078, 0x1e2a, 0x0078,
-       0x2925, 0x681b, 0x0008, 0x78a3, 0x0000, 0x79e4, 0xa184, 0x0007,
-       0x0079, 0x2382, 0x238a, 0x2363, 0x22f0, 0x301c, 0x3044, 0x3044,
-       0x238a, 0x303c, 0x1078, 0x1e2a, 0xa282, 0x0005, 0x0050, 0x2392,
-       0x1078, 0x1e2a, 0x2300, 0x0079, 0x2395, 0x2398, 0x25bc, 0x25c8,
-       0x2200, 0x0079, 0x239b, 0x23b5, 0x23a2, 0x23b5, 0x23a0, 0x25a1,
-       0x1078, 0x1e2a, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa082,
-       0x0020, 0x0048, 0x2e69, 0xa08a, 0x0004, 0x00c8, 0x2e69, 0x0079,
-       0x23b1, 0x2e69, 0x2e69, 0x2e69, 0x2e23, 0x789b, 0x0018, 0x79a8,
-       0xa184, 0x0080, 0x0040, 0x23ca, 0xa184, 0x0018, 0x0040, 0x23c6,
-       0x0078, 0x2e69, 0x7000, 0xa005, 0x00c0, 0x23c0, 0x2011, 0x0004,
-       0x0078, 0x2a57, 0xa184, 0x00ff, 0xa08a, 0x0010, 0x00c8, 0x2e69,
-       0x0079, 0x23d2, 0x23e4, 0x23e2, 0x23fc, 0x2400, 0x24b8, 0x2e69,
-       0x2e69, 0x24ba, 0x2e69, 0x2e69, 0x259d, 0x259d, 0x2e69, 0x2e69,
-       0x2e69, 0x259f, 0x1078, 0x1e2a, 0xa684, 0x1000, 0x0040, 0x23f1,
-       0x2001, 0x0300, 0x8000, 0x8000, 0x783a, 0x781b, 0x0099, 0x0078,
-       0x1e79, 0x6818, 0xa084, 0x8000, 0x0040, 0x23fa, 0x681b, 0x001d,
-       0x0078, 0x23e8, 0x0078, 0x301c, 0x681b, 0x001d, 0x0078, 0x2e75,
-       0x6920, 0xa184, 0x8000, 0x00c0, 0x240c, 0x68af, 0x0000, 0x68b3,
-       0x0000, 0xa18d, 0x8000, 0x6922, 0xa684, 0x1800, 0x00c0, 0x244b,
-       0x6820, 0xa084, 0x0001, 0x00c0, 0x2451, 0x6818, 0xa086, 0x0008,
-       0x00c0, 0x241c, 0x681b, 0x0000, 0xa684, 0x0400, 0x0040, 0x24b4,
-       0xa684, 0x0080, 0x0040, 0x2447, 0x70cb, 0x0000, 0x6818, 0xa084,
-       0x003f, 0xa08a, 0x000d, 0x0050, 0x2447, 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, 0x1e79, 0xa684, 0x1000, 0x0040, 0x2451, 0x0078,
-       0x1e79, 0xa684, 0x0060, 0x0040, 0x24b0, 0xa684, 0x0800, 0x0040,
-       0x24b0, 0xa684, 0x8000, 0x00c0, 0x2461, 0x69b0, 0x6aac, 0x0078,
-       0x247b, 0xa6b4, 0x7fff, 0x7e5a, 0x6eb6, 0x789b, 0x0074, 0x7aac,
-       0x79ac, 0x78ac, 0x801b, 0x00c8, 0x246e, 0x8000, 0xa084, 0x003f,
-       0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302, 0x68b2, 0x6b94,
-       0x2200, 0xa303, 0x68ae, 0xa684, 0x4000, 0x0040, 0x2483, 0xa6b4,
-       0xbfff, 0x7e5a, 0x6eb6, 0xa006, 0x1078, 0x353b, 0x6ab0, 0x69ac,
-       0x6c98, 0x6b94, 0x2200, 0xa105, 0x0040, 0x2492, 0x2200, 0xa422,
-       0x2100, 0xa31b, 0x6caa, 0x7cd2, 0x6ba6, 0x7bd6, 0x2300, 0xa405,
-       0x00c0, 0x24a2, 0xa6b5, 0x4000, 0x7e5a, 0x6eb6, 0x781b, 0x0065,
-       0x0078, 0x1e79, 0x781b, 0x0065, 0x2200, 0xa115, 0x00c0, 0x24ac,
-       0x1078, 0x347d, 0x0078, 0x1e79, 0x1078, 0x34b2, 0x0078, 0x1e79,
-       0x781b, 0x0068, 0x0078, 0x1e79, 0x781b, 0x0056, 0x0078, 0x1e79,
-       0x1078, 0x1e2a, 0x0078, 0x250f, 0x6920, 0xa184, 0x0100, 0x0040,
-       0x24ce, 0xa18c, 0xfeff, 0x6922, 0x0c7e, 0x7048, 0x2060, 0x6004,
-       0xa084, 0xfff5, 0x6006, 0x0c7f, 0x0078, 0x24fe, 0xa184, 0x0200,
-       0x0040, 0x24fe, 0xa18c, 0xfdff, 0x6922, 0x0c7e, 0x7048, 0x2060,
-       0x6004, 0xa084, 0xffef, 0x6006, 0x2008, 0x2c48, 0x0c7f, 0xa184,
-       0x0008, 0x0040, 0x24fe, 0x1078, 0x2f95, 0x1078, 0x2cdf, 0x88ff,
-       0x0040, 0x24fe, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xa6b5,
-       0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x24fa, 0x781b, 0x0053,
-       0x0078, 0x1e79, 0x781b, 0x0067, 0x0078, 0x1e79, 0x7e58, 0xa684,
-       0x0400, 0x00c0, 0x2507, 0x781b, 0x0056, 0x0078, 0x1e79, 0x781b,
-       0x0068, 0x0078, 0x1e79, 0x0078, 0x2e6f, 0x0078, 0x2e6f, 0x2019,
-       0x0000, 0x7990, 0xa18c, 0x0007, 0x0040, 0x250d, 0x789b, 0x0010,
-       0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001, 0x00c0, 0x2532, 0x2300,
-       0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040, 0x252a, 0x0048, 0x252a,
-       0x0078, 0x252c, 0x0078, 0x24bc, 0x24a8, 0x7aa8, 0x00f0, 0x252c,
-       0x0078, 0x2518, 0xa284, 0x00f0, 0xa086, 0x0020, 0x00c0, 0x258e,
-       0x8318, 0x8318, 0x2300, 0xa102, 0x0040, 0x2542, 0x0048, 0x2542,
-       0x0078, 0x258b, 0xa286, 0x0023, 0x0040, 0x250d, 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, 0x2566,
-       0x1078, 0x2f95, 0x1078, 0x2de3, 0x0078, 0x2575, 0x0c7e, 0x7048,
-       0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xa184, 0x0008, 0x0040,
-       0x24fe, 0x1078, 0x2f95, 0x1078, 0x2cdf, 0x88ff, 0x0040, 0x24fe,
-       0x789b, 0x0060, 0x2800, 0x78aa, 0xa6b5, 0x0004, 0x7e5a, 0xa684,
-       0x0400, 0x00c0, 0x2587, 0x781b, 0x0053, 0x0078, 0x1e79, 0x781b,
-       0x0067, 0x0078, 0x1e79, 0x7aa8, 0x0078, 0x2518, 0x8318, 0x2300,
-       0xa102, 0x0040, 0x2597, 0x0048, 0x2597, 0x0078, 0x2518, 0xa284,
-       0x0080, 0x00c0, 0x2e75, 0x0078, 0x2e6f, 0x0078, 0x2e75, 0x0078,
-       0x2e69, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff, 0xa08e, 0x0001,
-       0x0040, 0x25ac, 0x1078, 0x1e2a, 0x7aa8, 0xa294, 0x00ff, 0x78a8,
-       0xa084, 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x2e69, 0x0079, 0x25b8,
-       0x2e69, 0x2c4f, 0x2e69, 0x2d7e, 0xa282, 0x0000, 0x00c0, 0x25c2,
-       0x1078, 0x1e2a, 0x1078, 0x2e7d, 0x781b, 0x0067, 0x0078, 0x1e79,
-       0xa282, 0x0003, 0x00c0, 0x25ce, 0x1078, 0x1e2a, 0xa484, 0x8000,
-       0x00c0, 0x25f1, 0x70a0, 0xa005, 0x0040, 0x25d8, 0x1078, 0x1e2a,
-       0x6f14, 0x77b6, 0xa7bc, 0x0f00, 0x1078, 0x2f99, 0x6008, 0xa085,
-       0x0021, 0x600a, 0x8738, 0xa784, 0x0007, 0x00c0, 0x25dc, 0x1078,
-       0x2e81, 0x70a3, 0x0002, 0x2009, 0x3831, 0x200b, 0x0009, 0x0078,
-       0x25f3, 0x1078, 0x2e8d, 0x781b, 0x0067, 0x0078, 0x1e79, 0xa282,
-       0x0004, 0x0050, 0x25fd, 0x1078, 0x1e2a, 0x2300, 0x0079, 0x2600,
-       0x2603, 0x26df, 0x2707, 0xa286, 0x0003, 0x0040, 0x2609, 0x1078,
-       0x1e2a, 0x2001, 0x0000, 0x703a, 0x7000, 0xa084, 0x0007, 0x0079,
-       0x2611, 0x2619, 0x261b, 0x261b, 0x27cf, 0x2800, 0x1e81, 0x2800,
-       0x2619, 0x1078, 0x1e2a, 0xa684, 0x1000, 0x00c0, 0x2623, 0x1078,
-       0x31f5, 0x0040, 0x26b9, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x266b,
-       0xa186, 0x0008, 0x00c0, 0x263a, 0x1078, 0x2c0e, 0x6008, 0xa084,
-       0xffef, 0x600a, 0x1078, 0x2bc1, 0x0040, 0x266b, 0x1078, 0x31f5,
-       0x0078, 0x2652, 0xa186, 0x0028, 0x00c0, 0x266b, 0x1078, 0x31f5,
-       0x6008, 0xa084, 0xffef, 0x600a, 0x6018, 0xa005, 0x0040, 0x2652,
-       0x8001, 0x601a, 0xa005, 0x0040, 0x2652, 0x8001, 0xa005, 0x0040,
-       0x2652, 0x601e, 0x6820, 0xa084, 0x0001, 0x0040, 0x1e81, 0x6820,
-       0xa084, 0xfffe, 0x6822, 0x7054, 0x0c7e, 0x2060, 0x6800, 0x6002,
-       0x0c7f, 0x6004, 0x6802, 0xa005, 0x2d00, 0x00c0, 0x2668, 0x6002,
-       0x6006, 0x0078, 0x1e81, 0x017e, 0x1078, 0x272c, 0x017f, 0xa684,
-       0xdf00, 0x681e, 0x682b, 0x0000, 0x6f14, 0x81ff, 0x0040, 0x26b9,
-       0xa186, 0x0002, 0x00c0, 0x26b1, 0xa684, 0x0800, 0x00c0, 0x2688,
-       0xa684, 0x0060, 0x0040, 0x2688, 0x78d8, 0x7adc, 0x682e, 0x6a32,
-       0x6820, 0xa084, 0x0800, 0x00c0, 0x26b9, 0x8717, 0xa294, 0x000f,
-       0x8213, 0x8213, 0x8213, 0xa290, 0x3900, 0xa290, 0x0000, 0x221c,
-       0x8210, 0x2204, 0xa085, 0x0018, 0x2012, 0x8211, 0xa384, 0x0400,
-       0x0040, 0x26ab, 0x68a0, 0xa084, 0x0100, 0x00c0, 0x26ab, 0x1078,
-       0x278e, 0x0078, 0x1e81, 0x6008, 0xa085, 0x0002, 0x600a, 0x0078,
-       0x26b9, 0xa186, 0x0018, 0x0040, 0x26b9, 0xa186, 0x0014, 0x0040,
-       0x1e81, 0x6916, 0x6818, 0xa084, 0x8000, 0x0040, 0x26c1, 0x7038,
-       0x681a, 0xa68c, 0xdf00, 0x691e, 0x1078, 0x2bff, 0x1078, 0x2c0e,
-       0x00c0, 0x26ce, 0x6008, 0xa084, 0xffef, 0x600a, 0x6820, 0xa084,
-       0x0001, 0x00c0, 0x26d7, 0x1078, 0x2bf8, 0x0078, 0x26db, 0x7054,
-       0x2060, 0x6800, 0x6002, 0x1078, 0x19a4, 0x0078, 0x1e81, 0xa282,
-       0x0004, 0x0048, 0x26e5, 0x1078, 0x1e2a, 0x2200, 0x0079, 0x26e8,
-       0x26e3, 0x26ec, 0x26f2, 0x26ec, 0x1078, 0x2e7d, 0x781b, 0x0067,
-       0x0078, 0x1e79, 0x7890, 0x8007, 0x8001, 0xa084, 0x0007, 0xa080,
-       0x0018, 0x789a, 0x79a8, 0xa18c, 0x00ff, 0xa186, 0x0003, 0x0040,
-       0x2703, 0x0078, 0x2e69, 0x781b, 0x0068, 0x0078, 0x1e79, 0x6820,
-       0xa085, 0x0004, 0x6822, 0x82ff, 0x00c0, 0x2712, 0x1078, 0x2e7d,
-       0x0078, 0x2719, 0x8211, 0x0040, 0x2717, 0x1078, 0x1e2a, 0x1078,
-       0x2e8d, 0x781b, 0x0067, 0x0078, 0x1e79, 0x1078, 0x306a, 0x7830,
-       0xa084, 0x00c0, 0x00c0, 0x2729, 0x0018, 0x2729, 0x791a, 0xa006,
-       0x007c, 0xa085, 0x0001, 0x007c, 0xa684, 0x0060, 0x00c0, 0x2736,
-       0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x278d, 0xa684, 0x0800,
-       0x00c0, 0x2746, 0x6998, 0x6a94, 0x692e, 0x6a32, 0x7000, 0xa086,
-       0x0006, 0x0040, 0x2745, 0x1078, 0x31f5, 0x007c, 0xa684, 0x0020,
-       0x0040, 0x2760, 0xa684, 0x4000, 0x0040, 0x2754, 0x682f, 0x0000,
-       0x6833, 0x0000, 0x0078, 0x273e, 0x7038, 0xa005, 0x00c0, 0x275a,
-       0x703b, 0x0015, 0x79d8, 0x7adc, 0x692e, 0x6a32, 0x0078, 0x273e,
-       0xa684, 0x4000, 0x0040, 0x276a, 0x682f, 0x0000, 0x6833, 0x0000,
-       0x0078, 0x273e, 0x7038, 0xa005, 0x00c0, 0x2770, 0x703b, 0x0015,
-       0x79d8, 0x7adc, 0x78d0, 0x80fb, 0x00c8, 0x2777, 0x8000, 0xa084,
-       0x003f, 0xa108, 0xa291, 0x0000, 0x692e, 0x6a32, 0x2100, 0xa205,
-       0x00c0, 0x2784, 0x0078, 0x273e, 0x7000, 0xa086, 0x0006, 0x0040,
-       0x278d, 0x1078, 0x353b, 0x0078, 0x273e, 0x007c, 0xa384, 0x0200,
-       0x0040, 0x2796, 0x6008, 0xa085, 0x0002, 0x600a, 0x681b, 0x0006,
-       0x6a30, 0x692c, 0x6a3e, 0x6942, 0x682f, 0x0003, 0x6833, 0x0000,
-       0x6837, 0x0020, 0x6897, 0x0000, 0x689b, 0x0020, 0x7000, 0x0079,
-       0x27a9, 0x27b1, 0x27b3, 0x27bc, 0x27b1, 0x27b1, 0x27b1, 0x27b1,
-       0x27b1, 0x1078, 0x1e2a, 0x6820, 0xa084, 0x0001, 0x00c0, 0x27bc,
-       0x1078, 0x2bf8, 0x0078, 0x27c2, 0x7054, 0x2c50, 0x2060, 0x6800,
-       0x6002, 0x2a60, 0x2021, 0x3857, 0x2404, 0xa005, 0x0040, 0x27cb,
-       0x2020, 0x0078, 0x27c4, 0x2d22, 0x206b, 0x0000, 0x007c, 0x1078,
-       0x2bff, 0x1078, 0x2c0e, 0x682b, 0x0000, 0x789b, 0x000e, 0x6f14,
-       0x6817, 0x0002, 0x1078, 0x3575, 0xa684, 0x0800, 0x0040, 0x27e4,
-       0x691c, 0xa18d, 0x2000, 0x691e, 0x6818, 0xa084, 0x8000, 0x0040,
-       0x27f4, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x27f2, 0x681b, 0x001e,
-       0x0078, 0x27f4, 0x681b, 0x0000, 0x2021, 0x3857, 0x6800, 0x2022,
-       0x6a3c, 0x6940, 0x6a32, 0x692e, 0x1078, 0x19a4, 0x0078, 0x1e81,
-       0x1078, 0x272c, 0x682b, 0x0000, 0x789b, 0x000e, 0x6f14, 0x1078,
-       0x306f, 0xa08c, 0x00ff, 0x6916, 0x6818, 0xa084, 0x8000, 0x0040,
-       0x2813, 0x7038, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x70a3, 0x0000,
-       0x0078, 0x1e81, 0xa006, 0x1078, 0x31f5, 0x6817, 0x0000, 0x681b,
-       0x0001, 0xa68c, 0xdf00, 0x691e, 0x682b, 0x0000, 0x7000, 0x0079,
-       0x2829, 0x2831, 0x2833, 0x2833, 0x2835, 0x2835, 0x2835, 0x2835,
-       0x2831, 0x1078, 0x1e2a, 0x1078, 0x2c0e, 0x6008, 0xa084, 0xffef,
-       0x600a, 0x0078, 0x2bd9, 0x2300, 0x0079, 0x283e, 0x2841, 0x2843,
-       0x287c, 0x1078, 0x1e2a, 0x7000, 0x0079, 0x2846, 0x284e, 0x2850,
-       0x2850, 0x286b, 0x2850, 0x2878, 0x286b, 0x284e, 0x1078, 0x1e2a,
-       0xa684, 0x0060, 0xa086, 0x0060, 0x00c0, 0x2867, 0xa6b4, 0xffdf,
-       0xa6b4, 0xbfff, 0xa6b5, 0x2000, 0x7e5a, 0x681c, 0xa084, 0xffdf,
-       0x681e, 0x1078, 0x31f5, 0x1078, 0x347d, 0x0078, 0x301c, 0xa684,
-       0x2000, 0x0040, 0x285a, 0x6818, 0xa084, 0x8000, 0x0040, 0x2878,
-       0x681b, 0x0015, 0xa684, 0x4000, 0x0040, 0x2878, 0x681b, 0x0007,
-       0x781b, 0x00df, 0x0078, 0x1e79, 0x1078, 0x1e2a, 0x2300, 0x0079,
-       0x2881, 0x2884, 0x2886, 0x28b9, 0x1078, 0x1e2a, 0x7000, 0x0079,
-       0x2889, 0x2891, 0x2893, 0x2893, 0x28ae, 0x2893, 0x28b5, 0x28ae,
-       0x2891, 0x1078, 0x1e2a, 0xa684, 0x0060, 0xa086, 0x0060, 0x00c0,
-       0x28aa, 0xa6b4, 0xffbf, 0xa6b4, 0xbfff, 0xa6b5, 0x2000, 0x7e5a,
-       0x681c, 0xa084, 0xffbf, 0x681e, 0x1078, 0x31f5, 0x1078, 0x347d,
-       0x0078, 0x301c, 0xa684, 0x2000, 0x0040, 0x289d, 0x6818, 0xa084,
-       0x8000, 0x0040, 0x28b5, 0x681b, 0x0007, 0x781b, 0x00e6, 0x0078,
-       0x1e79, 0x6820, 0xa085, 0x0004, 0x6822, 0x1078, 0x2fe7, 0xa6b5,
-       0x0800, 0x1078, 0x2e7d, 0x781b, 0x0067, 0x0078, 0x1e79, 0x2300,
-       0x0079, 0x28ca, 0x28cd, 0x28cf, 0x28d1, 0x1078, 0x1e2a, 0x1078,
-       0x1e2a, 0x782b, 0x3009, 0xa684, 0x0400, 0x00c0, 0x28eb, 0x789b,
-       0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb, 0x785a, 0x79e4, 0xa184,
-       0x0020, 0x00c0, 0x28e7, 0x2001, 0x0014, 0x0078, 0x260b, 0xa184,
-       0x0007, 0x0079, 0x291b, 0x7a90, 0xa294, 0x0007, 0x789b, 0x0060,
-       0x79a8, 0x81ff, 0x0040, 0x2919, 0x789b, 0x0010, 0x7ba8, 0xa384,
-       0x0001, 0x00c0, 0x2912, 0x7ba8, 0x7ba8, 0xa386, 0x0001, 0x00c0,
-       0x2905, 0x2009, 0xfff7, 0x0078, 0x290b, 0xa386, 0x0003, 0x00c0,
-       0x2912, 0x2009, 0xffef, 0x0c7e, 0x7048, 0x2060, 0x6004, 0xa104,
-       0x6006, 0x0c7f, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb,
-       0x785a, 0x0078, 0x301c, 0x22fd, 0x230a, 0x3024, 0x3024, 0x2923,
-       0x2923, 0x2923, 0x3024, 0x1078, 0x1e2a, 0x79e4, 0xa184, 0x0030,
-       0x00c0, 0x293b, 0x70a0, 0xa086, 0x0002, 0x00c0, 0x2933, 0x2011,
-       0x0002, 0x0078, 0x21fe, 0x6818, 0xa085, 0x8000, 0x681a, 0x2001,
-       0x0014, 0x0078, 0x260b, 0xa18c, 0x0007, 0xa186, 0x0002, 0x00c0,
-       0x3044, 0xa684, 0x0080, 0x0040, 0x2970, 0x71c8, 0x81ff, 0x0040,
-       0x2970, 0xa182, 0x000d, 0x00d0, 0x2951, 0x70cb, 0x0000, 0x0078,
-       0x2956, 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, 0x3024,
-       0xa684, 0x0400, 0x00c0, 0x29b1, 0x6820, 0xa084, 0x0001, 0x0040,
-       0x3024, 0xa68c, 0x0060, 0xa684, 0x0060, 0x0040, 0x2985, 0xa086,
-       0x0060, 0x00c0, 0x2985, 0xa18d, 0x4000, 0xa18c, 0xfffb, 0x795a,
-       0x69b6, 0x789b, 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061, 0x6818,
-       0xa085, 0x8000, 0x681a, 0x78aa, 0x8008, 0x810c, 0x0040, 0x2c36,
-       0xa18c, 0x00f8, 0x00c0, 0x2c36, 0x157e, 0x137e, 0x147e, 0x20a1,
-       0x012b, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b, 0x2098,
-       0x53a6, 0x147f, 0x137f, 0x157f, 0x6814, 0x8007, 0x7882, 0x0078,
-       0x3024, 0x6818, 0xa084, 0x8000, 0x0040, 0x29b8, 0x681b, 0x0008,
-       0x781b, 0x00da, 0x0078, 0x1e79, 0x2300, 0x0079, 0x29bf, 0x29c4,
-       0x2a47, 0x29c2, 0x1078, 0x1e2a, 0x7000, 0xa084, 0x0007, 0x0079,
-       0x29c9, 0x29d1, 0x29d3, 0x29ef, 0x29d1, 0x29d1, 0x1e81, 0x29d1,
-       0x29d1, 0x1078, 0x1e2a, 0x6920, 0xa18d, 0x0001, 0x6922, 0x6800,
-       0x6006, 0xa005, 0x00c0, 0x29dd, 0x6002, 0x681c, 0xa084, 0x000e,
-       0x0040, 0x29e9, 0x7014, 0x68ba, 0x712c, 0xa188, 0x4180, 0x0078,
-       0x29eb, 0x2009, 0x4280, 0x2104, 0x6802, 0x2d0a, 0x7156, 0x6920,
-       0xa184, 0x8000, 0x00c0, 0x29fb, 0x68af, 0x0000, 0x68b3, 0x0000,
-       0xa18d, 0x8000, 0x6922, 0x6eb6, 0xa684, 0x0060, 0x0040, 0x2a45,
-       0xa684, 0x0800, 0x00c0, 0x2a0c, 0x6894, 0x68a6, 0x6898, 0x68aa,
-       0x1078, 0x31f5, 0x0078, 0x2a45, 0xa684, 0x0020, 0x0040, 0x2a19,
-       0xa006, 0x1078, 0x353b, 0x79d8, 0x7adc, 0x69aa, 0x6aa6, 0x0078,
-       0x2a1f, 0x1078, 0x2fa6, 0x69aa, 0x6aa6, 0x1078, 0x353b, 0xa684,
-       0x8000, 0x0040, 0x2a45, 0xa684, 0x7fff, 0x68b6, 0x789b, 0x0074,
-       0x1078, 0x306f, 0x2010, 0x1078, 0x306f, 0x2008, 0xa684, 0x0020,
-       0x00c0, 0x2a3d, 0x1078, 0x306f, 0x801b, 0x00c8, 0x2a38, 0x8000,
+       0x00fb, 0x1078, 0x27bf, 0x00c0, 0x1f71, 0x7003, 0x0004, 0x70c7,
+       0x000f, 0x0078, 0x1efb, 0x1078, 0x3151, 0x00c0, 0x1f97, 0x71b4,
+       0x8107, 0x7882, 0x789b, 0x0010, 0xa18c, 0x0007, 0xa18d, 0x00c0,
+       0x79aa, 0x78ab, 0x0020, 0x71b8, 0x79aa, 0x78ab, 0x000d, 0x789b,
+       0x0060, 0x78ab, 0x0004, 0x785b, 0x0004, 0x2009, 0x00fb, 0x1078,
+       0x27bf, 0x00c0, 0x1f97, 0x7003, 0x0004, 0x70c7, 0x000f, 0x0078,
+       0x1efb, 0x1078, 0x3151, 0x00c0, 0x1fbe, 0x71b4, 0x8107, 0x7882,
+       0x789b, 0x0010, 0xa18c, 0x0007, 0xa18d, 0x00c0, 0x79aa, 0x78ab,
+       0x0006, 0x789b, 0x0060, 0x78ab, 0x0002, 0x785b, 0x0004, 0x2009,
+       0x00fb, 0x1078, 0x27bf, 0x00c0, 0x1fbe, 0x70bc, 0x70bf, 0x0000,
+       0x2068, 0x703e, 0x7003, 0x0002, 0x70c7, 0x000f, 0x0078, 0x1efb,
+       0x1078, 0x3151, 0x00c0, 0x1efb, 0x70bc, 0x2068, 0x1078, 0x31f3,
+       0x789b, 0x0010, 0x6814, 0xa084, 0x0007, 0xa085, 0x0080, 0x007e,
+       0x007f, 0x78aa, 0x6e1c, 0x067e, 0x067f, 0x2041, 0x0001, 0x70c0,
+       0xa084, 0x0400, 0x2001, 0x0004, 0x0040, 0x1fe0, 0x2001, 0x0006,
+       0x0078, 0x20e1, 0x1078, 0x3151, 0x00c0, 0x1efb, 0x789b, 0x0010,
+       0x705c, 0x2068, 0x1078, 0x31f3, 0x6f14, 0x1078, 0x3099, 0x6008,
+       0xa085, 0x0010, 0x600a, 0xad80, 0x0009, 0x2003, 0x0005, 0x6814,
+       0xa084, 0x0007, 0xa085, 0x0080, 0x78aa, 0x2031, 0x0020, 0x2041,
+       0x0001, 0x2001, 0x0003, 0x0078, 0x20e1, 0x0018, 0x1ec0, 0x7440,
+       0xa485, 0x0000, 0x0040, 0x201f, 0xa080, 0x3980, 0x2030, 0x7144,
+       0x8108, 0xa12a, 0x0048, 0x2016, 0x2009, 0x3980, 0x2164, 0x6504,
+       0x85ff, 0x00c0, 0x202c, 0x8421, 0x00c0, 0x2010, 0x7146, 0x7003,
+       0x0000, 0x703f, 0x0000, 0x0078, 0x1efb, 0x7640, 0xa6b0, 0x3980,
+       0x7144, 0x2600, 0x0078, 0x201b, 0x7146, 0x2568, 0x2558, 0x753e,
+       0x2c50, 0x6708, 0x7736, 0xa784, 0x013f, 0x0040, 0x2059, 0xa784,
+       0x0021, 0x00c0, 0x2029, 0xa784, 0x0002, 0x0040, 0x2046, 0xa784,
+       0x0004, 0x0040, 0x2029, 0xa7bc, 0xfffb, 0x670a, 0xa784, 0x0008,
+       0x00c0, 0x2029, 0xa784, 0x0010, 0x00c0, 0x2029, 0xa784, 0x0100,
+       0x0040, 0x2059, 0x6018, 0xa005, 0x00c0, 0x2029, 0xa7bc, 0xfeff,
+       0x670a, 0x6823, 0x0000, 0x6e1c, 0xa684, 0x000e, 0x6118, 0x0040,
+       0x2069, 0x601c, 0xa102, 0x0048, 0x206c, 0x0040, 0x206c, 0x0078,
+       0x2025, 0x81ff, 0x00c0, 0x2025, 0xa784, 0x0080, 0x00c0, 0x2072,
+       0x700c, 0x6022, 0x1078, 0x31f3, 0x0018, 0x1ec0, 0x789b, 0x0010,
+       0xa046, 0x1078, 0x3151, 0x00c0, 0x1efb, 0x6b14, 0xa39c, 0x0007,
+       0xa39d, 0x00c0, 0x704c, 0xa084, 0x8000, 0x0040, 0x208b, 0xa684,
+       0x0001, 0x0040, 0x208d, 0xa39c, 0xffbf, 0xa684, 0x0010, 0x0040,
+       0x2093, 0xa39d, 0x0020, 0x7baa, 0x8840, 0xa684, 0x000e, 0x00c0,
+       0x209e, 0xa7bd, 0x0010, 0x670a, 0x0078, 0x20df, 0x714c, 0xa18c,
+       0x0800, 0x0040, 0x2cfc, 0x2011, 0x0021, 0x8004, 0x8004, 0x0048,
+       0x20b5, 0x2011, 0x0022, 0x8004, 0x0048, 0x20b5, 0x2011, 0x0020,
+       0x8004, 0x0048, 0x20b5, 0x0040, 0x20df, 0x7aaa, 0x8840, 0x1078,
+       0x316a, 0x6a14, 0x610c, 0x8108, 0xa18c, 0x00ff, 0xa1e0, 0x4280,
+       0x2c64, 0x8cff, 0x0040, 0x20d6, 0x6014, 0xa206, 0x00c0, 0x20c0,
+       0x60b8, 0x8001, 0x60ba, 0x00c0, 0x20bb, 0x0c7e, 0x2a60, 0x6008,
+       0xa085, 0x0100, 0x600a, 0x0c7f, 0x0078, 0x2005, 0x1078, 0x3151,
+       0x00c0, 0x1efb, 0x2a60, 0x610e, 0x79aa, 0x8840, 0x712e, 0x2001,
+       0x0001, 0x007e, 0x7150, 0xa184, 0x0018, 0x0040, 0x20fc, 0xa184,
+       0x0010, 0x0040, 0x20ef, 0x1078, 0x2ee3, 0x00c0, 0x211f, 0xa184,
+       0x0008, 0x0040, 0x20fc, 0x69a0, 0xa184, 0x0600, 0x00c0, 0x20fc,
+       0x1078, 0x2ddf, 0x0078, 0x211f, 0x69a0, 0xa184, 0x0800, 0x0040,
+       0x2113, 0x0c7e, 0x027e, 0x2960, 0x6000, 0xa085, 0x2000, 0x6002,
+       0x6104, 0xa18d, 0x0010, 0x6106, 0x027f, 0x0c7f, 0x1078, 0x2ee3,
+       0x00c0, 0x211f, 0x69a0, 0xa184, 0x0200, 0x0040, 0x211b, 0x1078,
+       0x2e2e, 0x0078, 0x211f, 0xa184, 0x0400, 0x00c0, 0x20f8, 0x69a0,
+       0xa184, 0x1000, 0x0040, 0x212a, 0x6914, 0xa18c, 0xff00, 0x810f,
+       0x1078, 0x1da7, 0x007f, 0x7002, 0xa68c, 0x00e0, 0xa684, 0x0060,
+       0x0040, 0x2138, 0xa086, 0x0060, 0x00c0, 0x2138, 0xa18d, 0x4000,
+       0x88ff, 0x0040, 0x213d, 0xa18d, 0x0004, 0x795a, 0x69b6, 0x789b,
+       0x0060, 0x2800, 0x78aa, 0x789b, 0x0061, 0x6818, 0xa08d, 0x8000,
+       0xa084, 0x7fff, 0x691a, 0xa68c, 0x0080, 0x0040, 0x215c, 0x70cb,
+       0x0000, 0xa08a, 0x000d, 0x0050, 0x215a, 0xa08a, 0x000c, 0x71ca,
+       0x2001, 0x000c, 0x800c, 0x71ce, 0x78aa, 0x8008, 0x810c, 0x0040,
+       0x2d07, 0xa18c, 0x00f8, 0x00c0, 0x2d07, 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, 0x2185, 0x0098, 0x218d, 0x6008, 0xa084, 0xffef,
+       0x600a, 0x1078, 0x316a, 0x0078, 0x1f03, 0x7200, 0xa284, 0x0007,
+       0xa086, 0x0001, 0x00c0, 0x219a, 0x781b, 0x004a, 0x1078, 0x316a,
+       0x0078, 0x21ab, 0x6ab4, 0xa295, 0x2000, 0x7a5a, 0x781b, 0x004a,
+       0x1078, 0x316a, 0x7200, 0x2500, 0xa605, 0x0040, 0x21ab, 0xa284,
+       0x0007, 0x1079, 0x21b9, 0xa284, 0x0007, 0xa086, 0x0001, 0x00c0,
+       0x1efb, 0x6018, 0x8000, 0x601a, 0xad80, 0x0009, 0x7032, 0x0078,
+       0x1efb, 0x21c1, 0x3571, 0x3571, 0x3560, 0x3571, 0x21c1, 0x3560,
+       0x21c1, 0x1078, 0x1eac, 0x7808, 0xa084, 0xfffd, 0x780a, 0x0f7e,
+       0x2079, 0x3900, 0x78c0, 0x0f7f, 0xa084, 0x0001, 0x0040, 0x21e9,
+       0x70a0, 0xa086, 0x0001, 0x00c0, 0x21d8, 0x70a2, 0x0078, 0x226c,
+       0x70a0, 0xa086, 0x0005, 0x00c0, 0x21e7, 0x70bc, 0x2068, 0x681b,
+       0x0004, 0x6817, 0x0000, 0x6820, 0xa085, 0x0008, 0x6822, 0x70a3,
+       0x0000, 0x157e, 0x2011, 0x0004, 0x71a0, 0xa186, 0x0001, 0x0040,
+       0x2207, 0xa186, 0x0007, 0x00c0, 0x21fb, 0x2009, 0x3935, 0x200b,
+       0x0005, 0x0078, 0x2207, 0x2009, 0x3913, 0x2104, 0x2009, 0x3912,
+       0x200a, 0x2009, 0x3935, 0x200b, 0x0001, 0x0078, 0x2209, 0x70a3,
+       0x0000, 0x1078, 0x32f5, 0x20a9, 0x0010, 0x2039, 0x0000, 0x1078,
+       0x2f9a, 0xa7b8, 0x0100, 0x0070, 0x2217, 0x0078, 0x220f, 0x7000,
+       0x0079, 0x221a, 0x2248, 0x2231, 0x2231, 0x2224, 0x2248, 0x2248,
+       0x2248, 0x2222, 0x1078, 0x1eac, 0x2021, 0x3957, 0x2404, 0xa005,
+       0x0040, 0x2248, 0xad06, 0x00c0, 0x2231, 0x6800, 0x2022, 0x0078,
+       0x2241, 0x6820, 0xa084, 0x0001, 0x00c0, 0x223d, 0x6f14, 0x1078,
+       0x3099, 0x1078, 0x2cc9, 0x0078, 0x2241, 0x7054, 0x2060, 0x6800,
+       0x6002, 0x6a1a, 0x6820, 0xa085, 0x0008, 0x6822, 0x1078, 0x1a26,
+       0x2021, 0x4380, 0x1078, 0x2272, 0x2021, 0x3957, 0x1078, 0x2272,
+       0x20a9, 0x0000, 0x2021, 0x4280, 0x1078, 0x2272, 0x8420, 0x0070,
+       0x225b, 0x0078, 0x2254, 0x20a9, 0x0080, 0x2061, 0x3a80, 0x6018,
+       0x6110, 0xa102, 0x6012, 0x601b, 0x0000, 0xace0, 0x0010, 0x0070,
+       0x226b, 0x0078, 0x225f, 0x157f, 0x7003, 0x0000, 0x703f, 0x0000,
+       0x0078, 0x1efb, 0x047e, 0x2404, 0xa005, 0x0040, 0x2284, 0x2068,
+       0x6800, 0x007e, 0x6a1a, 0x6820, 0xa085, 0x0008, 0x6822, 0x1078,
+       0x1a26, 0x007f, 0x0078, 0x2274, 0x047f, 0x2023, 0x0000, 0x007c,
+       0xa282, 0x0003, 0x0050, 0x228e, 0x1078, 0x1eac, 0x2300, 0x0079,
+       0x2291, 0x2294, 0x2311, 0x232e, 0xa282, 0x0002, 0x0040, 0x229a,
+       0x1078, 0x1eac, 0x70a0, 0x70a3, 0x0000, 0x70c7, 0x0000, 0x0079,
+       0x22a1, 0x22a9, 0x22a9, 0x22ab, 0x22e9, 0x2d0d, 0x22a9, 0x22e9,
+       0x22a9, 0x1078, 0x1eac, 0x77b4, 0x1078, 0x2f9a, 0x77b4, 0xa7bc,
+       0x0f00, 0x1078, 0x3099, 0x6018, 0xa005, 0x0040, 0x22e0, 0x2021,
+       0x4380, 0x2009, 0x0004, 0x2011, 0x0010, 0x1078, 0x2349, 0x0040,
+       0x22e0, 0x157e, 0x20a9, 0x0000, 0x2021, 0x4280, 0x047e, 0x2009,
+       0x0004, 0x2011, 0x0010, 0x1078, 0x2349, 0x047f, 0x0040, 0x22d5,
+       0x8420, 0x0070, 0x22d5, 0x0078, 0x22c6, 0x157f, 0x2021, 0x3957,
+       0x2009, 0x0004, 0x2011, 0x0010, 0x1078, 0x2349, 0x0040, 0x22e0,
+       0x8738, 0xa784, 0x0007, 0x00c0, 0x22b1, 0x0078, 0x1f03, 0x0078,
+       0x1f03, 0x77b4, 0x1078, 0x3099, 0x6018, 0xa005, 0x0040, 0x230f,
+       0x2021, 0x4380, 0x2009, 0x0005, 0x2011, 0x0020, 0x1078, 0x2349,
+       0x0040, 0x230f, 0x157e, 0x20a9, 0x0000, 0x2021, 0x4280, 0x047e,
+       0x2009, 0x0005, 0x2011, 0x0020, 0x1078, 0x2349, 0x047f, 0x0040,
+       0x230e, 0x8420, 0x0070, 0x230e, 0x0078, 0x22ff, 0x157f, 0x0078,
+       0x1f03, 0x2200, 0x0079, 0x2314, 0x2317, 0x2319, 0x2319, 0x1078,
+       0x1eac, 0x2009, 0x0012, 0x70a0, 0xa086, 0x0002, 0x0040, 0x2322,
+       0x2009, 0x000e, 0x6818, 0xa084, 0x8000, 0x0040, 0x2328, 0x691a,
+       0x70a3, 0x0000, 0x70a7, 0x0001, 0x0078, 0x311c, 0x2200, 0x0079,
+       0x2331, 0x2336, 0x2319, 0x2334, 0x1078, 0x1eac, 0x1078, 0x27ce,
+       0x7000, 0xa086, 0x0001, 0x00c0, 0x2c9f, 0x1078, 0x2cdf, 0x6008,
+       0xa084, 0xffef, 0x600a, 0x1078, 0x2c92, 0x0040, 0x2c9f, 0x0078,
+       0x2005, 0x2404, 0xa005, 0x0040, 0x236a, 0x2068, 0x2d04, 0x007e,
+       0x6814, 0xa706, 0x0040, 0x2358, 0x2d20, 0x007f, 0x0078, 0x234a,
+       0x007f, 0x2022, 0x691a, 0x6820, 0xa205, 0x6822, 0x1078, 0x1a26,
+       0x6010, 0x8001, 0x6012, 0x6008, 0xa084, 0xffef, 0x600a, 0x1078,
+       0x2cdf, 0x007c, 0xa085, 0x0001, 0x0078, 0x2369, 0x2300, 0x0079,
+       0x2371, 0x2376, 0x2374, 0x23c2, 0x1078, 0x1eac, 0x78e4, 0xa005,
+       0x00d0, 0x238a, 0x0018, 0x238a, 0xa084, 0x0007, 0x0079, 0x2380,
+       0x239b, 0x23a8, 0x238e, 0x2388, 0x3144, 0x3144, 0x2388, 0x23b5,
+       0x1078, 0x1eac, 0x2001, 0x0003, 0x0078, 0x26ad, 0x6818, 0xa084,
+       0x8000, 0x0040, 0x2395, 0x681b, 0x001d, 0x1078, 0x2f7d, 0x781b,
+       0x0053, 0x0078, 0x1efb, 0x6818, 0xa084, 0x8000, 0x0040, 0x23a2,
+       0x681b, 0x001d, 0x1078, 0x2f7d, 0x781b, 0x00de, 0x0078, 0x1efb,
+       0x6818, 0xa084, 0x8000, 0x0040, 0x23af, 0x681b, 0x001d, 0x1078,
+       0x2f7d, 0x781b, 0x00e5, 0x0078, 0x1efb, 0x6818, 0xa084, 0x8000,
+       0x0040, 0x23bc, 0x681b, 0x001d, 0x1078, 0x2f7d, 0x781b, 0x009c,
+       0x0078, 0x1efb, 0xa584, 0x000f, 0x00c0, 0x23e1, 0x1078, 0x27ce,
+       0x7000, 0x0079, 0x23cb, 0x23d3, 0x23d5, 0x23d3, 0x2c9f, 0x2c9f,
+       0x2c9f, 0x2c9f, 0x23d3, 0x1078, 0x1eac, 0x1078, 0x2cdf, 0x6008,
+       0xa084, 0xffef, 0x600a, 0x1078, 0x2c92, 0x0040, 0x2c9f, 0x0078,
+       0x2005, 0x79e4, 0xa005, 0x00d0, 0x238a, 0x0018, 0x238a, 0xa184,
+       0x0007, 0x0079, 0x23eb, 0x23fb, 0x2401, 0x23f5, 0x23f3, 0x3144,
+       0x3144, 0x23f3, 0x313c, 0x1078, 0x1eac, 0x1078, 0x2f85, 0x781b,
+       0x0053, 0x0078, 0x1efb, 0x1078, 0x2f85, 0x781b, 0x00de, 0x0078,
+       0x1efb, 0x1078, 0x2f85, 0x781b, 0x00e5, 0x0078, 0x1efb, 0x1078,
+       0x2f85, 0x781b, 0x009c, 0x0078, 0x1efb, 0x2300, 0x0079, 0x2410,
+       0x2415, 0x2413, 0x2417, 0x1078, 0x1eac, 0x0078, 0x29f0, 0x681b,
+       0x0008, 0x78a3, 0x0000, 0x79e4, 0xa184, 0x0030, 0x0040, 0x29f0,
+       0xa184, 0x0007, 0x0079, 0x2424, 0x242c, 0x2401, 0x238e, 0x311c,
+       0x3144, 0x3144, 0x242c, 0x313c, 0x1078, 0x1eac, 0xa282, 0x0005,
+       0x0050, 0x2434, 0x1078, 0x1eac, 0x2300, 0x0079, 0x2437, 0x243a,
+       0x265e, 0x266a, 0x2200, 0x0079, 0x243d, 0x2457, 0x2444, 0x2457,
+       0x2442, 0x2643, 0x1078, 0x1eac, 0x789b, 0x0018, 0x78a8, 0xa084,
+       0x00ff, 0xa082, 0x0020, 0x0048, 0x2f69, 0xa08a, 0x0004, 0x00c8,
+       0x2f69, 0x0079, 0x2453, 0x2f69, 0x2f69, 0x2f69, 0x2f23, 0x789b,
+       0x0018, 0x79a8, 0xa184, 0x0080, 0x0040, 0x246c, 0xa184, 0x0018,
+       0x0040, 0x2468, 0x0078, 0x2f69, 0x7000, 0xa005, 0x00c0, 0x2462,
+       0x2011, 0x0004, 0x0078, 0x2b28, 0xa184, 0x00ff, 0xa08a, 0x0010,
+       0x00c8, 0x2f69, 0x0079, 0x2474, 0x2486, 0x2484, 0x249e, 0x24a2,
+       0x255a, 0x2f69, 0x2f69, 0x255c, 0x2f69, 0x2f69, 0x263f, 0x263f,
+       0x2f69, 0x2f69, 0x2f69, 0x2641, 0x1078, 0x1eac, 0xa684, 0x1000,
+       0x0040, 0x2493, 0x2001, 0x0300, 0x8000, 0x8000, 0x783a, 0x781b,
+       0x0099, 0x0078, 0x1efb, 0x6818, 0xa084, 0x8000, 0x0040, 0x249c,
+       0x681b, 0x001d, 0x0078, 0x248a, 0x0078, 0x311c, 0x681b, 0x001d,
+       0x0078, 0x2f75, 0x6920, 0xa184, 0x8000, 0x00c0, 0x24ae, 0x68af,
+       0x0000, 0x68b3, 0x0000, 0xa18d, 0x8000, 0x6922, 0xa684, 0x1800,
+       0x00c0, 0x24ed, 0x6820, 0xa084, 0x0001, 0x00c0, 0x24f3, 0x6818,
+       0xa086, 0x0008, 0x00c0, 0x24be, 0x681b, 0x0000, 0xa684, 0x0400,
+       0x0040, 0x2556, 0xa684, 0x0080, 0x0040, 0x24e9, 0x70cb, 0x0000,
+       0x6818, 0xa084, 0x003f, 0xa08a, 0x000d, 0x0050, 0x24e9, 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, 0x1efb, 0xa684, 0x1000, 0x0040,
+       0x24f3, 0x0078, 0x1efb, 0xa684, 0x0060, 0x0040, 0x2552, 0xa684,
+       0x0800, 0x0040, 0x2552, 0xa684, 0x8000, 0x00c0, 0x2503, 0x69b0,
+       0x6aac, 0x0078, 0x251d, 0xa6b4, 0x7fff, 0x7e5a, 0x6eb6, 0x789b,
+       0x0074, 0x7aac, 0x79ac, 0x78ac, 0x801b, 0x00c8, 0x2510, 0x8000,
        0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100, 0xa302,
-       0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x0078, 0x1e81, 0x0078,
-       0x2e75, 0x7033, 0x0000, 0xa282, 0x0006, 0x0050, 0x2a51, 0x1078,
-       0x1e2a, 0x2300, 0x0079, 0x2a54, 0x2a57, 0x2a7d, 0x2aa1, 0x2200,
-       0x0079, 0x2a5a, 0x2a60, 0x2e75, 0x2a62, 0x2a60, 0x2acb, 0x2b1c,
-       0x1078, 0x1e2a, 0x7003, 0x0005, 0x2001, 0x4290, 0x2068, 0x703e,
-       0x157e, 0x20a9, 0x002f, 0x2003, 0x0000, 0x8000, 0x0070, 0x2a72,
-       0x0078, 0x2a6b, 0x157f, 0x6817, 0x0000, 0x68b7, 0x0700, 0x6823,
-       0x0800, 0x6827, 0x0003, 0x0078, 0x2e69, 0x7000, 0xa086, 0x0001,
-       0x00c0, 0x2a8a, 0x1078, 0x2c0e, 0x1078, 0x31f5, 0x7034, 0x600a,
-       0x0078, 0x2a8f, 0x7000, 0xa086, 0x0003, 0x0040, 0x2a84, 0x7003,
-       0x0005, 0x2001, 0x4290, 0x2068, 0x703e, 0x7032, 0x2200, 0x0079,
-       0x2a99, 0x2e75, 0x2a9f, 0x2a9f, 0x2acb, 0x2a9f, 0x2e75, 0x1078,
-       0x1e2a, 0x7000, 0xa086, 0x0001, 0x00c0, 0x2aae, 0x1078, 0x2c0e,
-       0x1078, 0x31f5, 0x7034, 0x600a, 0x0078, 0x2ab3, 0x7000, 0xa086,
-       0x0003, 0x0040, 0x2aa8, 0x7003, 0x0005, 0x2001, 0x4290, 0x2068,
-       0x703e, 0x7032, 0x2200, 0x0079, 0x2abd, 0x2ac5, 0x2ac3, 0x2ac3,
-       0x2ac5, 0x2ac3, 0x2ac5, 0x1078, 0x1e2a, 0x1078, 0x2e8d, 0x781b,
-       0x0067, 0x0078, 0x1e79, 0x7000, 0xa086, 0x0001, 0x00c0, 0x2ad8,
-       0x1078, 0x2c0e, 0x1078, 0x31f5, 0x7034, 0x600a, 0x0078, 0x2add,
-       0x7000, 0xa086, 0x0003, 0x0040, 0x2ad2, 0x7003, 0x0002, 0x7a80,
-       0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484, 0x0007, 0xa215,
-       0x2069, 0x4280, 0x2d04, 0x2d08, 0x7156, 0x2068, 0xa005, 0x0040,
-       0x2af8, 0x6814, 0xa206, 0x0040, 0x2b11, 0x6800, 0x0078, 0x2aeb,
-       0x7003, 0x0005, 0x2001, 0x4290, 0x2068, 0x703e, 0x7032, 0x157e,
-       0x20a9, 0x002f, 0x2003, 0x0000, 0x8000, 0x0070, 0x2b09, 0x0078,
-       0x2b02, 0x157f, 0x6a16, 0x68b7, 0x0700, 0x6823, 0x0800, 0x6827,
-       0x0003, 0x6eb4, 0x7e5a, 0x6820, 0xa084, 0x0c00, 0x0040, 0x2b7a,
-       0x1078, 0x2e85, 0x0078, 0x2b7a, 0x7000, 0xa086, 0x0001, 0x00c0,
-       0x2b29, 0x1078, 0x2c0e, 0x1078, 0x31f5, 0x7034, 0x600a, 0x0078,
-       0x2b2e, 0x7000, 0xa086, 0x0003, 0x0040, 0x2b23, 0x7003, 0x0002,
+       0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0xa684, 0x4000, 0x0040,
+       0x2525, 0xa6b4, 0xbfff, 0x7e5a, 0x6eb6, 0xa006, 0x1078, 0x362f,
+       0x6ab0, 0x69ac, 0x6c98, 0x6b94, 0x2200, 0xa105, 0x0040, 0x2534,
+       0x2200, 0xa422, 0x2100, 0xa31b, 0x6caa, 0x7cd2, 0x6ba6, 0x7bd6,
+       0x2300, 0xa405, 0x00c0, 0x2544, 0xa6b5, 0x4000, 0x7e5a, 0x6eb6,
+       0x781b, 0x0065, 0x0078, 0x1efb, 0x781b, 0x0065, 0x2200, 0xa115,
+       0x00c0, 0x254e, 0x1078, 0x3571, 0x0078, 0x1efb, 0x1078, 0x35a6,
+       0x0078, 0x1efb, 0x781b, 0x0068, 0x0078, 0x1efb, 0x781b, 0x0056,
+       0x0078, 0x1efb, 0x1078, 0x1eac, 0x0078, 0x25b1, 0x6920, 0xa184,
+       0x0100, 0x0040, 0x2570, 0xa18c, 0xfeff, 0x6922, 0x0c7e, 0x7048,
+       0x2060, 0x6004, 0xa084, 0xfff5, 0x6006, 0x0c7f, 0x0078, 0x25a0,
+       0xa184, 0x0200, 0x0040, 0x25a0, 0xa18c, 0xfdff, 0x6922, 0x0c7e,
+       0x7048, 0x2060, 0x6004, 0xa084, 0xffef, 0x6006, 0x2008, 0x2c48,
+       0x0c7f, 0xa184, 0x0008, 0x0040, 0x25a0, 0x1078, 0x3095, 0x1078,
+       0x2ddf, 0x88ff, 0x0040, 0x25a0, 0x789b, 0x0060, 0x2800, 0x78aa,
+       0x7e58, 0xa6b5, 0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x259c,
+       0x781b, 0x0053, 0x0078, 0x1efb, 0x781b, 0x0067, 0x0078, 0x1efb,
+       0x7e58, 0xa684, 0x0400, 0x00c0, 0x25a9, 0x781b, 0x0056, 0x0078,
+       0x1efb, 0x781b, 0x0068, 0x0078, 0x1efb, 0x0078, 0x2f6f, 0x0078,
+       0x2f6f, 0x2019, 0x0000, 0x7990, 0xa18c, 0x0007, 0x0040, 0x25af,
+       0x789b, 0x0010, 0x78a8, 0xa094, 0x00ff, 0xa286, 0x0001, 0x00c0,
+       0x25d4, 0x2300, 0x7ca8, 0xa400, 0x2018, 0xa102, 0x0040, 0x25cc,
+       0x0048, 0x25cc, 0x0078, 0x25ce, 0x0078, 0x255e, 0x24a8, 0x7aa8,
+       0x00f0, 0x25ce, 0x0078, 0x25ba, 0xa284, 0x00f0, 0xa086, 0x0020,
+       0x00c0, 0x2630, 0x8318, 0x8318, 0x2300, 0xa102, 0x0040, 0x25e4,
+       0x0048, 0x25e4, 0x0078, 0x262d, 0xa286, 0x0023, 0x0040, 0x25af,
+       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, 0x2608, 0x1078, 0x3095, 0x1078, 0x2ee3, 0x0078, 0x2617,
+       0x0c7e, 0x7048, 0x2060, 0x6004, 0x2008, 0x2c48, 0x0c7f, 0xa184,
+       0x0008, 0x0040, 0x25a0, 0x1078, 0x3095, 0x1078, 0x2ddf, 0x88ff,
+       0x0040, 0x25a0, 0x789b, 0x0060, 0x2800, 0x78aa, 0xa6b5, 0x0004,
+       0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2629, 0x781b, 0x0053, 0x0078,
+       0x1efb, 0x781b, 0x0067, 0x0078, 0x1efb, 0x7aa8, 0x0078, 0x25ba,
+       0x8318, 0x2300, 0xa102, 0x0040, 0x2639, 0x0048, 0x2639, 0x0078,
+       0x25ba, 0xa284, 0x0080, 0x00c0, 0x2f75, 0x0078, 0x2f6f, 0x0078,
+       0x2f75, 0x0078, 0x2f69, 0x789b, 0x0018, 0x78a8, 0xa084, 0x00ff,
+       0xa08e, 0x0001, 0x0040, 0x264e, 0x1078, 0x1eac, 0x7aa8, 0xa294,
+       0x00ff, 0x78a8, 0xa084, 0x00ff, 0xa08a, 0x0004, 0x00c8, 0x2f69,
+       0x0079, 0x265a, 0x2f69, 0x2d32, 0x2f69, 0x2e7e, 0xa282, 0x0000,
+       0x00c0, 0x2664, 0x1078, 0x1eac, 0x1078, 0x2f7d, 0x781b, 0x0067,
+       0x0078, 0x1efb, 0xa282, 0x0003, 0x00c0, 0x2670, 0x1078, 0x1eac,
+       0xa484, 0x8000, 0x00c0, 0x2693, 0x70a0, 0xa005, 0x0040, 0x267a,
+       0x1078, 0x1eac, 0x6f14, 0x77b6, 0xa7bc, 0x0f00, 0x1078, 0x3099,
+       0x6008, 0xa085, 0x0021, 0x600a, 0x8738, 0xa784, 0x0007, 0x00c0,
+       0x267e, 0x1078, 0x2f81, 0x70a3, 0x0002, 0x2009, 0x3935, 0x200b,
+       0x0009, 0x0078, 0x2695, 0x1078, 0x2f8d, 0x781b, 0x0067, 0x0078,
+       0x1efb, 0xa282, 0x0004, 0x0050, 0x269f, 0x1078, 0x1eac, 0x2300,
+       0x0079, 0x26a2, 0x26a5, 0x2781, 0x27a9, 0xa286, 0x0003, 0x0040,
+       0x26ab, 0x1078, 0x1eac, 0x2001, 0x0000, 0x703a, 0x7000, 0xa084,
+       0x0007, 0x0079, 0x26b3, 0x26bb, 0x26bd, 0x26bd, 0x2871, 0x28a2,
+       0x1f03, 0x28a2, 0x26bb, 0x1078, 0x1eac, 0xa684, 0x1000, 0x00c0,
+       0x26c5, 0x1078, 0x32f5, 0x0040, 0x275b, 0x7868, 0xa08c, 0x00ff,
+       0x0040, 0x270d, 0xa186, 0x0008, 0x00c0, 0x26dc, 0x1078, 0x2cdf,
+       0x6008, 0xa084, 0xffef, 0x600a, 0x1078, 0x2c92, 0x0040, 0x270d,
+       0x1078, 0x32f5, 0x0078, 0x26f4, 0xa186, 0x0028, 0x00c0, 0x270d,
+       0x1078, 0x32f5, 0x6008, 0xa084, 0xffef, 0x600a, 0x6018, 0xa005,
+       0x0040, 0x26f4, 0x8001, 0x601a, 0xa005, 0x0040, 0x26f4, 0x8001,
+       0xa005, 0x0040, 0x26f4, 0x601e, 0x6820, 0xa084, 0x0001, 0x0040,
+       0x1f03, 0x6820, 0xa084, 0xfffe, 0x6822, 0x7054, 0x0c7e, 0x2060,
+       0x6800, 0x6002, 0x0c7f, 0x6004, 0x6802, 0xa005, 0x2d00, 0x00c0,
+       0x270a, 0x6002, 0x6006, 0x0078, 0x1f03, 0x017e, 0x1078, 0x27ce,
+       0x017f, 0xa684, 0xdf00, 0x681e, 0x682b, 0x0000, 0x6f14, 0x81ff,
+       0x0040, 0x275b, 0xa186, 0x0002, 0x00c0, 0x2753, 0xa684, 0x0800,
+       0x00c0, 0x272a, 0xa684, 0x0060, 0x0040, 0x272a, 0x78d8, 0x7adc,
+       0x682e, 0x6a32, 0x6820, 0xa084, 0x0800, 0x00c0, 0x275b, 0x8717,
+       0xa294, 0x000f, 0x8213, 0x8213, 0x8213, 0xa290, 0x3a00, 0xa290,
+       0x0000, 0x221c, 0x8210, 0x2204, 0xa085, 0x0018, 0x2012, 0x8211,
+       0xa384, 0x0400, 0x0040, 0x274d, 0x68a0, 0xa084, 0x0100, 0x00c0,
+       0x274d, 0x1078, 0x2830, 0x0078, 0x1f03, 0x6008, 0xa085, 0x0002,
+       0x600a, 0x0078, 0x275b, 0xa186, 0x0018, 0x0040, 0x275b, 0xa186,
+       0x0014, 0x0040, 0x1f03, 0x6916, 0x6818, 0xa084, 0x8000, 0x0040,
+       0x2763, 0x7038, 0x681a, 0xa68c, 0xdf00, 0x691e, 0x1078, 0x2cd0,
+       0x1078, 0x2cdf, 0x00c0, 0x2770, 0x6008, 0xa084, 0xffef, 0x600a,
+       0x6820, 0xa084, 0x0001, 0x00c0, 0x2779, 0x1078, 0x2cc9, 0x0078,
+       0x277d, 0x7054, 0x2060, 0x6800, 0x6002, 0x1078, 0x1a26, 0x0078,
+       0x1f03, 0xa282, 0x0004, 0x0048, 0x2787, 0x1078, 0x1eac, 0x2200,
+       0x0079, 0x278a, 0x2785, 0x278e, 0x2794, 0x278e, 0x1078, 0x2f7d,
+       0x781b, 0x0067, 0x0078, 0x1efb, 0x7890, 0x8007, 0x8001, 0xa084,
+       0x0007, 0xa080, 0x0018, 0x789a, 0x79a8, 0xa18c, 0x00ff, 0xa186,
+       0x0003, 0x0040, 0x27a5, 0x0078, 0x2f69, 0x781b, 0x0068, 0x0078,
+       0x1efb, 0x6820, 0xa085, 0x0004, 0x6822, 0x82ff, 0x00c0, 0x27b4,
+       0x1078, 0x2f7d, 0x0078, 0x27bb, 0x8211, 0x0040, 0x27b9, 0x1078,
+       0x1eac, 0x1078, 0x2f8d, 0x781b, 0x0067, 0x0078, 0x1efb, 0x1078,
+       0x316a, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x27cb, 0x0018, 0x27cb,
+       0x791a, 0xa006, 0x007c, 0xa085, 0x0001, 0x007c, 0xa684, 0x0060,
+       0x00c0, 0x27d8, 0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x282f,
+       0xa684, 0x0800, 0x00c0, 0x27e8, 0x6998, 0x6a94, 0x692e, 0x6a32,
+       0x7000, 0xa086, 0x0006, 0x0040, 0x27e7, 0x1078, 0x32f5, 0x007c,
+       0xa684, 0x0020, 0x0040, 0x2802, 0xa684, 0x4000, 0x0040, 0x27f6,
+       0x682f, 0x0000, 0x6833, 0x0000, 0x0078, 0x27e0, 0x7038, 0xa005,
+       0x00c0, 0x27fc, 0x703b, 0x0015, 0x79d8, 0x7adc, 0x692e, 0x6a32,
+       0x0078, 0x27e0, 0xa684, 0x4000, 0x0040, 0x280c, 0x682f, 0x0000,
+       0x6833, 0x0000, 0x0078, 0x27e0, 0x7038, 0xa005, 0x00c0, 0x2812,
+       0x703b, 0x0015, 0x79d8, 0x7adc, 0x78d0, 0x80fb, 0x00c8, 0x2819,
+       0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x692e, 0x6a32,
+       0x2100, 0xa205, 0x00c0, 0x2826, 0x0078, 0x27e0, 0x7000, 0xa086,
+       0x0006, 0x0040, 0x282f, 0x1078, 0x362f, 0x0078, 0x27e0, 0x007c,
+       0xa384, 0x0200, 0x0040, 0x2838, 0x6008, 0xa085, 0x0002, 0x600a,
+       0x681b, 0x0006, 0x6a30, 0x692c, 0x6a3e, 0x6942, 0x682f, 0x0003,
+       0x6833, 0x0000, 0x6837, 0x0020, 0x6897, 0x0000, 0x689b, 0x0020,
+       0x7000, 0x0079, 0x284b, 0x2853, 0x2855, 0x285e, 0x2853, 0x2853,
+       0x2853, 0x2853, 0x2853, 0x1078, 0x1eac, 0x6820, 0xa084, 0x0001,
+       0x00c0, 0x285e, 0x1078, 0x2cc9, 0x0078, 0x2864, 0x7054, 0x2c50,
+       0x2060, 0x6800, 0x6002, 0x2a60, 0x2021, 0x3957, 0x2404, 0xa005,
+       0x0040, 0x286d, 0x2020, 0x0078, 0x2866, 0x2d22, 0x206b, 0x0000,
+       0x007c, 0x1078, 0x2cd0, 0x1078, 0x2cdf, 0x682b, 0x0000, 0x789b,
+       0x000e, 0x6f14, 0x6817, 0x0002, 0x1078, 0x366b, 0xa684, 0x0800,
+       0x0040, 0x2886, 0x691c, 0xa18d, 0x2000, 0x691e, 0x6818, 0xa084,
+       0x8000, 0x0040, 0x2896, 0x7868, 0xa08c, 0x00ff, 0x0040, 0x2894,
+       0x681b, 0x001e, 0x0078, 0x2896, 0x681b, 0x0000, 0x2021, 0x3957,
+       0x6800, 0x2022, 0x6a3c, 0x6940, 0x6a32, 0x692e, 0x1078, 0x1a26,
+       0x0078, 0x1f03, 0x1078, 0x27ce, 0x682b, 0x0000, 0x789b, 0x000e,
+       0x6f14, 0x1078, 0x316f, 0xa08c, 0x00ff, 0x6916, 0x6818, 0xa084,
+       0x8000, 0x0040, 0x28b5, 0x7038, 0x681a, 0xa68c, 0xdf00, 0x691e,
+       0x70a3, 0x0000, 0x0078, 0x1f03, 0xa006, 0x1078, 0x32f5, 0x6817,
+       0x0000, 0x681b, 0x0001, 0xa68c, 0xdf00, 0x691e, 0x682b, 0x0000,
+       0x7000, 0x0079, 0x28cb, 0x28d3, 0x28d5, 0x28d5, 0x28d7, 0x28d7,
+       0x28d7, 0x28d7, 0x28d3, 0x1078, 0x1eac, 0x1078, 0x2cdf, 0x6008,
+       0xa084, 0xffef, 0x600a, 0x0078, 0x2caa, 0x2300, 0x0079, 0x28e0,
+       0x28e3, 0x28e5, 0x2939, 0x1078, 0x1eac, 0x7000, 0x0079, 0x28e8,
+       0x28f0, 0x28f2, 0x28f2, 0x290d, 0x28f2, 0x291a, 0x290d, 0x28f0,
+       0x1078, 0x1eac, 0xa684, 0x0060, 0xa086, 0x0060, 0x00c0, 0x2909,
+       0xa6b4, 0xffdf, 0xa6b4, 0xbfff, 0xa6b5, 0x2000, 0x7e5a, 0x681c,
+       0xa084, 0xffdf, 0x681e, 0x1078, 0x32f5, 0x1078, 0x3571, 0x0078,
+       0x311c, 0xa684, 0x2000, 0x0040, 0x28fc, 0x6818, 0xa084, 0x8000,
+       0x0040, 0x291a, 0x681b, 0x0015, 0xa684, 0x4000, 0x0040, 0x291a,
+       0x681b, 0x0007, 0x2009, 0x391e, 0x210c, 0xa186, 0x0000, 0x0040,
+       0x292f, 0xa186, 0x0001, 0x0040, 0x2933, 0x2009, 0x3935, 0x200b,
+       0x000b, 0x70a3, 0x0001, 0x781b, 0x0047, 0x0078, 0x1efb, 0x781b,
+       0x00df, 0x0078, 0x1efb, 0x2009, 0x3935, 0x200b, 0x000a, 0x0078,
+       0x1efb, 0x1078, 0x1eac, 0x2300, 0x0079, 0x293e, 0x2941, 0x2943,
+       0x2976, 0x1078, 0x1eac, 0x7000, 0x0079, 0x2946, 0x294e, 0x2950,
+       0x2950, 0x296b, 0x2950, 0x2972, 0x296b, 0x294e, 0x1078, 0x1eac,
+       0xa684, 0x0060, 0xa086, 0x0060, 0x00c0, 0x2967, 0xa6b4, 0xffbf,
+       0xa6b4, 0xbfff, 0xa6b5, 0x2000, 0x7e5a, 0x681c, 0xa084, 0xffbf,
+       0x681e, 0x1078, 0x32f5, 0x1078, 0x3571, 0x0078, 0x311c, 0xa684,
+       0x2000, 0x0040, 0x295a, 0x6818, 0xa084, 0x8000, 0x0040, 0x2972,
+       0x681b, 0x0007, 0x781b, 0x00e6, 0x0078, 0x1efb, 0x6820, 0xa085,
+       0x0004, 0x6822, 0x1078, 0x30e7, 0xa6b5, 0x0800, 0x1078, 0x2f7d,
+       0x781b, 0x0067, 0x0078, 0x1efb, 0x2300, 0x0079, 0x2987, 0x298a,
+       0x298c, 0x298e, 0x1078, 0x1eac, 0x1078, 0x1eac, 0xa684, 0x0400,
+       0x00c0, 0x29ae, 0x782b, 0x3009, 0x6920, 0xa18c, 0xfdff, 0xa18c,
+       0xfeff, 0x6922, 0x789b, 0x0060, 0x78ab, 0x0000, 0xa684, 0xfffb,
+       0x785a, 0x79e4, 0xa184, 0x0020, 0x00c0, 0x29aa, 0x2001, 0x0014,
+       0x0078, 0x26ad, 0xa184, 0x0007, 0x0079, 0x29e6, 0x7a90, 0xa294,
+       0x0007, 0x789b, 0x0060, 0x79a8, 0x81ff, 0x0040, 0x29e4, 0x789b,
+       0x0010, 0x7ba8, 0xa384, 0x0001, 0x00c0, 0x29d5, 0x7ba8, 0x7ba8,
+       0xa386, 0x0001, 0x00c0, 0x29c8, 0x2009, 0xfff7, 0x0078, 0x29ce,
+       0xa386, 0x0003, 0x00c0, 0x29d5, 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, 0x311c, 0x239b, 0x23a8,
+       0x3124, 0x3124, 0x29ee, 0x29ee, 0x29ee, 0x3124, 0x1078, 0x1eac,
+       0x79e4, 0xa184, 0x0030, 0x00c0, 0x2a06, 0x70a0, 0xa086, 0x0002,
+       0x00c0, 0x29fe, 0x2011, 0x0002, 0x0078, 0x2288, 0x6818, 0xa085,
+       0x8000, 0x681a, 0x2001, 0x0014, 0x0078, 0x26ad, 0xa184, 0x0007,
+       0x0079, 0x2a0a, 0x311c, 0x311c, 0x2a12, 0x311c, 0x3144, 0x3144,
+       0x311c, 0x311c, 0xa684, 0x0080, 0x0040, 0x2a41, 0x71c8, 0x81ff,
+       0x0040, 0x2a41, 0xa182, 0x000d, 0x00d0, 0x2a22, 0x70cb, 0x0000,
+       0x0078, 0x2a27, 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,
+       0x3124, 0xa684, 0x0400, 0x00c0, 0x2a82, 0x6820, 0xa084, 0x0001,
+       0x0040, 0x3124, 0xa68c, 0x0060, 0xa684, 0x0060, 0x0040, 0x2a56,
+       0xa086, 0x0060, 0x00c0, 0x2a56, 0xa18d, 0x4000, 0xa18c, 0xfffb,
+       0x795a, 0x69b6, 0x789b, 0x0060, 0x78ab, 0x0000, 0x789b, 0x0061,
+       0x6818, 0xa085, 0x8000, 0x681a, 0x78aa, 0x8008, 0x810c, 0x0040,
+       0x2d07, 0xa18c, 0x00f8, 0x00c0, 0x2d07, 0x157e, 0x137e, 0x147e,
+       0x20a1, 0x012b, 0x789b, 0x0000, 0x8000, 0x80ac, 0xad80, 0x000b,
+       0x2098, 0x53a6, 0x147f, 0x137f, 0x157f, 0x6814, 0x8007, 0x7882,
+       0x0078, 0x3124, 0x6818, 0xa084, 0x8000, 0x0040, 0x2a89, 0x681b,
+       0x0008, 0x781b, 0x00da, 0x0078, 0x1efb, 0x2300, 0x0079, 0x2a90,
+       0x2a95, 0x2b18, 0x2a93, 0x1078, 0x1eac, 0x7000, 0xa084, 0x0007,
+       0x0079, 0x2a9a, 0x2aa2, 0x2aa4, 0x2ac0, 0x2aa2, 0x2aa2, 0x1f03,
+       0x2aa2, 0x2aa2, 0x1078, 0x1eac, 0x6920, 0xa18d, 0x0001, 0x6922,
+       0x6800, 0x6006, 0xa005, 0x00c0, 0x2aae, 0x6002, 0x681c, 0xa084,
+       0x000e, 0x0040, 0x2aba, 0x7014, 0x68ba, 0x712c, 0xa188, 0x4280,
+       0x0078, 0x2abc, 0x2009, 0x4380, 0x2104, 0x6802, 0x2d0a, 0x7156,
+       0x6920, 0xa184, 0x8000, 0x00c0, 0x2acc, 0x68af, 0x0000, 0x68b3,
+       0x0000, 0xa18d, 0x8000, 0x6922, 0x6eb6, 0xa684, 0x0060, 0x0040,
+       0x2b16, 0xa684, 0x0800, 0x00c0, 0x2add, 0x6894, 0x68a6, 0x6898,
+       0x68aa, 0x1078, 0x32f5, 0x0078, 0x2b16, 0xa684, 0x0020, 0x0040,
+       0x2aea, 0xa006, 0x1078, 0x362f, 0x79d8, 0x7adc, 0x69aa, 0x6aa6,
+       0x0078, 0x2af0, 0x1078, 0x30a6, 0x69aa, 0x6aa6, 0x1078, 0x362f,
+       0xa684, 0x8000, 0x0040, 0x2b16, 0xa684, 0x7fff, 0x68b6, 0x789b,
+       0x0074, 0x1078, 0x316f, 0x2010, 0x1078, 0x316f, 0x2008, 0xa684,
+       0x0020, 0x00c0, 0x2b0e, 0x1078, 0x316f, 0x801b, 0x00c8, 0x2b09,
+       0x8000, 0xa084, 0x003f, 0xa108, 0xa291, 0x0000, 0x6b98, 0x2100,
+       0xa302, 0x68b2, 0x6b94, 0x2200, 0xa303, 0x68ae, 0x0078, 0x1f03,
+       0x0078, 0x2f75, 0x7033, 0x0000, 0xa282, 0x0006, 0x0050, 0x2b22,
+       0x1078, 0x1eac, 0x2300, 0x0079, 0x2b25, 0x2b28, 0x2b4e, 0x2b72,
+       0x2200, 0x0079, 0x2b2b, 0x2b31, 0x2f75, 0x2b33, 0x2b31, 0x2b9c,
+       0x2bed, 0x1078, 0x1eac, 0x7003, 0x0005, 0x2001, 0x4390, 0x2068,
+       0x703e, 0x157e, 0x20a9, 0x002f, 0x2003, 0x0000, 0x8000, 0x0070,
+       0x2b43, 0x0078, 0x2b3c, 0x157f, 0x6817, 0x0000, 0x68b7, 0x0700,
+       0x6823, 0x0800, 0x6827, 0x0003, 0x0078, 0x2f69, 0x7000, 0xa086,
+       0x0001, 0x00c0, 0x2b5b, 0x1078, 0x2cdf, 0x1078, 0x32f5, 0x7034,
+       0x600a, 0x0078, 0x2b60, 0x7000, 0xa086, 0x0003, 0x0040, 0x2b55,
+       0x7003, 0x0005, 0x2001, 0x4390, 0x2068, 0x703e, 0x7032, 0x2200,
+       0x0079, 0x2b6a, 0x2f75, 0x2b70, 0x2b70, 0x2b9c, 0x2b70, 0x2f75,
+       0x1078, 0x1eac, 0x7000, 0xa086, 0x0001, 0x00c0, 0x2b7f, 0x1078,
+       0x2cdf, 0x1078, 0x32f5, 0x7034, 0x600a, 0x0078, 0x2b84, 0x7000,
+       0xa086, 0x0003, 0x0040, 0x2b79, 0x7003, 0x0005, 0x2001, 0x4390,
+       0x2068, 0x703e, 0x7032, 0x2200, 0x0079, 0x2b8e, 0x2b96, 0x2b94,
+       0x2b94, 0x2b96, 0x2b94, 0x2b96, 0x1078, 0x1eac, 0x1078, 0x2f8d,
+       0x781b, 0x0067, 0x0078, 0x1efb, 0x7000, 0xa086, 0x0001, 0x00c0,
+       0x2ba9, 0x1078, 0x2cdf, 0x1078, 0x32f5, 0x7034, 0x600a, 0x0078,
+       0x2bae, 0x7000, 0xa086, 0x0003, 0x0040, 0x2ba3, 0x7003, 0x0002,
        0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484, 0x0007,
-       0xa215, 0x79a8, 0x79a8, 0xa18c, 0x00ff, 0xa1e8, 0x4180, 0x2d04,
-       0x2d08, 0x7156, 0x2068, 0xa005, 0x0040, 0x2b4d, 0x6814, 0xa206,
-       0x0040, 0x2b65, 0x6800, 0x0078, 0x2b40, 0x7003, 0x0005, 0x2001,
-       0x4290, 0x2068, 0x703e, 0x157e, 0x20a9, 0x002f, 0x2003, 0x0000,
-       0x8000, 0x0070, 0x2b5d, 0x0078, 0x2b56, 0x157f, 0x6a16, 0x68b7,
-       0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x7e5a, 0x6820,
-       0xa084, 0x0c00, 0x0040, 0x2b7a, 0xa084, 0x0800, 0x0040, 0x2b74,
-       0x1078, 0x2e89, 0x0078, 0x2b7a, 0x1078, 0x2e85, 0x70bf, 0x0000,
-       0x0078, 0x2b7a, 0x027e, 0x8207, 0xa084, 0x000f, 0x8003, 0x8003,
-       0x8003, 0xa080, 0x3900, 0x2060, 0x704a, 0x6000, 0x704e, 0x6004,
-       0x7052, 0xa684, 0x0060, 0x0040, 0x2b93, 0x68a8, 0x78d2, 0x78da,
-       0x68a4, 0x78d6, 0x78de, 0x077f, 0x1078, 0x2f99, 0x2009, 0x0068,
-       0xa684, 0x0008, 0x0040, 0x2b9e, 0x2009, 0x0067, 0xa6b5, 0x2000,
-       0x7e5a, 0x791a, 0xa684, 0x0060, 0x0040, 0x2bb4, 0xa684, 0x0800,
-       0x00c0, 0x2bae, 0x1078, 0x347d, 0x0078, 0x2bb4, 0xa684, 0x4000,
-       0x00c0, 0x2bb4, 0x1078, 0x340e, 0x2d00, 0x703e, 0x8207, 0xa084,
-       0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x3900, 0x2048, 0x0078,
-       0x1e79, 0x6020, 0xa005, 0x0040, 0x2bcd, 0x8001, 0x6022, 0x6008,
-       0xa085, 0x0008, 0x600a, 0x7010, 0x6026, 0x007c, 0xa006, 0x1078,
-       0x31f5, 0x6817, 0x0000, 0x681b, 0x0001, 0x6823, 0x0040, 0x681f,
-       0x0100, 0x7000, 0xa084, 0x0007, 0x0079, 0x2bde, 0x2be6, 0x2be8,
-       0x2be8, 0x2bf4, 0x2bf0, 0x2be6, 0x2bf0, 0x2be6, 0x1078, 0x1e2a,
-       0x1078, 0x2bff, 0x1078, 0x2bf8, 0x1078, 0x19a4, 0x0078, 0x1e81,
-       0x70a3, 0x0000, 0x0078, 0x1e81, 0x681b, 0x0000, 0x0078, 0x27cf,
-       0x6800, 0xa005, 0x00c0, 0x2bfd, 0x6002, 0x6006, 0x007c, 0x6010,
-       0xa005, 0x0040, 0x2c08, 0x8001, 0x00d0, 0x2c08, 0x1078, 0x1e2a,
-       0x6012, 0x6008, 0xa084, 0xffef, 0x600a, 0x007c, 0x6018, 0xa005,
-       0x0040, 0x2c14, 0x8001, 0x601a, 0x007c, 0x1078, 0x306a, 0x6818,
-       0xa084, 0x8000, 0x0040, 0x2c1e, 0x681b, 0x0018, 0x0078, 0x2c43,
-       0x1078, 0x306a, 0x6818, 0xa084, 0x8000, 0x0040, 0x2c29, 0x681b,
-       0x0019, 0x0078, 0x2c43, 0x1078, 0x306a, 0x6818, 0xa084, 0x8000,
-       0x0040, 0x2c34, 0x681b, 0x001a, 0x0078, 0x2c43, 0x1078, 0x306a,
-       0x681b, 0x0003, 0x0078, 0x2c43, 0x6818, 0xa084, 0x8000, 0x0040,
-       0x2c43, 0x681b, 0x0005, 0x681f, 0x0000, 0x6823, 0x0020, 0x1078,
-       0x2bff, 0x1078, 0x2bf8, 0x1078, 0x19a4, 0x0078, 0x1e81, 0xa282,
-       0x0003, 0x00c0, 0x2e69, 0x7da8, 0xa5ac, 0x00ff, 0x7ea8, 0xa6b4,
-       0x00ff, 0x6920, 0xa18d, 0x0080, 0x6922, 0xa184, 0x0100, 0x0040,
-       0x2c92, 0xa18c, 0xfeff, 0x6922, 0xa6b4, 0x00ff, 0x0040, 0x2c7c,
-       0xa682, 0x000c, 0x0048, 0x2c70, 0x0040, 0x2c70, 0x2031, 0x000c,
-       0x852b, 0x852b, 0x1078, 0x2f18, 0x0040, 0x2c7a, 0x1078, 0x2d4a,
-       0x0078, 0x2c85, 0x1078, 0x2ed3, 0x0c7e, 0x2960, 0x6004, 0xa084,
-       0xfff5, 0x6006, 0x1078, 0x2d6e, 0x0c7f, 0x7e58, 0xa684, 0x0400,
-       0x00c0, 0x2c8e, 0x781b, 0x0056, 0x0078, 0x1e79, 0x781b, 0x0068,
-       0x0078, 0x1e79, 0x0c7e, 0x7048, 0x2060, 0x6100, 0xa18c, 0x1000,
-       0x0040, 0x2cd2, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x000c,
-       0x0048, 0x2ca6, 0x0040, 0x2ca6, 0x2011, 0x000c, 0x2600, 0xa202,
-       0x00c8, 0x2cab, 0x2230, 0x6208, 0xa294, 0x00ff, 0x7018, 0xa086,
-       0x0028, 0x00c0, 0x2cbb, 0xa282, 0x0019, 0x00c8, 0x2cc1, 0x2011,
-       0x0019, 0x0078, 0x2cc1, 0xa282, 0x000c, 0x00c8, 0x2cc1, 0x2011,
-       0x000c, 0x2200, 0xa502, 0x00c8, 0x2cc6, 0x2228, 0x1078, 0x2ed7,
-       0x852b, 0x852b, 0x1078, 0x2f18, 0x0040, 0x2cd2, 0x1078, 0x2d4a,
-       0x0078, 0x2cd6, 0x1078, 0x2ed3, 0x1078, 0x2d6e, 0x7858, 0xa085,
-       0x0004, 0x785a, 0x0c7f, 0x781b, 0x0067, 0x0078, 0x1e79, 0x0c7e,
-       0x2960, 0x6000, 0xa084, 0x1000, 0x00c0, 0x2cf7, 0x6010, 0xa084,
-       0x000f, 0x00c0, 0x2cf1, 0x6104, 0xa18c, 0xfff5, 0x6106, 0x0c7f,
-       0x007c, 0x2011, 0x0032, 0x2019, 0x0000, 0x0078, 0x2d1e, 0x68a0,
-       0xa084, 0x0200, 0x00c0, 0x2cf1, 0x6208, 0xa294, 0x00ff, 0x7018,
-       0xa086, 0x0028, 0x00c0, 0x2d0c, 0xa282, 0x0019, 0x00c8, 0x2d12,
-       0x2011, 0x0019, 0x0078, 0x2d12, 0xa282, 0x000c, 0x00c8, 0x2d12,
+       0xa215, 0x2069, 0x4380, 0x2d04, 0x2d08, 0x7156, 0x2068, 0xa005,
+       0x0040, 0x2bc9, 0x6814, 0xa206, 0x0040, 0x2be2, 0x6800, 0x0078,
+       0x2bbc, 0x7003, 0x0005, 0x2001, 0x4390, 0x2068, 0x703e, 0x7032,
+       0x157e, 0x20a9, 0x002f, 0x2003, 0x0000, 0x8000, 0x0070, 0x2bda,
+       0x0078, 0x2bd3, 0x157f, 0x6a16, 0x68b7, 0x0700, 0x6823, 0x0800,
+       0x6827, 0x0003, 0x6eb4, 0x7e5a, 0x6820, 0xa084, 0x0c00, 0x0040,
+       0x2c4b, 0x1078, 0x2f85, 0x0078, 0x2c4b, 0x7000, 0xa086, 0x0001,
+       0x00c0, 0x2bfa, 0x1078, 0x2cdf, 0x1078, 0x32f5, 0x7034, 0x600a,
+       0x0078, 0x2bff, 0x7000, 0xa086, 0x0003, 0x0040, 0x2bf4, 0x7003,
+       0x0002, 0x7a80, 0xa294, 0x0f00, 0x789b, 0x0018, 0x7ca8, 0xa484,
+       0x0007, 0xa215, 0x79a8, 0x79a8, 0xa18c, 0x00ff, 0xa1e8, 0x4280,
+       0x2d04, 0x2d08, 0x7156, 0x2068, 0xa005, 0x0040, 0x2c1e, 0x6814,
+       0xa206, 0x0040, 0x2c36, 0x6800, 0x0078, 0x2c11, 0x7003, 0x0005,
+       0x2001, 0x4390, 0x2068, 0x703e, 0x157e, 0x20a9, 0x002f, 0x2003,
+       0x0000, 0x8000, 0x0070, 0x2c2e, 0x0078, 0x2c27, 0x157f, 0x6a16,
+       0x68b7, 0x0700, 0x6823, 0x0800, 0x6827, 0x0003, 0x6eb4, 0x7e5a,
+       0x6820, 0xa084, 0x0c00, 0x0040, 0x2c4b, 0xa084, 0x0800, 0x0040,
+       0x2c45, 0x1078, 0x2f89, 0x0078, 0x2c4b, 0x1078, 0x2f85, 0x70bf,
+       0x0000, 0x0078, 0x2c4b, 0x027e, 0x8207, 0xa084, 0x000f, 0x8003,
+       0x8003, 0x8003, 0xa080, 0x3a00, 0x2060, 0x704a, 0x6000, 0x704e,
+       0x6004, 0x7052, 0xa684, 0x0060, 0x0040, 0x2c64, 0x68a8, 0x78d2,
+       0x78da, 0x68a4, 0x78d6, 0x78de, 0x077f, 0x1078, 0x3099, 0x2009,
+       0x0068, 0xa684, 0x0008, 0x0040, 0x2c6f, 0x2009, 0x0067, 0xa6b5,
+       0x2000, 0x7e5a, 0x791a, 0xa684, 0x0060, 0x0040, 0x2c85, 0xa684,
+       0x0800, 0x00c0, 0x2c7f, 0x1078, 0x3571, 0x0078, 0x2c85, 0xa684,
+       0x4000, 0x00c0, 0x2c85, 0x1078, 0x3502, 0x2d00, 0x703e, 0x8207,
+       0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa080, 0x3a00, 0x2048,
+       0x0078, 0x1efb, 0x6020, 0xa005, 0x0040, 0x2c9e, 0x8001, 0x6022,
+       0x6008, 0xa085, 0x0008, 0x600a, 0x7010, 0x6026, 0x007c, 0xa006,
+       0x1078, 0x32f5, 0x6817, 0x0000, 0x681b, 0x0001, 0x6823, 0x0040,
+       0x681f, 0x0100, 0x7000, 0xa084, 0x0007, 0x0079, 0x2caf, 0x2cb7,
+       0x2cb9, 0x2cb9, 0x2cc5, 0x2cc1, 0x2cb7, 0x2cc1, 0x2cb7, 0x1078,
+       0x1eac, 0x1078, 0x2cd0, 0x1078, 0x2cc9, 0x1078, 0x1a26, 0x0078,
+       0x1f03, 0x70a3, 0x0000, 0x0078, 0x1f03, 0x681b, 0x0000, 0x0078,
+       0x2871, 0x6800, 0xa005, 0x00c0, 0x2cce, 0x6002, 0x6006, 0x007c,
+       0x6010, 0xa005, 0x0040, 0x2cd9, 0x8001, 0x00d0, 0x2cd9, 0x1078,
+       0x1eac, 0x6012, 0x6008, 0xa084, 0xffef, 0x600a, 0x007c, 0x6018,
+       0xa005, 0x0040, 0x2ce5, 0x8001, 0x601a, 0x007c, 0x1078, 0x316a,
+       0x6818, 0xa084, 0x8000, 0x0040, 0x2cef, 0x681b, 0x0018, 0x0078,
+       0x2d26, 0x1078, 0x316a, 0x6818, 0xa084, 0x8000, 0x0040, 0x2cfa,
+       0x681b, 0x0019, 0x0078, 0x2d26, 0x1078, 0x316a, 0x6818, 0xa084,
+       0x8000, 0x0040, 0x2d05, 0x681b, 0x001a, 0x0078, 0x2d26, 0x1078,
+       0x316a, 0x681b, 0x0003, 0x0078, 0x2d26, 0x71b8, 0xa18c, 0x00ff,
+       0xa1e8, 0x4280, 0x2d04, 0x2d08, 0x2068, 0xa005, 0x00c0, 0x2d1a,
+       0x0078, 0x1f03, 0x6814, 0x72b4, 0xa206, 0x0040, 0x2d22, 0x6800,
+       0x0078, 0x2d13, 0x6800, 0x200a, 0x681b, 0x0005, 0x681f, 0x0000,
+       0x6823, 0x0020, 0x1078, 0x2cd0, 0x1078, 0x2cc9, 0x1078, 0x1a26,
+       0x0078, 0x1f03, 0xa282, 0x0003, 0x00c0, 0x2f69, 0x7da8, 0xa5ac,
+       0x00ff, 0x7ea8, 0xa6b4, 0x00ff, 0x6920, 0xa18d, 0x0080, 0x6922,
+       0xa184, 0x0100, 0x0040, 0x2d92, 0xa18c, 0xfeff, 0x6922, 0xa6b4,
+       0x00ff, 0x0040, 0x2d7c, 0xa682, 0x000c, 0x0048, 0x2d53, 0x0040,
+       0x2d53, 0x2031, 0x000c, 0x852b, 0x852b, 0x1078, 0x3018, 0x0040,
+       0x2d5d, 0x1078, 0x2e4a, 0x0078, 0x2d85, 0x1078, 0x2fd3, 0x0c7e,
+       0x2960, 0x6004, 0xa084, 0xfff5, 0x6006, 0x1078, 0x2e6e, 0x0c7f,
+       0x6920, 0xa18d, 0x0100, 0x6922, 0x7e58, 0xa6b5, 0x0004, 0x7e5a,
+       0xa684, 0x0400, 0x00c0, 0x2d78, 0x781b, 0x0053, 0x0078, 0x1efb,
+       0x781b, 0x0067, 0x0078, 0x1efb, 0x0c7e, 0x2960, 0x6004, 0xa084,
+       0xfff5, 0x6006, 0x1078, 0x2e6e, 0x0c7f, 0x7e58, 0xa684, 0x0400,
+       0x00c0, 0x2d8e, 0x781b, 0x0056, 0x0078, 0x1efb, 0x781b, 0x0068,
+       0x0078, 0x1efb, 0x0c7e, 0x7048, 0x2060, 0x6100, 0xa18c, 0x1000,
+       0x0040, 0x2dd2, 0x6208, 0x8217, 0xa294, 0x00ff, 0xa282, 0x000c,
+       0x0048, 0x2da6, 0x0040, 0x2da6, 0x2011, 0x000c, 0x2600, 0xa202,
+       0x00c8, 0x2dab, 0x2230, 0x6208, 0xa294, 0x00ff, 0x7018, 0xa086,
+       0x0028, 0x00c0, 0x2dbb, 0xa282, 0x0019, 0x00c8, 0x2dc1, 0x2011,
+       0x0019, 0x0078, 0x2dc1, 0xa282, 0x000c, 0x00c8, 0x2dc1, 0x2011,
+       0x000c, 0x2200, 0xa502, 0x00c8, 0x2dc6, 0x2228, 0x1078, 0x2fd7,
+       0x852b, 0x852b, 0x1078, 0x3018, 0x0040, 0x2dd2, 0x1078, 0x2e4a,
+       0x0078, 0x2dd6, 0x1078, 0x2fd3, 0x1078, 0x2e6e, 0x7858, 0xa085,
+       0x0004, 0x785a, 0x0c7f, 0x781b, 0x0067, 0x0078, 0x1efb, 0x0c7e,
+       0x2960, 0x6000, 0xa084, 0x1000, 0x00c0, 0x2df7, 0x6010, 0xa084,
+       0x000f, 0x00c0, 0x2df1, 0x6104, 0xa18c, 0xfff5, 0x6106, 0x0c7f,
+       0x007c, 0x2011, 0x0032, 0x2019, 0x0000, 0x0078, 0x2e1e, 0x68a0,
+       0xa084, 0x0200, 0x00c0, 0x2df1, 0x6208, 0xa294, 0x00ff, 0x7018,
+       0xa086, 0x0028, 0x00c0, 0x2e0c, 0xa282, 0x0019, 0x00c8, 0x2e12,
+       0x2011, 0x0019, 0x0078, 0x2e12, 0xa282, 0x000c, 0x00c8, 0x2e12,
        0x2011, 0x000c, 0x6308, 0x831f, 0xa39c, 0x00ff, 0xa382, 0x000c,
-       0x0048, 0x2d1e, 0x0040, 0x2d1e, 0x2019, 0x000c, 0x78ab, 0x0001,
+       0x0048, 0x2e1e, 0x0040, 0x2e1e, 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, 0x2d3a, 0x78ab, 0x0001, 0x78ab, 0x0003, 0x78ab, 0x0001,
+       0x0078, 0x2e3a, 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,
@@ -953,118 +985,118 @@ unsigned short risc_code01[] = {
        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, 0x2e69, 0x7aa8, 0x6920, 0xa18d, 0x0080, 0x6922, 0xa184,
-       0x0200, 0x0040, 0x2dc3, 0xa18c, 0xfdff, 0x6922, 0xa294, 0x00ff,
-       0xa282, 0x0002, 0x00c8, 0x2e69, 0x1078, 0x2e0a, 0x1078, 0x2d6e,
-       0xa980, 0x0001, 0x200c, 0x1078, 0x2f95, 0x1078, 0x2cdf, 0x88ff,
-       0x0040, 0x2db6, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xa6b5,
-       0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2db2, 0x781b, 0x0053,
-       0x0078, 0x1e79, 0x781b, 0x0067, 0x0078, 0x1e79, 0x7e58, 0xa684,
-       0x0400, 0x00c0, 0x2dbf, 0x781b, 0x0056, 0x0078, 0x1e79, 0x781b,
-       0x0068, 0x0078, 0x1e79, 0xa282, 0x0002, 0x00c8, 0x2dcb, 0xa284,
-       0x0001, 0x0040, 0x2dd5, 0x7148, 0xa188, 0x0000, 0x210c, 0xa18c,
-       0x2000, 0x00c0, 0x2dd5, 0x2011, 0x0000, 0x1078, 0x2ec5, 0x1078,
-       0x2e0a, 0x1078, 0x2d6e, 0x7858, 0xa085, 0x0004, 0x785a, 0x781b,
-       0x0067, 0x0078, 0x1e79, 0x0c7e, 0x027e, 0x2960, 0x6000, 0x2011,
-       0x0001, 0xa084, 0x2000, 0x00c0, 0x2dfa, 0x6014, 0xa084, 0x0040,
-       0x00c0, 0x2df8, 0xa18c, 0xffef, 0x6106, 0xa006, 0x0078, 0x2e07,
+       0x00c0, 0x2f69, 0x7aa8, 0x6920, 0xa18d, 0x0080, 0x6922, 0xa184,
+       0x0200, 0x0040, 0x2ec3, 0xa18c, 0xfdff, 0x6922, 0xa294, 0x00ff,
+       0xa282, 0x0002, 0x00c8, 0x2f69, 0x1078, 0x2f0a, 0x1078, 0x2e6e,
+       0xa980, 0x0001, 0x200c, 0x1078, 0x3095, 0x1078, 0x2ddf, 0x88ff,
+       0x0040, 0x2eb6, 0x789b, 0x0060, 0x2800, 0x78aa, 0x7e58, 0xa6b5,
+       0x0004, 0x7e5a, 0xa684, 0x0400, 0x00c0, 0x2eb2, 0x781b, 0x0053,
+       0x0078, 0x1efb, 0x781b, 0x0067, 0x0078, 0x1efb, 0x7e58, 0xa684,
+       0x0400, 0x00c0, 0x2ebf, 0x781b, 0x0056, 0x0078, 0x1efb, 0x781b,
+       0x0068, 0x0078, 0x1efb, 0xa282, 0x0002, 0x00c8, 0x2ecb, 0xa284,
+       0x0001, 0x0040, 0x2ed5, 0x7148, 0xa188, 0x0000, 0x210c, 0xa18c,
+       0x2000, 0x00c0, 0x2ed5, 0x2011, 0x0000, 0x1078, 0x2fc5, 0x1078,
+       0x2f0a, 0x1078, 0x2e6e, 0x7858, 0xa085, 0x0004, 0x785a, 0x781b,
+       0x0067, 0x0078, 0x1efb, 0x0c7e, 0x027e, 0x2960, 0x6000, 0x2011,
+       0x0001, 0xa084, 0x2000, 0x00c0, 0x2efa, 0x6014, 0xa084, 0x0040,
+       0x00c0, 0x2ef8, 0xa18c, 0xffef, 0x6106, 0xa006, 0x0078, 0x2f07,
        0x2011, 0x0000, 0x78ab, 0x0001, 0x78ab, 0x0002, 0x78ab, 0x0003,
        0x7aaa, 0xa8c0, 0x0004, 0x6820, 0xa085, 0x0200, 0x6822, 0x027f,
-       0x0c7f, 0x007c, 0x0c7e, 0x7048, 0x2060, 0x82ff, 0x0040, 0x2e12,
+       0x0c7f, 0x007c, 0x0c7e, 0x7048, 0x2060, 0x82ff, 0x0040, 0x2f12,
        0x2011, 0x0040, 0x6018, 0xa080, 0x0002, 0x789a, 0x78a4, 0xa084,
        0xffbf, 0xa205, 0x78a6, 0x6016, 0x788a, 0x6004, 0xa084, 0xffef,
-       0x6006, 0x0c7f, 0x007c, 0xa684, 0x0020, 0x0040, 0x2e65, 0x7888,
-       0xa084, 0x0040, 0x0040, 0x2e65, 0x7bb8, 0xa384, 0x003f, 0x831b,
-       0x00c8, 0x2e33, 0x8000, 0xa005, 0x0040, 0x2e4c, 0x831b, 0x00c8,
-       0x2e3c, 0x8001, 0x0040, 0x2e61, 0xa684, 0x4000, 0x0040, 0x2e4c,
-       0x78b8, 0x801b, 0x00c8, 0x2e45, 0x8000, 0xa084, 0x003f, 0x00c0,
-       0x2e61, 0xa6b4, 0xbfff, 0x7e5a, 0x79d8, 0x7adc, 0x2001, 0x0001,
-       0xa108, 0x00c8, 0x2e55, 0xa291, 0x0000, 0x79d2, 0x79da, 0x7ad6,
-       0x7ade, 0x1078, 0x353b, 0x781b, 0x0065, 0x1078, 0x340e, 0x0078,
-       0x1e79, 0x781b, 0x0065, 0x0078, 0x1e79, 0x781b, 0x0068, 0x0078,
-       0x1e79, 0x1078, 0x2e91, 0x781b, 0x0067, 0x0078, 0x1e79, 0x1078,
-       0x2e7d, 0x781b, 0x0067, 0x0078, 0x1e79, 0x6827, 0x0002, 0x1078,
-       0x2e85, 0x781b, 0x0067, 0x0078, 0x1e79, 0x2001, 0x0005, 0x0078,
-       0x2e93, 0x2001, 0x000c, 0x0078, 0x2e93, 0x2001, 0x0006, 0x0078,
-       0x2e93, 0x2001, 0x000d, 0x0078, 0x2e93, 0x2001, 0x0009, 0x0078,
-       0x2e93, 0x2001, 0x0007, 0x789b, 0x007e, 0x78aa, 0xa6b5, 0x0008,
+       0x6006, 0x0c7f, 0x007c, 0xa684, 0x0020, 0x0040, 0x2f65, 0x7888,
+       0xa084, 0x0040, 0x0040, 0x2f65, 0x7bb8, 0xa384, 0x003f, 0x831b,
+       0x00c8, 0x2f33, 0x8000, 0xa005, 0x0040, 0x2f4c, 0x831b, 0x00c8,
+       0x2f3c, 0x8001, 0x0040, 0x2f61, 0xa684, 0x4000, 0x0040, 0x2f4c,
+       0x78b8, 0x801b, 0x00c8, 0x2f45, 0x8000, 0xa084, 0x003f, 0x00c0,
+       0x2f61, 0xa6b4, 0xbfff, 0x7e5a, 0x79d8, 0x7adc, 0x2001, 0x0001,
+       0xa108, 0x00c8, 0x2f55, 0xa291, 0x0000, 0x79d2, 0x79da, 0x7ad6,
+       0x7ade, 0x1078, 0x362f, 0x781b, 0x0065, 0x1078, 0x3502, 0x0078,
+       0x1efb, 0x781b, 0x0065, 0x0078, 0x1efb, 0x781b, 0x0068, 0x0078,
+       0x1efb, 0x1078, 0x2f91, 0x781b, 0x0067, 0x0078, 0x1efb, 0x1078,
+       0x2f7d, 0x781b, 0x0067, 0x0078, 0x1efb, 0x6827, 0x0002, 0x1078,
+       0x2f85, 0x781b, 0x0067, 0x0078, 0x1efb, 0x2001, 0x0005, 0x0078,
+       0x2f93, 0x2001, 0x000c, 0x0078, 0x2f93, 0x2001, 0x0006, 0x0078,
+       0x2f93, 0x2001, 0x000d, 0x0078, 0x2f93, 0x2001, 0x0009, 0x0078,
+       0x2f93, 0x2001, 0x0007, 0x789b, 0x007e, 0x78aa, 0xa6b5, 0x0008,
        0x7e5a, 0x007c, 0x077e, 0x873f, 0xa7bc, 0x000f, 0x873b, 0x873b,
-       0x8703, 0xa0e0, 0x3900, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184,
-       0x000f, 0x0040, 0x2eb3, 0xa184, 0xfff0, 0x78a6, 0x6012, 0x6004,
+       0x8703, 0xa0e0, 0x3a00, 0xa7b8, 0x0020, 0x7f9a, 0x79a4, 0xa184,
+       0x000f, 0x0040, 0x2fb3, 0xa184, 0xfff0, 0x78a6, 0x6012, 0x6004,
        0xa085, 0x0008, 0x6006, 0x8738, 0x8738, 0x7f9a, 0x79a4, 0xa184,
-       0x0040, 0x0040, 0x2ec3, 0xa184, 0xffbf, 0x78a6, 0x6016, 0x6004,
+       0x0040, 0x0040, 0x2fc3, 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, 0x3846, 0x2004, 0xa082, 0x0028, 0x0040,
-       0x2f01, 0x2021, 0x2f7c, 0x2019, 0x0014, 0x20a9, 0x000c, 0x0078,
-       0x2f07, 0x2021, 0x2f88, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011,
-       0x0064, 0x2404, 0xa084, 0xfff0, 0xa106, 0x0040, 0x2f16, 0x8420,
-       0x2300, 0xa210, 0x0070, 0x2f16, 0x0078, 0x2f09, 0x157f, 0x007c,
-       0x157e, 0x2011, 0x3846, 0x2214, 0xa282, 0x0032, 0x0048, 0x2f2c,
-       0x0040, 0x2f30, 0x2021, 0x2f6e, 0x2019, 0x0011, 0x20a9, 0x000e,
-       0x2011, 0x0032, 0x0078, 0x2f42, 0xa282, 0x0028, 0x0040, 0x2f3a,
-       0x2021, 0x2f7c, 0x2019, 0x0014, 0x20a9, 0x000c, 0x2011, 0x0064,
-       0x0078, 0x2f42, 0x2021, 0x2f88, 0x2019, 0x0019, 0x20a9, 0x000d,
-       0x2011, 0x0064, 0x2200, 0xa502, 0x0040, 0x2f52, 0x0048, 0x2f52,
-       0x8420, 0x2300, 0xa210, 0x0070, 0x2f4f, 0x0078, 0x2f42, 0x157f,
-       0xa006, 0x007c, 0x157f, 0x7a08, 0xa582, 0x00c8, 0x00c8, 0x2f5d,
-       0xa285, 0x0040, 0x780a, 0x0078, 0x2f5d, 0x78ec, 0xa084, 0x0300,
-       0x0040, 0x2f6b, 0x2404, 0xa09e, 0x2002, 0x00c0, 0x2f6b, 0x2001,
-       0x2101, 0x0078, 0x2f6c, 0x2404, 0xa005, 0x007c, 0x2002, 0x3002,
+       0xa18c, 0xfff0, 0x2001, 0x3946, 0x2004, 0xa082, 0x0028, 0x0040,
+       0x3001, 0x2021, 0x307c, 0x2019, 0x0014, 0x20a9, 0x000c, 0x0078,
+       0x3007, 0x2021, 0x3088, 0x2019, 0x0019, 0x20a9, 0x000d, 0x2011,
+       0x0064, 0x2404, 0xa084, 0xfff0, 0xa106, 0x0040, 0x3016, 0x8420,
+       0x2300, 0xa210, 0x0070, 0x3016, 0x0078, 0x3009, 0x157f, 0x007c,
+       0x157e, 0x2011, 0x3946, 0x2214, 0xa282, 0x0032, 0x0048, 0x302c,
+       0x0040, 0x3030, 0x2021, 0x306e, 0x2019, 0x0011, 0x20a9, 0x000e,
+       0x2011, 0x0032, 0x0078, 0x3042, 0xa282, 0x0028, 0x0040, 0x303a,
+       0x2021, 0x307c, 0x2019, 0x0014, 0x20a9, 0x000c, 0x2011, 0x0064,
+       0x0078, 0x3042, 0x2021, 0x3088, 0x2019, 0x0019, 0x20a9, 0x000d,
+       0x2011, 0x0064, 0x2200, 0xa502, 0x0040, 0x3052, 0x0048, 0x3052,
+       0x8420, 0x2300, 0xa210, 0x0070, 0x304f, 0x0078, 0x3042, 0x157f,
+       0xa006, 0x007c, 0x157f, 0x7a08, 0xa582, 0x0064, 0x00c8, 0x305d,
+       0xa285, 0x0040, 0x780a, 0x0078, 0x305d, 0x78ec, 0xa084, 0x0300,
+       0x0040, 0x306b, 0x2404, 0xa09e, 0x2002, 0x00c0, 0x306b, 0x2001,
+       0x2101, 0x0078, 0x306c, 0x2404, 0xa015, 0x007c, 0x2002, 0x3002,
        0x3202, 0x4203, 0x4403, 0x5404, 0x5604, 0x6605, 0x6805, 0x7806,
        0x7a06, 0x0a07, 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, 0x800c, 0xa784, 0x0007, 0x8003, 0x8003,
-       0x8003, 0x8003, 0xa105, 0xa0e0, 0x3980, 0x007c, 0x79d8, 0x7adc,
-       0x78d0, 0x801b, 0x00c8, 0x2fad, 0x8000, 0xa084, 0x003f, 0xa108,
-       0xa291, 0x0000, 0x007c, 0x0f7e, 0x2079, 0x0100, 0x2009, 0x3840,
-       0x2091, 0x8000, 0x2104, 0x0079, 0x2fbd, 0x2fe3, 0x2fc7, 0x2fc7,
-       0x2fc7, 0x2fc7, 0x2fc7, 0x2fc7, 0x2fc5, 0x1078, 0x1e2a, 0x784b,
+       0x8003, 0x8003, 0xa105, 0xa0e0, 0x3a80, 0x007c, 0x79d8, 0x7adc,
+       0x78d0, 0x801b, 0x00c8, 0x30ad, 0x8000, 0xa084, 0x003f, 0xa108,
+       0xa291, 0x0000, 0x007c, 0x0f7e, 0x2079, 0x0100, 0x2009, 0x3940,
+       0x2091, 0x8000, 0x2104, 0x0079, 0x30bd, 0x30e3, 0x30c7, 0x30c7,
+       0x30c7, 0x30c7, 0x30c7, 0x30c7, 0x30c5, 0x1078, 0x1eac, 0x784b,
        0x0004, 0x68b4, 0xa085, 0x4000, 0x68b6, 0x7858, 0xa085, 0x4000,
-       0x785a, 0x7830, 0xa084, 0x0080, 0x00c0, 0x2fe3, 0x0018, 0x2fe3,
-       0x681c, 0xa084, 0x0020, 0x00c0, 0x2fe1, 0x781b, 0x00df, 0x0078,
-       0x2fe3, 0x781b, 0x00e6, 0x2091, 0x8001, 0x0f7f, 0x007c, 0x0c7e,
+       0x785a, 0x7830, 0xa084, 0x0080, 0x00c0, 0x30e3, 0x0018, 0x30e3,
+       0x681c, 0xa084, 0x0020, 0x00c0, 0x30e1, 0x781b, 0x00df, 0x0078,
+       0x30e3, 0x781b, 0x00e6, 0x2091, 0x8001, 0x0f7f, 0x007c, 0x0c7e,
        0x6814, 0x8007, 0xa084, 0x000f, 0x8003, 0x8003, 0x8003, 0xa0e0,
-       0x3900, 0x6004, 0xa084, 0x000a, 0x00c0, 0x301a, 0x6108, 0xa194,
-       0xff00, 0x0040, 0x301a, 0xa18c, 0x00ff, 0x2001, 0x0019, 0xa106,
-       0x0040, 0x3009, 0x2001, 0x0032, 0xa106, 0x0040, 0x300d, 0x0078,
-       0x3011, 0x2009, 0x0020, 0x0078, 0x3013, 0x2009, 0x003f, 0x0078,
-       0x3013, 0x2011, 0x0000, 0x2100, 0xa205, 0x600a, 0x6004, 0xa085,
-       0x0002, 0x6006, 0x0c7f, 0x007c, 0x781b, 0x0068, 0x0078, 0x1e79,
-       0x781b, 0x0067, 0x0078, 0x1e79, 0x781b, 0x0056, 0x0078, 0x1e79,
-       0x781b, 0x0053, 0x0078, 0x1e79, 0x781b, 0x00df, 0x0078, 0x1e79,
-       0x781b, 0x00de, 0x0078, 0x1e79, 0x781b, 0x00e6, 0x0078, 0x1e79,
-       0x781b, 0x00e5, 0x0078, 0x1e79, 0x781b, 0x009d, 0x0078, 0x1e79,
-       0x781b, 0x009c, 0x0078, 0x1e79, 0x6818, 0xa084, 0x8000, 0x0040,
-       0x304b, 0x681b, 0x001d, 0x70a3, 0x0001, 0x781b, 0x0047, 0x0078,
-       0x1e79, 0x007e, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x3068, 0x7808,
+       0x3a00, 0x6004, 0xa084, 0x000a, 0x00c0, 0x311a, 0x6108, 0xa194,
+       0xff00, 0x0040, 0x311a, 0xa18c, 0x00ff, 0x2001, 0x0019, 0xa106,
+       0x0040, 0x3109, 0x2001, 0x0032, 0xa106, 0x0040, 0x310d, 0x0078,
+       0x3111, 0x2009, 0x0020, 0x0078, 0x3113, 0x2009, 0x003f, 0x0078,
+       0x3113, 0x2011, 0x0000, 0x2100, 0xa205, 0x600a, 0x6004, 0xa085,
+       0x0002, 0x6006, 0x0c7f, 0x007c, 0x781b, 0x0068, 0x0078, 0x1efb,
+       0x781b, 0x0067, 0x0078, 0x1efb, 0x781b, 0x0056, 0x0078, 0x1efb,
+       0x781b, 0x0053, 0x0078, 0x1efb, 0x781b, 0x00df, 0x0078, 0x1efb,
+       0x781b, 0x00de, 0x0078, 0x1efb, 0x781b, 0x00e6, 0x0078, 0x1efb,
+       0x781b, 0x00e5, 0x0078, 0x1efb, 0x781b, 0x009d, 0x0078, 0x1efb,
+       0x781b, 0x009c, 0x0078, 0x1efb, 0x6818, 0xa084, 0x8000, 0x0040,
+       0x314b, 0x681b, 0x001d, 0x70a3, 0x0001, 0x781b, 0x0047, 0x0078,
+       0x1efb, 0x007e, 0x7830, 0xa084, 0x00c0, 0x00c0, 0x3168, 0x7808,
        0xa084, 0xfffd, 0x780a, 0x0005, 0x0005, 0x0005, 0x0005, 0x78ec,
-       0xa084, 0x0021, 0x0040, 0x3068, 0x7808, 0xa085, 0x0002, 0x780a,
+       0xa084, 0x0021, 0x0040, 0x3168, 0x7808, 0xa085, 0x0002, 0x780a,
        0x007f, 0x007c, 0x7808, 0xa085, 0x0002, 0x780a, 0x007c, 0x7830,
-       0xa084, 0x0040, 0x00c0, 0x306f, 0x0098, 0x3078, 0x78ac, 0x007c,
+       0xa084, 0x0040, 0x00c0, 0x316f, 0x0098, 0x3178, 0x78ac, 0x007c,
        0x7808, 0xa084, 0xfffd, 0x780a, 0x0005, 0x0005, 0x0005, 0x0005,
-       0x78ec, 0xa084, 0x0021, 0x0040, 0x3087, 0x0098, 0x3085, 0x78ac,
+       0x78ec, 0xa084, 0x0021, 0x0040, 0x3187, 0x0098, 0x3185, 0x78ac,
        0x007e, 0x7808, 0xa085, 0x0002, 0x780a, 0x007f, 0x007c, 0xa784,
-       0x0070, 0x0040, 0x309b, 0x0c7e, 0x2d60, 0x2f68, 0x1078, 0x1dd5,
-       0x2d78, 0x2c68, 0x0c7f, 0xa784, 0x0008, 0x0040, 0x30a8, 0x784b,
-       0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x1e81, 0x0078, 0x301c,
-       0xa784, 0x0004, 0x0040, 0x30db, 0x78b8, 0xa084, 0x4001, 0x0040,
-       0x30db, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x1e81,
-       0x78e4, 0xa084, 0x0007, 0xa086, 0x0001, 0x00c0, 0x30db, 0x78c0,
-       0xa685, 0x4800, 0x2030, 0x7e5a, 0x781b, 0x00e6, 0x0078, 0x1e79,
-       0x784b, 0x0008, 0x6818, 0xa084, 0x8000, 0x0040, 0x30d7, 0x681b,
-       0x0015, 0xa684, 0x4000, 0x0040, 0x30d7, 0x681b, 0x0007, 0x781b,
-       0x00df, 0x0078, 0x1e79, 0x681b, 0x0003, 0x7858, 0xa084, 0x3f00,
+       0x0070, 0x0040, 0x319b, 0x0c7e, 0x2d60, 0x2f68, 0x1078, 0x1e57,
+       0x2d78, 0x2c68, 0x0c7f, 0xa784, 0x0008, 0x0040, 0x31a8, 0x784b,
+       0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x1f03, 0x0078, 0x311c,
+       0xa784, 0x0004, 0x0040, 0x31db, 0x78b8, 0xa084, 0x4001, 0x0040,
+       0x31db, 0x784b, 0x0008, 0x78ec, 0xa084, 0x0003, 0x0040, 0x1f03,
+       0x78e4, 0xa084, 0x0007, 0xa086, 0x0001, 0x00c0, 0x31db, 0x78c0,
+       0xa685, 0x4800, 0x2030, 0x7e5a, 0x781b, 0x00e6, 0x0078, 0x1efb,
+       0x784b, 0x0008, 0x6818, 0xa084, 0x8000, 0x0040, 0x31d7, 0x681b,
+       0x0015, 0xa684, 0x4000, 0x0040, 0x31d7, 0x681b, 0x0007, 0x781b,
+       0x00df, 0x0078, 0x1efb, 0x681b, 0x0003, 0x7858, 0xa084, 0x3f00,
        0x681e, 0x682f, 0x0000, 0x6833, 0x0000, 0x784b, 0x0008, 0x78e4,
-       0xa005, 0x00d0, 0x22ec, 0xa084, 0x0020, 0x0040, 0x22ec, 0x0018,
-       0x22ec, 0x0078, 0x2e6f, 0x6b14, 0x8307, 0xa084, 0x000f, 0x8003,
-       0x8003, 0x8003, 0xa080, 0x3900, 0x2060, 0x2048, 0x704a, 0x6000,
+       0xa005, 0x00d0, 0x238a, 0xa084, 0x0020, 0x0040, 0x238a, 0x0018,
+       0x238a, 0x0078, 0x2f6f, 0x6b14, 0x8307, 0xa084, 0x000f, 0x8003,
+       0x8003, 0x8003, 0xa080, 0x3a00, 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,
@@ -1096,178 +1128,177 @@ unsigned short risc_code01[] = {
        0x8000, 0x85a4, 0x1de2, 0xdac1, 0x0014, 0xd301, 0x0014, 0x26e0,
        0x873a, 0xfaa2, 0x19f2, 0x1fe2, 0x0014, 0xa20b, 0x0014, 0xa20d,
        0x3806, 0x0210, 0x9ccc, 0x0704, 0x0000, 0x127e, 0x2091, 0x2200,
-       0x2049, 0x31f5, 0x7000, 0x7204, 0xa205, 0x720c, 0xa215, 0x7008,
-       0xa084, 0xfff7, 0xa205, 0x0040, 0x3207, 0x1078, 0x3280, 0x127f,
-       0x2000, 0x007c, 0x6428, 0x84ff, 0x0040, 0x3236, 0x2c70, 0x7004,
-       0xa0bc, 0x000f, 0xa7b8, 0x3246, 0x273c, 0x87fb, 0x00c0, 0x3224,
-       0x0048, 0x321c, 0x1078, 0x1e2a, 0x609c, 0xa075, 0x0040, 0x3236,
-       0x0078, 0x320f, 0x2039, 0x323b, 0x2704, 0xae68, 0x6808, 0xa630,
-       0x680c, 0xa529, 0x8421, 0x0040, 0x3236, 0x8738, 0x2704, 0xa005,
-       0x00c0, 0x3225, 0x709c, 0xa075, 0x00c0, 0x320f, 0x007c, 0x0000,
+       0x2049, 0x32f5, 0x7000, 0x7204, 0xa205, 0x720c, 0xa215, 0x7008,
+       0xa084, 0xfff7, 0xa205, 0x0040, 0x3307, 0x1078, 0x3380, 0x127f,
+       0x2000, 0x007c, 0x6428, 0x84ff, 0x0040, 0x3336, 0x2c70, 0x7004,
+       0xa0bc, 0x000f, 0xa7b8, 0x3346, 0x273c, 0x87fb, 0x00c0, 0x3324,
+       0x0048, 0x331c, 0x1078, 0x1eac, 0x609c, 0xa075, 0x0040, 0x3336,
+       0x0078, 0x330f, 0x2039, 0x333b, 0x2704, 0xae68, 0x6808, 0xa630,
+       0x680c, 0xa529, 0x8421, 0x0040, 0x3336, 0x8738, 0x2704, 0xa005,
+       0x00c0, 0x3325, 0x709c, 0xa075, 0x00c0, 0x330f, 0x007c, 0x0000,
        0x0005, 0x0009, 0x000d, 0x0011, 0x0015, 0x0019, 0x001d, 0x0000,
-       0x0003, 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x323b,
-       0x3238, 0x0000, 0x0000, 0x8000, 0x0000, 0x323b, 0x0000, 0x3243,
-       0x3240, 0x0000, 0x0000, 0x0000, 0x0000, 0x3243, 0x0000, 0x323e,
-       0x323e, 0x0000, 0x0000, 0x8000, 0x0000, 0x323e, 0x0000, 0x3244,
-       0x3244, 0x0000, 0x0000, 0x0000, 0x0000, 0x3244, 0x127e, 0x2091,
-       0x2200, 0x2079, 0x3800, 0x2071, 0x0010, 0x7007, 0x000a, 0x7007,
+       0x0003, 0x0009, 0x000f, 0x0015, 0x001b, 0x0000, 0x0000, 0x333b,
+       0x3338, 0x0000, 0x0000, 0x8000, 0x0000, 0x333b, 0x0000, 0x3343,
+       0x3340, 0x0000, 0x0000, 0x0000, 0x0000, 0x3343, 0x0000, 0x333e,
+       0x333e, 0x0000, 0x0000, 0x8000, 0x0000, 0x333e, 0x0000, 0x3344,
+       0x3344, 0x0000, 0x0000, 0x0000, 0x0000, 0x3344, 0x127e, 0x2091,
+       0x2200, 0x2079, 0x3900, 0x2071, 0x0010, 0x7007, 0x000a, 0x7007,
        0x0002, 0x7003, 0x0000, 0x2071, 0x0020, 0x7007, 0x000a, 0x7007,
        0x0002, 0x7003, 0x0000, 0x2049, 0x0000, 0x127f, 0x2000, 0x007c,
-       0x2049, 0x3280, 0x2019, 0x0000, 0x7004, 0x8004, 0x00c8, 0x32b2,
-       0x7007, 0x0012, 0x7108, 0x7008, 0xa106, 0x00c0, 0x328a, 0xa184,
-       0x01e0, 0x0040, 0x3295, 0x1078, 0x1e2a, 0xa184, 0x4000, 0x00c0,
-       0x328a, 0xa19c, 0x300c, 0xa386, 0x2004, 0x0040, 0x32a7, 0xa386,
-       0x0008, 0x0040, 0x32b2, 0xa386, 0x200c, 0x00c0, 0x328a, 0x7200,
-       0x8204, 0x0048, 0x32b2, 0x730c, 0xa384, 0x00ff, 0x0040, 0x32b2,
-       0x1078, 0x1e2a, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xa084,
-       0x0008, 0x00c0, 0x32b6, 0x7007, 0x0012, 0x7108, 0x8103, 0x0048,
-       0x32bb, 0x7003, 0x0000, 0x2049, 0x0000, 0x007c, 0x107e, 0x007e,
-       0x127e, 0x157e, 0x2091, 0x2200, 0x7108, 0x1078, 0x32d6, 0x157f,
-       0x127f, 0x2091, 0x8001, 0x007f, 0x107f, 0x007c, 0x7204, 0x7500,
-       0x730c, 0xa384, 0x0300, 0x00c0, 0x3315, 0xa184, 0x0060, 0x00c0,
-       0x334e, 0x7008, 0x7108, 0xa106, 0x00c0, 0x32e1, 0xa184, 0x01e0,
-       0x00c0, 0x334e, 0xa184, 0x4000, 0x00c0, 0x32e1, 0xa986, 0x353b,
-       0x00c0, 0x3309, 0xa19c, 0x300c, 0xa386, 0x2004, 0x0040, 0x3300,
-       0xa386, 0x0008, 0x0040, 0x3309, 0xa386, 0x200c, 0x00c0, 0x32e1,
-       0x7200, 0x8204, 0x0048, 0x3309, 0x730c, 0xa384, 0x00ff, 0x00c0,
-       0x3315, 0xa184, 0x0007, 0x0079, 0x330d, 0x3317, 0x3342, 0x3315,
-       0x3342, 0x3315, 0x339b, 0x3315, 0x3399, 0x1078, 0x1e2a, 0x7007,
-       0x0002, 0x8aff, 0x00c0, 0x3320, 0x2049, 0x0000, 0x0078, 0x3324,
-       0x1078, 0x3512, 0x00c0, 0x3320, 0x2704, 0xac00, 0xa088, 0x0002,
-       0x2104, 0x8108, 0x6892, 0x2104, 0x688e, 0x8a07, 0x077e, 0x007e,
-       0x6004, 0xa084, 0x0008, 0x0040, 0x3339, 0xa7ba, 0x3240, 0x0078,
-       0x333b, 0xa7ba, 0x3238, 0x007f, 0xa73d, 0x2c00, 0x6886, 0x6f8a,
-       0x077f, 0x007c, 0x7007, 0x0002, 0x8aff, 0x00c0, 0x3349, 0x0078,
-       0x334d, 0x1078, 0x3512, 0x00c0, 0x3349, 0x007c, 0x7108, 0x7008,
-       0xa106, 0x00c0, 0x334e, 0xa184, 0x4000, 0x00c0, 0x334e, 0x7007,
-       0x0012, 0x7108, 0x7008, 0xa106, 0x00c0, 0x3359, 0xa184, 0x4000,
-       0x00c0, 0x3359, 0x00e0, 0x3362, 0x2091, 0x6000, 0x00e0, 0x3366,
-       0x2091, 0x6000, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004, 0xa084,
-       0x0008, 0x00c0, 0x336e, 0x7007, 0x0012, 0x7108, 0x8103, 0x0048,
-       0x3373, 0x7003, 0x0000, 0x7000, 0xa005, 0x00c0, 0x3387, 0x7004,
-       0xa005, 0x00c0, 0x3387, 0x700c, 0xa005, 0x0040, 0x3389, 0x0078,
-       0x336a, 0x2049, 0x0000, 0x1078, 0x2fb3, 0x6818, 0xa084, 0x8000,
-       0x0040, 0x3394, 0x681b, 0x0002, 0x007c, 0x1078, 0x1e2a, 0x1078,
-       0x1e2a, 0x1078, 0x33f9, 0x7210, 0x7114, 0x700c, 0xa09c, 0x00ff,
-       0x2800, 0xa300, 0xa211, 0xa189, 0x0000, 0x1078, 0x33f9, 0x2704,
-       0x2c58, 0xac60, 0x6308, 0x2200, 0xa322, 0x630c, 0x2100, 0xa31b,
-       0x2400, 0xa305, 0x0040, 0x33be, 0x00c8, 0x33be, 0x8412, 0x8210,
-       0x830a, 0xa189, 0x0000, 0x2b60, 0x0078, 0x33a5, 0x2b60, 0x8a07,
-       0x007e, 0x6004, 0xa084, 0x0008, 0x0040, 0x33ca, 0xa7ba, 0x3240,
-       0x0078, 0x33cc, 0xa7ba, 0x3238, 0x007f, 0xa73d, 0x2c00, 0x6886,
-       0x6f8a, 0x6c92, 0x6b8e, 0x1078, 0x3280, 0x007c, 0x8738, 0x2704,
-       0xa005, 0x00c0, 0x33e9, 0x609c, 0xa005, 0x0040, 0x33f6, 0x2060,
-       0x6004, 0xa084, 0x000f, 0xa080, 0x3246, 0x203c, 0x87fb, 0x1040,
-       0x1e2a, 0x8a51, 0x0040, 0x33f5, 0x7008, 0x7508, 0xa52e, 0x00c0,
-       0x33ec, 0xa084, 0x0003, 0xa086, 0x0003, 0x007c, 0x2051, 0x0000,
-       0x007c, 0x8a50, 0x8739, 0x2704, 0xa004, 0x00c0, 0x340d, 0x6000,
-       0xa064, 0x00c0, 0x3404, 0x2d60, 0x6004, 0xa084, 0x000f, 0xa080,
-       0x3256, 0x203c, 0x87fb, 0x1040, 0x1e2a, 0x007c, 0x127e, 0x0d7e,
-       0x2091, 0x2200, 0x0d7f, 0x6884, 0x2060, 0x6888, 0x6b8c, 0x6c90,
-       0x8057, 0xaad4, 0x00ff, 0xa084, 0x00ff, 0x007e, 0x6804, 0xa084,
-       0x0008, 0x007f, 0x0040, 0x3428, 0xa0b8, 0x3240, 0x0078, 0x342a,
-       0xa0b8, 0x3238, 0x7e08, 0xa6b5, 0x000c, 0x681c, 0xa084, 0x0040,
-       0x0040, 0x3434, 0xa6b5, 0x0001, 0x7007, 0x0004, 0x7004, 0xa084,
-       0x0004, 0x00c0, 0x3436, 0x2400, 0xa305, 0x00c0, 0x3441, 0x0078,
-       0x3465, 0x2c58, 0x2704, 0x6104, 0xac60, 0x6000, 0xa400, 0x701a,
-       0x6004, 0xa301, 0x701e, 0xa184, 0x0008, 0x0040, 0x3455, 0x6010,
-       0xa001, 0x7022, 0x6014, 0xa001, 0x7026, 0x6208, 0x2400, 0xa202,
-       0x7012, 0x620c, 0x2300, 0xa203, 0x7016, 0x7602, 0x7007, 0x0001,
-       0x2b60, 0x1078, 0x33d6, 0x0078, 0x3467, 0x1078, 0x3512, 0x00c0,
-       0x3465, 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200,
-       0x0d7f, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x3473,
-       0x7003, 0x0008, 0x127f, 0x2000, 0x007c, 0x127e, 0x0d7e, 0x2091,
-       0x2200, 0x0d7f, 0x2049, 0x347d, 0x7007, 0x0004, 0x7004, 0xa084,
-       0x0004, 0x00c0, 0x3486, 0x7e08, 0xa6b5, 0x000c, 0x681c, 0xa084,
-       0x0020, 0x00c0, 0x3495, 0xa6b5, 0x0001, 0x6828, 0x2050, 0x2d60,
-       0x6004, 0xa0bc, 0x000f, 0xa7b8, 0x3246, 0x273c, 0x87fb, 0x00c0,
-       0x34ab, 0x0048, 0x34a5, 0x1078, 0x1e2a, 0x689c, 0xa065, 0x0040,
-       0x34af, 0x0078, 0x3498, 0x1078, 0x3512, 0x00c0, 0x34ab, 0x127f,
-       0x2000, 0x007c, 0x127e, 0x007e, 0x017e, 0x0d7e, 0x2091, 0x2200,
-       0x0d7f, 0x037f, 0x047f, 0x7e08, 0xa6b5, 0x000c, 0x681c, 0xa084,
-       0x0040, 0x0040, 0x34c5, 0xa6b5, 0x0001, 0x2049, 0x34b2, 0x6828,
-       0xa055, 0x0040, 0x350f, 0x2d70, 0x2e60, 0x7004, 0xa0bc, 0x000f,
-       0xa7b8, 0x3246, 0x273c, 0x87fb, 0x00c0, 0x34e1, 0x0048, 0x34da,
-       0x1078, 0x1e2a, 0x709c, 0xa075, 0x2060, 0x0040, 0x350f, 0x0078,
-       0x34cd, 0x2704, 0xae68, 0x6808, 0xa422, 0x680c, 0xa31b, 0x0048,
-       0x34fc, 0x8a51, 0x00c0, 0x34ee, 0x1078, 0x1e2a, 0x8738, 0x2704,
-       0xa005, 0x00c0, 0x34e2, 0x709c, 0xa075, 0x2060, 0x0040, 0x350f,
-       0x2039, 0x3238, 0x0078, 0x34cd, 0x8422, 0x8420, 0x831a, 0xa399,
-       0x0000, 0x6908, 0x2400, 0xa122, 0x690c, 0x2300, 0xa11b, 0x00c8,
-       0x350b, 0x1078, 0x1e2a, 0x2071, 0x0020, 0x0078, 0x3434, 0x127f,
-       0x2000, 0x007c, 0x7008, 0x7508, 0xa52e, 0x00c0, 0x3512, 0xa084,
-       0x0003, 0xa086, 0x0003, 0x0040, 0x353a, 0x2704, 0xac08, 0x2104,
-       0x701a, 0x8108, 0x2104, 0x701e, 0x8108, 0x2104, 0x7012, 0x8108,
-       0x2104, 0x7016, 0x6004, 0xa084, 0x0008, 0x0040, 0x3535, 0x8108,
-       0x2104, 0x7022, 0x8108, 0x2104, 0x7026, 0x7602, 0x7007, 0x0001,
-       0x1078, 0x33d6, 0x007c, 0x127e, 0x007e, 0x0d7e, 0x2091, 0x2200,
-       0x2049, 0x353b, 0x0d7f, 0x087f, 0x7108, 0x7008, 0xa106, 0x00c0,
-       0x3544, 0xa184, 0x4000, 0x00c0, 0x3544, 0xa184, 0x0003, 0x00c0,
-       0x355b, 0x6828, 0xa005, 0x0040, 0x3569, 0x0020, 0x355b, 0x1078,
-       0x339b, 0x0078, 0x3569, 0x00a0, 0x3562, 0x7108, 0x1078, 0x32d6,
-       0x0078, 0x3544, 0x7007, 0x0010, 0x00a0, 0x3564, 0x7108, 0x1078,
-       0x32d6, 0x7008, 0xa086, 0x0008, 0x00c0, 0x3544, 0x7003, 0x0000,
-       0x2049, 0x0000, 0x127f, 0x2000, 0x007c, 0x127e, 0x147e, 0x137e,
-       0x157e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x2049, 0x3575, 0xad80,
-       0x0011, 0x20a0, 0x2099, 0x0031, 0x700c, 0xa084, 0x00ff, 0x682a,
-       0x7007, 0x0008, 0x7007, 0x0002, 0x7003, 0x0001, 0x0040, 0x3593,
-       0x8000, 0x80ac, 0x53a5, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004,
-       0x00c0, 0x3595, 0x2049, 0x0000, 0x7003, 0x0000, 0x157f, 0x137f,
-       0x147f, 0x127f, 0x2000, 0x007c, 0x2091, 0x6000, 0x78b0, 0xa005,
-       0x0040, 0x35b9, 0x797c, 0x70d0, 0xa106, 0x00c0, 0x35b9, 0x7804,
-       0xa005, 0x0040, 0x35b9, 0x7807, 0x0000, 0x0068, 0x35b9, 0x2091,
-       0x4080, 0x7820, 0x8001, 0x7822, 0x00c0, 0x3619, 0x7824, 0x7822,
-       0x2091, 0x8000, 0x78e0, 0xa005, 0x0040, 0x35e6, 0x78c4, 0xa005,
-       0x00c0, 0x35e6, 0x3a10, 0xa284, 0x0002, 0x00c0, 0x35d6, 0x78c7,
-       0x0007, 0x2009, 0xff01, 0x200a, 0x0078, 0x35e6, 0xa284, 0x0001,
-       0x00c0, 0x35de, 0x78df, 0x0000, 0x0078, 0x35e6, 0x78dc, 0xa005,
-       0x00c0, 0x35e6, 0x78c7, 0x0008, 0x78df, 0x0001, 0x2069, 0x3840,
-       0x6800, 0xa084, 0x0007, 0x0040, 0x35fd, 0xa086, 0x0002, 0x0040,
-       0x35fd, 0x6830, 0xa00d, 0x0040, 0x35fd, 0x2104, 0xa005, 0x0040,
-       0x35fd, 0x8001, 0x200a, 0x0040, 0x36bb, 0x7848, 0xa005, 0x0040,
-       0x3619, 0x8001, 0x784a, 0x00c0, 0x3619, 0x0f7e, 0x2079, 0x0100,
-       0x1078, 0x306a, 0x0f7f, 0x1078, 0x1c74, 0x68c4, 0xa005, 0x0040,
-       0x3619, 0x8001, 0x68c6, 0x00c0, 0x3619, 0x68a3, 0x0000, 0x68a7,
-       0x0001, 0x1078, 0x3620, 0x1078, 0x3645, 0x2091, 0x8001, 0x007c,
-       0x7834, 0x8001, 0x7836, 0x00c0, 0x3644, 0x7838, 0x7836, 0x2091,
-       0x8000, 0x7844, 0xa005, 0x00c0, 0x362f, 0x2001, 0x0101, 0x8001,
-       0x7846, 0xa080, 0x4180, 0x2040, 0x2004, 0xa065, 0x0040, 0x3644,
-       0x6024, 0xa005, 0x0040, 0x3640, 0x8001, 0x6026, 0x0040, 0x3674,
-       0x6000, 0x2c40, 0x0078, 0x3635, 0x007c, 0x7828, 0x8001, 0x782a,
-       0x00c0, 0x3673, 0x782c, 0x782a, 0x7830, 0xa005, 0x00c0, 0x3652,
-       0x2001, 0x0080, 0x8001, 0x7832, 0x8003, 0x8003, 0x8003, 0x8003,
-       0xa090, 0x3980, 0xa298, 0x0002, 0x2304, 0xa084, 0x0008, 0x0040,
-       0x3673, 0xa290, 0x0009, 0x2204, 0xa005, 0x0040, 0x366b, 0x8001,
-       0x2012, 0x00c0, 0x3673, 0x2304, 0xa084, 0xfff7, 0xa085, 0x0080,
-       0x201a, 0x1078, 0x1c74, 0x007c, 0x2069, 0x3840, 0x6800, 0xa005,
-       0x0040, 0x367e, 0x683c, 0xac06, 0x0040, 0x36bb, 0x601b, 0x0006,
-       0x60b4, 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085,
-       0x0060, 0x6022, 0x6000, 0x2042, 0x6714, 0x6fb6, 0x1078, 0x183c,
-       0x6818, 0xa005, 0x0040, 0x3696, 0x8001, 0x681a, 0x6808, 0xa084,
-       0xffef, 0x680a, 0x6810, 0x8001, 0x00d0, 0x36a0, 0x1078, 0x1e2a,
-       0x6812, 0x602f, 0x0000, 0x6033, 0x0000, 0x2c68, 0x1078, 0x19a4,
-       0x2069, 0x3840, 0x2001, 0x0006, 0x68a2, 0x7944, 0xa184, 0x0100,
-       0x00c0, 0x36b6, 0x69ba, 0x2001, 0x0004, 0x68a2, 0x1078, 0x1c6f,
-       0x2091, 0x8001, 0x007c, 0x2009, 0x384f, 0x2164, 0x2069, 0x0100,
-       0x1078, 0x1dd5, 0x601b, 0x0006, 0x6858, 0xa084, 0x3f00, 0x601e,
-       0x6020, 0xa084, 0x00ff, 0xa085, 0x0048, 0x6022, 0x602f, 0x0000,
-       0x6033, 0x0000, 0x6830, 0xa084, 0x0040, 0x0040, 0x36f7, 0x684b,
-       0x0004, 0x20a9, 0x0014, 0x6848, 0xa084, 0x0004, 0x0040, 0x36e4,
-       0x0070, 0x36e4, 0x0078, 0x36db, 0x684b, 0x0009, 0x20a9, 0x0014,
-       0x6848, 0xa084, 0x0001, 0x0040, 0x36f1, 0x0070, 0x36f1, 0x0078,
-       0x36e8, 0x20a9, 0x00fa, 0x0070, 0x36f7, 0x0078, 0x36f3, 0x6808,
-       0xa084, 0xfffd, 0x680a, 0x681b, 0x0047, 0x2009, 0x3868, 0x200b,
-       0x0007, 0x784c, 0x784a, 0x2091, 0x8001, 0x007c, 0x2079, 0x3800,
-       0x1078, 0x3731, 0x1078, 0x3715, 0x1078, 0x3723, 0x7833, 0x0000,
-       0x7847, 0x0000, 0x784b, 0x0000, 0x007c, 0x2019, 0x000c, 0x2011,
-       0x3846, 0x2204, 0xa086, 0x003c, 0x0040, 0x3720, 0x2019, 0x0008,
-       0x7b2a, 0x7b2e, 0x007c, 0x2019, 0x0039, 0x2011, 0x3846, 0x2204,
-       0xa086, 0x003c, 0x0040, 0x372e, 0x2019, 0x0027, 0x7b36, 0x7b3a,
-       0x007c, 0x2019, 0x3971, 0x2011, 0x3846, 0x2204, 0xa086, 0x003c,
-       0x0040, 0x373c, 0x2019, 0x2626, 0x7b22, 0x7b26, 0x783f, 0x0000,
-       0x7843, 0x000a, 0x007c, 0xe0c5
+       0x2049, 0x3380, 0x2019, 0x0000, 0x7004, 0x8004, 0x00c8, 0x33b2,
+       0x7007, 0x0012, 0x7108, 0x7008, 0xa106, 0x00c0, 0x338a, 0xa184,
+       0x01e0, 0x0040, 0x3395, 0x1078, 0x1eac, 0xa184, 0x4000, 0x00c0,
+       0x338a, 0xa19c, 0x300c, 0xa386, 0x2004, 0x0040, 0x33a7, 0xa386,
+       0x0008, 0x0040, 0x33b2, 0xa386, 0x200c, 0x00c0, 0x338a, 0x7200,
+       0x8204, 0x0048, 0x33b2, 0x730c, 0xa384, 0x00ff, 0x0040, 0x33b2,
+       0x1078, 0x1eac, 0x7007, 0x0012, 0x7000, 0xa084, 0x0001, 0x00c0,
+       0x33c3, 0x7310, 0x7014, 0xa305, 0x0040, 0x33c3, 0x700c, 0xa084,
+       0x00ff, 0x00c0, 0x3380, 0x7007, 0x0012, 0x7007, 0x0008, 0x7004,
+       0xa084, 0x0008, 0x00c0, 0x33c7, 0x7007, 0x0012, 0x7108, 0x8103,
+       0x0048, 0x33cc, 0x7003, 0x0000, 0x2049, 0x0000, 0x007c, 0x107e,
+       0x007e, 0x127e, 0x157e, 0x2091, 0x2200, 0x7108, 0x1078, 0x33e7,
+       0x157f, 0x127f, 0x2091, 0x8001, 0x007f, 0x107f, 0x007c, 0x7204,
+       0x7500, 0x730c, 0xa384, 0x0300, 0x00c0, 0x3426, 0xa184, 0x0060,
+       0x00c0, 0x3442, 0x7008, 0x7108, 0xa106, 0x00c0, 0x33f2, 0xa184,
+       0x01e0, 0x00c0, 0x3442, 0xa184, 0x4000, 0x00c0, 0x33f2, 0xa986,
+       0x362f, 0x00c0, 0x341a, 0xa19c, 0x300c, 0xa386, 0x2004, 0x0040,
+       0x3411, 0xa386, 0x0008, 0x0040, 0x341a, 0xa386, 0x200c, 0x00c0,
+       0x33f2, 0x7200, 0x8204, 0x0048, 0x341a, 0x730c, 0xa384, 0x00ff,
+       0x00c0, 0x3426, 0xa184, 0x0007, 0x0079, 0x341e, 0x3428, 0x3436,
+       0x3426, 0x3436, 0x3426, 0x348f, 0x3426, 0x348d, 0x1078, 0x1eac,
+       0x7007, 0x0002, 0x8aff, 0x00c0, 0x3431, 0x2049, 0x0000, 0x0078,
+       0x3435, 0x1078, 0x3606, 0x00c0, 0x3431, 0x007c, 0x7007, 0x0002,
+       0x8aff, 0x00c0, 0x343d, 0x0078, 0x3441, 0x1078, 0x3606, 0x00c0,
+       0x343d, 0x007c, 0x7108, 0x7008, 0xa106, 0x00c0, 0x3442, 0xa184,
+       0x4000, 0x00c0, 0x3442, 0x7007, 0x0012, 0x7108, 0x7008, 0xa106,
+       0x00c0, 0x344d, 0xa184, 0x4000, 0x00c0, 0x344d, 0x00e0, 0x3456,
+       0x2091, 0x6000, 0x00e0, 0x345a, 0x2091, 0x6000, 0x7007, 0x0012,
+       0x7007, 0x0008, 0x7004, 0xa084, 0x0008, 0x00c0, 0x3462, 0x7007,
+       0x0012, 0x7108, 0x8103, 0x0048, 0x3467, 0x7003, 0x0000, 0x7000,
+       0xa005, 0x00c0, 0x347b, 0x7004, 0xa005, 0x00c0, 0x347b, 0x700c,
+       0xa005, 0x0040, 0x347d, 0x0078, 0x345e, 0x2049, 0x0000, 0x1078,
+       0x30b3, 0x6818, 0xa084, 0x8000, 0x0040, 0x3488, 0x681b, 0x0002,
+       0x007c, 0x1078, 0x1eac, 0x1078, 0x1eac, 0x1078, 0x34ed, 0x7210,
+       0x7114, 0x700c, 0xa09c, 0x00ff, 0x2800, 0xa300, 0xa211, 0xa189,
+       0x0000, 0x1078, 0x34ed, 0x2704, 0x2c58, 0xac60, 0x6308, 0x2200,
+       0xa322, 0x630c, 0x2100, 0xa31b, 0x2400, 0xa305, 0x0040, 0x34b2,
+       0x00c8, 0x34b2, 0x8412, 0x8210, 0x830a, 0xa189, 0x0000, 0x2b60,
+       0x0078, 0x3499, 0x2b60, 0x8a07, 0x007e, 0x6004, 0xa084, 0x0008,
+       0x0040, 0x34be, 0xa7ba, 0x3340, 0x0078, 0x34c0, 0xa7ba, 0x3338,
+       0x007f, 0xa73d, 0x2c00, 0x6886, 0x6f8a, 0x6c92, 0x6b8e, 0x1078,
+       0x3380, 0x007c, 0x8738, 0x2704, 0xa005, 0x00c0, 0x34dd, 0x609c,
+       0xa005, 0x0040, 0x34ea, 0x2060, 0x6004, 0xa084, 0x000f, 0xa080,
+       0x3346, 0x203c, 0x87fb, 0x1040, 0x1eac, 0x8a51, 0x0040, 0x34e9,
+       0x7008, 0x7508, 0xa52e, 0x00c0, 0x34e0, 0xa084, 0x0003, 0xa086,
+       0x0003, 0x007c, 0x2051, 0x0000, 0x007c, 0x8a50, 0x8739, 0x2704,
+       0xa004, 0x00c0, 0x3501, 0x6000, 0xa064, 0x00c0, 0x34f8, 0x2d60,
+       0x6004, 0xa084, 0x000f, 0xa080, 0x3356, 0x203c, 0x87fb, 0x1040,
+       0x1eac, 0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x6884,
+       0x2060, 0x6888, 0x6b8c, 0x6c90, 0x8057, 0xaad4, 0x00ff, 0xa084,
+       0x00ff, 0x007e, 0x6804, 0xa084, 0x0008, 0x007f, 0x0040, 0x351c,
+       0xa0b8, 0x3340, 0x0078, 0x351e, 0xa0b8, 0x3338, 0x7e08, 0xa6b5,
+       0x000c, 0x681c, 0xa084, 0x0040, 0x0040, 0x3528, 0xa6b5, 0x0001,
+       0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x352a, 0x2400,
+       0xa305, 0x00c0, 0x3535, 0x0078, 0x3559, 0x2c58, 0x2704, 0x6104,
+       0xac60, 0x6000, 0xa400, 0x701a, 0x6004, 0xa301, 0x701e, 0xa184,
+       0x0008, 0x0040, 0x3549, 0x6010, 0xa001, 0x7022, 0x6014, 0xa001,
+       0x7026, 0x6208, 0x2400, 0xa202, 0x7012, 0x620c, 0x2300, 0xa203,
+       0x7016, 0x7602, 0x7007, 0x0001, 0x2b60, 0x1078, 0x34ca, 0x0078,
+       0x355b, 0x1078, 0x3606, 0x00c0, 0x3559, 0x127f, 0x2000, 0x007c,
+       0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x7007, 0x0004, 0x7004,
+       0xa084, 0x0004, 0x00c0, 0x3567, 0x7003, 0x0008, 0x127f, 0x2000,
+       0x007c, 0x127e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x2049, 0x3571,
+       0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x357a, 0x7e08,
+       0xa6b5, 0x000c, 0x681c, 0xa084, 0x0020, 0x00c0, 0x3589, 0xa6b5,
+       0x0001, 0x6828, 0x2050, 0x2d60, 0x6004, 0xa0bc, 0x000f, 0xa7b8,
+       0x3346, 0x273c, 0x87fb, 0x00c0, 0x359f, 0x0048, 0x3599, 0x1078,
+       0x1eac, 0x689c, 0xa065, 0x0040, 0x35a3, 0x0078, 0x358c, 0x1078,
+       0x3606, 0x00c0, 0x359f, 0x127f, 0x2000, 0x007c, 0x127e, 0x007e,
+       0x017e, 0x0d7e, 0x2091, 0x2200, 0x0d7f, 0x037f, 0x047f, 0x7e08,
+       0xa6b5, 0x000c, 0x681c, 0xa084, 0x0040, 0x0040, 0x35b9, 0xa6b5,
+       0x0001, 0x2049, 0x35a6, 0x6828, 0xa055, 0x0040, 0x3603, 0x2d70,
+       0x2e60, 0x7004, 0xa0bc, 0x000f, 0xa7b8, 0x3346, 0x273c, 0x87fb,
+       0x00c0, 0x35d5, 0x0048, 0x35ce, 0x1078, 0x1eac, 0x709c, 0xa075,
+       0x2060, 0x0040, 0x3603, 0x0078, 0x35c1, 0x2704, 0xae68, 0x6808,
+       0xa422, 0x680c, 0xa31b, 0x0048, 0x35f0, 0x8a51, 0x00c0, 0x35e2,
+       0x1078, 0x1eac, 0x8738, 0x2704, 0xa005, 0x00c0, 0x35d6, 0x709c,
+       0xa075, 0x2060, 0x0040, 0x3603, 0x2039, 0x3338, 0x0078, 0x35c1,
+       0x8422, 0x8420, 0x831a, 0xa399, 0x0000, 0x6908, 0x2400, 0xa122,
+       0x690c, 0x2300, 0xa11b, 0x00c8, 0x35ff, 0x1078, 0x1eac, 0x2071,
+       0x0020, 0x0078, 0x3528, 0x127f, 0x2000, 0x007c, 0x7008, 0x7508,
+       0xa52e, 0x00c0, 0x3606, 0xa084, 0x0003, 0xa086, 0x0003, 0x0040,
+       0x362e, 0x2704, 0xac08, 0x2104, 0x701a, 0x8108, 0x2104, 0x701e,
+       0x8108, 0x2104, 0x7012, 0x8108, 0x2104, 0x7016, 0x6004, 0xa084,
+       0x0008, 0x0040, 0x3629, 0x8108, 0x2104, 0x7022, 0x8108, 0x2104,
+       0x7026, 0x7602, 0x7007, 0x0001, 0x1078, 0x34ca, 0x007c, 0x127e,
+       0x007e, 0x0d7e, 0x2091, 0x2200, 0x2049, 0x362f, 0x0d7f, 0x087f,
+       0x7108, 0x7008, 0xa106, 0x00c0, 0x3638, 0xa184, 0x4000, 0x00c0,
+       0x3638, 0xa184, 0x0003, 0x00c0, 0x364f, 0x6828, 0xa005, 0x0040,
+       0x365d, 0x0020, 0x364f, 0x1078, 0x348f, 0x0078, 0x365d, 0x00a0,
+       0x3656, 0x7108, 0x1078, 0x33e7, 0x0078, 0x3638, 0x7007, 0x0010,
+       0x00a0, 0x3658, 0x7108, 0x1078, 0x33e7, 0x7008, 0xa086, 0x0008,
+       0x00c0, 0x3638, 0x7000, 0xa005, 0x00c0, 0x3638, 0x2049, 0x0000,
+       0x127f, 0x2000, 0x007c, 0x127e, 0x147e, 0x137e, 0x157e, 0x0d7e,
+       0x2091, 0x2200, 0x0d7f, 0x2049, 0x366b, 0xad80, 0x0011, 0x20a0,
+       0x2099, 0x0031, 0x700c, 0xa084, 0x00ff, 0x682a, 0x7007, 0x0008,
+       0x7007, 0x0002, 0x7003, 0x0001, 0x0040, 0x3689, 0x8000, 0x80ac,
+       0x53a5, 0x7007, 0x0004, 0x7004, 0xa084, 0x0004, 0x00c0, 0x368b,
+       0x2049, 0x0000, 0x7003, 0x0000, 0x157f, 0x137f, 0x147f, 0x127f,
+       0x2000, 0x007c, 0x2091, 0x6000, 0x78c0, 0xa005, 0x0040, 0x36af,
+       0x798c, 0x70d0, 0xa106, 0x00c0, 0x36af, 0x7804, 0xa005, 0x0040,
+       0x36af, 0x7807, 0x0000, 0x0068, 0x36af, 0x2091, 0x4080, 0x7820,
+       0x8001, 0x7822, 0x00c0, 0x370f, 0x7824, 0x7822, 0x2091, 0x8000,
+       0x78f0, 0xa005, 0x0040, 0x36dc, 0x78d4, 0xa005, 0x00c0, 0x36dc,
+       0x3a10, 0xa284, 0x0002, 0x00c0, 0x36cc, 0x78d7, 0x0007, 0x2009,
+       0xff01, 0x200a, 0x0078, 0x36dc, 0xa284, 0x0001, 0x00c0, 0x36d4,
+       0x78ef, 0x0000, 0x0078, 0x36dc, 0x78ec, 0xa005, 0x00c0, 0x36dc,
+       0x78d7, 0x0008, 0x78ef, 0x0001, 0x2069, 0x3940, 0x6800, 0xa084,
+       0x0007, 0x0040, 0x36f3, 0xa086, 0x0002, 0x0040, 0x36f3, 0x6830,
+       0xa00d, 0x0040, 0x36f3, 0x2104, 0xa005, 0x0040, 0x36f3, 0x8001,
+       0x200a, 0x0040, 0x37b1, 0x7848, 0xa005, 0x0040, 0x3703, 0x8001,
+       0x784a, 0x00c0, 0x3703, 0x0f7e, 0x2079, 0x0100, 0x1078, 0x316a,
+       0x0f7f, 0x1078, 0x1cf6, 0x68c4, 0xa005, 0x0040, 0x370f, 0x8001,
+       0x68c6, 0x00c0, 0x370f, 0x68a3, 0x0000, 0x68a7, 0x0001, 0x1078,
+       0x3716, 0x1078, 0x373b, 0x2091, 0x8001, 0x007c, 0x7834, 0x8001,
+       0x7836, 0x00c0, 0x373a, 0x7838, 0x7836, 0x2091, 0x8000, 0x7844,
+       0xa005, 0x00c0, 0x3725, 0x2001, 0x0101, 0x8001, 0x7846, 0xa080,
+       0x4280, 0x2040, 0x2004, 0xa065, 0x0040, 0x373a, 0x6024, 0xa005,
+       0x0040, 0x3736, 0x8001, 0x6026, 0x0040, 0x376a, 0x6000, 0x2c40,
+       0x0078, 0x372b, 0x007c, 0x7828, 0x8001, 0x782a, 0x00c0, 0x3769,
+       0x782c, 0x782a, 0x7830, 0xa005, 0x00c0, 0x3748, 0x2001, 0x0080,
+       0x8001, 0x7832, 0x8003, 0x8003, 0x8003, 0x8003, 0xa090, 0x3a80,
+       0xa298, 0x0002, 0x2304, 0xa084, 0x0008, 0x0040, 0x3769, 0xa290,
+       0x0009, 0x2204, 0xa005, 0x0040, 0x3761, 0x8001, 0x2012, 0x00c0,
+       0x3769, 0x2304, 0xa084, 0xfff7, 0xa085, 0x0080, 0x201a, 0x1078,
+       0x1cf6, 0x007c, 0x2069, 0x3940, 0x6800, 0xa005, 0x0040, 0x3774,
+       0x683c, 0xac06, 0x0040, 0x37b1, 0x601b, 0x0006, 0x60b4, 0xa084,
+       0x3f00, 0x601e, 0x6020, 0xa084, 0x00ff, 0xa085, 0x0060, 0x6022,
+       0x6000, 0x2042, 0x6714, 0x6fb6, 0x1078, 0x18b4, 0x6818, 0xa005,
+       0x0040, 0x378c, 0x8001, 0x681a, 0x6808, 0xa084, 0xffef, 0x680a,
+       0x6810, 0x8001, 0x00d0, 0x3796, 0x1078, 0x1eac, 0x6812, 0x602f,
+       0x0000, 0x6033, 0x0000, 0x2c68, 0x1078, 0x1a26, 0x2069, 0x3940,
+       0x2001, 0x0006, 0x68a2, 0x7944, 0xa184, 0x0100, 0x00c0, 0x37ac,
+       0x69ba, 0x2001, 0x0004, 0x68a2, 0x1078, 0x1cf1, 0x2091, 0x8001,
+       0x007c, 0x2009, 0x394f, 0x2164, 0x2069, 0x0100, 0x1078, 0x1e57,
+       0x601b, 0x0006, 0x6858, 0xa084, 0x3f00, 0x601e, 0x6020, 0xa084,
+       0x00ff, 0xa085, 0x0048, 0x6022, 0x602f, 0x0000, 0x6033, 0x0000,
+       0x6830, 0xa084, 0x0040, 0x0040, 0x37ed, 0x684b, 0x0004, 0x20a9,
+       0x0014, 0x6848, 0xa084, 0x0004, 0x0040, 0x37da, 0x0070, 0x37da,
+       0x0078, 0x37d1, 0x684b, 0x0009, 0x20a9, 0x0014, 0x6848, 0xa084,
+       0x0001, 0x0040, 0x37e7, 0x0070, 0x37e7, 0x0078, 0x37de, 0x20a9,
+       0x00fa, 0x0070, 0x37ed, 0x0078, 0x37e9, 0x6808, 0xa084, 0xfffd,
+       0x680a, 0x681b, 0x0047, 0x2009, 0x3968, 0x200b, 0x0007, 0x784c,
+       0x784a, 0x2091, 0x8001, 0x007c, 0x2079, 0x3900, 0x1078, 0x3827,
+       0x1078, 0x380b, 0x1078, 0x3819, 0x7833, 0x0000, 0x7847, 0x0000,
+       0x784b, 0x0000, 0x007c, 0x2019, 0x000c, 0x2011, 0x3946, 0x2204,
+       0xa086, 0x003c, 0x0040, 0x3816, 0x2019, 0x0008, 0x7b2a, 0x7b2e,
+       0x007c, 0x2019, 0x0039, 0x2011, 0x3946, 0x2204, 0xa086, 0x003c,
+       0x0040, 0x3824, 0x2019, 0x0027, 0x7b36, 0x7b3a, 0x007c, 0x2019,
+       0x3971, 0x2011, 0x3946, 0x2204, 0xa086, 0x003c, 0x0040, 0x3832,
+       0x2019, 0x2626, 0x7b22, 0x7b26, 0x783f, 0x0000, 0x7843, 0x000a,
+       0x007c, 0x8e59
 };
 
 #endif /* RELOAD_FIRMWARE */
 
-unsigned short risc_code_length01 = 0x2744;
+unsigned short risc_code_length01 = 0x283a;
index 9d165f9635dc95d80707547eb774b01f4759390d..696bf6c8a4921de44b4cf24a9df857ecb2892963 100644 (file)
@@ -22,7 +22,7 @@
 #include <scsi/scsi_ioctl.h>
 
 #define MAX_RETRIES 5   
-#define MAX_TIMEOUT 900
+#define MAX_TIMEOUT (9 * HZ)
 #define MAX_BUF 4096
 
 #define max(a,b) (((a) > (b)) ? (a) : (b))
index c51e2192de777ac0e57adb0a179eefdcf51aeb4d..e6660e8631c7a9142bc0796982ce244c6024cff1 100644 (file)
@@ -218,11 +218,45 @@ static void rw_intr (Scsi_Cmnd *SCpnt)
 {
     int result = SCpnt->result;
     int this_count = SCpnt->bufflen >> 9;
+    int good_sectors = (result == 0 ? this_count : 0);
+    int block_sectors = 1;
     
 #ifdef DEBUG
     printk("sd%c : rw_intr(%d, %d)\n", 'a' + MINOR(SCpnt->request.rq_dev), 
           SCpnt->host->host_no, result);
 #endif
+
+    /*
+      Handle MEDIUM ERRORs that indicate partial success.  Since this is a
+      relatively rare error condition, no care is taken to avoid unnecessary
+      additional work such as memcpy's that could be avoided.
+    */
+
+    if (driver_byte(result) != 0 &&                /* An error occurred */
+       SCpnt->sense_buffer[0] == 0xF0 &&           /* Sense data is valid */
+       SCpnt->sense_buffer[2] == MEDIUM_ERROR)
+      {
+       long error_sector = (SCpnt->sense_buffer[3] << 24) |
+                           (SCpnt->sense_buffer[4] << 16) |
+                           (SCpnt->sense_buffer[5] << 8) |
+                           SCpnt->sense_buffer[6];
+       int sector_size =
+         rscsi_disks[DEVICE_NR(SCpnt->request.rq_dev)].sector_size;
+       if (SCpnt->request.bh != NULL)
+         block_sectors = SCpnt->request.bh->b_size >> 9;
+       if (sector_size == 1024)
+         {
+           error_sector <<= 1;
+           if (block_sectors < 2) block_sectors = 2;
+         }
+       else if (sector_size == 256)
+         error_sector >>= 1;
+       error_sector -= sd[MINOR(SCpnt->request.rq_dev)].start_sect;
+       error_sector &= ~ (block_sectors - 1);
+       good_sectors = error_sector - SCpnt->request.sector;
+       if (good_sectors < 0 || good_sectors >= this_count)
+         good_sectors = 0;
+      }
     
     /*
      * First case : we assume that the command succeeded.  One of two things 
@@ -230,7 +264,7 @@ static void rw_intr (Scsi_Cmnd *SCpnt)
      * sectors that we were unable to read last time.
      */
 
-    if (!result) {
+    if (good_sectors > 0) {
        
 #ifdef DEBUG
        printk("sd%c : %d sectors remain.\n", 'a' + MINOR(SCpnt->request.rq_dev),
@@ -291,11 +325,16 @@ static void rw_intr (Scsi_Cmnd *SCpnt)
                      SCpnt->request.sector, this_count);
            }
        }
-       SCpnt = end_scsi_request(SCpnt, 1, this_count);
-       requeue_sd_request(SCpnt);
-       return;
+       SCpnt = end_scsi_request(SCpnt, 1, good_sectors);
+       if (result == 0)
+         {
+           requeue_sd_request(SCpnt);
+           return;
+         }
     }
     
+    if (good_sectors == 0) {
+
     /* Free up any indirection buffers we allocated for DMA purposes. */
     if (SCpnt->use_sg) {
        struct scatterlist * sgpnt;
@@ -319,7 +358,8 @@ static void rw_intr (Scsi_Cmnd *SCpnt)
        if (SCpnt->buffer != SCpnt->request.buffer)
            scsi_free(SCpnt->buffer, SCpnt->bufflen);
     }
-    
+    }
+
     /*
      * Now, if we were good little boys and girls, Santa left us a request
      * sense buffer.  We can extract information from this, so we
@@ -382,6 +422,17 @@ static void rw_intr (Scsi_Cmnd *SCpnt)
                /* ???? */
            }
        }
+
+       if (SCpnt->sense_buffer[2] == MEDIUM_ERROR) {
+           printk("scsi%d: MEDIUM ERROR on channel %d, id %d, lun %d, CDB: ",
+                  SCpnt->host->host_no, (int) SCpnt->channel, 
+                  (int) SCpnt->target, (int) SCpnt->lun);
+           print_command(SCpnt->cmnd);
+           print_sense("sr", SCpnt);
+           SCpnt = end_scsi_request(SCpnt, 0, block_sectors);
+           requeue_sd_request(SCpnt);
+           return;
+        }
     }  /* driver byte != 0 */
     if (result) {
        printk("SCSI disk error : host %d channel %d id %d lun %d return code = %x\n",
index 76fa76e97bae9c4259ab0cff4733cc6ff3a1602d..34014176da0a02340d2bf4dcbf4be6dab8ff7a28 100644 (file)
@@ -40,7 +40,7 @@
 #include "constants.h"
 
 #define MAX_RETRIES 3
-#define SR_TIMEOUT (150 * HZ)
+#define SR_TIMEOUT (15 * HZ)
 
 static int sr_init(void);
 static void sr_finish(void);
@@ -152,12 +152,50 @@ static void rw_intr (Scsi_Cmnd * SCpnt)
 {
        int result = SCpnt->result;
        int this_count = SCpnt->this_count;
+       int good_sectors = (result == 0 ? this_count : 0);
+       int block_sectors = 0;
     
 #ifdef DEBUG
        printk("sr.c done: %x %x\n",result, SCpnt->request.bh->b_data);
 #endif
-       if (!result)
-    { /* No error */
+    /*
+      Handle MEDIUM ERRORs or VOLUME OVERFLOWs that indicate partial success.
+      Since this is a relatively rare error condition, no care is taken to
+      avoid unnecessary additional work such as memcpy's that could be avoided.
+    */
+
+       if (driver_byte(result) != 0 &&             /* An error occurred */
+           SCpnt->sense_buffer[0] == 0xF0 &&       /* Sense data is valid */
+           (SCpnt->sense_buffer[2] == MEDIUM_ERROR ||
+            SCpnt->sense_buffer[2] == VOLUME_OVERFLOW))
+         {
+           long error_sector = (SCpnt->sense_buffer[3] << 24) |
+                               (SCpnt->sense_buffer[4] << 16) |
+                               (SCpnt->sense_buffer[5] << 8) |
+                               SCpnt->sense_buffer[6];
+           int device_nr = DEVICE_NR(SCpnt->request.rq_dev);
+           if (SCpnt->request.bh != NULL)
+             block_sectors = SCpnt->request.bh->b_size >> 9;
+           if (block_sectors < 4) block_sectors = 4;
+           if (scsi_CDs[device_nr].sector_size == 2048)
+             error_sector <<= 2;
+           error_sector &= ~ (block_sectors - 1);
+           good_sectors = error_sector - SCpnt->request.sector;
+           if (good_sectors < 0 || good_sectors >= this_count)
+             good_sectors = 0;
+           /*
+             The SCSI specification allows for the value returned by READ
+             CAPACITY to be up to 75 2K sectors past the last readable
+             block.  Therefore, if we hit a medium error within the last
+             75 2K sectors, we decrease the saved size value.
+           */
+           if ((error_sector >> 1) < sr_sizes[device_nr] &&
+               scsi_CDs[device_nr].capacity - error_sector < 4*75)
+             sr_sizes[device_nr] = error_sector >> 1;
+         }
+
+       if (good_sectors > 0)
+    { /* Some sectors were read successfully. */
        if (SCpnt->use_sg == 0) {
                    if (SCpnt->buffer != SCpnt->request.buffer)
            {
@@ -165,20 +203,20 @@ static void rw_intr (Scsi_Cmnd * SCpnt)
                offset = (SCpnt->request.sector % 4) << 9;
                memcpy((char *)SCpnt->request.buffer, 
                       (char *)SCpnt->buffer + offset, 
-                      this_count << 9);
+                      good_sectors << 9);
                /* Even though we are not using scatter-gather, we look
                 * ahead and see if there is a linked request for the
                 * other half of this buffer.  If there is, then satisfy
                 * it. */
-               if((offset == 0) && this_count == 2 &&
-                  SCpnt->request.nr_sectors > this_count && 
+               if((offset == 0) && good_sectors == 2 &&
+                  SCpnt->request.nr_sectors > good_sectors && 
                   SCpnt->request.bh &&
                   SCpnt->request.bh->b_reqnext &&
                   SCpnt->request.bh->b_reqnext->b_size == 1024) {
                    memcpy((char *)SCpnt->request.bh->b_reqnext->b_data, 
                           (char *)SCpnt->buffer + 1024, 
                           1024);
-                   this_count += 2;
+                   good_sectors += 2;
                };
                
                scsi_free(SCpnt->buffer, 2048);
@@ -196,15 +234,15 @@ static void rw_intr (Scsi_Cmnd * SCpnt)
                };
                    };
                    scsi_free(SCpnt->buffer, SCpnt->sglist_len);  /* Free list of scatter-gather pointers */
-                   if(SCpnt->request.sector % 4) this_count -= 2;
+                   if(SCpnt->request.sector % 4) good_sectors -= 2;
            /* See   if there is a padding record at the end that needs to be removed */
-                   if(this_count > SCpnt->request.nr_sectors)
-               this_count -= 2;
+                   if(good_sectors > SCpnt->request.nr_sectors)
+               good_sectors -= 2;
        };
        
 #ifdef DEBUG
                printk("(%x %x %x) ",SCpnt->request.bh, SCpnt->request.nr_sectors, 
-                      this_count);
+                      good_sectors);
 #endif
                if (SCpnt->request.nr_sectors > this_count)
        {        
@@ -214,12 +252,16 @@ static void rw_intr (Scsi_Cmnd * SCpnt)
                      SCpnt->request.sector, this_count);
        }
        
-       SCpnt = end_scsi_request(SCpnt, 1, this_count);  /* All done */
-       requeue_sr_request(SCpnt);
-       return;
-    } /* Normal completion */
+       SCpnt = end_scsi_request(SCpnt, 1, good_sectors);  /* All done */
+       if (result == 0)
+         {
+           requeue_sr_request(SCpnt);
+           return;
+         }
+    }
     
-       /* We only come through here if we have an error of some kind */
+    if (good_sectors == 0) {
+       /* We only come through here if no sectors were read successfully. */
     
     /* Free up any indirection buffers we allocated for DMA purposes. */
        if (SCpnt->use_sg) {
@@ -229,14 +271,16 @@ static void rw_intr (Scsi_Cmnd * SCpnt)
        for(i=0; i<SCpnt->use_sg; i++) {
            if (sgpnt[i].alt_address) {
                scsi_free(sgpnt[i].address, sgpnt[i].length);
-           };
-       };
+           }
+       }
        scsi_free(SCpnt->buffer, SCpnt->sglist_len);  /* Free list of scatter-gather pointers */
        } else {
        if (SCpnt->buffer != SCpnt->request.buffer)
            scsi_free(SCpnt->buffer, SCpnt->bufflen);
-       };
+       }
     
+    }
+
        if (driver_byte(result) != 0) {
                if ((SCpnt->sense_buffer[0] & 0x7f) == 0x70) {
                        if ((SCpnt->sense_buffer[2] & 0xf) == UNIT_ATTENTION) {
@@ -267,13 +311,37 @@ static void rw_intr (Scsi_Cmnd * SCpnt)
                        }
            
                }
-       
+
                if (SCpnt->sense_buffer[2] == NOT_READY) {
-                       printk("CDROM not ready.  Make sure you have a disc in the drive.\n");
+                       printk("CD-ROM not ready.  Make sure you have a disc in the drive.\n");
                        SCpnt = end_scsi_request(SCpnt, 0, this_count);
                        requeue_sr_request(SCpnt); /* Do next request */
                        return;
-               };
+               }
+
+               if (SCpnt->sense_buffer[2] == MEDIUM_ERROR) {
+                   printk("scsi%d: MEDIUM ERROR on "
+                          "channel %d, id %d, lun %d, CDB: ",
+                          SCpnt->host->host_no, (int) SCpnt->channel, 
+                          (int) SCpnt->target, (int) SCpnt->lun);
+                   print_command(SCpnt->cmnd);
+                   print_sense("sr", SCpnt);
+                   SCpnt = end_scsi_request(SCpnt, 0, block_sectors);
+                   requeue_sr_request(SCpnt);
+                   return;
+               }
+
+               if (SCpnt->sense_buffer[2] == VOLUME_OVERFLOW) {
+                   printk("scsi%d: VOLUME OVERFLOW on "
+                          "channel %d, id %d, lun %d, CDB: ",
+                          SCpnt->host->host_no, (int) SCpnt->channel, 
+                          (int) SCpnt->target, (int) SCpnt->lun);
+                   print_command(SCpnt->cmnd);
+                   print_sense("sr", SCpnt);
+                   SCpnt = end_scsi_request(SCpnt, 0, block_sectors);
+                   requeue_sr_request(SCpnt);
+                   return;
+               }
     }
        
        /* We only get this far if we have an error we have not recognized */
@@ -433,7 +501,7 @@ void sr_photocd(struct inode *inode)
        memset(buf,0,40);
        *((unsigned long*)buf)   = 0;
        *((unsigned long*)buf+1) = 12;
-       cmd[0] = 0x1a;
+       cmd[0] = MODE_SENSE;
        cmd[2] = 1;
        cmd[4] = 12;
        rc = kernel_scsi_ioctl(scsi_CDs[MINOR(inode->i_rdev)].device,
@@ -454,7 +522,7 @@ void sr_photocd(struct inode *inode)
            memset(buf,0,40);
            *((unsigned long*)buf)   = 12;  /* sending 12 bytes... */
            *((unsigned long*)buf+1) = 0;
-           cmd[0] = 0x15;
+           cmd[0] = MODE_SELECT;
            cmd[1] = (1 << 4);
            cmd[4] = 12;
            send = &cmd[6];                 /* this is a 6-Byte command    */
@@ -477,10 +545,11 @@ void sr_photocd(struct inode *inode)
 #ifdef DEBUG
        printk(KERN_DEBUG "sr_photocd: use SONY/PIONEER code\n");
 #endif
+       get_sectorsize(MINOR(inode->i_rdev));   /* spinup (avoid timeout) */
        memset(buf,0,40);
        *((unsigned long*)buf)   = 0x0;   /* we send nothing...     */
        *((unsigned long*)buf+1) = 0x0c;  /* and receive 0x0c bytes */
-       cmd[0] = 0x43; /* Read TOC */
+       cmd[0] = READ_TOC;
        cmd[8] = 0x0c;
        cmd[9] = 0x40;
        rc = kernel_scsi_ioctl(scsi_CDs[MINOR(inode->i_rdev)].device,
@@ -488,11 +557,11 @@ void sr_photocd(struct inode *inode)
        
        if (rc != 0) {
             if (rc != 0x28000002) /* drop "not ready" */
-                printk(KERN_WARNING "sr_photocd: ioctl error (SONY): 0x%x\n",rc);
+                printk(KERN_WARNING "sr_photocd: ioctl error (SONY/PIONEER): 0x%x\n",rc);
            break;
        }
        if ((rec[0] << 8) + rec[1] != 0x0a) {
-           printk(KERN_INFO "sr_photocd: (SONY) Hmm, seems the CDROM doesn't support multisession CD's\n");
+           printk(KERN_INFO "sr_photocd: (SONY/PIONEER) Hmm, seems the CDROM doesn't support multisession CD's\n");
            no_multi = 1;
            break;
        }
@@ -523,31 +592,31 @@ void sr_photocd(struct inode *inode)
 
 static int sr_open(struct inode * inode, struct file * filp)
 {
-       if(MINOR(inode->i_rdev) >= sr_template.nr_dev || 
-          !scsi_CDs[MINOR(inode->i_rdev)].device) return -ENXIO;   /* No such device */
-    
-       if (filp->f_mode & 2)  
-           return -EROFS;
-    
+    if(MINOR(inode->i_rdev) >= sr_template.nr_dev || 
+       !scsi_CDs[MINOR(inode->i_rdev)].device) return -ENXIO;   /* No such device */
+
+    if (filp->f_mode & 2)  
+       return -EROFS;
+
     check_disk_change(inode->i_rdev);
     
-       if(!scsi_CDs[MINOR(inode->i_rdev)].device->access_count++)
+    if(!scsi_CDs[MINOR(inode->i_rdev)].device->access_count++)
        sr_ioctl(inode, NULL, SCSI_IOCTL_DOORLOCK, 0);
-       if (scsi_CDs[MINOR(inode->i_rdev)].device->host->hostt->usage_count)
+    if (scsi_CDs[MINOR(inode->i_rdev)].device->host->hostt->usage_count)
        (*scsi_CDs[MINOR(inode->i_rdev)].device->host->hostt->usage_count)++;
-       if(sr_template.usage_count) (*sr_template.usage_count)++;
+    if(sr_template.usage_count) (*sr_template.usage_count)++;
     
-       sr_photocd(inode);
+    sr_photocd(inode);
     
-       /* If this device did not have media in the drive at boot time, then
-        * we would have been unable to get the sector size.  Check to see if
-        * this is the case, and try again.
-        */
-    
-       if(scsi_CDs[MINOR(inode->i_rdev)].needs_sector_size)
+    /* If this device did not have media in the drive at boot time, then
+     * we would have been unable to get the sector size.  Check to see if
+     * this is the case, and try again.
+     */
+
+    if(scsi_CDs[MINOR(inode->i_rdev)].needs_sector_size)
        get_sectorsize(MINOR(inode->i_rdev));
-    
-       return 0;
+
+    return 0;
 }
 
 
@@ -1058,42 +1127,42 @@ static int sr_registered = 0;
 
 static int sr_init()
 {
-       int i;
-    
-       if(sr_template.dev_noticed == 0) return 0;
-    
-       if(!sr_registered) {
+    int i;
+
+    if(sr_template.dev_noticed == 0) return 0;
+
+    if(!sr_registered) {
        if (register_blkdev(MAJOR_NR,"sr",&sr_fops)) {
            printk("Unable to get major %d for SCSI-CD\n",MAJOR_NR);
            return 1;
        }
        sr_registered++;
-       }
-    
-       
-       if (scsi_CDs) return 0;
-       sr_template.dev_max = sr_template.dev_noticed + SR_EXTRA_DEVS;
-       scsi_CDs = (Scsi_CD *) scsi_init_malloc(sr_template.dev_max * sizeof(Scsi_CD), GFP_ATOMIC);
-       memset(scsi_CDs, 0, sr_template.dev_max * sizeof(Scsi_CD));
-    
-       sr_sizes = (int *) scsi_init_malloc(sr_template.dev_max * sizeof(int), GFP_ATOMIC);
-       memset(sr_sizes, 0, sr_template.dev_max * sizeof(int));
+    }
+
     
-       sr_blocksizes = (int *) scsi_init_malloc(sr_template.dev_max * 
-                                            sizeof(int), GFP_ATOMIC);
-       for(i=0;i<sr_template.dev_max;i++) sr_blocksizes[i] = 2048;
-       blksize_size[MAJOR_NR] = sr_blocksizes;
-       return 0;
+    if (scsi_CDs) return 0;
+    sr_template.dev_max = sr_template.dev_noticed + SR_EXTRA_DEVS;
+    scsi_CDs = (Scsi_CD *) scsi_init_malloc(sr_template.dev_max * sizeof(Scsi_CD), GFP_ATOMIC);
+    memset(scsi_CDs, 0, sr_template.dev_max * sizeof(Scsi_CD));
+
+    sr_sizes = (int *) scsi_init_malloc(sr_template.dev_max * sizeof(int), GFP_ATOMIC);
+    memset(sr_sizes, 0, sr_template.dev_max * sizeof(int));
+
+    sr_blocksizes = (int *) scsi_init_malloc(sr_template.dev_max * 
+                                        sizeof(int), GFP_ATOMIC);
+    for(i=0;i<sr_template.dev_max;i++) sr_blocksizes[i] = 2048;
+    blksize_size[MAJOR_NR] = sr_blocksizes;
+    return 0;
 }
 
 void sr_finish()
 {
     int i;
     
-       blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST;
-       blk_size[MAJOR_NR] = sr_sizes;  
-    
-       for (i = 0; i < sr_template.nr_dev; ++i)
+    blk_dev[MAJOR_NR].request_fn = DEVICE_REQUEST;
+    blk_size[MAJOR_NR] = sr_sizes;     
+
+    for (i = 0; i < sr_template.nr_dev; ++i)
     {
        /* If we have already seen this, then skip it.  Comes up
         * with loadable modules. */
@@ -1114,15 +1183,15 @@ void sr_finish()
     }
     
     
-       /* If our host adapter is capable of scatter-gather, then we increase
-        * the read-ahead to 16 blocks (32 sectors).  If not, we use
-        * a two block (4 sector) read ahead. */
-       if(scsi_CDs[0].device && scsi_CDs[0].device->host->sg_tablesize)
+    /* If our host adapter is capable of scatter-gather, then we increase
+     * the read-ahead to 16 blocks (32 sectors).  If not, we use
+     * a two block (4 sector) read ahead. */
+    if(scsi_CDs[0].device && scsi_CDs[0].device->host->sg_tablesize)
        read_ahead[MAJOR_NR] = 32;  /* 32 sector read-ahead.  Always removable. */
-       else
+    else
        read_ahead[MAJOR_NR] = 4;  /* 4 sector read-ahead */
-    
-       return;
+
+    return;
 }      
 
 static void sr_detach(Scsi_Device * SDp)
index 8fa935b905b984b8a4b3b70d58f6498458e2b211..105eedf4f3f2fac6f3fe61f6417a74924d10ed1e 100644 (file)
-bool 'ProAudioSpectrum 16 support' CONFIG_PAS
-bool 'SoundBlaster (SB, SBPro, SB16, clones) support' CONFIG_SB
-bool 'Generic OPL2/OPL3 FM synthesizer support' CONFIG_ADLIB
-bool 'Gravis Ultrasound support' CONFIG_GUS
-bool 'MPU-401 support (NOT for SB16)' CONFIG_MPU401
-bool '6850 UART Midi support' CONFIG_UART6850
-bool 'PSS (ECHO-ADI2111) support' CONFIG_PSS
-bool '16 bit sampling option of GUS (_NOT_ GUS MAX)' CONFIG_GUS16
-bool 'GUS MAX support' CONFIG_GUSMAX
-bool 'Microsoft Sound System support' CONFIG_MSS
-bool 'Ensoniq Soundscape support' CONFIG_SSCAPE
-bool 'MediaTriX AudioTriX Pro support' CONFIG_TRIX
-bool 'Support for MAD16 and/or Mozart based cards' CONFIG_MAD16
-bool 'Support for Crystal CS4232 based (PnP) cards' CONFIG_CS4232
-bool 'Support for Turtle Beach Wave Front (Maui, Tropez) synthesizers' CONFIG_MAUI
-bool '/dev/dsp and /dev/audio support' CONFIG_AUDIO
-bool 'MIDI interface support' CONFIG_MIDI
-bool 'FM synthesizer (YM3812/OPL-3) support' CONFIG_YM3812
-bool 'Support for SM Wave' CONFIG_SMWAVE
-
-if [ "$CONFIG_AEDSP16" = "y" ]; then
-hex 'I/O base for Audio Excel DSP 16 220 or 240' AEDSP16_BASE 220
-fi
-
-if [ "$CONFIG_SB" = "y" ]; then
-hex 'I/O base for SB Check from manual of the card' SBC_BASE 220
-fi
-
-if [ "$CONFIG_SB" = "y" ]; then
-int 'SoundBlaster IRQ Check from manual of the card' SBC_IRQ 7
-fi
-
-if [ "$CONFIG_SB" = "y" ]; then
-int 'SoundBlaster DMA 0, 1 or 3' SBC_DMA 1
-fi
-
-if [ "$CONFIG_SB" = "y" ]; then
-int 'SoundBlaster 16 bit DMA (_REQUIRED_for SB16, Jazz16, SMW) 5, 6 or 7' SB_DMA2 5
-fi
-
-if [ "$CONFIG_SB" = "y" ]; then
-hex 'MPU401 I/O base of SB16, Jazz16 and ES1688 Check from manual of the card' SB_MPU_BASE 0
-fi
-
-if [ "$CONFIG_SB" = "y" ]; then
-int 'SB MPU401 IRQ (Jazz16, SM Wave and ES1688) Check from manual of the card' SB_MPU_IRQ -1
-fi
-
-if [ "$CONFIG_PAS" = "y" ]; then
-int 'PAS16 IRQ 3, 4, 5, 7, 9, 10, 11, 12, 14 or 15' PAS_IRQ 10
-fi
-
-if [ "$CONFIG_PAS" = "y" ]; then
-int 'PAS16 DMA 0, 1, 3, 5, 6 or 7' PAS_DMA 3
-fi
-
-if [ "$CONFIG_GUS" = "y" ]; then
-hex 'I/O base for GUS 210, 220, 230, 240, 250 or 260' GUS_BASE 220
-fi
-
-if [ "$CONFIG_GUS" = "y" ]; then
-int 'GUS IRQ 3, 5, 7, 9, 11, 12 or 15' GUS_IRQ 15
-fi
-
-if [ "$CONFIG_GUS" = "y" ]; then
-int 'GUS DMA 1, 3, 5, 6 or 7' GUS_DMA 6
-fi
-
-if [ "$CONFIG_GUS" = "y" ]; then
-int 'Second DMA channel for GUS 1, 3, 5, 6 or 7' GUS_DMA2 -1
-fi
-
-if [ "$CONFIG_GUS16" = "y" ]; then
-hex 'I/O base for the 16 bit daughtercard of GUS 530, 604, E80 or F40' GUS16_BASE 530
-fi
-
-if [ "$CONFIG_GUS16" = "y" ]; then
-int 'GUS 16 bit daughtercard IRQ 3, 4, 5, 7, or 9' GUS16_IRQ 7
-fi
-
-if [ "$CONFIG_GUS16" = "y" ]; then
-int 'GUS DMA 0, 1 or 3' GUS16_DMA 3
-fi
-
-if [ "$CONFIG_MPU401" = "y" ]; then
-hex 'I/O base for MPU401 Check from manual of the card' MPU_BASE 330
-fi
-
-if [ "$CONFIG_MPU401" = "y" ]; then
-int 'MPU401 IRQ Check from manual of the card' MPU_IRQ 9
-fi
-
-if [ "$CONFIG_MAUI" = "y" ]; then
-hex 'I/O base for Maui 210, 230, 260, 290, 300, 320, 338 or 330' MAUI_BASE 330
-fi
-
-if [ "$CONFIG_MAUI" = "y" ]; then
-int 'Maui IRQ 5, 9, 12 or 15' MAUI_IRQ 9
-fi
-
-if [ "$CONFIG_UART6850" = "y" ]; then
-hex 'I/O base for UART 6850 MIDI port (Unknown)' U6850_BASE 0
-fi
-
-if [ "$CONFIG_UART6850" = "y" ]; then
-int 'UART6850 IRQ (Unknown)' U6850_IRQ -1
-fi
-
-if [ "$CONFIG_PSS" = "y" ]; then
-hex 'PSS I/O base 220 or 240' PSS_BASE 220
-fi
-
-if [ "$CONFIG_PSS" = "y" ]; then
-hex 'PSS audio I/O base 530, 604, E80 or F40' PSS_MSS_BASE 530
-fi
-
-if [ "$CONFIG_PSS" = "y" ]; then
-int 'PSS audio IRQ 7, 9, 10 or 11' PSS_MSS_IRQ 11
-fi
-
-if [ "$CONFIG_PSS" = "y" ]; then
-int 'PSS audio DMA 0, 1 or 3' PSS_MSS_DMA 3
-fi
-
-if [ "$CONFIG_PSS" = "y" ]; then
-hex 'PSS MIDI I/O base ' PSS_MPU_BASE 330
-fi
-
-if [ "$CONFIG_PSS" = "y" ]; then
-int 'PSS MIDI IRQ 3, 4, 5, 7 or 9' PSS_MPU_IRQ 9
-fi
-
-if [ "$CONFIG_MSS" = "y" ]; then
-hex 'MSS/WSS I/O base 530, 604, E80 or F40' MSS_BASE 530
-fi
-
-if [ "$CONFIG_MSS" = "y" ]; then
-int 'MSS/WSS IRQ 7, 9, 10 or 11' MSS_IRQ 11
-fi
-
-if [ "$CONFIG_MSS" = "y" ]; then
-int 'MSS/WSS DMA 0, 1 or 3' MSS_DMA 3
-fi
-
-if [ "$CONFIG_SSCAPE" = "y" ]; then
-hex 'Soundscape MIDI I/O base ' SSCAPE_BASE 330
-fi
-
-if [ "$CONFIG_SSCAPE" = "y" ]; then
-int 'Soundscape MIDI IRQ ' SSCAPE_IRQ 9
-fi
-
-if [ "$CONFIG_SSCAPE" = "y" ]; then
-int 'Soundscape initialization DMA 0, 1 or 3' SSCAPE_DMA 3
-fi
-
-if [ "$CONFIG_SSCAPE" = "y" ]; then
-hex 'Soundscape audio I/O base 534, 608, E84 or F44' SSCAPE_MSS_BASE 534
-fi
-
-if [ "$CONFIG_SSCAPE" = "y" ]; then
-int 'Soundscape audio IRQ 7, 9, 10 or 11' SSCAPE_MSS_IRQ 11
-fi
-
-if [ "$CONFIG_SSCAPE" = "y" ]; then
-int 'Soundscape audio DMA 0, 1 or 3' SSCAPE_MSS_DMA 0
-fi
-
-if [ "$CONFIG_TRIX" = "y" ]; then
-hex 'AudioTriX audio I/O base 530, 604, E80 or F40' TRIX_BASE 530
-fi
-
-if [ "$CONFIG_TRIX" = "y" ]; then
-int 'AudioTriX audio IRQ 7, 9, 10 or 11' TRIX_IRQ 11
-fi
-
-if [ "$CONFIG_TRIX" = "y" ]; then
-int 'AudioTriX audio DMA 0, 1 or 3' TRIX_DMA 0
-fi
-
-if [ "$CONFIG_TRIX" = "y" ]; then
-int 'AudioTriX second (duplex) DMA 0, 1 or 3' TRIX_DMA2 3
-fi
-
-if [ "$CONFIG_TRIX" = "y" ]; then
-hex 'AudioTriX MIDI I/O base 330, 370, 3B0 or 3F0' TRIX_MPU_BASE 330
-fi
-
-if [ "$CONFIG_TRIX" = "y" ]; then
-int 'AudioTriX MIDI IRQ 3, 4, 5, 7 or 9' TRIX_MPU_IRQ 9
-fi
-
-if [ "$CONFIG_TRIX" = "y" ]; then
-hex 'AudioTriX SB I/O base 220, 210, 230, 240, 250, 260 or 270' TRIX_SB_BASE 220
-fi
-
-if [ "$CONFIG_TRIX" = "y" ]; then
-int 'AudioTriX SB IRQ 3, 4, 5 or 7' TRIX_SB_IRQ 7
-fi
-
-if [ "$CONFIG_TRIX" = "y" ]; then
-int 'AudioTriX SB DMA 1 or 3' TRIX_SB_DMA 1
-fi
-
-if [ "$CONFIG_CS4232" = "y" ]; then
-hex 'CS4232 audio I/O base 530, 604, E80 or F40' CS4232_BASE 530
-fi
-
-if [ "$CONFIG_CS4232" = "y" ]; then
-int 'CS4232 audio IRQ 5, 7, 9, 11, 12 or 15' CS4232_IRQ 11
-fi
-
-if [ "$CONFIG_CS4232" = "y" ]; then
-int 'CS4232 audio DMA 0, 1 or 3' CS4232_DMA 0
-fi
-
-if [ "$CONFIG_CS4232" = "y" ]; then
-int 'CS4232 second (duplex) DMA 0, 1 or 3' CS4232_DMA2 3
-fi
-
-if [ "$CONFIG_CS4232" = "y" ]; then
-hex 'CS4232 MIDI I/O base 330, 370, 3B0 or 3F0' CS4232_MPU_BASE 330
-fi
-
-if [ "$CONFIG_CS4232" = "y" ]; then
-int 'CS4232 MIDI IRQ 5, 7, 9, 11, 12 or 15' CS4232_MPU_IRQ 9
-fi
-
-if [ "$CONFIG_MAD16" = "y" ]; then
-hex 'MAD16 audio I/O base 530, 604, E80 or F40' MAD16_BASE 530
-fi
-
-if [ "$CONFIG_MAD16" = "y" ]; then
-int 'MAD16 audio IRQ 7, 9, 10 or 11' MAD16_IRQ 11
-fi
-
-if [ "$CONFIG_MAD16" = "y" ]; then
-int 'MAD16 audio DMA 0, 1 or 3' MAD16_DMA 3
-fi
-
-if [ "$CONFIG_MAD16" = "y" ]; then
-int 'MAD16 second (duplex) DMA 0, 1 or 3' MAD16_DMA2 0
-fi
-
-if [ "$CONFIG_MAD16" = "y" ]; then
-hex 'MAD16 MIDI I/O base 300, 310, 320 or 330 (0 disables)' MAD16_MPU_BASE 330
-fi
-
-if [ "$CONFIG_MAD16" = "y" ]; then
-int 'MAD16 MIDI IRQ 5, 7, 9 or 10' MAD16_MPU_IRQ 9
-fi
-
-if [ "$CONFIG_AUDIO" = "y" ]; then
-int 'Audio DMA buffer size 4096, 16384, 32768 or 65536' DSP_BUFFSIZE 65536
-fi
 #
-$MAKE -C drivers/sound kernelconfig || exit 1
+# Sound driver configuration
+#
+#--------
+# There is another config script which is compatible with rest of
+# the kernel. It can be activated by running 'make mkscript' in this
+# directory. Please note that this is an _experimental_ feature which
+# doesn't work with all cards (PSS, SM Wave, AudioTriX Pro).
+#--------
+#
+$MAKE -C drivers/sound config || exit 1
+
index 278237d4e25e9c7fcd600362d8d90784a5f71db5..aac990efe64ccbbb87dc102b7d8062a97105b923 100644 (file)
@@ -348,7 +348,7 @@ static inline void remove_from_lru_list(struct buffer_head * bh)
 
 static inline void remove_from_free_list(struct buffer_head * bh)
 {
-        int isize = BUFSIZE_INDEX(bh->b_size);
+       int isize = BUFSIZE_INDEX(bh->b_size);
        if (!(bh->b_prev_free) || !(bh->b_next_free))
                panic("VFS: Free block list corrupted");
        if(bh->b_dev != B_FREE)
@@ -369,7 +369,7 @@ static inline void remove_from_free_list(struct buffer_head * bh)
 
 static inline void remove_from_queues(struct buffer_head * bh)
 {
-        if(bh->b_dev == B_FREE) {
+       if(bh->b_dev == B_FREE) {
                remove_from_free_list(bh); /* Free list entries should not be
                                              in the hash queue */
                return;
@@ -410,7 +410,7 @@ static inline void put_last_lru(struct buffer_head * bh)
 
 static inline void put_last_free(struct buffer_head * bh)
 {
-        int isize;
+       int isize;
        if (!bh)
                return;
 
@@ -432,7 +432,7 @@ static inline void put_last_free(struct buffer_head * bh)
 static inline void insert_into_queues(struct buffer_head * bh)
 {
        /* put at end of free list */
-        if(bh->b_dev == B_FREE) {
+       if(bh->b_dev == B_FREE) {
                put_last_free(bh);
                return;
        }
@@ -556,7 +556,7 @@ void refill_freelist(int size)
        struct buffer_head * bh, * tmp;
        struct buffer_head * candidate[NR_LIST];
        unsigned int best_time, winner;
-        int isize = BUFSIZE_INDEX(size);
+       int isize = BUFSIZE_INDEX(size);
        int buffers[NR_LIST];
        int i;
        int needed;
@@ -748,7 +748,7 @@ repeat0:
 struct buffer_head * getblk(kdev_t dev, int block, int size)
 {
        struct buffer_head * bh;
-        int isize = BUFSIZE_INDEX(size);
+       int isize = BUFSIZE_INDEX(size);
 
        /* Update this for the buffer size lav. */
        buffer_usage[isize]++;
@@ -789,7 +789,7 @@ repeat:
 
 void set_writetime(struct buffer_head * buf, int flag)
 {
-        int newtime;
+       int newtime;
 
        if (buffer_dirty(buf)) {
                /* Move buffer to dirty list if jiffies is clear */
@@ -1106,20 +1106,19 @@ static inline void after_unlock_page (struct page * page)
                swap_after_unlock_page(page->swap_unlock_entry);
 }
 
-/* Free all temporary buffers belonging to a page. */
+/*
+ * Free all temporary buffers belonging to a page.
+ * This needs to be called with interrupts disabled.
+ */
 static inline void free_async_buffers (struct buffer_head * bh)
 {
        struct buffer_head * tmp;
-       unsigned long flags;
 
        tmp = bh;
-       save_flags(flags);
-       cli();
        do {
                if (!test_bit(BH_FreeOnIO, &tmp->b_state)) {
                        printk ("Whoops: unlock_buffer: "
                                "async IO mismatch on page.\n");
-                       restore_flags(flags);
                        return;
                }
                tmp->b_next_free = reuse_list;
@@ -1127,7 +1126,6 @@ static inline void free_async_buffers (struct buffer_head * bh)
                clear_bit(BH_FreeOnIO, &tmp->b_state);
                tmp = tmp->b_this_page;
        } while (tmp != bh);
-       restore_flags(flags);
 }
 
 /*
@@ -1171,11 +1169,12 @@ int brw_page(int rw, unsigned long address, kdev_t dev, int b[], int size, int b
                next->b_flushtime = 0;
                set_bit(BH_Uptodate, &next->b_state);
 
-               /* When we use bmap, we define block zero to represent
-                   a hole.  ll_rw_page, however, may legitimately
-                   access block zero, and we need to distinguish the
-                   two cases. 
-                  */
+               /*
+                * When we use bmap, we define block zero to represent
+                * a hole.  ll_rw_page, however, may legitimately
+                * access block zero, and we need to distinguish the
+                * two cases.
+                */
                if (bmap && !block) {
                        memset(next->b_data, 0, size);
                        next->b_count--;
@@ -1211,10 +1210,14 @@ int brw_page(int rw, unsigned long address, kdev_t dev, int b[], int size, int b
                /* The rest of the work is done in mark_buffer_uptodate()
                 * and unlock_buffer(). */
        } else {
+               unsigned long flags;
                clear_bit(PG_locked, &page->flags);
                set_bit(PG_uptodate, &page->flags);
                wake_up(&page->wait);
+               save_flags(flags);
+               cli();
                free_async_buffers(bh);
+               restore_flags(flags);
                after_unlock_page(page);
        }
        ++current->maj_flt;
@@ -1247,44 +1250,67 @@ void mark_buffer_uptodate(struct buffer_head * bh, int on)
  */
 void unlock_buffer(struct buffer_head * bh)
 {
+       unsigned long flags;
        struct buffer_head *tmp;
        struct page *page;
 
-       if (!test_bit(BH_FreeOnIO, &bh->b_state)) {
-               /* This is a normal buffer. */
-               clear_bit(BH_Lock, &bh->b_state);
-               wake_up(&bh->b_wait);
+       clear_bit(BH_Lock, &bh->b_state);
+       wake_up(&bh->b_wait);
+
+       if (!test_bit(BH_FreeOnIO, &bh->b_state))
                return;
-       }
        /* This is a temporary buffer used for page I/O. */
        page = mem_map + MAP_NR(bh->b_data);
-       if (!PageLocked(page)) {
-               printk ("Whoops: unlock_buffer: "
-                       "async io complete on unlocked page\n");
-               return;
-       }
-       if (bh->b_count != 1) {
-               printk ("Whoops: unlock_buffer: b_count != 1 on async io.\n");
-               return;
-       }
-       /* Async buffer_heads are here only as labels for IO, and get
-           thrown away once the IO for this page is complete.  IO is
-           deemed complete once all buffers have been unlocked. */
+       if (!PageLocked(page))
+               goto not_locked;
+       if (bh->b_count != 1)
+               goto bad_count;
+
        if (!test_bit(BH_Uptodate, &bh->b_state))
                set_bit(PG_error, &page->flags);
-       clear_bit(BH_Lock, &bh->b_state);
-       wake_up(&bh->b_wait);
-       for (tmp = bh; tmp=tmp->b_this_page, tmp!=bh; ) {
-               if (test_bit(BH_Lock, &tmp->b_state))
-                       return;
-       }
+
+       /*
+        * Be _very_ careful from here on. Bad things can happen if
+        * two buffer heads end IO at almost the same time and both
+        * decide that the page is now completely done.
+        *
+        * Async buffer_heads are here only as labels for IO, and get
+        * thrown away once the IO for this page is complete.  IO is
+        * deemed complete once all buffers have been visited
+        * (b_count==0) and are now unlocked. We must make sure that
+        * only the _last_ buffer that decrements its count is the one
+        * that free's the page..
+        */
+       save_flags(flags);
+       cli();
+       bh->b_count--;
+       tmp = bh;
+       do {
+               if (tmp->b_count)
+                       goto still_busy;
+               tmp = tmp->b_this_page;
+       } while (tmp != bh);
+
        /* OK, the async IO on this page is complete. */
-       if (!clear_bit(PG_locked, &page->flags))
-               return;
-       wake_up(&page->wait);
        free_async_buffers(bh);
+       restore_flags(flags);
+       clear_bit(PG_locked, &page->flags);
+       wake_up(&page->wait);
        after_unlock_page(page);
        wake_up(&buffer_wait);
+       return;
+
+still_busy:
+       restore_flags(flags);
+       return;
+
+not_locked:
+       printk ("Whoops: unlock_buffer: async io complete on unlocked page\n");
+       return;
+
+bad_count:
+       printk ("Whoops: unlock_buffer: b_count != 1 on async io.\n");
+       return;
 }
 
 /*
diff --git a/include/asm-alpha/alcor.h b/include/asm-alpha/alcor.h
deleted file mode 100644 (file)
index b152c7c..0000000
+++ /dev/null
@@ -1,407 +0,0 @@
-#ifndef __ALPHA_ALCOR__H__
-#define __ALPHA_ALCOR__H__
-
-#include <linux/types.h>
-
-/*
- * ALCOR is the internal name for the 2117x chipset which provides
- * memory controller and PCI access for the 21164 chip based systems.
- *
- * This file is based on:
- *
- * DECchip 21171 Core Logic Chipset 
- * Technical Reference Manual
- *
- * EC-QE18B-TE
- *
- * david.rusling@reo.mts.dec.com Initial Version.
- *
- */
-
-/*------------------------------------------------------------------------**
-**                                                                        **
-**  EB164 I/O procedures                                                   **
-**                                                                        **
-**      inport[b|w|t|l], outport[b|w|t|l] 8:16:24:32 IO xfers             **
-**     inportbxt: 8 bits only                                            **
-**      inport:    alias of inportw                                       **
-**      outport:   alias of outportw                                      **
-**                                                                        **
-**      inmem[b|w|t|l], outmem[b|w|t|l] 8:16:24:32 ISA memory xfers       **
-**     inmembxt: 8 bits only                                             **
-**      inmem:    alias of inmemw                                         **
-**      outmem:   alias of outmemw                                        **
-**                                                                        **
-**------------------------------------------------------------------------*/
-
-
-/* ALCOR ADDRESS BIT DEFINITIONS
- *
- *  3 3 3 3|3 3 3 3|3 3 2 2|2 2 2 2|2 2 2 2|1 1 1 1|1 1 1 1|1 1 
- *  9 8 7 6|5 4 3 2|1 0 9 8|7 6 5 4|3 2 1 0|9 8 7 6|5 4 3 2|1 0 9 8|7 6 5 4|3 2 1 0
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- * |1| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |0|0|0|
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
- *  |                                                                        \_/ \_/
- *  |                                                                         |   |
- *  +-- IO space, not cached.                                   Byte Enable --+   |
- *                                                              Transfer Length --+
- *
- *
- *
- *   Byte      Transfer
- *   Enable    Length    Transfer  Byte    Address
- *   adr<6:5>  adr<4:3>  Length    Enable  Adder
- *   ---------------------------------------------
- *      00        00      Byte      1110   0x000
- *      01        00      Byte      1101   0x020
- *      10        00      Byte      1011   0x040
- *      11        00      Byte      0111   0x060
- *
- *      00        01      Word      1100   0x008
- *      01        01      Word      1001   0x028 <= Not supported in this code.
- *      10        01      Word      0011   0x048
- *
- *      00        10      Tribyte   1000   0x010
- *      01        10      Tribyte   0001   0x030
- *
- *      10        11      Longword  0000   0x058
- *
- *      Note that byte enables are asserted low.
- *
- */
-
-#define BYTE_ENABLE_SHIFT 5
-#define TRANSFER_LENGTH_SHIFT 3
-#define MEM_SP1_MASK 0x1fffffff  /* Mem sparse space 1 mask is 29 bits */
-
-
-#define ALCOR_DMA_WIN_BASE     (1024UL*1024UL*1024UL)
-#define ALCOR_DMA_WIN_SIZE     (1024*1024*1024)
-
-/*
- * 21171-CA Control and Status Registers (p4-1)
- */
-#define ALCOR_IOC_CIA_REV               (IDENT_ADDR + 0x8740000080UL)
-#define ALCOR_IOC_PCI_LAT               (IDENT_ADDR + 0x87400000C0UL)
-#define ALCOR_IOC_CIA_CTRL              (IDENT_ADDR + 0x8740000100UL)
-#define ALCOR_IOC_HAE_MEM               (IDENT_ADDR + 0x8740000400UL)
-#define ALCOR_IOC_HAE_IO                (IDENT_ADDR + 0x8740000440UL)
-#define ALCOR_IOC_CFG                   (IDENT_ADDR + 0x8740000480UL)
-#define ALCOR_IOC_CACK_EN               (IDENT_ADDR + 0x8740000600UL)
-
-/*
- * 21171-CA Diagnostic Registers (p4-2)
- */
-#define ALCOR_IOC_CIA_DIAG              (IDENT_ADDR + 0x8740002000UL)
-#define ALCOR_IOC_DIAG_CHECK            (IDENT_ADDR + 0x8740003000UL)
-
-/*
- * 21171-CA Performance Monitor registers (p4-3)
- */
-#define ALCOR_IOC_PERF_MONITOR          (IDENT_ADDR + 0x8740004000UL)
-#define ALCOR_IOC_PERF_CONTROL          (IDENT_ADDR + 0x8740004040UL)
-
-/*
- * 21171-CA Error registers (p4-3)
- */
-#define ALCOR_IOC_CPU_ERR0              (IDENT_ADDR + 0x8740008000UL)
-#define ALCOR_IOC_CPU_ERR1              (IDENT_ADDR + 0x8740008040UL)
-#define ALCOR_IOC_CIA_ERR               (IDENT_ADDR + 0x8740008200UL)
-#define ALCOR_IOC_CIA_STAT              (IDENT_ADDR + 0x8740008240UL)
-#define ALCOR_IOC_ERR_MASK              (IDENT_ADDR + 0x8740008280UL)
-#define ALCOR_IOC_CIA_SYN               (IDENT_ADDR + 0x8740008300UL)
-#define ALCOR_IOC_MEM_ERR0              (IDENT_ADDR + 0x8740008400UL)
-#define ALCOR_IOC_MEM_ERR1              (IDENT_ADDR + 0x8740008440UL)
-#define ALCOR_IOC_PCI_ERR0              (IDENT_ADDR + 0x8740008800UL)
-#define ALCOR_IOC_PCI_ERR1              (IDENT_ADDR + 0x8740008840UL)
-#define ALCOR_IOC_PCI_ERR3              (IDENT_ADDR + 0x8740008880UL)
-
-/*
- * 2117A-CA PCI Address Translation Registers.   I've only defined
- * the first window fully as that's the only one that we're currently using.
- * The other window bases are needed to disable the windows.
- */
-#define ALCOR_IOC_PCI_TBIA              (IDENT_ADDR + 0x8760000100UL)
-#define ALCOR_IOC_PCI_W0_BASE           (IDENT_ADDR + 0x8760000400UL)
-#define ALCOR_IOC_PCI_W0_MASK           (IDENT_ADDR + 0x8760000440UL)
-#define ALCOR_IOC_PCI_T0_BASE           (IDENT_ADDR + 0x8760000480UL)
-
-#define ALCOR_IOC_PCI_W1_BASE           (IDENT_ADDR + 0x8760000500UL)
-#define ALCOR_IOC_PCI_W2_BASE           (IDENT_ADDR + 0x8760000600UL)
-#define ALCOR_IOC_PCI_W3_BASE           (IDENT_ADDR + 0x8760000700UL)
-
-/*
- * 21171-CA System configuration registers (p4-3)
- */
-#define ALCOR_IOC_MCR                   (IDENT_ADDR + 0x8750000000UL)
-#define ALCOR_IOC_MBA0                  (IDENT_ADDR + 0x8750000600UL)
-#define ALCOR_IOC_MBA2                  (IDENT_ADDR + 0x8750000680UL)
-#define ALCOR_IOC_MBA4                  (IDENT_ADDR + 0x8750000700UL)
-#define ALCOR_IOC_MBA6                  (IDENT_ADDR + 0x8750000780UL)
-#define ALCOR_IOC_MBA8                  (IDENT_ADDR + 0x8750000800UL)
-#define ALCOR_IOC_MBAA                  (IDENT_ADDR + 0x8750000880UL)
-#define ALCOR_IOC_MBAC                  (IDENT_ADDR + 0x8750000900UL)
-#define ALCOR_IOC_MBAE                  (IDENT_ADDR + 0x8750000980UL)
-#define ALCOR_IOC_TMG0                  (IDENT_ADDR + 0x8750000B00UL)
-#define ALCOR_IOC_TMG1                  (IDENT_ADDR + 0x8750000B40UL)
-#define ALCOR_IOC_TMG2                  (IDENT_ADDR + 0x8750000B80UL)
-
-/*
- * Memory spaces:
- */
-#define ALCOR_IACK_SC                  (IDENT_ADDR + 0x8720000000UL)
-#define ALCOR_CONF                     (IDENT_ADDR + 0x8700000000UL)
-#define ALCOR_IO                       (IDENT_ADDR + 0x8580000000UL)
-#define ALCOR_SPARSE_MEM               (IDENT_ADDR + 0x8000000000UL)
-#define ALCOR_DENSE_MEM                        (IDENT_ADDR + 0x8600000000UL)
-
-/*
- * Bit definitions for I/O Controller status register 0:
- */
-#define ALCOR_IOC_STAT0_CMD            0xf
-#define ALCOR_IOC_STAT0_ERR            (1<<4)
-#define ALCOR_IOC_STAT0_LOST           (1<<5)
-#define ALCOR_IOC_STAT0_THIT           (1<<6)
-#define ALCOR_IOC_STAT0_TREF           (1<<7)
-#define ALCOR_IOC_STAT0_CODE_SHIFT     8
-#define ALCOR_IOC_STAT0_CODE_MASK      0x7
-#define ALCOR_IOC_STAT0_P_NBR_SHIFT    13
-#define ALCOR_IOC_STAT0_P_NBR_MASK     0x7ffff
-
-#define HAE_ADDRESS                    ALCOR_IOC_HAE_MEM
-
-#ifdef __KERNEL__
-
-/*
- * Translate physical memory address as seen on (PCI) bus into
- * a kernel virtual address and vv.
- */
-extern inline unsigned long virt_to_bus(void * address)
-{
-       return virt_to_phys(address) + ALCOR_DMA_WIN_BASE;
-}
-
-extern inline void * bus_to_virt(unsigned long address)
-{
-       return phys_to_virt(address - ALCOR_DMA_WIN_BASE);
-}
-
-/*
- * I/O functions:
- *
- * Alcor (the 2117x PCI/memory support chipset for the EV5 (21164)
- * series of processors uses a sparse address mapping scheme to
- * get at PCI memory and I/O.
- */
-
-#define vuip   volatile unsigned int *
-
-extern inline unsigned int __inb(unsigned long addr)
-{
-       long result = *(vuip) ((addr << 5) + ALCOR_IO + 0x00);
-       result >>= (addr & 3) * 8;
-       return 0xffUL & result;
-}
-
-extern inline void __outb(unsigned char b, unsigned long addr)
-{
-       unsigned int w;
-
-       asm ("insbl %2,%1,%0" : "r="(w) : "ri"(addr & 0x3), "r"(b));
-       *(vuip) ((addr << 5) + ALCOR_IO + 0x00) = w;
-       mb();
-}
-
-extern inline unsigned int __inw(unsigned long addr)
-{
-       long result = *(vuip) ((addr << 5) + ALCOR_IO + 0x08);
-       result >>= (addr & 3) * 8;
-       return 0xffffUL & result;
-}
-
-extern inline void __outw(unsigned short b, unsigned long addr)
-{
-       unsigned int w;
-
-       asm ("inswl %2,%1,%0" : "r="(w) : "ri"(addr & 0x3), "r"(b));
-       *(vuip) ((addr << 5) + ALCOR_IO + 0x08) = w;
-       mb();
-}
-
-extern inline unsigned int __inl(unsigned long addr)
-{
-       return *(vuip) ((addr << 5) + ALCOR_IO + 0x18);
-}
-
-extern inline void __outl(unsigned int b, unsigned long addr)
-{
-       *(vuip) ((addr << 5) + ALCOR_IO + 0x18) = b;
-       mb();
-}
-
-
-/*
- * Memory functions.  64-bit and 32-bit accesses are done through
- * dense memory space, everything else through sparse space.
- * 
- * For reading and writing 8 and 16 bit quantities we need to 
- * go through one of the three sparse address mapping regions
- * and use the HAE_MEM CSR to provide some bits of the address.
- * The following few routines use only sparse address region 1
- * which gives 1Gbyte of accessible space which relates exactly
- * to the amount of PCI memory mapping *into* system address space.
- * See p 6-17 of the specification but it looks something like this:
- *
- * 21164 Address:
- * 
- *          3         2         1                                                               
- * 9876543210987654321098765432109876543210
- * 1ZZZZ0.PCI.QW.Address............BBLL                 
- *
- * ZZ = SBZ
- * BB = Byte offset
- * LL = Transfer length
- *
- * PCI Address:
- *
- * 3         2         1                                                               
- * 10987654321098765432109876543210
- * HHH....PCI.QW.Address........ 00
- *
- * HHH = 31:29 HAE_MEM CSR
- * 
- */
-
-extern inline unsigned long __readb(unsigned long addr)
-{
-       unsigned long result, shift, msb;
-
-       shift = (addr & 0x3) * 8 ;
-       msb = addr & 0xE0000000 ;
-       addr &= MEM_SP1_MASK ;
-       if (msb != hae.cache) {
-         set_hae(msb);
-       }
-       result = *(vuip) ((addr << 5) + ALCOR_SPARSE_MEM + 0x00) ;
-       result >>= shift;
-       return 0xffUL & result;
-}
-
-extern inline unsigned long __readw(unsigned long addr)
-{
-       unsigned long result, shift, msb;
-
-       shift = (addr & 0x3) * 8;
-       msb = addr & 0xE0000000 ;
-       addr &= MEM_SP1_MASK ;
-       if (msb != hae.cache) {
-         set_hae(msb);
-       }
-       result = *(vuip) ((addr << 5) + ALCOR_SPARSE_MEM + 0x08);
-       result >>= shift;
-       return 0xffffUL & result;
-}
-
-extern inline unsigned long __readl(unsigned long addr)
-{
-       return *(vuip) (addr + ALCOR_DENSE_MEM);
-}
-
-extern inline void __writeb(unsigned char b, unsigned long addr)
-{
-        unsigned long msb ; 
-
-       msb = addr & 0xE0000000 ;
-       addr &= MEM_SP1_MASK ;
-       if (msb != hae.cache) {
-         set_hae(msb);
-       }
-       *(vuip) ((addr << 5) + ALCOR_SPARSE_MEM + 0x00) = b * 0x01010101;
-}
-
-extern inline void __writew(unsigned short b, unsigned long addr)
-{
-        unsigned long msb ; 
-
-       msb = addr & 0xE0000000 ;
-       addr &= MEM_SP1_MASK ;
-       if (msb != hae.cache) {
-         set_hae(msb);
-       }
-       *(vuip) ((addr << 5) + ALCOR_SPARSE_MEM + 0x08) = b * 0x00010001;
-}
-
-extern inline void __writel(unsigned int b, unsigned long addr)
-{
-       *(vuip) (addr + ALCOR_DENSE_MEM) = b;
-}
-
-#define inb(port) \
-(__builtin_constant_p((port))?__inb(port):_inb(port))
-
-#define outb(x, port) \
-(__builtin_constant_p((port))?__outb((x),(port)):_outb((x),(port)))
-
-#define readl(a)       __readl((unsigned long)(a))
-#define writel(v,a)    __writel((v),(unsigned long)(a))
-
-#undef vuip
-
-extern unsigned long alcor_init (unsigned long mem_start,
-                                unsigned long mem_end);
-
-#endif /* __KERNEL__ */
-
-/*
- * Data structure for handling ALCOR machine checks:
- */
-struct el_ALCOR_sysdata_mcheck {
-    u_long      coma_gcr;                       
-    u_long      coma_edsr;                      
-    u_long      coma_ter;                       
-    u_long      coma_elar;                      
-    u_long      coma_ehar;                      
-    u_long      coma_ldlr;                      
-    u_long      coma_ldhr;                      
-    u_long      coma_base0;                     
-    u_long      coma_base1;                     
-    u_long      coma_base2;                     
-    u_long      coma_cnfg0;                     
-    u_long      coma_cnfg1;                     
-    u_long      coma_cnfg2;                     
-    u_long      epic_dcsr;                      
-    u_long      epic_pear;                      
-    u_long      epic_sear;                      
-    u_long      epic_tbr1;                      
-    u_long      epic_tbr2;                      
-    u_long      epic_pbr1;                      
-    u_long      epic_pbr2;                      
-    u_long      epic_pmr1;                      
-    u_long      epic_pmr2;                      
-    u_long      epic_harx1;                     
-    u_long      epic_harx2;                     
-    u_long      epic_pmlt;                      
-    u_long      epic_tag0;                      
-    u_long      epic_tag1;                      
-    u_long      epic_tag2;                      
-    u_long      epic_tag3;                      
-    u_long      epic_tag4;                      
-    u_long      epic_tag5;                      
-    u_long      epic_tag6;                      
-    u_long      epic_tag7;                      
-    u_long      epic_data0;                     
-    u_long      epic_data1;                     
-    u_long      epic_data2;                     
-    u_long      epic_data3;                     
-    u_long      epic_data4;                     
-    u_long      epic_data5;                     
-    u_long      epic_data6;                     
-    u_long      epic_data7;                     
-};
-
-#define RTC_PORT(x)    (0x70 + (x))
-#define RTC_ADDR(x)    (0x80 | (x))
-#define RTC_ALWAYS_BCD 0
-
-#endif /* __ALPHA_ALCOR__H__ */
index d9af3376ea891dcfdeccada5ce3e570c62cd2dce..ca30123206a3caf4fca3fea0bd13f1b5dcc83f7a 100644 (file)
    Yes, this does map 0 to 64Mb-1 twice, but only window 1 will actually
    be used for that range (via virt_to_bus()).
 
+   Note that we actually fudge the window 1 maximum as 48Mb instead of 64Mb,
+   to keep virt_to_bus() from returning an address in the first window, for
+   a data area that goes beyond the 64Mb first DMA window.  Sigh...
+   The fudge factor MUST match with <asm/dma.h> MAX_DMA_ADDRESS, but
+   we can't just use that here, because of header file looping... :-(
+
    Window 1 will be used for all DMA from the ISA bus; yes, that does
    limit what memory an ISA floppy or soundcard or Ethernet can touch, but
    it's also a known limitation on other platforms as well. We use the
    however, that an XL kernel will run on an AVANTI without problems.
 
 */
-#define APECS_XL_DMA_WIN1_BASE (64*1024*1024)
-#define APECS_XL_DMA_WIN1_SIZE (64*1024*1024)
-#define APECS_XL_DMA_WIN2_BASE (512*1024*1024)
-#define APECS_XL_DMA_WIN2_SIZE (512*1024*1024)
+#define APECS_XL_DMA_WIN1_BASE         (64*1024*1024)
+#define APECS_XL_DMA_WIN1_SIZE         (64*1024*1024)
+#define APECS_XL_DMA_WIN1_SIZE_PARANOID        (48*1024*1024)
+#define APECS_XL_DMA_WIN2_BASE         (512*1024*1024)
+#define APECS_XL_DMA_WIN2_SIZE         (512*1024*1024)
 
 #else /* CONFIG_ALPHA_XL */
 
  * Translate physical memory address as seen on (PCI) bus into
  * a kernel virtual address and vv.
  */
+/* NOTE: we fudge the window 1 maximum as 48Mb instead of 64Mb, to prevent 
+   virt_to_bus() from returning an address in the first window, for a
+   data area that goes beyond the 64Mb first DMA window. Sigh...
+   This MUST match with <asm/dma.h> MAX_DMA_ADDRESS for consistency, but
+   we can't just use that here, because of header file looping... :-(
+*/
 extern inline unsigned long virt_to_bus(void * address)
 {
        unsigned long paddr = virt_to_phys(address);
 #ifdef CONFIG_ALPHA_XL
-       if (paddr < APECS_XL_DMA_WIN1_SIZE)
+       if (paddr < APECS_XL_DMA_WIN1_SIZE_PARANOID)
          return paddr + APECS_XL_DMA_WIN1_BASE;
        else
          return paddr + APECS_XL_DMA_WIN2_BASE; /* win 2 xlates to 0 also */
diff --git a/include/asm-alpha/cia.h b/include/asm-alpha/cia.h
new file mode 100644 (file)
index 0000000..e3cc79c
--- /dev/null
@@ -0,0 +1,421 @@
+#ifndef __ALPHA_CIA__H__
+#define __ALPHA_CIA__H__
+
+#include <linux/types.h>
+
+/*
+ * CIA is the internal name for the 2117x chipset which provides
+ * memory controller and PCI access for the 21164 chip based systems.
+ *
+ * This file is based on:
+ *
+ * DECchip 21171 Core Logic Chipset 
+ * Technical Reference Manual
+ *
+ * EC-QE18B-TE
+ *
+ * david.rusling@reo.mts.dec.com Initial Version.
+ *
+ */
+
+/*------------------------------------------------------------------------**
+**                                                                        **
+**  EB164 I/O procedures                                                   **
+**                                                                        **
+**      inport[b|w|t|l], outport[b|w|t|l] 8:16:24:32 IO xfers             **
+**     inportbxt: 8 bits only                                            **
+**      inport:    alias of inportw                                       **
+**      outport:   alias of outportw                                      **
+**                                                                        **
+**      inmem[b|w|t|l], outmem[b|w|t|l] 8:16:24:32 ISA memory xfers       **
+**     inmembxt: 8 bits only                                             **
+**      inmem:    alias of inmemw                                         **
+**      outmem:   alias of outmemw                                        **
+**                                                                        **
+**------------------------------------------------------------------------*/
+
+
+/* CIA ADDRESS BIT DEFINITIONS
+ *
+ *  3 3 3 3|3 3 3 3|3 3 2 2|2 2 2 2|2 2 2 2|1 1 1 1|1 1 1 1|1 1 
+ *  9 8 7 6|5 4 3 2|1 0 9 8|7 6 5 4|3 2 1 0|9 8 7 6|5 4 3 2|1 0 9 8|7 6 5 4|3 2 1 0
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * |1| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |0|0|0|
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
+ *  |                                                                        \_/ \_/
+ *  |                                                                         |   |
+ *  +-- IO space, not cached.                                   Byte Enable --+   |
+ *                                                              Transfer Length --+
+ *
+ *
+ *
+ *   Byte      Transfer
+ *   Enable    Length    Transfer  Byte    Address
+ *   adr<6:5>  adr<4:3>  Length    Enable  Adder
+ *   ---------------------------------------------
+ *      00        00      Byte      1110   0x000
+ *      01        00      Byte      1101   0x020
+ *      10        00      Byte      1011   0x040
+ *      11        00      Byte      0111   0x060
+ *
+ *      00        01      Word      1100   0x008
+ *      01        01      Word      1001   0x028 <= Not supported in this code.
+ *      10        01      Word      0011   0x048
+ *
+ *      00        10      Tribyte   1000   0x010
+ *      01        10      Tribyte   0001   0x030
+ *
+ *      10        11      Longword  0000   0x058
+ *
+ *      Note that byte enables are asserted low.
+ *
+ */
+
+#define BYTE_ENABLE_SHIFT 5
+#define TRANSFER_LENGTH_SHIFT 3
+#define MEM_SP1_MASK 0x1fffffff  /* Mem sparse space 1 mask is 29 bits */
+
+
+#define CIA_DMA_WIN_BASE       (1024UL*1024UL*1024UL)
+#define CIA_DMA_WIN_SIZE       (1024*1024*1024)
+
+/*
+ * 21171-CA Control and Status Registers (p4-1)
+ */
+#define CIA_IOC_CIA_REV               (IDENT_ADDR + 0x8740000080UL)
+#define CIA_IOC_PCI_LAT               (IDENT_ADDR + 0x87400000C0UL)
+#define CIA_IOC_CIA_CTRL              (IDENT_ADDR + 0x8740000100UL)
+#define CIA_IOC_HAE_MEM               (IDENT_ADDR + 0x8740000400UL)
+#define CIA_IOC_HAE_IO                (IDENT_ADDR + 0x8740000440UL)
+#define CIA_IOC_CFG                   (IDENT_ADDR + 0x8740000480UL)
+#define CIA_IOC_CACK_EN               (IDENT_ADDR + 0x8740000600UL)
+
+/*
+ * 21171-CA Diagnostic Registers (p4-2)
+ */
+#define CIA_IOC_CIA_DIAG              (IDENT_ADDR + 0x8740002000UL)
+#define CIA_IOC_DIAG_CHECK            (IDENT_ADDR + 0x8740003000UL)
+
+/*
+ * 21171-CA Performance Monitor registers (p4-3)
+ */
+#define CIA_IOC_PERF_MONITOR          (IDENT_ADDR + 0x8740004000UL)
+#define CIA_IOC_PERF_CONTROL          (IDENT_ADDR + 0x8740004040UL)
+
+/*
+ * 21171-CA Error registers (p4-3)
+ */
+#define CIA_IOC_CPU_ERR0              (IDENT_ADDR + 0x8740008000UL)
+#define CIA_IOC_CPU_ERR1              (IDENT_ADDR + 0x8740008040UL)
+#define CIA_IOC_CIA_ERR               (IDENT_ADDR + 0x8740008200UL)
+#define CIA_IOC_CIA_STAT              (IDENT_ADDR + 0x8740008240UL)
+#define CIA_IOC_ERR_MASK              (IDENT_ADDR + 0x8740008280UL)
+#define CIA_IOC_CIA_SYN               (IDENT_ADDR + 0x8740008300UL)
+#define CIA_IOC_MEM_ERR0              (IDENT_ADDR + 0x8740008400UL)
+#define CIA_IOC_MEM_ERR1              (IDENT_ADDR + 0x8740008440UL)
+#define CIA_IOC_PCI_ERR0              (IDENT_ADDR + 0x8740008800UL)
+#define CIA_IOC_PCI_ERR1              (IDENT_ADDR + 0x8740008840UL)
+#define CIA_IOC_PCI_ERR3              (IDENT_ADDR + 0x8740008880UL)
+
+/*
+ * 2117A-CA PCI Address Translation Registers.   I've only defined
+ * the first window fully as that's the only one that we're currently using.
+ * The other window bases are needed to disable the windows.
+ */
+#define CIA_IOC_PCI_TBIA              (IDENT_ADDR + 0x8760000100UL)
+#define CIA_IOC_PCI_W0_BASE           (IDENT_ADDR + 0x8760000400UL)
+#define CIA_IOC_PCI_W0_MASK           (IDENT_ADDR + 0x8760000440UL)
+#define CIA_IOC_PCI_T0_BASE           (IDENT_ADDR + 0x8760000480UL)
+
+#define CIA_IOC_PCI_W1_BASE           (IDENT_ADDR + 0x8760000500UL)
+#define CIA_IOC_PCI_W2_BASE           (IDENT_ADDR + 0x8760000600UL)
+#define CIA_IOC_PCI_W3_BASE           (IDENT_ADDR + 0x8760000700UL)
+
+/*
+ * 21171-CA System configuration registers (p4-3)
+ */
+#define CIA_IOC_MCR                   (IDENT_ADDR + 0x8750000000UL)
+#define CIA_IOC_MBA0                  (IDENT_ADDR + 0x8750000600UL)
+#define CIA_IOC_MBA2                  (IDENT_ADDR + 0x8750000680UL)
+#define CIA_IOC_MBA4                  (IDENT_ADDR + 0x8750000700UL)
+#define CIA_IOC_MBA6                  (IDENT_ADDR + 0x8750000780UL)
+#define CIA_IOC_MBA8                  (IDENT_ADDR + 0x8750000800UL)
+#define CIA_IOC_MBAA                  (IDENT_ADDR + 0x8750000880UL)
+#define CIA_IOC_MBAC                  (IDENT_ADDR + 0x8750000900UL)
+#define CIA_IOC_MBAE                  (IDENT_ADDR + 0x8750000980UL)
+#define CIA_IOC_TMG0                  (IDENT_ADDR + 0x8750000B00UL)
+#define CIA_IOC_TMG1                  (IDENT_ADDR + 0x8750000B40UL)
+#define CIA_IOC_TMG2                  (IDENT_ADDR + 0x8750000B80UL)
+
+/*
+ * Memory spaces:
+ */
+#define CIA_IACK_SC                    (IDENT_ADDR + 0x8720000000UL)
+#define CIA_CONF                       (IDENT_ADDR + 0x8700000000UL)
+#define CIA_IO                         (IDENT_ADDR + 0x8580000000UL)
+#define CIA_SPARSE_MEM                 (IDENT_ADDR + 0x8000000000UL)
+#define CIA_DENSE_MEM                  (IDENT_ADDR + 0x8600000000UL)
+
+/*
+ * ALCOR's GRU ASIC registers
+ */
+#define GRU_INT_REQ                    (IDENT_ADDR + 0x8780000000UL)
+#define GRU_INT_MASK                   (IDENT_ADDR + 0x8780000040UL)
+#define GRU_INT_EDGE                   (IDENT_ADDR + 0x8780000080UL)
+#define GRU_INT_HILO                   (IDENT_ADDR + 0x87800000C0UL)
+#define GRU_INT_CLEAR                  (IDENT_ADDR + 0x8780000100UL)
+
+#define GRU_CACHE_CNFG                 (IDENT_ADDR + 0x8780000200UL)
+#define GRU_SCR                                (IDENT_ADDR + 0x8780000300UL)
+#define GRU_LED                                (IDENT_ADDR + 0x8780000800UL)
+#define GRU_RESET                      (IDENT_ADDR + 0x8780000900UL)
+
+/*
+ * Bit definitions for I/O Controller status register 0:
+ */
+#define CIA_IOC_STAT0_CMD              0xf
+#define CIA_IOC_STAT0_ERR              (1<<4)
+#define CIA_IOC_STAT0_LOST             (1<<5)
+#define CIA_IOC_STAT0_THIT             (1<<6)
+#define CIA_IOC_STAT0_TREF             (1<<7)
+#define CIA_IOC_STAT0_CODE_SHIFT       8
+#define CIA_IOC_STAT0_CODE_MASK                0x7
+#define CIA_IOC_STAT0_P_NBR_SHIFT      13
+#define CIA_IOC_STAT0_P_NBR_MASK       0x7ffff
+
+#define HAE_ADDRESS                    CIA_IOC_HAE_MEM
+
+#ifdef __KERNEL__
+
+/*
+ * Translate physical memory address as seen on (PCI) bus into
+ * a kernel virtual address and vv.
+ */
+extern inline unsigned long virt_to_bus(void * address)
+{
+       return virt_to_phys(address) + CIA_DMA_WIN_BASE;
+}
+
+extern inline void * bus_to_virt(unsigned long address)
+{
+       return phys_to_virt(address - CIA_DMA_WIN_BASE);
+}
+
+/*
+ * I/O functions:
+ *
+ * CIA (the 2117x PCI/memory support chipset for the EV5 (21164)
+ * series of processors uses a sparse address mapping scheme to
+ * get at PCI memory and I/O.
+ */
+
+#define vuip   volatile unsigned int *
+
+extern inline unsigned int __inb(unsigned long addr)
+{
+       long result = *(vuip) ((addr << 5) + CIA_IO + 0x00);
+       result >>= (addr & 3) * 8;
+       return 0xffUL & result;
+}
+
+extern inline void __outb(unsigned char b, unsigned long addr)
+{
+       unsigned int w;
+
+       asm ("insbl %2,%1,%0" : "r="(w) : "ri"(addr & 0x3), "r"(b));
+       *(vuip) ((addr << 5) + CIA_IO + 0x00) = w;
+       mb();
+}
+
+extern inline unsigned int __inw(unsigned long addr)
+{
+       long result = *(vuip) ((addr << 5) + CIA_IO + 0x08);
+       result >>= (addr & 3) * 8;
+       return 0xffffUL & result;
+}
+
+extern inline void __outw(unsigned short b, unsigned long addr)
+{
+       unsigned int w;
+
+       asm ("inswl %2,%1,%0" : "r="(w) : "ri"(addr & 0x3), "r"(b));
+       *(vuip) ((addr << 5) + CIA_IO + 0x08) = w;
+       mb();
+}
+
+extern inline unsigned int __inl(unsigned long addr)
+{
+       return *(vuip) ((addr << 5) + CIA_IO + 0x18);
+}
+
+extern inline void __outl(unsigned int b, unsigned long addr)
+{
+       *(vuip) ((addr << 5) + CIA_IO + 0x18) = b;
+       mb();
+}
+
+
+/*
+ * Memory functions.  64-bit and 32-bit accesses are done through
+ * dense memory space, everything else through sparse space.
+ * 
+ * For reading and writing 8 and 16 bit quantities we need to 
+ * go through one of the three sparse address mapping regions
+ * and use the HAE_MEM CSR to provide some bits of the address.
+ * The following few routines use only sparse address region 1
+ * which gives 1Gbyte of accessible space which relates exactly
+ * to the amount of PCI memory mapping *into* system address space.
+ * See p 6-17 of the specification but it looks something like this:
+ *
+ * 21164 Address:
+ * 
+ *          3         2         1                                                               
+ * 9876543210987654321098765432109876543210
+ * 1ZZZZ0.PCI.QW.Address............BBLL                 
+ *
+ * ZZ = SBZ
+ * BB = Byte offset
+ * LL = Transfer length
+ *
+ * PCI Address:
+ *
+ * 3         2         1                                                               
+ * 10987654321098765432109876543210
+ * HHH....PCI.QW.Address........ 00
+ *
+ * HHH = 31:29 HAE_MEM CSR
+ * 
+ */
+
+extern inline unsigned long __readb(unsigned long addr)
+{
+       unsigned long result, shift, msb;
+
+       shift = (addr & 0x3) * 8 ;
+       msb = addr & 0xE0000000 ;
+       addr &= MEM_SP1_MASK ;
+       if (msb != hae.cache) {
+         set_hae(msb);
+       }
+       result = *(vuip) ((addr << 5) + CIA_SPARSE_MEM + 0x00) ;
+       result >>= shift;
+       return 0xffUL & result;
+}
+
+extern inline unsigned long __readw(unsigned long addr)
+{
+       unsigned long result, shift, msb;
+
+       shift = (addr & 0x3) * 8;
+       msb = addr & 0xE0000000 ;
+       addr &= MEM_SP1_MASK ;
+       if (msb != hae.cache) {
+         set_hae(msb);
+       }
+       result = *(vuip) ((addr << 5) + CIA_SPARSE_MEM + 0x08);
+       result >>= shift;
+       return 0xffffUL & result;
+}
+
+extern inline unsigned long __readl(unsigned long addr)
+{
+       return *(vuip) (addr + CIA_DENSE_MEM);
+}
+
+extern inline void __writeb(unsigned char b, unsigned long addr)
+{
+        unsigned long msb ; 
+
+       msb = addr & 0xE0000000 ;
+       addr &= MEM_SP1_MASK ;
+       if (msb != hae.cache) {
+         set_hae(msb);
+       }
+       *(vuip) ((addr << 5) + CIA_SPARSE_MEM + 0x00) = b * 0x01010101;
+}
+
+extern inline void __writew(unsigned short b, unsigned long addr)
+{
+        unsigned long msb ; 
+
+       msb = addr & 0xE0000000 ;
+       addr &= MEM_SP1_MASK ;
+       if (msb != hae.cache) {
+         set_hae(msb);
+       }
+       *(vuip) ((addr << 5) + CIA_SPARSE_MEM + 0x08) = b * 0x00010001;
+}
+
+extern inline void __writel(unsigned int b, unsigned long addr)
+{
+       *(vuip) (addr + CIA_DENSE_MEM) = b;
+}
+
+#define inb(port) \
+(__builtin_constant_p((port))?__inb(port):_inb(port))
+
+#define outb(x, port) \
+(__builtin_constant_p((port))?__outb((x),(port)):_outb((x),(port)))
+
+#define readl(a)       __readl((unsigned long)(a))
+#define writel(v,a)    __writel((v),(unsigned long)(a))
+
+#undef vuip
+
+extern unsigned long cia_init (unsigned long mem_start,
+                                unsigned long mem_end);
+
+#endif /* __KERNEL__ */
+
+/*
+ * Data structure for handling CIA machine checks:
+ */
+struct el_CIA_sysdata_mcheck {
+    u_long      coma_gcr;                       
+    u_long      coma_edsr;                      
+    u_long      coma_ter;                       
+    u_long      coma_elar;                      
+    u_long      coma_ehar;                      
+    u_long      coma_ldlr;                      
+    u_long      coma_ldhr;                      
+    u_long      coma_base0;                     
+    u_long      coma_base1;                     
+    u_long      coma_base2;                     
+    u_long      coma_cnfg0;                     
+    u_long      coma_cnfg1;                     
+    u_long      coma_cnfg2;                     
+    u_long      epic_dcsr;                      
+    u_long      epic_pear;                      
+    u_long      epic_sear;                      
+    u_long      epic_tbr1;                      
+    u_long      epic_tbr2;                      
+    u_long      epic_pbr1;                      
+    u_long      epic_pbr2;                      
+    u_long      epic_pmr1;                      
+    u_long      epic_pmr2;                      
+    u_long      epic_harx1;                     
+    u_long      epic_harx2;                     
+    u_long      epic_pmlt;                      
+    u_long      epic_tag0;                      
+    u_long      epic_tag1;                      
+    u_long      epic_tag2;                      
+    u_long      epic_tag3;                      
+    u_long      epic_tag4;                      
+    u_long      epic_tag5;                      
+    u_long      epic_tag6;                      
+    u_long      epic_tag7;                      
+    u_long      epic_data0;                     
+    u_long      epic_data1;                     
+    u_long      epic_data2;                     
+    u_long      epic_data3;                     
+    u_long      epic_data4;                     
+    u_long      epic_data5;                     
+    u_long      epic_data6;                     
+    u_long      epic_data7;                     
+};
+
+#define RTC_PORT(x)    (0x70 + (x))
+#define RTC_ADDR(x)    (0x80 | (x))
+#define RTC_ALWAYS_BCD 0
+
+#endif /* __ALPHA_CIA__H__ */
index 446dbff279cce4503d4e25837ee6c22da5aaa5db..05e70c96185abe90160907566e26574f5ec5ac89 100644 (file)
 #ifdef CONFIG_ALPHA_XL
 /* The maximum address that we can perform a DMA transfer to on Alpha XL,
    due to a hardware SIO (PCI<->ISA bus bridge) chip limitation, is 64MB.
-   see <asm/apecs.h> for more info */
-#define MAX_DMA_ADDRESS                (0xfffffc0004000000UL)
+   See <asm/apecs.h> for more info.
+*/
+/* NOTE: we must define the maximum as something less than 64Mb, to prevent 
+   virt_to_bus() from returning an address in the first window, for a
+   data area that goes beyond the 64Mb first DMA window. Sigh...
+   We MUST coordinate the maximum with <asm/apecs.h> for consistency.
+   For now, this limit is set to 48Mb...
+*/
+#define MAX_DMA_ADDRESS                (0xfffffc0003000000UL)
 #else /* CONFIG_ALPHA_XL */
 /* The maximum address that we can perform a DMA transfer to on normal
    Alpha platforms */
index c33658ea5b641ba2f24747abdd9a4d6ae3ce24c6..44fea065e27a0f4cf8deed02f92aa43bde2d9fdb 100644 (file)
@@ -71,14 +71,14 @@ extern void _sethae (unsigned long addr);   /* cached version */
 #endif /* !__KERNEL__ */
 
 /*
- * There are different version of the Alpha PC motherboards:
+ * There are different chipsets to interface the Alpha CPUs to the world.
  */
 #if defined(CONFIG_ALPHA_LCA)
 # include <asm/lca.h>          /* get chip-specific definitions */
 #elif defined(CONFIG_ALPHA_APECS)
 # include <asm/apecs.h>                /* get chip-specific definitions */
-#elif defined(CONFIG_ALPHA_ALCOR)
-# include <asm/alcor.h>                /* get chip-specific definitions */
+#elif defined(CONFIG_ALPHA_CIA)
+# include <asm/cia.h>          /* get chip-specific definitions */
 #else
 # include <asm/jensen.h>
 #endif
index 2a0262c873e566a81ea71e25c2d253d3df42b989..3d15517188f480b885a690f6d14c800fb2961c26 100644 (file)
 
 #if defined(CONFIG_ALPHA_CABRIOLET) || defined(CONFIG_ALPHA_EB66P) || defined(CONFIG_ALPHA_EB164) || defined(CONFIG_ALPHA_PC164)
 # define NR_IRQS       33
-#elif defined(CONFIG_ALPHA_EB66) || defined(CONFIG_ALPHA_EB64P)
+#elif defined(CONFIG_ALPHA_EB66) || defined(CONFIG_ALPHA_EB64P) || defined(CONFIG_ALPHA_MIKASA)
 # define NR_IRQS       32
+#elif defined(CONFIG_ALPHA_ALCOR)
+# define NR_IRQS       48
 #else
 # define NR_IRQS       16
 #endif
index 79f03ce804b50c3a4f0f10061a1e267fad92dde7..00dd3aed8cac7dfd3cf177be3a28d115cd88d786 100644 (file)
 /* Various timeout loop repetition counts. */
 #define BUSY_TIMEOUT           10000000        /* for busy wait */
 #define FAST_TIMEOUT           100000          /* ibid. for probing */
-#define SLEEP_TIMEOUT          3000            /* for timer wait */
-#define MULTI_SEEK_TIMEOUT     500             /* for timer wait */
-#define READ_TIMEOUT           3000            /* for poll wait */
-#define STOP_TIMEOUT           1000            /* for poll wait */
-#define RESET_WAIT             1000            /* busy wait at drive reset */
+#define SLEEP_TIMEOUT          6000            /* for timer wait */
+#define MULTI_SEEK_TIMEOUT     1000            /* for timer wait */
+#define READ_TIMEOUT           6000            /* for poll wait */
+#define STOP_TIMEOUT           2000            /* for poll wait */
+#define RESET_WAIT             5000            /* busy wait at drive reset */
 
 /* # of buffers for block size conversion. 6 is optimal for my setup (P75),
    giving 280 kb/s, with 0.4% CPU usage. Experiment to find your optimal
index ea57c43fe6f5d5e399dfaa039c9e0e5774ba96df..c61922a686028ca5f3c90df0ad921b4d55477c8a 100644 (file)
@@ -496,6 +496,18 @@ extern struct sk_buff              *sock_alloc_send_skb(struct sock *skb,
  */
 
 extern __inline__ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
+{
+       if (sk->rmem_alloc + skb->truesize >= sk->rcvbuf)
+               return -ENOMEM;
+       atomic_add(skb->truesize, &sk->rmem_alloc);
+       skb->sk=sk;
+       skb_queue_tail(&sk->receive_queue,skb);
+       if (!sk->dead)
+               sk->data_ready(sk,skb->len);
+       return 0;
+}
+
+extern __inline__ int __sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
 {
        if (sk->rmem_alloc + skb->truesize >= sk->rcvbuf)
                return -ENOMEM;
index 05c2ba8adfef2c16ea284cae73f9e2cb617cc638..f936de08ce3b4ba4941d14a0021bce7574b169a6 100644 (file)
@@ -69,6 +69,7 @@
 #define WRITE_LONG            0x3f
 #define CHANGE_DEFINITION     0x40
 #define WRITE_SAME            0x41
+#define READ_TOC              0x43
 #define LOG_SELECT            0x4c
 #define LOG_SENSE             0x4d
 #define MODE_SELECT_10        0x55
index b6da1035ec26af42cd01da9da3438bd9ca48e20a..047d1c3d14dab0325d6af38ce190e8fa340afe5f 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -39,6 +39,29 @@ pgprot_t protection_map[16] = {
        __S000, __S001, __S010, __S011, __S100, __S101, __S110, __S111
 };
 
+/*
+ * Combine the mmap "prot" and "flags" argument into one "vm_flags" used
+ * internally. Essentially, translate the "PROT_xxx" and "MAP_xxx" bits
+ * into "VM_xxx".
+ */
+static inline unsigned long vm_flags(unsigned long prot, unsigned long flags)
+{
+#define _trans(x,bit1,bit2) \
+((bit1==bit2)?(x&bit1):(x&bit1)?bit2:0)
+
+       unsigned long prot_bits, flag_bits;
+       prot_bits =
+               _trans(prot, PROT_READ, VM_READ) |
+               _trans(prot, PROT_WRITE, VM_WRITE) |
+               _trans(prot, PROT_EXEC, VM_EXEC);
+       flag_bits =
+               _trans(flags, MAP_GROWSDOWN, VM_GROWSDOWN) |
+               _trans(flags, MAP_DENYWRITE, VM_DENYWRITE) |
+               _trans(flags, MAP_EXECUTABLE, VM_EXECUTABLE);
+       return prot_bits | flag_bits;
+#undef _trans
+}
+
 unsigned long do_mmap(struct file * file, unsigned long addr, unsigned long len,
        unsigned long prot, unsigned long flags, unsigned long off)
 {
@@ -126,9 +149,7 @@ unsigned long do_mmap(struct file * file, unsigned long addr, unsigned long len,
        vma->vm_mm = current->mm;
        vma->vm_start = addr;
        vma->vm_end = addr + len;
-       vma->vm_flags = prot & (VM_READ | VM_WRITE | VM_EXEC);
-       vma->vm_flags |= flags & (VM_GROWSDOWN | VM_DENYWRITE | VM_EXECUTABLE);
-       vma->vm_flags |= current->mm->def_flags;
+       vma->vm_flags = vm_flags(prot,flags) | current->mm->def_flags;
 
        if (file) {
                if (file->f_mode & 1)
index 191e00fbeb181975b3c19f77894ed82f2400cf1a..293db45586dd5b79ea5c94b0993eed579e854097 100644 (file)
@@ -113,7 +113,7 @@ static inline void raw_rcv_skb(struct sock * sk, struct sk_buff * skb)
 {
        /* Charge it to the socket. */
        
-       if (sock_queue_rcv_skb(sk,skb)<0)
+       if (__sock_queue_rcv_skb(sk,skb)<0)
        {
                ip_statistics.IpInDiscards++;
                skb->sk=NULL;
index deef0a34aa347f3e597c9ff7c3b745320d038db4..478baa87333170ddf8e0d806fc5484b857a3553c 100644 (file)
@@ -641,7 +641,7 @@ static inline void udp_queue_rcv_skb(struct sock * sk, struct sk_buff *skb)
        /* I assume this includes the IP options, as per RFC1122 (4.1.3.2). */
        /* If not, please let me know. -- MS */
 
-       if (sock_queue_rcv_skb(sk,skb)<0) {
+       if (__sock_queue_rcv_skb(sk,skb)<0) {
                udp_statistics.UdpInErrors++;
                ip_statistics.IpInDiscards++;
                ip_statistics.IpInDelivers--;
index d52a50301b0871a9024c42ee6f920595c8090c0e..e34c186b165307d8eb3b171bba87b52485cc9a19 100644 (file)
@@ -660,7 +660,7 @@ send a problem report to linux-kernel@vger.rutgers.edu or post a
 message to the linux.dev.kernel news group.
 
 Please indicate the kernel version you are trying to configure and
-which menu you were trying to enter when this error occured.
+which menu you were trying to enter when this error occurred.
 
 EOM
                        cleanup