]> www.infradead.org Git - users/rw/ppcboot.git/commitdiff
* Cleanup of timer handlers
authorwdenk <wdenk>
Sun, 12 Nov 2000 23:38:41 +0000 (23:38 +0000)
committerwdenk <wdenk>
Sun, 12 Nov 2000 23:38:41 +0000 (23:38 +0000)
* Fix I2C driver (error in BRG divider calculation)

* Added DPRAM handling functions into mpc8xx/commproc.c, to retrieve
  DPRAM memory addresses in runtime

* Patched the mpc8xx/video.c to fix the field/synch pin on the FADS
  and GENIETV

* Video extensions support (to pass framebuffer informations to
  applications or linux kernel via the bd_t structure).

* malloc() temporary sector buffer in do_saveenv instead of using
  fixed location in memory

* Added CONFIG_BOOTP_MASK to make use of BOOTP extensions
  configurable

* Added CONFIG_I2C for I2C driver configuration

* Moving documentation to "doc" directory

* Minimized list code into 'common/lists.c'

60 files changed:
CHANGELOG
README.console [deleted file]
common/board.c
common/cmd_boot.c
common/cmd_net.c
common/cmd_nvedit.c
common/lists.c
doc/README.console [new file with mode: 0644]
doc/README.video [moved from README.video with 83% similarity]
fads/fads.c
genietv/flash.c
genietv/genietv.c
genietv/ppcboot.lds
include/cmd_confdefs.h
include/commproc.h
include/config_ADCIOP.h
include/config_CPCI405.h
include/config_ETX094.h
include/config_FADS823.h
include/config_FADS850SAR.h
include/config_FADS860T.h
include/config_FPS850L.h
include/config_GENIETV.h
include/config_IVMS8.h
include/config_MBX.h
include/config_SM850.h
include/config_SPD823TS.h
include/config_TQM823L.h
include/config_TQM850L.h
include/config_TQM855L.h
include/config_TQM860L.h
include/config_cogent_mpc8xx.h
include/console.h
include/lists.h
include/net.h
include/ppcboot.h
include/version.h
include/video_ad7176.h
include/video_ad7177.h
include/video_logo.h
mpc8xx/Makefile
mpc8xx/commproc.c [new file with mode: 0644]
mpc8xx/cpu.c
mpc8xx/cpu_init.c
mpc8xx/i2c.c
mpc8xx/interrupts.c
mpc8xx/scc.c
mpc8xx/serial.c
mpc8xx/start.S
mpc8xx/wlkbd.c
net/Makefile
net/bootp.c
net/net.c
net/rarp.c
net/tftp.c
ppc/Makefile
ppc/ticks.S [new file with mode: 0644]
ppc/time.c [new file with mode: 0644]
ppc4xx/interrupts.c
tools/easylogo/easylogo.c

index 9aa491d6656fecdab91d7c7238c0cc69bf574c92..cd0a4ddc2938e8949e8b2187bbb47448ff75b8bf 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -52,6 +52,35 @@ To do:
 * "last user address" is set even if bootp is used without parameters
   (and it uses default address).
 
+======================================================================
+Modifications for 0.6.2:
+======================================================================
+
+* Cleanup of timer handlers
+
+* Fix I2C driver (error in BRG divider calculation)
+
+* Added DPRAM handling functions into mpc8xx/commproc.c, to retrieve
+  DPRAM memory addresses in runtime
+
+* Patched the mpc8xx/video.c to fix the field/synch pin on the FADS
+  and GENIETV
+
+* Video extensions support (to pass framebuffer informations to
+  applications or linux kernel via the bd_t structure).
+
+* malloc() temporary sector buffer in do_saveenv instead of using
+  fixed location in memory
+
+* Added CONFIG_BOOTP_MASK to make use of BOOTP extensions
+  configurable
+
+* Added CONFIG_I2C for I2C driver configuration
+
+* Moving documentation to "doc" directory
+
+* Minimized list code into 'common/lists.c'
+
 ======================================================================
 Modifications for 0.6.1:
 ======================================================================
diff --git a/README.console b/README.console
deleted file mode 100644 (file)
index 82dc22e..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * (C) Copyright 2000
- * Paolo Scaffardi, AIRVENT SAM s.p.a - RIMINI(ITALY), arsenio@tin.it
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-PPCBOOT console handling
-========================
-
-HOW THE CONSOLE WORKS?
-----------------------
-
-At system startup PPCBOOT initializes a serial console. When PPCBOOT relocates
-itself to RAM, all console drivers are initialized (they will register all 
-detected console devices to the system for further use).
-
-The first input device is assigned to the 'stdin' file, the first output one to
-'stdout' and 'stderr'.
-
-In the prompt you can use the command 'coninfo' to see all registered console
-devices and its flags. You can assign a standard file (stdin, stdout or stderr)
-to any device you see in that list simply assigning to the relative environment 
-variable its name. For example:
-
-    setenv stdin wl_kbd                <- To use the wireless keyboard
-    setenv stdout video                <- To use the video console
-
-HOW CAN I USE STANDARD FILE INTO THE SOURCES?
----------------------------------------------
-
-You can use these functions to access the console:
-
-* STDOUT:
-    putc       (to put a char to stdout)
-    puts       (to put a string to stdout)
-    printf     (to format and put a string to stdout)
-
-* STDIN:
-    tstc       (to test the presence of a char in the stdin)
-    getc       (to get a char from stdin)
-    
-* STDERR:
-    eputc      (to put a char to the stderr)
-    eputs      (to put a string to the stderr)
-    eprintf    (to format and put a string to stderr)
-
-* FILE (can be 'stdin', 'stdout', 'stderr'):
-    fputc      (like putc but redirected to a file)
-    fputs      (like puts but redirected to a file)
-    fprintf    (like printf but redirected to a file)
-    ftstc      (like tstc but redirected to a file)
-    fgetc      (like getc but redirected to a file)
-    
-Remember that all FILE-relative functions CANNOT be used before PPCBOOT
-relocation (done in 'board_init_r' into common/board.c).
-
-SUPPORTED DRIVERS
------------------
-
-Working:       serial  (architecture dependent serial stuff)
-               video   (mpc8xx video controller)
-               
-WIP:           wl_kbd  (Wireless 4PPM keyboard)
-
-To do:         lcd     (mpc8xx lcd controller)
\ No newline at end of file
index 117e93bcc1a40ff23ad83b9612ca0bb558c56f83..b87198bce333765fe95b0bc54a9248afad2b0981 100644 (file)
@@ -398,6 +398,8 @@ void    board_init_r  (bd_t *bd, ulong dest_addr)
 
     udelay(20);
 
+    set_timer(0);
+
     /* Insert function pointers now that we have relocated the code */
 
 #if defined(CONFIG_8xx)
index 2d52ded03d17474769220a674f1cb1f90d378105..4ae28d5d4b1be0ec8118f176fbf338cc79d83818 100644 (file)
@@ -168,6 +168,7 @@ void do_load_serial (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[
                printf ("## S-Record download aborted\n");
        } else {
                printf ("## Start Addr      = 0x%08lx\n", addr);
+               load_addr = addr;
        }
 
 #ifdef CFG_LOADS_BAUD_CHANGE
@@ -389,6 +390,7 @@ void do_load_serial_bin (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *a
                printf ("## Binary (kermit) download aborted\n");
        } else {
                printf ("## Start Addr      = 0x%08lx\n", addr);
+               load_addr = addr;
        }
 
        if (loadb_baudrate != bd->bi_baudrate) {
index cb520e9a1afd30e99b91d4a40380752a92d06e8c..6c07e0912429b04b78b84ce88c5a6927f344bf49 100644 (file)
@@ -54,8 +54,8 @@ static void netboot_update_env(void)
 {
     char tmp[12] ;
 
-    if (NetOurGatewaysNum) {
-       NetIPaddr (NetOurGatewaysIP[0], tmp);
+    if (NetOurGatewayIP) {
+       NetIPaddr (NetOurGatewayIP, tmp);
        setenv("gatewayip", tmp);
     }
 
index ea926840c5875bf0e7a01776fd282321eb83ab6d..7d5d4de9c44d31b6103e2e38d7acf4126c24c44b 100644 (file)
@@ -369,6 +369,8 @@ void do_saveenv  (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
 #endif /* CFG_FLASH_ENV_BUF */
 
 #ifdef CONFIG_4xx
+       uchar *ed_buf;
+
        /*
         * On ppc4xx still saved somewhere within a flash sector (no sector
         * reserved for the environment variables). This will be changed in a
@@ -397,15 +399,23 @@ void do_saveenv  (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
         sector_flash_size = info->start[i] - info->start[i-1];
         sector_flash_offs = (ulong)flash_addr - info->start[i-1];
 
+       /*
+        * Allocate temp buffer to edit environment
+        */
+       if ((ed_buf = malloc(sector_flash_size)) == NULL) {
+               printf ("## malloc(%d) failed\n", sector_flash_size);
+               return;
+       }
+
         /*
          * Copy sector down to ram
          */
-       memcpy((uchar *)0x10000, (uchar *)sector_flash_addr, sector_flash_size);
+       memcpy(ed_buf, (uchar *)sector_flash_addr, sector_flash_size);
 
         /*
          * Copy new environment variables to ram image of flash sector
          */
-       memcpy((uchar *)(0x10000+sector_flash_offs), (uchar *)environment, env_size);
+       memcpy(ed_buf+sector_flash_offs, (uchar *)environment, env_size);
 
        flash_sect_protect (0, sector_flash_addr, sector_flash_addr+sector_flash_size-1);
 
@@ -413,7 +423,7 @@ void do_saveenv  (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
        flash_sect_erase (sector_flash_addr, sector_flash_addr+sector_flash_size-1);
 
        printf ("Saving Environment to Flash...\n");
-       switch (rc = flash_write ((uchar *)0x10000, sector_flash_addr, sector_flash_size)) {
+       switch (rc = flash_write (ed_buf, sector_flash_addr, sector_flash_size)) {
        case 0: break;
        case 1: printf ("Timeout writing to Flash\n");
                break;
@@ -425,6 +435,8 @@ void do_saveenv  (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
                printf ("%s[%d] FIXME: rc=%d\n",__FILE__,__LINE__,rc);
        }
 
+       free (ed_buf);
+
        flash_sect_protect (1, sector_flash_addr, sector_flash_addr+sector_flash_size-1);
 #else  /* ! CONFIG_4xx */
 
index a682ab6944c7338944818c8184b4a525ccb95832..e650bee490a53d9bd9b8ef43f0b618bbeb274096 100644 (file)
 #define MIN(a,b)       (((a)<(b)) ? (a) : (b))
 #define CAT4CHARS(a,b,c,d)     ((a<<24) | (b<<16) | (c<<8) | d)
 
-#define kDefaultAllocationPercentIncrease   10  /* increase list size by 10% every time it is full */\r
-#define kDefaultAllocationminNumItemsIncrease   4   /* always increase list size by 4 items when it is full */\r
-\r
- /* how many items to expand the list by when it becomes full = current listSize (in items) + (hiword percent of list size) +   loword */\r
-#define NUMITEMSPERALLOC(list) MAX(((*list)->listSize * ((*list)->percentIncrease + 100)) / 100 , (*list)->minNumItemsIncrease)\r
-\r
-#define ITEMPTR(list, item)     &(((char *)&(*list)->itemList)[ (*(list))->itemSize * (item)])\r
-\r
-#define LIST_SIGNATURE          CAT4CHARS('L', 'I', 'S', 'T');\r
+#define kDefaultAllocationPercentIncrease   10  /* increase list size by 10% every time it is full */
+#define kDefaultAllocationminNumItemsIncrease   4   /* always increase list size by 4 items when it is full */
+
+ /* how many items to expand the list by when it becomes full = current listSize (in items) + (hiword percent of list size) +   loword */
+#define NUMITEMSPERALLOC(list) MAX(((*list)->listSize * ((*list)->percentIncrease + 100)) / 100 , (*list)->minNumItemsIncrease)
+
+#define ITEMPTR(list, item)     &(((char *)&(*list)->itemList)[ (*(list))->itemSize * (item)])
+
+#define LIST_SIGNATURE          CAT4CHARS('L', 'I', 'S', 'T');
 
 #define calloc(size,num)       malloc(size*num)
-\r
-/********************************************************************/\r
-\r
-Handle NewHandle(unsigned int numBytes)\r
-{\r
-    void            *memPtr;\r
-    HandleRecord    *hanPtr;\r
-\r
-    memPtr = calloc(numBytes, 1);\r
-    hanPtr = (HandleRecord*)calloc(sizeof(HandleRecord), 1);\r
-    if (hanPtr && (memPtr || numBytes == 0))\r
-        {\r
-        hanPtr->ptr = memPtr;\r
-        hanPtr->size = numBytes;\r
-        return (Handle)hanPtr;\r
-        }\r
-    else\r
-        {\r
-        free(memPtr);\r
-        free(hanPtr);\r
-        return NULL;\r
-        }\r
-}\r
-\r
-/********************************************************************/\r
-\r
-void  DisposeHandle(Handle handle)\r
-{\r
-    if (handle)\r
-        {\r
-        free(*handle);\r
-        free((void *)handle);\r
-        }\r
-}\r
-\r
-/********************************************************************/\r
-\r
-unsigned int  GetHandleSize(Handle handle)\r
-{\r
-    return ((HandleRecord *)handle)->size;\r
-}\r
-\r
-/********************************************************************/\r
-\r
-int  SetHandleSize(Handle handle, unsigned int newSize)\r
-{\r
-    HandleRecord    *hanRecPtr = (HandleRecord *)handle;\r
-    void            *newPtr, *oldPtr;\r
-    unsigned int    oldSize;\r
-\r
-
-    oldPtr = hanRecPtr->ptr;\r
-    oldSize = hanRecPtr->size;\r
-
-    if (oldSize == newSize)\r
-         return 1;\r
-\r
-    if (oldPtr == NULL)\r
+
+/********************************************************************/
+
+Handle NewHandle(unsigned int numBytes)
+{
+    void            *memPtr;
+    HandleRecord    *hanPtr;
+
+    memPtr = calloc(numBytes, 1);
+    hanPtr = (HandleRecord*)calloc(sizeof(HandleRecord), 1);
+    if (hanPtr && (memPtr || numBytes == 0))
+        {
+        hanPtr->ptr = memPtr;
+        hanPtr->size = numBytes;
+        return (Handle)hanPtr;
+        }
+    else
+        {
+        free(memPtr);
+        free(hanPtr);
+        return NULL;
+        }
+}
+
+/********************************************************************/
+
+void  DisposeHandle(Handle handle)
+{
+    if (handle)
+        {
+        free(*handle);
+        free((void *)handle);
+        }
+}
+
+/********************************************************************/
+
+unsigned int  GetHandleSize(Handle handle)
+{
+    return ((HandleRecord *)handle)->size;
+}
+
+/********************************************************************/
+
+int  SetHandleSize(Handle handle, unsigned int newSize)
+{
+    HandleRecord    *hanRecPtr = (HandleRecord *)handle;
+    void            *newPtr, *oldPtr;
+    unsigned int    oldSize;
+
+
+    oldPtr = hanRecPtr->ptr;
+    oldSize = hanRecPtr->size;
+
+    if (oldSize == newSize)
+         return 1;
+
+    if (oldPtr == NULL)
     {
-        newPtr = malloc(newSize);\r
+        newPtr = malloc(newSize);
     }
-    else\r
+    else
     {
-        newPtr = realloc(oldPtr, newSize);\r
+        newPtr = realloc(oldPtr, newSize);
     }
-    if (newPtr || (newSize == 0))\r
-        {\r
-        hanRecPtr->ptr = newPtr;\r
-        hanRecPtr->size = newSize;\r
-        if (newSize > oldSize)\r
-            memset ((char *)newPtr+oldSize, 0, newSize-oldSize);\r
-        return 1;\r
-        }\r
-    else\r
-        return 0;\r
-}\r
-
-    /*  Used to compare list elements by their raw data contents */\r
-static int  ListMemBlockCmp(void *a, void *b, int size)\r
-{\r
-    return memcmp(a, b, size);\r
-}\r
-\r
-
-/***************************************************************************/\r
-\r
-    /*  Binary search numElements of size elementSize in array for a match\r
-        to the. item. Return the index of the element that matches (0 - numElements - 1).\r
-        If no match is found return the -i-1 where i is the index (0 - numElements)\r
-        where the item should be placed. (*theCmp)(a,b) should return  <0 if a<b,\r
-        0 if a==b, >0 if a>b.\r
-\r
-        This function is like the C-Library function bsearch() except that this\r
-        function returns the index where the item should be placed if it is not\r
-        found.\r
-    */\r
-int BinSearch(void *array, int numElements, int elementSize, void *itemPtr, CompareFunction compareFunction)\r
-{\r
-    int low, high, mid, cmp;\r
-    void *arrayItemPtr;\r
-\r
-    for(low=0, high= numElements-1, mid=0, cmp= -1; low <= high; )\r
-        {\r
-        mid = (low + high) >> 1;\r
-\r
-        arrayItemPtr = (void *) (((char *)array) + (mid*elementSize));\r
-        cmp = compareFunction ? compareFunction(itemPtr, arrayItemPtr)\r
-                              : ListMemBlockCmp(itemPtr, arrayItemPtr, elementSize);\r
-        if (cmp == 0)\r
-            return mid;\r
-        else\r
-        if (cmp < 0)\r
-            high= mid - 1;\r
-        else\r
-            low= mid + 1;\r
-        }\r
-    if (cmp > 0)\r
-        mid++;\r
-\r
-    return -mid-1;\r
-}\r
-\r
-/*******************************************************************************/\r
-\r
-    /* BEGIN PATCH to 4.0.1 - jag 8-29-96 */\r
-    /*  If numNewItems == 0 then expand the list by the number of items 
-       indicated by its allocation policy.\r
-        If numNewItems > 0 then expand the list by exactly the number of 
-       items indicated.\r
-        If numNewItems < 0 then expand the list by the absolute value of 
-       numNewItems plus the number of items indicated by its allocation 
-       policy.\r
-        Returns 1 for success, 0 if out of memory\r
-    */\r
-static int  ExpandListSpace (list_t list, int numNewItems)\r
-{\r
-    if (numNewItems == 0)\r
-        numNewItems = NUMITEMSPERALLOC(list);\r
-    else\r
-    if (numNewItems < 0)\r
-        numNewItems = (-numNewItems) + NUMITEMSPERALLOC(list);\r
-\r
-    if (SetHandleSize ((Handle)list,\r
-        sizeof(ListStruct) +\r 
+    if (newPtr || (newSize == 0))
+        {
+        hanRecPtr->ptr = newPtr;
+        hanRecPtr->size = newSize;
+        if (newSize > oldSize)
+            memset ((char *)newPtr+oldSize, 0, newSize-oldSize);
+        return 1;
+        }
+    else
+        return 0;
+}
+
+#ifdef CFG_ALL_LIST_FUNCTIONS
+
+    /*  Used to compare list elements by their raw data contents */
+static int  ListMemBlockCmp(void *a, void *b, int size)
+{
+    return memcmp(a, b, size);
+}
+
+
+/***************************************************************************/
+
+    /*  Binary search numElements of size elementSize in array for a match
+        to the. item. Return the index of the element that matches (0 - numElements - 1).
+        If no match is found return the -i-1 where i is the index (0 - numElements)
+        where the item should be placed. (*theCmp)(a,b) should return  <0 if a<b,
+        0 if a==b, >0 if a>b.
+
+        This function is like the C-Library function bsearch() except that this
+        function returns the index where the item should be placed if it is not
+        found.
+    */
+int BinSearch(void *array, int numElements, int elementSize, void *itemPtr, CompareFunction compareFunction)
+{
+    int low, high, mid, cmp;
+    void *arrayItemPtr;
+
+    for(low=0, high= numElements-1, mid=0, cmp= -1; low <= high; )
+        {
+        mid = (low + high) >> 1;
+
+        arrayItemPtr = (void *) (((char *)array) + (mid*elementSize));
+        cmp = compareFunction ? compareFunction(itemPtr, arrayItemPtr)
+                              : ListMemBlockCmp(itemPtr, arrayItemPtr, elementSize);
+        if (cmp == 0)
+            return mid;
+        else
+        if (cmp < 0)
+            high= mid - 1;
+        else
+            low= mid + 1;
+        }
+    if (cmp > 0)
+        mid++;
+
+    return -mid-1;
+}
+
+#endif /* CFG_ALL_LIST_FUNCTIONS */
+
+/*******************************************************************************/
+
+    /* BEGIN PATCH to 4.0.1 - jag 8-29-96 */
+    /*  If numNewItems == 0 then expand the list by the number of items
+       indicated by its allocation policy.
+        If numNewItems > 0 then expand the list by exactly the number of
+       items indicated.
+        If numNewItems < 0 then expand the list by the absolute value of
+       numNewItems plus the number of items indicated by its allocation
+       policy.
+        Returns 1 for success, 0 if out of memory
+    */
+static int  ExpandListSpace (list_t list, int numNewItems)
+{
+    if (numNewItems == 0)
+        numNewItems = NUMITEMSPERALLOC(list);
+    else
+    if (numNewItems < 0)
+        numNewItems = (-numNewItems) + NUMITEMSPERALLOC(list);
+
+    if (SetHandleSize ((Handle)list,
+        sizeof(ListStruct) +
        ((*list)->listSize + numNewItems) * (*list)->itemSize))
-       {\r
-           (*list)->listSize += numNewItems;\r
-           return 1;\r
-        }\r
+       {
+           (*list)->listSize += numNewItems;
+           return 1;
+        }
     else
-    {\r
-        return 0;\r
+    {
+        return 0;
     }
-}\r
-\r
-/*******************************/\r
-\r
-     /* This function reallocate the list, minus any currently unused portion of its allotted memory. */\r
-void  ListCompact (list_t list)\r
-{\r
-\r
-    if (!SetHandleSize ((Handle)list,\r
-        sizeof (ListStruct) + (*list)->numItems * (*list)->itemSize))\r
-        return;\r
-\r
-    (*list)->listSize = (*list)->numItems;\r
-}\r
-\r
-/*******************************/\r
-\r
-list_t  ListCreate (int elementSize)\r
-{\r
-    list_t    list;\r
-\r
-    list = (list_t)(NewHandle (sizeof(ListStruct)));   /* create empty list */\r
-    if (list) \r
-        {\r
-        (*list)->signature = LIST_SIGNATURE;\r
-        (*list)->numItems = 0;\r
-        (*list)->listSize = 0;\r
-        (*list)->itemSize = elementSize;\r
-        (*list)->percentIncrease = kDefaultAllocationPercentIncrease;\r
-        (*list)->minNumItemsIncrease = kDefaultAllocationminNumItemsIncrease;\r
-        }\r
-\r
-    return list;\r
-}\r
-\r
-/*******************************/\r
-\r
-void  ListSetAllocationPolicy (list_t list, int minItemsPerAlloc, int percentIncreasePerAlloc)\r
-{\r
-    \r
-    (*list)->percentIncrease = percentIncreasePerAlloc;\r
-    (*list)->minNumItemsIncrease = minItemsPerAlloc;\r
-}\r
-\r
-/*******************************/\r
-\r
-void  ListDispose (list_t list)\r
-{\r
-    DisposeHandle ((Handle)list);\r
-}\r
-\r
-/*******************************/\r
-\r
-void  ListDisposePtrList(list_t list)\r
-{\r
-    int index; \r
-    int numItems;\r
-    \r
-    if (list)\r
-        {\r
-        numItems = ListNumItems(list);\r
-        \r
-        for (index = 1; index <= numItems; index++)\r
-            free(*(void **)ListGetPtrToItem(list, index));\r
-            \r
-        ListDispose(list);\r
-        }\r
-}\r
-\r
-/*******************************/\r
-\r
-void   ListClear (list_t list)  /* keeps memory, resets the number of items to 0 */\r
-{\r
-    if (!list)\r
-        return;\r
-    (*list)->numItems = 0;\r
-}\r
-\r
-/*******************************/\r
-\r
-list_t  ListCopy (list_t originalList)   /* copy is only as large as necessary */\r
-{\r
-    list_t    tempList = NULL;\r
-    int         numItems;\r
-\r
-    if (!originalList)\r
-        return NULL;\r
-\r
-    tempList = ListCreate ((*originalList)->itemSize);\r
-    if (tempList) {\r
-        numItems = ListNumItems (originalList);\r
-\r
-        if (!SetHandleSize ((Handle)tempList,\r
-            sizeof (ListStruct) + numItems * (*tempList)->itemSize)) {\r
-            ListDispose (tempList);\r
-            return NULL;\r
-            }\r
-\r
-        (*tempList)->numItems = (*originalList)->numItems;\r
-        (*tempList)->listSize = (*originalList)->numItems;\r
-        (*tempList)->itemSize = (*originalList)->itemSize;\r
-        (*tempList)->percentIncrease = (*originalList)->percentIncrease;\r
-        (*tempList)->minNumItemsIncrease = (*originalList)->minNumItemsIncrease;\r
-\r
-        memcpy (ITEMPTR(tempList,0), ITEMPTR(originalList,0),\r
-            numItems * (*tempList)->itemSize);\r
-        }\r
-\r
-    return tempList;\r
-}\r
-\r
-/********************************/\r
-\r
-int  ListAppend (list_t list1, list_t list2)  /* list1 = list1 + list2 */\r
-{\r
-    int numItemsL1, numItemsL2;\r
-\r
-    if (!list2)\r
-        return 1;\r
-\r
-    if (!list1)\r
-        return 0;\r
-    if ((*list1)->itemSize != (*list2)->itemSize)\r
-        return 0;\r
-\r
-    numItemsL1 = ListNumItems (list1);\r
-    numItemsL2 = ListNumItems (list2);\r
-\r
-    if (numItemsL2 == 0)\r
-        return 1;\r
-\r
-    if (!SetHandleSize ((Handle)list1,\r
-        sizeof (ListStruct) + (numItemsL1 + numItemsL2) * (*list1)->itemSize))\r
-        return 0;\r
-\r
-    (*list1)->numItems = numItemsL1 + numItemsL2;\r
-    (*list1)->listSize = numItemsL1 + numItemsL2;\r
-\r
-    memmove (ITEMPTR(list1,numItemsL1), ITEMPTR(list2,0),\r
-        numItemsL2 * (*list2)->itemSize);\r
-\r
-    return 1;\r
-}\r
-\r
-/*******************************/\r
-\r
-    /*  returns 1 if the item is inserted, returns 0 if out of memory or\r
-        bad arguments were passed.\r
-    */\r
-int  ListInsertItem (list_t list, void *ptrToItem, int itemPosition)\r
-{\r
-    return ListInsertItems (list, ptrToItem, itemPosition, 1);\r
-}\r
-\r
-/*******************************/\r
-\r
-int  ListInsertItems (list_t list, void *ptrToItems, int firstItemPosition, int numItemsToInsert)\r
-{\r
-    int numItems = (*list)->numItems;\r
-
-    if (firstItemPosition == numItems + 1)\r
-        firstItemPosition = LIST_END;\r
-    else\r
-    if (firstItemPosition > numItems)\r
-        return 0;\r
-\r
-    if ((*list)->numItems >= (*list)->listSize)\r
+}
+
+/*******************************/
+
+#ifdef CFG_ALL_LIST_FUNCTIONS
+
+     /* This function reallocate the list, minus any currently unused portion of its allotted memory. */
+void  ListCompact (list_t list)
+{
+
+    if (!SetHandleSize ((Handle)list,
+        sizeof (ListStruct) + (*list)->numItems * (*list)->itemSize))
+        return;
+
+    (*list)->listSize = (*list)->numItems;
+}
+
+#endif /* CFG_ALL_LIST_FUNCTIONS */
+
+/*******************************/
+
+list_t  ListCreate (int elementSize)
+{
+    list_t    list;
+
+    list = (list_t)(NewHandle (sizeof(ListStruct)));   /* create empty list */
+    if (list)
+        {
+        (*list)->signature = LIST_SIGNATURE;
+        (*list)->numItems = 0;
+        (*list)->listSize = 0;
+        (*list)->itemSize = elementSize;
+        (*list)->percentIncrease = kDefaultAllocationPercentIncrease;
+        (*list)->minNumItemsIncrease = kDefaultAllocationminNumItemsIncrease;
+        }
+
+    return list;
+}
+
+/*******************************/
+
+void  ListSetAllocationPolicy (list_t list, int minItemsPerAlloc, int percentIncreasePerAlloc)
+{
+
+    (*list)->percentIncrease = percentIncreasePerAlloc;
+    (*list)->minNumItemsIncrease = minItemsPerAlloc;
+}
+
+/*******************************/
+
+void  ListDispose (list_t list)
+{
+    DisposeHandle ((Handle)list);
+}
+
+/*******************************/
+
+#ifdef CFG_ALL_LIST_FUNCTIONS
+
+void  ListDisposePtrList(list_t list)
+{
+    int index;
+    int numItems;
+
+    if (list)
+        {
+        numItems = ListNumItems(list);
+
+        for (index = 1; index <= numItems; index++)
+            free(*(void **)ListGetPtrToItem(list, index));
+
+        ListDispose(list);
+        }
+}
+
+/*******************************/
+
+void   ListClear (list_t list)  /* keeps memory, resets the number of items to 0 */
+{
+    if (!list)
+        return;
+    (*list)->numItems = 0;
+}
+
+/*******************************/
+
+list_t  ListCopy (list_t originalList)   /* copy is only as large as necessary */
+{
+    list_t    tempList = NULL;
+    int         numItems;
+
+    if (!originalList)
+        return NULL;
+
+    tempList = ListCreate ((*originalList)->itemSize);
+    if (tempList) {
+        numItems = ListNumItems (originalList);
+
+        if (!SetHandleSize ((Handle)tempList,
+            sizeof (ListStruct) + numItems * (*tempList)->itemSize)) {
+            ListDispose (tempList);
+            return NULL;
+            }
+
+        (*tempList)->numItems = (*originalList)->numItems;
+        (*tempList)->listSize = (*originalList)->numItems;
+        (*tempList)->itemSize = (*originalList)->itemSize;
+        (*tempList)->percentIncrease = (*originalList)->percentIncrease;
+        (*tempList)->minNumItemsIncrease = (*originalList)->minNumItemsIncrease;
+
+        memcpy (ITEMPTR(tempList,0), ITEMPTR(originalList,0),
+            numItems * (*tempList)->itemSize);
+        }
+
+    return tempList;
+}
+
+/********************************/
+
+int  ListAppend (list_t list1, list_t list2)  /* list1 = list1 + list2 */
+{
+    int numItemsL1, numItemsL2;
+
+    if (!list2)
+        return 1;
+
+    if (!list1)
+        return 0;
+    if ((*list1)->itemSize != (*list2)->itemSize)
+        return 0;
+
+    numItemsL1 = ListNumItems (list1);
+    numItemsL2 = ListNumItems (list2);
+
+    if (numItemsL2 == 0)
+        return 1;
+
+    if (!SetHandleSize ((Handle)list1,
+        sizeof (ListStruct) + (numItemsL1 + numItemsL2) * (*list1)->itemSize))
+        return 0;
+
+    (*list1)->numItems = numItemsL1 + numItemsL2;
+    (*list1)->listSize = numItemsL1 + numItemsL2;
+
+    memmove (ITEMPTR(list1,numItemsL1), ITEMPTR(list2,0),
+        numItemsL2 * (*list2)->itemSize);
+
+    return 1;
+}
+
+#endif /* CFG_ALL_LIST_FUNCTIONS */
+
+/*******************************/
+
+    /*  returns 1 if the item is inserted, returns 0 if out of memory or
+        bad arguments were passed.
+    */
+int  ListInsertItem (list_t list, void *ptrToItem, int itemPosition)
+{
+    return ListInsertItems (list, ptrToItem, itemPosition, 1);
+}
+
+/*******************************/
+
+int  ListInsertItems (list_t list, void *ptrToItems, int firstItemPosition, int numItemsToInsert)
+{
+    int numItems = (*list)->numItems;
+
+    if (firstItemPosition == numItems + 1)
+        firstItemPosition = LIST_END;
+    else
+    if (firstItemPosition > numItems)
+        return 0;
+
+    if ((*list)->numItems >= (*list)->listSize)
     {
-       if (!ExpandListSpace (list, -numItemsToInsert)) /* PATCH to 4.0.1 - jag 8-29-96 */\r
-            return 0;\r
-\r    }
+       if (!ExpandListSpace (list, -numItemsToInsert)) /* PATCH to 4.0.1 - jag 8-29-96 */
+            return 0;
+    }
 
-    if (firstItemPosition == LIST_START)\r
+    if (firstItemPosition == LIST_START)
     {
-        if (numItems == 0)\r
-           firstItemPosition = LIST_END; /* special case for empty list */\r
-        else\r
-           firstItemPosition = 1;\r
-\r    }
-
-    if (firstItemPosition == LIST_END)  /* add at the end of the list */\r
-        {\r
-        if (ptrToItems)\r
-            memcpy (ITEMPTR(list, numItems), ptrToItems, \r(*list)->itemSize * numItemsToInsert);
-        else\r
-            memset (ITEMPTR(list, numItems), 0,\r
-                (*list)->itemSize * numItemsToInsert);\r
-\r
-        (*list)->numItems += numItemsToInsert;\r
-        }\r
-    else \r
-        {                                  /* move part of list up to make room for new item */\r
-        memmove (ITEMPTR(list,firstItemPosition-1+numItemsToInsert),\r
-            ITEMPTR(list,firstItemPosition-1),\r
-            (numItems + 1 - firstItemPosition) * (*list)->itemSize);\r
-\r
-        if (ptrToItems)\r
-            memmove (ITEMPTR(list,firstItemPosition-1), ptrToItems,\r
-                (*list)->itemSize * numItemsToInsert);\r
-        else\r
-            memset (ITEMPTR(list,firstItemPosition-1), 0,\r
-                (*list)->itemSize * numItemsToInsert);\r
-\r
-        (*list)->numItems += numItemsToInsert;\r
-        }\r
-\r
-    return 1;\r
-}\r
-\r
-/*******************************/\r
-\r
-int  ListEqual (list_t list1, list_t list2)\r
-{\r
-    if (list1 == list2)\r
-        return 1;\r
-\r
-    if (list1 == NULL || list2 == NULL)\r
-        return 0;\r
-\r
-    if ((*list1)->itemSize == (*list1)->itemSize)\r
-        if ((*list1)->numItems == (*list2)->numItems)\r
-            return (memcmp (ITEMPTR(list1,0), ITEMPTR(list2,0),\r
-                (*list1)->itemSize * (*list1)->numItems) == 0);\r
-\r
-    return 0;\r
-}\r
-\r
-/*******************************/\r
-\r
-     /* The item pointed to by ptrToItem is copied over the current item at itemPosition */\r
-void  ListReplaceItem (list_t list, void *ptrToItem, int itemPosition)\r
-{\r
-    ListReplaceItems (list, ptrToItem, itemPosition, 1);\r
-}\r
-\r
-/*******************************/\r
-\r
-     /* The item pointed to by ptrToItems is copied over the current item at itemPosition */\r
-void  ListReplaceItems (list_t list, void *ptrToItems, int firstItemPosition, int numItemsToReplace)\r
-{\r
-    \r
-    if (firstItemPosition == LIST_END)\r
-        firstItemPosition = (*list)->numItems;\r
-    else\r
-    if (firstItemPosition == LIST_START)\r
-        firstItemPosition = 1;\r
-\r
-    memmove (ITEMPTR(list,firstItemPosition-1), ptrToItems,\r
-        (*list)->itemSize * numItemsToReplace);\r
-}\r
-\r
-/*******************************/\r
-\r
-void  ListRemoveItem (list_t list, void *itemDestination, int itemPosition)\r
-{\r
-    ListRemoveItems (list, itemDestination, itemPosition, 1);\r
-}\r
-\r
-/*******************************/\r
-\r
-void  ListRemoveItems (list_t list, void *itemsDestination, int firstItemPosition, int numItemsToRemove)\r
-{\r
-    int firstItemAfterChunk, numToMove;\r
-\r
-    if (firstItemPosition == LIST_START)\r
-        firstItemPosition = 1;\r
-    else\r
-    if (firstItemPosition == LIST_END)\r
-        firstItemPosition = (*list)->numItems;\r
-\r
-    if (itemsDestination != NULL)\r
-         memcpy (itemsDestination, ITEMPTR(list,firstItemPosition-1),\r
-            (*list)->itemSize * numItemsToRemove);\r
-\r
-    firstItemAfterChunk = firstItemPosition + numItemsToRemove;\r
-    numToMove = (*list)->numItems - (firstItemAfterChunk - 1);\r
-\r
-    if (numToMove > 0)  /* move part of list down to cover hole left by removed item */\r
-        memmove (ITEMPTR(list,firstItemPosition-1),\r
-                 ITEMPTR(list,firstItemAfterChunk-1),\r
-                 (*list)->itemSize * numToMove);\r
-\r
-    (*list)->numItems -= numItemsToRemove;\r
-}\r
-\r
-/*******************************/\r
-\r
-void  ListGetItem (list_t list, void *itemDestination, int itemPosition)\r
-{\r
-    ListGetItems (list, itemDestination, itemPosition, 1);\r
-}\r
-\r
-/*******************************/\r
-\r
-void  ListGetItems(list_t list, void *itemsDestination, int firstItemPosition, int numItemsToGet)\r
-{\r
-\r
-    if (firstItemPosition == LIST_START)\r
-        firstItemPosition = 1;\r
-    else    \r
-    if (firstItemPosition == LIST_END)\r
-        firstItemPosition = (*list)->numItems;\r
-\r
-    memcpy (itemsDestination, ITEMPTR(list,firstItemPosition-1),\r
-        (*list)->itemSize * numItemsToGet);\r
-}\r
-\r
-/*******************************/\r
-\r
-    /*  Returns a pointer to the item at itemPosition. returns null if an errors occurred.\r
-    */\r
-void *  ListGetPtrToItem (list_t list, int itemPosition)\r
-{\r
-    if (itemPosition == LIST_START)\r
-        itemPosition = 1;\r
-    else\r
-    if (itemPosition == LIST_END)\r
-        itemPosition = (*list)->numItems;\r
-\r
-    return ITEMPTR(list,itemPosition-1);\r
-}\r
-\r
-/*******************************/\r
-\r
-     /* returns a pointer the lists data (abstraction violation for optimization) */\r
-void *  ListGetDataPtr (list_t list)\r
-{\r
-    return &((*list)->itemList[0]);\r
-}\r
-\r
-/********************************/\r
-\r
-int  ListApplyToEach (list_t list, int ascending, ListApplicationFunc funcToApply, void *callbackData)\r
-{\r
-    int result = 0, index;\r
-\r
-    if (!list || !funcToApply)\r
-        goto Error;\r
-\r
-    if (ascending) \r
-        {\r
-        for (index = 1; index <= ListNumItems (list); index++) \r
-            {\r
-            result  = funcToApply (index, ListGetPtrToItem (list, index),\r
-                callbackData);\r
-            if (result < 0)\r
-                goto Error;\r
-            }\r
-        }\r
-    else \r
-        {\r
-        for (index = ListNumItems (list); index > 0 &&\r
-            index <= ListNumItems (list); index--) \r
-            {\r
-            result  = funcToApply (index, ListGetPtrToItem (list, index),\r
-                callbackData);\r
-            if (result < 0)\r
-                goto Error;\r
-            }\r
-        }\r
-\r
-Error:\r
-    return result;\r
-}\r
-\r
-/********************************/\r
-\r
-int  ListGetItemSize (list_t list)\r
-{\r
-    return (*list)->itemSize;\r
-}\r
-\r
-/********************************/\r
-\r
-int  ListNumItems (list_t list)\r
-{\r
-    return (*list)->numItems;\r
-}\r
-\r
-/*******************************/\r
-\r
-void  ListRemoveDuplicates (list_t list, CompareFunction compareFunction)\r
-{\r
-    int numItems, index, startIndexForFind, duplicatesIndex;\r
-\r
-    numItems = ListNumItems (list);\r
-\r
-    for (index = 1; index < numItems; index++) \r
-        {\r
-        startIndexForFind = index + 1;\r
-        while (startIndexForFind <= numItems) \r
-            {\r
-            duplicatesIndex = ListFindItem (list, ListGetPtrToItem (list, index),\r
-                startIndexForFind, compareFunction);\r
-            if (duplicatesIndex > 0) \r
-                {\r
-                ListRemoveItem (list, NULL, duplicatesIndex);\r
-                numItems--;\r
-                startIndexForFind = duplicatesIndex;\r
-                }\r
-             else\r
-                break;\r
-            }\r
-        }\r
-}\r
-
-/*******************************/\r
-
-\r
-/*******************************/\r
-\r
-int  ListFindItem (list_t list, void *ptrToItem, int startingPosition, CompareFunction compareFunction)\r
-{\r
-    int numItems, size, index, cmp;\r
-    void *listItemPtr;\r
-\r
-    if ((numItems = (*list)->numItems) == 0)\r
-        return 0;\r
-\r
-    size = (*list)->itemSize;\r
-\r
-    if (startingPosition == LIST_START)\r
-        startingPosition = 1;\r
-    else\r
-    if (startingPosition == LIST_END)\r
-        startingPosition = numItems;\r
-\r
-    for (index = startingPosition; index <= numItems; index++)\r
-        {\r
-        listItemPtr = ITEMPTR(list,index-1);\r
-        cmp = compareFunction ? compareFunction(ptrToItem, listItemPtr)\r
-                              : ListMemBlockCmp(ptrToItem, listItemPtr, size);\r
-        if (cmp == 0)\r
-            return index;\r
-        }\r
-\r
-    return 0;\r
-}\r
-\r
-/*******************************/\r
-\r
-int  ShortCompare(void *a, void *b)\r
-{\r
-    if (*(short *)a < *(short *)b) return -1;\r
-    if (*(short *)a > *(short *)b) return  1;\r
-    return 0;\r
-}\r
-\r
-/*******************************/\r
-\r
-int  IntCompare(void *a, void *b)\r
-{\r
-   if (*(int *)a < *(int *)b) return -1;\r
-   if (*(int *)a > *(int *)b) return  1;\r
-   return 0;\r
-}\r
-\r
-/*******************************/\r
-\r
-int  CStringCompare(void *a, void *b)\r
-{\r
-    return strcmp(*(char **)a, *(char **)b);\r
-}\r
-\r
-/*******************************/\r
-\r
-\r
-int  ListBinSearch (list_t list, void *ptrToItem, CompareFunction compareFunction)\r
-{\r
-    int index;\r
-\r
-    index = BinSearch (ITEMPTR(list,0), (int)(*list)->numItems,\r
-        (int)(*list)->itemSize, ptrToItem, compareFunction);\r
-\r
-    if (index >= 0)\r
-        index++;        /* lists start from 1 */\r
-    else\r
-        index = 0;      /* item not found */\r
-\r
-    return index;\r
-}\r
-\r
-/**************************************************************************/\r
-\r
-    /*  Reserves memory for numItems in the list. If it succeeds then\r
-        numItems items can be inserted without possibility of an\r
-        out of memory error (useful to simplify error recovery in\r
-        complex functions). Returns 1 if success, 0 if\r
-        out of memory.\r
-    */\r
-int  ListPreAllocate (list_t list, int numItems)\r
-{\r
-\r
-    if ((*list)->listSize - (*list)->numItems < numItems)\r
-        return ExpandListSpace (list,\r
-            numItems - ((*list)->listSize - (*list)->numItems));\r
-    else\r
-        return 1;    /* enough items are already pre-allocated */\r
-}\r
-\r
+        if (numItems == 0)
+           firstItemPosition = LIST_END; /* special case for empty list */
+        else
+           firstItemPosition = 1;
+    }
+
+    if (firstItemPosition == LIST_END)  /* add at the end of the list */
+        {
+        if (ptrToItems)
+            memcpy (ITEMPTR(list, numItems), ptrToItems, (*list)->itemSize * numItemsToInsert);
+        else
+            memset (ITEMPTR(list, numItems), 0,
+                (*list)->itemSize * numItemsToInsert);
+
+        (*list)->numItems += numItemsToInsert;
+        }
+    else
+        {                                  /* move part of list up to make room for new item */
+        memmove (ITEMPTR(list,firstItemPosition-1+numItemsToInsert),
+            ITEMPTR(list,firstItemPosition-1),
+            (numItems + 1 - firstItemPosition) * (*list)->itemSize);
+
+        if (ptrToItems)
+            memmove (ITEMPTR(list,firstItemPosition-1), ptrToItems,
+                (*list)->itemSize * numItemsToInsert);
+        else
+            memset (ITEMPTR(list,firstItemPosition-1), 0,
+                (*list)->itemSize * numItemsToInsert);
+
+        (*list)->numItems += numItemsToInsert;
+        }
+
+    return 1;
+}
+
+#ifdef CFG_ALL_LIST_FUNCTIONS
+
+/*******************************/
+
+int  ListEqual (list_t list1, list_t list2)
+{
+    if (list1 == list2)
+        return 1;
+
+    if (list1 == NULL || list2 == NULL)
+        return 0;
+
+    if ((*list1)->itemSize == (*list1)->itemSize)
+        if ((*list1)->numItems == (*list2)->numItems)
+            return (memcmp (ITEMPTR(list1,0), ITEMPTR(list2,0),
+                (*list1)->itemSize * (*list1)->numItems) == 0);
+
+    return 0;
+}
+
+/*******************************/
+
+     /* The item pointed to by ptrToItem is copied over the current item at itemPosition */
+void  ListReplaceItem (list_t list, void *ptrToItem, int itemPosition)
+{
+    ListReplaceItems (list, ptrToItem, itemPosition, 1);
+}
+
+/*******************************/
+
+     /* The item pointed to by ptrToItems is copied over the current item at itemPosition */
+void  ListReplaceItems (list_t list, void *ptrToItems, int firstItemPosition, int numItemsToReplace)
+{
+
+    if (firstItemPosition == LIST_END)
+        firstItemPosition = (*list)->numItems;
+    else
+    if (firstItemPosition == LIST_START)
+        firstItemPosition = 1;
+
+    memmove (ITEMPTR(list,firstItemPosition-1), ptrToItems,
+        (*list)->itemSize * numItemsToReplace);
+}
+
+/*******************************/
+
+void  ListRemoveItem (list_t list, void *itemDestination, int itemPosition)
+{
+    ListRemoveItems (list, itemDestination, itemPosition, 1);
+}
+
+/*******************************/
+
+void  ListRemoveItems (list_t list, void *itemsDestination, int firstItemPosition, int numItemsToRemove)
+{
+    int firstItemAfterChunk, numToMove;
+
+    if (firstItemPosition == LIST_START)
+        firstItemPosition = 1;
+    else
+    if (firstItemPosition == LIST_END)
+        firstItemPosition = (*list)->numItems;
+
+    if (itemsDestination != NULL)
+         memcpy (itemsDestination, ITEMPTR(list,firstItemPosition-1),
+            (*list)->itemSize * numItemsToRemove);
+
+    firstItemAfterChunk = firstItemPosition + numItemsToRemove;
+    numToMove = (*list)->numItems - (firstItemAfterChunk - 1);
+
+    if (numToMove > 0)  /* move part of list down to cover hole left by removed item */
+        memmove (ITEMPTR(list,firstItemPosition-1),
+                 ITEMPTR(list,firstItemAfterChunk-1),
+                 (*list)->itemSize * numToMove);
+
+    (*list)->numItems -= numItemsToRemove;
+}
+
+/*******************************/
+
+void  ListGetItem (list_t list, void *itemDestination, int itemPosition)
+{
+    ListGetItems (list, itemDestination, itemPosition, 1);
+}
+
+#endif /* CFG_ALL_LIST_FUNCTIONS */
+
+/*******************************/
+
+void  ListGetItems(list_t list, void *itemsDestination, int firstItemPosition, int numItemsToGet)
+{
+
+    if (firstItemPosition == LIST_START)
+        firstItemPosition = 1;
+    else
+    if (firstItemPosition == LIST_END)
+        firstItemPosition = (*list)->numItems;
+
+    memcpy (itemsDestination, ITEMPTR(list,firstItemPosition-1),
+        (*list)->itemSize * numItemsToGet);
+}
+
+/*******************************/
+
+    /*  Returns a pointer to the item at itemPosition. returns null if an errors occurred.
+    */
+void *  ListGetPtrToItem (list_t list, int itemPosition)
+{
+    if (itemPosition == LIST_START)
+        itemPosition = 1;
+    else
+    if (itemPosition == LIST_END)
+        itemPosition = (*list)->numItems;
+
+    return ITEMPTR(list,itemPosition-1);
+}
+
+/*******************************/
+
+     /* returns a pointer the lists data (abstraction violation for optimization) */
+void *  ListGetDataPtr (list_t list)
+{
+    return &((*list)->itemList[0]);
+}
+
+/********************************/
+
+#ifdef CFG_ALL_LIST_FUNCTIONS
+
+int  ListApplyToEach (list_t list, int ascending, ListApplicationFunc funcToApply, void *callbackData)
+{
+    int result = 0, index;
+
+    if (!list || !funcToApply)
+        goto Error;
+
+    if (ascending)
+        {
+        for (index = 1; index <= ListNumItems (list); index++)
+            {
+            result  = funcToApply (index, ListGetPtrToItem (list, index),
+                callbackData);
+            if (result < 0)
+                goto Error;
+            }
+        }
+    else
+        {
+        for (index = ListNumItems (list); index > 0 &&
+            index <= ListNumItems (list); index--)
+            {
+            result  = funcToApply (index, ListGetPtrToItem (list, index),
+                callbackData);
+            if (result < 0)
+                goto Error;
+            }
+        }
+
+Error:
+    return result;
+}
+
+#endif /* CFG_ALL_LIST_FUNCTIONS */
+
+/********************************/
+
+int  ListGetItemSize (list_t list)
+{
+    return (*list)->itemSize;
+}
+
+/********************************/
+
+int  ListNumItems (list_t list)
+{
+    return (*list)->numItems;
+}
+
+/*******************************/
+
+#ifdef CFG_ALL_LIST_FUNCTIONS
+
+void  ListRemoveDuplicates (list_t list, CompareFunction compareFunction)
+{
+    int numItems, index, startIndexForFind, duplicatesIndex;
+
+    numItems = ListNumItems (list);
+
+    for (index = 1; index < numItems; index++)
+        {
+        startIndexForFind = index + 1;
+        while (startIndexForFind <= numItems)
+            {
+            duplicatesIndex = ListFindItem (list, ListGetPtrToItem (list, index),
+                startIndexForFind, compareFunction);
+            if (duplicatesIndex > 0)
+                {
+                ListRemoveItem (list, NULL, duplicatesIndex);
+                numItems--;
+                startIndexForFind = duplicatesIndex;
+                }
+             else
+                break;
+            }
+        }
+}
+
+/*******************************/
+
+
+/*******************************/
+
+int  ListFindItem (list_t list, void *ptrToItem, int startingPosition, CompareFunction compareFunction)
+{
+    int numItems, size, index, cmp;
+    void *listItemPtr;
+
+    if ((numItems = (*list)->numItems) == 0)
+        return 0;
+
+    size = (*list)->itemSize;
+
+    if (startingPosition == LIST_START)
+        startingPosition = 1;
+    else
+    if (startingPosition == LIST_END)
+        startingPosition = numItems;
+
+    for (index = startingPosition; index <= numItems; index++)
+        {
+        listItemPtr = ITEMPTR(list,index-1);
+        cmp = compareFunction ? compareFunction(ptrToItem, listItemPtr)
+                              : ListMemBlockCmp(ptrToItem, listItemPtr, size);
+        if (cmp == 0)
+            return index;
+        }
+
+    return 0;
+}
+
+/*******************************/
+
+int  ShortCompare(void *a, void *b)
+{
+    if (*(short *)a < *(short *)b) return -1;
+    if (*(short *)a > *(short *)b) return  1;
+    return 0;
+}
+
+/*******************************/
+
+int  IntCompare(void *a, void *b)
+{
+   if (*(int *)a < *(int *)b) return -1;
+   if (*(int *)a > *(int *)b) return  1;
+   return 0;
+}
+
+/*******************************/
+
+int  CStringCompare(void *a, void *b)
+{
+    return strcmp(*(char **)a, *(char **)b);
+}
+
+/*******************************/
+
+
+int  ListBinSearch (list_t list, void *ptrToItem, CompareFunction compareFunction)
+{
+    int index;
+
+    index = BinSearch (ITEMPTR(list,0), (int)(*list)->numItems,
+        (int)(*list)->itemSize, ptrToItem, compareFunction);
+
+    if (index >= 0)
+        index++;        /* lists start from 1 */
+    else
+        index = 0;      /* item not found */
+
+    return index;
+}
+
+/**************************************************************************/
+
+    /*  Reserves memory for numItems in the list. If it succeeds then
+        numItems items can be inserted without possibility of an
+        out of memory error (useful to simplify error recovery in
+        complex functions). Returns 1 if success, 0 if
+        out of memory.
+    */
+int  ListPreAllocate (list_t list, int numItems)
+{
+
+    if ((*list)->listSize - (*list)->numItems < numItems)
+        return ExpandListSpace (list,
+            numItems - ((*list)->listSize - (*list)->numItems));
+    else
+        return 1;    /* enough items are already pre-allocated */
+}
+
+#endif /* CFG_ALL_LIST_FUNCTIONS */
diff --git a/doc/README.console b/doc/README.console
new file mode 100644 (file)
index 0000000..43b3765
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+ * (C) Copyright 2000
+ * Paolo Scaffardi, AIRVENT SAM s.p.a - RIMINI(ITALY), arsenio@tin.it
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+PPCBoot console handling
+========================
+
+HOW THE CONSOLE WORKS?
+----------------------
+
+At system startup PPCBoot initializes a serial console. When PPCBoot
+relocates itself to RAM, all console drivers are initialized (they
+will register all detected console devices to the system for further
+use).
+
+If not defined in the environment, the first input device is assigned
+to the 'stdin' file, the first output one to 'stdout' and 'stderr'.
+
+You can use the command "coninfo" to see all registered console
+devices and their flags. You can assign a standard file (stdin,
+stdout or stderr) to any device you see in that list simply by
+assigning its name to the corresponding environment variable. For
+example:
+
+    setenv stdin wl_kbd                <- To use the wireless keyboard
+    setenv stdout video                <- To use the video console
+
+Do a simple "saveenv" to save the console settings in the environment
+and get them working on the next startup, too.
+
+HOW CAN I USE STANDARD FILE INTO THE SOURCES?
+---------------------------------------------
+
+You can use the following functions to access the console:
+
+* STDOUT:
+    putc       (to put a char to stdout)
+    puts       (to put a string to stdout)
+    printf     (to format and put a string to stdout)
+
+* STDIN:
+    tstc       (to test for the presence of a char in stdin)
+    getc       (to get a char from stdin)
+
+* STDERR:
+    eputc      (to put a char to stderr)
+    eputs      (to put a string to stderr)
+    eprintf    (to format and put a string to stderr)
+
+* FILE (can be 'stdin', 'stdout', 'stderr'):
+    fputc      (like putc but redirected to a file)
+    fputs      (like puts but redirected to a file)
+    fprintf    (like printf but redirected to a file)
+    ftstc      (like tstc but redirected to a file)
+    fgetc      (like getc but redirected to a file)
+
+Remember that all FILE-related functions CANNOT be used before
+PPCBoot relocation (done in 'board_init_r' in common/board.c).
+
+HOW CAN I USE STANDARD FILE INTO APPLICATIONS?
+----------------------------------------------
+
+Use the 'bd_mon_fnc' field of the bd_t structure passed to the
+application to do everything you want with the console.
+
+But REMEMBER that that will work only if you have not overwritten any
+PPCBoot code while loading (or uncompressing) the image of your
+application.
+
+For example, you won't get the console stuff running in the Linux
+kernel because the kernel overwrites PPCBoot before running. Only
+some parameters like the framebuffer descriptors are passed to the
+kernel in the high memory area to let the applications (the kernel)
+use the framebuffers initialized by PPCBoot.
+
+SUPPORTED DRIVERS
+-----------------
+
+Working drivers:
+
+    serial     (architecture dependent serial stuff)
+    video      (mpc8xx video controller)
+
+Work in progress:
+
+    wl_kbd     (Wireless 4PPM keyboard)
+
+Waiting for volounteers:
+
+    lcd        (mpc8xx lcd controller; to )
+
+TESTED CONFIGURATIONS
+---------------------
+
+The driver has been tested with the following configurations (see
+CREDITS for other contact informations):
+
+- MPC823FADS with AD7176 on a PAL TV (YCbYCr)  - arsenio@tin.it
+- GENIETV    with AD7177 on a PAL TV (YCbYCr)  - arsenio@tin.it
similarity index 83%
rename from README.video
rename to doc/README.video
index 23565078e84479caf88a250ac08a13c95443ea9f..f218fc8778a21620e993707c3f9cffa1674cddea 100644 (file)
@@ -24,7 +24,7 @@
 PPCBOOT MPC8xx video controller driver
 ======================================
 
-The driver has been tested with these configurations:
+The driver has been tested with the following configurations:
 
-- MPC823FADS with AD7176 on a PAL TV (YCbYCr)
-- GENIETV with AD7177 on a PAL TV (YCbYCr)
+- MPC823FADS with AD7176 on a PAL TV (YCbYCr)  - arsenio@tin.it
+- GENIETV    with AD7177 on a PAL TV (YCbYCr)  - arsenio@tin.it
index 70ff37b0d79c1771f6d7c0a56b8fbfb5ccba9d8e..513eae65558b831397e4a03dd01b14fff93505e0 100644 (file)
 
 /* ------------------------------------------------------------------------- */
 
-#ifdef CFG_PCMCIA_MEM_ADDR
-volatile unsigned char *pcmcia_mem = (unsigned char*)CFG_PCMCIA_MEM_ADDR;
-#endif
-
-/* ------------------------------------------------------------------------- */
-
 #define        _NOT_USED_      0xFFFFFFFF
 
 #if defined(CONFIG_DRAM_50MHZ)
@@ -273,19 +267,6 @@ int checkboard (void)
        return 0;
 }
 
-/* ------------------------------------------------------------------------- */
-
-/*
- * Check Size of FLASH memory
- */
-int checkflash (void)
-{
-    /* TODO: XXX XXX XXX */
-    printf ("8 MB ## Test not implemented yet ##\n");
-
-    return (0);
-}
-
 /* ------------------------------------------------------------------------- */
 int _draminit(uint base, uint noMbytes, uint edo, uint delay)
 {
@@ -596,86 +577,6 @@ int initsdram(uint base, uint *noMbytes)
        }
 }
 
-void initflash(uint *noMbytes, uint *delay)
-{
-       volatile immap_t     *immap = (immap_t *)CFG_IMMR;
-       volatile memctl8xx_t *memctl = &immap->im_memctl;
-
-       uint k, m;
-
-       k = *((uint *)BCSR2) >> 28;
-
-       switch(k)
-       {
-#ifdef CONFIG_FADS
-               /* "SM732A2000 / SM73228" */
-               case 0x04 :
-                       m = 8;
-                       break;
-               /* "SM732A1000A / SM73218" */
-               case 0x05 :
-                       m = 4;
-                       break;
-#endif
-               /* "MCM29080" */
-               case 0x06 :
-                       m = 8;
-                       break;
-               /* "MCM29040" */
-               case 0x07 :
-                       m = 4;
-                       break;
-               /* "MCM29020" */
-               case 0x08 :
-                       m = 2;
-                       break;
-#ifdef CONFIG_ADS
-               /* "SM732A1000A" */
-               case 0x0a :
-                       m = 4;
-                       break;
-               /* "SM732A2000" */
-               case 0x0b :
-                       m = 8;
-                       break;
-#endif
-               default :
-                       printf("unknown flashsize (0x%x) - defaulting to 2 Mbyte", k);
-                       m = 2;
-                       break;
-       }
-
-       k = (*((uint *)BCSR3) >> 20) & 0x07;
-
-       switch(k)
-       {
-               case 0x01 :
-                       k = 150;
-                       break;
-               case 0x02 :
-                       k = 120;
-                       break;
-               case 0x03 :
-                       k = 90;
-                       break;
-               default :
-                       printf("unknown flashdelay(0x%x) - defaulting to 150 ns", k);
-                       k = 150;
-                       break;
-       }
-
-       /* we're supposed to set the correct number of waitstates
-       * but today we just set it to maximum, no hurry */
-
-       /* set or0 to the correct size */
-
-       memctl->memc_or0 = ~((m << 20) - 1) | 0xdf4;
-
-       *noMbytes = m;
-       *delay = k;
-
-}
-
 long int initdram (int board_type)
 {
        uint base = (unsigned long)0x00400000;
@@ -776,6 +677,12 @@ int testdram (void)
     return (0);
 }
 
+#ifdef CONFIG_PCMCIA
+
+#ifdef CFG_PCMCIA_MEM_ADDR
+volatile unsigned char *pcmcia_mem = (unsigned char*)CFG_PCMCIA_MEM_ADDR;
+#endif
+
 int pcmcia_init(void)
 {
        volatile pcmconf8xx_t   *pcmp;
@@ -912,3 +819,5 @@ int pcmcia_init(void)
 
        return 0;
 }
+
+#endif /* CONFIG_PCMCIA */
index e93e1c6f78e536665878b7bfbf7b3392f2c109c4..57fae799e2ecd34c23f0e26bcdd17a9c0525eac8 100644 (file)
@@ -50,77 +50,26 @@ static int  flash_protect (int flag, ulong from, ulong to, flash_info_t *info);
 
 unsigned long flash_init (void)
 {
-       volatile immap_t     *immap  = (immap_t *)CFG_IMMR;
-       volatile memctl8xx_t *memctl = &immap->im_memctl;
        unsigned long size_b0, size_b1;
        int i;
 
        /* Init: no FLASHes known */
        for (i=0; i < CFG_MAX_FLASH_BANKS; ++i)
-       {
-               flash_info[i].flash_id = FLASH_UNKNOWN;
-       }
-
-       /* Static FLASH Bank configuration here - FIXME XXX */
+           flash_info[i].flash_id = FLASH_UNKNOWN;
 
-       size_b0 = flash_get_size((vu_long *)FLASH_BASE0_PRELIM, &flash_info[0]);
-
-       if (flash_info[0].flash_id == FLASH_UNKNOWN)
-       {
-               printf ("## Unknown FLASH on Bank 0 - Size = 0x%08lx = %ld MB\n",size_b0, size_b0<<20);
-       }
-
-       if (FLASH_BASE1_PRELIM != 0x0) {
-               size_b1 = flash_get_size((vu_long *)FLASH_BASE1_PRELIM, &flash_info[1]);
-
-               if (size_b1 > size_b0) {
-                       printf ("## ERROR: Bank 1 (0x%08lx = %ld MB) > Bank 0 (0x%08lx = %ld MB)\n",size_b1, size_b1<<20,size_b0, size_b0<<20);
-
-                       flash_info[0].flash_id  = FLASH_UNKNOWN;
-                       flash_info[1].flash_id  = FLASH_UNKNOWN;
-                       flash_info[0].sector_count      = -1;
-                       flash_info[1].sector_count      = -1;
-                       flash_info[0].size              = 0;
-                       flash_info[1].size              = 0;
-                       return (0);
-               }
-       } else {
-               size_b1 = 0;
-       }
-
-       /* Remap FLASH according to real size */
-    memctl->memc_or0 = CFG_OR0_PRELIM;
-    memctl->memc_br0 = CFG_BR0_PRELIM;
-
-       /* Re-do sizing to get full correct info */
+       /* Detect size */
        size_b0 = flash_get_size((vu_long *)CFG_FLASH_BASE, &flash_info[0]);
 
+       /* Setup offsets */
        flash_get_offsets (CFG_FLASH_BASE, &flash_info[0]);
 
-       /* monitor protection ON by default */
+       /* Monitor protection ON by default */
        (void)flash_protect(FLAG_PROTECT_SET, CFG_FLASH_BASE,CFG_FLASH_BASE+CFG_MONITOR_LEN-1, &flash_info[0]);
 
-       if (size_b1)
-       {
-               memctl->memc_or1 = CFG_OR1_PRELIM;
-               memctl->memc_br1 = CFG_BR1_PRELIM;
-
-               /* Re-do sizing to get full correct info */
-               size_b1 = flash_get_size((vu_long *)(CFG_FLASH_BASE + size_b0), &flash_info[1]);
-
-               flash_get_offsets (CFG_FLASH_BASE + size_b0, &flash_info[1]);
-
-               /* monitor protection ON by default */
-               (void)flash_protect(FLAG_PROTECT_SET, CFG_FLASH_BASE, CFG_FLASH_BASE+CFG_MONITOR_LEN-1, &flash_info[1]);
-       }
-       else
-       {
-           memctl->memc_or1 = CFG_OR1_PRELIM;
-               memctl->memc_br1 = CFG_BR1_PRELIM;
-
-               flash_info[1].flash_id = FLASH_UNKNOWN;
-               flash_info[1].sector_count = -1;
-       }
+       size_b1 = 0 ;
+       
+       flash_info[1].flash_id = FLASH_UNKNOWN;
+       flash_info[1].sector_count = -1;
 
        flash_info[0].size = size_b0;
        flash_info[1].size = size_b1;
@@ -189,7 +138,8 @@ static int  flash_protect (int flag, ulong from, ulong to, flash_info_t *info)
 
 
 /*-----------------------------------------------------------------------
- */
+ * Fix this to support variable sector sizes 
+*/
 static void flash_get_offsets (ulong base, flash_info_t *info)
 {
        int i;
@@ -199,18 +149,14 @@ static void flash_get_offsets (ulong base, flash_info_t *info)
        {
                /* set sector offsets for bottom boot block type        */
                for (i = 0; i < info->sector_count; i++)
-               {
-                       info->start[i] = base + (i * 0x00040000);
-               }
+                       info->start[i] = base + (i * 0x00010000);
        }
        else
        {
                /* set sector offsets for top boot block type           */
                i = info->sector_count - 1;
                for (; i >= 0; i--)
-               {
-                       info->start[i] = base + i * 0x00040000;
-               }
+                       info->start[i] = base + i * 0x00010000;
        }
 
 }
@@ -223,7 +169,7 @@ void flash_print_info  (flash_info_t *info)
 
        if (info->flash_id == FLASH_UNKNOWN)
        {
-               printf ("missing or unknown FLASH type\n");
+               puts ("missing or unknown FLASH type\n");
                return;
        }
 
@@ -260,27 +206,25 @@ void flash_print_info  (flash_info_t *info)
                                        break;
        }
 
-       printf ("  Size: %ld MB in %d Sectors\n",info->size >> 20, info->sector_count);
-
-       printf ("  Sector Start Addresses:");
+       if (info->size >> 20)
+           printf ("  Size: %ld MB in %d Sectors\n",info->size >> 20, info->sector_count);
+       else
+           printf ("  Size: %ld KB in %d Sectors\n",info->size >> 10, info->sector_count);
+       
+       puts ("  Sector Start Addresses:");
 
        for (i=0; i<info->sector_count; ++i)
        {
                if ((i % 5) == 0)
                {
-                       printf ("\n   ");
+                       puts ("\n   ");
                }
 
                printf (" %08lX%s",     info->start[i],info->protect[i] ? " (RO)" : "     "     );
        }
 
-       printf ("\n");
+       putc ('\n');
 }
-
-/*-----------------------------------------------------------------------
- */
-
-
 /*-----------------------------------------------------------------------
  */
 
@@ -291,27 +235,30 @@ void flash_print_info  (flash_info_t *info)
 ulong flash_get_size (vu_long *addr, flash_info_t *info)
 {
        short i;
-#if 0
-       ulong base = (ulong)addr;
-#endif
-       uchar value;
+       volatile unsigned char *caddr;
+       char value;
 
+       caddr = (volatile unsigned char *)addr ;
+       
        /* Write auto select command: read Manufacturer ID */
+
 #if 0
-       addr[0x0555] = 0x00AA00AA;
-       addr[0x02AA] = 0x00550055;
-       addr[0x0555] = 0x00900090;
-#else
-       addr[0x0555] = 0xAAAAAAAA;
-       addr[0x02AA] = 0x55555555;
-       addr[0x0555] = 0x90909090;
+       printf("Base address is: %08x\n", caddr);
 #endif
 
-       value = addr[0];
+       caddr[0x0555] = 0xAA;
+       caddr[0x02AA] = 0x55;
+       caddr[0x0555] = 0x90;
+
+       value = caddr[0];
 
+#if 0
+       printf("Manufact ID: %02x\n", value);
+#endif
        switch (value)
        {
-               case AMD_MANUFACT:case 0x01:
+               case 0x01:
+               case AMD_MANUFACT:
                        info->flash_id = FLASH_MAN_AMD;
                break;
 
@@ -326,102 +273,33 @@ ulong flash_get_size (vu_long *addr, flash_info_t *info)
                        break;
        }
 
-       value = addr[1];                        /* device ID            */
-
+       value = caddr[1];                       /* device ID            */
+#if 0
+       printf("Device ID: %02x\n", value);
+#endif
        switch (value)
        {
-               case AMD_ID_F040B:
+               case AMD_ID_LV040B:             
                        info->flash_id += FLASH_AM040B;
                        info->sector_count = 8;
-                       info->size = 0x00200000;
-                       break;                          /* => 2 MB              */
-
-               case AMD_ID_LV400T:
-                       info->flash_id += FLASH_AM400T;
-                       info->sector_count = 11;
-                       info->size = 0x00100000;
-                       break;                          /* => 1 MB              */
-
-               case AMD_ID_LV400B:
-                       info->flash_id += FLASH_AM400B;
-                       info->sector_count = 11;
-                       info->size = 0x00100000;
-                       break;                          /* => 1 MB              */
-
-               case AMD_ID_LV800T:
-                       info->flash_id += FLASH_AM800T;
-                       info->sector_count = 19;
-                       info->size = 0x00200000;
-                       break;                          /* => 2 MB              */
-
-               case AMD_ID_LV800B:
-                       info->flash_id += FLASH_AM800B;
-                       info->sector_count = 19;
-                       info->size = 0x00200000;
-                       break;                          /* => 2 MB              */
-
-               case AMD_ID_LV160T:
-                       info->flash_id += FLASH_AM160T;
-                       info->sector_count = 35;
-                       info->size = 0x00400000;
-                       break;                          /* => 4 MB              */
-
-               case AMD_ID_LV160B:
-                       info->flash_id += FLASH_AM160B;
-                       info->sector_count = 35;
-                       info->size = 0x00400000;
-                       break;                          /* => 4 MB              */
-#if 0  /* enable when device IDs are available */
-               case AMD_ID_LV320T:
-                       info->flash_id += FLASH_AM320T;
-                       info->sector_count = 67;
-                       info->size = 0x00800000;
-                       break;                          /* => 8 MB              */
-
-               case AMD_ID_LV320B:
-                       info->flash_id += FLASH_AM320B;
-                       info->sector_count = 67;
-                       info->size = 0x00800000;
-                       break;                          /* => 8 MB              */
-#endif
+                       info->size = 0x00080000;
+                       break;                          /* => 512Kb             */
+    
                default:
                        info->flash_id = FLASH_UNKNOWN;
                        return (0);                     /* => no or unknown flash */
 
        }
 
-#if 0
-       /* set up sector start adress table */
-       if (info->flash_id & FLASH_BTYPE) {
-               /* set sector offsets for bottom boot block type        */
-               info->start[0] = base + 0x00000000;
-               info->start[1] = base + 0x00008000;
-               info->start[2] = base + 0x0000C000;
-               info->start[3] = base + 0x00010000;
-               for (i = 4; i < info->sector_count; i++) {
-                       info->start[i] = base + (i * 0x00020000) - 0x00060000;
-               }
-       } else {
-               /* set sector offsets for top boot block type           */
-               i = info->sector_count - 1;
-               info->start[i--] = base + info->size - 0x00008000;
-               info->start[i--] = base + info->size - 0x0000C000;
-               info->start[i--] = base + info->size - 0x00010000;
-               for (; i >= 0; i--) {
-                       info->start[i] = base + i * 0x00020000;
-               }
-       }
-#else
        flash_get_offsets ((ulong)addr, &flash_info[0]);
-#endif
 
        /* check for protected sectors */
        for (i = 0; i < info->sector_count; i++)
        {
                /* read sector protection at sector address, (A7 .. A0) = 0x02 */
                /* D0 = 1 if protected */
-               addr = (volatile unsigned long *)(info->start[i]);
-               info->protect[i] = addr[2] & 1;
+               caddr = (volatile unsigned char *)(info->start[i]);
+               info->protect[i] = caddr[2] & 1;
        }
 
        /*
@@ -429,12 +307,8 @@ ulong flash_get_size (vu_long *addr, flash_info_t *info)
         */
        if (info->flash_id != FLASH_UNKNOWN)
        {
-               addr = (volatile unsigned long *)info->start[0];
-#if 0
-               *addr = 0x00F000F0;     /* reset bank */
-#else
-               *addr = 0xF0F0F0F0;     /* reset bank */
-#endif
+               caddr = (volatile unsigned char *)info->start[0];
+               *caddr = 0xF0;  /* reset bank */
        }
 
        return (info->size);
@@ -446,7 +320,7 @@ ulong flash_get_size (vu_long *addr, flash_info_t *info)
 
 void   flash_erase (flash_info_t *info, int s_first, int s_last)
 {
-       vu_long *addr = (vu_long*)(info->start[0]);
+       volatile unsigned char *addr = (volatile unsigned char *)(info->start[0]);
        int flag, prot, sect, l_sect;
        ulong start, now, last;
 
@@ -484,29 +358,17 @@ void      flash_erase (flash_info_t *info, int s_first, int s_last)
        /* Disable interrupts which might cause a timeout here */
        flag = disable_interrupts();
 
-#if 0
-       addr[0x0555] = 0x00AA00AA;
-       addr[0x02AA] = 0x00550055;
-       addr[0x0555] = 0x00800080;
-       addr[0x0555] = 0x00AA00AA;
-       addr[0x02AA] = 0x00550055;
-#else
-       addr[0x0555] = 0xAAAAAAAA;
-       addr[0x02AA] = 0x55555555;
-       addr[0x0555] = 0x80808080;
-       addr[0x0555] = 0xAAAAAAAA;
-       addr[0x02AA] = 0x55555555;
-#endif
+       addr[0x0555] = 0xAA;
+       addr[0x02AA] = 0x55;
+       addr[0x0555] = 0x80;
+       addr[0x0555] = 0xAA;
+       addr[0x02AA] = 0x55;
 
        /* Start erase on unprotected sectors */
        for (sect = s_first; sect<=s_last; sect++) {
                if (info->protect[sect] == 0) { /* not protected */
-                       addr = (vu_long*)(info->start[sect]);
-#if 0
-                       addr[0] = 0x00300030;
-#else
-                       addr[0] = 0x30303030;
-#endif
+                       addr = (volatile unsigned char *)(info->start[sect]);
+                       addr[0] = 0x30;
                        l_sect = sect;
                }
        }
@@ -526,12 +388,9 @@ void       flash_erase (flash_info_t *info, int s_first, int s_last)
 
        start = get_timer (0);
        last  = start;
-       addr = (vu_long*)(info->start[l_sect]);
-#if 0
-       while ((addr[0] & 0x00800080) != 0x00800080)
-#else
-       while ((addr[0] & 0xFFFFFFFF) != 0xFFFFFFFF)
-#endif
+       addr = (volatile unsigned char *)(info->start[l_sect]);
+
+       while ((addr[0] & 0xFF) != 0xFF)
        {
                if ((now = get_timer(start)) > CFG_FLASH_ERASE_TOUT) {
                        printf ("Timeout\n");
@@ -539,19 +398,16 @@ void      flash_erase (flash_info_t *info, int s_first, int s_last)
                }
                /* show that we're waiting */
                if ((now - last) > 1000) {      /* every second */
-                       serial_putc ('.');
+                       putc ('.');
                        last = now;
                }
        }
 
 DONE:
        /* reset to read mode */
-       addr = (volatile unsigned long *)info->start[0];
-#if 0
-       addr[0] = 0x00F000F0;   /* reset bank */
-#else
-       addr[0] = 0xF0F0F0F0;   /* reset bank */
-#endif
+       addr = (volatile unsigned char *)info->start[0];
+
+       addr[0] = 0xF0; /* reset bank */
 
        printf (" done\n");
 }
@@ -710,44 +566,45 @@ static int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
  */
 static int write_word (flash_info_t *info, ulong dest, ulong data)
 {
-       vu_long *addr = (vu_long*)(info->start[0]);
+       volatile unsigned char *addr = (volatile unsigned char*)(info->start[0]),
+                               *cdest,*cdata;
        ulong start;
-       int flag;
+       int flag, count = 4 ;
+
+       cdest = (volatile unsigned char *)dest ;
+       cdata = (volatile unsigned char *)&data ;
 
        /* Check if Flash is (sufficiently) erased */
        if ((*((vu_long *)dest) & data) != data) {
                return (2);
        }
-       /* Disable interrupts which might cause a timeout here */
-       flag = disable_interrupts();
 
-#if 0
-       addr[0x0555] = 0x00AA00AA;
-       addr[0x02AA] = 0x00550055;
-       addr[0x0555] = 0x00A000A0;
-#else
-       addr[0x0555] = 0xAAAAAAAA;
-       addr[0x02AA] = 0x55555555;
-       addr[0x0555] = 0xA0A0A0A0;
-#endif
+       while(count--)
+       {
+           /* Disable interrupts which might cause a timeout here */
+           flag = disable_interrupts();
 
-       *((vu_long *)dest) = data;
+           addr[0x0555] = 0xAA;
+           addr[0x02AA] = 0x55;
+           addr[0x0555] = 0xA0;
 
-       /* re-enable interrupts if necessary */
-       if (flag)
-               enable_interrupts();
+           *cdest = *cdata;
 
-       /* data polling for D7 */
-       start = get_timer (0);
-#if 0
-       while ((*((vu_long *)dest) & 0x00800080) != (data & 0x00800080))
-#else
-       while ((*((vu_long *)dest) & 0x80808080) != (data & 0x80808080))
-#endif
-       {
+           /* re-enable interrupts if necessary */
+           if (flag)
+               enable_interrupts();
+
+           /* data polling for D7 */
+           start = get_timer (0);
+           while ((*cdest ^ *cdata) & 0x80)
+           {
                if (get_timer(start) > CFG_FLASH_WRITE_TOUT) {
                        return (1);
                }
+           }
+           
+           cdata++ ;
+           cdest++ ;
        }
        return (0);
 }
index a00ff1ecd0f39d61691da76812a616dab8adfed9..803fea931a0f43b932113d1973a00328ebdf60d7 100644 (file)
@@ -102,6 +102,18 @@ int checkboard (void)
     return 0;
 }
 
+#if 0
+static void PrintState(void)
+{
+    volatile immap_t     *im  = (immap_t *)CFG_IMMR;
+    volatile memctl8xx_t *memctl = &im->im_memctl;
+
+    printf("\n0 - FLASH: B=%08x O=%08x", memctl->memc_br0, memctl->memc_or0);
+    printf("\n1 - SDRAM: B=%08x O=%08x", memctl->memc_br1, memctl->memc_or1);
+    printf("\n2 - SDRAM: B=%08x O=%08x", memctl->memc_br2, memctl->memc_or2);
+}
+#endif
+
 /* ------------------------------------------------------------------------- */
 
 long int initdram (int board_type)
@@ -125,11 +137,10 @@ long int initdram (int board_type)
      * with two SDRAM banks or four cycles every 31.2 us with one
      * bank. It will be adjusted after memory sizing.
      */
-    memctl->memc_mptpr = CFG_MPTPR_2BK_4K;
+    memctl->memc_mptpr = CFG_MPTPR_2BK_4K ;
 
     memctl->memc_mbmr = CFG_MBMR_8COL;
 
-    printf ("\nConfiguring UPMB...");
     upmconfig(UPMB, (uint *)sdram_table, sizeof(sdram_table)/sizeof(uint));
 
     /*
@@ -137,48 +148,47 @@ long int initdram (int board_type)
      * preliminary addresses - these have to be modified after the
      * SDRAM size has been determined.
      */
-    memctl->memc_or1 = CFG_OR1_PRELIM;
-    memctl->memc_br1 = CFG_BR1_PRELIM;
 
-    memctl->memc_or2 = CFG_OR2_PRELIM;
-    memctl->memc_br2 = CFG_BR2_PRELIM;
+    memctl->memc_or1 = 0xF0000000 | CFG_OR_TIMING_SDRAM;
+    memctl->memc_br1 = ((SDRAM_BASE1_PRELIM & BR_BA_MSK) | BR_MS_UPMB | BR_V);
+
+    memctl->memc_or2 = 0xF0000000 | CFG_OR_TIMING_SDRAM;
+    memctl->memc_br2 = ((SDRAM_BASE2_PRELIM & BR_BA_MSK) | BR_MS_UPMB | BR_V);
 
-    /* perform SDRAM initializsation sequence */
+    /* perform SDRAM initialization sequence */
     memctl->memc_mar  = 0x00000088;
 
     memctl->memc_mcr  = 0x80802105;    /* SDRAM bank 0 */
 
     memctl->memc_mcr  = 0x80804105;    /* SDRAM bank 1 */
 
-    memctl->memc_mcr  = 0x80802230;    /* SDRAM bank 0 - execute twice */
+    // Execute refresh 8 times
+    memctl->memc_mbmr = (CFG_MBMR_8COL & ~MAMR_TLFB_MSK) | MAMR_TLFB_8X ;      
+
+    memctl->memc_mcr  = 0x80802130;    /* SDRAM bank 0 - execute twice */
+
+    memctl->memc_mcr  = 0x80804130;    /* SDRAM bank 1 - execute twice */
 
-    memctl->memc_mcr  = 0x80804230;    /* SDRAM bank 1 - execute twice */
+    // Execute refresh 4 times
+    memctl->memc_mbmr = CFG_MBMR_8COL;
 
     /*
      * Check Bank 0 Memory Size for re-configuration
      *
      * try 8 column mode
      */
-    printf ("\nChecking bank1...");
+
+#if 0
+    PrintState();
+#endif
+//    printf ("\nChecking bank1...");
     size8 = dram_size (CFG_MBMR_8COL, (ulong *)SDRAM_BASE1_PRELIM, SDRAM_MAX_SIZE);
 
     size_b0 = size8 ;
-    memctl->memc_mbmr = CFG_MBMR_8COL;
 
-    printf ("\nChecking bank2...");
+//    printf ("\nChecking bank2...");
     size_b1 = dram_size (memctl->memc_mbmr, (ulong *)SDRAM_BASE2_PRELIM,SDRAM_MAX_SIZE);
 
-    /*
-     * Adjust refresh rate depending on SDRAM type, both banks
-     * For types > 128 MBit leave it at the current (fast) rate
-     */
-    if ((size_b0 < 0x02000000) && (size_b1 < 0x02000000))
-    {
-       printf("\nReducing refresh rate!");
-       /* reduce to 15.6 us (62.4 us / quad) */
-       memctl->memc_mptpr = CFG_MPTPR_2BK_4K;
-    }
-
     /*
      * Final mapping: map bigger bank first
      */
@@ -192,22 +202,19 @@ long int initdram (int board_type)
          * Position Bank 1 immediately above Bank 0
          */
         memctl->memc_or2 = ((-size_b1) & 0xFFFF0000) | CFG_OR_TIMING_SDRAM;
-        memctl->memc_br2 = ((CFG_SDRAM_BASE & BR_BA_MSK) | BR_MS_UPMB | BR_V) + size_b0;
+        memctl->memc_br2 = ((CFG_SDRAM_BASE & BR_BA_MSK) | BR_MS_UPMB | BR_V) + 
+                          (size_b0 & BR_BA_MSK);
     }
        else
     {
-        unsigned long reg;
         /*
          * No bank 1
          *
          * invalidate bank
          */
-         memctl->memc_br2 = 0;
-
+        memctl->memc_br2 = 0;
        /* adjust refresh rate depending on SDRAM type, one bank */
-       reg = memctl->memc_mptpr;
-       reg >>= 1;      /* reduce to CFG_MPTPR_1BK_8K / _4K */
-       memctl->memc_mptpr = reg;
+       memctl->memc_mptpr = CFG_MPTPR_1BK_4K;
     }
 
     // If no memory detected, disable SDRAM
@@ -217,9 +224,12 @@ long int initdram (int board_type)
        // Disable SDRAM - PA7 = 1
        im->im_ioport.iop_padat &= ~CFG_PA7 ;   // value of PA7
     }
-       else
-    printf("done! (%08lx)\n", size_b0 + size_b1);
+//     else
+//    printf("done! (%08lx)\n", size_b0 + size_b1);
 
+#if 0
+    PrintState();
+#endif
     return (size_b0 + size_b1);
 }
 
@@ -235,12 +245,10 @@ long int initdram (int board_type)
 
 static long int dram_size (long int mbmr_value, long int *base, long int maxsize)
 {
-    volatile immap_t     *immap  = (immap_t *)CFG_IMMR;
-    volatile memctl8xx_t *memctl = &immap->im_memctl;
     volatile long int   *addr;
     long int             cnt, val;
 
-    memctl->memc_mbmr = mbmr_value;
+    //memctl->memc_mbmr = mbmr_value;
 
     for (cnt = maxsize/sizeof(long); cnt > 0; cnt >>= 1) {
        addr = base + cnt;      /* pointer arith! */
@@ -262,11 +270,106 @@ static long int dram_size (long int mbmr_value, long int *base, long int maxsize
        addr = base + cnt;      /* pointer arith! */
 
        val = *addr;
-
        if (val != (~cnt)) {
-           printf("(%08lx)", cnt*sizeof(long));
+//         printf("(%08lx)", cnt*sizeof(long));
            return (cnt * sizeof(long));
        }
     }
     /* NOTREACHED */
+       return (0);
+}
+
+#ifdef CONFIG_PCMCIA
+
+#ifdef CFG_PCMCIA_MEM_ADDR
+volatile unsigned char *pcmcia_mem = (unsigned char*)CFG_PCMCIA_MEM_ADDR;
+#endif
+                 
+int pcmcia_init(void)
+{
+       volatile pcmconf8xx_t   *pcmp;
+       uint v, slota, slotb;
+
+       /*
+       ** Enable the PCMCIA for a Flash card.
+       */
+       pcmp = (pcmconf8xx_t *)(&(((immap_t *)CFG_IMMR)->im_pcmcia));
+
+#if 0
+       pcmp->pcmc_pbr0 = CFG_PCMCIA_MEM_ADDR;
+       pcmp->pcmc_por0 = 0xc00ff05d;
+#endif
+
+       /* Set all slots to zero by default. */
+       pcmp->pcmc_pgcra = 0;
+       pcmp->pcmc_pgcrb = 0;
+#ifdef PCMCIA_SLOT_A
+       pcmp->pcmc_pgcra = 0x40;
+#endif
+#ifdef PCMCIA_SLOT_B
+       pcmp->pcmc_pgcrb = 0x40;
+#endif
+
+       /* Check if any PCMCIA card is luged in. */
+       slota = (pcmp->pcmc_pipr & 0x18000000) == 0 ;
+       slotb = (pcmp->pcmc_pipr & 0x00001800) == 0 ;
+
+       if (!(slota || slotb))
+       {
+               printf("No card present\n");
+#ifdef PCMCIA_SLOT_A
+               pcmp->pcmc_pgcra = 0;
+#endif
+#ifdef PCMCIA_SLOT_B
+               pcmp->pcmc_pgcrb = 0;
+#endif
+               return -1;
+       }
+           else
+       printf("Unknown card (");
+
+       v = 0;
+
+       switch( (pcmp->pcmc_pipr >> 14) & 3 )
+       {
+               case 0x00 :
+                       printf("5V");
+                       v = 5;
+                       break;
+               case 0x01 :
+                       printf("5V and 3V");
+                       v = 3;
+                       break;
+               case 0x03 :
+                       printf("5V, 3V and x.xV");
+                       v = 3;
+                       break;
+       }
+
+       switch(v){
+       case 3:
+           printf("; using 3V");
+           // Enable 3 volt Vcc.
+           
+           break;
+
+       default:
+               printf("; unknown voltage");
+               return -1;
+       }
+       printf(")\n");
+       /* disable pcmcia reset after a while */
+
+       udelay(20);
+
+       pcmp->pcmc_pgcrb = 0;
+
+       /* If you using a real hd you should give a short
+       * spin-up time. */
+#ifdef CONFIG_DISK_SPINUP_TIME
+       udelay(CONFIG_DISK_SPINUP_TIME);
+#endif
+
+       return 0;
 }
+#endif
\ No newline at end of file
index 78ca71593c1ac34334f1f1cadcf03c8ba97cc5e9..d014e84fdb4c66bebb55e6f65ca609dcdb1e9aee 100644 (file)
@@ -57,18 +57,15 @@ SECTIONS
     /* the sector layout of our flash chips!   XXX FIXME XXX   */
 
     mpc8xx/start.o     (.text)
-/*
-    mpc8xx/start.o     (.text)
     common/dlmalloc.o  (.text)
     ppc/ppcstring.o    (.text)
+    mpc8xx/start.o     (.text)
     ppc/vsprintf.o     (.text)
     ppc/crc32.o                (.text)
     ppc/zlib.o         (.text)
 
     . = env_offset;
     common/environment.o(.text)
-*/
-
     *(.text)
     *(.fixup)
     *(.got1)
@@ -90,7 +87,7 @@ SECTIONS
   PROVIDE (erotext = .);
   .reloc   :
   {
-    *(.got)
+    *(.got) 
     _GOT2_TABLE_ = .;
     *(.got2)
     _FIXUP_TABLE_ = .;
@@ -130,7 +127,7 @@ SECTIONS
    *(.bss)
    *(COMMON)
   }
-  . = 0x02840000;
+  . = ALIGN(256 * 1024);
   .ppcenv      :
   {
     common/environment.o (.ppcenv)
index 03bd445cfbc3adf57c55ea7f75c13695629ee831..2a0cc2fac0ce2a805c9ed0a35ff92d02d49c9c28 100644 (file)
 #define CONFIG_COMMANDS        CONFIG_CMD_DFL
 #endif
 
+
+
+/*
+ * optional BOOTP fields
+ */
+
+#define CONFIG_BOOTP_SUBNETMASK                0x00000001
+#define CONFIG_BOOTP_GATEWAY           0x00000002
+#define CONFIG_BOOTP_HOSTNAME          0x00000004
+#define CONFIG_BOOTP_NISDOMAIN         0x00000008
+#define CONFIG_BOOTP_BOOTPATH          0x00000010
+#define CONFIG_BOOTP_BOOTFILESIZE      0x00000020
+
+#define CONFIG_BOOTP_ALL               (~0)
+
+#define CONFIG_BOOTP_DEFAULT           (CONFIG_BOOTP_SUBNETMASK | \
+                                       CONFIG_BOOTP_GATEWAY | \
+                                       CONFIG_BOOTP_BOOTPATH)
+
+#ifndef CONFIG_BOOTP_MASK
+#define CONFIG_BOOTP_MASK              CONFIG_BOOTP_DEFAULT
+#endif
+
 #endif /* _CMD_CONFIG_H */
index 700f61007307053c2d908d2c578470aac0d1ec48..019c8248ac6abd67ed8065790ac81a6c2e1b6ff4 100644 (file)
  * and dual port ram.
  */
 extern cpm8xx_t        *cpmp;          /* Pointer to comm processor */
-uint           m8xx_cpm_dpalloc(uint size);
-uint           m8xx_cpm_hostalloc(uint size);
-void           m8xx_cpm_setbrg(uint brg, uint rate);
+
+void   m8xx_cpm_init(uint base, uint size);
+uint   m8xx_cpm_dpalloc(uint size);
+uint   m8xx_cpm_dpbase(void);
+uint   m8xx_cpm_dpalloc_align(uint size,uint align);
+uint   m8xx_cpm_dpbase_align(uint align);
 
 /* Buffer descriptors used by many of the CPM protocols.
 */
@@ -479,25 +482,19 @@ typedef struct scc_enet {
 #define        SCC_ENET        1
 #define CPMVEC_ENET    CPMVEC_SCC2
 
-#define PA_ENET_RXD    ((ushort)0x0004)
-#define PA_ENET_TXD    ((ushort)0x0008)
-#define PA_ENET_TCLK   ((ushort)0x0400)
-#define PA_ENET_RCLK   ((ushort)0x0200)
+#define PA_ENET_RXD    ((ushort)0x0004)        /* PA 13 */
+#define PA_ENET_TXD    ((ushort)0x0008)        /* PA 12 */
+#define PA_ENET_TCLK   ((ushort)0x0400)        /* PA  5 */
+#define PA_ENET_RCLK   ((ushort)0x0200)        /* PA  6 */
 
-#define PB_ENET_TENA   ((uint)0x00002000)
+#define PB_ENET_TENA   ((uint)0x00002000)      /* PB 18 */
 
-#define PC_ENET_CLSN   ((ushort)0x0040)
-#define PC_ENET_RENA   ((ushort)0x0080)
+#define PC_ENET_CLSN   ((ushort)0x0040)        /* PC  9 */
+#define PC_ENET_RENA   ((ushort)0x0080)        /* PC  8 */
 
 #define SICR_ENET_MASK ((uint)0x0000ff00)
 #define SICR_ENET_CLKRT        ((uint)0x00002e00)
 
-/* 68160 PHY control */
-
-#define PC_ENET_ETHLOOP ((ushort)0x0800)
-#define PC_ENET_TPFLDL ((ushort)0x0400)
-#define PC_ENET_TPSQEL  ((ushort)0x0200)
-
 #endif /* CONFIG_GENIETV */
 
 /***  FADS850SAR  ********************************************************/
index 52b9afbe5821a380ee534d95b8d2ba557f0e32b8..8b0ef2c84c24f91e758c50055f2de33bf780e6fd 100644 (file)
@@ -84,6 +84,8 @@
 
 #define CFG_LOAD_ADDR          0x100000        /* default load address */
 
+#define        CFG_HZ          1000            /* decrementer freq: 1 ms ticks */
+
 /*-----------------------------------------------------------------------
  * Definitions for initial stack pointer and data area (in DPRAM)
  */
index e01ca1cb39e9e2b2883a39d0c8a1923788a7d69e..8e8814b3fb677cdd9f5c96ba7e663852518826a1 100644 (file)
 #define CFG_LOAD_ADDR          0x100000        /* default load address */
 #define CFG_EXTBDINFO          1       /* To use extended board_into (bd_t) */
 
+#define        CFG_HZ          1000            /* decrementer freq: 1 ms ticks */
+
 /*-----------------------------------------------------------------------
  * IDE/ATA stuff
  *-----------------------------------------------------------------------
index c41df9df2fd6c95770cc8bd4e9ebc10c0af3ed2f..91d06fe8b2789a13128d798280f4802aa6d727e5 100644 (file)
@@ -56,6 +56,8 @@
 
 #undef CONFIG_WATCHDOG                 /* watchdog disabled            */
 
+#define CONFIG_BOOTP_MASK      CONFIG_BOOTP_ALL
+
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
 
@@ -78,6 +80,8 @@
 
 #define        CFG_LOAD_ADDR           0x100000        /* default load address */
 
+#define        CFG_HZ          1000            /* decrementer freq: 1 ms ticks */
+
 /*
  * Low Level Configuration Settings
  * (address mappings, register initial values, etc.)
index c84037fea976829feab74a7941f0158c71aaa319..f112c58970764d9889cdd4bf93f1f63633098bd9 100644 (file)
 #define __CONFIG_H
 
 #define        CONFIG_ETHADDR          08:00:22:50:70:63       // Ethernet address
-#define CONFIG_ENV_OVERWRITE                   1       // Overwrite the environment
+#define CONFIG_ENV_OVERWRITE   1       // Overwrite the environment
 
-#define CONFIG_VIDEO           1               // To enable the video initialization
-#define CONFIG_PCMCIA          1               // To enable the PCMCIA initialization
+#define CONFIG_VIDEO           1       // To enable video controller support
+#define CONFIG_I2C             1       // To enable I2C support
+#define CONFIG_PCMCIA          1       // To enable PCMCIA support
 
 /* Video related */
 
@@ -64,7 +65,7 @@
 
 #define CONFIG_MPC823          1
 #define CONFIG_MPC823FADS      1
-#define CONFIG_FADS            1       
+#define CONFIG_FADS            1
 
 #define        CONFIG_8xx_CONS_SMC1    1       /* Console is on SMC1           */
 #undef CONFIG_8xx_CONS_SMC2
 #if 1
 #define CONFIG_BOOTDELAY       2       /* autoboot after 2 seconds     */
 #define CONFIG_LOADS_ECHO      0       /* Dont echoes received characters */
-#define CONFIG_BOOTARGS                ""      
+#define CONFIG_BOOTARGS                ""
 #define CONFIG_BOOTCOMMAND                                                     \
 "bootp ;"                                                                      \
 "setenv bootargs console=tty0 console=ttyS0 "                                  \
 "root=/dev/nfs nfsroot=$(serverip):$(rootpath) "                               \
 "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname):eth0:off ;"      \
-"bootm" 
+"bootm"
 #else
 #define CONFIG_BOOTDELAY       0       /* autoboot disabled            */
 #endif
 
 #undef CONFIG_WATCHDOG                 /* watchdog disabled            */
 
+#define CONFIG_BOOTP_MASK      CONFIG_BOOTP_ALL
+
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
 
 #define CFG_MEMTEST_END                0x01000000      /* 4 ... 16 MB in DRAM  */
 
 #define CFG_LOAD_ADDR          0x00100000      /* default load address */
+
+#define        CFG_HZ          1000            /* decrementer freq: 1 ms ticks */
+
 /*
  * Low Level Configuration Settings
  * (address mappings, register initial values, etc.)
                                SCCR_DFALCD00)
 
  /*-----------------------------------------------------------------------
- * 
+ *
  *-----------------------------------------------------------------------
  *
  */
 #define BCSR0_DBGC_MASK ((uint)0x00600000)
 #define BCSR0_DBPC_MASK ((uint)0x00180000)
 #define BCSR0_EBDF_MASK ((uint)0x00060000)
+
 #define BCSR1_FLASH_EN           ((uint)0x80000000)
 #define BCSR1_DRAM_EN            ((uint)0x40000000)
 #define BCSR1_ETHEN              ((uint)0x20000000)
 #define BCSR1_RS232EN_2          ((uint)0x00040000)
 #define BCSR1_SDRAM_EN           ((uint)0x00020000)
 #define BCSR1_PCCVCC1            ((uint)0x00010000)
+
 #define BCSR2_FLASH_PD_MASK      ((uint)0xF0000000)
 #define BCSR2_DRAM_PD_MASK       ((uint)0x07800000)
 #define BCSR2_DRAM_PD_SHIFT      (23)
 #define BCSR2_EXTTOLI_MASK       ((uint)0x00780000)
 #define BCSR2_DBREVNR_MASK       ((uint)0x00030000)
+
 #define BCSR3_DBID_MASK          ((ushort)0x3800)
 #define BCSR3_CNT_REG_EN_PROTECT ((ushort)0x0400)
 #define BCSR3_BREVNR0            ((ushort)0x0080)
 #define BCSR3_FLASH_PD_MASK      ((ushort)0x0070)
 #define BCSR3_BREVN1             ((ushort)0x0008)
 #define BCSR3_BREVN2_MASK        ((ushort)0x0003)
+
 #define BCSR4_ETHLOOP            ((uint)0x80000000)
 #define BCSR4_TFPLDL             ((uint)0x40000000)
 #define BCSR4_TPSQEL             ((uint)0x20000000)
index 271007dd47512104e5c152605ca10bd2e356ce38..ce0a9a7652aa715e633d6939a5d5ae2d6fa06ef8 100644 (file)
@@ -74,8 +74,8 @@
 #else
 #define        CFG_CBSIZE      256             /* Console I/O Buffer Size      */
 #endif
-#define        CFG_PBSIZE              (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
-#define        CFG_MAXARGS             16              /* max number of command args   */
+#define        CFG_PBSIZE      (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+#define        CFG_MAXARGS     16              /* max number of command args   */
 #define CFG_BARGSIZE   CFG_CBSIZE      /* Boot Argument Buffer Size    */
 
 #define CFG_MEMTEST_START      0x00000000      /* memtest works on     */
@@ -83,6 +83,8 @@
 
 #define CFG_LOAD_ADDR          0x00100000      /* default load address */
 
+#define        CFG_HZ          1000            /* decrementer freq: 1 ms ticks */
+
 /*
  * Low Level Configuration Settings
  * (address mappings, register initial values, etc.)
index 5e0e06b27a73a458602a5f0d4cc3b3f4486f096a..0a39c56d6da3652bd3ac53f052e03cdfb36512e3 100644 (file)
@@ -75,7 +75,7 @@
 #define        CFG_CBSIZE      256             /* Console I/O Buffer Size      */
 #endif
 #define        CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
-#define        CFG_MAXARGS             16      /* max number of command args   */
+#define        CFG_MAXARGS     16              /* max number of command args   */
 #define CFG_BARGSIZE   CFG_CBSIZE      /* Boot Argument Buffer Size    */
 
 #define CFG_MEMTEST_START      0x0100000       /* memtest works on     */
@@ -83,6 +83,7 @@
 
 #define CFG_LOAD_ADDR          0x00100000
 
+#define        CFG_HZ          1000            /* decrementer freq: 1 ms ticks */
 
 /*
  * Low Level Configuration Settings
index 5938b744ce465608153cb02f7fbbc50eddc8a610..8cdc5b3a6c266d36a38e9f0464c87712542a0dcd 100644 (file)
@@ -56,6 +56,8 @@
 
 #undef CONFIG_WATCHDOG                 /* watchdog disabled            */
 
+#define CONFIG_BOOTP_MASK      CONFIG_BOOTP_ALL
+
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
 
@@ -78,6 +80,8 @@
 
 #define        CFG_LOAD_ADDR           0x100000        /* default load address */
 
+#define        CFG_HZ          1000            /* decrementer freq: 1 ms ticks */
+
 /*
  * Low Level Configuration Settings
  * (address mappings, register initial values, etc.)
index 4689476ecfba888fac0c9e5d2c6e40734dffcf98..dd391ca71f29ce34129b3a8c4aa5d6b8aec75b2a 100644 (file)
@@ -14,7 +14,7 @@
  * ff020000 -> ff02ffff : pcmcia
  * ff010000 -> ff01ffff : BCSR       connected to CS1, setup by 8xxROM
  * ff000000 -> ff00ffff : IMAP       internal in the cpu
- * 02800000 -> 0287ffff : flash      connected to CS0
+ * 30000000 -> 300fffff : flash      connected to CS0
  * 00000000 -> nnnnnnnn : sdram      setup by PPCBOOT
  *
  * CS pins are connected as follows:
 #define        CONFIG_ETHADDR          08:00:22:50:70:63       // Ethernet address
 #define CONFIG_ENV_OVERWRITE                   1       // Overwrite the environment
 
-//#define CONFIG_VIDEO         1       // To enable the video initialization
-//#define CONFIG_PCMCIA                0       // To enable the PCMCIA initialization
+#define CONFIG_VIDEO           1       // To enable the video initialization
+#define CONFIG_I2C             1       // Needed for 7176 & 7177
+#define CONFIG_PCMCIA          1       // To enable the PCMCIA initialization
+
+#define CFG_PCMCIA_IO_ADDR     0xff020000
+#define CFG_PCMCIA_IO_SIZE     0x10000
+#define CFG_PCMCIA_MEM_ADDR    0xe0000000
+#define CFG_PCMCIA_MEM_SIZE    0x10000
 
 /* Video related */
 
 #define CONFIG_VIDEO_LOGO                      1       // Show the logo
 #define CONFIG_VIDEO_ENCODER_AD7177            1       // Enable this encoder
 #define CONFIG_VIDEO_ENCODER_AD7177_ADDR       0xF4    // ALSB to ground
-#define CONFIG_VIDEO_SIZE                      (2*1024*1024)
-#define CONFIG_VIDEO_ADDR (bd_ptr->bi_memsize - CONFIG_VIDEO_SIZE) // Frame buffer address
 
 /* Wireless 56Khz 4PPM keyboard on SMCx */
 
@@ -69,7 +73,7 @@
 #define        CONFIG_8xx_CONS_SMC1    1       /* Console is on SMC1           */
 #undef CONFIG_8xx_CONS_SMC2
 #undef CONFIG_8xx_CONS_NONE
-#define CONFIG_BAUDRATE                9600
+#define CONFIG_BAUDRATE                4800
 
 #if 0  // Debugging
 #define MPC8XX_FACT    5                       /* Multiply by 5        */
 #define CFG_PLPRCR_MF  ((MPC8XX_FACT-1) << 20)
 #define CONFIG_8xx_GCLK_FREQ   MPC8XX_HZ       /* Force it - dont measure it */
 
-#define CONFIG_BOOTDELAY       2       /* autoboot after 2 seconds     */
+#if 1
+#define CONFIG_BOOTDELAY       1       /* autoboot after 2 seconds     */
 #define CONFIG_LOADS_ECHO      0       /* Dont echoes received characters */
-#define CONFIG_BOOTCOMMAND     ""      /* autoboot command */
-#define CONFIG_BOOTARGS                ""
+#define CONFIG_BOOTARGS                ""      
+#define CONFIG_BOOTCOMMAND                                                     \
+"bootp ;"                                                                      \
+"setenv bootargs console=tty0 console=ttyS0 "                                  \
+"root=/dev/nfs nfsroot=$(serverip):$(rootpath) "                               \
+"ip=$(ipaddr):$(serverip):$(gatewayip):$(subnetmask):$(hostname):eth0:off ;"   \
+"bootm " 
+#else
+#define CONFIG_BOOTDELAY       0       /* autoboot disabled            */
+#endif
 
 #undef CONFIG_WATCHDOG                 /* watchdog disabled            */
 
 #define CFG_MEMTEST_END                0x00800000      /* 4 ... 8 MB in DRAM   */
 
 #define CFG_LOAD_ADDR          0x00100000      /* default load address */
+
+#define        CFG_HZ          1000            /* decrementer freq: 1 ms ticks */
+
 /*
  * Low Level Configuration Settings
  * (address mappings, register initial values, etc.)
 #define CFG_FLASH_ERASE_TOUT   120000  /* Timeout for Flash Erase (in ms)      */
 #define CFG_FLASH_WRITE_TOUT   500     /* Timeout for Flash Write (in ms)      */
 
-#define CFG_FLASH_ENV_OFFSET 0x00040000        /* Offset of Environment Sector */
-#define        CFG_FLASH_ENV_SIZE      0x40000 /* Total Size of Environment Sector     */
-/* the other CS:s are determined by looking at parameters in BCSRx */
+#define CFG_FLASH_ENV_OFFSET   0x10000 /* Offset of Environment Sector         */
+#define        CFG_FLASH_ENV_SIZE      0x10000 /* Total Size of Environment Sector (64k)*/
 
 /* values according to the manual */
 
  */
 
 #define FLASH_BASE0_PRELIM     0x02800000      /* FLASH bank #0                */
-#define FLASH_BASE1_PRELIM     0x00000000      /* FLASH bank #1 (not present)  */
 
 #define CFG_REMAP_OR_AM                0x80000000      /* OR addr mask         */
-#define CFG_PRELIM_OR_AM       0xE0000000      /* OR addr mask (512Kb) */
+#define CFG_PRELIM_OR_AM       0xFF800000      /* OR addr mask (512Kb) */
 
-/* FLASH timing: ACS = 10, TRLX = 1, CSNT = 1, SCY = 3, EHTR = 0       */
-#define CFG_OR_TIMING_FLASH    (OR_CSNT_SAM  | OR_ACS_DIV4 | OR_BI | OR_SCY_3_CLK | OR_TRLX)
+/* FLASH timing */
+#define CFG_OR_TIMING_FLASH    (OR_CSNT_SAM  | OR_ACS_DIV2 | OR_BI | \
+                               OR_SCY_15_CLK | OR_TRLX )
 
-#define CFG_OR0_REMAP  (CFG_REMAP_OR_AM  | CFG_OR_TIMING_FLASH)
-#define CFG_OR0_PRELIM (CFG_PRELIM_OR_AM | CFG_OR_TIMING_FLASH)
-/*
-** Was:
-**     #define CFG_BR0_PRELIM  ((FLASH_BASE0_PRELIM & BR_BA_MSK) | BR_V)
-*/
-#define CFG_BR0_PRELIM ((FLASH_BASE0_PRELIM & BR_BA_MSK) | BR_V | BR_PS_8)
+//#define CFG_OR0_REMAP        (CFG_REMAP_OR_AM  | CFG_OR_TIMING_FLASH)
+#define CFG_OR0_PRELIM (CFG_PRELIM_OR_AM | CFG_OR_TIMING_FLASH)                // 0xfff80ff4
+#define CFG_BR0_PRELIM ((FLASH_BASE0_PRELIM & BR_BA_MSK) | BR_V | BR_PS_8)     // 0x02800401
 
 /*
  * BR1/2 and OR1/2 (SDRAM)
 */
 
-#define CFG_OR_TIMING_SDRAM    0x0000000A
+#define CFG_OR_TIMING_SDRAM    0x00000A00
 
-#define SDRAM_MAX_SIZE         0x04000000      // 64Mb
+#define SDRAM_MAX_SIZE         0x04000000      // 64Mb bank
 #define SDRAM_BASE1_PRELIM     0x00000000      // First bank
-#define SDRAM_BASE2_PRELIM     0x20000000      // Second bank
-
-#define CFG_OR1_PRELIM (CFG_PRELIM_OR_AM | CFG_OR_TIMING_SDRAM)
-#define CFG_BR1_PRELIM ((SDRAM_BASE1_PRELIM & BR_BA_MSK) | BR_MS_UPMB | BR_V)
-
-#define CFG_OR2_PRELIM CFG_OR1_PRELIM
-#define CFG_BR2_PRELIM ((SDRAM_BASE2_PRELIM & BR_BA_MSK) | BR_MS_UPMB | BR_V)
+#define SDRAM_BASE2_PRELIM     0x10000000      // Second bank
 
 /*
  * Memory Periodic Timer Prescaler
  */
 
 /* periodic timer for refresh */
-#define CFG_MBMR_PTB           17              /* start with divider for 100 MHz       */
+#define CFG_MBMR_PTB           0x5d            /* start with divider for 100 MHz       */
 
 /* refresh rate 15.6 us (= 64 ms / 4K = 62.4 / quad bursts) for <= 128 MBit    */
 #define CFG_MPTPR_2BK_4K       MPTPR_PTP_DIV16         /* setting for 2 banks  */
-
+#define CFG_MPTPR_1BK_4K        MPTPR_PTP_DIV32
 /*
  * MBMR settings for SDRAM
  */
 
 /* 8 column SDRAM */
-#define CFG_MBMR_8COL  ((CFG_MBMR_PTB << MAMR_PTA_SHIFT)  | MAMR_PTAE      |   \
-                        MAMR_AMA_TYPE_0 | MAMR_DSA_1_CYCL | MAMR_G0CLA_A11 |   \
-                        MAMR_RLFA_1X    | MAMR_WLFA_1X    | MAMR_TLFA_4X)
+#define CFG_MBMR_8COL  ((CFG_MBMR_PTB << MAMR_PTA_SHIFT)  | MAMR_PTAE | \
+                       MAMR_G0CLA_A11 | MAMR_RLFA_1X | MAMR_WLFA_1X \
+                       | MAMR_TLFA_4X) // 0x5d802114
 
 /*
  * Internal Definitions
 
 /* values according to the manual */
 
-#define PCMCIA_MEM_ADDR                ((uint)0xff020000)
-#define PCMCIA_MEM_SIZE                ((uint)(64 * 1024))
-
 #define CONFIG_DRAM_50MHZ              1
 #define CONFIG_SDRAM_50MHZ
 
-#ifdef CONFIG_MPC860T
-
-/* Interrupt level assignments.
-*/
-#define FEC_INTERRUPT  SIU_LEVEL1      /* FEC interrupt */
-
-#endif /* CONFIG_MPC860T */
-
 /* We don't use the 8259.
 */
 #define NR_8259_INTS   0
 /* PCMCIA configuration */
 
 #define PCMCIA_MAX_SLOTS    1
-
-#ifdef CONFIG_MPC860
-#define PCMCIA_SLOT_A 1
-#endif
+#define PCMCIA_SLOT_B 1
 
 #endif /* __CONFIG_H */
index 0eb58effa9b9301fd28970acc2e538ce6177d34a..ca679500f02fa6c03cd66b31ddf65b7f707832c9 100644 (file)
@@ -65,6 +65,8 @@
   (CONFIG_CMD_DFL & ~(CFG_CMD_NET))
 #endif /* 0 */
 
+#define CONFIG_BOOTP_MASK      CONFIG_BOOTP_ALL
+
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
 
 #define CFG_PC_ETH_RESET       ((ushort)0x0010)        /* PC 11        */
 #define CFG_PC_IDE_RESET       ((ushort)0x0020)        /* PC 10        */
 
+#define        CFG_HZ          1000            /* decrementer freq: 1 ms ticks */
+
 /*
  * Low Level Configuration Settings
  * (address mappings, register initial values, etc.)
index 89397e02009a8838257ea534793b315e3e702870..f5c7aa1576091e9cbdbf1691b79cca0c5ff2eb95 100644 (file)
@@ -84,6 +84,8 @@
 
 #define        CFG_LOAD_ADDR           0x100000        /* default load address */
 
+#define        CFG_HZ          1000            /* decrementer freq: 1 ms ticks */
+
 /*
  * Low Level Configuration Settings
  * (address mappings, register initial values, etc.)
index 2092d28fbb89b9f56b686693cef52bb1ed156f18..1a2e24171b4d95b204beec1e12ba68befc51927e 100644 (file)
@@ -60,6 +60,8 @@
 
 #undef CONFIG_WATCHDOG                 /* watchdog disabled            */
 
+#define CONFIG_BOOTP_MASK      CONFIG_BOOTP_ALL
+
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
 
@@ -82,6 +84,8 @@
 
 #define        CFG_LOAD_ADDR           0x100000        /* default load address */
 
+#define        CFG_HZ          1000            /* decrementer freq: 1 ms ticks */
+
 /*
  * Low Level Configuration Settings
  * (address mappings, register initial values, etc.)
index ec816f39c32a9b97de794f473f5245a7e0e721e1..ed4ae481f23a0c57630156c003eb0fbd2b2280a2 100644 (file)
@@ -59,6 +59,8 @@
 #define CONFIG_COMMANDS \
 ((CONFIG_CMD_DFL & ~(CFG_CMD_FLASH)) | CFG_CMD_IDE) /* no Flash, but IDE */
 
+#define CONFIG_BOOTP_MASK      CONFIG_BOOTP_ALL
+
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
 
@@ -93,6 +95,8 @@
 
 #define CFG_PC_IDE_RESET       ((ushort)0x0008)        /* PC 12        */
 
+#define        CFG_HZ          1000            /* decrementer freq: 1 ms ticks */
+
 /*
  * Low Level Configuration Settings
  * (address mappings, register initial values, etc.)
index 9060b27c58d4499434c0a4cf67a9c0821a55b9d4..45d7e74645e41048cd25987062ea65d1500c7c8e 100644 (file)
@@ -56,6 +56,8 @@
 
 #undef CONFIG_WATCHDOG                 /* watchdog disabled            */
 
+#define CONFIG_BOOTP_MASK      CONFIG_BOOTP_ALL
+
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
 
@@ -78,6 +80,8 @@
 
 #define        CFG_LOAD_ADDR           0x100000        /* default load address */
 
+#define        CFG_HZ          1000            /* decrementer freq: 1 ms ticks */
+
 /*
  * Low Level Configuration Settings
  * (address mappings, register initial values, etc.)
index 35a26840ac3e17adc41c0180e4aa3237b8e223c3..6bfc9a495f44f39530506ed50403d0451d48c4f1 100644 (file)
@@ -58,6 +58,8 @@
 
 #undef CONFIG_WATCHDOG                 /* watchdog disabled            */
 
+#define CONFIG_BOOTP_MASK      CONFIG_BOOTP_ALL
+
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
 
@@ -80,6 +82,8 @@
 
 #define        CFG_LOAD_ADDR           0x100000        /* default load address */
 
+#define        CFG_HZ          1000            /* decrementer freq: 1 ms ticks */
+
 /*
  * Low Level Configuration Settings
  * (address mappings, register initial values, etc.)
index 814f4eb4a1fe944a9e13d7b0295e6f3c28c7df1c..28293c959f7f08e80d6f4bb041c9ab83cf00ca83 100644 (file)
@@ -58,6 +58,8 @@
 
 #undef CONFIG_WATCHDOG                 /* watchdog disabled            */
 
+#define CONFIG_BOOTP_MASK      CONFIG_BOOTP_ALL
+
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
 
@@ -80,6 +82,8 @@
 
 #define        CFG_LOAD_ADDR           0x100000        /* default load address */
 
+#define        CFG_HZ          1000            /* decrementer freq: 1 ms ticks */
+
 /*
  * Low Level Configuration Settings
  * (address mappings, register initial values, etc.)
index 1987d67f542e5ca37a33b599ca09c505c099f511..9de99324a3812d5b90c201e9646d4fbba97f8d4f 100644 (file)
@@ -56,6 +56,8 @@
 
 #undef CONFIG_WATCHDOG                 /* watchdog disabled            */
 
+#define CONFIG_BOOTP_MASK      CONFIG_BOOTP_ALL
+
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
 
@@ -78,6 +80,8 @@
 
 #define        CFG_LOAD_ADDR           0x100000        /* default load address */
 
+#define        CFG_HZ          1000            /* decrementer freq: 1 ms ticks */
+
 /*
  * Low Level Configuration Settings
  * (address mappings, register initial values, etc.)
index 36358841ffd5779faa4318149624d56ef232ec51..cd592c3faae7848c24f6f71ad6ad74aa92d50536 100644 (file)
 
 #define        CFG_LOAD_ADDR           0x100000        /* default load address */
 
+#define        CFG_HZ          1000            /* decrementer freq: 1 ms ticks */
+
 /*
  * Low Level Configuration Settings
  * (address mappings, register initial values, etc.)
index 2a476a88d813c0397001104b095723868672fd84..06ec32accc311b4aac6a25ebee4964ad4fa2dd1c 100644 (file)
@@ -1,17 +1,38 @@
+/*
+ * (C) Copyright 2000
+ * Paolo Scaffardi, AIRVENT SAM s.p.a - RIMINI(ITALY), arsenio@tin.it
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
 #ifndef _CONSOLE_H_
 #define _CONSOLE_H_
 
-/* console functions */
+#include <devices.h>
 
-console_io_t *console; // Must be init into common/board.c to bd->bi_console_io
+/*
+** VARIABLES
+*/
 
-// Dont use them from into the FLASH, but after the code is relocated (board.c)
-// Before use the serial_* functions.
+extern device_t        *stdio_devices[] ;
+extern char *stdio_names[MAX_FILES] ;
 
-#define CON_GETC               console->getc
-#define CON_TSTC               console->tstc
-#define CON_PUTC(c)            console->putc(c)
-#define CON_PRINTF(s,args...)  console->printf(s,##args)
-#define CON_PUTSTR(s)          console->putstr(s)
+int console_realloc(int top);
 
 #endif
index 285cfb89733ca278aaf320b34702bc205d1a0a06..e1534bd83dd19e4c454d09816449a3b810d04223 100644 (file)
@@ -3,72 +3,73 @@
 
 #define LIST_START     -1      // Handy Constants that substitute for item positions
 #define LIST_END       0       // END_OF_LIST means one past current length of list when
-                                // inserting. Otherwise it refers the last item in the list. 
+                                // inserting. Otherwise it refers the last item in the list.
 
-typedef struct\r
-    {\r
-    void            *ptr;\r
-    unsigned int    size;\r
-    } HandleRecord;\r
+typedef struct
+    {
+    void            *ptr;
+    unsigned int    size;
+    } HandleRecord;
 
-typedef void **Handle;\r
+typedef void **Handle;
 
 typedef int (*CompareFunction)(void *data1, void *data2) ;
 
-typedef struct ListStructTag\r
-    {\r
-    int signature;              /* debugging aid */\r
-    int percentIncrease;        /* %of current size to increase by when list is out of space */\r
-    int minNumItemsIncrease;    /* fixed number of items to increase by when list is out of space */\r
-    int listSize;               /* number of items than can fit in the currently allocated memory */\r
-    int itemSize;               /* the size of each item in the list (same for every item) */\r
-    int numItems;               /* number of items currently in the list */\r
-    unsigned char itemList[1];  /* resizable array of list elements */\r
-    } ListStruct;\r
-\r
-typedef struct ListStructTag **list_t;        /* The list abstract data type */\r
-typedef int ( * ListApplicationFunc)(int index, void *ptrToItem, void *callbackData);\r
-\r
-    /* Basic List Operations */\r
-list_t ListCreate(int elementSize);\r
-void    ListDispose(list_t list);\r
-void    ListDisposePtrList(list_t list);  /* no function panel yet */\r
-int     ListNumItems(list_t list);\r
-int     ListInsertItem(list_t list, void *ptrToItem, int itemPosition);\r
-void    ListGetItem(list_t list, void *itemDestination, int itemPosition);\r
-void    ListReplaceItem(list_t list, void *ptrToItem, int itemPosition);\r
-void    ListRemoveItem(list_t list, void *itemDestination, int itemPosition);\r
-\r
-int     ListInsertItems(list_t list, void *ptrToItems, int firstItemPosition, int numItemsToInsert);\r
-void    ListGetItems(list_t list, void *itemsDestination, int firstItemPosition, int numItemsToGet);\r
-void    ListReplaceItems(list_t list, void *ptrToItems, int firstItemPosition, int numItemsToReplace);\r
-void    ListRemoveItems(list_t list, void *itemsDestination, int firstItemPosition, int numItemsToRemove);\r
-\r
-list_t  ListCopy(list_t originalList);\r
-int     ListAppend(list_t list1, list_t list2);\r
-void    ListClear(list_t list);\r
-int     ListEqual(list_t list1, list_t list2);\r
-int     ListInsertInOrder(list_t list, void *ptrToItem, CompareFunction compareFunction);\r
-void    *ListGetPtrToItem(list_t list, int itemPosition);\r
-void    *ListGetDataPtr(list_t list);\r
-int     ListApplyToEach(list_t list, int ascending, ListApplicationFunc funcToApply, void *callbackData);\r
-\r
-    /* List Searching and Sorting */\r
-int     ListFindItem(list_t list, void *ptrToItem, int startingPosition, CompareFunction compareFunction);\r
-void    ListRemoveDuplicates(list_t list, CompareFunction compareFunction);\r
-int     ListBinSearch(list_t list, void *itemPtr, CompareFunction compareFunction);\r
-void    ListQuickSort(list_t list, CompareFunction compareFunction);\r
-void    ListHeapSort(list_t list, CompareFunction compareFunction);\r
-void    ListInsertionSort(list_t list, CompareFunction compareFunction);\r
-int     ListIsSorted(list_t list, CompareFunction compareFunction);\r
-\r
-    /*  Advanced List Functions */\r
-void   ListSetAllocationPolicy(list_t list, int minItemsPerAlloc, int percentIncreasePerAlloc);\r
-void    ListCompact(list_t list);\r
-int     ListPreAllocate(list_t list, int numItems);\r
-int     ListGetItemSize(list_t list);\r
-int     GetIntListFromParmInfo(va_list parmInfo, int numIntegers, list_t *integerList);    /* no function panel, too obscure */\r
-int     ListInsertAfterItem(list_t list, void *ptrToItem, void *ptrToItemToInsertAfter, CompareFunction compareFunction);    /* no function panel */\r
-int     ListInsertBeforeItem(list_t list, void *ptrToItem, void *ptrToItemToInsertBefore, CompareFunction compareFunction);  /* no function panel */\r
+typedef struct ListStructTag
+    {
+    int signature;              /* debugging aid */
+    int percentIncrease;        /* %of current size to increase by when list is out of space */
+    int minNumItemsIncrease;    /* fixed number of items to increase by when list is out of space */
+    int listSize;               /* number of items than can fit in the currently allocated memory */
+    int itemSize;               /* the size of each item in the list (same for every item) */
+    int numItems;               /* number of items currently in the list */
+    unsigned char itemList[1];  /* resizable array of list elements */
+    } ListStruct;
 
-#endif
\ No newline at end of file
+typedef struct ListStructTag **list_t;        /* The list abstract data type */
+typedef int ( * ListApplicationFunc)(int index, void *ptrToItem, void *callbackData);
+
+// Basic List Operations
+list_t ListCreate(int elementSize);
+int     ListNumItems(list_t list);
+int     ListInsertItem(list_t list, void *ptrToItem, int itemPosition);
+int     ListInsertItems(list_t list, void *ptrToItems, int firstItemPosition, int numItemsToInsert);
+void    ListDispose(list_t list);
+void    *ListGetPtrToItem(list_t list, int itemPosition);
+
+/*
+
+void    ListDisposePtrList(list_t list);
+void    ListGetItem(list_t list, void *itemDestination, int itemPosition);
+void    ListReplaceItem(list_t list, void *ptrToItem, int itemPosition);
+void    ListRemoveItem(list_t list, void *itemDestination, int itemPosition);
+void    ListGetItems(list_t list, void *itemsDestination, int firstItemPosition, int numItemsToGet);
+void    ListReplaceItems(list_t list, void *ptrToItems, int firstItemPosition, int numItemsToReplace);
+void    ListRemoveItems(list_t list, void *itemsDestination, int firstItemPosition, int numItemsToRemove);
+list_t  ListCopy(list_t originalList);
+int     ListAppend(list_t list1, list_t list2);
+void    ListClear(list_t list);
+int     ListEqual(list_t list1, list_t list2);
+int     ListInsertInOrder(list_t list, void *ptrToItem, CompareFunction compareFunction);
+void    *ListGetDataPtr(list_t list);
+int     ListApplyToEach(list_t list, int ascending, ListApplicationFunc funcToApply, void *callbackData);
+
+// List Searching and Sorting
+int     ListFindItem(list_t list, void *ptrToItem, int startingPosition, CompareFunction compareFunction);
+void    ListRemoveDuplicates(list_t list, CompareFunction compareFunction);
+int     ListBinSearch(list_t list, void *itemPtr, CompareFunction compareFunction);
+void    ListQuickSort(list_t list, CompareFunction compareFunction);
+void    ListHeapSort(list_t list, CompareFunction compareFunction);
+void    ListInsertionSort(list_t list, CompareFunction compareFunction);
+int     ListIsSorted(list_t list, CompareFunction compareFunction);
+
+//  Advanced List Functions
+void   ListSetAllocationPolicy(list_t list, int minItemsPerAlloc, int percentIncreasePerAlloc);
+void    ListCompact(list_t list);
+int     ListPreAllocate(list_t list, int numItems);
+int     ListGetItemSize(list_t list);
+int     GetIntListFromParmInfo(va_list parmInfo, int numIntegers, list_t *integerList);
+int     ListInsertAfterItem(list_t list, void *ptrToItem, void *ptrToItemToInsertAfter, CompareFunction compareFunction);
+int     ListInsertBeforeItem(list_t list, void *ptrToItem, void *ptrToItemToInsertBefore, CompareFunction compareFunction);
+*/
+#endif
index 355752d8534acffd3d1e40fe10ed727a89404d39..21c415d5c0605c0955aad03c4c47bd3244f9274a 100644 (file)
@@ -168,13 +168,12 @@ typedef struct
 
 /* net.c */
 /** BOOTP EXTENTIONS **/
-extern int             NetOurGatewaysNum;      /* Out gateways number          */
-extern IPaddr_t                NetOurGatewaysIP[4] ;   /* Our gateways IP addresses    */
-extern IPaddr_t                NetOurSubnetMask ;      /* Our subnet mask (0 = unknown)*/
-extern char            NetOurNISDomain[32] ;   /* Our NIS domain               */
-extern char            NetOurHostName[32] ;    /* Our hostname                 */
-extern char            NetOurRootPath[32] ;    /* Our root path                */
-extern int             NetBootFileSize ;       /* Our boot file size           */
+extern IPaddr_t                NetOurGatewayIP;        /* Our gateway IP addresse      */
+extern IPaddr_t                NetOurSubnetMask;       /* Our subnet mask (0 = unknown)*/
+extern char            NetOurNISDomain[32];    /* Our NIS domain               */
+extern char            NetOurHostName[32];     /* Our hostname                 */
+extern char            NetOurRootPath[32];     /* Our root path                */
+extern int             NetBootFileSize;        /* Our boot file size           */
 /** END OF BOOTP EXTENTIONS **/
 extern uchar           NetOurEther[6];         /* Our ethernet address         */
 extern uchar           NetServerEther[6];      /* Boot server enet address     */
@@ -236,17 +235,4 @@ extern void        NetIPaddr (IPaddr_t x, char *s);
 
 /**********************************************************************/
 
-/*
- *     Timer stuff.
- */
-
-#define HZ     1
-
-/*
- *     Return the number of HZ ticks since we started.
- */
-extern ulong   GetTicksSinceBoot(void);
-
-
-
 #endif /* __NET_H__ */
index 98bf5f7c2a395b6931b0593be82dfcc1aef191c2..d26047b386014990707b4b9dee4985ccf4cd49f6 100644 (file)
@@ -111,6 +111,10 @@ typedef    struct  init_data {
        unsigned long   cpu_speed;      /* VCOOUT = CPU clock in Hz!            */
        unsigned long   relocated;      /* Set when relocated to RAM            */
        mon_fnc_t       bi_mon_fnc;     /* Monitor functions                    */
+#ifdef CONFIG_8xx
+       unsigned int    dp_alloc_base;
+       unsigned int    dp_alloc_top;
+#endif
 } init_data_t;
 
 /*
@@ -202,7 +206,6 @@ void        dcache_disable(void);
 void   relocate_code (ulong, bd_t *, ulong);
 ulong  get_endaddr   (void);
 void   trap_init     (ulong);
-void   wait_ticks    (unsigned long);
 #ifdef  CONFIG_4xx
 unsigned char   in8(unsigned int);
 void            out8(unsigned int, unsigned char);
@@ -224,9 +227,7 @@ int checkcpu      (long);
 int    checkicache   (void);
 int    checkdcache   (void);
 void   upmconfig     (unsigned int, unsigned int *, unsigned int);
-void   udelay        (unsigned long);
-unsigned long usec2ticks (unsigned long usec);
-unsigned long ticks2usec (unsigned long ticks);
+ulong  get_tbclk     (void);
 #if defined(CONFIG_WATCHDOG)
 void   watchdog_reset(void);
 #endif /* CONFIG_WATCHDOG */
@@ -268,6 +269,15 @@ int        disable_interrupts (void);
 
 /* $(CPU)/traps.c */
 
+/* ppc/ticks.S */
+unsigned long long get_ticks(void);
+void   wait_ticks    (unsigned long);
+
+/* ppc/time.c */
+void   udelay        (unsigned long);
+ulong  usec2ticks    (unsigned long usec);
+ulong  ticks2usec    (unsigned long ticks);
+
 /* ppc/vsprintf.c */
 ulong  simple_strtoul(const char *cp,char **endp,unsigned int base);
 long   simple_strtol(const char *cp,char **endp,unsigned int base);
index 663631700320fb71c09e9750ea709c319743f44c..f1402bd458e2508c5c1ced231ff2c5b5d8daf237 100644 (file)
@@ -24,6 +24,6 @@
 #ifndef        __VERSION_H__
 #define        __VERSION_H__
 
-#define        PPCBOOT_VERSION "ppcboot 0.6.1"
+#define        PPCBOOT_VERSION "ppcboot 0.6.2"
 
 #endif /* __VERSION_H__ */
index c86496b80704670e50cbbcc2b67504a6e45a55fe..4ada315f2dc7e003023ec17a5957e4506b8dd91a 100644 (file)
@@ -27,6 +27,7 @@
 #define VIDEO_ENCODER_NAME     "Analog Devices AD7176"
 
 #define VIDEO_ENCODER_I2C_RATE 100000  // Max rate is 100Khz
+#define VIDEO_ENCODER_CB_Y_CR_Y                // Use CB Y CR Y format...
 
 #define VIDEO_MODE_YUYV                // The only mode supported by this encoder
 #undef  VIDEO_MODE_RGB
index d38f75ad2c4dd9576458ee369f064fd082df5755..84f8a9de1fee9c05b5125fdfa41760f141c157dc 100644 (file)
 #ifndef _VIDEO_AD7177_H_
 #define _VIDEO_AD7177_H_
 
+//#define VIDEO_DEBUG_DISABLE_COLORS   0
+
 #define VIDEO_ENCODER_NAME     "Analog Devices AD7177"
 
 #define VIDEO_ENCODER_I2C_RATE 100000  // Max rate is 100Khz
+#define VIDEO_ENCODER_CB_Y_CR_Y                // Use CB Y CR Y format...
 
 #define VIDEO_MODE_YUYV                // The only mode supported by this encoder
 #undef  VIDEO_MODE_RGB
@@ -71,34 +74,74 @@ static unsigned char
                                         0x00, // Pedestal Register 1
                                         0x00, // Pedestal Register 2
                                         0x00, // Pedestal Register 3
-                                        0x0 // Mode Register 3
+                                        0x08 // Mode Register 3
 
 #endif
-
 #ifdef VIDEO_MODE_PAL
-                                       0x05, // Mode Register 0
+#ifdef VIDEO_MODE_RGB_OUT
+
+                                       0x69, // Mode Register 0
 #ifdef VIDEO_DEBUG_COLORBARS
-                                       0xc2,
+                                       0xc0, // Mode Register 1 (c0)
 #else
-                                       0x42, // Mode Register 1
+                                       0x40, // Mode Register 1 (c0)
+#endif
+                                        0xcb, // Subcarrier Freq 0
+                                        0x8a, // Subcarrier Freq 1
+                                       0x09, // Subcarrier Freq 2
+                                        0x2a, // Subcarrier Freq 3
+                                        0x00, // Subcarrier phase
+                                        0x02, // Timing Register 0
+                                       0x00, // Extended Captioning 0
+                                        0x00, // Extended Captioning 1
+                                        0x00, // Closed Captioning 0
+                                       0x00, // Closed Captioning 1
+                                        0x00, // Timing Register 1
+                                        0x28, // Mode Register 2
+                                       0x00, // Pedestal Register 0
+                                        0x00, // Pedestal Register 1
+                                        0x00, // Pedestal Register 2
+                                        0x00, // Pedestal Register 3
+                                        0x08  // Mode Register 3
+
+#else
+
+                                       0x09, // Mode Register 0 (was 01)
+#ifdef VIDEO_DEBUG_COLORBARS
+                                       0xd8,   //
+#else
+                                       0x59, // Mode Register 1 (was 58)
 #endif
                                         0xcb, // Subcarrier Freq 0
                                         0x8a, // Subcarrier Freq 1
                                         0x09, // Subcarrier Freq 2
                                         0x2a, // Subcarrier Freq 3
                                         0x00, // Subcarrier phase
-                                        0x0a, // Timing Register 0
+                                        0x02, // Timing Register 0 (was a)
                                         0x00, // Extended Captioning 0
                                         0x00, // Extended Captioning 1
                                         0x00, // Closed Captioning 0
                                         0x00, // Closed Captioning 1
                                         0x00, // Timing Register 1
+#ifdef VIDEO_DEBUG_LOWPOWER
+#ifdef VIDEO_DEBUG_DISABLE_COLORS
+                                        0x98, // Mode Register 2
+#else
+                                        0x88, // Mode Register 2
+#endif
+#else
+#ifdef VIDEO_DEBUG_DISABLE_COLORS
+                                        0x18, // Mode Register 2
+#else
                                         0x08, // Mode Register 2
+#endif
+#endif
                                         0x00, // Pedestal Register 0
                                         0x00, // Pedestal Register 1
                                         0x00, // Pedestal Register 2
                                         0x00, // Pedestal Register 3
-                                        0x00  // Mode Register 3
+                                        0x08  // Mode Register 3
+#endif                                 
 #endif
     } ;
 
index 802e8541959e45cbf73428d40b6612193cbdf5c0..f0bad7895a22a19bb1e85652758edcd0d0f46aa2 100644 (file)
@@ -23,8 +23,8 @@ unsigned char DEF_PPCBOOT_LOGO_DATA[DEF_PPCBOOT_LOGO_SIZE] = {
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x14, 0x7f, 0x34, 0x7f, 0x29, 0x7f, 0x28, 0x7f, 0x29,
- 0x7f, 0x23, 0x7f, 0x34, 0x7f, 0x2b, 0x7f, 0x47, 0x7f, 0x1f, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x12, 0x80, 0x31, 0x81, 0x26, 0x81, 0x24, 0x81, 0x26,
+ 0x81, 0x22, 0x80, 0x31, 0x80, 0x29, 0x81, 0x44, 0x81, 0x1e, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
@@ -33,8 +33,8 @@ unsigned char DEF_PPCBOOT_LOGO_DATA[DEF_PPCBOOT_LOGO_SIZE] = {
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x7f, 0x35, 0x7f, 0x3a, 0x7f, 0x18, 0x80, 0x10, 0x7f, 0x12, 0x80, 0x10, 0x7f, 0x11,
- 0x7f, 0x10, 0x80, 0x10, 0x7f, 0x11, 0x7f, 0x10, 0x7f, 0x13, 0x7f, 0x39, 0x7f, 0x38, 0x7f, 0x14,
+ 0x80, 0x10, 0x81, 0x33, 0x81, 0x37, 0x81, 0x16, 0x80, 0x10, 0x81, 0x12, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x12, 0x81, 0x35, 0x81, 0x35, 0x81, 0x12,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
@@ -43,8 +43,8 @@ unsigned char DEF_PPCBOOT_LOGO_DATA[DEF_PPCBOOT_LOGO_SIZE] = {
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x7f, 0x2e, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x11, 0x80, 0x10, 0x7f, 0x12, 0x7f, 0x13,
- 0x7f, 0x13, 0x7f, 0x10, 0x7f, 0x12, 0x7f, 0x10, 0x7f, 0x11, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x35,
+ 0x81, 0x2b, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x12, 0x81, 0x12,
+ 0x81, 0x12, 0x80, 0x10, 0x81, 0x12, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x33,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
@@ -53,745 +53,745 @@ unsigned char DEF_PPCBOOT_LOGO_DATA[DEF_PPCBOOT_LOGO_SIZE] = {
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x7f, 0x29, 0x80, 0x10, 0x7f, 0x11, 0x7f, 0x12, 0x7f, 0x10, 0x80, 0x10, 0x7f, 0x12, 0x7f, 0x11,
- 0x80, 0x10, 0x7f, 0x14, 0x7f, 0x13, 0x7f, 0x16, 0x7f, 0x2c, 0x7f, 0x28, 0x7f, 0x1b, 0x80, 0x10,
- 0x7f, 0x31, 0x7f, 0x14, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x81, 0x26, 0x80, 0x10, 0x80, 0x10, 0x81, 0x12, 0x80, 0x10, 0x80, 0x10, 0x81, 0x12, 0x80, 0x10,
+ 0x80, 0x10, 0x81, 0x12, 0x81, 0x12, 0x81, 0x16, 0x80, 0x29, 0x81, 0x24, 0x81, 0x1a, 0x80, 0x10,
+ 0x81, 0x2f, 0x81, 0x12, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x24, 0x7f, 0x3a,
- 0x80, 0x10, 0x7f, 0x11, 0x7f, 0x13, 0x80, 0x10, 0x7f, 0x10, 0x7f, 0x13, 0x7f, 0x13, 0x7f, 0x10,
- 0x80, 0x10, 0x7f, 0x14, 0x80, 0x10, 0x7f, 0x23, 0x7f, 0x4c, 0x7f, 0x6a, 0x7f, 0x54, 0x7f, 0x29,
- 0x80, 0x10, 0x7f, 0x2e, 0x7f, 0x21, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x22, 0x81, 0x37,
+ 0x80, 0x10, 0x80, 0x10, 0x81, 0x12, 0x80, 0x10, 0x80, 0x10, 0x81, 0x12, 0x81, 0x12, 0x80, 0x10,
+ 0x80, 0x10, 0x81, 0x12, 0x80, 0x10, 0x81, 0x22, 0x81, 0x48, 0x81, 0x65, 0x81, 0x50, 0x81, 0x26,
+ 0x80, 0x10, 0x81, 0x2b, 0x81, 0x1e, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x3a, 0x80, 0x10,
- 0x80, 0x10, 0x7f, 0x10, 0x7f, 0x11, 0x7f, 0x12, 0x7f, 0x15, 0x7f, 0x13, 0x80, 0x10, 0x7f, 0x12,
- 0x7f, 0x12, 0x7f, 0x11, 0x80, 0x10, 0x7f, 0x29, 0x7f, 0x5d, 0x7f, 0x70, 0x7f, 0x59, 0x7f, 0x37,
- 0x7f, 0x1a, 0x80, 0x10, 0x7f, 0x2c, 0x7f, 0x1c, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x37, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x12, 0x81, 0x14, 0x81, 0x12, 0x80, 0x10, 0x81, 0x12,
+ 0x80, 0x11, 0x80, 0x10, 0x80, 0x10, 0x81, 0x26, 0x81, 0x59, 0x81, 0x69, 0x81, 0x54, 0x81, 0x35,
+ 0x80, 0x18, 0x80, 0x10, 0x80, 0x29, 0x81, 0x1a, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x21, 0x7f, 0x21, 0x7f, 0x10,
- 0x7f, 0x15, 0x7f, 0x12, 0x7f, 0x14, 0x7f, 0x15, 0x7f, 0x11, 0x7f, 0x10, 0x80, 0x11, 0x80, 0x13,
- 0x7f, 0x11, 0x7f, 0x11, 0x7f, 0x10, 0x7f, 0x24, 0x7f, 0x47, 0x7f, 0x3a, 0x7f, 0x33, 0x7f, 0x1d,
- 0x7f, 0x14, 0x7f, 0x19, 0x80, 0x10, 0x7f, 0x36, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x1e, 0x81, 0x1e, 0x80, 0x10,
+ 0x81, 0x14, 0x81, 0x12, 0x81, 0x12, 0x81, 0x14, 0x80, 0x10, 0x80, 0x10, 0x81, 0x10, 0x81, 0x12,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x22, 0x81, 0x44, 0x81, 0x37, 0x80, 0x31, 0x81, 0x1c,
+ 0x81, 0x12, 0x80, 0x18, 0x80, 0x10, 0x81, 0x33, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x27, 0x7f, 0x1c, 0x7f, 0x11,
- 0x7e, 0x15, 0x7d, 0x13, 0x7d, 0x14, 0x7e, 0x13, 0x80, 0x10, 0x82, 0x12, 0x83, 0x16, 0x83, 0x12,
- 0x81, 0x10, 0x7f, 0x11, 0x7c, 0x15, 0x7b, 0x1c, 0x7d, 0x1d, 0x7f, 0x18, 0x7f, 0x1c, 0x7f, 0x11,
- 0x7f, 0x16, 0x7f, 0x18, 0x80, 0x10, 0x7f, 0x1c, 0x7f, 0x28, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x24, 0x81, 0x1a, 0x80, 0x10,
+ 0x7f, 0x13, 0x7f, 0x11, 0x7e, 0x12, 0x7f, 0x11, 0x80, 0x10, 0x81, 0x12, 0x84, 0x16, 0x81, 0x12,
+ 0x81, 0x10, 0x80, 0x10, 0x7e, 0x12, 0x7e, 0x18, 0x7e, 0x1a, 0x81, 0x16, 0x81, 0x1a, 0x80, 0x10,
+ 0x81, 0x14, 0x81, 0x16, 0x80, 0x10, 0x81, 0x1a, 0x81, 0x24, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x38, 0x7f, 0x12, 0x7f, 0x14,
- 0x7e, 0x12, 0x7d, 0x15, 0x7d, 0x14, 0x7e, 0x12, 0x80, 0x11, 0x83, 0x13, 0x85, 0x16, 0x85, 0x17,
- 0x83, 0x14, 0x80, 0x12, 0x7d, 0x13, 0x7d, 0x14, 0x7e, 0x12, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x13,
- 0x7f, 0x11, 0x7f, 0x15, 0x7f, 0x13, 0x80, 0x10, 0x7f, 0x39, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x35, 0x81, 0x12, 0x81, 0x12,
+ 0x80, 0x10, 0x7e, 0x12, 0x7e, 0x12, 0x80, 0x10, 0x81, 0x10, 0x80, 0x13, 0x87, 0x17, 0x83, 0x18,
+ 0x84, 0x14, 0x80, 0x11, 0x7f, 0x11, 0x7e, 0x12, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x12,
+ 0x80, 0x10, 0x81, 0x14, 0x81, 0x12, 0x80, 0x10, 0x81, 0x35, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x2e, 0x7f, 0x10, 0x7f, 0x16,
- 0x80, 0x14, 0x80, 0x17, 0x81, 0x1b, 0x81, 0x12, 0x82, 0x11, 0x83, 0x17, 0x84, 0x16, 0x83, 0x15,
- 0x85, 0x14, 0x84, 0x13, 0x83, 0x10, 0x83, 0x11, 0x82, 0x15, 0x80, 0x28, 0x7f, 0x1b, 0x7f, 0x10,
- 0x7f, 0x15, 0x7f, 0x12, 0x7f, 0x15, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x2d, 0x80, 0x10, 0x81, 0x14,
+ 0x82, 0x12, 0x7f, 0x16, 0x82, 0x1a, 0x81, 0x12, 0x82, 0x11, 0x81, 0x17, 0x86, 0x16, 0x81, 0x15,
+ 0x86, 0x16, 0x80, 0x14, 0x83, 0x12, 0x80, 0x12, 0x83, 0x14, 0x81, 0x25, 0x80, 0x19, 0x80, 0x10,
+ 0x81, 0x14, 0x81, 0x12, 0x81, 0x14, 0x80, 0x10, 0x80, 0x31, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10,
- 0x82, 0x12, 0x85, 0x12, 0x85, 0x20, 0x83, 0x26, 0x81, 0x18, 0x80, 0x10, 0x80, 0x11, 0x80, 0x16,
- 0x83, 0x13, 0x84, 0x10, 0x88, 0x15, 0x89, 0x1b, 0x84, 0x11, 0x7f, 0x23, 0x7f, 0x39, 0x7f, 0x22,
- 0x7f, 0x11, 0x7f, 0x13, 0x7f, 0x14, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x31, 0x80, 0x10, 0x80, 0x10,
+ 0x83, 0x12, 0x80, 0x14, 0x86, 0x22, 0x81, 0x26, 0x82, 0x16, 0x80, 0x10, 0x81, 0x10, 0x82, 0x15,
+ 0x84, 0x13, 0x80, 0x12, 0x89, 0x18, 0x80, 0x1d, 0x84, 0x12, 0x81, 0x22, 0x80, 0x37, 0x80, 0x20,
+ 0x80, 0x10, 0x81, 0x12, 0x81, 0x12, 0x80, 0x10, 0x80, 0x31, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x31, 0x80, 0x10, 0x7f, 0x16,
- 0x82, 0x24, 0x85, 0x3b, 0x84, 0x25, 0x81, 0x28, 0x7e, 0x24, 0x7c, 0x17, 0x7d, 0x13, 0x7e, 0x13,
- 0x7e, 0x12, 0x83, 0x29, 0x87, 0x5d, 0x89, 0x81, 0x85, 0x70, 0x80, 0x31, 0x7f, 0x23, 0x7f, 0x24,
- 0x80, 0x10, 0x7f, 0x14, 0x7f, 0x12, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x2f, 0x80, 0x10, 0x81, 0x16,
+ 0x83, 0x24, 0x84, 0x3a, 0x85, 0x26, 0x82, 0x27, 0x7f, 0x21, 0x80, 0x15, 0x7f, 0x11, 0x80, 0x10,
+ 0x80, 0x10, 0x82, 0x29, 0x88, 0x5d, 0x84, 0x80, 0x86, 0x6e, 0x81, 0x2f, 0x80, 0x22, 0x81, 0x22,
+ 0x80, 0x10, 0x81, 0x12, 0x81, 0x12, 0x80, 0x10, 0x80, 0x31, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x31, 0x80, 0x10, 0x7f, 0x17,
- 0x7f, 0x75, 0x7f, 0xb6, 0x7d, 0x83, 0x7c, 0x31, 0x7c, 0x15, 0x7c, 0x15, 0x7e, 0x13, 0x7f, 0x11,
- 0x7c, 0x2a, 0x7e, 0x71, 0x81, 0xa0, 0x82, 0xb8, 0x81, 0xc7, 0x7f, 0x95, 0x7f, 0x34, 0x7f, 0x10,
- 0x7f, 0x11, 0x80, 0x10, 0x7f, 0x13, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x2f, 0x80, 0x10, 0x81, 0x16,
+ 0x81, 0x6f, 0x85, 0xae, 0x7f, 0x7b, 0x82, 0x2d, 0x7e, 0x12, 0x7e, 0x12, 0x7f, 0x11, 0x80, 0x10,
+ 0x7e, 0x26, 0x82, 0x6b, 0x82, 0x99, 0x85, 0xb3, 0x82, 0xbe, 0x81, 0x8f, 0x80, 0x31, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x81, 0x12, 0x80, 0x10, 0x80, 0x31, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x7f, 0x3b,
- 0x7d, 0xb0, 0x7c, 0xdc, 0x7b, 0xd8, 0x7c, 0x83, 0x7d, 0x1f, 0x7e, 0x14, 0x7f, 0x11, 0x80, 0x1f,
- 0x7f, 0x70, 0x7e, 0xc6, 0x7e, 0xd9, 0x7e, 0xce, 0x7f, 0xdf, 0x7f, 0xd4, 0x7f, 0x81, 0x7f, 0x21,
- 0x7f, 0x11, 0x7f, 0x16, 0x7f, 0x12, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x31, 0x80, 0x10, 0x80, 0x38,
+ 0x7f, 0xa7, 0x84, 0xd1, 0x7d, 0xcc, 0x81, 0x7b, 0x7e, 0x1c, 0x7e, 0x12, 0x80, 0x10, 0x7d, 0x1d,
+ 0x80, 0x69, 0x80, 0xbc, 0x7e, 0xce, 0x83, 0xc4, 0x81, 0xd5, 0x81, 0xca, 0x81, 0x7a, 0x81, 0x1e,
+ 0x80, 0x10, 0x81, 0x14, 0x81, 0x12, 0x80, 0x10, 0x80, 0x31, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x33, 0x80, 0x10, 0x7f, 0x8e,
- 0x7e, 0xa1, 0x7c, 0x58, 0x7d, 0x91, 0x80, 0xdb, 0x82, 0x71, 0x82, 0x12, 0x83, 0x14, 0x85, 0x2f,
- 0x83, 0xc0, 0x81, 0xe2, 0x80, 0x62, 0x7f, 0x41, 0x7f, 0x89, 0x80, 0xbb, 0x7f, 0xdc, 0x7f, 0x60,
- 0x80, 0x10, 0x7f, 0x15, 0x7f, 0x15, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x31, 0x80, 0x10, 0x81, 0x87,
+ 0x80, 0x99, 0x82, 0x52, 0x7f, 0x89, 0x80, 0xd1, 0x83, 0x6c, 0x80, 0x12, 0x85, 0x14, 0x7e, 0x2e,
+ 0x84, 0xb7, 0x7f, 0xd8, 0x82, 0x5e, 0x82, 0x3d, 0x81, 0x82, 0x81, 0xb3, 0x81, 0xd2, 0x80, 0x5b,
+ 0x80, 0x10, 0x81, 0x14, 0x81, 0x14, 0x80, 0x10, 0x80, 0x31, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x30, 0x80, 0x10, 0x7f, 0x9b,
- 0x7f, 0x67, 0x7f, 0x35, 0x80, 0x50, 0x80, 0xc7, 0x81, 0x86, 0x82, 0x14, 0x82, 0x1e, 0x82, 0x37,
- 0x83, 0xd3, 0x82, 0xb4, 0x82, 0x1b, 0x83, 0x24, 0x82, 0x4c, 0x7f, 0x71, 0x7f, 0xeb, 0x7f, 0x83,
- 0x80, 0x10, 0x7f, 0x11, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x2d, 0x80, 0x10, 0x81, 0x93,
+ 0x80, 0x62, 0x81, 0x32, 0x81, 0x4c, 0x82, 0xbe, 0x83, 0x81, 0x83, 0x14, 0x83, 0x1e, 0x82, 0x36,
+ 0x83, 0xcb, 0x82, 0xae, 0x83, 0x1b, 0x80, 0x24, 0x83, 0x49, 0x80, 0x6b, 0x80, 0xe1, 0x80, 0x7c,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x31, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x32, 0x80, 0x10, 0x7f, 0x8b,
- 0x7f, 0x3c, 0x7f, 0x19, 0x7c, 0x40, 0x77, 0xc2, 0x72, 0x74, 0x7d, 0x13, 0x78, 0x20, 0x78, 0x29,
- 0x74, 0x95, 0x78, 0x9a, 0x7d, 0x1d, 0x80, 0x10, 0x81, 0x11, 0x80, 0x45, 0x7f, 0xeb, 0x7f, 0x81,
- 0x80, 0x10, 0x7f, 0x17, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x2f, 0x80, 0x10, 0x80, 0x85,
+ 0x80, 0x39, 0x83, 0x17, 0x7f, 0x3b, 0x87, 0xb7, 0x76, 0x6b, 0x85, 0x13, 0x7b, 0x1d, 0x8a, 0x25,
+ 0x77, 0x8c, 0x87, 0x91, 0x7f, 0x1b, 0x80, 0x10, 0x81, 0x10, 0x80, 0x42, 0x80, 0xe1, 0x81, 0x7a,
+ 0x80, 0x10, 0x81, 0x16, 0x80, 0x10, 0x80, 0x10, 0x80, 0x31, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x31, 0x80, 0x10, 0x7f, 0x8d,
- 0x7f, 0x77, 0x80, 0x10, 0x79, 0x23, 0x67, 0x7b, 0x5a, 0x7a, 0x56, 0x7e, 0x51, 0x80, 0x54, 0x65,
- 0x5a, 0x8d, 0x66, 0x97, 0x79, 0x1c, 0x80, 0x10, 0x80, 0x10, 0x81, 0x5b, 0x7f, 0xeb, 0x80, 0x80,
- 0x80, 0x10, 0x7f, 0x13, 0x7f, 0x11, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x2f, 0x80, 0x10, 0x81, 0x87,
+ 0x80, 0x72, 0x80, 0x10, 0x7b, 0x20, 0x8d, 0x6d, 0x61, 0x67, 0x94, 0x69, 0x57, 0x6a, 0x95, 0x51,
+ 0x60, 0x79, 0x8f, 0x87, 0x7b, 0x19, 0x80, 0x10, 0x80, 0x10, 0x81, 0x57, 0x80, 0xe1, 0x80, 0x7b,
+ 0x80, 0x10, 0x81, 0x12, 0x80, 0x10, 0x80, 0x10, 0x80, 0x31, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x32, 0x80, 0x10, 0x7e, 0x63,
- 0x7a, 0xa6, 0x76, 0x25, 0x64, 0x4b, 0x53, 0x80, 0x42, 0xa4, 0x35, 0xb4, 0x2f, 0xa8, 0x35, 0x9a,
- 0x40, 0xa1, 0x50, 0xa7, 0x66, 0x48, 0x76, 0x20, 0x77, 0x49, 0x7b, 0xc4, 0x7c, 0xe2, 0x7c, 0x5c,
- 0x7f, 0x10, 0x80, 0x16, 0x80, 0x14, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x2e, 0x80, 0x10, 0x81, 0x5e,
+ 0x7c, 0x9c, 0x86, 0x1f, 0x69, 0x3d, 0x94, 0x69, 0x4b, 0x86, 0x9d, 0x90, 0x3b, 0x82, 0x9e, 0x78,
+ 0x49, 0x83, 0x95, 0x8e, 0x6a, 0x3c, 0x85, 0x1b, 0x79, 0x42, 0x81, 0xb9, 0x7c, 0xd6, 0x82, 0x56,
+ 0x80, 0x10, 0x82, 0x15, 0x82, 0x12, 0x80, 0x10, 0x80, 0x31, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7e, 0x30, 0x7f, 0x10, 0x7a, 0x2a,
- 0x65, 0x89, 0x52, 0x74, 0x49, 0x91, 0x3f, 0xa8, 0x34, 0xa9, 0x2b, 0xac, 0x27, 0xb7, 0x2a, 0xb2,
- 0x2f, 0xb2, 0x39, 0xc2, 0x42, 0xa6, 0x49, 0x94, 0x48, 0xa8, 0x4a, 0xc1, 0x57, 0x98, 0x6f, 0x33,
- 0x7e, 0x12, 0x82, 0x15, 0x86, 0x13, 0x80, 0x10, 0x81, 0x36, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x82, 0x2d, 0x80, 0x10, 0x85, 0x27,
+ 0x6a, 0x79, 0x98, 0x5e, 0x52, 0x78, 0x9e, 0x89, 0x3e, 0x86, 0xa2, 0x85, 0x33, 0x8e, 0xa1, 0x8a,
+ 0x3a, 0x8c, 0x99, 0x9e, 0x4b, 0x87, 0x92, 0x77, 0x4f, 0x8b, 0x95, 0xa4, 0x5d, 0x82, 0x8c, 0x2c,
+ 0x80, 0x12, 0x81, 0x14, 0x86, 0x14, 0x80, 0x10, 0x81, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7d, 0x3d, 0x7f, 0x11, 0x74, 0x26,
- 0x54, 0x78, 0x3c, 0x99, 0x35, 0xa4, 0x32, 0xa7, 0x2f, 0xa8, 0x2a, 0xb2, 0x28, 0xbd, 0x27, 0xc1,
- 0x29, 0xc1, 0x2a, 0xbf, 0x2d, 0xc8, 0x2e, 0xc9, 0x28, 0xbc, 0x28, 0xab, 0x3c, 0xa6, 0x65, 0x4e,
- 0x7e, 0x13, 0x83, 0x13, 0x8a, 0x17, 0x83, 0x10, 0x81, 0x32, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x83, 0x39, 0x80, 0x10, 0x89, 0x21,
+ 0x5b, 0x64, 0xa4, 0x7b, 0x41, 0x83, 0xa4, 0x85, 0x3a, 0x83, 0xa3, 0x8b, 0x34, 0x94, 0xa1, 0x97,
+ 0x34, 0x97, 0x9d, 0x95, 0x39, 0x9f, 0x9b, 0xa0, 0x33, 0x92, 0xa4, 0x83, 0x46, 0x86, 0x92, 0x42,
+ 0x7f, 0x13, 0x81, 0x14, 0x8a, 0x19, 0x80, 0x12, 0x81, 0x30, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7e, 0x2f, 0x78, 0x1d, 0x6d, 0x4e,
- 0x51, 0x85, 0x35, 0x98, 0x2f, 0xa3, 0x2f, 0xab, 0x2f, 0xaf, 0x2d, 0xb3, 0x2c, 0xba, 0x2c, 0xc1,
- 0x2b, 0xbe, 0x2a, 0xbf, 0x2a, 0xc6, 0x2a, 0xb5, 0x31, 0x99, 0x38, 0x8b, 0x45, 0xac, 0x69, 0x5e,
- 0x7e, 0x12, 0x83, 0x16, 0x87, 0x15, 0x86, 0x15, 0x80, 0x10, 0x80, 0x38, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x2c, 0x7b, 0x1a, 0x8a, 0x44,
+ 0x59, 0x70, 0xa9, 0x78, 0x3b, 0x80, 0xa5, 0x87, 0x3a, 0x89, 0x9f, 0x8c, 0x37, 0x91, 0x9d, 0x98,
+ 0x36, 0x95, 0x9e, 0x96, 0x36, 0x9c, 0xa0, 0x8d, 0x3c, 0x75, 0x9f, 0x6b, 0x4e, 0x90, 0x90, 0x53,
+ 0x80, 0x12, 0x83, 0x16, 0x88, 0x16, 0x80, 0x16, 0x80, 0x10, 0x81, 0x35, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7e, 0x2b, 0x7a, 0x19, 0x70, 0x66,
- 0x51, 0x91, 0x31, 0xa6, 0x2d, 0xab, 0x2e, 0xab, 0x30, 0xab, 0x30, 0xb5, 0x30, 0xc2, 0x2f, 0xc1,
- 0x2d, 0xbf, 0x2d, 0xc2, 0x2d, 0xb0, 0x33, 0x94, 0x39, 0x8e, 0x43, 0x8e, 0x52, 0x9d, 0x6c, 0x52,
- 0x7f, 0x11, 0x82, 0x11, 0x85, 0x12, 0x83, 0x17, 0x80, 0x10, 0x7f, 0x39, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x28, 0x7d, 0x16, 0x89, 0x5b,
+ 0x59, 0x7a, 0xa9, 0x85, 0x39, 0x86, 0xa4, 0x85, 0x3b, 0x86, 0x9b, 0x8e, 0x3b, 0x9a, 0x9b, 0x99,
+ 0x38, 0x96, 0x9f, 0x9a, 0x37, 0x89, 0xa4, 0x72, 0x43, 0x6e, 0x9a, 0x72, 0x59, 0x86, 0x8e, 0x48,
+ 0x80, 0x11, 0x81, 0x12, 0x85, 0x13, 0x7e, 0x16, 0x80, 0x10, 0x81, 0x37, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x27, 0x7d, 0x1a, 0x74, 0x3e,
- 0x54, 0x77, 0x37, 0x98, 0x30, 0xa2, 0x32, 0xae, 0x33, 0xb3, 0x33, 0xb7, 0x32, 0xb8, 0x34, 0xaf,
- 0x37, 0xac, 0x33, 0xa9, 0x38, 0x8d, 0x3b, 0x87, 0x40, 0x96, 0x52, 0x99, 0x5f, 0x96, 0x70, 0x4a,
- 0x7f, 0x11, 0x81, 0x14, 0x82, 0x2c, 0x80, 0x2d, 0x7e, 0x1c, 0x7f, 0x18, 0x7f, 0x2e, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x24, 0x7f, 0x18, 0x88, 0x37,
+ 0x5b, 0x62, 0xa4, 0x77, 0x3c, 0x7f, 0xa3, 0x8a, 0x3e, 0x8f, 0x9d, 0x92, 0x3c, 0x92, 0x9b, 0x8a,
+ 0x42, 0x89, 0xa0, 0x85, 0x42, 0x6e, 0xa3, 0x69, 0x49, 0x78, 0x95, 0x82, 0x65, 0x83, 0x8c, 0x42,
+ 0x80, 0x11, 0x82, 0x14, 0x82, 0x2b, 0x7f, 0x2b, 0x80, 0x19, 0x81, 0x16, 0x81, 0x2b, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x25, 0x7c, 0x1d, 0x7d, 0x18,
- 0x5d, 0x6d, 0x48, 0x6f, 0x41, 0x7b, 0x3b, 0x94, 0x38, 0xa1, 0x39, 0x93, 0x3b, 0x86, 0x3f, 0x80,
- 0x43, 0x7b, 0x40, 0x86, 0x41, 0x8e, 0x45, 0x91, 0x53, 0x98, 0x63, 0xa6, 0x6b, 0xaf, 0x78, 0x59,
- 0x80, 0x10, 0x7f, 0x12, 0x7f, 0x55, 0x7e, 0x86, 0x7d, 0x5b, 0x80, 0x10, 0x7f, 0x15, 0x80, 0x1e,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x22, 0x7e, 0x1b, 0x84, 0x16,
+ 0x63, 0x5b, 0x99, 0x57, 0x4b, 0x60, 0x9f, 0x74, 0x41, 0x80, 0xa1, 0x72, 0x46, 0x67, 0x9e, 0x64,
+ 0x4d, 0x60, 0x9f, 0x69, 0x4b, 0x72, 0x9d, 0x77, 0x5b, 0x82, 0x8e, 0x94, 0x6f, 0xa0, 0x87, 0x52,
+ 0x80, 0x10, 0x81, 0x10, 0x80, 0x51, 0x80, 0x7e, 0x7f, 0x55, 0x80, 0x10, 0x81, 0x14, 0x81, 0x1c,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x22, 0x7b, 0x1e, 0x7b, 0x25,
- 0x68, 0x9e, 0x59, 0x7c, 0x52, 0x69, 0x49, 0x83, 0x41, 0x9b, 0x3d, 0x91, 0x3d, 0x88, 0x3d, 0x8e,
- 0x42, 0x8f, 0x4c, 0x87, 0x55, 0x85, 0x5c, 0x9d, 0x67, 0xb1, 0x70, 0xbb, 0x75, 0xc4, 0x7b, 0x69,
- 0x80, 0x10, 0x7f, 0x13, 0x7e, 0x38, 0x7d, 0x81, 0x7d, 0x72, 0x7e, 0x1b, 0x80, 0x10, 0x81, 0x3a,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x20, 0x7c, 0x1b, 0x84, 0x22,
+ 0x6d, 0x8d, 0x8f, 0x67, 0x59, 0x53, 0x9a, 0x69, 0x4a, 0x7e, 0xa4, 0x74, 0x47, 0x6b, 0xa4, 0x70,
+ 0x4c, 0x74, 0x9d, 0x6f, 0x5d, 0x71, 0x92, 0x89, 0x6c, 0xa0, 0x89, 0xae, 0x78, 0xb8, 0x84, 0x63,
+ 0x80, 0x10, 0x81, 0x11, 0x80, 0x34, 0x80, 0x79, 0x7e, 0x6b, 0x83, 0x19, 0x80, 0x10, 0x83, 0x39,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x34, 0x7f, 0x10, 0x79, 0x2e,
- 0x73, 0xa3, 0x6d, 0xa1, 0x64, 0x83, 0x59, 0x76, 0x4e, 0x83, 0x45, 0x8b, 0x41, 0x8a, 0x45, 0x85,
- 0x4f, 0x7c, 0x5c, 0x86, 0x67, 0x9a, 0x71, 0xaf, 0x77, 0xc1, 0x7a, 0xc2, 0x7c, 0xd2, 0x7d, 0x78,
- 0x80, 0x10, 0x7f, 0x14, 0x7e, 0x1a, 0x7e, 0x51, 0x7e, 0x4c, 0x7f, 0x11, 0x7f, 0x13, 0x80, 0x1c,
- 0x7f, 0x33, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x31, 0x80, 0x10, 0x82, 0x29,
+ 0x75, 0x96, 0x84, 0x91, 0x68, 0x72, 0x92, 0x63, 0x56, 0x6c, 0xa3, 0x72, 0x4c, 0x70, 0xa6, 0x6c,
+ 0x57, 0x67, 0x96, 0x74, 0x6c, 0x8a, 0x87, 0xa1, 0x7a, 0xb5, 0x84, 0xb7, 0x7d, 0xc6, 0x82, 0x72,
+ 0x80, 0x10, 0x82, 0x12, 0x7f, 0x18, 0x80, 0x4c, 0x7f, 0x48, 0x81, 0x10, 0x81, 0x12, 0x83, 0x1b,
+ 0x80, 0x31, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x29, 0x81, 0x24, 0x7f, 0x11, 0x7a, 0x2b,
- 0x7a, 0xaa, 0x7b, 0xb9, 0x73, 0xa8, 0x68, 0x82, 0x5c, 0x71, 0x54, 0x6d, 0x51, 0x6b, 0x53, 0x75,
- 0x5e, 0x8a, 0x69, 0xa1, 0x75, 0xae, 0x7f, 0xbc, 0x81, 0xd4, 0x7f, 0xe3, 0x7f, 0xe9, 0x7f, 0xba,
- 0x7f, 0x29, 0x80, 0x10, 0x7f, 0x15, 0x7f, 0x15, 0x81, 0x1a, 0x81, 0x12, 0x7f, 0x15, 0x80, 0x10,
- 0x7f, 0x25, 0x7f, 0x11, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x26, 0x81, 0x23, 0x80, 0x10, 0x81, 0x26,
+ 0x7c, 0x9f, 0x7f, 0xad, 0x77, 0x9c, 0x8c, 0x74, 0x62, 0x60, 0x9c, 0x5b, 0x59, 0x57, 0x9f, 0x62,
+ 0x65, 0x79, 0x8f, 0x92, 0x77, 0xa3, 0x81, 0xb3, 0x82, 0xca, 0x80, 0xd8, 0x80, 0xde, 0x81, 0xb2,
+ 0x81, 0x26, 0x80, 0x10, 0x81, 0x14, 0x81, 0x14, 0x81, 0x19, 0x81, 0x11, 0x82, 0x14, 0x80, 0x10,
+ 0x81, 0x23, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x82, 0x3a, 0x80, 0x10, 0x80, 0x10, 0x7d, 0x3c,
- 0x7e, 0xc7, 0x7f, 0xb9, 0x7b, 0xb3, 0x73, 0xb1, 0x6b, 0xa5, 0x66, 0x99, 0x64, 0x99, 0x66, 0xa1,
- 0x6c, 0xae, 0x74, 0xb5, 0x7c, 0xbb, 0x82, 0xd4, 0x82, 0xe6, 0x80, 0xe9, 0x80, 0xe9, 0x80, 0xe9,
- 0x7f, 0x81, 0x80, 0x16, 0x81, 0x11, 0x82, 0x13, 0x83, 0x11, 0x82, 0x1b, 0x80, 0x10, 0x7f, 0x11,
- 0x7f, 0x21, 0x7f, 0x18, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x83, 0x39, 0x80, 0x10, 0x80, 0x10, 0x80, 0x38,
+ 0x7f, 0xbd, 0x81, 0xb0, 0x7c, 0xa9, 0x89, 0xa5, 0x70, 0x97, 0x91, 0x8a, 0x6a, 0x8a, 0x91, 0x91,
+ 0x70, 0xa0, 0x89, 0xa9, 0x7d, 0xb2, 0x81, 0xcb, 0x82, 0xdc, 0x7f, 0xde, 0x81, 0xde, 0x81, 0xde,
+ 0x80, 0x7b, 0x81, 0x16, 0x81, 0x10, 0x81, 0x13, 0x83, 0x12, 0x81, 0x1a, 0x80, 0x10, 0x80, 0x10,
+ 0x7f, 0x20, 0x81, 0x16, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x2d, 0x83, 0x1b, 0x84, 0x13, 0x82, 0x40, 0x7f, 0xc9,
- 0x7f, 0xe9, 0x7f, 0xd2, 0x7d, 0xb7, 0x7b, 0xb4, 0x79, 0xb3, 0x77, 0xb4, 0x76, 0xba, 0x77, 0xb7,
- 0x79, 0xbe, 0x7c, 0xd0, 0x7e, 0xde, 0x80, 0xe7, 0x7f, 0xea, 0x80, 0xe5, 0x7f, 0xe7, 0x7f, 0xeb,
- 0x7f, 0xdd, 0x81, 0x7e, 0x81, 0x13, 0x84, 0x16, 0x85, 0x11, 0x82, 0x14, 0x80, 0x15, 0x7e, 0x12,
- 0x7f, 0x10, 0x7f, 0x35, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x2b, 0x83, 0x1b, 0x80, 0x14, 0x82, 0x3d, 0x7f, 0xbf,
+ 0x81, 0xde, 0x84, 0xc9, 0x7f, 0xae, 0x85, 0xaa, 0x7b, 0xa8, 0x82, 0xa9, 0x78, 0xae, 0x82, 0xaa,
+ 0x7a, 0xb3, 0x82, 0xc6, 0x80, 0xd3, 0x83, 0xdc, 0x7f, 0xe0, 0x7e, 0xda, 0x80, 0xdc, 0x80, 0xe1,
+ 0x80, 0xd3, 0x81, 0x79, 0x82, 0x12, 0x81, 0x18, 0x84, 0x12, 0x80, 0x14, 0x81, 0x13, 0x80, 0x10,
+ 0x80, 0x10, 0x81, 0x33, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x82, 0x35, 0x80, 0x10, 0x85, 0x27, 0x83, 0xaf, 0x7f, 0xeb,
- 0x7d, 0xe8, 0x7d, 0xe4, 0x7d, 0xcd, 0x7f, 0xb2, 0x80, 0xad, 0x82, 0xaf, 0x82, 0xb5, 0x81, 0xc7,
- 0x80, 0xdb, 0x7f, 0xe9, 0x7d, 0xe8, 0x7c, 0xe6, 0x7e, 0xe8, 0x80, 0xe8, 0x7f, 0xe8, 0x7d, 0xe6,
- 0x7f, 0xeb, 0x81, 0xd1, 0x84, 0x42, 0x82, 0x10, 0x86, 0x17, 0x83, 0x13, 0x7e, 0x15, 0x7d, 0x14,
- 0x80, 0x10, 0x7f, 0x16, 0x7f, 0x25, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x34, 0x80, 0x10, 0x80, 0x27, 0x84, 0xa7, 0x80, 0xe1,
+ 0x80, 0xdc, 0x86, 0xd9, 0x7f, 0xc3, 0x82, 0xa9, 0x81, 0xa5, 0x7b, 0xa6, 0x82, 0xac, 0x79, 0xbd,
+ 0x81, 0xd0, 0x80, 0xdd, 0x80, 0xdc, 0x85, 0xdb, 0x80, 0xdc, 0x7e, 0xdc, 0x80, 0xdc, 0x80, 0xda,
+ 0x80, 0xe1, 0x80, 0xc8, 0x86, 0x40, 0x80, 0x11, 0x87, 0x19, 0x80, 0x14, 0x7f, 0x13, 0x7e, 0x12,
+ 0x80, 0x10, 0x81, 0x16, 0x81, 0x22, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x7f, 0x38, 0x80, 0x10, 0x81, 0x10, 0x81, 0x6b, 0x81, 0xe5, 0x7f, 0xe6,
- 0x7e, 0xe8, 0x7d, 0xe4, 0x7e, 0xe1, 0x7f, 0xd2, 0x80, 0xc4, 0x81, 0xc6, 0x82, 0xd4, 0x81, 0xe3,
- 0x80, 0xe9, 0x7f, 0xea, 0x7e, 0xe8, 0x7d, 0xe9, 0x7e, 0xea, 0x80, 0xe9, 0x7f, 0xe7, 0x7f, 0xe6,
- 0x7f, 0xeb, 0x7f, 0xe9, 0x81, 0x69, 0x80, 0x10, 0x82, 0x14, 0x81, 0x18, 0x7f, 0x13, 0x7f, 0x11,
- 0x7f, 0x12, 0x80, 0x10, 0x7f, 0x36, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x81, 0x35, 0x80, 0x10, 0x81, 0x10, 0x81, 0x67, 0x82, 0xdb, 0x80, 0xdc,
+ 0x80, 0xdc, 0x83, 0xd9, 0x7f, 0xd7, 0x80, 0xc7, 0x81, 0xbc, 0x7c, 0xbc, 0x83, 0xca, 0x7d, 0xd7,
+ 0x81, 0xdf, 0x80, 0xdf, 0x80, 0xdc, 0x82, 0xde, 0x7f, 0xde, 0x80, 0xde, 0x81, 0xdc, 0x80, 0xdb,
+ 0x80, 0xe1, 0x81, 0xde, 0x82, 0x65, 0x80, 0x10, 0x84, 0x14, 0x80, 0x17, 0x81, 0x12, 0x80, 0x10,
+ 0x81, 0x12, 0x80, 0x10, 0x81, 0x33, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x7f, 0x23, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x3b, 0x7f, 0xb9, 0x7f, 0xeb, 0x7f, 0xe9,
- 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xeb, 0x7f, 0xe8, 0x7e, 0xdd, 0x7f, 0xe1, 0x7f, 0xe9, 0x7f, 0xe9,
- 0x7e, 0xea, 0x7e, 0xea, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xea, 0x80, 0xe7,
- 0x7f, 0xeb, 0x7f, 0xeb, 0x7f, 0x7c, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x12, 0x7f, 0x11, 0x7f, 0x15,
- 0x7f, 0x13, 0x80, 0x10, 0x7f, 0x13, 0x7f, 0x39, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x81, 0x22, 0x80, 0x10, 0x80, 0x10, 0x80, 0x39, 0x81, 0xb0, 0x80, 0xe1, 0x81, 0xde,
+ 0x80, 0xde, 0x81, 0xe0, 0x80, 0xe1, 0x81, 0xdc, 0x7f, 0xd3, 0x81, 0xd5, 0x80, 0xde, 0x81, 0xde,
+ 0x7f, 0xde, 0x82, 0xde, 0x80, 0xdf, 0x81, 0xde, 0x80, 0xde, 0x81, 0xde, 0x81, 0xde, 0x81, 0xdc,
+ 0x80, 0xe1, 0x80, 0xe1, 0x81, 0x76, 0x80, 0x10, 0x80, 0x10, 0x81, 0x12, 0x80, 0x10, 0x81, 0x14,
+ 0x81, 0x12, 0x80, 0x10, 0x81, 0x12, 0x81, 0x35, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x7f, 0x39, 0x7f, 0x26, 0x80, 0x10, 0x7f, 0x17, 0x7f, 0x7d, 0x7f, 0xe9, 0x7f, 0xe7, 0x7f, 0xe8,
- 0x7f, 0xe6, 0x7f, 0xe7, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe5, 0x7f, 0xe8, 0x7f, 0xea, 0x7f, 0xe7,
- 0x7f, 0xe6, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xeb, 0x7f, 0xe7,
- 0x7f, 0xe9, 0x7f, 0xeb, 0x7f, 0xb0, 0x7f, 0x23, 0x80, 0x10, 0x7f, 0x12, 0x80, 0x10, 0x7f, 0x11,
- 0x80, 0x10, 0x7f, 0x15, 0x7f, 0x13, 0x80, 0x10, 0x7f, 0x38, 0x7f, 0x2d, 0x80, 0x10, 0x80, 0x10,
+ 0x81, 0x35, 0x81, 0x24, 0x80, 0x10, 0x81, 0x16, 0x81, 0x76, 0x81, 0xde, 0x81, 0xdc, 0x81, 0xdc,
+ 0x80, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xde, 0x80, 0xda, 0x81, 0xdc, 0x7f, 0xe0, 0x81, 0xdc,
+ 0x80, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xe0, 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xe1, 0x81, 0xdc,
+ 0x81, 0xde, 0x80, 0xe1, 0x81, 0xa8, 0x81, 0x22, 0x80, 0x10, 0x81, 0x11, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x81, 0x14, 0x81, 0x12, 0x80, 0x10, 0x81, 0x35, 0x81, 0x2b, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x37,
- 0x80, 0x10, 0x80, 0x10, 0x7f, 0x15, 0x7f, 0x30, 0x7f, 0xa4, 0x7f, 0xe4, 0x7f, 0xe7, 0x80, 0xe8,
- 0x7f, 0xea, 0x7f, 0xe8, 0x7f, 0xe6, 0x7f, 0xe5, 0x7f, 0xe0, 0x7f, 0xe1, 0x7f, 0xe9, 0x7f, 0xe9,
- 0x7f, 0xe6, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xeb, 0x7f, 0xe2,
- 0x7f, 0xdb, 0x7f, 0xdd, 0x7f, 0xce, 0x7f, 0x41, 0x80, 0x10, 0x7f, 0x12, 0x7f, 0x14, 0x80, 0x10,
- 0x7f, 0x16, 0x7f, 0x16, 0x7f, 0x12, 0x7f, 0x13, 0x80, 0x10, 0x7f, 0x16, 0x7f, 0x30, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x35,
+ 0x80, 0x10, 0x80, 0x10, 0x81, 0x14, 0x81, 0x2d, 0x81, 0x9c, 0x80, 0xd8, 0x81, 0xdc, 0x81, 0xdd,
+ 0x81, 0xde, 0x81, 0xdc, 0x80, 0xdc, 0x81, 0xda, 0x80, 0xd5, 0x81, 0xd5, 0x80, 0xde, 0x81, 0xde,
+ 0x80, 0xdc, 0x81, 0xde, 0x7f, 0xe0, 0x81, 0xde, 0x81, 0xdc, 0x81, 0xde, 0x80, 0xe1, 0x80, 0xd8,
+ 0x80, 0xd0, 0x81, 0xd2, 0x81, 0xc5, 0x81, 0x3d, 0x80, 0x10, 0x81, 0x12, 0x81, 0x12, 0x80, 0x10,
+ 0x81, 0x14, 0x81, 0x14, 0x81, 0x12, 0x81, 0x12, 0x80, 0x10, 0x81, 0x14, 0x81, 0x2d, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x3a, 0x80, 0x10,
- 0x7f, 0x16, 0x7f, 0x11, 0x7f, 0x13, 0x7f, 0x37, 0x7f, 0x9c, 0x7f, 0xc5, 0x7f, 0xd9, 0x7f, 0xdd,
- 0x7f, 0xe4, 0x7f, 0xe6, 0x7f, 0xe1, 0x7f, 0xda, 0x7f, 0xd1, 0x7f, 0xd2, 0x7f, 0xe2, 0x7f, 0xe9,
- 0x7f, 0xe4, 0x7f, 0xe4, 0x7f, 0xe3, 0x7f, 0xda, 0x7f, 0xd4, 0x7f, 0xce, 0x7f, 0xcf, 0x7f, 0xc7,
- 0x7f, 0xc0, 0x7f, 0xc4, 0x7f, 0xc7, 0x7f, 0x7a, 0x7f, 0x22, 0x80, 0x10, 0x7f, 0x12, 0x80, 0x10,
- 0x7f, 0x12, 0x7f, 0x18, 0x7f, 0x13, 0x7f, 0x1b, 0x7f, 0x14, 0x80, 0x10, 0x7f, 0x22, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x37, 0x80, 0x10,
+ 0x81, 0x14, 0x80, 0x10, 0x81, 0x12, 0x81, 0x35, 0x80, 0x95, 0x81, 0xbb, 0x80, 0xd0, 0x81, 0xd2,
+ 0x80, 0xd8, 0x81, 0xdc, 0x80, 0xd5, 0x81, 0xcf, 0x7f, 0xc7, 0x81, 0xc9, 0x7f, 0xd7, 0x81, 0xde,
+ 0x80, 0xda, 0x81, 0xda, 0x7f, 0xd7, 0x81, 0xcf, 0x81, 0xca, 0x81, 0xc5, 0x81, 0xc5, 0x81, 0xbd,
+ 0x80, 0xb7, 0x81, 0xbb, 0x81, 0xbd, 0x80, 0x74, 0x80, 0x20, 0x80, 0x10, 0x81, 0x12, 0x80, 0x10,
+ 0x81, 0x12, 0x81, 0x16, 0x81, 0x12, 0x81, 0x1a, 0x81, 0x12, 0x80, 0x10, 0x80, 0x20, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10,
- 0x80, 0x10, 0x7f, 0x19, 0x7f, 0x16, 0x7f, 0x3b, 0x7f, 0x8e, 0x7f, 0xb1, 0x7f, 0xbf, 0x7f, 0xd5,
- 0x7f, 0xe2, 0x7f, 0xe8, 0x7f, 0xe6, 0x7f, 0xdc, 0x7f, 0xcf, 0x7f, 0xd7, 0x7f, 0xe6, 0x7f, 0xe9,
- 0x7f, 0xe6, 0x7f, 0xe7, 0x7f, 0xe5, 0x7f, 0xda, 0x7f, 0xcb, 0x80, 0xbc, 0x7f, 0xbc, 0x7f, 0xb8,
- 0x7f, 0xb3, 0x7f, 0xb7, 0x7f, 0xbc, 0x7f, 0xc8, 0x7f, 0x60, 0x80, 0x10, 0x7f, 0x1c, 0x7f, 0x21,
- 0x7f, 0x18, 0x7f, 0x13, 0x7f, 0x13, 0x7f, 0x17, 0x7f, 0x16, 0x7f, 0x13, 0x80, 0x10, 0x7f, 0x11,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x31, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x18, 0x81, 0x16, 0x80, 0x39, 0x81, 0x87, 0x81, 0xa8, 0x80, 0xb7, 0x81, 0xcc,
+ 0x80, 0xd8, 0x81, 0xdc, 0x80, 0xdc, 0x81, 0xd1, 0x80, 0xc5, 0x81, 0xcc, 0x80, 0xdc, 0x81, 0xde,
+ 0x80, 0xdc, 0x81, 0xdc, 0x80, 0xda, 0x81, 0xcf, 0x81, 0xc1, 0x81, 0xb3, 0x81, 0xb3, 0x80, 0xae,
+ 0x81, 0xaa, 0x80, 0xae, 0x81, 0xb3, 0x80, 0xbf, 0x80, 0x5b, 0x80, 0x10, 0x81, 0x1a, 0x81, 0x1e,
+ 0x81, 0x16, 0x81, 0x12, 0x81, 0x12, 0x81, 0x16, 0x81, 0x16, 0x81, 0x12, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10,
- 0x7f, 0x10, 0x7f, 0x16, 0x80, 0x10, 0x7f, 0x47, 0x7f, 0xad, 0x7f, 0xc6, 0x7f, 0xd7, 0x7f, 0xe4,
- 0x7f, 0xe5, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe2, 0x7f, 0xdc, 0x7f, 0xe3, 0x7f, 0xea, 0x7f, 0xe8,
- 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe7, 0x7f, 0xe0, 0x7f, 0xd9, 0x7f, 0xd4, 0x7f, 0xc7,
- 0x7f, 0xb9, 0x7f, 0xb0, 0x7f, 0xb1, 0x7f, 0xce, 0x7f, 0x9a, 0x80, 0x10, 0x7f, 0x19, 0x7f, 0x3d,
- 0x7f, 0x2a, 0x7f, 0x1d, 0x7f, 0x11, 0x7f, 0x12, 0x7f, 0x14, 0x7f, 0x14, 0x80, 0x10, 0x7f, 0x1b,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x31, 0x80, 0x10,
+ 0x80, 0x10, 0x81, 0x16, 0x80, 0x10, 0x81, 0x44, 0x81, 0xa4, 0x81, 0xbd, 0x81, 0xcc, 0x80, 0xd8,
+ 0x81, 0xda, 0x81, 0xe0, 0x80, 0xde, 0x81, 0xd7, 0x80, 0xd1, 0x81, 0xd7, 0x81, 0xde, 0x81, 0xdc,
+ 0x80, 0xde, 0x81, 0xde, 0x80, 0xde, 0x81, 0xdc, 0x80, 0xd5, 0x80, 0xd0, 0x81, 0xca, 0x81, 0xbd,
+ 0x81, 0xb0, 0x81, 0xa8, 0x81, 0xa8, 0x81, 0xc5, 0x81, 0x93, 0x80, 0x10, 0x80, 0x18, 0x80, 0x39,
+ 0x80, 0x29, 0x81, 0x1c, 0x80, 0x10, 0x81, 0x12, 0x81, 0x12, 0x81, 0x12, 0x80, 0x10, 0x81, 0x1a,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x16, 0x7f, 0x2b, 0x7f, 0x1c,
- 0x7f, 0x22, 0x80, 0x10, 0x7f, 0x1c, 0x7f, 0x7c, 0x7f, 0xda, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xe7,
- 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe6, 0x7f, 0xe2, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xe7,
- 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xea, 0x7f, 0xeb, 0x7f, 0xea, 0x7f, 0xe1,
- 0x7f, 0xd6, 0x7f, 0xd2, 0x7f, 0xc7, 0x7f, 0xc6, 0x7f, 0xba, 0x7f, 0x50, 0x80, 0x10, 0x7f, 0x18,
- 0x7f, 0x22, 0x7f, 0x1f, 0x7f, 0x1c, 0x7f, 0x10, 0x7f, 0x11, 0x7f, 0x12, 0x7f, 0x13, 0x7f, 0x31,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x14, 0x80, 0x29, 0x81, 0x1a,
+ 0x80, 0x20, 0x80, 0x10, 0x81, 0x1a, 0x81, 0x76, 0x80, 0xd0, 0x81, 0xde, 0x81, 0xde, 0x81, 0xdc,
+ 0x80, 0xde, 0x81, 0xde, 0x80, 0xde, 0x81, 0xdc, 0x7f, 0xd7, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xde, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xde, 0x80, 0xe1, 0x81, 0xde, 0x81, 0xd6,
+ 0x81, 0xcc, 0x80, 0xc7, 0x81, 0xbd, 0x81, 0xbd, 0x81, 0xb0, 0x81, 0x4c, 0x80, 0x10, 0x81, 0x16,
+ 0x80, 0x20, 0x81, 0x1e, 0x81, 0x1a, 0x80, 0x10, 0x80, 0x10, 0x81, 0x12, 0x81, 0x12, 0x81, 0x2f,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x38, 0x80, 0x10, 0x7f, 0x40,
- 0x7f, 0x18, 0x7f, 0x13, 0x7f, 0x5a, 0x7f, 0xdb, 0x7f, 0xea, 0x7f, 0xe8, 0x7f, 0xe6, 0x7f, 0xe7,
- 0x7f, 0xe7, 0x7e, 0xe8, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe7,
- 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xea, 0x7f, 0xeb,
- 0x7f, 0xeb, 0x7f, 0xeb, 0x7f, 0xe8, 0x7f, 0xda, 0x7f, 0xd3, 0x7f, 0xaf, 0x7f, 0x23, 0x80, 0x10,
- 0x7f, 0x15, 0x7f, 0x17, 0x7f, 0x30, 0x7f, 0x1a, 0x7f, 0x10, 0x7f, 0x11, 0x7f, 0x15, 0x80, 0x10,
- 0x7f, 0x39, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x35, 0x80, 0x10, 0x81, 0x3d,
+ 0x81, 0x16, 0x81, 0x12, 0x81, 0x57, 0x80, 0xd0, 0x81, 0xde, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xdc, 0x7f, 0xe0, 0x81, 0xde, 0x80, 0xdc, 0x81, 0xde, 0x80, 0xde, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xde, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xde, 0x80, 0xe1,
+ 0x80, 0xe1, 0x80, 0xe1, 0x81, 0xdc, 0x80, 0xd0, 0x81, 0xca, 0x80, 0xa6, 0x81, 0x22, 0x80, 0x10,
+ 0x81, 0x14, 0x81, 0x16, 0x81, 0x2d, 0x80, 0x18, 0x80, 0x10, 0x80, 0x10, 0x81, 0x14, 0x80, 0x10,
+ 0x81, 0x35, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x34, 0x7f, 0x22, 0x7f, 0x2c,
- 0x80, 0x10, 0x7f, 0x1d, 0x7f, 0xab, 0x7f, 0xeb, 0x7f, 0xe6, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9,
- 0x7f, 0xe5, 0x7f, 0xe5, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe7,
- 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe8, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe8,
- 0x7f, 0xe7, 0x7f, 0xe6, 0x7f, 0xe8, 0x7f, 0xe6, 0x7f, 0xd2, 0x7f, 0xd8, 0x7f, 0x5c, 0x80, 0x10,
- 0x7f, 0x16, 0x7f, 0x2b, 0x7f, 0x33, 0x7f, 0x26, 0x7f, 0x10, 0x7f, 0x11, 0x80, 0x10, 0x80, 0x10,
- 0x7f, 0x36, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x31, 0x80, 0x20, 0x80, 0x29,
+ 0x80, 0x10, 0x81, 0x1c, 0x81, 0xa2, 0x80, 0xe1, 0x81, 0xdc, 0x81, 0xde, 0x81, 0xde, 0x81, 0xde,
+ 0x81, 0xda, 0x81, 0xda, 0x80, 0xde, 0x81, 0xde, 0x80, 0xde, 0x81, 0xde, 0x80, 0xde, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xde, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xde, 0x81, 0xde, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xc7, 0x81, 0xce, 0x81, 0x57, 0x80, 0x10,
+ 0x81, 0x14, 0x80, 0x29, 0x80, 0x31, 0x81, 0x24, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x81, 0x33, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x21, 0x80, 0x10, 0x7f, 0x29, 0x7f, 0x1d,
- 0x80, 0x10, 0x7f, 0x47, 0x7f, 0xdf, 0x7f, 0xe9, 0x7f, 0xeb, 0x7f, 0xea, 0x80, 0xdf, 0x7f, 0xe8,
- 0x7f, 0xea, 0x7f, 0xe5, 0x7f, 0xe7, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe7,
- 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xe6, 0x7f, 0xe7,
- 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe5, 0x7f, 0xea, 0x7f, 0xde, 0x7f, 0xe8, 0x7f, 0xac, 0x7f, 0x16,
- 0x7f, 0x24, 0x7f, 0x41, 0x7f, 0x26, 0x7f, 0x28, 0x7f, 0x1a, 0x7f, 0x11, 0x7f, 0x11, 0x7f, 0x14,
- 0x7f, 0x19, 0x7f, 0x27, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x1e, 0x80, 0x10, 0x81, 0x26, 0x81, 0x1c,
+ 0x80, 0x10, 0x81, 0x44, 0x81, 0xd4, 0x81, 0xde, 0x80, 0xe1, 0x81, 0xde, 0x82, 0xd5, 0x81, 0xdc,
+ 0x7f, 0xe0, 0x81, 0xda, 0x80, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xde, 0x81, 0xdc, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xde, 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xde, 0x81, 0xdc, 0x81, 0xdc,
+ 0x81, 0xde, 0x81, 0xde, 0x81, 0xda, 0x81, 0xde, 0x81, 0xd4, 0x81, 0xdc, 0x81, 0xa4, 0x81, 0x16,
+ 0x81, 0x22, 0x81, 0x3d, 0x81, 0x24, 0x81, 0x26, 0x80, 0x18, 0x80, 0x10, 0x80, 0x10, 0x81, 0x12,
+ 0x80, 0x18, 0x81, 0x24, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x3a, 0x80, 0x10, 0x80, 0x22, 0x80, 0x13,
- 0x80, 0x10, 0x7f, 0xa2, 0x7f, 0xeb, 0x7f, 0xeb, 0x7f, 0xe8, 0x7f, 0xea, 0x7f, 0xe4, 0x7f, 0xe9,
- 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe7,
- 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe4, 0x7f, 0xe5,
- 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe8, 0x7f, 0xe4, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xd8, 0x80, 0x2f,
- 0x7f, 0x25, 0x7f, 0x34, 0x7f, 0x1b, 0x7f, 0x2b, 0x7f, 0x34, 0x80, 0x10, 0x7f, 0x14, 0x7f, 0x15,
- 0x80, 0x10, 0x7f, 0x37, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x37, 0x80, 0x10, 0x80, 0x20, 0x81, 0x12,
+ 0x80, 0x10, 0x81, 0x99, 0x80, 0xe1, 0x80, 0xe1, 0x81, 0xdc, 0x81, 0xde, 0x81, 0xda, 0x81, 0xde,
+ 0x81, 0xdc, 0x81, 0xde, 0x80, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xde, 0x81, 0xdc, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xde, 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xde, 0x81, 0xda, 0x81, 0xda,
+ 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xda, 0x81, 0xde, 0x81, 0xde, 0x81, 0xce, 0x81, 0x2d,
+ 0x81, 0x22, 0x80, 0x31, 0x81, 0x1a, 0x80, 0x29, 0x80, 0x31, 0x80, 0x10, 0x81, 0x12, 0x81, 0x14,
+ 0x80, 0x10, 0x81, 0x35, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x23, 0x7e, 0x1d, 0x80, 0x16, 0x82, 0x16, 0x80, 0x13,
- 0x81, 0x54, 0x80, 0xe0, 0x7f, 0xeb, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe9, 0x7e, 0xea, 0x7e, 0xe8,
- 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe1, 0x7f, 0xe3, 0x7f, 0xe9, 0x7f, 0xe3, 0x7f, 0xe7, 0x7f, 0xe8,
- 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe7,
- 0x7f, 0xe8, 0x7f, 0xe8, 0x80, 0xe8, 0x80, 0xe6, 0x80, 0xe9, 0x7f, 0xea, 0x80, 0xe3, 0x81, 0x6f,
- 0x7f, 0x12, 0x7f, 0x18, 0x7f, 0x11, 0x7f, 0x1c, 0x7f, 0x34, 0x7f, 0x17, 0x7f, 0x16, 0x7f, 0x13,
- 0x7f, 0x16, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x22, 0x7f, 0x1a, 0x81, 0x14, 0x84, 0x16, 0x81, 0x12,
+ 0x83, 0x50, 0x81, 0xd6, 0x80, 0xe1, 0x81, 0xde, 0x81, 0xdc, 0x81, 0xde, 0x7f, 0xde, 0x81, 0xde,
+ 0x80, 0xde, 0x81, 0xde, 0x80, 0xd5, 0x80, 0xd8, 0x80, 0xde, 0x80, 0xd8, 0x80, 0xdc, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xde, 0x81, 0xde, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xdc, 0x82, 0xdd, 0x81, 0xdb, 0x81, 0xde, 0x81, 0xe0, 0x81, 0xd9, 0x80, 0x6b,
+ 0x81, 0x12, 0x81, 0x16, 0x80, 0x10, 0x81, 0x1a, 0x80, 0x31, 0x81, 0x16, 0x81, 0x14, 0x81, 0x12,
+ 0x81, 0x14, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x37, 0x80, 0x10, 0x82, 0x33, 0x82, 0x18, 0x82, 0x3b,
- 0x81, 0xd4, 0x7f, 0xe9, 0x80, 0xe9, 0x7f, 0xe8, 0x7f, 0xe8, 0x7e, 0xe8, 0x7d, 0xe8, 0x7d, 0xe8,
- 0x7e, 0xe8, 0x7f, 0xe6, 0x7f, 0xdd, 0x7f, 0xe3, 0x7f, 0xe9, 0x7f, 0xe5, 0x7f, 0xe9, 0x7f, 0xe8,
- 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe8,
- 0x7f, 0xe9, 0x7f, 0xea, 0x80, 0xe5, 0x80, 0xe7, 0x80, 0xe5, 0x7f, 0xeb, 0x7f, 0xeb, 0x81, 0x9e,
- 0x80, 0x10, 0x7f, 0x10, 0x80, 0x10, 0x7f, 0x16, 0x7f, 0x3a, 0x7f, 0x22, 0x7f, 0x1b, 0x7f, 0x13,
- 0x80, 0x10, 0x7f, 0x12, 0x7f, 0x34, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x34, 0x80, 0x10, 0x81, 0x32, 0x83, 0x17, 0x81, 0x39,
+ 0x83, 0xcc, 0x81, 0xde, 0x81, 0xde, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x7e, 0xdc, 0x80, 0xdc,
+ 0x7f, 0xdc, 0x81, 0xdc, 0x80, 0xd3, 0x81, 0xd7, 0x80, 0xde, 0x81, 0xda, 0x80, 0xde, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xde, 0x81, 0xde, 0x81, 0xdc,
+ 0x81, 0xde, 0x81, 0xde, 0x81, 0xda, 0x81, 0xdc, 0x82, 0xdb, 0x80, 0xe1, 0x80, 0xe1, 0x81, 0x97,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x16, 0x81, 0x37, 0x80, 0x20, 0x81, 0x1a, 0x81, 0x12,
+ 0x80, 0x10, 0x81, 0x12, 0x80, 0x31, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x24, 0x85, 0x26, 0x87, 0x15, 0x83, 0x2f, 0x82, 0x17, 0x82, 0x6d,
- 0x81, 0xe5, 0x80, 0xe5, 0x7f, 0xe9, 0x7f, 0xe6, 0x7f, 0xe6, 0x7e, 0xe6, 0x7d, 0xe6, 0x7d, 0xe6,
- 0x7e, 0xe7, 0x7f, 0xe4, 0x7f, 0xda, 0x7f, 0xe0, 0x7f, 0xea, 0x7f, 0xe6, 0x7f, 0xe9, 0x7f, 0xe8,
- 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe8,
- 0x7f, 0xe9, 0x7f, 0xe9, 0x80, 0xe7, 0x7f, 0xe9, 0x80, 0xe5, 0x80, 0xe5, 0x7f, 0xeb, 0x80, 0xb9,
- 0x80, 0x17, 0x7f, 0x10, 0x7f, 0x12, 0x7f, 0x14, 0x7f, 0x3b, 0x7f, 0x23, 0x7f, 0x11, 0x7f, 0x16,
- 0x7f, 0x17, 0x80, 0x10, 0x7f, 0x23, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x81, 0x22, 0x80, 0x26, 0x88, 0x16, 0x80, 0x2f, 0x83, 0x17, 0x80, 0x69,
+ 0x82, 0xdb, 0x81, 0xdb, 0x81, 0xde, 0x81, 0xdc, 0x80, 0xdc, 0x81, 0xdb, 0x7f, 0xdb, 0x81, 0xdb,
+ 0x7f, 0xdb, 0x81, 0xda, 0x7f, 0xcf, 0x81, 0xd5, 0x7f, 0xe0, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xde, 0x81, 0xde, 0x81, 0xdc,
+ 0x81, 0xde, 0x81, 0xde, 0x81, 0xdc, 0x81, 0xde, 0x82, 0xdb, 0x81, 0xdb, 0x80, 0xe1, 0x81, 0xb0,
+ 0x81, 0x16, 0x80, 0x10, 0x81, 0x12, 0x81, 0x12, 0x80, 0x39, 0x81, 0x22, 0x80, 0x10, 0x81, 0x14,
+ 0x81, 0x16, 0x80, 0x10, 0x81, 0x22, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x82, 0x3b, 0x85, 0x11, 0x8a, 0x28, 0x83, 0x23, 0x82, 0x1b, 0x80, 0xaa,
- 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe5, 0x7f, 0xe6, 0x7f, 0xe6, 0x7e, 0xe6, 0x7d, 0xe6, 0x7d, 0xe6,
- 0x7e, 0xe8, 0x7f, 0xe5, 0x7f, 0xd8, 0x7f, 0xde, 0x7f, 0xe9, 0x7f, 0xe4, 0x7f, 0xe7, 0x7f, 0xe8,
- 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe8,
- 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xeb, 0x7f, 0xe1, 0x80, 0xe8, 0x80, 0xe1, 0x7f, 0xeb, 0x7f, 0xcb,
- 0x7f, 0x37, 0x80, 0x10, 0x7f, 0x14, 0x7f, 0x11, 0x7f, 0x37, 0x7f, 0x1f, 0x7f, 0x12, 0x7f, 0x14,
- 0x7f, 0x15, 0x80, 0x10, 0x7f, 0x2e, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x82, 0x39, 0x7f, 0x12, 0x8b, 0x2a, 0x81, 0x23, 0x83, 0x1b, 0x81, 0xa2,
+ 0x81, 0xde, 0x81, 0xdc, 0x81, 0xda, 0x81, 0xdc, 0x80, 0xdc, 0x81, 0xdb, 0x7f, 0xdb, 0x81, 0xdb,
+ 0x80, 0xdc, 0x81, 0xda, 0x80, 0xcd, 0x81, 0xd3, 0x80, 0xde, 0x81, 0xda, 0x80, 0xdc, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xde, 0x81, 0xde, 0x81, 0xdc,
+ 0x81, 0xde, 0x81, 0xde, 0x80, 0xe1, 0x81, 0xd6, 0x82, 0xde, 0x81, 0xd7, 0x80, 0xe1, 0x81, 0xc1,
+ 0x81, 0x35, 0x80, 0x10, 0x81, 0x12, 0x80, 0x10, 0x81, 0x35, 0x81, 0x1e, 0x81, 0x12, 0x81, 0x12,
+ 0x81, 0x14, 0x80, 0x10, 0x81, 0x2b, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x7f, 0x34, 0x81, 0x10, 0x84, 0x17, 0x83, 0x29, 0x81, 0x23, 0x80, 0x3b, 0x80, 0xc6,
- 0x7f, 0xeb, 0x7f, 0xe1, 0x7f, 0xe9, 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe7, 0x7e, 0xe7, 0x7e, 0xe7,
- 0x7e, 0xe8, 0x7f, 0xe4, 0x7f, 0xd5, 0x7f, 0xdc, 0x7f, 0xe9, 0x7f, 0xe5, 0x7f, 0xe7, 0x7f, 0xe8,
- 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe8,
- 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xdf, 0x7f, 0xe8, 0x7e, 0xe7, 0x7f, 0xea, 0x7f, 0xdf,
- 0x7f, 0x53, 0x80, 0x10, 0x7f, 0x11, 0x7f, 0x13, 0x7f, 0x32, 0x7f, 0x1c, 0x7f, 0x11, 0x7f, 0x13,
- 0x7f, 0x16, 0x7f, 0x10, 0x7f, 0x28, 0x7f, 0x16, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x31, 0x81, 0x10, 0x81, 0x17, 0x85, 0x28, 0x81, 0x22, 0x82, 0x38, 0x81, 0xbd,
+ 0x80, 0xe1, 0x81, 0xd6, 0x80, 0xde, 0x81, 0xdc, 0x80, 0xdc, 0x81, 0xdc, 0x80, 0xdc, 0x81, 0xdc,
+ 0x7f, 0xdd, 0x81, 0xda, 0x80, 0xcb, 0x81, 0xd1, 0x80, 0xde, 0x81, 0xda, 0x80, 0xdc, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xde, 0x81, 0xde, 0x81, 0xdc,
+ 0x81, 0xde, 0x81, 0xde, 0x81, 0xde, 0x81, 0xd4, 0x81, 0xdc, 0x81, 0xdc, 0x7f, 0xe0, 0x81, 0xd4,
+ 0x81, 0x4e, 0x80, 0x10, 0x80, 0x10, 0x81, 0x12, 0x81, 0x2f, 0x81, 0x1a, 0x80, 0x10, 0x81, 0x12,
+ 0x81, 0x16, 0x80, 0x10, 0x81, 0x24, 0x81, 0x16, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x7d, 0x27, 0x7e, 0x12, 0x7c, 0x17, 0x7d, 0x39, 0x7f, 0x2d, 0x7f, 0x62, 0x7f, 0xde,
- 0x7f, 0xea, 0x7f, 0xe6, 0x7f, 0xe5, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9,
- 0x7f, 0xe8, 0x7f, 0xe1, 0x7f, 0xd1, 0x7f, 0xdb, 0x7f, 0xea, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe8,
- 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe8,
- 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe6, 0x7e, 0xe6, 0x7e, 0xe4, 0x7e, 0xe6, 0x7d, 0xe7, 0x7d, 0xe9,
- 0x7f, 0x5b, 0x80, 0x10, 0x7f, 0x10, 0x7f, 0x15, 0x7f, 0x2a, 0x7f, 0x16, 0x7f, 0x11, 0x7f, 0x14,
- 0x80, 0x10, 0x7f, 0x14, 0x7f, 0x16, 0x7f, 0x3a, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x7f, 0x23, 0x80, 0x10, 0x81, 0x14, 0x7e, 0x34, 0x81, 0x2a, 0x81, 0x5d, 0x81, 0xd3,
+ 0x7f, 0xe0, 0x81, 0xdc, 0x80, 0xda, 0x81, 0xde, 0x80, 0xde, 0x81, 0xde, 0x80, 0xde, 0x81, 0xde,
+ 0x81, 0xdc, 0x81, 0xd5, 0x7f, 0xc7, 0x80, 0xd0, 0x7f, 0xe0, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xde, 0x81, 0xde, 0x81, 0xdc,
+ 0x81, 0xde, 0x81, 0xde, 0x80, 0xdc, 0x81, 0xdb, 0x7f, 0xd8, 0x81, 0xdb, 0x7f, 0xdb, 0x81, 0xdd,
+ 0x80, 0x56, 0x80, 0x10, 0x80, 0x10, 0x81, 0x14, 0x80, 0x29, 0x81, 0x14, 0x80, 0x10, 0x81, 0x12,
+ 0x80, 0x10, 0x81, 0x12, 0x81, 0x14, 0x81, 0x37, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x7f, 0x14, 0x7c, 0x1e, 0x7f, 0x10, 0x7e, 0x16, 0x7d, 0x41, 0x7e, 0x2a, 0x7f, 0x77, 0x7d, 0xe7,
- 0x7e, 0xe9, 0x7e, 0xe9, 0x7e, 0xe8, 0x7d, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8,
- 0x7f, 0xea, 0x7f, 0xe0, 0x7f, 0xd1, 0x7f, 0xdd, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe6, 0x7f, 0xe6,
- 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x80, 0xe8, 0x80, 0xe7, 0x80, 0xe7,
- 0x7f, 0xe7, 0x7f, 0xe8, 0x7e, 0xe9, 0x7d, 0xe6, 0x7d, 0xe5, 0x7d, 0xe5, 0x7d, 0xe7, 0x7d, 0xe7,
- 0x7e, 0x5f, 0x80, 0x10, 0x7f, 0x12, 0x7f, 0x25, 0x7f, 0x25, 0x7f, 0x13, 0x7f, 0x12, 0x7f, 0x16,
- 0x80, 0x10, 0x7f, 0x15, 0x80, 0x10, 0x7f, 0x3a, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x12, 0x7f, 0x1b, 0x80, 0x10, 0x80, 0x14, 0x7f, 0x3c, 0x81, 0x28, 0x81, 0x72, 0x81, 0xdb,
+ 0x80, 0xde, 0x81, 0xde, 0x80, 0xdc, 0x80, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc,
+ 0x7f, 0xe0, 0x81, 0xd5, 0x7f, 0xc7, 0x81, 0xd3, 0x80, 0xde, 0x81, 0xdc, 0x80, 0xdc, 0x81, 0xdc,
+ 0x80, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xde, 0x80, 0xde, 0x81, 0xdd, 0x82, 0xdd, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xdb, 0x7f, 0xd9, 0x82, 0xd9, 0x7f, 0xdb, 0x81, 0xdb,
+ 0x7e, 0x59, 0x80, 0x10, 0x81, 0x12, 0x81, 0x22, 0x81, 0x22, 0x81, 0x12, 0x81, 0x12, 0x81, 0x14,
+ 0x80, 0x10, 0x81, 0x14, 0x80, 0x10, 0x81, 0x37, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x39, 0x84, 0x13, 0x83, 0x10, 0x86, 0x2c, 0x83, 0x56, 0x7e, 0x30, 0x7d, 0x7d, 0x7f, 0xea,
- 0x7d, 0xe8, 0x7d, 0xe7, 0x7e, 0xe9, 0x7d, 0xe6, 0x7e, 0xe7, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xe9,
- 0x7f, 0xe9, 0x7f, 0xde, 0x7f, 0xd1, 0x7f, 0xdf, 0x7f, 0xea, 0x7f, 0xe8, 0x7f, 0xe6, 0x7f, 0xe7,
- 0x7f, 0xe7, 0x7f, 0xe8, 0x7f, 0xe8, 0x7e, 0xe8, 0x7f, 0xe9, 0x81, 0xe8, 0x80, 0xe7, 0x80, 0xe7,
- 0x7f, 0xe7, 0x7f, 0xe8, 0x7d, 0xea, 0x7d, 0xe8, 0x7d, 0xea, 0x7c, 0xe6, 0x7c, 0xe6, 0x7e, 0xea,
- 0x7e, 0x64, 0x80, 0x10, 0x7f, 0x11, 0x7f, 0x23, 0x7f, 0x22, 0x7f, 0x12, 0x7f, 0x11, 0x7f, 0x13,
- 0x7f, 0x10, 0x7f, 0x16, 0x80, 0x10, 0x7f, 0x3a, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x81, 0x37, 0x7f, 0x14, 0x83, 0x12, 0x81, 0x2d, 0x84, 0x52, 0x81, 0x2c, 0x7e, 0x75, 0x81, 0xe0,
+ 0x7f, 0xdc, 0x81, 0xdb, 0x80, 0xde, 0x81, 0xdb, 0x80, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xde,
+ 0x80, 0xde, 0x81, 0xd3, 0x7f, 0xc7, 0x81, 0xd4, 0x7f, 0xe0, 0x81, 0xdc, 0x80, 0xdc, 0x81, 0xdc,
+ 0x80, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x80, 0xde, 0x82, 0xdd, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xdc, 0x7f, 0xde, 0x81, 0xdd, 0x7e, 0xdf, 0x82, 0xda, 0x7e, 0xda, 0x81, 0xdf,
+ 0x80, 0x5e, 0x80, 0x10, 0x80, 0x10, 0x81, 0x22, 0x80, 0x20, 0x81, 0x12, 0x80, 0x10, 0x81, 0x12,
+ 0x80, 0x10, 0x81, 0x14, 0x80, 0x10, 0x81, 0x37, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x82, 0x37, 0x89, 0x16, 0x85, 0x12, 0x85, 0x1d, 0x82, 0x44, 0x7d, 0x31, 0x7c, 0x84, 0x7f, 0xea,
- 0x7e, 0xe9, 0x7d, 0xe8, 0x7d, 0xe8, 0x7d, 0xe7, 0x7e, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8,
- 0x7f, 0xe7, 0x7f, 0xdb, 0x7f, 0xd2, 0x7f, 0xe3, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe9,
- 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe6, 0x80, 0xe7, 0x81, 0xe8, 0x80, 0xe7, 0x80, 0xe7,
- 0x7f, 0xe7, 0x7e, 0xe8, 0x7d, 0xea, 0x7d, 0xe2, 0x7c, 0xe4, 0x7b, 0xe8, 0x7c, 0xea, 0x7a, 0xe8,
- 0x7d, 0x59, 0x80, 0x10, 0x7f, 0x12, 0x7f, 0x1b, 0x7f, 0x18, 0x80, 0x10, 0x7f, 0x11, 0x7f, 0x12,
- 0x7f, 0x11, 0x7f, 0x12, 0x80, 0x10, 0x7f, 0x39, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x84, 0x35, 0x80, 0x19, 0x85, 0x14, 0x85, 0x1f, 0x84, 0x42, 0x82, 0x2e, 0x7e, 0x7b, 0x81, 0xe0,
+ 0x80, 0xde, 0x80, 0xdc, 0x7f, 0xdc, 0x81, 0xdb, 0x80, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc,
+ 0x81, 0xdc, 0x80, 0xd0, 0x80, 0xc9, 0x81, 0xd7, 0x7f, 0xe0, 0x81, 0xde, 0x81, 0xdc, 0x81, 0xde,
+ 0x80, 0xde, 0x81, 0xdc, 0x80, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x82, 0xdd, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xdc, 0x7e, 0xdf, 0x81, 0xd7, 0x7e, 0xd8, 0x81, 0xdb, 0x7d, 0xde, 0x82, 0xdb,
+ 0x7f, 0x53, 0x80, 0x10, 0x81, 0x12, 0x81, 0x1a, 0x81, 0x16, 0x80, 0x10, 0x80, 0x10, 0x81, 0x12,
+ 0x80, 0x10, 0x81, 0x12, 0x80, 0x10, 0x81, 0x35, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x34, 0x7f, 0x11, 0x7f, 0x11, 0x7e, 0x12, 0x7b, 0x1d, 0x7a, 0x2b, 0x7b, 0x98, 0x7e, 0xea,
- 0x7c, 0xe3, 0x7d, 0xe6, 0x7d, 0xe9, 0x7e, 0xea, 0x7e, 0xe9, 0x7f, 0xe8, 0x7f, 0xe6, 0x7f, 0xe5,
- 0x7f, 0xe5, 0x7e, 0xdc, 0x7f, 0xd3, 0x7f, 0xe3, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9,
- 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe6, 0x80, 0xe7, 0x81, 0xe8, 0x80, 0xe7, 0x80, 0xe7,
- 0x7f, 0xe7, 0x7f, 0xe8, 0x7d, 0xe9, 0x7c, 0xe6, 0x7c, 0xe9, 0x7b, 0xe5, 0x7b, 0xe6, 0x7a, 0xe2,
- 0x7d, 0x50, 0x80, 0x10, 0x7f, 0x1e, 0x7f, 0x1f, 0x7f, 0x17, 0x7f, 0x16, 0x7f, 0x14, 0x7f, 0x11,
- 0x7f, 0x11, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x39, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x78, 0x52, 0x67, 0x4d, 0x64, 0x5d, 0x5e, 0x63, 0x67, 0x43, 0x78, 0x1c, 0x7c, 0x81, 0x7b, 0xe7,
- 0x7c, 0xea, 0x7d, 0xe6, 0x7d, 0xe5, 0x7d, 0xe9, 0x7e, 0xe8, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe6,
- 0x7f, 0xe7, 0x7f, 0xdf, 0x7f, 0xd5, 0x7f, 0xe2, 0x7e, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe7,
- 0x7f, 0xe7, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe8, 0x7f, 0xe9, 0x81, 0xe8, 0x80, 0xe7, 0x80, 0xe7,
- 0x7f, 0xe7, 0x7e, 0xe8, 0x7d, 0xe9, 0x7d, 0xe8, 0x7c, 0xe8, 0x7c, 0xe9, 0x7f, 0xeb, 0x7b, 0xb5,
- 0x7d, 0x2a, 0x7f, 0x11, 0x7f, 0x1c, 0x7f, 0x19, 0x7f, 0x14, 0x7f, 0x17, 0x7f, 0x16, 0x7f, 0x28,
- 0x80, 0x35, 0x80, 0x1d, 0x80, 0x20, 0x7f, 0x1b, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x11,
- 0x6c, 0x6e, 0x4a, 0xa3, 0x3a, 0xb8, 0x2e, 0xbd, 0x3e, 0xa8, 0x64, 0x59, 0x77, 0x3c, 0x7d, 0xa5,
- 0x80, 0xe8, 0x7f, 0xea, 0x7c, 0xe1, 0x7d, 0xe5, 0x80, 0xe5, 0x80, 0xe8, 0x80, 0xe8, 0x80, 0xe9,
- 0x7f, 0xeb, 0x7e, 0xe1, 0x7f, 0xd6, 0x7f, 0xe0, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe6,
- 0x7f, 0xe7, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe9, 0x80, 0xe9, 0x81, 0xe8, 0x81, 0xe7, 0x80, 0xe7,
- 0x7e, 0xe7, 0x7d, 0xe8, 0x7d, 0xea, 0x7b, 0xe9, 0x72, 0xdc, 0x6c, 0xc7, 0x68, 0xd1, 0x6d, 0x8f,
- 0x76, 0x21, 0x7d, 0x16, 0x7f, 0x10, 0x7f, 0x10, 0x82, 0x11, 0x83, 0x14, 0x82, 0x12, 0x80, 0x30,
- 0x7f, 0x4e, 0x7d, 0x2b, 0x7f, 0x32, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7e, 0x21,
- 0x71, 0x63, 0x50, 0x8c, 0x34, 0xb1, 0x2b, 0xaf, 0x2a, 0xb4, 0x39, 0xab, 0x6b, 0x33, 0x83, 0x25,
- 0x88, 0x90, 0x80, 0xd6, 0x7c, 0xe8, 0x7d, 0xe2, 0x82, 0xe4, 0x81, 0xe7, 0x82, 0xe5, 0x81, 0xe8,
- 0x7f, 0xe8, 0x7f, 0xdf, 0x7f, 0xd5, 0x7f, 0xe3, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe6,
- 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe7, 0x7f, 0xe7, 0x80, 0xe7, 0x82, 0xe6, 0x7f, 0xe9,
- 0x7c, 0xe9, 0x7c, 0xe8, 0x7c, 0xe7, 0x74, 0xe5, 0x5b, 0xc7, 0x43, 0xb1, 0x36, 0xb6, 0x3d, 0xb0,
- 0x5f, 0x58, 0x7e, 0x12, 0x7e, 0x11, 0x82, 0x13, 0x88, 0x11, 0x8a, 0x13, 0x88, 0x12, 0x82, 0x2e,
- 0x7b, 0x2c, 0x75, 0x2d, 0x7b, 0x39, 0x7e, 0x1c, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x73, 0x5e,
- 0x4e, 0x99, 0x3c, 0xa2, 0x30, 0xb1, 0x29, 0xa8, 0x27, 0xaf, 0x2d, 0xb7, 0x4f, 0x79, 0x78, 0x1c,
- 0x82, 0x12, 0x80, 0x68, 0x7d, 0xe0, 0x7f, 0xe8, 0x81, 0xe9, 0x80, 0xe4, 0x81, 0xe6, 0x80, 0xe8,
- 0x7f, 0xe8, 0x7f, 0xe0, 0x7f, 0xd1, 0x7f, 0xe1, 0x7f, 0xea, 0x7f, 0xe6, 0x7f, 0xe5, 0x7f, 0xe7,
- 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe7, 0x7e, 0xe7, 0x7e, 0xe8, 0x82, 0xe7, 0x7f, 0xe8,
- 0x7b, 0xe8, 0x7c, 0xe9, 0x7d, 0xe9, 0x72, 0xe3, 0x54, 0xbe, 0x36, 0xb1, 0x26, 0xbb, 0x2d, 0xb6,
- 0x61, 0x4d, 0x80, 0x10, 0x7f, 0x16, 0x86, 0x14, 0x8b, 0x12, 0x8a, 0x13, 0x83, 0x13, 0x7c, 0x22,
- 0x7b, 0x17, 0x66, 0x4b, 0x56, 0xa3, 0x72, 0x50, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x77, 0x4d, 0x77, 0x4d, 0x7a, 0x3d, 0x7c, 0x30, 0x7c, 0x35, 0x72, 0x62, 0x53, 0x83,
- 0x41, 0x93, 0x36, 0xaa, 0x2e, 0xaf, 0x2b, 0xb2, 0x2b, 0xad, 0x32, 0xb4, 0x3c, 0x9c, 0x58, 0x57,
- 0x76, 0x20, 0x80, 0x16, 0x80, 0x67, 0x7d, 0xc0, 0x7c, 0xe8, 0x7d, 0xea, 0x7f, 0xe7, 0x7e, 0xe3,
- 0x7e, 0xea, 0x7f, 0xe3, 0x7f, 0xd7, 0x7f, 0xe3, 0x7f, 0xea, 0x7f, 0xe7, 0x7f, 0xe5, 0x7f, 0xe8,
- 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7e, 0xe7, 0x7e, 0xe8, 0x81, 0xe9, 0x7f, 0xe6,
- 0x7c, 0xe8, 0x7d, 0xe9, 0x7e, 0xea, 0x74, 0xe2, 0x56, 0xb9, 0x39, 0xac, 0x2a, 0xb0, 0x32, 0xa1,
- 0x61, 0x48, 0x80, 0x10, 0x80, 0x11, 0x84, 0x11, 0x86, 0x14, 0x82, 0x17, 0x7e, 0x12, 0x7d, 0x13,
- 0x6a, 0x36, 0x4b, 0x8f, 0x3e, 0xb6, 0x59, 0x76, 0x7c, 0x2d, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x76, 0x54, 0x4e, 0x8a, 0x43, 0x9d, 0x49, 0x9e, 0x4b, 0x9c, 0x4a, 0x9d, 0x44, 0x9d, 0x3b, 0x9b,
- 0x34, 0xac, 0x2f, 0xaa, 0x2b, 0xa6, 0x2b, 0xb5, 0x2f, 0xad, 0x33, 0xaa, 0x2a, 0xb7, 0x31, 0xab,
- 0x50, 0x7d, 0x76, 0x20, 0x80, 0x10, 0x7e, 0x32, 0x77, 0x91, 0x77, 0xdd, 0x7e, 0xea, 0x7d, 0xe2,
- 0x7e, 0xe8, 0x7f, 0xe7, 0x7f, 0xe5, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xe8,
- 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe8, 0x7f, 0xe8, 0x7d, 0xe8, 0x7e, 0xe8, 0x81, 0xe8, 0x7f, 0xe5,
- 0x7c, 0xe9, 0x7d, 0xe8, 0x7e, 0xd5, 0x74, 0xc4, 0x58, 0xae, 0x3c, 0xa8, 0x2c, 0xa6, 0x35, 0x99,
- 0x57, 0x64, 0x76, 0x23, 0x7f, 0x11, 0x7e, 0x13, 0x7e, 0x13, 0x7e, 0x13, 0x7c, 0x15, 0x60, 0x53,
- 0x47, 0x8e, 0x39, 0xad, 0x2d, 0xac, 0x2f, 0xa4, 0x77, 0x41, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x13,
- 0x68, 0x75, 0x3a, 0x92, 0x32, 0xa0, 0x35, 0xa6, 0x36, 0xa6, 0x34, 0xa6, 0x31, 0xab, 0x2d, 0xaf,
- 0x2b, 0xaa, 0x2a, 0xb1, 0x2a, 0xb2, 0x2a, 0xab, 0x2f, 0xaa, 0x31, 0xad, 0x24, 0xb1, 0x25, 0xb1,
- 0x3b, 0xad, 0x64, 0x54, 0x7f, 0x12, 0x7f, 0x10, 0x7c, 0x1f, 0x77, 0x76, 0x7b, 0xce, 0x7f, 0xea,
- 0x7e, 0xe6, 0x7f, 0xe9, 0x7f, 0xea, 0x7f, 0xe9, 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xe9,
- 0x7f, 0xe7, 0x7f, 0xe6, 0x7f, 0xe7, 0x7f, 0xe8, 0x7d, 0xe9, 0x7d, 0xe9, 0x81, 0xe5, 0x7f, 0xe6,
- 0x7d, 0xea, 0x7d, 0xe2, 0x7f, 0xc5, 0x75, 0xb7, 0x59, 0xa9, 0x3e, 0xa5, 0x30, 0xa1, 0x37, 0x94,
- 0x4b, 0x86, 0x60, 0x57, 0x72, 0x27, 0x76, 0x20, 0x73, 0x24, 0x6c, 0x32, 0x63, 0x41, 0x4c, 0x94,
- 0x3d, 0xa2, 0x33, 0xa7, 0x2a, 0xa8, 0x2d, 0xa6, 0x76, 0x43, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x1b,
- 0x69, 0x65, 0x36, 0x96, 0x2c, 0xa9, 0x2c, 0xb1, 0x2a, 0xaf, 0x28, 0xad, 0x26, 0xad, 0x26, 0xb0,
- 0x26, 0xb1, 0x28, 0xac, 0x29, 0xb0, 0x2a, 0xa9, 0x2d, 0xaf, 0x2c, 0xb2, 0x24, 0xb0, 0x25, 0xac,
- 0x2f, 0xbc, 0x53, 0x80, 0x78, 0x1f, 0x7f, 0x13, 0x80, 0x10, 0x7e, 0x15, 0x7b, 0x57, 0x7f, 0xc1,
- 0x7f, 0xeb, 0x7f, 0xea, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe6, 0x7f, 0xe5, 0x7f, 0xe9,
- 0x7f, 0xe7, 0x7f, 0xe6, 0x7f, 0xe7, 0x7e, 0xe8, 0x7d, 0xea, 0x7e, 0xea, 0x81, 0xe4, 0x7f, 0xe5,
- 0x7e, 0xea, 0x7d, 0xdc, 0x80, 0xbf, 0x76, 0xb7, 0x5a, 0xa4, 0x3f, 0xa4, 0x31, 0xa5, 0x38, 0x97,
- 0x3f, 0x8c, 0x45, 0x7f, 0x4d, 0x6e, 0x52, 0x63, 0x53, 0x6a, 0x4f, 0x79, 0x48, 0x82, 0x40, 0x9a,
- 0x37, 0xa9, 0x30, 0xab, 0x2b, 0xab, 0x2f, 0xab, 0x71, 0x50, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x1b,
- 0x6a, 0x65, 0x3a, 0x97, 0x2f, 0xa9, 0x2c, 0xb1, 0x28, 0xb0, 0x25, 0xae, 0x23, 0xaf, 0x24, 0xaf,
- 0x25, 0xb0, 0x28, 0xaf, 0x29, 0xaf, 0x2a, 0xaf, 0x29, 0xb2, 0x27, 0xaf, 0x27, 0xac, 0x26, 0xac,
- 0x2b, 0xb0, 0x3f, 0xae, 0x60, 0x5b, 0x7c, 0x15, 0x7f, 0x15, 0x80, 0x12, 0x80, 0x10, 0x81, 0x37,
- 0x82, 0xd1, 0x7f, 0xea, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8,
- 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe8, 0x7d, 0xe9, 0x7e, 0xe8, 0x80, 0xe8, 0x7f, 0xe5,
- 0x7d, 0xe8, 0x7e, 0xdc, 0x80, 0xbb, 0x76, 0xba, 0x5a, 0xa0, 0x3f, 0x9c, 0x32, 0xa7, 0x36, 0x99,
- 0x35, 0x93, 0x36, 0x8f, 0x39, 0x8c, 0x3d, 0x8b, 0x41, 0x8d, 0x40, 0x90, 0x3c, 0x98, 0x36, 0xa8,
- 0x31, 0xb3, 0x2e, 0xaf, 0x2a, 0xb0, 0x2e, 0xad, 0x63, 0x69, 0x7d, 0x25, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x1b,
- 0x6e, 0x61, 0x41, 0x93, 0x35, 0xa5, 0x30, 0xaf, 0x2a, 0xaf, 0x26, 0xae, 0x25, 0xaf, 0x27, 0xaf,
- 0x29, 0xaf, 0x2a, 0xaf, 0x2a, 0xaf, 0x2a, 0xaf, 0x26, 0xb1, 0x24, 0xae, 0x2b, 0xaf, 0x2c, 0xb1,
- 0x2a, 0xae, 0x32, 0xb9, 0x49, 0x90, 0x72, 0x2f, 0x80, 0x14, 0x7f, 0x14, 0x80, 0x10, 0x80, 0x10,
- 0x83, 0x7a, 0x7f, 0xeb, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8,
- 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe8, 0x7d, 0xe7, 0x7e, 0xe7, 0x7f, 0xeb, 0x7f, 0xe7,
- 0x7c, 0xe6, 0x7d, 0xe1, 0x7f, 0xc4, 0x75, 0xb4, 0x59, 0xa3, 0x3d, 0x9d, 0x30, 0xa6, 0x35, 0xa4,
- 0x33, 0x9e, 0x32, 0x9b, 0x35, 0x97, 0x38, 0x95, 0x3a, 0x98, 0x38, 0x9b, 0x34, 0xa3, 0x2e, 0xb1,
- 0x2a, 0xb4, 0x28, 0xae, 0x26, 0xac, 0x2a, 0xa9, 0x3e, 0xa7, 0x72, 0x4e, 0x7d, 0x27, 0x80, 0x10,
- 0x7f, 0x13, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x1b,
- 0x75, 0x58, 0x45, 0x90, 0x38, 0xa1, 0x32, 0xad, 0x2b, 0xaf, 0x28, 0xae, 0x28, 0xaf, 0x2a, 0xaf,
- 0x2c, 0xaf, 0x2d, 0xaf, 0x2b, 0xaf, 0x29, 0xaf, 0x25, 0xb1, 0x25, 0xac, 0x2e, 0xab, 0x31, 0xb0,
- 0x2b, 0xab, 0x28, 0xb4, 0x3a, 0xb9, 0x5c, 0x6e, 0x79, 0x1a, 0x7e, 0x12, 0x7d, 0x18, 0x80, 0x10,
- 0x84, 0x60, 0x7f, 0xeb, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8,
- 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe8, 0x7e, 0xea, 0x7e, 0xe8, 0x82, 0xe4, 0x7f, 0xe4,
- 0x7d, 0xe8, 0x7d, 0xe7, 0x7e, 0xc8, 0x74, 0x7f, 0x58, 0x73, 0x3b, 0xa3, 0x2e, 0xa5, 0x33, 0xab,
- 0x33, 0xac, 0x32, 0xa8, 0x35, 0xa5, 0x37, 0xa3, 0x37, 0xa6, 0x34, 0xa9, 0x2e, 0xab, 0x28, 0xb0,
- 0x24, 0xb1, 0x24, 0xae, 0x24, 0xae, 0x25, 0xb0, 0x33, 0xa8, 0x43, 0xad, 0x68, 0x62, 0x7e, 0x27,
- 0x7f, 0x20, 0x7f, 0x16, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x19,
- 0x7b, 0x3c, 0x45, 0x8e, 0x36, 0x9f, 0x2f, 0xad, 0x29, 0xb0, 0x27, 0xae, 0x29, 0xaf, 0x2c, 0xaf,
- 0x2f, 0xaf, 0x2f, 0xaf, 0x2c, 0xaf, 0x28, 0xb0, 0x24, 0xb1, 0x26, 0xae, 0x2c, 0xaa, 0x2d, 0xaf,
- 0x2a, 0xad, 0x27, 0xac, 0x31, 0xb5, 0x44, 0xa0, 0x65, 0x41, 0x7e, 0x12, 0x80, 0x10, 0x81, 0x13,
- 0x84, 0x88, 0x7f, 0xeb, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8,
- 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe8, 0x7e, 0xe7, 0x7e, 0xe4, 0x81, 0xe7, 0x7f, 0xe9,
- 0x7c, 0xe6, 0x7e, 0xea, 0x7d, 0x9c, 0x76, 0x30, 0x57, 0x5b, 0x39, 0xa1, 0x2b, 0xa5, 0x30, 0xab,
- 0x31, 0xae, 0x31, 0xae, 0x33, 0xac, 0x34, 0xab, 0x34, 0xad, 0x30, 0xaf, 0x2c, 0xb0, 0x27, 0xae,
- 0x24, 0xae, 0x24, 0xaf, 0x25, 0xae, 0x28, 0xb1, 0x2b, 0xb1, 0x31, 0xb0, 0x3a, 0xab, 0x57, 0x88,
- 0x7a, 0x39, 0x7f, 0x1d, 0x7f, 0x19, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x7e, 0x28, 0x41, 0x8f, 0x30, 0x9f, 0x2b, 0xae, 0x25, 0xb0, 0x25, 0xae, 0x29, 0xae, 0x2d, 0xaf,
- 0x30, 0xb0, 0x30, 0xaf, 0x2b, 0xaf, 0x26, 0xb0, 0x26, 0xaf, 0x2a, 0xb0, 0x28, 0xb0, 0x25, 0xaf,
- 0x26, 0xb0, 0x28, 0xac, 0x2c, 0xad, 0x34, 0xb2, 0x4f, 0x71, 0x6f, 0x34, 0x7e, 0x50, 0x83, 0x80,
- 0x81, 0xd9, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8, 0x7f, 0xe8,
- 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe7, 0x7f, 0xe9, 0x7e, 0xe4, 0x7f, 0xe8, 0x80, 0xe8, 0x80, 0xe4,
- 0x7e, 0xea, 0x7b, 0xb5, 0x7d, 0x39, 0x7b, 0x18, 0x55, 0x6b, 0x38, 0x9f, 0x2a, 0xa5, 0x2e, 0xab,
- 0x2d, 0xab, 0x2b, 0xb0, 0x2d, 0xad, 0x2f, 0xac, 0x30, 0xae, 0x2e, 0xaf, 0x2c, 0xb1, 0x29, 0xae,
- 0x28, 0xad, 0x2b, 0xb0, 0x2e, 0xac, 0x30, 0xae, 0x29, 0xac, 0x27, 0xad, 0x2a, 0xb2, 0x3b, 0xae,
- 0x70, 0x54, 0x7f, 0x16, 0x7f, 0x1b, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x78, 0x4e, 0x3f, 0x8f, 0x30, 0xa0, 0x2b, 0xae, 0x27, 0xb0, 0x26, 0xae, 0x28, 0xae, 0x2c, 0xaf,
- 0x2f, 0xaf, 0x2f, 0xaf, 0x2c, 0xaf, 0x29, 0xb0, 0x28, 0xad, 0x29, 0xad, 0x25, 0xb3, 0x25, 0xad,
- 0x27, 0xae, 0x2a, 0xaf, 0x2a, 0xaf, 0x2c, 0xb2, 0x3d, 0x97, 0x59, 0x7c, 0x73, 0xcc, 0x7f, 0xeb,
- 0x80, 0xe9, 0x7f, 0xe7, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe9, 0x7f, 0xe8, 0x7f, 0xe9, 0x7f, 0xe8,
- 0x7f, 0xe6, 0x7f, 0xe8, 0x7f, 0xe7, 0x7f, 0xe7, 0x7e, 0xe9, 0x7f, 0xe4, 0x7f, 0xeb, 0x80, 0xe5,
- 0x7d, 0x9d, 0x7d, 0x39, 0x7f, 0x11, 0x74, 0x24, 0x53, 0x6a, 0x37, 0xa5, 0x29, 0xa8, 0x29, 0xac,
- 0x28, 0xb0, 0x28, 0xaf, 0x29, 0xae, 0x2a, 0xad, 0x2a, 0xae, 0x2a, 0xaf, 0x28, 0xaf, 0x27, 0xac,
- 0x29, 0xad, 0x2d, 0xb1, 0x32, 0xad, 0x34, 0xac, 0x28, 0xb0, 0x24, 0xad, 0x25, 0xaf, 0x37, 0xaf,
- 0x6f, 0x55, 0x7f, 0x21, 0x7f, 0x13, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x13,
- 0x5e, 0x7b, 0x3c, 0x8c, 0x34, 0xa1, 0x31, 0xaa, 0x2d, 0xad, 0x2a, 0xaf, 0x29, 0xad, 0x2a, 0xae,
- 0x2b, 0xb0, 0x2c, 0xae, 0x2e, 0xac, 0x2f, 0xae, 0x2a, 0xaf, 0x25, 0xad, 0x24, 0xaf, 0x27, 0xaf,
- 0x2b, 0xaf, 0x2b, 0xad, 0x2a, 0xae, 0x2a, 0xac, 0x34, 0xaf, 0x47, 0x94, 0x5e, 0x9a, 0x71, 0xcc,
- 0x7c, 0xe8, 0x7f, 0xe9, 0x80, 0xe8, 0x7f, 0xe7, 0x7f, 0xe8, 0x7f, 0xeb, 0x7f, 0xe8, 0x7f, 0xe7,
- 0x7f, 0xe6, 0x7f, 0xe6, 0x7f, 0xe6, 0x7f, 0xe8, 0x7f, 0xeb, 0x7f, 0xdd, 0x80, 0xb5, 0x82, 0x6b,
- 0x80, 0x10, 0x7f, 0x11, 0x7e, 0x12, 0x6c, 0x31, 0x50, 0x6c, 0x3b, 0xa1, 0x2a, 0xaa, 0x23, 0xaf,
- 0x27, 0xae, 0x2b, 0xad, 0x2a, 0xae, 0x27, 0xaf, 0x25, 0xaf, 0x23, 0xb0, 0x24, 0xaf, 0x24, 0xae,
- 0x24, 0xb0, 0x27, 0xb2, 0x2d, 0xa7, 0x2c, 0xaf, 0x24, 0xb5, 0x24, 0xb0, 0x2d, 0xae, 0x48, 0x96,
- 0x7c, 0x2d, 0x7f, 0x1a, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7a, 0x43,
- 0x4d, 0x88, 0x37, 0x96, 0x2f, 0xa6, 0x2e, 0xad, 0x2b, 0xae, 0x28, 0xaf, 0x27, 0xad, 0x27, 0xaf,
- 0x28, 0xb0, 0x2a, 0xaf, 0x2c, 0xac, 0x2f, 0xad, 0x2a, 0xaf, 0x25, 0xaf, 0x27, 0xaf, 0x2c, 0xae,
- 0x2e, 0xae, 0x2b, 0xae, 0x29, 0xb2, 0x2a, 0xaf, 0x31, 0xa7, 0x40, 0xa6, 0x53, 0x76, 0x65, 0x6e,
- 0x76, 0xcd, 0x7f, 0xeb, 0x7f, 0xeb, 0x7f, 0xeb, 0x7f, 0xeb, 0x7f, 0xeb, 0x7f, 0xeb, 0x7f, 0xeb,
- 0x7f, 0xeb, 0x7f, 0xe8, 0x7f, 0xeb, 0x7f, 0xe4, 0x7e, 0xb1, 0x7d, 0x63, 0x80, 0x1f, 0x81, 0x10,
- 0x81, 0x11, 0x7d, 0x18, 0x7e, 0x13, 0x6b, 0x33, 0x51, 0x6c, 0x3f, 0x9f, 0x2f, 0xa8, 0x25, 0xae,
- 0x25, 0xad, 0x27, 0xad, 0x28, 0xad, 0x28, 0xad, 0x29, 0xae, 0x29, 0xae, 0x29, 0xaf, 0x29, 0xb0,
- 0x2a, 0xab, 0x2a, 0xa9, 0x28, 0xb0, 0x28, 0xb4, 0x2a, 0xa9, 0x31, 0xa9, 0x3e, 0xa1, 0x78, 0x32,
- 0x76, 0x49, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7d, 0x2d, 0x5f, 0x81,
- 0x47, 0x89, 0x32, 0x9f, 0x2b, 0xab, 0x2a, 0xae, 0x28, 0xae, 0x25, 0xae, 0x24, 0xad, 0x24, 0xaf,
- 0x25, 0xb1, 0x28, 0xb0, 0x2a, 0xad, 0x2b, 0xae, 0x2b, 0xaf, 0x29, 0xb1, 0x2c, 0xaf, 0x2f, 0xae,
- 0x2f, 0xae, 0x2c, 0xb0, 0x28, 0xb1, 0x27, 0xb1, 0x2e, 0xa7, 0x3b, 0x9f, 0x4b, 0x8c, 0x5c, 0x56,
- 0x6f, 0x5e, 0x7e, 0x94, 0x80, 0xb4, 0x7f, 0xd6, 0x7f, 0xe2, 0x7f, 0xdd, 0x7f, 0xdb, 0x7f, 0xd8,
- 0x7f, 0xcc, 0x7f, 0xaa, 0x7f, 0x8d, 0x7f, 0x67, 0x7f, 0x22, 0x80, 0x10, 0x7f, 0x10, 0x81, 0x14,
- 0x81, 0x15, 0x7d, 0x15, 0x7a, 0x19, 0x69, 0x39, 0x55, 0x6f, 0x44, 0xa0, 0x34, 0xa8, 0x29, 0xae,
- 0x24, 0xaf, 0x24, 0xae, 0x26, 0xae, 0x29, 0xae, 0x2d, 0xae, 0x30, 0xaf, 0x31, 0xaf, 0x31, 0xac,
- 0x31, 0xaf, 0x2e, 0xb0, 0x2a, 0xb1, 0x2c, 0xad, 0x3c, 0x9c, 0x4c, 0xa3, 0x6f, 0x4f, 0x7a, 0x33,
- 0x7f, 0x17, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7c, 0x31, 0x5d, 0x73,
- 0x45, 0x92, 0x34, 0x9d, 0x2e, 0xa7, 0x2d, 0xa8, 0x2a, 0xa9, 0x28, 0xab, 0x27, 0xab, 0x26, 0xac,
- 0x26, 0xb0, 0x27, 0xb1, 0x2a, 0xaf, 0x2a, 0xae, 0x2c, 0xaf, 0x2d, 0xaf, 0x30, 0xad, 0x31, 0xad,
- 0x30, 0xad, 0x2c, 0xae, 0x28, 0xb1, 0x27, 0xaa, 0x2b, 0xab, 0x36, 0xa6, 0x45, 0x8b, 0x53, 0x6b,
- 0x70, 0x2a, 0x7e, 0x19, 0x80, 0x32, 0x7f, 0x4c, 0x7f, 0x55, 0x7f, 0x51, 0x7f, 0x4e, 0x7f, 0x4a,
- 0x7f, 0x4a, 0x7f, 0x2d, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7d, 0x14, 0x7e, 0x13, 0x80, 0x14,
- 0x80, 0x13, 0x7e, 0x12, 0x77, 0x1e, 0x68, 0x41, 0x56, 0x72, 0x46, 0xa0, 0x37, 0xa7, 0x2d, 0xae,
- 0x27, 0xb0, 0x25, 0xaf, 0x27, 0xaf, 0x29, 0xaf, 0x2c, 0xaf, 0x30, 0xaf, 0x33, 0xaf, 0x35, 0xac,
- 0x37, 0xac, 0x38, 0xa4, 0x38, 0xab, 0x3c, 0x8f, 0x6e, 0x50, 0x7e, 0x1e, 0x7f, 0x13, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x13, 0x7f, 0x1b, 0x78, 0x36,
- 0x51, 0x75, 0x41, 0x8f, 0x3b, 0x9a, 0x39, 0x9f, 0x35, 0xa3, 0x33, 0xa9, 0x30, 0xa9, 0x2e, 0xa6,
- 0x2d, 0xab, 0x2d, 0xae, 0x2d, 0xae, 0x2d, 0xad, 0x2d, 0xaf, 0x2e, 0xad, 0x2f, 0xac, 0x2f, 0xae,
- 0x2e, 0xad, 0x2a, 0xac, 0x26, 0xad, 0x26, 0xb2, 0x2b, 0xa9, 0x37, 0x96, 0x42, 0x8b, 0x4e, 0x7a,
- 0x6c, 0x33, 0x7f, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x7f, 0x15, 0x7f, 0x15, 0x7f, 0x11, 0x7f, 0x11, 0x7f, 0x10, 0x80, 0x10, 0x80, 0x13,
- 0x7f, 0x13, 0x7d, 0x14, 0x77, 0x1f, 0x65, 0x45, 0x55, 0x72, 0x45, 0x9d, 0x36, 0xa4, 0x2e, 0xad,
- 0x2c, 0xaf, 0x2d, 0xaf, 0x2b, 0xae, 0x29, 0xad, 0x29, 0xad, 0x2a, 0xad, 0x2e, 0xaf, 0x35, 0x9e,
- 0x3f, 0xa8, 0x47, 0x96, 0x60, 0x5a, 0x6d, 0x51, 0x7f, 0x13, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x19, 0x7f, 0x1b, 0x7e, 0x2a,
- 0x78, 0x3a, 0x72, 0x48, 0x5b, 0x87, 0x4e, 0x90, 0x4a, 0x8a, 0x45, 0x93, 0x41, 0x94, 0x3e, 0x98,
- 0x3a, 0x9f, 0x38, 0xa1, 0x36, 0xa3, 0x35, 0xa7, 0x32, 0xa6, 0x2f, 0xa8, 0x2e, 0xb0, 0x2e, 0xb0,
- 0x2d, 0xad, 0x2a, 0xac, 0x28, 0xaa, 0x29, 0xb1, 0x2f, 0xa4, 0x3a, 0x91, 0x45, 0x82, 0x4f, 0x67,
- 0x6b, 0x38, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x12, 0x81, 0x10, 0x82, 0x11, 0x81, 0x10,
- 0x80, 0x10, 0x7d, 0x13, 0x78, 0x1c, 0x63, 0x43, 0x52, 0x6e, 0x42, 0x97, 0x35, 0x9e, 0x2d, 0xa8,
- 0x30, 0xab, 0x32, 0xab, 0x2f, 0xac, 0x2b, 0xaa, 0x29, 0xaa, 0x2a, 0xaa, 0x32, 0x9c, 0x3c, 0x96,
- 0x4c, 0x9d, 0x6e, 0x4e, 0x7e, 0x20, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x7f, 0x13, 0x7f, 0x1c, 0x7f, 0x21, 0x7a, 0x43, 0x68, 0x7b, 0x5b, 0x76, 0x55, 0x76, 0x50, 0x74,
- 0x4b, 0x73, 0x48, 0x7b, 0x46, 0x7f, 0x42, 0x88, 0x3c, 0x86, 0x36, 0x90, 0x34, 0x9e, 0x32, 0xa0,
- 0x2f, 0xa5, 0x2e, 0xab, 0x2e, 0xaa, 0x34, 0x97, 0x3a, 0x8b, 0x46, 0x80, 0x51, 0x64, 0x57, 0x5c,
- 0x6d, 0x33, 0x7f, 0x15, 0x80, 0x17, 0x7f, 0x16, 0x7f, 0x1c, 0x7f, 0x1b, 0x7f, 0x19, 0x7f, 0x17,
- 0x7f, 0x18, 0x7f, 0x18, 0x7f, 0x19, 0x7f, 0x19, 0x81, 0x1a, 0x83, 0x18, 0x83, 0x1b, 0x82, 0x19,
- 0x7f, 0x1c, 0x7e, 0x19, 0x7d, 0x17, 0x66, 0x3c, 0x52, 0x63, 0x42, 0x83, 0x36, 0x91, 0x2f, 0x9d,
- 0x31, 0xa2, 0x34, 0x9c, 0x33, 0xa9, 0x33, 0xa1, 0x34, 0x95, 0x3b, 0x8f, 0x43, 0x7f, 0x67, 0x5a,
- 0x7b, 0x2f, 0x7f, 0x15, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x16, 0x7f, 0x21, 0x7e, 0x29, 0x7e, 0x2d, 0x76, 0x4e,
- 0x66, 0x65, 0x57, 0x63, 0x57, 0x5f, 0x54, 0x66, 0x4a, 0x73, 0x42, 0x7a, 0x3e, 0x83, 0x3b, 0x8f,
- 0x38, 0x93, 0x38, 0x97, 0x3a, 0x94, 0x41, 0x90, 0x48, 0x7b, 0x54, 0x68, 0x5b, 0x5c, 0x63, 0x41,
- 0x7a, 0x23, 0x7f, 0x26, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x7f, 0x16, 0x7f, 0x23, 0x70, 0x31, 0x59, 0x53, 0x47, 0x79, 0x3c, 0x89, 0x37, 0x8c,
- 0x35, 0x92, 0x36, 0x9e, 0x39, 0x90, 0x3f, 0x8e, 0x47, 0x87, 0x50, 0x6f, 0x67, 0x50, 0x7d, 0x23,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x14, 0x7f, 0x14, 0x7f, 0x19,
- 0x7f, 0x22, 0x7d, 0x2c, 0x79, 0x44, 0x73, 0x5d, 0x61, 0x70, 0x57, 0x6d, 0x51, 0x66, 0x4c, 0x74,
- 0x49, 0x7b, 0x49, 0x77, 0x4b, 0x76, 0x50, 0x6e, 0x58, 0x62, 0x60, 0x50, 0x66, 0x44, 0x7b, 0x2f,
- 0x7f, 0x26, 0x7f, 0x1c, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x7f, 0x1e, 0x7b, 0x33, 0x68, 0x3b, 0x55, 0x70, 0x4b, 0x73, 0x44, 0x7f,
- 0x40, 0x81, 0x40, 0x82, 0x47, 0x80, 0x50, 0x70, 0x66, 0x49, 0x75, 0x43, 0x7f, 0x17, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x7f, 0x1e, 0x7f, 0x22, 0x7f, 0x1c, 0x7f, 0x1a, 0x7f, 0x1c, 0x7f, 0x15, 0x71, 0x29,
- 0x67, 0x3e, 0x67, 0x41, 0x6a, 0x3f, 0x6d, 0x37, 0x73, 0x2e, 0x78, 0x23, 0x7f, 0x12, 0x7f, 0x14,
- 0x7e, 0x1d, 0x7f, 0x14, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x7f, 0x14, 0x7f, 0x28, 0x75, 0x33, 0x70, 0x36, 0x6b, 0x3d, 0x69, 0x42,
- 0x64, 0x4a, 0x60, 0x4c, 0x68, 0x43, 0x6f, 0x39, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
- 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7f, 0x10, 0x7f, 0x15, 0x7f, 0x1d, 0x7f, 0x1b, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x32, 0x81, 0x10, 0x80, 0x10, 0x83, 0x12, 0x7d, 0x1b, 0x82, 0x26, 0x7c, 0x8f, 0x81, 0xdf,
+ 0x7d, 0xd6, 0x82, 0xda, 0x7f, 0xdd, 0x81, 0xdf, 0x80, 0xde, 0x81, 0xdc, 0x80, 0xdc, 0x81, 0xda,
+ 0x81, 0xda, 0x81, 0xd1, 0x80, 0xc9, 0x80, 0xd8, 0x7f, 0xe0, 0x81, 0xde, 0x80, 0xde, 0x81, 0xde,
+ 0x80, 0xde, 0x81, 0xdc, 0x80, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x82, 0xdd, 0x81, 0xdc,
+ 0x80, 0xdc, 0x81, 0xdc, 0x7f, 0xdd, 0x82, 0xda, 0x7e, 0xdc, 0x81, 0xd8, 0x7d, 0xda, 0x82, 0xd5,
+ 0x7f, 0x4b, 0x80, 0x10, 0x81, 0x1c, 0x81, 0x1e, 0x81, 0x16, 0x81, 0x16, 0x81, 0x12, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x35, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x7a, 0x4b, 0x8c, 0x41, 0x69, 0x4f, 0x94, 0x53, 0x6b, 0x37, 0x82, 0x18, 0x7d, 0x78, 0x81, 0xdb,
+ 0x7c, 0xde, 0x82, 0xda, 0x7f, 0xd9, 0x81, 0xdd, 0x80, 0xde, 0x81, 0xdc, 0x80, 0xdc, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xd4, 0x80, 0xcb, 0x81, 0xd7, 0x80, 0xde, 0x81, 0xde, 0x80, 0xde, 0x81, 0xdc,
+ 0x80, 0xdc, 0x81, 0xdc, 0x80, 0xdc, 0x81, 0xdc, 0x81, 0xde, 0x80, 0xde, 0x82, 0xdd, 0x81, 0xdc,
+ 0x81, 0xdc, 0x80, 0xdc, 0x7f, 0xdd, 0x80, 0xdc, 0x7e, 0xdc, 0x81, 0xdc, 0x80, 0xe1, 0x80, 0xab,
+ 0x7e, 0x26, 0x80, 0x10, 0x81, 0x1a, 0x80, 0x18, 0x81, 0x12, 0x81, 0x16, 0x80, 0x15, 0x81, 0x24,
+ 0x81, 0x33, 0x81, 0x1c, 0x81, 0x1e, 0x81, 0x1a, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x70, 0x61, 0x96, 0x88, 0x43, 0x95, 0x9f, 0x96, 0x47, 0x87, 0x8a, 0x4a, 0x79, 0x36, 0x84, 0x9c,
+ 0x82, 0xde, 0x81, 0xe0, 0x7d, 0xd4, 0x80, 0xd9, 0x81, 0xdb, 0x81, 0xdd, 0x82, 0xde, 0x81, 0xde,
+ 0x80, 0xe1, 0x82, 0xd6, 0x80, 0xcb, 0x81, 0xd5, 0x80, 0xdc, 0x81, 0xde, 0x80, 0xde, 0x81, 0xdc,
+ 0x80, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xde, 0x81, 0xde, 0x81, 0xde, 0x82, 0xdd, 0x81, 0xdc,
+ 0x80, 0xdc, 0x80, 0xdc, 0x7e, 0xde, 0x80, 0xdd, 0x76, 0xcd, 0x86, 0xb6, 0x6c, 0xbf, 0x87, 0x81,
+ 0x78, 0x1b, 0x81, 0x14, 0x80, 0x10, 0x80, 0x10, 0x82, 0x11, 0x80, 0x14, 0x82, 0x11, 0x81, 0x2d,
+ 0x7f, 0x49, 0x81, 0x27, 0x80, 0x2e, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x1f,
+ 0x74, 0x59, 0x96, 0x75, 0x3e, 0x8e, 0xa5, 0x89, 0x36, 0x8c, 0x9b, 0x89, 0x70, 0x2b, 0x88, 0x26,
+ 0x89, 0x8e, 0x81, 0xcc, 0x7c, 0xdb, 0x7c, 0xd5, 0x82, 0xda, 0x7f, 0xdd, 0x83, 0xdc, 0x83, 0xde,
+ 0x80, 0xde, 0x82, 0xd5, 0x80, 0xca, 0x81, 0xd7, 0x80, 0xde, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xde, 0x80, 0xde, 0x81, 0xdc, 0x81, 0xdd, 0x83, 0xdc, 0x83, 0xdc, 0x81, 0xde,
+ 0x7d, 0xdc, 0x80, 0xdc, 0x7e, 0xdb, 0x84, 0xd6, 0x61, 0xaf, 0x95, 0x92, 0x40, 0x92, 0x9c, 0x90,
+ 0x64, 0x49, 0x81, 0x11, 0x80, 0x10, 0x81, 0x13, 0x87, 0x14, 0x7e, 0x16, 0x87, 0x14, 0x81, 0x2c,
+ 0x7d, 0x29, 0x85, 0x26, 0x7c, 0x35, 0x82, 0x1b, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x87, 0x54,
+ 0x56, 0x80, 0x9f, 0x83, 0x3d, 0x8d, 0xaa, 0x82, 0x34, 0x87, 0xa0, 0x90, 0x56, 0x62, 0x8a, 0x1a,
+ 0x83, 0x13, 0x80, 0x63, 0x7d, 0xd3, 0x7d, 0xdc, 0x81, 0xde, 0x7f, 0xd9, 0x83, 0xdc, 0x83, 0xde,
+ 0x80, 0xde, 0x81, 0xd5, 0x7f, 0xc7, 0x81, 0xd5, 0x7f, 0xe0, 0x81, 0xdc, 0x80, 0xda, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xde, 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xdc, 0x83, 0xde, 0x84, 0xdd, 0x80, 0xdd,
+ 0x7c, 0xdb, 0x80, 0xdd, 0x7e, 0xde, 0x87, 0xd4, 0x5b, 0xa5, 0x9a, 0x8d, 0x32, 0x91, 0xa4, 0x90,
+ 0x67, 0x40, 0x80, 0x10, 0x81, 0x14, 0x80, 0x16, 0x8a, 0x16, 0x7f, 0x16, 0x84, 0x13, 0x84, 0x1f,
+ 0x7e, 0x15, 0x8c, 0x3e, 0x5c, 0x8c, 0x86, 0x47, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x83, 0x47, 0x79, 0x47, 0x82, 0x38, 0x7f, 0x2c, 0x82, 0x31, 0x75, 0x59, 0x97, 0x6e,
+ 0x4a, 0x77, 0xa3, 0x89, 0x3a, 0x8b, 0xaa, 0x8c, 0x38, 0x87, 0xa2, 0x90, 0x45, 0x7c, 0x93, 0x45,
+ 0x79, 0x1c, 0x82, 0x15, 0x81, 0x62, 0x7e, 0xb5, 0x7d, 0xdc, 0x81, 0xdf, 0x80, 0xdc, 0x82, 0xd8,
+ 0x7e, 0xdf, 0x81, 0xd7, 0x80, 0xcd, 0x81, 0xd7, 0x7f, 0xe0, 0x81, 0xdc, 0x80, 0xda, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xdc, 0x83, 0xde, 0x83, 0xde, 0x80, 0xdc,
+ 0x7d, 0xdb, 0x80, 0xde, 0x7f, 0xde, 0x86, 0xd3, 0x5c, 0xa1, 0x99, 0x8a, 0x35, 0x88, 0xa4, 0x7e,
+ 0x67, 0x3a, 0x80, 0x10, 0x81, 0x11, 0x7f, 0x12, 0x87, 0x16, 0x84, 0x17, 0x7f, 0x12, 0x85, 0x13,
+ 0x6e, 0x2c, 0x95, 0x75, 0x47, 0x95, 0x90, 0x63, 0x7e, 0x29, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x79, 0x4d, 0x95, 0x71, 0x4c, 0x80, 0x99, 0x83, 0x53, 0x82, 0x9b, 0x82, 0x4d, 0x81, 0xa0, 0x7b,
+ 0x3e, 0x89, 0xa7, 0x86, 0x38, 0x82, 0xa9, 0x90, 0x3a, 0x89, 0xa4, 0x87, 0x35, 0x8e, 0x9b, 0x85,
+ 0x57, 0x65, 0x86, 0x1c, 0x80, 0x10, 0x7f, 0x2e, 0x79, 0x86, 0x80, 0xce, 0x7e, 0xdf, 0x81, 0xd7,
+ 0x7f, 0xdd, 0x81, 0xdc, 0x80, 0xda, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xdc, 0x83, 0xde, 0x83, 0xde, 0x80, 0xdb,
+ 0x7d, 0xdc, 0x80, 0xdc, 0x81, 0xcb, 0x89, 0xb7, 0x5e, 0x97, 0x99, 0x87, 0x38, 0x80, 0xa4, 0x77,
+ 0x5e, 0x51, 0x86, 0x1f, 0x80, 0x10, 0x84, 0x12, 0x7f, 0x12, 0x85, 0x13, 0x7e, 0x15, 0x92, 0x44,
+ 0x4f, 0x72, 0xa0, 0x8c, 0x39, 0x87, 0xa5, 0x80, 0x79, 0x3b, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x12,
+ 0x6c, 0x67, 0x9f, 0x72, 0x3d, 0x7d, 0xa4, 0x84, 0x41, 0x85, 0xa4, 0x84, 0x3b, 0x87, 0xa6, 0x89,
+ 0x37, 0x84, 0xa9, 0x8a, 0x37, 0x8c, 0xac, 0x85, 0x3b, 0x87, 0xa6, 0x8a, 0x31, 0x87, 0x9e, 0x85,
+ 0x43, 0x8b, 0x8e, 0x47, 0x80, 0x12, 0x80, 0x10, 0x7e, 0x1c, 0x7f, 0x6c, 0x7c, 0xc2, 0x81, 0xe0,
+ 0x80, 0xdb, 0x81, 0xde, 0x7f, 0xe0, 0x81, 0xde, 0x80, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xde,
+ 0x80, 0xdc, 0x81, 0xdc, 0x80, 0xdc, 0x81, 0xdc, 0x7e, 0xde, 0x82, 0xde, 0x82, 0xdc, 0x80, 0xdb,
+ 0x7e, 0xde, 0x81, 0xd7, 0x81, 0xbc, 0x88, 0xac, 0x60, 0x94, 0x9b, 0x85, 0x3b, 0x7c, 0xa4, 0x74,
+ 0x53, 0x6e, 0x8f, 0x47, 0x76, 0x22, 0x8b, 0x1d, 0x77, 0x20, 0x90, 0x2a, 0x69, 0x36, 0x99, 0x7b,
+ 0x47, 0x83, 0xa4, 0x85, 0x37, 0x83, 0xa9, 0x82, 0x78, 0x3d, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x1a,
+ 0x6c, 0x58, 0xa6, 0x76, 0x38, 0x84, 0xaa, 0x8c, 0x37, 0x89, 0xa9, 0x86, 0x34, 0x85, 0xa8, 0x88,
+ 0x32, 0x89, 0xa9, 0x85, 0x36, 0x89, 0xa9, 0x82, 0x39, 0x8a, 0xa9, 0x8d, 0x31, 0x87, 0xa1, 0x83,
+ 0x39, 0x95, 0x93, 0x6a, 0x7b, 0x1d, 0x83, 0x12, 0x80, 0x10, 0x7f, 0x13, 0x7d, 0x50, 0x7d, 0xb7,
+ 0x80, 0xe1, 0x81, 0xe0, 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xdc, 0x80, 0xda, 0x81, 0xde,
+ 0x80, 0xdc, 0x81, 0xdc, 0x80, 0xdc, 0x80, 0xdd, 0x7e, 0xdf, 0x82, 0xde, 0x81, 0xda, 0x81, 0xda,
+ 0x7e, 0xdf, 0x82, 0xd0, 0x82, 0xb7, 0x8a, 0xac, 0x60, 0x90, 0x9c, 0x85, 0x3d, 0x81, 0xa6, 0x78,
+ 0x49, 0x6f, 0x99, 0x64, 0x55, 0x57, 0x99, 0x4f, 0x5a, 0x57, 0x9a, 0x62, 0x50, 0x69, 0x9f, 0x7d,
+ 0x42, 0x87, 0xa6, 0x87, 0x38, 0x86, 0xa8, 0x87, 0x74, 0x47, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x1a,
+ 0x6e, 0x59, 0xa6, 0x79, 0x3c, 0x86, 0xaa, 0x8c, 0x34, 0x89, 0xa9, 0x86, 0x31, 0x87, 0xa9, 0x86,
+ 0x31, 0x87, 0xa7, 0x87, 0x36, 0x87, 0xa6, 0x88, 0x35, 0x8a, 0xab, 0x87, 0x34, 0x85, 0xa5, 0x83,
+ 0x37, 0x88, 0x9b, 0x8e, 0x66, 0x4c, 0x87, 0x14, 0x80, 0x14, 0x81, 0x11, 0x80, 0x10, 0x7c, 0x34,
+ 0x83, 0xc8, 0x80, 0xdf, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc,
+ 0x80, 0xdc, 0x81, 0xdc, 0x80, 0xdc, 0x81, 0xdc, 0x7f, 0xdd, 0x81, 0xdc, 0x82, 0xdd, 0x7f, 0xda,
+ 0x7e, 0xdc, 0x81, 0xd1, 0x81, 0xb3, 0x89, 0xaf, 0x61, 0x8c, 0x9d, 0x7e, 0x3d, 0x84, 0xa8, 0x79,
+ 0x40, 0x74, 0xa4, 0x6f, 0x43, 0x6d, 0xa4, 0x6e, 0x4a, 0x71, 0xa1, 0x75, 0x46, 0x79, 0xa4, 0x87,
+ 0x3d, 0x8e, 0xa5, 0x8a, 0x37, 0x89, 0xa6, 0x88, 0x69, 0x59, 0x82, 0x22, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x1a,
+ 0x72, 0x57, 0xa4, 0x77, 0x40, 0x85, 0xa9, 0x8c, 0x37, 0x89, 0xaa, 0x86, 0x32, 0x87, 0xa9, 0x87,
+ 0x36, 0x88, 0xa5, 0x89, 0x36, 0x88, 0xa2, 0x88, 0x33, 0x89, 0xa9, 0x86, 0x37, 0x89, 0xa8, 0x8b,
+ 0x36, 0x87, 0x9f, 0x93, 0x51, 0x75, 0x8f, 0x29, 0x81, 0x14, 0x84, 0x14, 0x80, 0x10, 0x80, 0x10,
+ 0x84, 0x75, 0x80, 0xe1, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc,
+ 0x80, 0xdc, 0x81, 0xdc, 0x80, 0xdc, 0x81, 0xdc, 0x7f, 0xdb, 0x81, 0xdb, 0x80, 0xe1, 0x80, 0xdb,
+ 0x7e, 0xda, 0x81, 0xd5, 0x81, 0xbc, 0x8b, 0xa9, 0x5f, 0x8e, 0x9e, 0x7e, 0x3c, 0x82, 0xa9, 0x83,
+ 0x3f, 0x7d, 0xab, 0x7a, 0x40, 0x77, 0xa8, 0x77, 0x45, 0x79, 0xa6, 0x7c, 0x3f, 0x81, 0xa6, 0x8c,
+ 0x36, 0x8d, 0xa4, 0x85, 0x33, 0x84, 0xa3, 0x82, 0x47, 0x87, 0x86, 0x46, 0x7f, 0x23, 0x80, 0x10,
+ 0x81, 0x12, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x1a,
+ 0x77, 0x50, 0xa2, 0x76, 0x43, 0x82, 0xa9, 0x8b, 0x38, 0x8a, 0xaa, 0x87, 0x34, 0x89, 0xa8, 0x89,
+ 0x39, 0x8a, 0xa6, 0x89, 0x37, 0x89, 0xa2, 0x87, 0x31, 0x87, 0xa9, 0x85, 0x3b, 0x87, 0xa8, 0x8c,
+ 0x36, 0x85, 0xa4, 0x8c, 0x44, 0x97, 0x95, 0x5e, 0x7d, 0x19, 0x84, 0x12, 0x7f, 0x14, 0x80, 0x10,
+ 0x85, 0x5d, 0x80, 0xe1, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc,
+ 0x80, 0xdc, 0x81, 0xdc, 0x80, 0xdc, 0x81, 0xdc, 0x7e, 0xdf, 0x81, 0xde, 0x82, 0xda, 0x80, 0xd9,
+ 0x7e, 0xdc, 0x81, 0xdb, 0x80, 0xc0, 0x8b, 0x76, 0x5f, 0x60, 0x9e, 0x82, 0x3a, 0x80, 0xaa, 0x8a,
+ 0x3f, 0x8b, 0xac, 0x87, 0x41, 0x85, 0xaa, 0x83, 0x41, 0x86, 0xa8, 0x87, 0x3a, 0x87, 0xa6, 0x89,
+ 0x31, 0x87, 0xa3, 0x85, 0x30, 0x85, 0xa3, 0x86, 0x3e, 0x85, 0x9e, 0x90, 0x6d, 0x55, 0x81, 0x24,
+ 0x81, 0x1e, 0x81, 0x16, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x18,
+ 0x7c, 0x37, 0xa1, 0x74, 0x41, 0x7e, 0xa7, 0x89, 0x35, 0x89, 0xab, 0x87, 0x36, 0x89, 0xaa, 0x8b,
+ 0x3b, 0x8c, 0xa7, 0x8b, 0x38, 0x89, 0xa4, 0x87, 0x31, 0x87, 0xa9, 0x87, 0x39, 0x85, 0xaa, 0x8a,
+ 0x36, 0x86, 0xa7, 0x84, 0x3d, 0x90, 0x9b, 0x84, 0x6a, 0x35, 0x83, 0x12, 0x80, 0x10, 0x81, 0x12,
+ 0x84, 0x83, 0x80, 0xe1, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc,
+ 0x80, 0xdc, 0x81, 0xdc, 0x80, 0xdc, 0x81, 0xdc, 0x80, 0xdc, 0x81, 0xd9, 0x82, 0xdd, 0x80, 0xdd,
+ 0x7e, 0xda, 0x81, 0xdf, 0x80, 0x95, 0x8b, 0x2b, 0x5e, 0x49, 0x9f, 0x80, 0x38, 0x7f, 0xab, 0x88,
+ 0x3d, 0x8c, 0xa8, 0x8c, 0x3f, 0x89, 0xa8, 0x89, 0x40, 0x8c, 0xa8, 0x8c, 0x37, 0x8a, 0xa8, 0x86,
+ 0x32, 0x85, 0xa6, 0x85, 0x32, 0x86, 0xa5, 0x89, 0x38, 0x8b, 0xa6, 0x8c, 0x44, 0x8b, 0x91, 0x73,
+ 0x7b, 0x34, 0x81, 0x1c, 0x80, 0x18, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x7f, 0x25, 0x9f, 0x73, 0x3d, 0x7d, 0xa9, 0x89, 0x32, 0x88, 0xac, 0x87, 0x35, 0x88, 0xab, 0x8b,
+ 0x3c, 0x8d, 0xa9, 0x8c, 0x37, 0x8a, 0xa7, 0x87, 0x33, 0x86, 0xa9, 0x8a, 0x34, 0x89, 0xaa, 0x87,
+ 0x33, 0x88, 0xa8, 0x85, 0x37, 0x87, 0x9f, 0x8e, 0x56, 0x59, 0x8a, 0x2c, 0x80, 0x4d, 0x7f, 0x7b,
+ 0x82, 0xcf, 0x81, 0xde, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc,
+ 0x80, 0xdc, 0x81, 0xdc, 0x80, 0xdc, 0x81, 0xde, 0x80, 0xda, 0x81, 0xdc, 0x82, 0xde, 0x80, 0xda,
+ 0x7e, 0xdf, 0x81, 0xac, 0x80, 0x36, 0x8a, 0x17, 0x5c, 0x57, 0x9f, 0x7e, 0x37, 0x7f, 0xab, 0x87,
+ 0x38, 0x87, 0xa2, 0x88, 0x39, 0x88, 0xa4, 0x88, 0x3c, 0x8a, 0xa7, 0x8a, 0x38, 0x8c, 0xaa, 0x87,
+ 0x35, 0x87, 0xa9, 0x8b, 0x3b, 0x88, 0xa8, 0x8b, 0x36, 0x87, 0xab, 0x86, 0x36, 0x8c, 0x9d, 0x8d,
+ 0x74, 0x4a, 0x81, 0x16, 0x81, 0x1a, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x7a, 0x47, 0xa0, 0x71, 0x3b, 0x7c, 0xa6, 0x88, 0x34, 0x89, 0xaa, 0x86, 0x35, 0x87, 0xab, 0x8b,
+ 0x3b, 0x8c, 0xa9, 0x8c, 0x38, 0x89, 0xa8, 0x89, 0x35, 0x85, 0xa9, 0x87, 0x32, 0x8b, 0xaa, 0x85,
+ 0x33, 0x87, 0xa9, 0x88, 0x37, 0x89, 0xa2, 0x8c, 0x46, 0x77, 0x92, 0x68, 0x77, 0xbe, 0x80, 0xe1,
+ 0x81, 0xde, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xde, 0x80, 0xde, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xdc,
+ 0x80, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xde, 0x81, 0xd9, 0x80, 0xe1, 0x81, 0xda,
+ 0x7e, 0x95, 0x83, 0x36, 0x80, 0x11, 0x8b, 0x20, 0x5b, 0x56, 0x9f, 0x83, 0x36, 0x81, 0xaa, 0x86,
+ 0x35, 0x89, 0xa5, 0x87, 0x35, 0x85, 0xa6, 0x86, 0x36, 0x87, 0xa6, 0x88, 0x35, 0x87, 0xa9, 0x85,
+ 0x35, 0x87, 0xa9, 0x8e, 0x3d, 0x8b, 0xab, 0x8c, 0x34, 0x89, 0xab, 0x86, 0x32, 0x87, 0xa0, 0x8c,
+ 0x72, 0x4b, 0x81, 0x1e, 0x81, 0x12, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x12,
+ 0x64, 0x6a, 0xa2, 0x6e, 0x3f, 0x7e, 0xa2, 0x86, 0x38, 0x87, 0xa6, 0x88, 0x36, 0x86, 0xa7, 0x89,
+ 0x37, 0x8a, 0xa8, 0x89, 0x3a, 0x89, 0xa8, 0x8a, 0x37, 0x89, 0xa6, 0x84, 0x31, 0x85, 0xa9, 0x88,
+ 0x37, 0x89, 0xa9, 0x88, 0x37, 0x87, 0xa6, 0x86, 0x40, 0x8c, 0x9b, 0x7a, 0x64, 0x88, 0x8b, 0xbe,
+ 0x7e, 0xdc, 0x81, 0xde, 0x82, 0xdd, 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xe1, 0x81, 0xdc, 0x81, 0xdc,
+ 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x81, 0xdc, 0x80, 0xe1, 0x82, 0xd2, 0x81, 0xae, 0x82, 0x67,
+ 0x80, 0x10, 0x81, 0x10, 0x80, 0x12, 0x8c, 0x29, 0x57, 0x55, 0x9c, 0x81, 0x37, 0x83, 0xa6, 0x85,
+ 0x33, 0x87, 0xac, 0x89, 0x36, 0x89, 0xab, 0x88, 0x32, 0x87, 0xa7, 0x87, 0x31, 0x85, 0xa6, 0x85,
+ 0x31, 0x87, 0xa7, 0x8b, 0x39, 0x82, 0xa9, 0x89, 0x32, 0x8c, 0xa6, 0x87, 0x38, 0x89, 0x98, 0x7a,
+ 0x7e, 0x29, 0x80, 0x18, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x84, 0x3e,
+ 0x56, 0x72, 0xa5, 0x75, 0x3c, 0x82, 0xa7, 0x88, 0x38, 0x87, 0xa8, 0x87, 0x34, 0x85, 0xa8, 0x87,
+ 0x34, 0x88, 0xa7, 0x88, 0x38, 0x87, 0xa8, 0x89, 0x37, 0x89, 0xa4, 0x85, 0x33, 0x87, 0xa8, 0x89,
+ 0x39, 0x89, 0xa9, 0x88, 0x35, 0x8c, 0xa7, 0x89, 0x3c, 0x82, 0x9e, 0x87, 0x5a, 0x62, 0x94, 0x60,
+ 0x79, 0xc0, 0x80, 0xe1, 0x80, 0xe1, 0x80, 0xe1, 0x80, 0xe1, 0x80, 0xe1, 0x80, 0xe1, 0x80, 0xe1,
+ 0x80, 0xe1, 0x81, 0xdc, 0x80, 0xe1, 0x80, 0xd8, 0x80, 0xa8, 0x82, 0x5e, 0x82, 0x1d, 0x80, 0x10,
+ 0x81, 0x11, 0x85, 0x16, 0x7f, 0x13, 0x8c, 0x2a, 0x58, 0x57, 0x9d, 0x81, 0x3b, 0x84, 0xa8, 0x85,
+ 0x32, 0x85, 0xab, 0x86, 0x34, 0x87, 0xaa, 0x87, 0x35, 0x87, 0xa8, 0x87, 0x35, 0x89, 0xa8, 0x89,
+ 0x36, 0x85, 0xa8, 0x83, 0x35, 0x89, 0xa7, 0x8c, 0x36, 0x82, 0xa2, 0x85, 0x48, 0x82, 0x84, 0x2c,
+ 0x78, 0x42, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7e, 0x29, 0x92, 0x70,
+ 0x50, 0x6f, 0xa9, 0x7e, 0x38, 0x87, 0xab, 0x89, 0x34, 0x87, 0xac, 0x87, 0x32, 0x86, 0xaa, 0x87,
+ 0x32, 0x89, 0xa9, 0x88, 0x37, 0x87, 0xa8, 0x88, 0x37, 0x88, 0xa4, 0x89, 0x38, 0x89, 0xa6, 0x89,
+ 0x3b, 0x8b, 0xaa, 0x8b, 0x35, 0x89, 0xa8, 0x89, 0x39, 0x82, 0x9e, 0x7f, 0x54, 0x73, 0x95, 0x46,
+ 0x73, 0x54, 0x82, 0x8d, 0x81, 0xac, 0x81, 0xcc, 0x80, 0xd8, 0x81, 0xd2, 0x80, 0xd0, 0x81, 0xce,
+ 0x81, 0xc3, 0x81, 0xa2, 0x81, 0x87, 0x80, 0x63, 0x7f, 0x20, 0x80, 0x10, 0x80, 0x10, 0x83, 0x14,
+ 0x83, 0x14, 0x85, 0x14, 0x7d, 0x17, 0x90, 0x30, 0x5b, 0x5b, 0xa0, 0x84, 0x3f, 0x86, 0xab, 0x87,
+ 0x31, 0x86, 0xa6, 0x85, 0x33, 0x86, 0xa9, 0x88, 0x39, 0x8a, 0xa8, 0x8b, 0x3c, 0x8c, 0xa9, 0x89,
+ 0x3c, 0x8c, 0xa8, 0x8b, 0x37, 0x8a, 0xa7, 0x87, 0x46, 0x7d, 0x9a, 0x89, 0x72, 0x45, 0x83, 0x2e,
+ 0x81, 0x16, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x7d, 0x2d, 0x90, 0x62,
+ 0x4d, 0x76, 0xab, 0x7c, 0x3a, 0x85, 0xad, 0x85, 0x37, 0x84, 0xad, 0x85, 0x34, 0x85, 0xaa, 0x85,
+ 0x33, 0x88, 0xa8, 0x89, 0x36, 0x88, 0xa7, 0x88, 0x38, 0x89, 0xa6, 0x89, 0x3c, 0x89, 0xa8, 0x89,
+ 0x3c, 0x8a, 0xaa, 0x89, 0x35, 0x8a, 0xa8, 0x83, 0x38, 0x85, 0xa1, 0x84, 0x4e, 0x70, 0x97, 0x56,
+ 0x75, 0x23, 0x81, 0x17, 0x81, 0x30, 0x81, 0x48, 0x81, 0x50, 0x81, 0x4c, 0x80, 0x4a, 0x81, 0x46,
+ 0x81, 0x46, 0x81, 0x2b, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x12, 0x80, 0x11, 0x82, 0x13,
+ 0x81, 0x12, 0x83, 0x12, 0x7a, 0x1b, 0x91, 0x36, 0x5d, 0x60, 0xa0, 0x85, 0x43, 0x88, 0xad, 0x8b,
+ 0x34, 0x89, 0xa4, 0x86, 0x34, 0x87, 0xa7, 0x88, 0x39, 0x8b, 0xa9, 0x8c, 0x3e, 0x8c, 0xa8, 0x8b,
+ 0x43, 0x8c, 0xa6, 0x84, 0x43, 0x8a, 0xa2, 0x72, 0x72, 0x46, 0x82, 0x1c, 0x81, 0x12, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x12, 0x80, 0x19, 0x85, 0x30,
+ 0x58, 0x60, 0xa5, 0x75, 0x46, 0x7d, 0xa9, 0x80, 0x41, 0x82, 0xa8, 0x87, 0x3c, 0x86, 0xa8, 0x82,
+ 0x38, 0x87, 0xa8, 0x89, 0x3a, 0x89, 0xa7, 0x89, 0x39, 0x89, 0xa6, 0x88, 0x3a, 0x88, 0xa8, 0x8a,
+ 0x3a, 0x89, 0xac, 0x87, 0x33, 0x87, 0xaa, 0x8a, 0x37, 0x83, 0xa3, 0x75, 0x4b, 0x6f, 0x99, 0x63,
+ 0x70, 0x2a, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x81, 0x14, 0x81, 0x14, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x12,
+ 0x81, 0x12, 0x84, 0x12, 0x7a, 0x1b, 0x92, 0x3a, 0x5c, 0x60, 0xa3, 0x82, 0x43, 0x85, 0xaf, 0x8b,
+ 0x38, 0x89, 0xa5, 0x89, 0x37, 0x88, 0xa9, 0x87, 0x35, 0x87, 0xaa, 0x88, 0x3a, 0x8b, 0xa7, 0x7e,
+ 0x49, 0x8a, 0x9f, 0x7d, 0x65, 0x4b, 0x8b, 0x47, 0x81, 0x12, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x18, 0x81, 0x1a, 0x81, 0x27,
+ 0x7a, 0x34, 0x89, 0x40, 0x62, 0x74, 0x9d, 0x7a, 0x53, 0x71, 0x9f, 0x78, 0x4a, 0x77, 0xa1, 0x7a,
+ 0x45, 0x7f, 0xa4, 0x80, 0x41, 0x82, 0xa6, 0x86, 0x3e, 0x83, 0xa7, 0x85, 0x3a, 0x8b, 0xaa, 0x8c,
+ 0x3a, 0x89, 0xae, 0x87, 0x35, 0x85, 0xaa, 0x8b, 0x3b, 0x81, 0xa4, 0x72, 0x4f, 0x68, 0x9c, 0x52,
+ 0x6f, 0x2f, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x10, 0x80, 0x10, 0x82, 0x11, 0x80, 0x10,
+ 0x80, 0x10, 0x84, 0x12, 0x7b, 0x1a, 0x91, 0x37, 0x5b, 0x5a, 0xa2, 0x7b, 0x41, 0x7e, 0xae, 0x86,
+ 0x3b, 0x88, 0xa5, 0x87, 0x3b, 0x87, 0xa9, 0x85, 0x35, 0x84, 0xa9, 0x85, 0x3e, 0x7a, 0xa3, 0x77,
+ 0x53, 0x84, 0x8a, 0x44, 0x7f, 0x1d, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x81, 0x12, 0x81, 0x1a, 0x7f, 0x20, 0x84, 0x3e, 0x6c, 0x6d, 0x94, 0x64, 0x5c, 0x62, 0x9a, 0x5e,
+ 0x53, 0x5b, 0x9e, 0x63, 0x50, 0x66, 0xa2, 0x6e, 0x47, 0x68, 0xa5, 0x70, 0x40, 0x7d, 0xa8, 0x7e,
+ 0x3b, 0x82, 0xac, 0x88, 0x3b, 0x87, 0xa9, 0x76, 0x45, 0x6e, 0xa2, 0x67, 0x58, 0x50, 0x9b, 0x4b,
+ 0x71, 0x2b, 0x81, 0x14, 0x81, 0x16, 0x81, 0x16, 0x81, 0x1a, 0x81, 0x1a, 0x80, 0x18, 0x81, 0x16,
+ 0x81, 0x16, 0x81, 0x16, 0x7f, 0x17, 0x80, 0x18, 0x81, 0x19, 0x80, 0x18, 0x83, 0x1b, 0x80, 0x19,
+ 0x81, 0x1a, 0x83, 0x16, 0x7f, 0x16, 0x8e, 0x32, 0x58, 0x4f, 0xa0, 0x69, 0x42, 0x72, 0xab, 0x7a,
+ 0x3d, 0x80, 0xa8, 0x7b, 0x3f, 0x87, 0xa9, 0x7f, 0x3f, 0x75, 0xa3, 0x72, 0x4c, 0x64, 0x8c, 0x4d,
+ 0x7d, 0x2b, 0x81, 0x13, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x16, 0x81, 0x1e, 0x82, 0x26, 0x7f, 0x29, 0x84, 0x46,
+ 0x6b, 0x57, 0x98, 0x52, 0x5f, 0x4e, 0x9b, 0x52, 0x53, 0x5c, 0x9e, 0x5f, 0x48, 0x67, 0xa3, 0x70,
+ 0x43, 0x74, 0xa7, 0x78, 0x44, 0x77, 0xa5, 0x75, 0x51, 0x64, 0x9e, 0x55, 0x61, 0x4c, 0x95, 0x37,
+ 0x7c, 0x20, 0x81, 0x24, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x81, 0x14, 0x80, 0x22, 0x89, 0x2a, 0x60, 0x42, 0x9c, 0x60, 0x47, 0x6b, 0xa5, 0x6e,
+ 0x41, 0x72, 0xa7, 0x7e, 0x45, 0x72, 0xa4, 0x72, 0x50, 0x6e, 0x9c, 0x5b, 0x6b, 0x44, 0x82, 0x21,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x12, 0x81, 0x12, 0x80, 0x18,
+ 0x7f, 0x20, 0x82, 0x29, 0x7c, 0x3f, 0x89, 0x54, 0x67, 0x60, 0x96, 0x5a, 0x58, 0x51, 0x9b, 0x5d,
+ 0x51, 0x62, 0x9f, 0x5f, 0x54, 0x60, 0x9d, 0x59, 0x5f, 0x52, 0x96, 0x43, 0x6b, 0x39, 0x84, 0x2b,
+ 0x80, 0x24, 0x81, 0x1a, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x81, 0x1c, 0x82, 0x2f, 0x6c, 0x30, 0x95, 0x5c, 0x54, 0x5c, 0x9f, 0x65,
+ 0x4a, 0x65, 0xa2, 0x67, 0x50, 0x67, 0x9b, 0x5b, 0x6c, 0x3d, 0x87, 0x3d, 0x80, 0x15, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x81, 0x1b, 0x7f, 0x20, 0x81, 0x1a, 0x80, 0x18, 0x81, 0x1a, 0x81, 0x14, 0x88, 0x22,
+ 0x6b, 0x33, 0x8e, 0x36, 0x6e, 0x35, 0x8d, 0x2e, 0x76, 0x28, 0x86, 0x20, 0x81, 0x12, 0x81, 0x12,
+ 0x80, 0x1b, 0x81, 0x12, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x81, 0x12, 0x81, 0x26, 0x77, 0x2d, 0x89, 0x2e, 0x6e, 0x34, 0x8d, 0x37,
+ 0x69, 0x3d, 0x92, 0x3f, 0x6d, 0x39, 0x8a, 0x30, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
+ 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x81, 0x14, 0x81, 0x1c, 0x81, 0x1a, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
  0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10, 0x80, 0x10,
index a41876c30dbf707e9b8011c47dbad6691c4880b9..a011d81edaa70e6ad5edc6dbb0ef3afd9372dfcc 100644 (file)
 
 include $(TOPDIR)/config.mk
 
+# CFLAGS += -DET_DEBUG
+
 LIB    = lib$(CPU).a
 
 START  = start.o kgdb.o
 OBJS   = traps.o serial.o cpu.o cpu_init.o speed.o \
-         interrupts.o scc.o i2c.o video.o wlkbd.o
+         commproc.o interrupts.o scc.o i2c.o video.o wlkbd.o
 
 all:   .depend $(START) $(LIB)
 
diff --git a/mpc8xx/commproc.c b/mpc8xx/commproc.c
new file mode 100644 (file)
index 0000000..cdf95c2
--- /dev/null
@@ -0,0 +1,89 @@
+#include <ppcboot.h>
+#include <commproc.h>
+
+void m8xx_cpm_init(uint base, uint size)
+{
+    /* Pointer to initial global data area */
+    init_data_t *idata = (init_data_t *)(CFG_INIT_RAM_ADDR + CFG_INIT_DATA_OFFSET);
+
+    /* Reclaim the DP memory for our use. */
+    idata->dp_alloc_base = base;
+    idata->dp_alloc_top  = idata->dp_alloc_base + size;
+}
+
+/* Allocate some memory from the dual ported ram.  We may want to
+ * enforce alignment restrictions, but right now everyone is a good
+ * citizen.
+ */
+uint m8xx_cpm_dpalloc(uint size)
+{
+    /* Pointer to initial global data area */
+    init_data_t *idata = (init_data_t *)(CFG_INIT_RAM_ADDR + CFG_INIT_DATA_OFFSET);
+    uint       retloc;
+
+    if ((idata->dp_alloc_base + size) >= idata->dp_alloc_top)
+       return(CPM_DP_NOSPACE);
+
+    retloc = idata->dp_alloc_base;
+    idata->dp_alloc_base += size;
+
+#if 0
+    serial_printf("Requested %d bytes\n", size);
+    serial_printf("DPRAM BASE=%08x DPRAM TOP=%08x\n",
+       idata->dp_alloc_base,
+       idata->dp_alloc_top);
+    serial_printf("Returned %08x\n", retloc);
+#endif
+
+    return(retloc);
+}
+
+uint m8xx_cpm_dpbase(void)
+{
+    /* Pointer to initial global data area */
+    init_data_t *idata = (init_data_t *)(CFG_INIT_RAM_ADDR + CFG_INIT_DATA_OFFSET);
+    uint retloc = idata->dp_alloc_base;
+
+#if 0
+    serial_printf("Returned %08x\n", retloc);
+#endif
+    return  retloc;
+}
+
+/* Allocate some memory from the dual ported ram.  We may want to
+ * enforce alignment restrictions, but right now everyone is a good
+ * citizen.
+ */
+uint m8xx_cpm_dpalloc_align(uint size, uint align)
+{
+    /* Pointer to initial global data area */
+    init_data_t *idata = (init_data_t *)(CFG_INIT_RAM_ADDR + CFG_INIT_DATA_OFFSET);
+    uint       retloc, mask = align -1;
+
+    if ((idata->dp_alloc_base + size) >= idata->dp_alloc_top)
+       return(CPM_DP_NOSPACE);
+
+    retloc = (idata->dp_alloc_base + mask) & ~mask;
+    idata->dp_alloc_base += size;
+
+#if 0
+    serial_printf("Requested %d bytes\n", size);
+    serial_printf("DPRAM BASE=%08x DPRAM TOP=%08x\n",
+       idata->dp_alloc_base,
+       idata->dp_alloc_top);
+    serial_printf("Returned %08x\n", retloc);
+#endif
+
+    return(retloc);
+}
+
+uint m8xx_cpm_dpbase_align(uint align)
+{
+    /* Pointer to initial global data area */
+    init_data_t *idata = (init_data_t *)(CFG_INIT_RAM_ADDR + CFG_INIT_DATA_OFFSET);
+    uint mask = align-1, retloc = (idata->dp_alloc_base + mask) & ~mask;
+#if 0
+    serial_printf("Returned %08x\n", retloc);
+#endif
+    return  retloc;
+}
index 0eb47279911202e8b7af087f2359c0aef33895c0..d884245d13645c4a9a6d7a206861a51472a1e33d 100644 (file)
@@ -334,64 +334,30 @@ void do_reset (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
 
 /* ------------------------------------------------------------------------- */
 
-unsigned long ticks2usec(unsigned long ticks)
+/*
+ * Get timebase clock frequency
+ *
+ * See table 15-5 pp. 15-16, and SCCR[RTSEL] pp. 15-27.
+ */
+unsigned long get_tbclk (void)
 {
-       ulong tbclk;
        /* Pointer to initial global data area */
        init_data_t *idata=(init_data_t *)(CFG_INIT_RAM_ADDR+CFG_INIT_DATA_OFFSET);
+       volatile immap_t *immr = (volatile immap_t *)CFG_IMMR;
+       ulong oscclk, factor;
 
-       if (((volatile immap_t *)CFG_IMMR)->im_clkrst.car_sccr & SCCR_TBS) {
-               tbclk = idata->cpu_speed / 16;
-       } else {
-               ulong oscclk = idata->cpu_speed /
-                       ((((CFG_PLPRCR) & PLPRCR_MF_MSK) >> PLPRCR_MF_SHIFT)+1);
-               tbclk = oscclk / 4;
+       if (immr->im_clkrst.car_sccr & SCCR_TBS) {
+               return (idata->cpu_speed / 16);
        }
-       /* usec = ticks * 1000000 / tbclk
-        * Multiplication would overflow at ~4.2e3 ticks,
-        * so we break it up into
-        * usec = ( ( ticks * 1000) / tbclk ) * 1000;
-        */
-       ticks *= 1000L;
-       ticks /= tbclk;
-       ticks *= 1000L;
-
-       return ((ulong)ticks);
-}
 
-/* ------------------------------------------------------------------------- */
+       factor = (((CFG_PLPRCR) & PLPRCR_MF_MSK) >> PLPRCR_MF_SHIFT) + 1;
 
-unsigned long usec2ticks(unsigned long usec)
-{
-       ulong tbclk;
-       ulong ticks;
-       /* Pointer to initial global data area */
-       init_data_t *idata=(init_data_t *)(CFG_INIT_RAM_ADDR+CFG_INIT_DATA_OFFSET);
+       oscclk = idata->cpu_speed / factor;
 
-       if (((volatile immap_t *)CFG_IMMR)->im_clkrst.car_sccr & SCCR_TBS) {
-               tbclk = idata->cpu_speed / 16;
-       } else {
-               ulong oscclk = idata->cpu_speed /
-                       ((((CFG_PLPRCR) & PLPRCR_MF_MSK) >> PLPRCR_MF_SHIFT)+1);
-               tbclk = oscclk / 4;
+       if ((immr->im_clkrst.car_sccr & SCCR_RTSEL) == 0 || factor > 2) {
+               return (oscclk / 4);
        }
-       ticks = ((usec * (tbclk/1000)) + 500) / 1000;
-
-       return (ticks);
-}
-
-/* ------------------------------------------------------------------------- */
-
-/*
- * We implement the delay by converting the delay (the number of
- * microseconds to wait) into a number of time base ticks; then we
- * watch the time base until it has incremented by that amount.
- */
-void udelay(unsigned long usec)
-{
-       ulong ticks = usec2ticks (usec);
-
-       wait_ticks (ticks);
+       return (oscclk / 16);
 }
 
 /* ------------------------------------------------------------------------- */
index c39d94c0bcaf40bb4c3423532bda104529306812..7f799c30eb6f45d36e4e58a83672b3c89a10b479 100644 (file)
@@ -120,7 +120,7 @@ cpu_init_f (volatile immap_t *immr)
 #if defined(CFG_OR0_REMAP)
     memctl->memc_or0 = CFG_OR0_REMAP;
 #endif
-#if !defined(CONFIG_GENIETV) && defined(CFG_OR1_REMAP)
+#if defined(CFG_OR1_REMAP)
     memctl->memc_or1 = CFG_OR1_REMAP;
 #endif
 
index 10aa22b250e3bb50aee4b39c7b49f1eb06ff49c7..59f529540e12fe12fef4b0f573edf1d999b84b83 100644 (file)
  */
 
 #include <ppcboot.h>
+
+#ifdef CONFIG_I2C
+
 #include <commproc.h>
 #include <i2c.h>
 
 #define DEBUG_STEP     0
-#define PRINTD(x)      if (DEBUG_STEP) printf(x); 
-#define DELAY_US       100000 // us to wait before checking the I2c
+#define PRINTD(x)      if (DEBUG_STEP) printf(x);
+#define DELAY_US       100000  // us to wait before checking the I2c
+
+//#define DEBUG_I2C_RATE       0       // To show selected I2C bus rate
 
 #define I2C_PRAM 0
 #define CPCR_FLAG 0x01
@@ -50,34 +55,35 @@ typedef struct I2C_BD
 } I2C_BD;
 
 
-static I2C_BD *rxbd, *txbd, *txbd2;    /* buffer descriptors are defined */
-                                       /* globally for this file */
+static I2C_BD *rxbd, *txbd;    /* buffer descriptors are defined */
+                               /* globally for this file */
 
 static unsigned char
-    rxbuf[I2C_RX_LEN],  /* The buffers are in main memory.  They */
-    txbuf[I2C_TX_LEN],  /* could also be in the DPRAM, like the SMC buffers */
-    txbuf2[I2C_TX_LEN];
+    rxbuf[I2C_RX_LEN],
+    txbuf[I2C_TX_LEN];
 
 // Returns the best value of I2BRG to meet desired clock speed of I2C with
 // input parameters (clock speed, filter, and predivider value).
 // It returns computer speed value and the difference between it and desired
 // speed.
-static inline int i2c_roundrate (int hz, int speed, int filter, int modval, 
+static inline int i2c_roundrate (int hz, int speed, int filter, int modval,
                                    int *brgval, int *totspeed)
 {
-    int moddiv = 1 << (3-(modval & 3)),
+    int moddiv = 1 << (5-(modval & 3)),
        brgdiv,
        div;
 
-    *brgval = hz / (2 * moddiv * speed) - 3 + 2*filter ;
-    
+    brgdiv = hz / (moddiv * speed);
+
+    *brgval = brgdiv / 2 - 3 - 2*filter ;
+
     if ((*brgval < 0) || (*brgval > 255))
        return -1 ;
-    
+
     brgdiv = 2 * (*brgval + 3 + 2 * filter) ;
     div  = moddiv * brgdiv ;
     *totspeed = hz / div ;
-        
+
     return  0;
 }
 
@@ -93,16 +99,16 @@ static int i2c_setrate (int hz, int speed)
        bestspeed_modval=0,
        bestspeed_filter=0,
        totspeed,
-       filter;
-    
-    for (filter = 0; filter < 2; filter++)
+       filter=0;       // Use this fixed value
+
+//    for (filter = 0; filter < 2; filter++)
        for (modval = 0; modval < 4; modval++)
-           if (i2c_roundrate ( hz, speed, 
-                               filter, modval, 
+           if (i2c_roundrate ( hz, speed,
+                               filter, modval,
                                &brgval, &totspeed) == 0)
            {
                int diff = speed - totspeed ;
-               
+
                if ((diff >= 0) && (diff < bestspeed_diff))
                {
                    bestspeed_diff      = diff ;
@@ -112,15 +118,20 @@ static int i2c_setrate (int hz, int speed)
                }
            }
 
-/*    printf("Best is:\n");
-    printf("\nCPU=%dhz RATE=%d F=%d I2MOD=%08x I2BRG=%08x DIFF=%dhz", 
-           hz, speed, 
-           bestspeed_filter, bestspeed_modval, bestspeed_brgval, 
-           bestspeed_diff);                   
-*/    
-    i2c->i2c_i2mod = ((bestspeed_modval & 3) << 1) | (bestspeed_filter << 3); 
+#ifdef DEBUG_I2C_RATE
+    printf("Best is:\n");
+    printf("\nCPU=%dhz RATE=%d F=%d I2MOD=%08x I2BRG=%08x DIFF=%dhz",
+           hz, speed,
+           bestspeed_filter, bestspeed_modval, bestspeed_brgval,
+           bestspeed_diff);
+#endif
+    i2c->i2c_i2mod |= ((bestspeed_modval & 3) << 1) | (bestspeed_filter << 3);
     i2c->i2c_i2brg = bestspeed_brgval & 0xff;
 
+#ifdef DEBUG_I2C_RATE
+    printf("i2mod=%08x i2brg=%08x\n", i2c->i2c_i2mod, i2c->i2c_i2brg);
+#endif
+
     return 1 ;
 }
 
@@ -133,11 +144,6 @@ void i2c_init(int speed)
        init_data_t *idata = (init_data_t *)(CFG_INIT_RAM_ADDR + CFG_INIT_DATA_OFFSET);
         immap_t        *immap  = (immap_t *)CFG_IMMR ;
        volatile cpm8xx_t       *cp;
-       char *dest;
-       int count ;
-#ifdef CONFIG_UCODE_PATCH
-       int reloc = 0 ;
-#endif
 
        /* Get pointer to Communication Processor
         * and to internal registers
@@ -146,11 +152,8 @@ void i2c_init(int speed)
        iip = (iic_t *)&cp->cp_dparam[PROFF_IIC];
        i2c = (i2c8xx_t *)&(immap->im_i2c);
 
-#ifdef CONFIG_UCODE_PATCH
-       /* Check for and use a microcode relocation patch
-       */ 
-       if (reloc = iip->iic_rpbase)
-           iip = (iic_t *)&cp->cp_dpmem[iip->iic_rpbase] ;
+       // Disable relocation
+       iip->iic_rpbase = 0 ;
 
        /* Initialize Port B I2C pins.
         */
@@ -158,101 +161,77 @@ void i2c_init(int speed)
        cp->cp_pbdir |= 0x00000030;
        cp->cp_pbodr |= 0x00000030;
 
-       /* Initialize port B IIC pins
-        * We need to make sure many things are initialized to zero,
-        * expecially in the case of a microcode patch.
-        */
-       iip->iic_rstate=0;
-       iip->iic_rdp=0;
-       iip->iic_rbptr=0;
-       iip->iic_rbc=0;
-       iip->iic_rxtmp=0;
-       iip->iic_tstate=0;
-       iip->iic_tdp=0;
-       iip->iic_tbptr=0;
-       iip->iic_tbc=0;
-       iip->iic_txtmp=0;
-#else
-       /* Initialize Port B I2C pins.
-        */
-       cp->cp_pbpar |= 0x00000030;
-       cp->cp_pbdir |= 0x00000030;
-       cp->cp_pbodr |= 0x00000030;
-#endif
-       
        /* Disable interrupts.
         */
+       i2c->i2c_i2mod = 0;
        i2c->i2c_i2cmr = 0;
        i2c->i2c_i2cer = 0xff;
 
+       // Set the I2C BRG Clock division factor from desired i2c rate
+       // and current CPU rate (we assume sccr dfbgr field is 0;
+       // divide BRGCLK by 1)
+
+       PRINTD("\n[I2C  ] Setting rate...");
+       i2c_setrate (idata->cpu_speed, speed) ;
+
        /* Set I2C controller in master mode
         */
        i2c->i2c_i2com = 0x01;
 
+       // Set SDMA bus arbitration level to 5 (SDCR)
+       immap->im_siu_conf.sc_sdcr = 0x0001 ;
+
+       /* Initialize Tx/Rx parameters.*/
+#if 0
+        iip->iic_rbptr = iip->iic_rbase = BD_IIC_START ;//2018 ;
+       iip->iic_tbptr = iip->iic_tbase = iip->iic_rbase + sizeof(I2C_BD) ; //2020 ;
+#else
+       iip->iic_rbptr = iip->iic_rbase = m8xx_cpm_dpbase_align(8) ;
+        iip->iic_tbptr = iip->iic_tbase = iip->iic_rbase + sizeof(I2C_BD);
+#endif
+       rxbd = (I2C_BD *)((unsigned char *)&cp->cp_dpmem[iip->iic_rbase]);
+       txbd = (I2C_BD *)((unsigned char *)&cp->cp_dpmem[iip->iic_tbase]);
+
+#if DEBUG_STEP
+       printf("rbase = %04x\n", iip->iic_rbase);
+       printf("tbase = %04x\n", iip->iic_tbase);
+       printf("Rxbd1=%08x\n", (int)rxbd);
+       printf("Txbd1=%08x\n", (int)txbd);
+#endif
+
+        cp->cp_cpcr = mk_cr_cmd(CPM_CR_CH_I2C, CPM_CR_INIT_TRX) | CPM_CR_FLG;
+       while (cp->cp_cpcr & CPM_CR_FLG);
+
        /* Set big endian byte order
         */
-       iip->iic_tfcr = SMC_EB;
-       iip->iic_rfcr = SMC_EB;
+       iip->iic_tfcr = 0x15;
+       iip->iic_rfcr = 0x15;
 
        /* Set maximum receive size.
         */
        iip->iic_mrblr = 128;
 
-       /* Initialize Tx/Rx parameters.
-        */
-        iip->iic_rbase = (unsigned short) 0x2018;
-       iip->iic_tbase = (unsigned short) 0x2020;
-       
-        cp->cp_cpcr = mk_cr_cmd(CPM_CR_CH_I2C, CPM_CR_INIT_TRX) | CPM_CR_FLG;
-       while (cp->cp_cpcr & CPM_CR_FLG);
+       PRINTD("\n[I2C  ] Clearing the buffer memory...");
+
+       // Clear the buffer memory
+       memset ((char *)rxbuf, I2C_RX_LEN, 0);
+       memset ((char *)txbuf, I2C_TX_LEN, 0);
+
+       PRINTD("\n[I2C  ] Initializing BD's...");
+
+       // Initialize the BD's
+
+       // Rx: Wrap, no interrupt, empty
+       rxbd->addr = rxbuf;
+       rxbd->status = 0xa800;
 
-    // Setup Buffer Descriptor and buffer memory.  Skips space used by 
-    //  uart.s buffer descriptors and buffers. (0x2000 to 0x2017)
-    // Each buffer descriptor takes up 8 bytes 
-
-    rxbd = ( I2C_BD *) ((unsigned char *)immap + 0x2018);
-    txbd = ( I2C_BD *) ((unsigned char *)immap + 0x2020);
-    txbd2 = ( I2C_BD *) ((unsigned char *)immap + 0x2028 );
-
-    PRINTD("\n[I2C  ] Clearing the buffer memory...");
-
-    // Clear the buffer memory 
-    dest = rxbuf;
-    for( count = 0; count < I2C_RX_LEN; count++ )
-       *dest++ = 0;
-    
-    dest = txbuf;
-    for( count = 0; count < I2C_TX_LEN; count++ )
-       *dest++ = 0;
-  
-    dest = txbuf2;
-    for( count = 0; count < I2C_TX_LEN; count++ )
-       *dest++ = 0;
-    
-    PRINTD("\n[I2C  ] Initializing BD's...");
-
-    // Initialize the BD's 
-  
-    // Rx: Wrap, no interrupt, empty 
-    rxbd->length = 0;
-    rxbd->addr = rxbuf;
-    rxbd->status = 0xa000;
-
-    // Tx: Wrap, no interrupt, not ready to send, last 
-    txbd->length = 0;
-    txbd->addr = txbuf;
-    txbd->status = 0x2800;
-  
-    txbd2->length = 0;
-    txbd2->addr = txbuf2;
-    txbd2->status = 0x2c00;
-    // Set the I2C BRG Clock division factor from desired i2c rate
-    // and current CPU rate (we assume sccr dfbgr field is 0; 
-    // divide BRGCLK by 1)
-
-    PRINTD("\n[I2C  ] Setting rate...");
-    i2c_setrate (idata->cpu_speed, speed) ;
-       
+       // Tx: Wrap, no interrupt, not ready to send, last
+       txbd->addr = txbuf;
+       txbd->status = 0x2800;
+
+       // Clear events and interrupts
+       i2c->i2c_i2cer = 0xff ;
+       i2c->i2c_i2cmr = 0 ;
 }
 
 void i2c_send( unsigned char address,
@@ -263,21 +242,12 @@ void i2c_send( unsigned char address,
   int i,j;
 
   if( size > I2C_TX_LEN )  /* Trying to send message larger than BD */
-    return; 
-
-  /* Enable I2C */
-
-  PRINTD("\n[I2C  ] Enabling I2C...");
-  i2c->i2c_i2mod |= 1;  
+    return;
 
-/* WE ONLY HAVE TO SEND ONCE
-  
   PRINTD("\n[I2C  ] Waiting for transmit buffer empty...");
-  while( txbd->status & TXBD_R )
-  {
-  }; // Loop until previous data sent 
-*/
-  PRINTD("\n[I2C  ] Formatting addresses...");  
+  while( txbd->status & TXBD_R ) ; // Loop until previous data sent
+
+  PRINTD("\n[I2C  ] Formatting addresses...");
   if( enable_secondary ) /* Device has an internal address */
   {
     txbd->length = size + 2;  /* Length of message plus dest addresses */
@@ -293,90 +263,106 @@ void i2c_send( unsigned char address,
     txbd->addr[0] &= ~(0x01);  /* Set address to write */
     i = 1;
   }
+
+#if DEBUG_STEP
+    printf("Length = %d addr[0] = %08x addr[1] = %08x\n",
+       txbd->length,
+       txbd->addr[0],
+       txbd->addr[1]);
+#endif
+
   /* Copy data to send into buffer */
 
- PRINTD("\n[I2C  ] Copying data into buffer...");  
+ PRINTD("\n[I2C  ] Copying data into buffer...");
 
   for( j = 0; j < size; i++, j++ )
     txbd->addr[ i ] = dataout[j];
-    
-  /* Ready to Transmit, wrap, last */    
-  
-  PRINTD("\n[I2C  ] Waiting to transmit...");  
-  
-  txbd->status = txbd->status | TXBD_R | TXBD_W | TXBD_L;
-    
-  /* Transmit */
-  PRINTD("\n[I2C  ] Transmitting...");  
 
+  /* Ready to Transmit, wrap, last */
+
+  PRINTD("\n[I2C  ] Waiting to transmit...");
+
+  txbd->status = txbd->status | TXBD_R | TXBD_W | TXBD_L | TXBD_S ;
+
+  /* Enable I2C */
+
+  PRINTD("\n[I2C  ] Enabling I2C...");
+  i2c->i2c_i2mod |= 1;
+
+  /* Transmit */
+  PRINTD("\n[I2C  ] Transmitting...");
   i2c->i2c_i2com |= 0x80;
 
   PRINTD("\n[I2C  ] Waiting for transmit buffer empty...");
-  udelay (DELAY_US) ;
-    
+  udelay (DELAY_US) ;  // This is a patch!
+
   while( txbd->status & TXBD_R );
-  
+
   /* Turn off I2C */
   PRINTD("\n[I2C  ] Turning off I2C...");
   i2c->i2c_i2mod &= (~1);
+
+#if DEBUG_STEP
+ printf("\nTXBD->CBD_SC=%08x\n", txbd->status);
+
+ if (txbd->status & 4)
+    while(1);
+#endif
 }
 
 void i2c_receive(unsigned char address,
                unsigned char secondary_address,
-               int enable_secondary,                           
+               int enable_secondary,
                 unsigned short size_to_expect, unsigned char datain[] )
 {
   int i, j;
-  
-//  if( size_to_expect > I2C_RX_LEN )
-//     abort();  /* Expected to receive too much */
-  
+
+  if( size_to_expect > I2C_RX_LEN )
+       return;  /* Expected to receive too much */
+
   /* Turn on I2C */
   i2c->i2c_i2mod |= 0x01;
-    
-  /* Setup TXBD for destination address */   
+
+  /* Setup TXBD for destination address */
   if( enable_secondary )
   {
-    txbd->length = 2; 
+    txbd->length = 2;
     txbd->addr[0] = address | 0x00;   /* Write data */
     txbd->addr[1] = secondary_address;  /* Internal address */
     txbd->status = TXBD_R;
-      
-    /* Buffer ready to transmit, */
-    txbd2->status = TXBD_R | TXBD_W | TXBD_L | TXBD_S;
-    txbd2->length = size_to_expect + 1;
-    txbd2->addr[0] = address | 0x01; /* Read data */
 
     /* Reset the rxbd */
     rxbd->status = RXBD_E | RXBD_W;
-  
+
     /* Begin transmission */
     i2c->i2c_i2com |= 0x80;
-  
-  } 
+
+  }
   else
   {
     txbd->length = 1 + size_to_expect;
     txbd->addr[0] = address | 0x01;
-    
-      
+
+
     /* Buffer ready to transmit, wrap, loop */
     txbd->status |= TXBD_R | TXBD_W | TXBD_L;
 
     /* Reset the rxbd */
     rxbd->status = RXBD_E | RXBD_W;
-  
+
     /* Begin transmission */
     i2c->i2c_i2com |= 0x80;
-  
+
     while( txbd->status & TXBD_R);  /* Loop until transmit completed */
   }
-  
+
   while( rxbd->status & RXBD_E);  /* Wait until receive is finished */
-  
+
   for( i= 0, j = 0; j < size_to_expect; j++, i++ )  /* Copy data to datain[] */
     datain[j] = rxbd->addr[i];
-  
+
   /* Turn off I2C */
   i2c->i2c_i2mod &= (~1);
 }
+
+#endif /* CONFIG_I2C */
index 6ba629976385c77d40d3e73ce5b721fe88f320c8..8cdb7b7d5b734ecc0a25d816d1bb81bc2c4d9784 100644 (file)
@@ -29,7 +29,6 @@
 
 /****************************************************************************/
 
-#define        DECREMENTER_TICK        1000    /* 1 ms tick */
 unsigned decrementer_count;            /* count value for 1e6/HZ microseconds */
 
 /****************************************************************************/
@@ -102,7 +101,7 @@ interrupt_init (bd_t *bd)
        if (immr->im_clkrst.car_sccr & SCCR_TBS) {
                freq /= 16;     /* use divide by 16 processor clock */
        }
-       decrementer_count = freq / DECREMENTER_TICK;
+       decrementer_count = freq / CFG_HZ;
 
        cpm_interrupt_init();
 
@@ -312,26 +311,19 @@ void timer_interrupt(struct pt_regs *regs)
 
 /****************************************************************************/
 
-static unsigned long timer_base;
-
 void reset_timer (void)
 {
-       timer_base = 0;
+       timestamp = 0;
 }
 
 ulong get_timer (ulong base)
 {
-       unsigned long usec;
-       extern unsigned long long get_ticks(void);
-
-       usec = ticks2usec((unsigned long)get_ticks());
-
-       return (timer_base - base + (usec / 1000));     /* millisec timer */
+       return (timestamp - base);
 }
 
 void set_timer (ulong t)
 {
-       timer_base = t;
+       timestamp = t;
 }
 
 /****************************************************************************/
index 820d1f8987599e92982e889109dbab90c2219288..374eb58482d14da875d1a2da2bc36bafee70bf04 100644 (file)
@@ -47,7 +47,9 @@
 
 #if (CONFIG_COMMANDS & CFG_CMD_NET)
 
+#if 0
 #define BD_OFFSET 0x860 /* offset to begin of DPRAM + allocation for serial IF*/
+#endif
 
 /* Ethernet Transmit and Receive Buffers */
 #define DBUF_LENGTH  1520
@@ -189,7 +191,11 @@ int eth_init(bd_t *bis)
     txIdx = 0;
 
     /* assign static pointer to BD area */
+#if 0
     rtx = (RTXBD *) (immr->im_cpm.cp_dpmem + BD_OFFSET);
+#else
+    rtx = (RTXBD *) (immr->im_cpm.cp_dpmem + m8xx_cpm_dpbase_align(8));
+#endif /* 0 */
 
 #if (defined(PA_ENET_RXD) && defined(PA_ENET_TXD))
     /* Configure port A pins for Txd and Rxd.
@@ -437,6 +443,10 @@ int eth_init(bd_t *bis)
 
     immr->im_cpm.cp_scc[SCC_ENET].scc_gsmrl |= (SCC_GSMRL_ENR | SCC_GSMRL_ENT);
 
+#ifdef CONFIG_FADS     /* Trying to work around FADS problem with first packet */
+    udelay(10000);     /* wait 10 ms */
+#endif
+
     return 1;
 }
 
index 86dc233babb67361117225ad423071e531a2473a..81d75a9a1a58692ebc8319982b1a0dd191d5a948 100644 (file)
@@ -59,7 +59,7 @@ serial_init (ulong cpu_clock, int baudrate)
 #if (!defined(CONFIG_8xx_CONS_SMC1)) && (defined(CONFIG_MPC823) || defined(CONFIG_MPC850))
        volatile iop8xx_t *ip = (iop8xx_t *)&(im->im_ioport);
 #endif
-       uint    dpaddr;
+       uint    dpaddr, dpsize, size;
 
        /* initialize pointers to SMC */
 
@@ -117,21 +117,18 @@ serial_init (ulong cpu_clock, int baudrate)
 #else
        *((uint *) BCSR1) &= ~BCSR1_RS232EN_2;
 #endif
-#endif
-
-#if defined(CONFIG_MBX)
-       board_serial_init();
-       dpaddr = CFG_DPRAMSERIAL;
-#else  /* ! CONFIG_MBX */
+#endif /* CONFIG_FADS */
 
-       /* Allocate space for two buffer descriptors in the DP ram.
-        * For now, this address seems OK, but it may have to
-        * change with newer versions of the firmware.
-        * damm: allocating space after the two buffers for rx/tx data
+       /* Set the physical address of the host memory buffers in
+        * the buffer descriptors.
         */
 
-       dpaddr = 0x800;
+       dpaddr = CPM_DATAONLY_BASE;
+       dpsize = CPM_DATAONLY_SIZE;
 
+#if defined(CONFIG_MBX)
+       board_serial_init();
+       dpaddr = CFG_DPRAMSERIAL;
 #endif /* CONFIG_MBX */
 
        /* Set the physical address of the host memory buffers in
@@ -152,6 +149,16 @@ serial_init (ulong cpu_clock, int baudrate)
        up->smc_rfcr = SMC_EB;
        up->smc_tfcr = SMC_EB;
 
+       /* Updating dpram address and size
+       */
+       size = ((sizeof(cbd_t)*2 + 2) + 15) & ~15;
+       dpaddr += size;
+       dpsize -= size;
+
+       /* Initialize CPM
+       */
+       m8xx_cpm_init(dpaddr, dpsize);
+
        /* Set UART mode, 8 bit, no parity, one stop.
         * Enable receive and transmit.
         */
@@ -190,10 +197,6 @@ serial_init (ulong cpu_clock, int baudrate)
        /* Enable transmitter/receiver.
        */
        sp->smc_smcmr |= SMCMR_REN | SMCMR_TEN;
-
-#ifdef CONFIG_FADS
-       udelay(500000);
-#endif
 }
 
 void
index dba72f0382615d1817ce2c888c8a7b6b7d4e249f..7e4e50eeba2f1c03663f9871df60996cc20f336f 100644 (file)
@@ -429,39 +429,6 @@ dc_read:
        mfspr   r3, DC_DAT
        blr
 
-/*
- * Delay for a number of ticks
- */
-       .globl  wait_ticks
-wait_ticks:
-1:     mftbu   r4
-       mftb    r5
-       mftbu   r6
-       cmp     0,r4,r6
-       bne     1b              /* Get [synced] base time */
-       addc    r9,r5,r3        /* Compute end time */
-       addze   r8,r4
-2:     mftbu   r4
-       cmp     0,r4,r8
-       blt     2b
-       bgt     3f
-       mftb    r5
-       cmp     0,r5,r9
-       blt     2b
-3:     blr
-
-/*
- * read timebase as "long long"
- */
-       .globl  get_ticks
-get_ticks:
-1:     mftbu   r3
-       mftb    r4
-       mftbu   r5
-       cmp     0,r3,r5
-       bne     1b
-       blr
-
 /*
  * unsigned int get_immr (unsigned int mask)
  *
index 89b14d2376f342e627cc70644b9f908a25632767..62fb5f3c44885d3053e997c2b952bc5286bb00d9 100644 (file)
 #include <ppcboot.h>
 #include <config.h>
 
+#ifdef CONFIG_WL_4PPM_KEYBOARD
+
+/* WIP: Wireless keyboard on SMC
+ */
 int    drv_wlkbd_init(void)
 {
     return 0 ;
 }
+
+#endif /* CONFIG_WL_4PPM_KEYBOARD */
index f6087c1a1b05ac4cd334d222d0b1a40d7b444dcf..e0d3446c1d65e1f7a78fe7bd90e057f20ef9c6fa 100644 (file)
@@ -23,7 +23,7 @@
 
 include $(TOPDIR)/config.mk
 
-#CFLAGS += -DET_DEBUG -DDEBUG
+# CFLAGS += -DET_DEBUG -DDEBUG
 
 LIB    = libnet.a
 
index fa1d1c34d2999c4dab7eb9281672a1cc4f83f3c9..b6f6687eac13e823275750bdb9e8ef5f38506062 100644 (file)
@@ -31,7 +31,7 @@ static ulong  lAddr;
 
 static int BootpExtended (u8 *e);
 
-void BootpVendorFieldProcess(u8 *ext)
+static void BootpVendorFieldProcess(u8 *ext)
 {
     int size = *(ext+1) ;
 
@@ -49,9 +49,8 @@ void BootpVendorFieldProcess(u8 *ext)
                break;
     /* Variable length fields */
        case 3:         /* Gateways list                                */
-               if (NetOurGatewaysNum == 0) {
-                   memcpy(&NetOurGatewaysIP, ext+2, size);
-                   NetOurGatewaysNum = size >> 2 ;
+               if (NetOurGatewayIP == 0) {
+                   memcpy(&NetOurGatewayIP, ext+2, 4);
                }    
                break;
        case 4:         /* Time server - Not yet supported              */
@@ -117,7 +116,7 @@ void BootpVendorFieldProcess(u8 *ext)
     }
 }
 
-void BootpVendorProcess(u8 *ext, int size)
+static void BootpVendorProcess(u8 *ext, int size)
 {
     u8 *end = ext + size ;
 #ifdef DEBUG_BOOTP_EXT
@@ -225,7 +224,11 @@ BootpTimeout(void)
        BootpRequest(BootFile, lAddr);
 }
 
-/* Initialize BOOTP extension fields in the request. */
+/*
+ *     Initialize BOOTP extension fields in the request.
+ *
+ *     Warning: no field size check - change CONFIG_BOOTP_MASK at your own risk!
+ */
 static int BootpExtended (u8 *e)
 {
     u8 *start = e ;
@@ -235,29 +238,41 @@ static int BootpExtended (u8 *e)
     *e++ =  83;
     *e++ =  99;
 
+#if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_SUBNETMASK)
     *e++ =  1;         /* Subnet mask request */
     *e++ =  4;
      e  +=  4;
+#endif
 
+#if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_GATEWAY)
     *e++ =  3;         /* Default gateway request */
     *e++ =  4;
      e  +=  4;
+#endif
 
+#if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_HOSTNAME)
     *e++ = 12;         /* Host name request */
     *e++ = 32;
      e  += 32;
+#endif
 
+#if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_NISDOMAIN)
     *e++ = 40;         /* NIS Domain name request */
     *e++ = 32;
      e  += 32;
+#endif
 
+#if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_BOOTPATH)
     *e++ = 17;         /* Boot path */
     *e++ = 32;
      e  += 32;
+#endif
 
+#if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_BOOTFILESIZE)
     *e++ = 13;         /* Boot file size */
     *e++ =  4;
      e  +=  4;
+#endif
 
     *e = 255;          /* End of the list */
     
@@ -287,7 +302,7 @@ BootpRequest(char *fileName, ulong loadAdr)
        bp->bp_htype = HWT_ETHER;
        bp->bp_hlen = HWL_ETHER;
        bp->bp_hops = 0;
-       bp->bp_secs = SWAP16( GetTicksSinceBoot() / HZ);
+       bp->bp_secs = SWAP16( get_timer(0) / CFG_HZ);
        bp->bp_ciaddr = 0;
        bp->bp_yiaddr = 0;
        bp->bp_siaddr = 0;
@@ -312,12 +327,12 @@ BootpRequest(char *fileName, ulong loadAdr)
                | ((ulong)NetOurEther[3] << 16)
                | ((ulong)NetOurEther[4] << 8)
                | (ulong)NetOurEther[5];
-       BootpID += GetTicksSinceBoot();
+       BootpID += get_timer(0);
        bp->bp_id = BootpID;
 
        NetSendPacket(NetTxPacket, BOOTP_SIZE + ext_len);
 
-       NetSetTimeout(TIMEOUT * HZ, BootpTimeout);
+       NetSetTimeout(TIMEOUT * CFG_HZ, BootpTimeout);
        NetSetHandler(BootpHandler);
 }
 
index 49086b6bbb8b7ae62d52575525ce0033eb7be424..0e506e800e563804e3123e3e4f4a182a76bbae87 100644 (file)
--- a/net/net.c
+++ b/net/net.c
@@ -22,8 +22,7 @@
 /** BOOTP EXTENTIONS **/
 
 IPaddr_t       NetOurSubnetMask=0;             /* Our subnet mask (0=unknown)  */
-int            NetOurGatewaysNum=0;            /* Out gateways number          */
-IPaddr_t       NetOurGatewaysIP[4]={0,};       /* Our gateways IP addresses    */
+IPaddr_t       NetOurGatewayIP=0;              /* Our gateways IP addresses    */
 char           NetOurNISDomain[32]={0,};       /* Our NIS domain               */
 char           NetOurHostName[32]={0,};        /* Our hostname                 */
 char           NetOurRootPath[32]={0,};        /* Our bootpath                 */
@@ -51,8 +50,6 @@ static thand_f *timeHandler;          /* Current timeout handler              */
 static ulong   timeValue;              /* Current timeout value                */
 volatile uchar *NetTxPacket = 0;       /* THE transmit packet                  */
 
-static ulong   tb_factor;
-
 
 /**********************************************************************/
 /*
@@ -67,7 +64,6 @@ NetLoop(bd_t *bis, proto_t protocol, char *fileName, ulong loadAdr)
 
        if (!NetTxPacket) {
                int     i;
-               ulong   DecrementerSpeed;
 
                /*
                 *      Setup packet buffers, aligned correctly.
@@ -77,10 +73,6 @@ NetLoop(bd_t *bis, proto_t protocol, char *fileName, ulong loadAdr)
                for (i = 0; i < PKTBUFSRX; i++) {
                        NetRxPackets[i] = NetTxPacket + (i+1)*PKTSIZE;
                }
-
-               DecrementerSpeed = bis->bi_busfreq * 1000000 / 4;
-               tb_factor = 0xffffffff / (DecrementerSpeed / HZ);
-
        }
 
        eth_halt();
@@ -163,7 +155,7 @@ restart:
                 *      Check for a timeout, and run the timeout handler
                 *      if we have one.
                 */
-               if (timeHandler && GetTicksSinceBoot() > timeValue) {
+               if (timeHandler && (get_timer(0) > timeValue)) {
                        thand_f *x;
 
                        x = timeHandler;
@@ -208,7 +200,7 @@ NetStartAgain(void)
 {
        NetServerIP = 0;
        NetOurIP = 0;
-       NetSetTimeout(10 * HZ, startAgainTimeout);
+       NetSetTimeout(10 * CFG_HZ, startAgainTimeout);
        NetSetHandler(startAgainHandler);
 }
 
@@ -231,7 +223,7 @@ NetSetTimeout(int iv, thand_f * f)
                timeHandler = (thand_f *)0;
        } else {
                timeHandler = f;
-               timeValue = GetTicksSinceBoot() + iv;
+               timeValue = get_timer(0) + iv;
        }
 }
 
@@ -492,30 +484,4 @@ void NetPrintIPaddr(IPaddr_t x)
     puts(tmp);
 }
 
-
-/*
- *     Return the number of HZ ticks since we started.
- */
-ulong
-GetTicksSinceBoot(void)
-{
-       ulong   l;
-       ulong   h;
-       ulong   tmp;
-       unsigned long long tb;
-
-       asm volatile (" 1:      mftbu %0;
-                               mftb %1;
-                               mftbu %2;
-                               cmpw %0, %2;
-                               bne 1b
-                       " : "=r" (h), "=r" (l), "=r" (tmp));
-
-       tb = (unsigned long long)h << 32 | (unsigned long long)l;
-       tb *= tb_factor;
-       l = tb >> 32;
-
-       return l;
-}
-
 #endif /* CFG_CMD_NET */
index 0594f55f6c4da19cb3494b774f69c423f271566e..8b4cfa781973f5e4e0ada9934ab5e7317628fdd3 100644 (file)
@@ -93,7 +93,7 @@ RarpRequest(char *fileName, ulong loadAdr)
 
        NetSendPacket(NetTxPacket, ETHER_HDR_SIZE + ARP_HDR_SIZE);
 
-       NetSetTimeout(TIMEOUT * HZ, RarpTimeout);
+       NetSetTimeout(TIMEOUT * CFG_HZ, RarpTimeout);
        NetSetHandler(RarpHandler);
 }
 
index 97a232fe2b78b13193c8d89d9225c2acd122f181..9e60d27a29bfc183e6c01c48bfdffe10ef60685b 100644 (file)
@@ -194,7 +194,7 @@ TftpTimeout (void)
                NetStartAgain ();
        } else {
                printf ("T ");
-               NetSetTimeout (TIMEOUT * HZ, TftpTimeout);
+               NetSetTimeout (TIMEOUT * CFG_HZ, TftpTimeout);
                TftpSend ();
        }
 }
@@ -218,13 +218,13 @@ TftpStart (ulong loadAdr)
        printf ("; our IP address is "); NetPrintIPaddr (NetOurIP);
 
        // Check if we need to send across this subnet
-       if ((NetOurGatewaysNum > 0) && (NetOurSubnetMask != 0)) {
+       if (NetOurGatewayIP && NetOurSubnetMask) {
            IPaddr_t OurNet     = NetOurIP    & NetOurSubnetMask;
            IPaddr_t ServerNet  = NetServerIP & NetOurSubnetMask;
 
            if (OurNet != ServerNet) {
                printf ("; sending throught gateway ");
-               NetPrintIPaddr (NetOurGatewaysIP[0]) ;
+               NetPrintIPaddr (NetOurGatewayIP) ;
            }
        }
        printf ("\n");
@@ -264,13 +264,13 @@ TftpStart (ulong loadAdr)
 
        printf ("Loading: *\b");
 
-       NetSetTimeout (TIMEOUT * HZ, TftpTimeout);
+       NetSetTimeout (TIMEOUT * CFG_HZ, TftpTimeout);
        NetSetHandler (TftpHandler);
 
        TftpServerPort = WELL_KNOWN_PORT;
        TftpTimeoutCount = 0;
        TftpState = STATE_RRQ;
-       TftpOurPort = 1024 + (GetTicksSinceBoot() % 3072);
+       TftpOurPort = 1024 + (get_timer(0) % 3072);
 
        TftpSend ();
 }
index 0815c1e904c13865fdb259f5aa5aba84d88afa47..0235dd28e8d1d91a542c9901a591f92a48813982 100644 (file)
@@ -25,8 +25,8 @@ include $(TOPDIR)/config.mk
 
 LIB    = lib$(ARCH).a
 
-AOBJS  = ppcstring.o
-COBJS  = ctype.o vsprintf.o extable.o string.o \
+AOBJS  = ppcstring.o ticks.o
+COBJS  = ctype.o vsprintf.o extable.o string.o time.o \
          display_options.o zlib.o crc32.o kgdb.o ldiv.o
 OBJS   = $(AOBJS) $(COBJS)
 
diff --git a/ppc/ticks.S b/ppc/ticks.S
new file mode 100644 (file)
index 0000000..79c3f24
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * (C) Copyright 2000
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <ppc_asm.tmpl>
+#include <ppc_defs.h>
+
+/*
+ * unsigned long long get_ticks(void);
+ *
+ * read timebase as "long long"
+ */
+       .globl  get_ticks
+get_ticks:
+1:     mftbu   r3
+       mftb    r4
+       mftbu   r5
+       cmp     0,r3,r5
+       bne     1b
+       blr
+
+/*
+ * Delay for a number of ticks
+ */
+       .globl  wait_ticks
+wait_ticks:
+1:     mftbu   r4
+       mftb    r5
+       mftbu   r6
+       cmp     0,r4,r6
+       bne     1b              /* Get [synced] base time */
+       addc    r9,r5,r3        /* Compute end time */
+       addze   r8,r4
+2:     mftbu   r4
+       cmp     0,r4,r8
+       blt     2b
+       bgt     3f
+       mftb    r5
+       cmp     0,r5,r9
+       blt     2b
+3:     blr
diff --git a/ppc/time.c b/ppc/time.c
new file mode 100644 (file)
index 0000000..dcbe913
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * (C) Copyright 2000
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <ppcboot.h>
+
+
+/* ------------------------------------------------------------------------- */
+
+unsigned long usec2ticks(unsigned long usec)
+{
+       ulong ticks = ((usec * (get_tbclk()/1000)) + 500) / 1000;
+
+       return (ticks);
+}
+
+/* ------------------------------------------------------------------------- */
+
+/*
+ * We implement the delay by converting the delay (the number of
+ * microseconds to wait) into a number of time base ticks; then we
+ * watch the time base until it has incremented by that amount.
+ */
+void udelay(unsigned long usec)
+{
+       ulong ticks = usec2ticks (usec);
+
+       wait_ticks (ticks);
+}
+
+/* ------------------------------------------------------------------------- */
+
+unsigned long ticks2usec(unsigned long ticks)
+{
+       ulong tbclk = get_tbclk();
+
+       /* usec = ticks * 1000000 / tbclk
+        * Multiplication would overflow at ~4.2e3 ticks,
+        * so we break it up into
+        * usec = ( ( ticks * 1000) / tbclk ) * 1000;
+        */
+       ticks *= 1000L;
+       ticks /= tbclk;
+       ticks *= 1000L;
+
+       return ((ulong)ticks);
+}
+
index 093209aa921da72001170e1356f06fc826ec4f09..5d08bc8ca995f8817092364fa3e3a2b1c1c133bd 100644 (file)
@@ -31,7 +31,6 @@
 
 /****************************************************************************/
 
-#define        DECREMENTER_TICK        1000    /* 1 ms tick */
 unsigned decrementer_count;            /* count value for 1e6/HZ microseconds */
 
 /****************************************************************************/
index 9104c78f3559a2ed8771134fa64fe5d01a6775fd..ac0bda687140b2731ec4921bcfcfc0800e41b6f3 100644 (file)
@@ -37,7 +37,7 @@ typedef struct {
 } bgr_t ;
 
 typedef struct {
-       unsigned char   v,y1,u,y2;
+       unsigned char   Cb,y1,Cr,y2;
 } yuyv_t ;
 
 typedef struct {
@@ -91,8 +91,8 @@ void pixel_rgb_to_yuyv (rgb_t *rgb_pixel, yuyv_t *yuyv_pixel)
     
     // Calculate YUV values (0-255) from RGB beetween 0-100
     yuyv_pixel->y1 = yuyv_pixel->y2    = 209 * (pR + pG + pB) / 300 + 16  ;
-    yuyv_pixel->u                      = pR - (pG*3/4) - (pB/4)     + 128 ; 
-    yuyv_pixel->v                      = pB - (pR/4)   - (pG*3/4)   + 128 ;
+    yuyv_pixel->Cb                     = pB - (pR/4)   - (pG*3/4)   + 128 ;
+    yuyv_pixel->Cr                     = pR - (pG*3/4) - (pB/4)     + 128 ; 
 
     return ;
 }    
@@ -241,7 +241,7 @@ int image_rgb_to_yuyv (image_t *rgb_image, image_t *yuyv_image)
        {
                pixel_rgb_to_yuyv (rgb_ptr++, &yuyv);
                
-               if ((count & 1) == 0)
+               if ((count & 1)==0)     // Was == 0
                    memcpy (dest, ((void *)&yuyv) + 2, sizeof(short));
                else
                    memcpy (dest, (void *)&yuyv, sizeof(short));