diff options
author | wdenk <wdenk> | 2003-09-02 22:48:03 +0000 |
---|---|---|
committer | wdenk <wdenk> | 2003-09-02 22:48:03 +0000 |
commit | 12f34241cb9679c27a1ab3561766562f5a515eff (patch) | |
tree | e6408a1701c7dabf3e2ceb1326ce2f5cc8657c96 | |
parent | 326428cc8bbdddb30920a96b672abd0d59833ce4 (diff) | |
download | u-boot-imx-12f34241cb9679c27a1ab3561766562f5a515eff.zip u-boot-imx-12f34241cb9679c27a1ab3561766562f5a515eff.tar.gz u-boot-imx-12f34241cb9679c27a1ab3561766562f5a515eff.tar.bz2 |
* Add support for PPChameleon Eval Board
* Add support for P3G4 board
* Fix problem with MGT5100 FEC driver: add "early" MAC address
initialization
31 files changed, 4146 insertions, 34 deletions
@@ -2,6 +2,13 @@ Changes for U-Boot 0.4.7: ====================================================================== +* Add support for PPChameleon Eval Board + +* Add support for P3G4 board + +* Fix problem with MGT5100 FEC driver: add "early" MAC address + initialization + * Patch by Yuli Barcohen, 7 Aug 2003: check BCSR to detect if the board is configured in PCI mode diff --git a/MAINTAINERS b/MAINTAINERS index 16240a8..2e748ef 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -92,6 +92,8 @@ Wolfgang Denk <wd@denx.de> PM826 MPC8260 TQM8260 MPC8260 + P3G4 MPC7410 + PCIPPC2 MPC750 PCIPPC6 MPC750 @@ -59,7 +59,7 @@ LIST_4xx=" \ DU405 EBONY ERIC EXBITGEN \ MIP405 MIP405T ML2 OCRTC \ ORSG PCI405 PIP405 PMC405 \ - W7OLMC W7OLMG WALNUT405 \ + PPChameleonEVB W7OLMC W7OLMG WALNUT405 \ " ######################################################################### @@ -89,7 +89,8 @@ LIST_8260=" \ ######################################################################### LIST_74xx=" \ - EVB64260 PCIPPC2 PCIPPC6 ZUMA \ + EVB64260 P3G4 PCIPPC2 PCIPPC6 \ + ZUMA \ " LIST_7xx=" \ @@ -539,6 +539,9 @@ PIP405_config:unconfig PMC405_config: unconfig @./mkconfig $(@:_config=) ppc ppc4xx pmc405 esd +PPChameleonEVB_config: unconfig + @./mkconfig $(@:_config=) ppc ppc4xx PPChameleonEVB dave + W7OLMC_config \ W7OLMG_config: unconfig @./mkconfig $(@:_config=) ppc ppc4xx w7o @@ -751,6 +754,9 @@ BAB7xx_config: unconfig ELPPC_config: unconfig @./mkconfig $(@:_config=) ppc 74xx_7xx elppc eltec +P3G4_config: unconfig + @./mkconfig $(@:_config=) ppc 74xx_7xx evb64260 + #======================================================================== # ARM #======================================================================== @@ -306,6 +306,7 @@ The following options need to be configured: or CONFIG_MPC824X, CONFIG_MPC8260 or CONFIG_IOP480 or CONFIG_405GP + or CONFIG_405EP or CONFIG_440 or CONFIG_MPC74xx or CONFIG_750FX diff --git a/board/dave/PPChameleonEVB/Makefile b/board/dave/PPChameleonEVB/Makefile new file mode 100644 index 0000000..39d2fec --- /dev/null +++ b/board/dave/PPChameleonEVB/Makefile @@ -0,0 +1,46 @@ +# +# (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 $(TOPDIR)/config.mk + +LIB = lib$(BOARD).a + +OBJS = $(BOARD).o flash.o + +$(LIB): $(OBJS) $(SOBJS) + $(AR) crv $@ $^ + +clean: + rm -f $(SOBJS) $(OBJS) + +distclean: clean + rm -f $(LIB) core *.bak .depend + +######################################################################### + +.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c) + $(CC) -M $(CFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@ + +sinclude .depend + +######################################################################### diff --git a/board/dave/PPChameleonEVB/PPChameleonEVB.c b/board/dave/PPChameleonEVB/PPChameleonEVB.c new file mode 100644 index 0000000..04b7cd7 --- /dev/null +++ b/board/dave/PPChameleonEVB/PPChameleonEVB.c @@ -0,0 +1,269 @@ +/* + * (C) Copyright 2001-2003 + * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com + * + * 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 <common.h> +#include <asm/processor.h> +#include <command.h> +#include <malloc.h> + +/* ------------------------------------------------------------------------- */ + +#if 0 +#define FPGA_DEBUG +#endif + +/* fpga configuration data - gzip compressed and generated by bin2c */ +const unsigned char fpgadata[] = +{ +#include "fpgadata.c" +}; + +/* + * include common fpga code (for esd boards) + */ +#include "../common/fpga.c" + + +/* Prototypes */ +int gunzip(void *, int, unsigned char *, int *); + + +int board_pre_init (void) +{ + out32(GPIO0_OR, CFG_NAND0_CE); /* set initial outputs */ + out32(GPIO0_OR, CFG_NAND1_CE); /* set initial outputs */ + + /* + * IRQ 0-15 405GP internally generated; active high; level sensitive + * IRQ 16 405GP internally generated; active low; level sensitive + * IRQ 17-24 RESERVED + * IRQ 25 (EXT IRQ 0) CAN0; active low; level sensitive + * IRQ 26 (EXT IRQ 1) SER0 ; active low; level sensitive + * IRQ 27 (EXT IRQ 2) SER1; active low; level sensitive + * IRQ 28 (EXT IRQ 3) FPGA 0; active low; level sensitive + * IRQ 29 (EXT IRQ 4) FPGA 1; active low; level sensitive + * IRQ 30 (EXT IRQ 5) PCI INTA; active low; level sensitive + * IRQ 31 (EXT IRQ 6) COMPACT FLASH; active high; level sensitive + */ + mtdcr(uicsr, 0xFFFFFFFF); /* clear all ints */ + mtdcr(uicer, 0x00000000); /* disable all ints */ + mtdcr(uiccr, 0x00000000); /* set all to be non-critical*/ + mtdcr(uicpr, 0xFFFFFF81); /* set int polarities */ + mtdcr(uictr, 0x10000000); /* set int trigger levels */ + mtdcr(uicvcr, 0x00000001); /* set vect base=0,INT0 highest priority*/ + mtdcr(uicsr, 0xFFFFFFFF); /* clear all ints */ + + /* + * EBC Configuration Register: set ready timeout to 512 ebc-clks -> ca. 15 us + */ +#if 1 /* test-only */ + mtebc (epcr, 0xa8400000); /* ebc always driven */ +#else + mtebc (epcr, 0x28400000); /* ebc in high-z */ +#endif + + return 0; +} + + +/* ------------------------------------------------------------------------- */ + +int misc_init_f (void) +{ + return 0; /* dummy implementation */ +} + + +int misc_init_r (void) +{ +#if 0 /* test-only */ + DECLARE_GLOBAL_DATA_PTR; +#if 0 + volatile unsigned short *fpga_mode = + (unsigned short *)((ulong)CFG_FPGA_BASE_ADDR + CFG_FPGA_CTRL); + volatile unsigned char *duart0_mcr = + (unsigned char *)((ulong)DUART0_BA + 4); + volatile unsigned char *duart1_mcr = + (unsigned char *)((ulong)DUART1_BA + 4); + + bd_t *bd = gd->bd; + char * tmp; /* Temporary char pointer */ + unsigned char *dst; + ulong len = sizeof(fpgadata); + int status; + int index; + int i; + unsigned long cntrl0Reg; + + dst = malloc(CFG_FPGA_MAX_SIZE); + if (gunzip (dst, CFG_FPGA_MAX_SIZE, (uchar *)fpgadata, (int *)&len) != 0) { + printf ("GUNZIP ERROR - must RESET board to recover\n"); + do_reset (NULL, 0, 0, NULL); + } + + status = fpga_boot(dst, len); + if (status != 0) { + printf("\nFPGA: Booting failed "); + switch (status) { + case ERROR_FPGA_PRG_INIT_LOW: + printf("(Timeout: INIT not low after asserting PROGRAM*)\n "); + break; + case ERROR_FPGA_PRG_INIT_HIGH: + printf("(Timeout: INIT not high after deasserting PROGRAM*)\n "); + break; + case ERROR_FPGA_PRG_DONE: + printf("(Timeout: DONE not high after programming FPGA)\n "); + break; + } + + /* display infos on fpgaimage */ + index = 15; + for (i=0; i<4; i++) { + len = dst[index]; + printf("FPGA: %s\n", &(dst[index+1])); + index += len+3; + } + putc ('\n'); + /* delayed reboot */ + for (i=20; i>0; i--) { + printf("Rebooting in %2d seconds \r",i); + for (index=0;index<1000;index++) + udelay(1000); + } + putc ('\n'); + do_reset(NULL, 0, 0, NULL); + } + + puts("FPGA: "); + + /* display infos on fpgaimage */ + index = 15; + for (i=0; i<4; i++) { + len = dst[index]; + printf("%s ", &(dst[index+1])); + index += len+3; + } + putc ('\n'); + + free(dst); + + /* + * Reset FPGA via FPGA_DATA pin + */ + SET_FPGA(FPGA_PRG | FPGA_CLK); + udelay(1000); /* wait 1ms */ + SET_FPGA(FPGA_PRG | FPGA_CLK | FPGA_DATA); + udelay(1000); /* wait 1ms */ + +#endif + +#if 0 + /* + * Enable power on PS/2 interface + */ + *fpga_mode |= CFG_FPGA_CTRL_PS2_RESET; + + /* + * Enable interrupts in exar duart mcr[3] + */ + *duart0_mcr = 0x08; + *duart1_mcr = 0x08; +#endif +#endif + + return (0); +} + + +/* + * Check Board Identity: + */ + +int checkboard (void) +{ + unsigned char str[64]; + int i = getenv_r ("serial#", str, sizeof(str)); + + puts ("Board: "); + + if (i == -1) { + puts ("### No HW ID - assuming PPChameleonEVB"); + } else { + puts(str); + } + + putc ('\n'); + + return 0; +} + +/* ------------------------------------------------------------------------- */ + +long int initdram (int board_type) +{ + unsigned long val; + + mtdcr(memcfga, mem_mb0cf); + val = mfdcr(memcfgd); + +#if 0 /* test-only */ + for (;;) { + NAND_DISABLE_CE(1); + udelay(100); + NAND_ENABLE_CE(1); + udelay(100); + } +#endif +#if 0 + printf("\nmb0cf=%x\n", val); /* test-only */ + printf("strap=%x\n", mfdcr(strap)); /* test-only */ +#endif + + return (4*1024*1024 << ((val & 0x000e0000) >> 17)); +} + +/* ------------------------------------------------------------------------- */ + +int testdram (void) +{ + /* TODO: XXX XXX XXX */ + printf ("test: 16 MB - ok\n"); + + return (0); +} + +/* ------------------------------------------------------------------------- */ + +#if (CONFIG_COMMANDS & CFG_CMD_NAND) +extern void +nand_probe(ulong physadr); + +void +nand_init(void) +{ + printf("Probing at 0x%.8x\n", CFG_NAND0_BASE); + nand_probe(CFG_NAND0_BASE); + printf("Probing at 0x%.8x\n", CFG_NAND1_BASE); + nand_probe(CFG_NAND1_BASE); +} +#endif diff --git a/board/dave/PPChameleonEVB/config.mk b/board/dave/PPChameleonEVB/config.mk new file mode 100644 index 0000000..1bdf5e4 --- /dev/null +++ b/board/dave/PPChameleonEVB/config.mk @@ -0,0 +1,24 @@ +# +# (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 +# + +TEXT_BASE = 0xFFFC0000 diff --git a/board/dave/PPChameleonEVB/flash.c b/board/dave/PPChameleonEVB/flash.c new file mode 100644 index 0000000..110e021 --- /dev/null +++ b/board/dave/PPChameleonEVB/flash.c @@ -0,0 +1,105 @@ +/* + * (C) Copyright 2001 + * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com + * + * 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 <common.h> +#include <ppc4xx.h> +#include <asm/processor.h> + +/* + * include common flash code (for esd boards) + */ +#include "../common/flash.c" + +/*----------------------------------------------------------------------- + * Functions + */ +static ulong flash_get_size (vu_long * addr, flash_info_t * info); +static void flash_get_offsets (ulong base, flash_info_t * info); + +/*----------------------------------------------------------------------- + */ + +unsigned long flash_init (void) +{ +#ifdef __DEBUG_START_FROM_SRAM__ + return CFG_DUMMY_FLASH_SIZE; +#else + unsigned long size_b0; + int i; + uint pbcr; + unsigned long base_b0; + int size_val = 0; + + /* 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 */ + + 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); + } + + /* Setup offsets */ + flash_get_offsets (-size_b0, &flash_info[0]); + + /* Re-do sizing to get full correct info */ + mtdcr(ebccfga, pb0cr); + pbcr = mfdcr(ebccfgd); + mtdcr(ebccfga, pb0cr); + base_b0 = -size_b0; + switch (size_b0) { + case 1 << 20: + size_val = 0; + break; + case 2 << 20: + size_val = 1; + break; + case 4 << 20: + size_val = 2; + break; + case 8 << 20: + size_val = 3; + break; + case 16 << 20: + size_val = 4; + break; + } + pbcr = (pbcr & 0x0001ffff) | base_b0 | (size_val << 17); + mtdcr(ebccfgd, pbcr); + + /* Monitor protection ON by default */ + (void)flash_protect(FLAG_PROTECT_SET, + -CFG_MONITOR_LEN, + 0xffffffff, + &flash_info[0]); + + flash_info[0].size = size_b0; + + return (size_b0); +#endif +} diff --git a/board/dave/PPChameleonEVB/fpgadata.c b/board/dave/PPChameleonEVB/fpgadata.c new file mode 100644 index 0000000..f5e30dd --- /dev/null +++ b/board/dave/PPChameleonEVB/fpgadata.c @@ -0,0 +1,1139 @@ + 0x1f,0x8b,0x08,0x08,0x80,0xb0,0xc0,0x3e,0x00,0x03,0x61,0x73,0x68,0x34,0x30,0x35, + 0x5f,0x31,0x5f,0x30,0x30,0x2e,0x62,0x69,0x74,0x00,0x94,0x9b,0x7f,0x70,0x14,0x65, + 0x9a,0xc7,0x9f,0xe9,0xee,0x24,0x9d,0x99,0x4e,0xa6,0x0d,0x84,0x42,0xe5,0x47,0xe7, + 0xc7,0xba,0xa3,0x37,0x0c,0x63,0x82,0x9a,0x05,0x32,0x69,0x03,0x7f,0xe4,0x84,0x2d, + 0xd9,0xbd,0xba,0xaa,0xdb,0x5a,0x6b,0x1d,0x5d,0xbc,0xe2,0xb6,0xd0,0xca,0xea,0x55, + 0x1d,0x67,0x6d,0xdd,0xbd,0x24,0x39,0x08,0x07,0x2b,0x01,0xb9,0x23,0xee,0x51,0x5c, + 0xf3,0x63,0xcb,0xa8,0xa9,0xad,0x11,0x76,0x0d,0x0a,0xa5,0x4d,0x2e,0x8b,0x21,0x44, + 0xc8,0xb1,0xd6,0x6e,0x44,0x97,0x1d,0x34,0xab,0x23,0x72,0x18,0xd1,0x92,0x44,0x20, + 0xb9,0xf7,0xed,0xee,0xf7,0xed,0x9f,0x33,0xc9,0x8e,0x7f,0xf8,0xe4,0x9d,0xd7,0xf6, + 0x7d,0x9e,0x79,0xfb,0x79,0x3e,0xfd,0x7d,0xde,0x86,0xd2,0xe8,0xb8,0xf9,0x0f,0x40, + 0xe8,0x31,0x90,0x1f,0x7b,0x66,0xc3,0xb2,0xe4,0x7d,0x8f,0xde,0xfb,0x68,0x32,0x99, + 0x78,0xea,0xc7,0xeb,0xe1,0x71,0x88,0xd4,0x3d,0x73,0x5f,0xf2,0x89,0x7f,0xfc,0xe9, + 0xbd,0xcb,0x96,0xc1,0x8f,0xf1,0x5f,0xc9,0x64,0xfd,0xd2,0xe4,0x7d,0x4b,0xef,0xad, + 0x87,0xf5,0x50,0x7a,0x6f,0x72,0xf9,0xb2,0x65,0xcb,0x97,0x35,0xc0,0x13,0x10,0xaa, + 0x3f,0x3c,0x8d,0x3f,0x2f,0xbf,0xf0,0xb7,0x7f,0x9f,0x04,0x14,0x02,0x80,0x92,0x64, + 0x28,0x4d,0xfe,0x1d,0x49,0x86,0x94,0x10,0xa0,0xa6,0x25,0x49,0xd0,0xc9,0xdf,0x60, + 0x7d,0x5f,0x9a,0x04,0xc5,0xf9,0x77,0x28,0x09,0x2a,0xac,0x03,0x75,0x07,0x54,0x24, + 0x61,0xe6,0x8f,0x2a,0x20,0x6a,0xfe,0x85,0xf3,0xa7,0x87,0x50,0xde,0x59,0xf6,0xa7, + 0xe9,0x9a,0x46,0x4d,0x6e,0x16,0xd7,0x0f,0xa9,0xc0,0xae,0x7f,0x61,0x56,0xd7,0xff, + 0x9a,0x5e,0xff,0x2f,0x9d,0x0f,0x15,0xb3,0x98,0x0e,0x20,0xb0,0xf5,0x58,0xf3,0x11, + 0xc4,0x20,0x0c,0x1c,0x02,0x0d,0x14,0x6c,0x78,0xaf,0x3f,0x40,0xad,0x93,0x45,0x53, + 0x70,0x03,0x35,0x65,0xa3,0xa3,0xfc,0x3c,0x38,0x87,0x9a,0x40,0x9a,0xe0,0x53,0x30, + 0x4d,0x46,0x8e,0xf1,0x57,0x4d,0x63,0x82,0x1f,0x87,0x56,0x6b,0x7e,0xff,0xfc,0x5f, + 0xc1,0x71,0x94,0xc8,0x46,0xba,0x9a,0x13,0xdc,0x76,0x94,0x80,0xb2,0x4c,0x38,0x61, + 0x8e,0x1c,0xe3,0xae,0x52,0x23,0x2b,0xd0,0x28,0x0e,0x0a,0x3b,0xe0,0x28,0xc4,0xf5, + 0x88,0x1c,0xae,0x85,0x76,0x88,0x83,0x98,0xe4,0x24,0x73,0x24,0xc9,0x0d,0x53,0xa3, + 0x1f,0x2f,0xd2,0xfc,0xe8,0xd0,0x0b,0xc7,0x21,0xa1,0x47,0xba,0xfb,0x13,0xb0,0x1d, + 0x12,0x70,0x7b,0x92,0x8b,0x9b,0x23,0x19,0xee,0x0a,0x35,0xc6,0x05,0xba,0x9e,0xef, + 0x55,0x5e,0x81,0x1b,0x90,0xd2,0xa3,0xfb,0xf8,0xa5,0xca,0x19,0x58,0x19,0x93,0x32, + 0x35,0x71,0x73,0x24,0xc3,0x5f,0xa1,0xc6,0xc8,0x6a,0x3a,0x5f,0x0b,0x9d,0x80,0x69, + 0x68,0xd2,0xa3,0x23,0xfc,0x4d,0x62,0x24,0xa3,0xe3,0xa6,0xa1,0x3b,0x8d,0x1c,0xa4, + 0xe9,0x7a,0xe4,0x5e,0x7a,0xfd,0x8d,0xf0,0x19,0xa4,0xa0,0xdc,0x71,0x59,0x66,0x8c, + 0x0b,0x74,0xfd,0xa3,0x45,0x71,0xd9,0x5c,0xff,0x3d,0x12,0xbc,0x8f,0xd7,0xdf,0xf9, + 0x1b,0x7b,0xd9,0xcc,0xb8,0x86,0x77,0xbf,0x75,0x7d,0x61,0xad,0x19,0x04,0xc4,0x7d, + 0xb7,0xe3,0x10,0x17,0xd7,0xee,0x74,0x84,0x85,0x19,0x13,0xf8,0x5e,0x31,0x3f,0xe3, + 0xf0,0x23,0xe8,0x43,0x4b,0xb2,0x91,0x1f,0x84,0x53,0xf2,0x5e,0xb4,0xf4,0xc3,0xd2, + 0x4d,0xdc,0x45,0x73,0x04,0x1b,0xc8,0x32,0x46,0xd9,0xf5,0x5b,0xc4,0xb5,0xf0,0x25, + 0x5a,0xa9,0x47,0x77,0xf1,0x6b,0x95,0x8f,0x60,0x25,0x8a,0x26,0xf9,0x61,0xf8,0x12, + 0xf0,0x48,0x03,0x7f,0x16,0x61,0x23,0x8b,0x47,0xce,0x73,0x74,0x3f,0xa8,0x0b,0x7b, + 0xcd,0x20,0x7c,0x61,0x44,0xa3,0x51,0x2f,0x67,0x61,0xf9,0x82,0xbf,0xa2,0x5a,0xf1, + 0x19,0x29,0xa6,0xf1,0x11,0x8b,0x7a,0xa5,0x1b,0x02,0x0e,0x02,0x8a,0xc4,0xe1,0x0c, + 0x8e,0x8f,0xe4,0x89,0xcf,0xca,0x2c,0x1e,0x19,0x62,0xbf,0xef,0xe0,0xed,0xfb,0xa0, + 0x0f,0x96,0xe8,0x91,0x75,0xdc,0x02,0xd8,0x8a,0x0d,0xb1,0x95,0xfb,0xc0,0x1c,0xa1, + 0x06,0x1e,0xb9,0xc6,0xe2,0xa9,0xc0,0x7e,0xa1,0x0f,0x3d,0x99,0x8d,0xfc,0x1d,0xb7, + 0xbc,0x7a,0x2b,0x8a,0x6b,0x2e,0x7f,0x0d,0x43,0xdc,0xc4,0xe9,0xec,0xfa,0x1b,0xe8, + 0x7e,0xcb,0xe0,0x6d,0xd6,0x0e,0x92,0x7e,0xb7,0x2f,0x9e,0x78,0x07,0x9e,0x67,0xd7, + 0xcf,0x56,0xe6,0xe0,0x1b,0x48,0xa1,0x68,0x96,0x5f,0x21,0x0c,0x71,0x4d,0x07,0xcb, + 0x34,0xde,0x1a,0x31,0x0c,0x21,0x85,0xff,0x9f,0xfc,0x84,0x40,0xfd,0x6d,0x09,0x69, + 0xa1,0x09,0xec,0x66,0x14,0xf1,0x97,0x14,0x6c,0xc8,0xe5,0x88,0xcf,0x82,0x35,0xc2, + 0x8c,0xf3,0x40,0xf7,0xbf,0x28,0x1f,0x86,0x49,0x48,0xa9,0xd1,0x2e,0xfe,0x09,0x38, + 0x0d,0x2b,0x55,0xa9,0x8b,0xaf,0xa5,0x23,0x63,0xd4,0xe8,0x67,0xf7,0x0b,0x12,0xd6, + 0xc3,0xeb,0x90,0x50,0x23,0xbb,0xda,0x8a,0xdb,0x4a,0x21,0xb1,0x21,0xb6,0x8f,0xab, + 0x35,0x47,0xba,0xb8,0x31,0x6a,0x64,0x41,0xb6,0xe6,0x37,0x14,0xb1,0x6f,0xd7,0xc3, + 0x36,0x48,0xb4,0x88,0xf3,0x9c,0xf3,0x6f,0x37,0x8d,0x53,0x6c,0x3f,0xc4,0xe6,0x0a, + 0xf0,0x2a,0xc4,0xd5,0x88,0xcc,0x09,0xe2,0x66,0x88,0x3f,0x34,0x1f,0x1b,0x74,0x64, + 0x80,0x1a,0xfd,0x21,0xba,0x1f,0x36,0x95,0xa5,0xa9,0x53,0x69,0x18,0x84,0x94,0x28, + 0xa1,0x88,0xe2,0xf3,0xf7,0x22,0x4f,0xf7,0x67,0x77,0xa5,0xe9,0xd4,0xc3,0x4f,0xb7, + 0x7f,0x80,0x8d,0xa6,0x87,0xa2,0xbb,0xdb,0xc7,0x7c,0xfe,0x7e,0x5c,0x4c,0xef,0xc7, + 0xf9,0x45,0xd6,0xe0,0x3a,0x7e,0x0f,0x8e,0x4f,0x53,0x4b,0xf9,0x3a,0xde,0x35,0xbf, + 0x89,0x18,0xa7,0x58,0xfe,0x69,0x98,0x9f,0x85,0x63,0xf8,0xb6,0x8a,0xb4,0xb5,0x29, + 0x30,0x2a,0x24,0xe6,0x85,0xdb,0x38,0x6b,0x04,0xd9,0xc6,0x59,0x16,0xcf,0x16,0xe8, + 0x30,0x9d,0xda,0x1d,0xee,0x80,0xcd,0x5c,0x62,0x30,0x2c,0xb7,0x61,0x37,0x05,0xe2, + 0x66,0x05,0xf3,0xf7,0x7c,0x88,0x5e,0xbf,0x5b,0x38,0x6c,0x46,0x6f,0x37,0x0e,0xe3, + 0x0b,0xd8,0x08,0x3b,0xc2,0xce,0x8c,0x8f,0xd9,0x7e,0xd0,0x0c,0x7f,0x13,0x6a,0x74, + 0x01,0xdf,0x81,0xd7,0x9f,0x4a,0x97,0x77,0xf1,0x7e,0x7f,0x73,0x2c,0x5f,0x0d,0x86, + 0xac,0xfd,0xd0,0xcd,0x8f,0x55,0x63,0x63,0xc3,0xd2,0xa0,0xf9,0xdf,0xb0,0xfc,0x23, + 0xca,0x1a,0x09,0x3b,0x44,0xb7,0xf0,0x9a,0x38,0x28,0x18,0xd1,0xd6,0x7c,0xf1,0x1f, + 0x62,0xfb,0x39,0x56,0x14,0x83,0x37,0x20,0x81,0x22,0x63,0xdc,0xeb,0xf0,0x32,0x2c, + 0xe9,0xe2,0x3f,0xe4,0x62,0x22,0x19,0xd9,0xae,0x71,0x39,0xf3,0x2b,0x8d,0x1b,0xb2, + 0xf7,0x83,0xb0,0x56,0xa8,0x11,0xf0,0xdd,0x51,0xcb,0x89,0xd0,0x2e,0xc4,0xcf,0xe3, + 0xdb,0x64,0x87,0xeb,0x7e,0x39,0x89,0x8d,0x21,0xb6,0xdf,0x90,0xfc,0x88,0x79,0xb7, + 0x66,0xe7,0x65,0x62,0x2f,0xc2,0x12,0x15,0xdf,0x86,0x0b,0xd8,0xfd,0x2b,0x3f,0xc0, + 0x19,0x46,0x8e,0xcd,0xef,0xec,0xfc,0x11,0x7c,0x82,0x1a,0xb3,0xd1,0x0d,0xdf,0xae, + 0x80,0xb7,0xdb,0x1a,0xb5,0xe8,0x06,0x7e,0x3f,0x5c,0x47,0x0b,0xb3,0xd1,0x4d,0xfc, + 0x45,0xf8,0xa7,0x8e,0x46,0x62,0x5c,0xae,0xa6,0xf3,0xc5,0x4a,0x9c,0x6f,0x43,0x38, + 0x7b,0x68,0xd8,0xbb,0x1b,0xf0,0x2f,0x10,0xfd,0xb5,0x37,0xdf,0x2e,0xce,0xf0,0xfd, + 0x6d,0x34,0x3e,0x20,0xbc,0xa9,0x4e,0xa3,0xd4,0x58,0x34,0x17,0x99,0x07,0x67,0x3a, + 0x9a,0xc6,0xe2,0x37,0xad,0xfa,0xb5,0x73,0x82,0x9f,0x82,0xe9,0xb6,0xa6,0x4b,0xb8, + 0x7e,0xe9,0x1a,0x8d,0xff,0xcb,0xf3,0xf7,0xc1,0x75,0x58,0x92,0x8b,0xa4,0x39,0xb9, + 0x65,0x6b,0xe6,0xdb,0xab,0xc5,0x71,0x7b,0xfd,0x17,0xd5,0xbe,0x8a,0x38,0x31,0x2e, + 0xb3,0xdf,0x17,0x60,0x5f,0x08,0x7f,0x3b,0x78,0x67,0x2b,0xd7,0x4a,0xf2,0xd5,0x40, + 0x77,0xda,0xe1,0xaf,0x68,0x19,0x76,0xfe,0x51,0x84,0x1d,0xa5,0x35,0x46,0xf4,0xda, + 0x1e,0x44,0x3c,0xd4,0x7e,0x3f,0x46,0x12,0xd1,0xd1,0xd0,0x46,0x23,0x9e,0x45,0x56, + 0x60,0x07,0xd9,0xfe,0xec,0xa9,0x24,0x45,0x01,0x7b,0x27,0xf2,0x0f,0x92,0xfc,0x99, + 0x5e,0x90,0xf9,0x2b,0x7f,0xfd,0xb2,0xd7,0x83,0x42,0xbd,0x82,0x31,0x78,0x60,0xce, + 0x21,0x6c,0x2c,0x4a,0x47,0x83,0xea,0x51,0x96,0xdd,0x2f,0x55,0xb2,0x55,0xef,0xb2, + 0x7c,0x12,0xce,0xe1,0x7c,0x2e,0x65,0xf9,0x95,0xac,0xde,0x85,0x2c,0x43,0x5f,0x4d, + 0xd7,0x7f,0x40,0xd8,0x68,0x16,0x29,0x8d,0xab,0x41,0xaf,0x40,0xe2,0xf1,0x58,0x26, + 0xec,0xaf,0xbf,0xd9,0x07,0xd9,0x7e,0x28,0x8a,0xc3,0x2b,0x64,0xb0,0x93,0xab,0x26, + 0xf5,0x3a,0x1b,0xeb,0x36,0xea,0xf5,0x3d,0xee,0xf9,0x6c,0xbf,0x89,0x73,0x25,0x78, + 0x5e,0x8e,0x0f,0x46,0xb4,0x62,0x80,0x43,0x62,0x5c,0x15,0x65,0x9b,0x07,0xde,0xd1, + 0x28,0x0f,0xb0,0xfc,0x03,0x65,0x1b,0x43,0xb8,0xec,0x0e,0x62,0xa7,0x14,0x38,0xa3, + 0xa4,0xc8,0xfa,0x49,0x7c,0x96,0xeb,0xe7,0x7e,0xc3,0xff,0x1f,0xc2,0xa1,0x7b,0x17, + 0x7f,0xa5,0xb3,0xfc,0x73,0xb0,0xf2,0xa6,0x3c,0xad,0x34,0x0d,0x44,0x5a,0x31,0xb4, + 0x4c,0x93,0xec,0xc1,0xea,0xd7,0x35,0x1c,0x1f,0x5a,0xdf,0x59,0xfe,0xd1,0xcb,0x18, + 0xe4,0x5c,0x80,0x3f,0x75,0x19,0x06,0xde,0x36,0x28,0x75,0xe9,0x39,0xcb,0x70,0xf3, + 0x0f,0x02,0x06,0x39,0x39,0x91,0xf8,0xeb,0xc4,0x9e,0x00,0xfe,0x11,0x8b,0x58,0xf5, + 0xc9,0xc1,0xf3,0x8a,0xbb,0xac,0xb3,0xfb,0xab,0x9f,0xe5,0x1f,0xfd,0xb6,0x5e,0x1a, + 0xb4,0xcb,0x24,0x9e,0xae,0x30,0x3a,0xf8,0x87,0xed,0xcf,0xb9,0xbd,0xf4,0x47,0x1f, + 0xc2,0xbc,0xe1,0xd8,0x06,0x4e,0x50,0xd1,0x59,0x7e,0xb8,0x04,0x27,0x68,0x10,0x26, + 0xb8,0x69,0x58,0xaa,0x07,0xf2,0xcf,0x84,0x4a,0xe7,0x33,0xfe,0xc9,0xe0,0x6a,0xf8, + 0xbe,0x67,0x9b,0x05,0xf0,0xcf,0xa0,0xc0,0x76,0x4b,0x4e,0x7c,0xdf,0xbf,0x7e,0xce, + 0xe2,0x1f,0xfa,0xf9,0xb0,0x68,0x2d,0x8d,0x86,0x0e,0xcf,0x43,0x40,0x7c,0xdc,0xfc, + 0xf3,0x58,0x68,0x11,0xad,0xfe,0xdf,0xc0,0x5e,0xc3,0x28,0x36,0x30,0x20,0x17,0x71, + 0x80,0x81,0x83,0x7f,0xa0,0x1c,0xbe,0xcc,0x18,0x90,0x73,0x12,0x7e,0x47,0x40,0xc8, + 0xe2,0x9f,0x1c,0x35,0x3c,0xfc,0x53,0x69,0xc7,0x07,0xa6,0x65,0x16,0x96,0xd4,0x00, + 0x21,0x22,0xcc,0x3f,0x29,0x02,0x42,0x36,0xff,0xf4,0x54,0x9e,0xc5,0xb7,0xad,0x01, + 0x39,0xd9,0xfc,0xf1,0xb9,0x6c,0xe7,0xff,0xdb,0xf6,0xc1,0xdb,0x26,0xe4,0x8c,0x1a, + 0xfc,0x13,0xf1,0xf1,0x4f,0x84,0xf0,0x0f,0xbd,0xbe,0x0e,0xfb,0x61,0xab,0x09,0x39, + 0xd7,0x2c,0x7f,0xbd,0xfc,0x83,0x8d,0x71,0x96,0x7f,0x5a,0x30,0x4f,0xb6,0x9b,0x90, + 0x33,0x8c,0xb6,0xdb,0x61,0x94,0x5c,0xf1,0xb4,0xf9,0x24,0x57,0xd4,0x53,0x31,0x04, + 0x06,0xe4,0xbc,0x07,0x17,0x38,0x8a,0x3d,0xe0,0x36,0xec,0x7a,0xd4,0xa2,0x66,0x21, + 0xe7,0xa9,0x3e,0xd4,0x28,0x09,0xe2,0x1f,0x30,0x8b,0x5a,0x84,0x54,0xb7,0xd3,0x70, + 0xbf,0xb3,0xcc,0xd5,0x5b,0xa8,0xd0,0x35,0xa7,0x1f,0x7c,0xfc,0x43,0xaa,0xed,0x4b, + 0x50,0xed,0x2c,0xbb,0x15,0x36,0xff,0xc8,0x34,0xff,0xcc,0x9f,0x6b,0xd3,0x0e,0xb7, + 0x0d,0xee,0x72,0x95,0x69,0x66,0x9c,0x12,0xe8,0xef,0x2b,0x0a,0x8c,0x76,0xc6,0x60, + 0x33,0xfe,0xbd,0x9d,0xd8,0x63,0xf3,0x0f,0xdb,0x9f,0xc7,0x44,0xca,0x3f,0xf5,0x59, + 0x5c,0x88,0xef,0x77,0x3b,0x2e,0x5a,0xc6,0x59,0x8e,0xae,0xa7,0xbb,0x8c,0xf1,0xde, + 0xbb,0xda,0x64,0xcc,0x5d,0xd6,0x03,0xf8,0xa7,0xbb,0xe8,0x2b,0x0a,0x39,0x7f,0xe6, + 0x4e,0xc3,0x11,0xf7,0x7c,0x71,0x92,0x4b,0x79,0xf8,0x07,0x1c,0xb4,0xd3,0x09,0x07, + 0x61,0x0d,0x2a,0xc8,0x3f,0x62,0xe5,0x80,0xf0,0x2a,0x47,0xfd,0x8d,0x29,0x5e,0x7f, + 0x43,0x16,0xef,0x31,0x1e,0xab,0x3c,0xcc,0xa2,0xa7,0x6c,0x73,0xc6,0xbf,0xd4,0x15, + 0x4f,0xba,0x1f,0x0e,0x56,0x92,0x41,0xb2,0xc8,0x92,0xdf,0xc2,0x49,0xa8,0x0b,0xf6, + 0x37,0xd7,0x41,0xaf,0xdf,0x03,0x34,0x3e,0x35,0xfe,0x69,0xcc,0xb8,0x8c,0xe8,0xfd, + 0x1b,0x93,0x4d,0xda,0x91,0x30,0x6f,0xc3,0x44,0x28,0x05,0x3b,0x83,0x78,0x7b,0xa8, + 0x83,0xee,0x7f,0x45,0x30,0xf9,0x27,0x46,0x68,0xe7,0x4d,0x93,0x76,0x30,0xf6,0x70, + 0xa6,0x31,0xdf,0xe2,0x9f,0x41,0x9b,0x7f,0xac,0xfc,0x23,0x06,0xa5,0x1d,0x66,0x0c, + 0xb1,0xfc,0x53,0x15,0x32,0xaa,0x7f,0x56,0x6c,0xad,0xc0,0x77,0x6b,0x32,0xcf,0xfd, + 0x3b,0xa8,0xb2,0xeb,0xc3,0x22,0x4c,0x3b,0x8d,0x59,0x89,0xd0,0xce,0x75,0xad,0xd1, + 0xc4,0x1e,0x32,0xe2,0x34,0x86,0x58,0xfe,0x31,0xf8,0x87,0x3c,0x9d,0xe1,0xec,0xa1, + 0x98,0xd9,0x23,0xe4,0xcf,0x27,0xfd,0x2c,0xff,0xa8,0x95,0x53,0xaa,0x55,0xbf,0xa6, + 0xd2,0xe7,0xd0,0x0a,0x5a,0xbf,0xf0,0xc8,0xeb,0xf8,0xf9,0xfd,0x86,0xf9,0xd5,0x08, + 0xdb,0x3f,0x3d,0x38,0xff,0x18,0x4e,0xb5,0x72,0x37,0xe1,0x77,0x98,0x67,0xec,0x65, + 0xb3,0x7c,0xe2,0xe4,0x9f,0x17,0x60,0x1f,0x85,0x9c,0x0f,0x42,0xee,0x7c,0xf5,0xb4, + 0xc1,0x3f,0x4f,0x9e,0xc4,0x23,0x59,0x96,0x7f,0xd2,0x02,0x0b,0xda,0x39,0x35,0x6f, + 0x3e,0x1f,0x65,0xfb,0xb3,0xa1,0xa8,0x57,0xb4,0x9c,0xba,0xa5,0x9e,0x83,0x67,0x83, + 0xf3,0xe7,0x90,0x60,0xd7,0x5f,0x3a,0xb8,0xca,0x8f,0x85,0x0e,0xfe,0xa1,0xeb,0xd9, + 0x0c,0x8e,0xea,0xf6,0x27,0x77,0x99,0xab,0x71,0xf0,0x0f,0x5d,0xcf,0x49,0xca,0x3f, + 0x99,0xea,0x2b,0x26,0xd8,0x04,0xd6,0x5f,0x9b,0x7f,0x2a,0xe9,0x7c,0x8c,0xcd,0x79, + 0xeb,0xb5,0x83,0x7f,0x84,0x32,0x38,0x2a,0x5b,0xd1,0x38,0x84,0x0d,0xfa,0xbc,0x3f, + 0x82,0x89,0x71,0x58,0x39,0xaa,0xc4,0x47,0xd7,0x38,0xf9,0x47,0x2f,0x7d,0x92,0xc4, + 0x67,0x00,0x3b,0x75,0xc2,0x55,0x5f,0x46,0x0c,0x03,0xf3,0xcf,0x05,0x17,0xff,0x68, + 0x0b,0xb1,0x77,0x4a,0xd3,0xa0,0xe9,0xa6,0xd2,0xe4,0xad,0xef,0x6a,0xca,0xc3,0x3f, + 0x45,0x53,0x94,0x7f,0xbe,0x16,0xc7,0xd1,0x7d,0x9a,0x34,0x42,0xf5,0x1f,0x22,0x04, + 0x9d,0xf3,0xea,0x3f,0xba,0x6c,0x41,0x4e,0x92,0xfb,0x18,0x3a,0x95,0x7b,0x50,0x67, + 0xb6,0x22,0x4e,0xb1,0xe7,0x57,0xb0,0xdd,0xa7,0xff,0xd8,0xfc,0x33,0x86,0x93,0xe9, + 0x5d,0xa8,0x34,0x79,0x87,0xe4,0x7c,0x42,0xf7,0xea,0x3f,0x95,0x8c,0x7f,0x3e,0x81, + 0x4e,0x54,0xad,0x95,0xf6,0xd8,0xfc,0xd9,0x4b,0x23,0x6c,0xeb,0x3f,0x3a,0xd5,0x7f, + 0x32,0x7f,0x73,0x0e,0xc6,0xf5,0xfb,0xb3,0x65,0xdd,0xed,0x8c,0x9f,0x0d,0x45,0x22, + 0x8f,0xfe,0x33,0xde,0x7c,0x13,0x6f,0x8d,0x26,0x3d,0xe1,0x8c,0x0f,0x97,0x5f,0xff, + 0xc9,0xe0,0xc7,0xf6,0x41,0x75,0xb9,0x26,0xa5,0x22,0x7e,0x3e,0x77,0xf0,0x4f,0xc8, + 0x5c,0x6d,0xf9,0x09,0xfc,0xfc,0xd8,0xa9,0x28,0x7b,0x36,0x1c,0xb3,0xf5,0xab,0x61, + 0xbf,0xfe,0x93,0xa5,0xfc,0xf3,0x00,0x7e,0x0c,0x47,0x10,0x43,0xe2,0x32,0x8e,0x29, + 0x18,0x01,0xfc,0x93,0xc5,0xfc,0xf3,0x00,0xbe,0x49,0xc3,0x9b,0x9e,0x7e,0x40,0xed, + 0x38,0x50,0x73,0xb8,0x65,0x82,0xdb,0x6f,0xdc,0xb6,0x7c,0x20,0xff,0x3c,0x24,0x4a, + 0xa6,0xda,0x93,0xe4,0x05,0xd0,0xb5,0x06,0x41,0xaa,0xe3,0x77,0xd0,0x91,0xb3,0xd4, + 0x70,0xf0,0x4f,0xd9,0x09,0xec,0x94,0x11,0x84,0x77,0xe1,0xa6,0xdc,0x24,0x44,0x5b, + 0xf9,0x9f,0x99,0xb2,0x4f,0xc6,0x0e,0x94,0xcd,0x3f,0x2f,0x17,0x59,0x41,0x38,0x16, + 0x11,0xa0,0x1a,0x8e,0xe8,0xf1,0xd7,0x22,0x09,0x1a,0xf6,0xb3,0xd4,0x70,0xe8,0x3f, + 0xbb,0x8c,0xe7,0x29,0x92,0x46,0xe6,0xc2,0xef,0xa1,0x46,0x17,0xc7,0xdb,0x56,0xc2, + 0x1f,0x68,0x62,0xd9,0x4a,0xf9,0x87,0xce,0x47,0xb0,0x9f,0x3a,0xf5,0x7d,0x65,0xef, + 0xb6,0xaa,0x2a,0x0c,0x42,0x8b,0x0c,0x22,0x32,0xf2,0x95,0x65,0xd8,0xcf,0x5f,0x2d, + 0x73,0x69,0xd0,0x9a,0x57,0xc3,0xee,0x74,0x35,0x32,0xf4,0x46,0x96,0x88,0xac,0xfd, + 0xe6,0xd4,0x7f,0x7a,0x28,0xe4,0xfc,0x40,0xf8,0x7d,0x73,0xfd,0x9e,0x05,0x63,0x7c, + 0x0c,0x86,0x2c,0xfe,0xe1,0x2c,0xc3,0xa1,0xff,0x80,0x55,0x74,0x3a,0xf8,0x03,0x44, + 0xff,0x81,0x47,0x3b,0xda,0x0b,0xeb,0x3f,0x63,0xf0,0x29,0xad,0x6e,0x9f,0xd6,0xd4, + 0xb5,0x0e,0xef,0x5a,0x5e,0x2b,0xce,0x42,0xff,0xd9,0xd3,0x36,0x26,0x6c,0x53,0xaa, + 0x5b,0x36,0xec,0x8b,0xac,0x2f,0xa0,0xff,0xcc,0xa7,0xfa,0x4f,0x77,0xf1,0x98,0xf8, + 0x0a,0xae,0xd7,0x2d,0x72,0xf3,0x61,0x3f,0xff,0x38,0xf2,0x0f,0xe5,0x9f,0xe6,0xe1, + 0xd0,0x36,0x50,0x54,0xb1,0xae,0x6d,0x00,0x76,0xe5,0xd5,0x7f,0x1a,0xca,0xd2,0x98, + 0xf7,0x12,0x10,0x05,0x9e,0x80,0x5f,0x1d,0x48,0x6d,0x35,0x7e,0xfd,0xc1,0xd6,0x7f, + 0x46,0x17,0x5a,0x4e,0xed,0x6e,0xff,0x0a,0x6e,0xc5,0xde,0x7a,0x28,0x7a,0xbe,0x7d, + 0xbd,0x36,0x0b,0xfd,0x67,0x17,0xde,0x6f,0xef,0x40,0xbd,0x2e,0x9d,0x6f,0x67,0xfa, + 0xd8,0x57,0xd4,0xb0,0xf9,0x67,0x93,0x6c,0x41,0x0e,0xe0,0xb2,0x8e,0xef,0x2f,0xf1, + 0x9e,0x2d,0x61,0x05,0x15,0xe0,0x9f,0x22,0xcb,0xa9,0x0a,0xc2,0x3f,0xa2,0xd6,0x2c, + 0xca,0x6d,0x82,0xe2,0xe5,0x3d,0x5b,0xff,0x99,0x7f,0xdb,0x61,0x07,0x4f,0xaa,0xca, + 0xea,0xb0,0xdc,0xec,0xd7,0xdf,0xbc,0xfa,0x8f,0xb5,0xc8,0xd3,0xea,0x91,0xa7,0x03, + 0xf5,0x3d,0x5b,0xff,0xc9,0x51,0xfd,0x27,0xc3,0x8f,0xa1,0x49,0x31,0xd5,0x1c,0xfd, + 0x45,0x41,0xfd,0x87,0xf2,0x0f,0x0e,0xb2,0x82,0xf3,0x4f,0x4a,0x8e,0x13,0x63,0x16, + 0xfa,0xcf,0x2f,0x9b,0xbf,0x03,0x53,0xb0,0x74,0x77,0x4f,0x36,0x1c,0xa3,0xb2,0x4f, + 0x90,0xfe,0x43,0xf3,0x4f,0x03,0x17,0x49,0x6f,0x23,0x20,0xd4,0x10,0xa0,0xcf,0xdb, + 0xfa,0x8f,0x66,0xf0,0xcf,0x93,0x7a,0x64,0x23,0xb7,0x12,0xfa,0xc4,0x25,0x80,0xf3, + 0xd5,0x02,0xdd,0xcb,0x3f,0xb6,0xfe,0xd3,0x23,0x9a,0xfc,0x13,0xfd,0x87,0xc8,0x1d, + 0xf0,0x5b,0xd4,0x78,0x69,0xed,0x86,0x55,0x8b,0x74,0x2f,0xff,0x38,0xf4,0x9f,0x85, + 0x56,0xbe,0x3d,0x18,0xca,0x09,0x37,0x30,0xef,0x2d,0xc5,0x69,0x16,0xe5,0xe7,0x1f, + 0xf8,0xb7,0x29,0xf8,0x57,0x52,0xa4,0x72,0xf8,0xa6,0x7b,0xa7,0xab,0xfe,0x70,0x74, + 0xb2,0x86,0x95,0x2d,0x86,0x46,0xb6,0xfe,0x43,0xf8,0xa7,0x4f,0xc3,0x8b,0x4c,0x57, + 0x8c,0x70,0x3b,0xa1,0x4a,0x5a,0xf3,0x25,0xb7,0x80,0xe6,0x9f,0xb3,0xa8,0x0f,0xbe, + 0x63,0xe8,0x3f,0x2c,0xfe,0x00,0x78,0xbe,0x82,0xbf,0x55,0xb9,0xff,0x85,0x2d,0xa1, + 0xaa,0x93,0x3f,0x54,0xdb,0x1e,0xf1,0x3d,0xb8,0x39,0xf4,0x1f,0x9a,0x7f,0x80,0xd3, + 0xe5,0x36,0x55,0x51,0x7e,0xb8,0x92,0x5b,0xeb,0x7c,0xb0,0x8d,0x79,0xf5,0x1f,0xcb, + 0x5f,0x8d,0xd7,0xb9,0xc1,0x75,0x75,0xe9,0x48,0x27,0xff,0x33,0x23,0x6d,0x2e,0xce, + 0xcc,0x09,0x78,0x7e,0xc4,0xfc,0x63,0xf2,0x92,0x8e,0x79,0xf8,0x1b,0x35,0x25,0x44, + 0xb9,0x39,0xbd,0xbe,0x7a,0x94,0x65,0xeb,0x0f,0xc9,0x56,0xd2,0xce,0xcd,0x19,0x87, + 0x0f,0x60,0x85,0x2e,0xe9,0x0e,0xfd,0x07,0xa6,0x05,0x8f,0xfe,0x83,0x28,0xff,0x74, + 0x54,0x7c,0x04,0xe7,0x1f,0xac,0x56,0xd6,0xfe,0xbc,0x39,0x40,0xff,0x51,0x19,0xff, + 0x90,0x7a,0x47,0x1e,0xea,0x7f,0x59,0xfc,0xa1,0xd2,0x2d,0xc6,0x3a,0xc4,0x0e,0xab, + 0xde,0x85,0xf3,0xf0,0x0f,0xde,0x5d,0xca,0x46,0x23,0x3e,0xf0,0x0b,0x55,0x81,0x6d, + 0x60,0xe6,0x67,0x22,0x83,0x0c,0xa7,0x8f,0xc2,0x46,0x9f,0xfe,0x03,0xc7,0x63,0xa4, + 0xbf,0xc0,0x67,0x85,0x0b,0xea,0x72,0x7d,0x01,0xe2,0x17,0x30,0x7f,0xe9,0xc6,0xd0, + 0x4b,0x9c,0xfc,0x43,0xea,0xd7,0xc3,0x3a,0x86,0x96,0x29,0x68,0x82,0x72,0xdd,0x2e, + 0x5b,0x57,0x90,0x5f,0xff,0xb1,0xf9,0x67,0xaa,0x85,0x18,0xe5,0x13,0xfc,0x4d,0x64, + 0xc9,0x3e,0xec,0x2b,0x87,0xfe,0x23,0x7f,0x4c,0x69,0xe7,0x0a,0x3a,0x8e,0xee,0x22, + 0xc6,0xf4,0xec,0xf4,0x9f,0x61,0x44,0x8c,0x30,0x36,0x54,0x5f,0xff,0xcb,0xd6,0x7f, + 0xf0,0xf3,0x97,0x23,0xda,0x77,0xcd,0xa4,0xff,0xa8,0x95,0x57,0x55,0xd7,0xaf,0x1f, + 0xd8,0x9f,0x1a,0x61,0xfb,0x27,0x1b,0x7a,0xcd,0xa7,0xf6,0x04,0xe8,0x3f,0x41,0xfc, + 0xe3,0xbf,0x6c,0x10,0xff,0xe0,0x7a,0xe4,0x5d,0xed,0xcd,0x02,0xfd,0xaf,0x6c,0xd1, + 0xea,0xfc,0x8f,0x5d,0x01,0xfc,0x93,0x0e,0xcd,0xf3,0xa9,0x1f,0x7e,0xc3,0xd9,0xff, + 0x12,0x28,0xe4,0x0c,0xbb,0x8c,0x6c,0x34,0x59,0x33,0x1c,0xc0,0x3f,0x0b,0x7f,0x4d, + 0xd4,0x1e,0xbd,0x04,0xd3,0x8e,0x6a,0x81,0xd0,0x4d,0xd5,0x21,0x04,0x79,0xf8,0xa7, + 0x07,0xd7,0x2f,0x6f,0x34,0xa6,0xf4,0x33,0x5e,0xfd,0x87,0xed,0x9f,0xc1,0xdb,0xf6, + 0xf8,0x9e,0x16,0x87,0x15,0x6f,0x3e,0x71,0xea,0x3f,0xff,0x19,0xe0,0xe6,0x56,0xcf, + 0x88,0x43,0xff,0x99,0x3b,0x10,0x10,0xc6,0x76,0xcf,0xc8,0x79,0xb6,0x3f,0x73,0x36, + 0xff,0xd8,0xb2,0x0f,0xc5,0x1e,0x5b,0xff,0xf1,0xf3,0x4f,0xd0,0x63,0x78,0x1e,0xfe, + 0xb1,0xd5,0x0c,0xcb,0x10,0x26,0x43,0x33,0xf2,0x4f,0x90,0x8c,0x53,0x88,0x7f,0x0a, + 0xce,0x0f,0xe2,0x1f,0x87,0x0c,0xa2,0xe5,0xef,0x7f,0x35,0xd8,0xfd,0x2f,0xdb,0x4d, + 0xe4,0x1d,0x39,0x6b,0xf7,0xbf,0xca,0x28,0xb4,0xcc,0x19,0xd3,0xde,0xcb,0xa7,0x6f, + 0x04,0xf0,0x4f,0x17,0xff,0x67,0xc3,0xd8,0x19,0x34,0xff,0x14,0xbb,0x7f,0x1b,0x64, + 0x06,0x39,0xba,0x85,0x3d,0xcd,0x97,0xd4,0x59,0xf0,0x4f,0x90,0xcc,0xe5,0xf0,0x37, + 0x48,0xff,0x29,0x14,0x4f,0xba,0x1f,0xb4,0xca,0xf5,0xf9,0x65,0x1c,0xd3,0x58,0x8c, + 0xf9,0xc7,0xd6,0x1f,0x42,0x87,0x67,0x9a,0x4f,0xf4,0x9f,0x20,0xfe,0xc9,0x9a,0x8d, + 0x30,0x62,0x8c,0x7a,0xf9,0x87,0xed,0x7f,0xc6,0x3f,0x84,0x76,0xfe,0x1d,0x1b,0x51, + 0x6a,0xcc,0xc0,0x3f,0xc9,0x62,0xc7,0x6d,0xe2,0x15,0x2e,0x86,0x04,0x56,0x5f,0x42, + 0x76,0xb7,0x08,0x59,0xb7,0xed,0x59,0x1f,0x0f,0xe4,0xd8,0xf5,0x09,0xff,0xf4,0x59, + 0xb4,0xa3,0xbc,0x4d,0xb1,0xe7,0x0f,0x5e,0xfe,0xb1,0xf5,0x9f,0x85,0x76,0xbe,0xed, + 0x37,0xf3,0xb9,0x57,0xe8,0x70,0xf3,0x8f,0x59,0xbf,0xc6,0x8c,0x6a,0x75,0xae,0xcd, + 0x90,0x7d,0x58,0xd9,0xba,0xca,0xf8,0xc7,0xa5,0xff,0xf4,0x91,0xfe,0x17,0xd1,0x7f, + 0xb6,0x12,0x10,0x7a,0xd6,0x5e,0xf6,0x45,0x6a,0xb8,0xfa,0x5f,0x76,0xbe,0xda,0xaa, + 0x98,0xb2,0x0f,0x1b,0x41,0xf9,0xf9,0x27,0x28,0xed,0x30,0x23,0x80,0x7f,0x70,0xbe, + 0xe5,0xbc,0x69,0x33,0xa8,0xff,0x05,0x57,0xac,0x7a,0xb7,0x8a,0x14,0xfa,0x44,0xc0, + 0xfc,0x9d,0x84,0x7f,0xe8,0xf5,0x09,0xff,0x9c,0x33,0x92,0xf6,0x1c,0xbb,0xcc,0xc9, + 0xc4,0x58,0x8c,0x0d,0xd1,0xa7,0xff,0x6c,0x16,0xd6,0xba,0x65,0x9f,0x35,0x81,0x7a, + 0x8e,0xcd,0x3f,0x45,0x71,0x26,0xfb,0x08,0xde,0x69,0xd4,0x68,0x76,0xf2,0x4f,0x1c, + 0x0e,0x59,0xd1,0x10,0x8e,0x8a,0x76,0x58,0x06,0x18,0x21,0xac,0xf1,0xf2,0x0f,0x0e, + 0xcb,0x69,0xe3,0xe9,0xdb,0x70,0xf3,0x88,0xa5,0xff,0x44,0xb0,0xbf,0x1a,0xe5,0x1f, + 0x9e,0x4e,0x37,0xf4,0x1f,0xa2,0x17,0x91,0x6a,0x75,0x23,0x44,0x8e,0x6d,0xd4,0x50, + 0xc7,0xed,0x08,0xe4,0x4a,0x02,0xf8,0xe7,0x26,0xd9,0x8d,0x8a,0xe4,0x68,0x7b,0x05, + 0xf5,0xbf,0x64,0x06,0x39,0x53,0xc4,0x50,0x62,0x81,0xfd,0x2f,0x08,0xe2,0x1f,0x62, + 0x00,0x7e,0xbe,0xf0,0xef,0x07,0x27,0xff,0xb8,0x69,0x53,0x15,0x8f,0xcd,0xb6,0xff, + 0x65,0x9c,0x36,0xf1,0x9d,0x3f,0xc9,0xdf,0xff,0x32,0xa2,0x51,0x31,0xfb,0xfe,0xd7, + 0x15,0x74,0x06,0xd5,0xc1,0xda,0x37,0x0a,0xeb,0x3f,0xac,0xff,0x55,0x3d,0xa5,0x6c, + 0x87,0xea,0xe6,0xb2,0x13,0x01,0xe7,0x97,0xec,0xfe,0x57,0xd6,0xee,0x7f,0x9d,0x83, + 0x76,0x01,0x32,0xf8,0x79,0xca,0xff,0xfc,0xe5,0xe4,0x9f,0x45,0x0e,0x0c,0x18,0xa8, + 0x39,0x5c,0x4a,0xf4,0x10,0x1f,0xff,0x08,0x74,0xbf,0xb5,0x88,0xf8,0x6a,0xb4,0xed, + 0xf5,0x3f,0x4a,0xd7,0xe6,0x1d,0xd5,0xbc,0x44,0x8f,0xfd,0xd8,0xfd,0xaf,0x62,0xba, + 0x1e,0x75,0xa1,0x15,0x9f,0x0c,0xff,0x47,0x62,0x9c,0x8c,0xa6,0x03,0xe2,0x33,0xc2, + 0xe2,0xdf,0x53,0x74,0x05,0x3e,0x42,0x75,0x64,0xfe,0x55,0x79,0x0d,0xac,0x44,0xd2, + 0x31,0xa3,0x3f,0x6b,0x74,0xc4,0xd8,0xf9,0x1f,0x27,0xff,0x90,0xfc,0x59,0x45,0x92, + 0xc6,0x1f,0xbb,0xf1,0x63,0x17,0x2a,0x6b,0xb5,0xfa,0xe9,0xec,0x20,0x90,0xe8,0xed, + 0x7f,0xf5,0xa1,0x2a,0xe2,0xd4,0x59,0x78,0x11,0x2d,0x4d,0x8a,0x39,0xcb,0x5f,0xd1, + 0x71,0xfe,0x67,0xdc,0xa3,0xff,0x28,0x38,0x68,0xd5,0xc4,0xd8,0x78,0xf2,0x6e,0x08, + 0x4b,0x6e,0x85,0x5f,0x74,0xf3,0x0f,0x81,0x9c,0x23,0xb8,0x4c,0x94,0xe4,0xe0,0x32, + 0x34,0x6a,0x52,0x96,0x8f,0x19,0xd8,0x13,0xa7,0xfc,0x13,0x77,0xf3,0x8f,0xa3,0x1e, + 0x75,0xab,0x29,0x58,0xdc,0x31,0x6b,0xfe,0x81,0xc9,0x8a,0x94,0x2a,0x75,0xcf,0x19, + 0x93,0x67,0xa1,0xff,0x18,0xd5,0x56,0xc5,0xfb,0xff,0x85,0xfe,0x82,0xfc,0x23,0xd4, + 0xc2,0x4b,0xb4,0x5f,0x43,0xbe,0x15,0x83,0xeb,0x35,0xfd,0x88,0x60,0xf3,0x8f,0x56, + 0x2f,0x24,0x1e,0x8b,0x15,0xee,0x7f,0x35,0x88,0x69,0xd6,0xef,0x43,0x66,0x23,0x66, + 0x95,0xdf,0x5f,0x47,0xff,0x6b,0xa1,0xab,0x9a,0x37,0x91,0x83,0x3d,0x33,0xf1,0xcf, + 0x2d,0x4b,0xed,0x41,0xb7,0xf0,0x7c,0xa9,0xd5,0xd0,0x4f,0x9a,0xf2,0x9d,0xff,0xb1, + 0xf9,0xe7,0x92,0x61,0x7c,0x57,0xab,0x50,0x0a,0xf5,0xbf,0x2c,0xfe,0xd9,0x8e,0xbd, + 0x5b,0xfd,0x2a,0x24,0xd2,0xa2,0xdc,0x1c,0x74,0xde,0x29,0x1f,0xff,0xb4,0x94,0x76, + 0x05,0x9c,0xbf,0xb2,0xfb,0x5f,0xda,0x5c,0x0f,0xcf,0xc4,0x77,0x45,0x0a,0xe9,0x3f, + 0x76,0xff,0x8b,0x7c,0x2b,0xe6,0xed,0x7f,0xd1,0xeb,0xfb,0xf8,0x47,0xda,0x12,0xa4, + 0xff,0xd8,0xfd,0xaf,0x0e,0xcc,0x3f,0x21,0x02,0x39,0x15,0x37,0x76,0x3f,0x27,0x2e, + 0x41,0x3d,0x1b,0xda,0x7a,0x18,0x11,0xc9,0x79,0xfb,0x5f,0xa4,0xff,0x8e,0xda,0x70, + 0x34,0x44,0x25,0x48,0xff,0x51,0x3c,0xfd,0x2f,0x93,0x16,0xb6,0xc0,0x92,0x36,0x71, + 0x9c,0xdb,0x57,0xa8,0xff,0x45,0xf5,0x9f,0x4d,0x7c,0x3f,0xbc,0x4d,0xea,0xcb,0x26, + 0x7e,0x51,0xa1,0xfe,0x97,0xcd,0x3f,0x39,0x92,0x3d,0xd0,0xc3,0x41,0xf9,0xdc,0xd1, + 0xff,0x2a,0xba,0xda,0x72,0x1d,0xd5,0x93,0x22,0xf5,0x06,0x5c,0xc4,0x86,0xf4,0xcf, + 0x76,0xff,0x82,0xd4,0xaf,0x15,0xde,0xfe,0xd7,0x7e,0x5c,0x64,0x0f,0x90,0x45,0x8e, + 0x76,0xec,0x44,0x77,0x6f,0x11,0x9f,0xa9,0x58,0xe0,0x5b,0xbf,0x93,0x37,0x88,0x77, + 0xdf,0x32,0xe6,0x4b,0x27,0xa0,0xaa,0xab,0xb4,0xb5,0xda,0x35,0xff,0x6e,0xdd,0xdd, + 0xff,0x32,0xf2,0x4f,0xad,0x01,0x39,0x70,0x00,0x62,0x9b,0x4b,0x83,0xf4,0x34,0xbb, + 0xff,0x15,0x33,0xfa,0x17,0xaf,0x61,0xa7,0x4a,0x7a,0x8a,0xbe,0x80,0x24,0x2a,0x33, + 0xf3,0x27,0xf3,0x77,0xb9,0xd9,0xff,0xb2,0xd7,0xd3,0x4b,0x07,0x3f,0x85,0xff,0xe2, + 0x52,0x5d,0xe5,0xff,0x11,0x78,0xfe,0xc7,0xc9,0x3f,0xec,0xa1,0xfe,0xd6,0xe1,0x7a, + 0x24,0x8d,0xbb,0xf4,0x9f,0x7c,0xfd,0xaf,0xd2,0x0c,0xf7,0x19,0x1c,0x4f,0x57,0x1f, + 0x09,0x2f,0x0f,0x3a,0x7f,0xeb,0xe2,0x1f,0x6b,0xb0,0x27,0xfd,0x86,0x50,0xad,0x89, + 0xc7,0x02,0xe6,0x7b,0xf4,0x1f,0x1c,0x84,0xd2,0x64,0xf3,0x20,0x1c,0x55,0x0e,0x6e, + 0x7e,0xd6,0x3a,0x0f,0x3c,0x60,0xc6,0x87,0xf7,0x9e,0xff,0x91,0xe2,0xe8,0xc6,0x3a, + 0x6b,0x3f,0x4c,0x40,0x1d,0x92,0x32,0x56,0x7c,0x22,0x8e,0x46,0x98,0x93,0x7f,0x6e, + 0x19,0x4e,0x95,0x8d,0xf3,0xa3,0x30,0xa9,0x36,0x22,0xea,0xe6,0x20,0x35,0x86,0x02, + 0xf8,0x27,0x65,0x62,0xb3,0xd9,0x2d,0x5d,0xe3,0xda,0x3f,0xf5,0xfe,0xfe,0xd7,0x0a, + 0x02,0x39,0x47,0x2c,0xda,0x91,0x8e,0x71,0xae,0xf3,0xcf,0xd5,0xbe,0xfe,0x97,0x70, + 0x34,0x14,0xd7,0xb7,0x3b,0x7e,0x7d,0xd7,0x7e,0x50,0xf2,0xf6,0xbf,0xcc,0xe8,0x89, + 0x19,0x77,0x3c,0xab,0xf3,0xf5,0xbf,0xec,0x5f,0xdf,0xb5,0x7f,0xea,0xf2,0xf5,0xbf, + 0xf2,0xe8,0x3f,0x6f,0xe5,0xed,0x7f,0xcd,0x4a,0xff,0x19,0x2d,0xf2,0xfc,0xfa,0x7c, + 0xd2,0xc9,0x6f,0x47,0xbd,0xfa,0x4f,0xce,0xce,0x3f,0xb3,0xd2,0x7f,0xc6,0x43,0x8b, + 0xcc,0x43,0xce,0xcf,0x92,0xea,0xaf,0x99,0xd8,0x23,0xe4,0xd7,0x7f,0xfe,0x5a,0x2c, + 0x27,0x90,0x33,0x16,0x5d,0x4e,0x68,0x47,0x33,0x8e,0x3d,0x0f,0xfb,0x14,0x21,0xa7, + 0xfe,0x63,0xf4,0xbf,0x06,0x02,0xe2,0x63,0xfa,0xeb,0xd3,0x7f,0xf0,0xa0,0xc9,0x3f, + 0x56,0x34,0x1a,0x78,0x3f,0x1f,0xba,0xfa,0x5f,0xf0,0x16,0xdc,0xe7,0xca,0x36,0xfe, + 0xfc,0xe3,0xea,0x7f,0xc9,0x6f,0x99,0xfc,0xc3,0xbc,0xf3,0xf3,0x9e,0xb7,0xff,0x55, + 0xeb,0xea,0x1e,0xfa,0xf3,0x8f,0xb7,0xff,0x55,0xe7,0x54,0x7b,0x22,0x31,0x9f,0x22, + 0x14,0xd0,0xff,0xb2,0xab,0xcf,0x9c,0xac,0x30,0x2b,0xfe,0xf1,0x97,0xc5,0xc2,0xfc, + 0x53,0x40,0xd8,0xf1,0xe8,0x3f,0xa1,0x84,0xba,0xa6,0xe0,0xfc,0x20,0xfd,0x27,0x1c, + 0x20,0x04,0x15,0xd4,0x7f,0xfc,0x65,0x37,0xa8,0xff,0x55,0xc6,0xfa,0x5f,0x05,0xf4, + 0x0d,0x37,0xff,0x7c,0xea,0xfa,0x76,0x84,0x77,0xf0,0xa1,0x85,0x46,0xa7,0x38,0x67, + 0xff,0x2b,0x67,0x9e,0x7f,0xf6,0x1f,0xfb,0xb1,0xf9,0x07,0x9c,0xfc,0x73,0xc0,0xec, + 0x7f,0x51,0xef,0x2a,0x06,0xe4,0x02,0xfd,0x2f,0xcc,0x3f,0x2f,0xc1,0x53,0x33,0xe8, + 0x3f,0xee,0xfe,0x17,0x5e,0xff,0x83,0x85,0xf5,0x9c,0x80,0xfe,0x97,0x43,0x1d,0x9a, + 0xa9,0xff,0x95,0xef,0xbc,0x59,0xbe,0xfe,0xd7,0x4f,0x0c,0xc8,0x01,0xaa,0xf6,0x30, + 0xc3,0xa9,0xff,0xb0,0xeb,0xb3,0xfc,0x23,0x14,0xc8,0x3f,0xde,0xfe,0x17,0xbe,0x49, + 0x7f,0x5a,0xec,0x3f,0xf6,0x13,0xd4,0xff,0xea,0xf4,0xd0,0xce,0x7f,0x07,0x9d,0xff, + 0xb9,0xac,0xb0,0xfe,0xd7,0xed,0xbd,0xe4,0x35,0x13,0x3d,0x10,0x7b,0x4c,0xa3,0x24, + 0x53,0xd3,0xcf,0xe2,0xcf,0x59,0xcf,0xef,0x8b,0x27,0xf9,0x29,0xf5,0x2d,0xfb,0xfc, + 0xaa,0xd5,0xff,0xba,0x8e,0x8e,0x8c,0x95,0xbb,0xf5,0x9f,0x1d,0x45,0x9f,0xe0,0x45, + 0x6e,0x67,0xab,0x4d,0x52,0xe3,0x59,0xb8,0xb8,0xb9,0x4f,0xab,0x22,0xd2,0xd0,0xe5, + 0x0e,0x7a,0x7d,0x40,0xfb,0xe0,0x45,0xcb,0x3b,0x89,0xb9,0xb9,0x17,0xa8,0x10,0xa4, + 0x54,0x0d,0x86,0xbd,0xfa,0xcf,0xa1,0x42,0xf9,0x5c,0x31,0xf5,0x1f,0x16,0x9f,0x4a, + 0xd3,0x5f,0xd2,0x9d,0x31,0xbc,0x33,0x1c,0xb7,0x0f,0xba,0x84,0x8e,0x90,0x8e,0x86, + 0xab,0xff,0x65,0xce,0x2f,0x58,0x8f,0xdc,0xfd,0xaf,0xcf,0xf3,0xd4,0x3b,0xee,0x84, + 0xcd,0x3f,0x74,0xfd,0xac,0xff,0x15,0x24,0xfb,0xe4,0xd1,0x7f,0xcc,0xc1,0x62,0xf2, + 0x6d,0xf1,0xcc,0xe7,0x7f,0x24,0xeb,0xb4,0x0f,0xd1,0x7f,0xbc,0xf1,0x91,0xb1,0xd1, + 0x7f,0xa7,0x57,0xff,0xb1,0xfd,0x95,0xb1,0xc1,0xce,0xc3,0x1f,0x99,0xd3,0x9b,0xbc, + 0x61,0x1e,0x8d,0x76,0x9d,0xff,0x51,0x4c,0xa7,0xda,0xad,0xf3,0x3f,0xd7,0xda,0x2d, + 0x7f,0x5f,0x25,0xff,0xa1,0x1a,0xd0,0xff,0xfa,0xdc,0xda,0x2d,0xf2,0x34,0x79,0xff, + 0x6b,0xd4,0xde,0x3f,0x6f,0x06,0xf5,0xbf,0xae,0xc2,0x67,0x36,0xed,0x2c,0xcd,0xb6, + 0x74,0xcf,0xf6,0xfc,0xb3,0x61,0x28,0xf3,0xe5,0x19,0xf4,0x1f,0x37,0xff,0x20,0xb1, + 0x7b,0x86,0xfe,0x97,0xfb,0xd7,0xaf,0x8d,0xed,0x69,0x67,0x23,0x0c,0x5d,0x9c,0xfd, + 0xaf,0x13,0xce,0xfd,0xd0,0x08,0xf4,0x45,0xb0,0x59,0xf4,0xbf,0xd2,0x37,0xe0,0x7e, + 0xb1,0xcc,0xf7,0x3e,0x82,0xa7,0xff,0x45,0xf7,0x03,0x18,0xb4,0x06,0xe2,0xee,0x82, + 0xef,0x7f,0x39,0xf4,0x9f,0xb3,0x98,0x87,0x6b,0x47,0x44,0x80,0xc2,0xfd,0xaf,0x45, + 0xe6,0x69,0x67,0x83,0x7f,0x90,0x92,0x15,0xd7,0xce,0xd0,0xff,0x92,0xcc,0xd3,0xce, + 0x98,0x7f,0xd0,0x97,0x68,0x99,0x2e,0xc1,0x8c,0xfc,0x83,0x83,0x30,0xb0,0x93,0xbc, + 0xff,0x75,0x5d,0x4e,0x8d,0x3c,0x65,0xf6,0x4f,0x53,0x79,0xfb,0x5f,0x34,0x08,0x25, + 0x1b,0x0d,0x1a,0x97,0xba,0x9c,0xf1,0x79,0xdf,0xdf,0xff,0xa2,0x4f,0x8b,0x46,0xfe, + 0x8c,0xeb,0x9d,0xeb,0x66,0x3c,0xff,0x6c,0x3a,0x55,0x61,0xbc,0xf8,0xf6,0x61,0xcc, + 0xd5,0x08,0xdb,0xeb,0xef,0x7f,0xf9,0xdf,0xf6,0xf2,0xc7,0xd3,0xdb,0xff,0x22,0x6d, + 0x82,0x55,0x2d,0xf2,0x37,0xd0,0x88,0xa4,0xc7,0x9d,0xe7,0x9f,0x2f,0xe4,0xef,0x7f, + 0x61,0xa3,0x41,0x4d,0xc9,0x0f,0x77,0xce,0x56,0xff,0xf9,0xb8,0xf3,0x34,0xa4,0x9a, + 0xc5,0x00,0x10,0xe2,0xfc,0xfc,0xb3,0xbd,0x8b,0xfb,0x44,0xdc,0x96,0x36,0xf4,0x1c, + 0x7f,0x47,0x26,0x4f,0xff,0x6b,0x1b,0x24,0x9a,0xc3,0x81,0x7a,0x45,0x70,0xff,0x6b, + 0x33,0x24,0x1e,0x0a,0xcb,0x5c,0xc7,0xac,0xf8,0x67,0x55,0x4e,0x26,0xef,0x7f,0x3d, + 0xa7,0x05,0x80,0x90,0xa3,0xff,0xc5,0xf4,0x9f,0x39,0x63,0xc5,0x93,0x78,0xb7,0x2c, + 0x19,0x99,0x65,0xff,0x8b,0xfb,0x0a,0xd3,0x4e,0xbd,0x5a,0x36,0x12,0x00,0x8a,0x36, + 0xff,0x38,0xf4,0x1f,0x62,0xdc,0x13,0x0a,0x23,0x3e,0x3d,0x03,0xff,0x58,0x4e,0xad, + 0x0e,0xbd,0xca,0xa5,0xd7,0x95,0x9a,0xef,0xbb,0xd5,0x1a,0x20,0x24,0x90,0xaf,0xd6, + 0xc8,0x15,0x41,0xfa,0x4f,0x31,0x89,0xde,0x4f,0xc8,0x8b,0x60,0xfe,0x8e,0xe4,0x29, + 0x17,0xff,0x98,0xe7,0x9f,0xf9,0xf5,0x0b,0x26,0xa1,0xee,0x7b,0x65,0x72,0xc1,0xf3, + 0x3f,0xbe,0xfe,0x97,0xe3,0x7d,0xb1,0x92,0x3c,0xfd,0x2f,0xab,0xdb,0xa5,0xc1,0x84, + 0x72,0x3f,0x79,0xdf,0x70,0x56,0xe7,0x7f,0x34,0x6e,0xb2,0xe3,0x35,0xa8,0xea,0x12, + 0x2f,0x71,0xa6,0xfe,0xb3,0x06,0xf3,0x8f,0x60,0x7e,0x55,0x11,0xd4,0xff,0xe2,0xda, + 0xd1,0x11,0xbd,0x76,0x6f,0x38,0x48,0x7f,0xb6,0xcf,0x3f,0x3b,0xfa,0x5f,0x23,0xd0, + 0x27,0x7e,0xeb,0xe4,0x1d,0xd9,0x36,0x9f,0xfe,0x03,0xee,0xfe,0x97,0x05,0x39,0xbb, + 0xe1,0x6b,0xb4,0x4c,0x2b,0x0f,0xd2,0x7f,0x2e,0xd3,0xed,0xc6,0xf4,0x9f,0x12,0x5c, + 0xc4,0xe5,0x6b,0xb0,0x7c,0xf3,0xcf,0x93,0x41,0xfa,0x8f,0xad,0xff,0x93,0xf7,0x97, + 0xbb,0x8c,0x63,0x1b,0x53,0xd0,0x81,0x56,0xd4,0x2e,0x7c,0xcf,0xd0,0x7f,0xac,0x83, + 0xd0,0x9f,0x9b,0xad,0x31,0x4f,0xff,0x0b,0x19,0x4e,0x8d,0x70,0x48,0xa9,0x92,0xa4, + 0x67,0xf8,0x47,0x9c,0xeb,0x6f,0xcc,0xfa,0xfb,0x5f,0xca,0x12,0x3d,0x4c,0xfc,0xed, + 0x08,0xc5,0x20,0x36,0x62,0x3c,0xaf,0xdd,0xcd,0xfc,0x1d,0xcc,0xd7,0xff,0xd2,0x45, + 0x04,0x8a,0x22,0xde,0xcb,0xf9,0x9f,0x70,0xdd,0xfd,0xaf,0xe3,0xe6,0xb1,0x8d,0x2c, + 0x4e,0x76,0x0d,0xf3,0xa4,0xff,0x67,0xef,0xfa,0x63,0xab,0xb8,0xb2,0xf3,0x7d,0xf3, + 0xc6,0x30,0xb6,0x9f,0xed,0xb1,0x81,0x96,0x2c,0x04,0x06,0x03,0x5b,0x97,0xba,0xe0, + 0xc5,0x88,0xb0,0x0e,0x31,0x83,0x49,0x54,0x16,0xa2,0x80,0x36,0x6d,0xb5,0x2b,0x45, + 0x91,0x45,0xa8,0x8a,0x54,0xb6,0x62,0x7f,0xfc,0xe1,0x25,0xab,0xcd,0x80,0xc9,0xc6, + 0x59,0xd3,0xae,0x93,0xcd,0x6a,0x89,0xb2,0xbb,0x7d,0x04,0x54,0x50,0x97,0x56,0x40, + 0xd2,0x2c,0x34,0x28,0x79,0x10,0x4b,0x71,0x12,0x27,0x58,0xd9,0x54,0x9b,0x1f,0x94, + 0x7d,0xd1,0xd2,0xc4,0x0d,0x0e,0x71,0x48,0x94,0x3a,0xc1,0xe0,0xce,0x9d,0xb9,0x3f, + 0xe7,0x9e,0x7b,0x67,0x1c,0x36,0x9b,0x48,0x8d,0xff,0x3a,0x7a,0x1e,0x9e,0xe6,0x1e, + 0xc6,0xf7,0x7e,0xf3,0x9d,0xef,0x7c,0x67,0x05,0xe9,0x6f,0x8a,0xd6,0x7b,0x1e,0xa8, + 0x7f,0xd1,0x24,0xbc,0x8e,0xc6,0x56,0xb7,0xa3,0xda,0xc4,0x79,0xd4,0xa6,0xe5,0x7f, + 0x2e,0xa2,0x71,0x74,0x3d,0xaa,0x19,0xcf,0x7f,0xcf,0xc0,0xff,0xec,0xe0,0xf8,0x27, + 0xfc,0x6b,0x0a,0x96,0x7b,0x35,0x27,0x76,0x1a,0xf5,0x3f,0xfc,0x7d,0xbf,0x5c,0x3c, + 0x56,0x5a,0xd4,0x52,0x79,0xd8,0x52,0x11,0x94,0xca,0xff,0x54,0x2f,0x9b,0x52,0x42, + 0x87,0xdd,0x05,0xe8,0x2b,0xf1,0xfb,0x29,0x96,0xfd,0xc4,0x07,0xdf,0x40,0x52,0xff, + 0x53,0xff,0xb8,0x43,0x40,0xdd,0x98,0xdf,0x86,0x7e,0x7e,0x38,0xbf,0x55,0xad,0xef, + 0x70,0xfc,0x73,0x4d,0xb4,0xa8,0x53,0x75,0x17,0xf3,0x43,0x68,0xdc,0x5b,0x85,0xea, + 0xb6,0xc9,0xe7,0x7b,0xfb,0x10,0xac,0xff,0xf9,0x50,0x84,0xcd,0x11,0x22,0x3a,0xc6, + 0x18,0x21,0xa8,0xfe,0x75,0x98,0xa3,0x9d,0x91,0xa0,0x37,0x1d,0xff,0x2c,0x6d,0x18, + 0xcc,0xb1,0xc7,0x80,0x20,0xe4,0xdd,0xe9,0xf8,0x27,0x7e,0x91,0x4f,0x0a,0xcb,0x25, + 0xfc,0x93,0x53,0x61,0xf0,0x79,0x23,0xfe,0xb9,0x7a,0xfd,0x4f,0xb2,0xd1,0x49,0xc6, + 0x3f,0x97,0x14,0xd8,0x9c,0xbc,0x7f,0x10,0xff,0x08,0xc7,0x74,0xb2,0xfe,0x0e,0xd7, + 0xbf,0x5c,0x1a,0x38,0xf7,0x24,0x18,0x21,0x05,0xff,0x48,0x68,0x67,0x04,0xfd,0x1a, + 0x97,0xbd,0x18,0x23,0x24,0xe1,0x9f,0xf0,0xfd,0xeb,0x1d,0xd2,0x1d,0x40,0x69,0x1f, + 0xd2,0xf6,0x85,0xdf,0x50,0x26,0xdc,0xa8,0xb4,0x0a,0xe0,0x9f,0x63,0xd5,0x58,0x08, + 0x17,0x65,0xe3,0x02,0x7a,0x0e,0xcd,0x91,0xf2,0x03,0xe1,0x1f,0x91,0xf6,0x31,0xe9, + 0x7f,0x98,0xfe,0x79,0x8e,0x9d,0x49,0xff,0x03,0xd1,0x3e,0x99,0xf4,0x3f,0x02,0xed, + 0x33,0x29,0xfd,0xcf,0xb4,0xf2,0x94,0xac,0xf5,0xaf,0x49,0xf1,0x3f,0x7f,0x38,0xfd, + 0x4f,0x16,0xfc,0x83,0xe6,0xb3,0xd5,0x95,0xd0,0x98,0x95,0x8a,0x7f,0x38,0xff,0xd3, + 0x7a,0xae,0x48,0xda,0xb8,0xc2,0x4f,0xf2,0x3a,0xfc,0xf3,0x00,0xa3,0x7d,0xa6,0x9d, + 0xf3,0x15,0xfc,0x03,0xd5,0xbf,0x4c,0xfc,0x0f,0x58,0xff,0xa2,0xc2,0xef,0xfe,0xe0, + 0xaa,0xf5,0x3f,0x90,0xfe,0xd9,0xc0,0xe7,0x28,0xf8,0x87,0xf3,0x45,0xff,0x94,0xae, + 0xff,0x99,0x2c,0xff,0x13,0xd7,0xbf,0x2c,0x95,0xf6,0xd1,0xe8,0x7f,0x8c,0x7c,0x85, + 0x0e,0xff,0x88,0x32,0x18,0x5f,0xe5,0x7f,0xe8,0xf7,0x63,0xfc,0x13,0xf5,0xbf,0x6f, + 0xef,0xe6,0xb4,0x4f,0x51,0xc1,0x3f,0xa0,0xfe,0xc7,0xd6,0xf2,0x1b,0xb2,0xfe,0x07, + 0xe3,0x9f,0xba,0xe3,0xdd,0x21,0xec,0xe9,0x4b,0x1c,0x64,0x08,0xd6,0xff,0x60,0xd9, + 0xcf,0x47,0x74,0xff,0xe9,0xb2,0xe2,0x17,0x31,0xb8,0xfe,0xc5,0xf4,0x3f,0xdf,0xb2, + 0x88,0xf0,0xfb,0x5b,0xc0,0xfb,0x1a,0x88,0x7f,0x54,0x18,0x09,0xe2,0x1f,0xc2,0x96, + 0x8f,0xfe,0x1d,0xa3,0xcd,0x89,0xd0,0x45,0x10,0x3e,0x01,0xf8,0x67,0x14,0x48,0x8b, + 0xa1,0xfe,0xb5,0x41,0x7f,0xde,0xd5,0x24,0xf0,0x8f,0xf3,0xf1,0xf8,0x1f,0xe3,0xf5, + 0x2a,0xfe,0x69,0xd9,0x39,0x68,0xb7,0x46,0xc0,0x40,0xca,0x8f,0x9b,0xac,0x7f,0xd5, + 0x84,0x68,0xc7,0x13,0xd7,0x7b,0xb4,0x3b,0xca,0xcf,0x4b,0x8c,0x08,0xaa,0x51,0xfa, + 0xbf,0x24,0xb5,0x2a,0x16,0x4a,0xc5,0xfd,0xef,0x94,0x11,0x02,0xf0,0xcf,0xb3,0x35, + 0x63,0xf9,0x76,0xcc,0xff,0x74,0x4a,0xfc,0x21,0xcc,0xff,0x3c,0x1e,0x2c,0x19,0x75, + 0x48,0xd9,0xab,0x33,0x53,0xff,0xfb,0x62,0x54,0x49,0x9e,0x87,0xd5,0xe0,0xf3,0x90, + 0xc0,0x3f,0xb9,0xc5,0x1d,0x3d,0xb8,0xdb,0x2b,0xcc,0xde,0x8d,0x4a,0x3e,0x4f,0x42, + 0xfc,0xcf,0x4b,0x35,0xa4,0xec,0xd5,0x39,0x15,0x7a,0x1e,0x14,0xfc,0x53,0xae,0x1b, + 0xad,0x8e,0x60,0x70,0x27,0xf8,0x60,0x28,0xf8,0xc7,0xbd,0x99,0x7c,0xdb,0x4d,0xa9, + 0xfa,0x67,0xfc,0x3c,0x34,0x77,0x38,0x2d,0x28,0xea,0x76,0xff,0x0e,0xf8,0x3c,0x28, + 0xf8,0xa7,0xb3,0x89,0x64,0x63,0x63,0xaa,0xfe,0x19,0xe3,0x9f,0xe6,0x2d,0x54,0xfd, + 0xb2,0x85,0xc2,0x00,0x5d,0xff,0x7b,0x8c,0x7f,0x4e,0x16,0x08,0xfe,0xd9,0xa2,0xf4, + 0xbf,0x27,0xf9,0x9f,0xc8,0xff,0x67,0x98,0x66,0xe3,0x46,0x1a,0xe0,0xfe,0xf7,0x11, + 0x2d,0xff,0xb3,0x96,0xca,0xae,0x7c,0x9c,0x16,0xe7,0x4e,0x83,0xfe,0x39,0xda,0x4f, + 0x3a,0x54,0xdb,0x1f,0x13,0xfe,0x69,0x8e,0xd4,0x3e,0xb9,0x70,0x75,0x9d,0x69,0xfd, + 0xef,0x78,0xff,0xb1,0x38,0xed,0xe3,0x83,0xf9,0x4c,0xe2,0x9f,0x55,0x4c,0xed,0xb3, + 0x13,0xee,0x7f,0xd7,0xe2,0x1f,0x97,0x1d,0x43,0x73,0x0d,0xf8,0x67,0xe5,0xe6,0xc2, + 0x24,0xf1,0x0f,0x95,0xf1,0x7c,0x35,0x23,0xfe,0x71,0xe2,0x7e,0xf9,0xac,0xf8,0x67, + 0x1d,0x28,0xfb,0xd1,0xe3,0x1f,0xa7,0x10,0xe4,0xf5,0x8d,0xff,0x0a,0xfe,0x91,0xd5, + 0x3b,0xe7,0x92,0xc2,0xe6,0x35,0x49,0xfc,0xb3,0x6a,0x4b,0x21,0xa6,0x7d,0x6e,0xf0, + 0xa1,0x44,0xdd,0x21,0xe1,0x1f,0x27,0x04,0x39,0x7d,0x4e,0x60,0x79,0x38,0x40,0x4e, + 0x26,0xfc,0xb3,0xd1,0x21,0x36,0x47,0xab,0x2b,0x53,0xf5,0xcf,0x39,0x2c,0xfb,0x71, + 0x28,0x8d,0x56,0x99,0x09,0xff,0x6c,0x6c,0x8e,0x68,0xbd,0xdc,0xca,0xce,0x3f,0xcf, + 0x84,0x7f,0xc2,0x0f,0xab,0xa3,0xdf,0xae,0x9d,0x93,0x05,0xff,0xac,0xc4,0x6d,0x5f, + 0x65,0xda,0x08,0x9f,0x8a,0x7f,0x30,0x6d,0xee,0x45,0x68,0x67,0xc9,0x03,0xeb,0x32, + 0xe1,0x9f,0x32,0xfd,0x7b,0xd9,0x05,0xf2,0xa5,0x0a,0xfe,0x19,0xa2,0x7f,0xbf,0xa8, + 0x0a,0xae,0x7f,0xd1,0xef,0x8f,0xf1,0xcf,0xca,0xce,0x66,0x8a,0x76,0x0a,0x60,0xfd, + 0x4b,0x83,0x7f,0x72,0xe1,0xea,0x40,0xfc,0x63,0xd1,0xfc,0x10,0xfd,0x73,0xb9,0x40, + 0xde,0xd6,0x3d,0xf0,0xfc,0x52,0xf4,0xcf,0xa5,0xa6,0x3b,0xf1,0xdd,0x06,0xcd,0x0e, + 0x59,0x48,0x73,0xac,0xe8,0xd6,0xe1,0x1f,0x9f,0x5c,0xb6,0x44,0x5e,0x2f,0xac,0x7f, + 0x6e,0xc5,0xcf,0x1b,0xd3,0xbb,0xa6,0xe1,0x1f,0xbc,0xde,0x95,0xfd,0x54,0x2d,0xe9, + 0x81,0xfd,0x3b,0x12,0xfe,0x71,0xc4,0xdf,0xda,0x99,0xf0,0x4f,0xbb,0x5f,0x20,0xdb, + 0x38,0x2a,0x40,0xe7,0x9d,0xca,0xff,0x34,0x11,0x3d,0x73,0x63,0x55,0xa2,0x11,0xa9, + 0x0d,0xc0,0x3f,0xb9,0xc5,0xa5,0xb5,0xe4,0x74,0xf3,0x9c,0x6c,0xf8,0xc7,0x69,0x69, + 0x88,0xb2,0xe1,0x56,0xc5,0xb2,0x1f,0xac,0x98,0x6a,0x60,0xfd,0x71,0x09,0xfc,0x83, + 0xef,0x3f,0x5a,0xdd,0xbc,0x76,0x77,0x36,0xfe,0x5a,0x22,0xfb,0x11,0xf4,0xcf,0x12, + 0xfe,0xc1,0xdb,0x4e,0xe4,0x5f,0xe7,0xdf,0x80,0x44,0xd9,0x0f,0x3e,0xbf,0xae,0x4f, + 0xe0,0x9f,0x19,0xcc,0xff,0x87,0x1b,0x29,0xb8,0xa4,0x11,0x0c,0xc4,0x3f,0x7f,0x4f, + 0x41,0xce,0xa0,0x45,0x68,0x9f,0x91,0xac,0xf5,0xaf,0x7d,0xf1,0xea,0x06,0x89,0x02, + 0x0a,0xc4,0x3f,0x15,0x87,0xf4,0xb4,0x09,0xc4,0xff,0x54,0xe8,0x60,0xb0,0xf8,0x20, + 0x19,0xf9,0x9f,0x35,0x46,0xfc,0x83,0x0e,0x71,0x7e,0x29,0x49,0xfb,0xe0,0x60,0xb9, + 0xae,0xfe,0x45,0xee,0xbf,0x36,0x05,0xff,0xcc,0x60,0xfc,0xcf,0x08,0xe8,0xff,0xb3, + 0x40,0xc1,0x3f,0x01,0x3d,0xfd,0x0b,0x98,0x06,0xa9,0x4a,0xeb,0xff,0xaa,0xa5,0xfa, + 0xe7,0x17,0xd0,0xad,0xe8,0x7b,0x4a,0x23,0xd8,0x32,0xb0,0xfe,0x55,0x8a,0xdb,0xbe, + 0x72,0x77,0x31,0xda,0x50,0x0a,0x64,0xfc,0xf3,0x1e,0xd5,0xff,0x40,0xf9,0x01,0xf1, + 0xcf,0x3c,0x10,0xf6,0x34,0x68,0xf1,0xcf,0x42,0xb6,0xba,0xd7,0xd9,0x32,0x2b,0x0d, + 0xfc,0x4f,0x94,0xb4,0x41,0x87,0x25,0x36,0x0d,0xff,0x3c,0x26,0x55,0xbb,0xd2,0xf1, + 0x4f,0xdb,0xc7,0xea,0xff,0x22,0x42,0x17,0x0b,0x1b,0x01,0xb1,0xf3,0xae,0xd6,0xc0, + 0xff,0xbc,0xc2,0x8d,0x80,0xb4,0xf8,0x27,0x17,0x1e,0xd3,0x56,0xf4,0x61,0x3f,0xae, + 0x7f,0xb1,0x42,0x58,0x18,0x74,0x40,0xf8,0x27,0xd2,0x3f,0x6f,0xf5,0x67,0xe1,0xd3, + 0x9f,0xb5,0xbd,0xef,0xd5,0xe3,0x9f,0x82,0xd0,0xff,0xc5,0xf0,0x0f,0x16,0xe2,0x4e, + 0x4d,0xa9,0x7f,0xe5,0xcf,0x15,0x95,0xc0,0xa8,0x7f,0xfe,0x6f,0x3d,0x3e,0x84,0xf9, + 0x9f,0x60,0x85,0x9e,0xff,0x61,0x7a,0x12,0xa8,0xff,0x0b,0xe8,0x77,0x33,0xf0,0x3f, + 0x8d,0x26,0xff,0x1f,0x85,0xff,0x49,0xd1,0xff,0x5c,0x55,0xff,0x57,0x56,0xfe,0x27, + 0x02,0x39,0x9b,0x32,0xf3,0x3f,0xe9,0xfa,0x43,0xb0,0xfe,0xa5,0xc2,0x00,0x0d,0xfe, + 0xd1,0xd2,0x3e,0x10,0xfe,0xa9,0xa1,0xf8,0x67,0xcd,0xdb,0x7d,0x34,0xf0,0x53,0xfb, + 0xbf,0xa2,0x63,0xcb,0x23,0xc1,0x44,0x0a,0xfe,0x79,0x84,0xb4,0x9d,0x46,0x77,0x5b, + 0x0b,0xe1,0x37,0x4d,0xff,0x97,0x36,0x80,0xfb,0xbf,0x22,0x7d,0x4b,0x15,0x4f,0x63, + 0x47,0x4a,0xff,0x57,0x6c,0x84,0xc8,0xf9,0x9f,0xbf,0x30,0xf1,0x3f,0x94,0x1d,0x02, + 0xf1,0x12,0x58,0xff,0x1a,0x27,0xa7,0xff,0x34,0xda,0x11,0x96,0x52,0xff,0x8a,0x8d, + 0x19,0xa3,0x20,0x69,0x04,0xa4,0xf2,0x3f,0xb3,0x84,0xfe,0x2f,0xb5,0x5e,0x23,0xe1, + 0x1f,0x9f,0x90,0x3c,0xcf,0x8b,0xc0,0x40,0x56,0x08,0x4b,0xf8,0xc7,0x25,0x8b,0xba, + 0x4c,0xab,0x7b,0xe3,0x28,0xd9,0x28,0x27,0xe0,0x9f,0xaf,0x48,0xb6,0x3f,0xd7,0x97, + 0x36,0x40,0xe7,0x3b,0x50,0xff,0xc2,0xf8,0xf9,0xb7,0x89,0xc7,0x46,0xcb,0xff,0x48, + 0x68,0x67,0x93,0xf8,0xc9,0xce,0x04,0xfe,0x69,0xaa,0x30,0xfc,0x59,0xf1,0xf5,0xea, + 0xf5,0xcf,0x1a,0xfc,0x43,0xef,0x07,0xd9,0x69,0xfa,0xe4,0x93,0x38,0x3f,0xdc,0xdf, + 0xd2,0xe5,0xe7,0xbb,0xa7,0xad,0x7f,0x0d,0x83,0xfd,0x5f,0x14,0xed,0x18,0xf9,0x1f, + 0xee,0x7f,0x78,0xc1,0x23,0x81,0x5a,0x0f,0xe5,0xfd,0x5f,0x25,0xc6,0x07,0x8a,0xcf, + 0x83,0x81,0xff,0x41,0xaa,0xfa,0xf7,0x76,0x19,0x18,0xc0,0xf5,0xaf,0x15,0xf9,0x41, + 0xe7,0xbd,0xdc,0xb2,0x93,0x62,0xdb,0x3b,0xc4,0xff,0xcc,0x8e,0xf3,0x33,0x37,0xc2, + 0x3f,0x98,0xf6,0x39,0x4c,0x69,0x1f,0xd0,0xff,0xc7,0x91,0xf1,0x67,0x9b,0x98,0x96, + 0xf9,0x80,0xfe,0x79,0x38,0x07,0xec,0x27,0xb6,0x5e,0xff,0x8c,0x78,0xfd,0xcb,0xd0, + 0xef,0x2f,0xea,0x9f,0xf9,0x7e,0x1e,0xd5,0x5b,0x99,0x9f,0x76,0xa5,0x84,0x7f,0xd8, + 0xfd,0xd8,0x58,0x1d,0xc1,0xd0,0xce,0x76,0x18,0xff,0x7c,0xc8,0xf1,0x0f,0x3b,0x8f, + 0xfe,0x04,0x9f,0x3e,0xdf,0x97,0xcf,0x23,0x1b,0xc0,0x3f,0xf4,0xbc,0x9b,0x86,0xf1, + 0x8c,0x46,0x28,0xfb,0x14,0xc7,0x3f,0x88,0xd6,0xb3,0xf2,0x86,0x42,0x8c,0xdc,0xff, + 0xc5,0xfc,0xfa,0x0c,0xf5,0x2f,0xba,0x5e,0xa1,0xfe,0xa5,0xca,0x7e,0xa0,0xfe,0xaf, + 0x6b,0xc4,0xfe,0x77,0x4b,0x73,0xfe,0x9e,0x65,0xfd,0x5f,0xc7,0x6a,0xb2,0xe0,0x81, + 0x37,0xb8,0x9e,0x07,0xf3,0x3f,0x76,0x94,0x9f,0xf7,0x13,0x97,0x0d,0x31,0xff,0x1f, + 0x81,0xff,0x99,0x69,0xac,0x7f,0xb9,0x7a,0xff,0x67,0xba,0xba,0x59,0xd0,0x7a,0x05, + 0xfd,0xf3,0x74,0x96,0xf6,0x91,0x4c,0xfa,0x67,0xdb,0xbc,0xde,0x1c,0xf6,0xb7,0x9c, + 0x2f,0xe8,0x9f,0xdd,0xfd,0x0e,0x65,0xc3,0x3c,0xed,0x3f,0x04,0xfd,0x7f,0x32,0xe1, + 0x1f,0x64,0x33,0xfd,0xcf,0x58,0x40,0x6d,0x0f,0xf1,0x27,0x3b,0x44,0xfc,0x33,0xe0, + 0xd1,0xfd,0xc1,0xb9,0x9b,0xfd,0xbd,0x9c,0x34,0xe1,0x1f,0xfa,0x33,0xaf,0x5e,0xd4, + 0xff,0x68,0xf0,0x40,0xc7,0x00,0xfd,0x7a,0xdc,0xff,0xe5,0x12,0x90,0xf3,0xa2,0x02, + 0x7b,0x78,0xff,0x57,0x23,0xbd,0xde,0xe1,0x78,0xa0,0xac,0xdf,0xd8,0x4f,0xfd,0x80, + 0xe6,0xa7,0xd3,0x66,0x22,0xd5,0xb3,0x91,0xed,0xcf,0x3d,0xa4,0x6d,0xf9,0x5c,0xdd, + 0x77,0xf3,0x73,0xa8,0x11,0xd0,0x50,0xc0,0xf0,0x0f,0xfa,0x19,0xad,0xd6,0x0d,0xf9, + 0xbf,0x11,0x6e,0x1b,0x2b,0x2a,0x67,0x5b,0x51,0x21,0xfe,0x9b,0x82,0xfe,0x39,0xe0, + 0xf8,0x47,0xf5,0x6b,0x9d,0x4d,0x3f,0xe1,0xfd,0x5f,0xfe,0x74,0x26,0xea,0x50,0xfd, + 0x6c,0x99,0xdf,0x9d,0xd0,0xff,0x55,0x21,0xac,0xb7,0x57,0x5e,0x66,0x75,0x33,0xed, + 0x88,0xe7,0xff,0xbf,0x45,0x77,0x24,0x43,0x7e,0xf8,0xfd,0x08,0xf8,0xe7,0x3d,0xad, + 0x10,0x5a,0x38,0x1f,0xb9,0xff,0xa1,0xf5,0x94,0x81,0x7f,0x60,0xff,0xbf,0x01,0x3f, + 0xef,0xca,0xa2,0x10,0x5a,0x8b,0x7f,0x50,0x81,0xe7,0x47,0x94,0x25,0x0c,0x88,0x85, + 0x30,0x01,0xff,0xcc,0x24,0x6a,0x9f,0x7f,0x4f,0xac,0xf7,0x59,0x0d,0xfe,0xa9,0x61, + 0x8b,0x1a,0x4d,0x2c,0xf3,0x08,0x8c,0x7f,0xce,0x5a,0xe4,0x21,0x19,0xc7,0x6a,0xb1, + 0x52,0xcd,0x18,0xc6,0x4b,0xc1,0xaa,0xd7,0x35,0xfc,0xcf,0xcc,0x0b,0xd4,0xe4,0xf0, + 0x4c,0xe9,0x97,0xbb,0x96,0x8c,0x56,0x1f,0xeb,0x98,0xf0,0xcd,0xfc,0x0f,0x5d,0xa6, + 0xb7,0x8f,0x08,0xbf,0x85,0xbf,0x2f,0x3b,0x89,0x7f,0x2a,0x0e,0xf1,0xb4,0xeb,0xfd, + 0x27,0x39,0xfe,0x99,0xb1,0xd5,0x61,0x68,0xf0,0x7c,0x5c,0x0d,0xc4,0x69,0x99,0x23, + 0x01,0x63,0xfe,0xff,0x2b,0xf4,0x7f,0x9d,0x89,0xfc,0x30,0x7b,0xa3,0xfc,0x58,0x26, + 0xfc,0xc3,0xf4,0xe7,0xaf,0x91,0x36,0x28,0x3b,0x9a,0xf8,0xa0,0xa9,0x7f,0x15,0x82, + 0x5e,0x6a,0xfb,0xd3,0x6b,0x2f,0x09,0x83,0x06,0xee,0xff,0x33,0x1d,0xc0,0x3f,0x98, + 0x7f,0x8e,0xf9,0x8a,0x2c,0xfe,0xcf,0x9d,0xee,0xed,0x8a,0xfb,0x9f,0x80,0x07,0xae, + 0x53,0xf5,0x3f,0x37,0xa3,0xdf,0x05,0xcb,0x62,0xb4,0x73,0xab,0x2b,0xc0,0x9e,0xa9, + 0x2d,0xf3,0x5f,0x88,0x47,0x63,0x24,0xfd,0x9f,0x71,0xf6,0x28,0x3e,0x4c,0x36,0x82, + 0x59,0x49,0xfc,0x13,0xbb,0xb3,0x96,0x6b,0x48,0xfe,0x07,0xc3,0xb4,0x5f,0x09,0xce, + 0x47,0x2f,0x26,0xf3,0x19,0x23,0x94,0x9c,0x7f,0xb1,0xa4,0xe4,0x6c,0xb3,0xc6,0x8b, + 0xf7,0xd8,0xcd,0xa7,0xc2,0xe0,0x79,0x5f,0xd5,0xff,0xd0,0xeb,0xbd,0x08,0xff,0x2c, + 0x89,0xd8,0x9e,0xe0,0x00,0xe1,0xbb,0xa2,0x80,0xf1,0x3f,0xeb,0xe5,0xf9,0x17,0x02, + 0xda,0xa1,0x46,0xd0,0x80,0xfe,0x87,0x5e,0x3f,0x4c,0xe6,0x5f,0x44,0x63,0x2f,0xde, + 0x0a,0x83,0x5a,0x29,0x78,0x55,0xe9,0xff,0xca,0xed,0x8d,0xe6,0x5f,0xd4,0x46,0x32, + 0x98,0x24,0xfe,0x31,0xce,0xbf,0xc0,0xf8,0x67,0xe5,0x6a,0xa1,0xbe,0x63,0xe1,0x60, + 0x4e,0x18,0xe4,0x44,0xfe,0xe7,0x6f,0x11,0x9e,0xa7,0xb0,0x9e,0xd2,0x38,0x35,0xd2, + 0xf9,0xfb,0xe5,0x24,0xfe,0x59,0x51,0xb1,0xd0,0x67,0xbf,0x7d,0x50,0xe9,0x7f,0x7f, + 0x30,0x97,0xe8,0x7f,0x6f,0x72,0x6d,0xc6,0xf6,0x14,0xef,0x43,0xcd,0xeb,0x2a,0x21, + 0x3e,0xe4,0x29,0x76,0xfd,0xb1,0x02,0x56,0x17,0xe3,0x45,0xcd,0x2f,0x07,0x2f,0x93, + 0x42,0x18,0xf7,0xff,0xe9,0x4a,0xe2,0x9f,0x3d,0x02,0x1f,0x52,0xfc,0x1f,0xd9,0xef, + 0xfa,0x56,0xf6,0xab,0x37,0x25,0xff,0xe7,0x57,0xe8,0xf5,0xcf,0x27,0x1b,0xc1,0x68, + 0x20,0xf8,0xff,0xcc,0xc4,0xb6,0xcf,0x6d,0xb9,0xc8,0xff,0xe7,0x20,0x5a,0xec,0x62, + 0xd8,0xe3,0x2b,0xf8,0x67,0x8a,0x88,0x7f,0x28,0xcd,0x55,0xdc,0x81,0x9a,0x6f,0xac, + 0x76,0x1b,0xf1,0x32,0x9b,0x74,0xf8,0xc7,0xde,0x1f,0xa6,0x7d,0x51,0x4c,0xfb,0x68, + 0xeb,0x89,0x6f,0x70,0xff,0x9f,0xbf,0xea,0x27,0xf7,0x3f,0xed,0x9c,0xfd,0x0c,0xb7, + 0x75,0x6a,0x93,0xf1,0x8f,0xc7,0xf8,0xcf,0x88,0xff,0x89,0x7e,0xbb,0x99,0xe8,0x85, + 0x72,0x9b,0x93,0xf8,0x67,0x1a,0xe7,0x1b,0x1d,0xb7,0xd8,0x49,0x69,0x37,0x6b,0x20, + 0x0b,0xff,0xd3,0xe6,0xb0,0x6e,0x77,0x6c,0xfb,0xb3,0x1e,0xe2,0x7f,0xc4,0xfe,0xf7, + 0x0d,0x44,0xff,0x13,0x1e,0x5b,0xdd,0x31,0x5f,0xa1,0x32,0x42,0x1c,0xff,0x04,0x0c, + 0xff,0x4c,0x39,0xa3,0xfc,0xd9,0x02,0xf8,0xa7,0xc7,0xb9,0x3f,0xd6,0xff,0x84,0x68, + 0xc7,0x7f,0x7a,0xc7,0x0d,0xe5,0x0d,0x5d,0x6b,0xcc,0xf8,0xa7,0x18,0xee,0x96,0xb1, + 0x7a,0x70,0xf7,0xf5,0x48,0xd3,0x08,0x76,0x6a,0x0a,0x5d,0xaf,0x6f,0x1f,0x45,0xa7, + 0xfb,0x62,0xff,0x1f,0xff,0xe9,0xbe,0xd6,0xf8,0x45,0x3e,0xc2,0x3f,0x5d,0x91,0x10, + 0x3a,0x0a,0x5c,0x96,0xff,0x83,0x33,0xfb,0xd0,0xaf,0x8b,0x91,0xff,0x0f,0xf6,0x2f, + 0x9a,0x57,0xaa,0xfe,0x2e,0xc5,0x3f,0xdb,0x22,0x85,0x46,0x18,0x7c,0xb3,0x63,0x91, + 0xc0,0xff,0xf4,0xc5,0xb6,0x3f,0x98,0x2f,0xba,0x47,0x90,0x3d,0x4b,0x0a,0x46,0x4f, + 0xf0,0x7f,0x0e,0x44,0xb7,0xd5,0x26,0x31,0x8d,0x1d,0xec,0xe8,0x9f,0x29,0xf4,0xbf, + 0xf7,0xa0,0xe7,0x72,0x91,0x69,0xcf,0xf8,0x94,0xe7,0xd0,0x47,0xa2,0x8d,0x33,0x56, + 0x54,0xc6,0x41,0x95,0xd0,0x0f,0x1b,0xc3,0x00,0x92,0x96,0xbf,0x4e,0xc3,0x3f,0x45, + 0xf7,0xa2,0xe2,0x7e,0x73,0x26,0xe2,0x7f,0x6a,0x40,0xfc,0xb3,0xd7,0xde,0xe4,0xab, + 0xc7,0x6e,0xf2,0x13,0x01,0xff,0xdc,0xe4,0x79,0xea,0xf5,0x06,0xfe,0x67,0x3a,0x42, + 0xfb,0xd6,0x36,0x9f,0x8a,0xf0,0x00,0x15,0x06,0xe3,0x27,0x70,0x20,0x4e,0x94,0x9f, + 0xc0,0x3f,0x41,0xb8,0xff,0x9c,0xef,0x8c,0x9a,0xbc,0xc6,0x83,0x58,0xff,0x13,0x2e, + 0x33,0x3c,0xf1,0x4f,0x85,0x27,0xce,0xdb,0x6b,0x2f,0xf9,0x49,0xfc,0x53,0xd1,0xc7, + 0xf5,0x51,0xbf,0xb5,0x56,0x9d,0x24,0x83,0x9c,0xe2,0xf3,0x2b,0xc0,0xa3,0x31,0x24, + 0xfc,0x83,0x50,0xf8,0x1e,0xb8,0x37,0xdc,0x0e,0xa2,0x3e,0x10,0x5d,0x80,0xc4,0x1f, + 0x1b,0x85,0x77,0xe7,0x87,0x3b,0xb0,0x21,0x10,0x7f,0x76,0xa1,0x79,0xc8,0xf1,0xc3, + 0x1d,0xd2,0x10,0x5c,0xcd,0xf7,0x07,0xe1,0x7f,0xb6,0x83,0x2c,0x63,0x20,0xfc,0x98, + 0x2f,0x8c,0x83,0xab,0xf9,0xfe,0xc9,0xfe,0x7c,0xc6,0xf2,0xef,0xe2,0x59,0x7e,0x83, + 0xe8,0xdb,0x68,0x76,0xc9,0x10,0xd8,0x1f,0xfb,0xfb,0x3f,0xe1,0xfc,0xdb,0x6e,0x90, + 0x21,0xe7,0x39,0x81,0x5f,0x9a,0xdc,0xcf,0xca,0x95,0x59,0xae,0xaa,0xab,0xfb,0x98, + 0x5f,0xff,0x07,0xf8,0x59,0x35,0x31,0x31,0x51,0x4a,0x09,0xfe,0x3f,0x5f,0xff,0x19, + 0xfb,0x7b,0xfc,0x7c,0x3f,0xfc,0x7c,0x3f,0xbc,0x8a,0xfc,0x7f,0xbe,0x1f,0xa6,0xfd, + 0x7c,0xd6,0xf6,0x9f,0xcf,0xd6,0xf5,0xa2,0x3f,0x36,0x7e,0x9b,0x50,0x02,0x6d,0x7d, + 0xb0,0x91,0x06,0x0d,0x46,0x7d,0x38,0xda,0x5d,0xaf,0xa3,0x9d,0x3b,0xc0,0xfa,0xa0, + 0xa1,0x2c,0x08,0xf0,0x63,0x39,0xa1,0x7e,0x17,0x15,0x52,0xab,0xa1,0xf7,0x05,0x01, + 0xff,0x27,0xfc,0x21,0x95,0x60,0xae,0xb6,0x3e,0xc8,0x02,0xb5,0x3f,0x11,0xaa,0x0f, + 0xe6,0x13,0x65,0xc1,0x5e,0x9d,0x3f,0x64,0x8e,0xb1,0xc7,0x59,0xea,0x83,0xb4,0x3f, + 0x6e,0xcc,0x22,0x83,0x62,0xb7,0xf3,0xb1,0xb0,0xa6,0xfa,0xe0,0xe1,0x78,0x2c,0x08, + 0x6e,0x8b,0xbb,0x25,0xf6,0x87,0x5c,0x01,0xd6,0x07,0x05,0x7d,0x14,0x8a,0xdc,0x90, + 0x04,0x59,0x38,0x50,0x1f,0x6c,0xb2,0x0f,0xa1,0xd7,0xe0,0xb2,0xa9,0x60,0x94,0x24, + 0xf0,0x63,0xae,0x5e,0x6f,0xe0,0xce,0x36,0xd5,0x07,0xbf,0xa8,0xca,0xa2,0x58,0xa9, + 0x54,0xac,0x0f,0xee,0xd6,0xa7,0xb1,0xa0,0xf2,0x63,0xd8,0x1f,0xe9,0x55,0xb4,0x1c, + 0x2c,0x0b,0x72,0xa3,0x24,0xad,0x3f,0x52,0x06,0x7e,0x4c,0xa8,0xfe,0x7c,0x9d,0xd3, + 0x20,0x8b,0x53,0xfb,0xe3,0x90,0x3a,0x16,0x4d,0xe0,0xc7,0xe8,0xf5,0x42,0x7d,0x70, + 0x73,0xc4,0x8f,0xc9,0x7c,0xce,0x83,0x8a,0x3f,0x64,0xa6,0xfe,0x38,0xce,0x8f,0x75, + 0x55,0x0a,0xf5,0x41,0x6a,0xcb,0xec,0xe8,0xeb,0x83,0x09,0x7f,0x48,0x1a,0x54,0xc8, + 0x9f,0xbc,0x99,0xd0,0x87,0x83,0x65,0x32,0xc1,0x58,0xc0,0xd8,0x1f,0xd7,0xa8,0x04, + 0x62,0x7d,0xb0,0x62,0x97,0x58,0x0f,0x6d,0x02,0xd6,0x5b,0x25,0xcd,0x87,0x9d,0x6e, + 0x28,0xcb,0x02,0xf5,0xc1,0x87,0x45,0x7d,0xd4,0x71,0x46,0x8b,0x25,0xf5,0x51,0x0b, + 0x58,0x7d,0x10,0xd4,0x47,0x1d,0x4f,0x04,0x52,0x7d,0x30,0xe2,0x63,0xe7,0x64,0xac, + 0x0f,0x7a,0x15,0x89,0x69,0x20,0x75,0x29,0xfc,0x18,0x9e,0xa7,0x6c,0x6d,0x4d,0xd1, + 0x6f,0x08,0xf5,0x41,0x24,0xe9,0xa3,0xbe,0x91,0x5a,0x1f,0xec,0x89,0xfd,0xb1,0x6b, + 0xa3,0x69,0xb0,0x19,0xea,0x83,0xb3,0x13,0x7a,0x0f,0x50,0xff,0x23,0xf0,0x63,0x15, + 0x4c,0xdf,0xfb,0x7d,0x3c,0x0d,0x56,0x3a,0xb6,0xd8,0xaf,0x86,0x18,0x3f,0xf6,0x2f, + 0xf5,0xbf,0xe8,0x21,0x77,0x7b,0x1b,0xfa,0x69,0x31,0xf2,0x47,0x7a,0x21,0x20,0x46, + 0x49,0x67,0xef,0x8e,0xad,0x9f,0x3a,0x24,0x7f,0xc8,0x1d,0x7c,0x75,0x1e,0xd3,0x83, + 0x2d,0x94,0x84,0x61,0x49,0x7f,0xc8,0x34,0x3d,0x8c,0x50,0x1f,0x9c,0x7e,0x88,0xca, + 0xa2,0xc2,0xd5,0x45,0x65,0x17,0x32,0x16,0xe4,0x47,0xc2,0x7a,0x9f,0x15,0xf8,0x31, + 0xe1,0x18,0xd2,0xea,0x51,0xc5,0xfa,0xa0,0xf1,0xbc,0x7b,0x52,0xad,0x0f,0x36,0xeb, + 0xc7,0x52,0x40,0xfc,0x98,0xa8,0x07,0x96,0x82,0xe7,0xf0,0x84,0x35,0x50,0x1f,0xfe, + 0x63,0x5a,0x0f,0x7a,0xc4,0x61,0x63,0x41,0xc2,0xb4,0x2c,0x23,0xfe,0xd8,0x49,0x7d, + 0x54,0xc0,0x57,0x57,0x6c,0xff,0x4f,0xdc,0x16,0x17,0x7e,0x32,0x67,0x88,0x04,0x8a, + 0x3e,0xfc,0x72,0xfd,0x93,0xe8,0x8f,0xd9,0xf9,0x35,0x5c,0x77,0xb1,0x3b,0x1a,0x0b, + 0xf2,0x6c,0xdd,0xc5,0x58,0xf1,0x92,0xa8,0x0f,0xde,0x2d,0x3e,0x2d,0xde,0xaa,0x73, + 0xb5,0x66,0x7d,0x54,0xc9,0x11,0xd0,0xce,0x93,0x43,0xcd,0x25,0x07,0xea,0x8f,0x1b, + 0x65,0xfb,0xf3,0x00,0xda,0x6d,0xe3,0x7e,0x25,0xf6,0xbf,0x5f,0xa5,0x04,0xe1,0xaf, + 0x2e,0x72,0x7d,0xb8,0x2d,0xe9,0xa3,0x9a,0x4b,0xa0,0xde,0x9e,0xeb,0xc3,0xeb,0x93, + 0xfa,0x70,0xf0,0xef,0xe5,0x1c,0xc3,0x4b,0xc5,0x7a,0xf1,0x79,0xc8,0xe9,0xf4,0x51, + 0x6c,0xff,0x19,0x72,0x0f,0xf1,0x7e,0x84,0x77,0xc4,0xef,0xaf,0x85,0xf1,0xcf,0x4d, + 0xc2,0xf3,0xf0,0x64,0xe4,0x6f,0xd9,0xc1,0xef,0xdf,0x25,0xc1,0x07,0xec,0x79,0x10, + 0xf4,0x51,0x6a,0x5a,0x00,0xfc,0x33,0xea,0x72,0x7d,0x78,0x14,0x38,0xdb,0xa7,0xa8, + 0x7a,0xa1,0x71,0x8e,0x7f,0x66,0xd6,0xa2,0xf7,0xdc,0x95,0xa5,0xd3,0x2d,0xd3,0x5e, + 0x70,0x7e,0x17,0xa2,0x9d,0xda,0x36,0x6e,0x8b,0xfd,0x42,0xf8,0x6e,0x87,0xf1,0xcf, + 0x1d,0x2f,0xb2,0xc7,0xcd,0x9f,0x7e,0x02,0x5d,0x62,0xfd,0x95,0x0e,0x4f,0x4b,0x7f, + 0xdc,0xa1,0xa9,0xd4,0x07,0x05,0x7f,0x72,0xc0,0xa8,0x81,0x14,0x52,0x05,0x7d,0xb8, + 0x23,0xe2,0x1f,0xdd,0x7c,0xc9,0x8b,0x0b,0xe8,0xf7,0x7b,0x92,0x3e,0xea,0x07,0x90, + 0x3e,0x6a,0x7d,0x57,0x43,0x99,0xe1,0xd5,0x2d,0x76,0x8c,0x7f,0xf2,0xc6,0xfd,0x87, + 0xeb,0xc3,0xcb,0xd3,0xb1,0x3e,0x7c,0x0e,0x2c,0x8b,0x02,0xfd,0x21,0x05,0xbd,0xca, + 0x68,0x16,0x7d,0xf8,0x7e,0xa2,0xff,0x89,0xce,0x3b,0xcd,0xfc,0x50,0x11,0xff,0x2c, + 0x70,0x85,0xd3,0xb6,0x11,0x3e,0x7f,0x85,0xfa,0xe0,0x4d,0x0b,0xec,0xf4,0xeb,0xb9, + 0x3e,0xbc,0x69,0xba,0x88,0x7f,0x9a,0x8a,0x1a,0x7d,0x14,0xdb,0x7f,0xba,0xae,0xed, + 0x74,0xe9,0x7c,0x58,0x7b,0xcc,0x5b,0x0a,0xcf,0x27,0xbd,0xc0,0xf6,0x9f,0x63,0x33, + 0xf8,0x18,0x14,0x5c,0x38,0x5b,0x47,0x96,0xb9,0x3c,0x56,0x88,0x91,0x5f,0x7d,0xc0, + 0xf6,0x9f,0x15,0x04,0xff,0xd4,0xe0,0x7a,0xd9,0x2b,0x68,0xe9,0xc6,0x5a,0x50,0x4f, + 0xc5,0xf5,0x51,0x4e,0x31,0xf6,0x87,0x8c,0xf1,0x4f,0x23,0x72,0x82,0x06,0x05,0x11, + 0x35,0x9c,0xe5,0xf8,0xc7,0x16,0xf5,0x51,0xbe,0xe7,0xff,0x50,0x5a,0xef,0x7d,0xc9, + 0xfa,0xe0,0x1e,0x7b,0xbf,0x50,0x16,0xcc,0x3d,0xac,0xf1,0x1b,0x17,0xf4,0x51,0xfb, + 0x39,0x7a,0xf9,0x30,0xd7,0xe0,0xff,0x02,0xb8,0xff,0x1c,0x9f,0x0f,0x3b,0x20,0xd6, + 0x8b,0xdf,0xb5,0x71,0xf5,0x50,0xbd,0x7e,0xcd,0x47,0xcc,0x1f,0xdb,0x49,0xfa,0x03, + 0xa4,0xcc,0x87,0x75,0xb8,0x3e,0x8a,0xb9,0x61,0x53,0xd8,0xd3,0x08,0xe0,0x1f,0xc7, + 0x96,0xaa,0x81,0x8b,0x75,0xf8,0x87,0xfe,0xff,0x22,0x57,0xf8,0x6b,0xbd,0x4e,0x9a, + 0xaf,0x2a,0xea,0xc3,0x99,0x3f,0xb6,0xb3,0xe7,0x76,0x09,0xed,0xbc,0x55,0x47,0xeb, + 0x83,0x53,0xa5,0xf9,0x68,0xf4,0xeb,0x05,0x7d,0x94,0xa1,0xff,0x5d,0xd0,0x47,0xed, + 0x7a,0x62,0x23,0xc7,0x3f,0x61,0x50,0xe0,0xc7,0xd6,0xb4,0x2b,0x0e,0x3d,0xbf,0xb8, + 0x3e,0xca,0xd9,0x8d,0x37,0x0d,0x7a,0xb7,0x4b,0x4a,0x55,0x5f,0xe2,0xfd,0x71,0x83, + 0xb1,0x50,0x53,0xd4,0x47,0x21,0xf4,0x33,0xfb,0x3a,0x71,0x75,0x60,0x63,0x6f,0x3f, + 0xd7,0x47,0xd9,0xe2,0xfb,0x97,0xad,0xd1,0x87,0x8b,0xfa,0xa8,0x70,0x51,0x71,0x7d, + 0x70,0xc4,0x7e,0x3c,0xdc,0x5d,0xc1,0xf9,0x0e,0xaf,0xf2,0xe7,0xad,0x5e,0xc9,0xcf, + 0xb4,0x11,0x57,0x39,0xef,0xd8,0xfe,0x33,0xcf,0x3d,0xe1,0xb0,0xd3,0x0d,0xeb,0xa3, + 0xaa,0xa1,0xf3,0x6e,0x94,0xdd,0xcf,0xde,0x4c,0xfe,0x90,0xe7,0xd8,0xfe,0x13,0x54, + 0x28,0xd7,0x63,0x7d,0x54,0x4e,0x5b,0x1f,0x74,0x0b,0xbe,0x38,0x16,0xa4,0x14,0x0d, + 0xa6,0x21,0xf3,0xbb,0x99,0x42,0x58,0xc0,0x3f,0x7b,0x88,0x3f,0xc0,0xe1,0xfc,0xdb, + 0xf1,0xfb,0xf8,0x91,0x58,0xff,0xd3,0x4f,0x3e,0x89,0xf1,0x1e,0xc7,0x3f,0x33,0x70, + 0x19,0x31,0x5e,0x5d,0x31,0xb6,0x05,0xc8,0xcb,0xfe,0xd8,0x49,0x7d,0x14,0x01,0xc9, + 0x2f,0xcb,0xb6,0xea,0x5a,0xfc,0xb3,0x87,0x80,0x9c,0xfb,0xad,0x7f,0x53,0x60,0x0f, + 0xc0,0xff,0x84,0xf8,0x27,0x5e,0x54,0x71,0xa7,0x81,0xdf,0xe0,0xfc,0x4f,0xd9,0x3e, + 0x14,0x83,0x84,0xa2,0x65,0x10,0x8a,0x73,0xfe,0x67,0xf5,0x0c,0xa2,0x56,0x7a,0x00, + 0xb0,0x65,0xe6,0xfd,0x71,0xaa,0x3f,0xf6,0x8b,0x39,0x83,0x3f,0x12,0xc7,0x3f,0xfd, + 0x94,0xff,0x79,0xb4,0xda,0xf0,0x87,0x09,0xf8,0x63,0xb7,0x00,0xb6,0x5a,0x40,0x7f, + 0x5c,0x89,0xed,0x3f,0x55,0x99,0xf8,0x9f,0x51,0xf7,0x76,0x85,0xfd,0x30,0xf7,0xc7, + 0xdd,0x12,0x93,0x3c,0x27,0xf8,0x58,0x58,0xa3,0x3e,0x7c,0xc6,0x09,0xff,0x49,0x2e, + 0x8b,0x12,0xfb,0x35,0x34,0xfc,0x0f,0x71,0xa3,0xea,0x33,0xe5,0x5f,0xe0,0x7f,0x66, + 0x12,0xfc,0xb3,0x11,0xb0,0xc5,0xd6,0xe8,0xc3,0x0f,0x04,0x5c,0x06,0x9f,0xa6,0x0f, + 0xa7,0xfa,0xa8,0xea,0x13,0x3f,0x34,0x34,0xfe,0x88,0xfc,0x4f,0xac,0x86,0xaa,0x7b, + 0x2b,0xbf,0x85,0x0b,0xc5,0x71,0x30,0x17,0xd6,0x87,0xe7,0x8a,0x94,0xf6,0x31,0x08, + 0x77,0x25,0xfc,0xe3,0xe2,0xb6,0xb8,0x0d,0xf7,0xe5,0x17,0x24,0x8c,0xa0,0x35,0xfa, + 0x70,0xc2,0xff,0xec,0xc9,0x67,0xf2,0xc7,0x5e,0x51,0x21,0xf0,0x3f,0x19,0xfc,0x91, + 0x38,0xfe,0x99,0x92,0xc9,0x1f,0xbb,0xab,0x86,0xcc,0x07,0x41,0xd5,0x9c,0x08,0xaa, + 0xd4,0xfb,0x63,0x33,0x7d,0xd4,0x8b,0xdd,0x26,0x7d,0xb8,0xca,0xff,0x40,0xb6,0x90, + 0x10,0xff,0x33,0x93,0x80,0x9c,0x2a,0x4b,0x1d,0x0b,0x02,0xf1,0x3f,0x68,0x17,0xd1, + 0x83,0xdd,0x6f,0x3b,0xda,0xf5,0xca,0xf8,0x27,0x4a,0x5a,0xbd,0xc9,0x6f,0x5c,0xf2, + 0xc7,0x8e,0x6d,0x9d,0xee,0x07,0xc6,0x82,0x00,0xfd,0x71,0x58,0x1f,0x75,0x5c,0x77, + 0x19,0xa0,0x0f,0x77,0xa8,0x3e,0x7c,0x57,0xde,0x23,0x42,0xb5,0x8c,0xfd,0x71,0x56, + 0x1c,0xf4,0xa6,0xf4,0xc7,0x71,0xfc,0x63,0xd8,0x7f,0xb8,0x3f,0x76,0xe0,0xde,0x96, + 0xe1,0xef,0x97,0xfb,0x63,0xf7,0xf4,0xdc,0x9e,0x8b,0x40,0xce,0xd7,0xab,0x55,0x5b, + 0x48,0x68,0x3e,0x2c,0xc5,0x3f,0x8f,0x19,0xf1,0x0f,0xef,0x8f,0xe3,0xfa,0xf0,0xf6, + 0xb8,0xbf,0x29,0xd6,0x47,0xad,0x3a,0x47,0x83,0xb2,0x3c,0x1f,0x96,0xee,0x3f,0x2e, + 0xbd,0xff,0x3b,0xe3,0xdb,0x2e,0xd3,0xa0,0x24,0xf7,0xc7,0x05,0xe4,0xfa,0xaf,0x55, + 0xc9,0xeb,0x1d,0xd0,0xf4,0xc7,0x71,0xfc,0x23,0xe4,0xb3,0x35,0x91,0x4f,0xb1,0x3f, + 0x8e,0x2d,0x8a,0xef,0x9f,0x05,0xce,0x08,0xa1,0x68,0x02,0x9a,0xe0,0x8f,0x9d,0x23, + 0xf9,0xe9,0x4b,0xa6,0xe5,0xb4,0xc4,0xff,0xd0,0xfb,0x67,0xf8,0x67,0x08,0x18,0x0b, + 0x02,0xea,0xa3,0x08,0x9e,0x69,0x61,0x63,0xd9,0x1b,0xd5,0xf3,0x0b,0xf4,0x47,0x32, + 0x9c,0x77,0xa2,0x3e,0x8a,0xa4,0xe5,0x01,0x9a,0x9f,0xa5,0xb1,0x2d,0xb6,0x4e,0x1f, + 0xfe,0x0f,0x5b,0xfd,0x68,0x51,0x7f,0x49,0xf3,0x73,0x8c,0xbc,0x68,0x8b,0x46,0x40, + 0x25,0x11,0xff,0xf4,0xc9,0xab,0x7b,0x3f,0x4f,0x26,0xa6,0xbd,0x0b,0xe3,0x1f,0x15, + 0xed,0x08,0x41,0xec,0x0f,0x79,0x87,0xae,0x3f,0xae,0x29,0x15,0xff,0x88,0xfe,0x00, + 0xd3,0xc9,0xf4,0x5b,0xfa,0x49,0x43,0xb4,0xf0,0x78,0xbd,0xec,0x7e,0xea,0xf5,0xb0, + 0xa7,0x01,0xe0,0x7f,0x10,0x30,0x1f,0x04,0xa8,0x7f,0x65,0xf0,0x87,0x9c,0x6b,0xf2, + 0x47,0x2a,0x11,0xfd,0xf9,0x52,0xf9,0xfb,0xdd,0x3b,0x55,0x7d,0xb8,0xf0,0x18,0x9c, + 0x8f,0xa7,0x99,0xa4,0xfb,0x23,0x91,0xb4,0xec,0x8b,0xdd,0xe3,0x59,0xc6,0x76,0xab, + 0xf8,0x47,0x9a,0x8f,0x76,0x40,0x68,0x9c,0xe7,0xc1,0x2c,0x09,0xff,0xac,0x2d,0x38, + 0x0c,0xed,0x9c,0x47,0x2d,0x49,0xfc,0x73,0x18,0xf6,0x47,0xa2,0x69,0x79,0xbc,0x44, + 0xda,0xe2,0x88,0xe2,0x4e,0xf5,0x07,0x98,0x71,0x41,0x1c,0x6b,0xb8,0xbc,0xb4,0x41, + 0x68,0x8b,0x83,0xfc,0x01,0xae,0x39,0xc1,0xdb,0x4c,0x7e,0xaa,0x31,0x0a,0x90,0xfc, + 0x01,0x9e,0x10,0x65,0xf0,0xd0,0x7a,0xb1,0x3f,0x00,0xe3,0x7f,0xd6,0xda,0x82,0x1a, + 0xfc,0xa1,0x44,0x3e,0x35,0xfe,0x00,0x82,0x1b,0x24,0x5c,0x08,0xfb,0x3d,0xcd,0x87, + 0x25,0x34,0x48,0x0a,0xff,0x23,0xc1,0x18,0x81,0xcf,0xe9,0xcd,0xe2,0x0f,0xf9,0x45, + 0xe9,0x98,0x8e,0x8f,0xf2,0x59,0x06,0x7f,0x48,0x2f,0x0d,0xff,0x48,0xf3,0x61,0x47, + 0xd1,0x72,0x71,0x99,0x6b,0x00,0xfe,0x27,0xae,0x7f,0xd1,0xea,0x5e,0x93,0x4c,0x6b, + 0x98,0xf0,0x8f,0x09,0x0f,0xdc,0xf1,0x86,0xa6,0xfe,0xe5,0x01,0xf8,0x27,0x67,0x98, + 0x0f,0xeb,0x24,0xf0,0x8f,0x7d,0xf5,0xfe,0x90,0xc9,0xf9,0x68,0x3f,0x92,0xea,0x59, + 0x44,0xef,0xcd,0xf9,0x1f,0x79,0x3e,0x9a,0xd6,0x1f,0x00,0x9e,0x8f,0x96,0xc5,0x1f, + 0xc0,0x6e,0xd2,0xda,0x02,0x40,0xfc,0xcf,0x64,0xfd,0x01,0x3c,0xc8,0x1f,0x40,0xe9, + 0x6f,0xe5,0xfc,0x8f,0x30,0x1f,0x2d,0x44,0x3b,0x43,0xe9,0xfe,0x00,0xd7,0x1e,0x12, + 0xd8,0x8c,0xce,0x54,0xfc,0xe3,0x57,0x30,0xb5,0x06,0x9e,0x06,0xdb,0x9a,0xf6,0xfe, + 0x4e,0xfc,0x91,0xca,0xc4,0x0d,0x29,0xdc,0x7f,0xb6,0x73,0x5b,0x92,0xc8,0x1f,0xa9, + 0x0c,0xf9,0x03,0x9c,0x24,0xab,0x9b,0xa7,0xce,0x87,0x3d,0x29,0xf1,0x3f,0x72,0xfd, + 0xcb,0xd6,0xec,0x3f,0xe2,0x7c,0x34,0xe1,0x7c,0x99,0x40,0x47,0xe1,0xf5,0x9e,0x85, + 0xfc,0xb1,0x0d,0xc1,0xeb,0x3a,0x7f,0x00,0x4d,0xc0,0xf9,0x1f,0xc9,0x1f,0xe0,0x7c, + 0x06,0x7f,0xc8,0x9c,0x70,0xbd,0xb6,0x9f,0x4b,0xe9,0x8f,0x1b,0x20,0xe7,0x1d,0xc6, + 0x3f,0x3b,0xc5,0xfc,0xf8,0x49,0xfc,0xe3,0x44,0x6a,0x13,0xac,0x0f,0x1f,0x09,0xde, + 0xa4,0xfa,0x70,0xba,0xde,0xdd,0x97,0x56,0x47,0xbf,0x2a,0x27,0xfd,0x91,0xb0,0x09, + 0xf6,0xe5,0xb8,0x1f,0x50,0x68,0xeb,0x7e,0x1b,0x91,0xd1,0xb1,0x06,0xfc,0x53,0x33, + 0x96,0x9b,0xa4,0x3f,0xc0,0xa4,0xe6,0x83,0x68,0xf8,0x1f,0x93,0x3f,0xf6,0x26,0x1c, + 0xd4,0x4a,0x83,0x7a,0x27,0x8f,0x7f,0xe8,0xf3,0xc9,0xf1,0xcf,0x34,0xc3,0xf3,0x00, + 0xcc,0x87,0x3d,0xa2,0x7e,0x2d,0x3f,0xe8,0x35,0xf8,0xc7,0xc0,0xff,0xd0,0x1f,0xd8, + 0x1f,0x3b,0x83,0xfe,0xc7,0xd8,0x2f,0x2f,0xe9,0x7f,0x6c,0x99,0xed,0xb9,0x1e,0x07, + 0x81,0x96,0xff,0xb9,0x56,0x87,0x0f,0x61,0xfe,0xe7,0xa0,0xd6,0x9f,0x4a,0x83,0x7f, + 0xb8,0x3f,0x76,0x26,0x7f,0xc8,0x93,0x99,0xfc,0x01,0x24,0x7f,0x24,0x75,0xec,0x8e, + 0x09,0xff,0xfc,0xe4,0x20,0x47,0x3b,0x98,0xf6,0xa9,0xfe,0x44,0xf1,0x8f,0x26,0xf8, + 0xe4,0xfd,0xb1,0xe9,0x4f,0x46,0x7f,0x6c,0x76,0xfd,0x31,0x11,0xff,0x68,0x03,0xed, + 0x7c,0xd8,0x38,0x70,0x92,0x9f,0x70,0xfc,0xb3,0x87,0xf1,0x3f,0x20,0x7f,0xf2,0x8c, + 0x41,0xff,0x13,0xf3,0x3f,0x75,0x22,0xfe,0xb1,0x7a,0x0c,0xf3,0x41,0xa0,0x85,0xef, + 0x30,0xe0,0x9f,0x38,0xb1,0x55,0x52,0x3e,0xef,0x4d,0xe2,0x9f,0x87,0xeb,0xd9,0xdd, + 0xc6,0xf7,0x5f,0x2d,0xdc,0x7f,0x3f,0xbd,0xff,0x49,0xfb,0x23,0x31,0xfc,0xb3,0x88, + 0xe3,0x1f,0xc3,0x7c,0x3a,0x61,0x3e,0x2c,0xe5,0x7f,0xbc,0x88,0xcf,0x94,0x0b,0x61, + 0x63,0x06,0xfc,0xe3,0x02,0xfc,0xcf,0x00,0xc3,0x3f,0x6c,0x3e,0x2c,0xf3,0x47,0xda, + 0x68,0xb1,0xb1,0x1a,0x2c,0x78,0x99,0x06,0x03,0x37,0xd2,0xef,0x67,0xfe,0x48,0x5f, + 0x63,0x63,0x41,0xa6,0x31,0xd8,0xf3,0x2a,0xd3,0xff,0xb0,0xf9,0xd4,0xcc,0x1f,0xd2, + 0x05,0xb6,0x91,0x61,0x86,0x7f,0xf8,0xfb,0x11,0x3d,0xbf,0xd8,0x58,0xab,0xe3,0xfc, + 0xd8,0xfa,0x88,0xe9,0x7f,0x14,0x7f,0xc8,0xf0,0xfe,0xc9,0x6e,0xb3,0x22,0x0c,0x1e, + 0x49,0xdc,0x3f,0xe0,0x8f,0xc4,0xae,0x17,0xf0,0x0f,0xbb,0x9e,0xeb,0x6d,0xa8,0x3f, + 0x52,0xde,0x25,0x69,0x5c,0x13,0x0f,0xaa,0x96,0xf3,0xc9,0xf1,0xcf,0x16,0x8a,0x7f, + 0x28,0x9f,0xf3,0x34,0xb4,0xde,0x67,0xb3,0xe1,0x1f,0x76,0x3d,0xd7,0x07,0x96,0x28, + 0xfe,0x19,0x82,0x8e,0x39,0x83,0x3f,0x12,0x34,0x96,0x7d,0x98,0xeb,0x7f,0x14,0xfe, + 0x07,0x1a,0x83,0x35,0x0c,0xe0,0x9f,0xa4,0xde,0x03,0x1b,0x65,0x2b,0xf9,0x11,0xfa, + 0xe3,0x6a,0xb6,0x26,0xf8,0xae,0x47,0x70,0xb0,0x51,0x5e,0xaf,0xe2,0x0f,0x29,0x2c, + 0xf3,0x22,0xb0,0x5e,0x8e,0x7f,0x4e,0x55,0x5c,0xb1,0x27,0x76,0x24,0x68,0x9f,0x8d, + 0x0c,0xff,0xbc,0x13,0x57,0x54,0x85,0xfa,0xd7,0x4c,0x15,0xed,0x0c,0x06,0xf1,0xc4, + 0x90,0x9d,0x23,0x91,0x75,0x40,0xd5,0x31,0x6b,0x54,0xad,0x7f,0xa9,0xc7,0xd0,0x52, + 0x6b,0xb0,0xb8,0x2f,0xcc,0x4f,0xa5,0x41,0xff,0x43,0x82,0x87,0xc2,0x20,0xc4,0x3f, + 0xb1,0xf1,0x54,0x95,0x88,0x7f,0x56,0x9b,0xf1,0x0f,0x2e,0xcd,0x14,0x0e,0xe7,0xdf, + 0xe7,0xfa,0x1f,0x95,0xff,0x81,0xfc,0xa3,0x14,0xfe,0xa7,0x46,0xfa,0xda,0xd7,0x48, + 0xe1,0x95,0x52,0x1f,0xdf,0x61,0xf8,0xa7,0x14,0x3d,0x0f,0xb5,0xba,0x7e,0xc9,0xde, + 0x24,0xff,0x33,0x60,0x43,0xf8,0x47,0xe8,0x30,0x8d,0x2a,0xf2,0x5d,0x50,0xfd,0x4b, + 0x80,0x01,0x49,0xc7,0x00,0x41,0xff,0xe3,0xdc,0xac,0xa0,0x9d,0x41,0x3c,0x1f,0xa4, + 0x14,0x0d,0x0a,0x79,0x2a,0x0e,0xbe,0x2a,0xf9,0x03,0x18,0xf1,0x4f,0xcc,0xff,0xfc, + 0x33,0xcd,0x0f,0xd6,0xff,0xbc,0x17,0xc8,0xb4,0xd8,0x85,0xb8,0x22,0x86,0x27,0x86, + 0xbc,0xa6,0xe0,0x1f,0x57,0xf5,0x87,0x1c,0x8f,0x19,0xa1,0x51,0xce,0xa8,0x27,0xf5, + 0x3f,0xf3,0x12,0xeb,0x3d,0x40,0x2b,0x80,0x64,0x3e,0x1a,0xdf,0x7f,0xb6,0x60,0xfd, + 0xb3,0x95,0x7c,0xed,0xea,0x4e,0x30,0xd2,0x82,0xfe,0xa7,0x1e,0x83,0x9c,0xa3,0x09, + 0xda,0xe7,0x2d,0x3a,0x31,0x04,0xf0,0x07,0xc8,0xf2,0x3e,0xae,0xf1,0x07,0x48,0x04, + 0x16,0x0b,0x54,0xfc,0x53,0x6b,0xc2,0x33,0x8d,0x60,0xfd,0x2b,0xd3,0x7c,0x10,0x5a, + 0xff,0xaa,0x32,0xe3,0x1f,0xa9,0xfe,0x95,0x01,0xff,0x28,0xf5,0x2f,0x49,0xc6,0x73, + 0x38,0xae,0x10,0x75,0x33,0xa3,0xc8,0x0f,0x24,0xfe,0xe7,0x72,0x22,0x3f,0x9b,0x37, + 0x46,0x1d,0xf7,0x0f,0xe4,0x59,0xea,0xc4,0xfa,0x57,0x51,0x2d,0x7b,0x05,0x11,0xec, + 0xd9,0x69,0x79,0x45,0xf2,0x89,0x4e,0xff,0x43,0x06,0xa5,0x05,0x44,0xf6,0xb3,0x8b, + 0x0e,0x0a,0xb9,0x5f,0xa9,0x7f,0xe5,0x55,0xd8,0xe3,0x12,0x44,0x94,0xef,0xeb,0x30, + 0xfb,0x43,0x6e,0xa6,0x8e,0x07,0xec,0xfe,0x0f,0x4a,0xf5,0xaf,0x74,0xfc,0x03,0xd4, + 0xbf,0x12,0x69,0x6f,0x93,0x14,0xe9,0x62,0xfd,0xeb,0x60,0x92,0xf6,0x89,0xe6,0xc3, + 0xb6,0xc5,0x9f,0x60,0xc7,0x80,0x3a,0x4d,0xfd,0x6b,0x30,0x9a,0x4e,0xbe,0x1e,0x1b, + 0xfb,0x3f,0x42,0x1b,0xdb,0x7f,0x9c,0xe4,0x7f,0x58,0xfd,0x6b,0x9b,0x4c,0x83,0xe0, + 0xc6,0xf9,0x29,0xb8,0xe3,0x3e,0xe1,0x0f,0xd9,0xd3,0x43,0xf5,0x3f,0x16,0xa7,0x7d, + 0xfc,0x5f,0x05,0x5f,0x2e,0xd7,0x6d,0xcf,0x5f,0xf1,0x7e,0x13,0x5c,0xab,0xe8,0x7f, + 0xea,0x93,0xdb,0x38,0xf1,0x87,0x7c,0x34,0x3f,0x52,0xc2,0xc1,0x2d,0x52,0xfd,0x6b, + 0xd7,0x13,0xae,0x5a,0xb6,0x88,0xe6,0x5b,0x8d,0x77,0x5f,0x41,0xa7,0x77,0x44,0xa3, + 0x63,0x05,0x7f,0xc8,0x99,0xcc,0x1f,0x52,0xb0,0xa5,0x65,0x8c,0xf4,0x3d,0xd9,0xfc, + 0x21,0x0f,0x24,0xae,0x2f,0x79,0x34,0xff,0x9e,0x0d,0x9d,0x77,0xdd,0x72,0xd0,0x28, + 0xd7,0xbf,0x1e,0x4f,0xac,0x77,0x9c,0x4e,0x8c,0x65,0x46,0x88,0x82,0x1e,0x3b,0x77, + 0x08,0xdd,0x09,0x9f,0x77,0xa3,0xf9,0x11,0x4b,0xc1,0x3f,0xf3,0x0c,0xfa,0xe7,0x79, + 0x80,0x3f,0xa4,0x59,0xff,0x93,0x63,0x78,0x06,0xa8,0x7f,0x41,0xef,0xfb,0xbf,0x04, + 0xeb,0x5f,0x2e,0xfc,0x5a,0xba,0x09,0xaa,0x7f,0x61,0xfc,0xe3,0xcb,0xeb,0x3d,0x43, + 0xd7,0x7b,0x06,0x9d,0xcf,0xc5,0xfe,0x87,0x6c,0xff,0xd9,0x3b,0x23,0x95,0xef,0x3a, + 0x9d,0xa9,0xfe,0xe5,0xd5,0xae,0xcd,0x7f,0x80,0x4e,0xa3,0xd6,0x4c,0xfc,0x0f,0x5a, + 0x5c,0x76,0xfa,0x76,0xe2,0x8d,0xa2,0xb1,0xa4,0xf2,0x3f,0xb9,0x58,0xe6,0x2d,0x09, + 0xed,0x50,0x95,0x17,0xa6,0xa5,0x1b,0x1d,0x4c,0xe5,0x7f,0x48,0xe0,0x84,0x69,0xb4, + 0xee,0x45,0x8b,0x64,0xfe,0xc7,0x07,0x9e,0x9f,0x28,0xc0,0x0e,0x36,0x83,0xe8,0x39, + 0xef,0x0b,0xf8,0x93,0x4c,0xf3,0xd1,0x42,0x84,0xec,0x5d,0x2e,0x5e,0xa7,0xab,0x7f, + 0x4d,0x95,0xbe,0x7f,0x29,0xaa,0x7b,0x38,0x3c,0x1f,0x2f,0xb9,0x4b,0x15,0xfe,0x07, + 0x9c,0x2f,0xb3,0x0c,0x07,0x7f,0x8a,0x8e,0x0f,0x2d,0x87,0xea,0x5f,0xea,0xf3,0xe0, + 0xa1,0x6a,0xdb,0xaa,0x40,0xff,0xe1,0x37,0x65,0xe3,0x7f,0x16,0xbe,0x5e,0xfd,0x72, + 0xd5,0x1f,0xa1,0xc7,0x00,0xfe,0x87,0xc0,0x1e,0x6b,0x90,0x07,0x97,0x50,0x4b,0xae, + 0xce,0xcb,0xa3,0xdc,0x25,0xb4,0x22,0x9d,0xff,0x61,0xfd,0x5f,0x17,0xd1,0x84,0x7b, + 0x9d,0x66,0x3e,0x9a,0xd0,0x1f,0x87,0x3f,0x59,0x89,0xf3,0xdf,0x8c,0x47,0xcf,0x97, + 0x0b,0x2b,0xaa,0x17,0x65,0xe0,0x7f,0x1c,0xac,0x28,0x38,0x8a,0xf6,0x61,0x85,0xe1, + 0x52,0x68,0x3e,0x9a,0xb4,0xde,0x25,0x5e,0xd5,0xb0,0xf5,0x05,0x0f,0x57,0xc4,0x9c, + 0x2e,0xab,0x25,0xe1,0x8f,0x2d,0xe5,0x33,0x1a,0x3b,0xb8,0x15,0x3b,0xd2,0x57,0x21, + 0x6c,0x9d,0xed,0xb4,0x58,0x0d,0xd0,0x7c,0xb4,0x04,0xed,0x53,0xeb,0x85,0xff,0xbf, + 0x57,0xd0,0x72,0x3c,0x3a,0xa4,0x0d,0xe6,0x7f,0xba,0xe4,0x83,0xa9,0x7a,0x14,0x8d, + 0xfa,0x6d,0x99,0xf8,0x1f,0x3f,0x52,0xfc,0x2e,0x40,0x1f,0xee,0x6d,0xcc,0xc4,0xff, + 0x04,0xcd,0x7e,0x3c,0xb1,0xa2,0xb3,0x31,0x1b,0xff,0xb3,0xc8,0xaf,0x1c,0xb2,0x96, + 0x55,0x44,0x13,0x4e,0xe1,0xfa,0x57,0x87,0x54,0x06,0x5a,0xe2,0x3b,0x43,0xd6,0x74, + 0x74,0xa4,0x69,0x8b,0xa1,0xfe,0x25,0x9d,0xbf,0x35,0x41,0xbe,0xc5,0x1e,0xf3,0xda, + 0xf4,0xfe,0xd8,0x42,0x80,0x0b,0x61,0x0d,0xbd,0x23,0xc5,0x89,0xa6,0xc7,0xd6,0xa5, + 0xd5,0xbf,0xa6,0x2e,0x88,0x11,0xd1,0x4b,0xf9,0x97,0xfc,0xcb,0xa8,0xf5,0x46,0xec, + 0x8f,0xa4,0x9b,0x0f,0x8b,0x83,0x7c,0x67,0x5c,0x08,0xdb,0x89,0x3f,0x71,0x1a,0xb5, + 0xfc,0x0f,0x09,0xfa,0x70,0x23,0x98,0xd3,0xec,0xf7,0x36,0x58,0xfd,0xc1,0x11,0xd7, + 0x4b,0xaf,0x7f,0x6d,0x16,0x11,0x51,0x63,0xaa,0x3f,0xb6,0xc5,0x10,0x0e,0x76,0xfc, + 0x3e,0x9a,0x99,0xff,0x79,0x10,0x07,0x4e,0x7b,0x47,0x5d,0x8a,0x3f,0xb6,0x55,0x8e, + 0x15,0xe9,0x3d,0x79,0x0f,0x95,0x36,0x2e,0x45,0xcd,0x1a,0xfd,0x0f,0xc5,0x3f,0x53, + 0x48,0x30,0x6c,0xb5,0xa1,0x7f,0x0c,0x7e,0x55,0x74,0xca,0x46,0x7f,0xec,0xc3,0x0d, + 0x83,0x05,0x1c,0xcc,0xfa,0x92,0x55,0xeb,0x77,0x97,0xbc,0x6d,0x95,0x9e,0xec,0x8f, + 0xed,0x68,0x68,0xdb,0xb1,0xaa,0x36,0xf4,0x13,0xb4,0x70,0x53,0x65,0xa7,0xc6,0x1f, + 0x5b,0x01,0x42,0xd8,0xbf,0xb1,0xb5,0xb3,0x66,0x0b,0x30,0x1f,0x16,0x38,0xdf,0x5b, + 0xf2,0xc3,0x16,0x56,0xd0,0xd5,0x16,0x13,0xf3,0x61,0x27,0x82,0xb9,0xd2,0xf9,0x15, + 0x0b,0xa1,0xeb,0x86,0xf3,0xed,0x21,0xfe,0x69,0x2d,0x17,0x86,0xf3,0x48,0xe5,0x7f, + 0xd4,0xfb,0x1f,0xb5,0x56,0xf8,0x77,0xa3,0x3f,0x2b,0x39,0x9d,0xd6,0x22,0x09,0xff, + 0x1c,0x80,0xaf,0xef,0xb4,0x6e,0x43,0xd8,0x61,0x29,0xbc,0x1e,0x81,0xfe,0xd8,0x34, + 0xc0,0x78,0xb2,0x79,0x2c,0x0c,0xd6,0xa1,0x1d,0x41,0x53,0xc9,0xf1,0x2c,0x47,0xf2, + 0xc7,0x96,0xe6,0xdd,0x57,0x93,0xf9,0x17,0xe5,0x10,0xff,0xff,0xcd,0xce,0x81,0x9e, + 0x46,0xbc,0xff,0x2c,0x4a,0xe7,0x7f,0xfa,0x31,0xde,0x0e,0xde,0xf5,0xdb,0xfb,0xe6, + 0x16,0xf3,0x5a,0x7f,0x6c,0x12,0xfc,0x17,0x16,0x42,0x0f,0x75,0x2f,0x0b,0xf1,0xd5, + 0xb7,0x0f,0x16,0xca,0xf3,0xb5,0xfe,0xd8,0x24,0xb8,0x17,0x07,0x7d,0xd6,0xc2,0xe0, + 0xde,0xf2,0xf2,0x3e,0xa7,0x98,0x3a,0x1f,0xed,0x21,0x6f,0x71,0x69,0x56,0x93,0x55, + 0x08,0x7a,0x77,0xec,0x1f,0xc2,0xd7,0x9b,0xf8,0x1f,0x6b,0x84,0xbf,0x9f,0xee,0x08, + 0xf7,0xe7,0x26,0x4f,0x9d,0x0f,0x22,0xae,0x37,0xbc,0xfe,0x15,0x1c,0x14,0xf3,0xd8, + 0x3f,0xf3,0xb1,0x52,0xa1,0x68,0xe4,0x7f,0x46,0xa7,0x8e,0x87,0xfb,0xc9,0xaa,0xd2, + 0x54,0xfc,0xc9,0x65,0x74,0x57,0xa9,0xae,0xd3,0x5c,0xff,0x9a,0xac,0x3f,0xf6,0xe4, + 0xea,0x5f,0xa2,0x4d,0xf1,0x6e,0xfa,0x7e,0x91,0x45,0xff,0x33,0x8b,0x37,0x52,0x21, + 0x65,0x3e,0x1a,0xcf,0x8f,0x40,0xd4,0xac,0xe1,0xfa,0xe7,0xdf,0xcf,0x7c,0xd8,0xa4, + 0x2d,0x79,0x5a,0xfd,0xeb,0xb5,0x74,0xfd,0xb3,0x84,0x7f,0x92,0x36,0x86,0xda,0xfa, + 0xd7,0x37,0x30,0x0c,0xb8,0x42,0xd9,0x8f,0x94,0xfa,0x17,0x1f,0x0b,0xfb,0x54,0x06, + 0xfd,0xf3,0xb5,0xd8,0x1f,0x52,0x86,0x3d,0x9f,0x66,0xfd,0x4b,0x87,0x7f,0x0c,0xf5, + 0xaf,0x0c,0xf5,0x44,0x70,0x3e,0xac,0xa1,0xff,0xeb,0xb3,0x50,0xff,0x5a,0xff,0xe9, + 0xce,0x87,0x05,0x96,0x39,0x3f,0x65,0x3e,0xc8,0xa4,0xf4,0xcf,0xf8,0xb7,0x49,0x22, + 0x28,0x5b,0xff,0xbb,0x1a,0x20,0x59,0xff,0x43,0xfd,0x21,0xdd,0xfb,0xc4,0x65,0x56, + 0x4a,0xeb,0x9d,0x94,0xfe,0x27,0xc1,0xff,0xbc,0x22,0xf4,0xbb,0xc1,0xf7,0xff,0x69, + 0xcc,0x07,0xc9,0x3e,0x1f,0x76,0x32,0xfa,0x1f,0x70,0x3e,0x08,0xa0,0x7f,0xa6,0xdf, + 0xaf,0xe0,0x9f,0xa9,0x4a,0xa0,0x9d,0x8f,0x96,0x0c,0xe2,0xc6,0xf0,0x93,0x75,0xca, + 0x7c,0x90,0xbe,0xf8,0xb4,0xf2,0xff,0x37,0xd2,0xff,0xcc,0x27,0xfe,0x90,0x63,0x77, + 0xe0,0x89,0x57,0xed,0xea,0x7c,0x10,0xd2,0xff,0x45,0xf4,0x3f,0xdb,0xa8,0xfe,0x99, + 0x04,0xc3,0x2a,0xff,0xe3,0xb1,0xd5,0xf1,0xeb,0x23,0xfd,0xb3,0x43,0x02,0x78,0x3e, + 0x08,0x7e,0x8d,0x85,0xf3,0x99,0x9c,0x0f,0xb2,0x98,0x2e,0x53,0xa3,0xff,0x81,0xe6, + 0x83,0x98,0xf6,0xdb,0x34,0xfc,0x43,0x82,0x13,0x2a,0xff,0x03,0xe3,0x9f,0x38,0x20, + 0xe7,0x6f,0x5e,0x3b,0x1f,0x36,0x8b,0xfe,0x07,0xe3,0x1f,0x2f,0xce,0x46,0x20,0xf4, + 0x7f,0xf1,0xfc,0x3c,0xf3,0x10,0x30,0x1f,0x8d,0x57,0x73,0xe8,0x32,0x07,0xe8,0x1b, + 0xf7,0x80,0x52,0xff,0xba,0xe4,0xde,0x45,0xd5,0x3e,0x7c,0xbd,0x43,0x62,0x23,0xb3, + 0x99,0xff,0x19,0x0f,0x26,0x16,0xb4,0x0e,0x14,0xba,0xf2,0xed,0xe1,0x1b,0x52,0x2b, + 0xfe,0x86,0x16,0x5e,0xff,0x02,0xf0,0xcf,0x3b,0xe8,0x78,0x5f,0xe3,0x36,0x3c,0x31, + 0xd6,0xe9,0x0d,0x1e,0x7e,0xb4,0xfa,0x5f,0x2d,0x8f,0xd7,0xbf,0x00,0xfd,0x4f,0xbf, + 0x1f,0x3e,0x18,0x78,0x10,0x61,0x33,0xea,0x0d,0x9f,0x90,0xf5,0x2d,0x96,0x65,0x9a, + 0x0f,0x12,0xa5,0xbd,0x11,0x85,0xdf,0x1f,0x5e,0xbf,0xab,0xb1,0x54,0x7d,0xa4,0xa3, + 0x85,0xed,0x27,0xff,0xd7,0xde,0xd5,0x07,0xd7,0x55,0x5c,0xf7,0xb3,0xf7,0xed,0x95, + 0xaf,0xa4,0x27,0xeb,0x3e,0xe9,0x3d,0xfb,0xc1,0x18,0xb8,0x92,0x0d,0x68,0x88,0x21, + 0x4f,0xc2,0x80,0x83,0x29,0xba,0x7a,0xfa,0xb0,0xfc,0x01,0x7e,0xd8,0xb2,0x51,0xa9, + 0xa6,0x73,0xcd,0xb8,0x0c,0x9d,0x71,0x33,0xb6,0x3b,0x0d,0x74,0x9a,0xc2,0x7d,0x92, + 0x30,0x9a,0x40,0xca,0xab,0xe3,0x0e,0x62,0x86,0x19,0x5e,0x52,0x4f,0xca,0x4c,0x68, + 0x47,0x40,0x08,0xce,0x40,0xe2,0x27,0x23,0x1b,0x07,0x13,0xaa,0x52,0x27,0xf1,0x50, + 0x0f,0xb6,0x3b,0x2e,0xe3,0xb4,0x06,0x9c,0xc1,0x09,0x76,0xc0,0xb8,0x67,0x77,0xef, + 0xc7,0xde,0xf7,0x25,0x19,0x02,0xed,0x24,0xf7,0xfc,0xe3,0xdf,0xec,0x5b,0x5d,0xef, + 0xdd,0xbb,0x7b,0xf6,0xb7,0x67,0xf7,0x9c,0x53,0xc2,0x7f,0x38,0xf8,0x00,0x52,0x85, + 0xc5,0xec,0x46,0xfd,0x2b,0x76,0x87,0xb9,0x66,0x77,0xbd,0x5e,0xea,0xff,0x15,0x18, + 0x0f,0xe7,0x61,0x0f,0x03,0x9f,0xd8,0x17,0xd8,0x7a,0xd7,0x56,0xe6,0xfc,0xcb,0x35, + 0xfb,0x30,0x70,0x82,0x5b,0xe4,0xa2,0xe2,0xc6,0x7e,0x87,0xb9,0xf8,0xd9,0xfa,0x54, + 0xa5,0xfb,0x3f,0xee,0xfd,0x67,0xe4,0xc3,0x1a,0xe3,0xb7,0x2f,0xa9,0xad,0x47,0xf0, + 0x45,0x3a,0x2a,0xd9,0x7f,0x9c,0xf9,0xf2,0x1c,0xf0,0xc0,0xce,0x94,0x97,0x20,0x48, + 0x79,0xfa,0xe7,0x98,0x6c,0xff,0xd9,0xe3,0x1e,0x0c,0x7d,0xdf,0x5e,0x6c,0x69,0x5f, + 0x57,0x2e,0x67,0x25,0x79,0x6d,0xb3,0x92,0x2c,0xc7,0x7f,0xb8,0xd9,0x87,0x81,0x29, + 0x56,0x62,0x47,0x53,0x11,0xfc,0xc9,0x4c,0x15,0x10,0x5c,0x5a,0xc9,0xfe,0xb3,0xc7, + 0xeb,0x28,0xf8,0xf2,0x34,0x8b,0x9f,0xa0,0xef,0x99,0x81,0xff,0x3c,0xb6,0x3b,0xf2, + 0x2f,0xf0,0x1a,0x76,0x54,0x54,0xe8,0xab,0x0e,0xb3,0x71,0x3c,0x52,0xe7,0xfb,0x7f, + 0x95,0xf0,0x1f,0x76,0xec,0x35,0xca,0xb6,0x51,0x8e,0x86,0xb1,0xeb,0x4d,0xe5,0x66, + 0x29,0xde,0x45,0x31,0xff,0x39,0xab,0x6c,0x87,0x11,0xdb,0xe0,0x19,0x63,0xd9,0xfb, + 0x5a,0xf5,0x49,0x69,0xff,0x85,0xfc,0x47,0x2f,0x1e,0x6f,0x51,0x65,0x04,0xf2,0x53, + 0x6d,0x29,0xe5,0x0d,0x78,0x3e,0x63,0x1c,0xab,0x4f,0xd6,0x35,0x49,0xf1,0xb1,0x4b, + 0xf9,0xcf,0xd3,0xf0,0x06,0xb4,0x4f,0xe0,0xb6,0xe2,0xb7,0xf0,0x89,0xfd,0x7c,0xbe, + 0xf1,0xbf,0x23,0x4b,0x67,0xe6,0x3f,0x1a,0x03,0xe6,0x59,0xf8,0x31,0x9d,0x05,0xff, + 0xf9,0x15,0x1b,0x36,0x08,0xe8,0x4f,0xb4,0x94,0x19,0x9d,0x89,0xff,0xfc,0x17,0xfc, + 0x30,0xdd,0x9a,0xd1,0x72,0xfc,0xbe,0xca,0x77,0xcc,0xb6,0x9d,0x33,0xf1,0x1f,0xe3, + 0x25,0xad,0x35,0xbd,0x72,0x9c,0x1f,0xdc,0xb4,0x9a,0x5a,0x6e,0x78,0x06,0xfe,0xb3, + 0xeb,0xd9,0x36,0x63,0x65,0x9d,0x8e,0xf5,0xb3,0x00,0x2b,0xb5,0xa6,0xe1,0x19,0xf8, + 0x8f,0x7d,0xd6,0xe8,0xd0,0xe6,0xb2,0x92,0x03,0xd0,0xa1,0xad,0x1e,0x96,0xfd,0xbf, + 0xca,0xf0,0x9f,0x33,0x6c,0x7e,0x99,0x0d,0xd3,0xcd,0x67,0x94,0x5f,0xb3,0xd4,0x8d, + 0xd3,0x33,0xdd,0x7f,0x36,0xce,0xb5,0x75,0xb0,0x8c,0x90,0xbc,0xa3,0x56,0x46,0x77, + 0x8c,0x54,0xe5,0x3f,0xf8,0x45,0x76,0x9b,0xad,0x6e,0xa2,0xd8,0x6b,0x74,0x6d,0x2a, + 0x10,0xff,0xa7,0x84,0xdd,0xa5,0xa7,0xe0,0x05,0xbb,0x25,0xa3,0x65,0x9a,0x0e,0xc1, + 0x1e,0xf8,0xb6,0xa5,0x0d,0xca,0xf1,0xb1,0x03,0xfc,0x47,0x11,0xf1,0x97,0xcc,0x1f, + 0xd1,0x85,0x66,0xdb,0x9b,0xca,0x19,0xfb,0x47,0xc6,0x97,0x98,0xa1,0xec,0x9d,0xaa, + 0xe7,0x5f,0xef,0xc0,0xb9,0xc2,0x73,0xe9,0x28,0x03,0xbf,0xd2,0x3a,0x32,0x8b,0x77, + 0x4a,0xfc,0xa7,0x5c,0xfc,0x1f,0xac,0x6f,0xdc,0xc2,0x1c,0xe1,0xdf,0x29,0x3d,0xff, + 0x2a,0xe1,0x3f,0x73,0xdc,0xc0,0x0b,0xc2,0x11,0xde,0x4c,0xc1,0x9a,0x82,0x14,0x3f, + 0xb9,0x84,0xff,0xc8,0xfe,0x5f,0xbf,0x44,0xd0,0xca,0x40,0xdd,0x4c,0xfc,0x47,0x44, + 0x2c,0xf9,0xa9,0xcd,0xf4,0xcf,0x2a,0x03,0xeb,0xbb,0xe3,0xad,0x84,0xff,0x3c,0xc2, + 0xc0,0x0b,0xc2,0x1e,0x72,0x84,0xf5,0x27,0xd4,0xdf,0xab,0xb4,0x79,0xf5,0xcb,0xd8, + 0x7f,0x22,0x6f,0xc1,0x6f,0xec,0x3f,0xca,0x37,0x0e,0xf2,0x92,0x76,0x16,0x88,0xec, + 0x1a,0xdf,0xff,0xab,0x0c,0xff,0x39,0xc9,0x5e,0xdc,0x8e,0xd8,0xac,0x84,0x62,0x57, + 0x54,0xca,0x8f,0xe6,0x80,0x6e,0x76,0xfe,0x75,0xfd,0x71,0x2c,0xb9,0x14,0xf6,0x31, + 0x46,0x74,0x32,0x52,0xb0,0x03,0xfc,0xa7,0x84,0xb6,0x3d,0xc4,0x88,0x8d,0x85,0x6a, + 0x13,0x01,0x20,0x08,0xf8,0xbf,0x97,0xd4,0x3f,0x0c,0xdf,0x61,0x6a,0x6a,0x5a,0x19, + 0x34,0xf8,0x1f,0xde,0x5f,0x99,0xff,0xf0,0x40,0x1c,0x27,0xc1,0xb6,0x21,0x5f,0xaf, + 0x31,0xfb,0xcf,0x31,0x43,0xaf,0x5f,0x52,0x3e,0x3f,0x9a,0x7c,0x7f,0x20,0x8f,0x6a, + 0x73,0xf7,0xc8,0x3d,0xf0,0xda,0x81,0x8e,0x63,0xf8,0xe9,0x25,0xff,0xaf,0x32,0xfc, + 0xe7,0x3d,0x1c,0x36,0x2f,0xf7,0x34,0xe6,0x57,0xed,0x42,0x0d,0x76,0x8b,0x71,0x05, + 0x48,0xfe,0x5f,0xc8,0x7f,0x92,0xa5,0xb7,0x3b,0xde,0x86,0x4e,0x35,0x3a,0xdd,0x7a, + 0x06,0x15,0xdd,0xf5,0x7b,0xa3,0xff,0x36,0x02,0x9e,0xff,0x97,0x5d,0x86,0xff,0x9c, + 0x04,0x76,0xbe,0x8c,0xf3,0x6b,0x0a,0x86,0xd9,0x42,0x9c,0x53,0x8c,0x99,0xec,0x3f, + 0x2c,0x50,0xff,0x84,0xf2,0x9f,0x74,0x0c,0x57,0x40,0x96,0xca,0x79,0x06,0xfb,0x0f, + 0xbb,0x86,0xd7,0x66,0x60,0x37,0x8e,0xd9,0x79,0x68,0x83,0x3a,0xa5,0x9a,0xfd,0x47, + 0xa4,0x2d,0x80,0xd5,0xb9,0xc8,0x31,0x7a,0x80,0x2d,0x34,0xb9,0x08,0x54,0xb3,0xff, + 0x44,0xce,0xc2,0xc7,0xa4,0x13,0xd6,0x98,0x91,0xd3,0xf0,0x31,0xed,0x84,0xc7,0xa6, + 0x67,0xef,0xff,0xf5,0xaf,0x17,0x69,0xff,0xf9,0xde,0x45,0xdd,0x7f,0xf6,0x0c,0x5f, + 0x55,0xce,0xbf,0x6a,0xcb,0x9d,0x27,0xce,0xfa,0xfe,0x33,0x0b,0xbd,0xbe,0x66,0xa2, + 0x7b,0x36,0xfe,0x5f,0x0e,0xf8,0x72,0x15,0xfb,0x4f,0x45,0x50,0x64,0xff,0xa1,0x33, + 0xdf,0x7f,0x76,0xc7,0x43,0xd5,0xfb,0xcf,0xa7,0x3e,0xcd,0xfd,0xe7,0x93,0x95,0xec, + 0x3f,0xa5,0x66,0x1f,0x0e,0x0e,0x54,0x38,0xff,0x2a,0x8a,0x0f,0x30,0xf5,0xd4,0x69, + 0xfe,0xbe,0xff,0x3f,0xed,0x3f,0xbe,0xff,0xd7,0x17,0x68,0xff,0xa1,0x9f,0xb7,0xfd, + 0xe7,0x2b,0x17,0x7d,0xff,0xf9,0x1a,0x0e,0xc8,0xe7,0x66,0xff,0xa9,0x90,0x18,0xb7, + 0xd8,0xff,0xeb,0x22,0xec,0x3f,0xb3,0xca,0xaf,0x5a,0xc9,0xff,0x6b,0x66,0xff,0xf7, + 0xb2,0xf9,0x61,0x83,0xe0,0x91,0x80,0xfd,0x47,0x2d,0x63,0xff,0x29,0xed,0xcf,0x40, + 0xfc,0x9f,0x32,0xcd,0x26,0xc1,0x44,0x78,0x92,0xfd,0x67,0x76,0xfe,0x5f,0x3e,0xff, + 0x81,0x8b,0xb4,0xff,0x54,0xf1,0xff,0x2a,0x1b,0xff,0x30,0x51,0x45,0xff,0xf8,0xf6, + 0x1f,0xef,0xfe,0x73,0x59,0xff,0xaf,0x2a,0xf1,0x7f,0xda,0xca,0xf0,0x1f,0x19,0xf0, + 0x8c,0x21,0xcd,0xb3,0xb3,0xff,0x2c,0x2c,0xe7,0xff,0x95,0xa8,0xba,0x7e,0x39,0xf6, + 0x1f,0xc9,0xff,0xeb,0x12,0x49,0xff,0x7c,0xe8,0x37,0x7b,0x31,0xb7,0x08,0x31,0x50, + 0xc6,0xfe,0x53,0xf5,0x7d,0x99,0xfd,0xc7,0xcf,0x3f,0x68,0xd1,0x6a,0xfa,0xc7,0x75, + 0xcd,0xa8,0xe0,0xff,0x55,0x16,0x4c,0x3e,0x26,0xc7,0xff,0x91,0xf9,0x0f,0x09,0x1c, + 0x9c,0x3d,0x25,0xfd,0xe1,0x89,0xf2,0xf6,0x9f,0xf7,0x45,0x76,0xf8,0x59,0xfb,0x7f, + 0x7d,0x54,0x1a,0xd8,0xa7,0xaa,0xff,0x57,0x00,0xd4,0x4d,0xf0,0x08,0x36,0x5f,0x2d, + 0xe7,0xff,0xb5,0xb9,0xe2,0x78,0x23,0x9b,0xdf,0xaa,0x4f,0xb5,0x96,0xf8,0x7f,0xb9, + 0xf6,0x9f,0x9b,0xa5,0xf3,0x3e,0x04,0x06,0x82,0xc3,0xe5,0xfc,0xbf,0xf8,0xdb,0xd1, + 0x40,0x3e,0xb8,0x35,0xd2,0x89,0x86,0xc4,0x7f,0xbe,0x29,0x46,0x4b,0xd9,0xb0,0x87, + 0xc8,0x7f,0x0a,0x45,0xf7,0x7f,0x0a,0x10,0xa4,0x3d,0xc7,0x05,0xd8,0x2e,0x2e,0x42, + 0xeb,0x8f,0x40,0x6b,0x90,0xff,0x9c,0x64,0xf1,0x0f,0x69,0xa5,0xf5,0x3d,0x3f,0x62, + 0x18,0xc2,0xbe,0xea,0x8e,0x1f,0x37,0xfe,0x8f,0x14,0x2d,0xb9,0x49,0x32,0x04,0x8d, + 0x10,0x66,0x51,0x49,0x9f,0xf5,0xf4,0x89,0x4a,0xc5,0xf8,0x99,0x5b,0x6e,0x9a,0xbc, + 0x01,0x07,0x29,0xb7,0xd8,0x94,0x8f,0xff,0x6c,0x14,0x0f,0x83,0x4f,0xd2,0x6e,0xff, + 0xf8,0xfe,0x5f,0x5e,0xbc,0xcd,0x66,0x7f,0xe0,0xe9,0x5e,0xa2,0xd8,0x83,0xd0,0x31, + 0x89,0xfc,0x4a,0x8a,0xff,0x13,0xf7,0xf8,0xf0,0xbb,0x65,0x0c,0x41,0xd8,0x3f,0x93, + 0x41,0xff,0xaf,0x32,0x7c,0xf8,0x75,0x70,0x33,0xbc,0x93,0x11,0xe1,0x41,0x29,0xc5, + 0xff,0x91,0xf2,0xc3,0x1a,0x5e,0xfc,0x67,0xc7,0x10,0xf4,0x0b,0xed,0xe1,0x42,0x4b, + 0xf0,0xfc,0xeb,0x5e,0xe0,0xfc,0x67,0xca,0xa7,0x3d,0x37,0x63,0xb7,0x7c,0x04,0x4e, + 0xc6,0xb4,0x83,0x34,0x55,0x74,0xfe,0x15,0xaf,0x36,0x1f,0xcd,0x8f,0x74,0x71,0x9e, + 0xe8,0xc7,0x3f,0x8c,0x56,0xa9,0xff,0x1e,0x1c,0x1c,0xe6,0xfd,0xef,0xc7,0x77,0x3a, + 0x50,0xac,0x4f,0x56,0x6d,0xf1,0xfd,0x4f,0x0f,0xf1,0xf3,0xf4,0x0a,0xf1,0x9f,0xcb, + 0xf2,0x9f,0x87,0xc5,0x8b,0x4b,0xf1,0x9f,0x83,0xf7,0x0f,0x8b,0xe3,0xb9,0x8d,0x08, + 0x0b,0x9b,0xcf,0x7f,0x0a,0xea,0xd3,0x7a,0x65,0xfe,0x83,0x03,0xf3,0xb9,0x2a,0xf1, + 0x0f,0x4b,0x80,0x56,0xca,0x7f,0xfc,0xf5,0xee,0x1d,0x9b,0x81,0x86,0x19,0xf8,0x4f, + 0x7c,0x91,0xeb,0xed,0xfe,0x0e,0x07,0x22,0xfe,0x1e,0x15,0x86,0x20,0xbb,0x6a,0x7e, + 0x58,0x0e,0x6a,0xa5,0xfa,0xf8,0x84,0xe1,0x62,0xff,0x2f,0x08,0xf0,0x1f,0x7c,0xbe, + 0xb8,0xff,0xb3,0xd9,0x29,0xc9,0x16,0xf9,0x7f,0x0d,0x82,0xcb,0x7f,0x9a,0xc5,0x6b, + 0x36,0x48,0xef,0x5b,0xd0,0x4e,0x97,0xc4,0x7f,0xae,0xc6,0x67,0xce,0xec,0x72,0x3c, + 0xe2,0xcb,0xda,0x7f,0x44,0x36,0xd8,0x35,0xfe,0xb5,0xf0,0xc8,0xaf,0xe1,0xa7,0xc5, + 0xe7,0x5f,0xd5,0xf3,0xc3,0x6a,0x63,0xc5,0xfc,0xe7,0x5e,0x28,0xba,0xff,0xfc,0x27, + 0x7a,0x93,0xec,0xff,0xd5,0x56,0x14,0xff,0x67,0x77,0xf9,0xfc,0xb0,0xa2,0x3f,0x4f, + 0x8c,0x09,0xff,0xaf,0xb4,0x14,0xff,0xb9,0x3c,0xff,0xf1,0xfc,0xd7,0x04,0x11,0x92, + 0xe2,0x1f,0xc2,0x2e,0xea,0x57,0x53,0x8a,0x68,0x9e,0xe2,0xda,0x7f,0xfc,0xf8,0x87, + 0xd2,0x78,0x33,0x9c,0xc4,0x7c,0xd2,0xc0,0x3b,0x50,0xec,0xff,0x25,0xe5,0x87,0xfd, + 0xc8,0xf6,0x69,0x0f,0xbd,0x4e,0xf8,0x7f,0xfd,0x5d,0x31,0xff,0x91,0xf6,0xe3,0x05, + 0x0e,0xe4,0xf8,0xab,0xa7,0x94,0x11,0xa1,0xba,0x0f,0x7a,0xe3,0x81,0xf8,0x41,0xda, + 0xa7,0x75,0x31,0x7f,0x95,0x23,0xfa,0x8b,0xe4,0x2f,0x84,0x61,0x64,0xbb,0xe3,0xff, + 0xe5,0x3e,0x1e,0xb4,0x31,0x8f,0xff,0x88,0xfc,0xb0,0x73,0x25,0xfe,0xf3,0x1b,0x78, + 0x55,0x80,0x83,0xde,0xfd,0xe7,0x36,0x5f,0xff,0xc8,0xf9,0x40,0x15,0x67,0x59,0x77, + 0xf9,0xcf,0x76,0xf7,0x7d,0xcd,0x47,0x7f,0xdc,0xef,0xac,0x56,0x6f,0xc1,0xfb,0xa3, + 0x08,0xce,0xb1,0x40,0xbe,0x3b,0x44,0xc6,0x34,0xb8,0x30,0xca,0x7f,0x0a,0xe4,0x87, + 0xf5,0xb4,0x8d,0xc8,0xef,0x76,0x33,0x8b,0xff,0x9c,0x17,0x86,0x1d,0xeb,0x07,0xce, + 0xfd,0x67,0xcf,0xfe,0x93,0x87,0x27,0x75,0xf7,0x7d,0xbd,0x8b,0x40,0xa6,0xe3,0xf6, + 0x7e,0xa8,0xd4,0xff,0x4b,0x8a,0x7f,0x38,0xc5,0x77,0xf7,0x07,0x27,0x7c,0x45,0x34, + 0xc5,0x23,0xfa,0x06,0xf8,0x8f,0xa6,0x3e,0x43,0xbd,0xf7,0xfd,0x5e,0xa9,0x61,0x87, + 0x3e,0x50,0x68,0x0c,0xc4,0x7f,0x26,0x5e,0x3c,0xde,0xe3,0x3e,0x11,0x72,0x0d,0x23, + 0xf1,0xb3,0xee,0xa3,0xdc,0xfa,0xc4,0x5f,0xef,0x4e,0xf3,0xb4,0x68,0x8d,0xa7,0x95, + 0xaf,0x53,0x56,0x12,0x3d,0x1d,0xb9,0x80,0x0b,0xfd,0xf5,0x85,0x40,0xfc,0x9f,0xc9, + 0xb8,0xe7,0xbf,0x33,0xe9,0xde,0xdf,0x10,0x2b,0x5a,0x03,0xae,0x5f,0xda,0x4b,0xb9, + 0x56,0xe1,0xff,0xe5,0x7e,0x2f,0x1b,0x16,0xc3,0x32,0x85,0xb3,0x9d,0x93,0xc1,0xb4, + 0x68,0x3c,0x70,0xf1,0x0f,0xc5,0xc2,0x17,0xe0,0x3f,0x9a,0xc3,0x7f,0x9c,0xfc,0xb0, + 0x3f,0x50,0xbe,0x39,0xfa,0xbc,0xc1,0xdd,0xa0,0x0e,0x68,0x13,0x90,0x2f,0xac,0x4a, + 0x35,0x49,0xfc,0x07,0x36,0xfb,0xe3,0x81,0xe7,0xcf,0x7d,0x39,0xf2,0x3e,0x7c,0xf4, + 0xf4,0xad,0x4e,0xa0,0x48,0x45,0xac,0xef,0x1e,0xff,0xc9,0xfa,0xf7,0x9f,0x4f,0x13, + 0x0e,0x5e,0x8e,0x3c,0xe8,0x84,0xed,0x65,0x1e,0xdf,0xb4,0x4c,0xfc,0x9f,0xa3,0xf6, + 0x4d,0xdc,0x6c,0x18,0xbc,0x48,0x1f,0x3d,0x1b,0x79,0x8f,0x1e,0x1c,0x2e,0xf2,0xff, + 0x92,0xed,0x3f,0xfa,0x32,0x04,0x11,0x97,0x08,0xd5,0xb9,0xf6,0x9f,0x80,0xff,0x97, + 0x63,0xff,0x29,0xbd,0xff,0xcc,0x8e,0x75,0x4e,0x71,0xff,0xa6,0x64,0xc0,0xff,0xcb, + 0xb1,0xff,0x44,0x26,0xf4,0x53,0xb0,0x4c,0xf6,0xff,0xfa,0x86,0x6b,0xff,0xa9,0x9b, + 0x48,0x4b,0xf6,0x9f,0xf8,0x33,0xf1,0xff,0x20,0x37,0x4e,0x36,0x4e,0x90,0x53,0xf0, + 0x37,0xe2,0x36,0xb8,0x18,0x3f,0xec,0xfc,0x45,0x3f,0xc8,0x01,0x6e,0xd5,0xdd,0xe7, + 0x1f,0xb7,0x5f,0x86,0xa3,0xb0,0x06,0x3b,0x61,0xe1,0xc7,0xb4,0xa2,0x23,0x58,0xf9, + 0xf3,0x2f,0x37,0x30,0xc5,0x62,0x8f,0x11,0xb9,0x25,0xc5,0xf9,0x2f,0xbe,0xca,0x0e, + 0x49,0x5d,0xda,0x16,0x48,0x84,0xc1,0x03,0x63,0x82,0x1f,0xff,0xd9,0xe7,0x3f,0x69, + 0xff,0xbc,0xc6,0x9d,0x2f,0xa7,0x5c,0x50,0x64,0xff,0x19,0x65,0xab,0x7f,0xda,0x3b, + 0x0f,0x92,0x3d,0xc2,0xf2,0xd7,0x8a,0xab,0x41,0xee,0xf3,0x85,0xfd,0x67,0x71,0xa1, + 0xb1,0xdd,0xe5,0x3f,0x13,0x11,0xc1,0x88,0xae,0x60,0xf1,0x9f,0x3f,0xc8,0xf3,0x40, + 0xd0,0xb2,0xfd,0xe7,0x16,0xb9,0x37,0xae,0x28,0x34,0xca,0xf1,0x7f,0xcc,0x0b,0xfa, + 0xad,0xe5,0xed,0x3f,0xb8,0x49,0x29,0x4a,0x9b,0x2b,0x25,0x3a,0x0c,0xda,0x7f,0x74, + 0xcf,0x6c,0x5e,0x7e,0x63,0xb5,0x4a,0xf6,0xff,0xaa,0x66,0xff,0x49,0x7b,0x25,0xc7, + 0x66,0xb2,0xff,0x90,0xcf,0x64,0xff,0xe9,0xae,0x98,0xff,0xa2,0x42,0x3e,0x88,0xd9, + 0xda,0x7f,0xe2,0xe7,0xc8,0xc5,0xf9,0xbf,0x97,0xe4,0x87,0x2d,0xe1,0x3f,0x81,0xf5, + 0xba,0x8c,0xfd,0x07,0x66,0xb2,0xff,0x74,0x05,0xec,0x3f,0xbb,0xb5,0xd9,0xf8,0x7f, + 0x5d,0xac,0xfd,0xc7,0xf7,0xff,0x1a,0x9f,0x4d,0xfc,0x9f,0x8b,0xb6,0xff,0xbc,0x3d, + 0x4b,0xfb,0xcf,0x82,0x67,0xc9,0x62,0xf3,0xa0,0xde,0x5a,0xe9,0xfc,0xab,0x02,0xa8, + 0x91,0xfc,0xdf,0x8b,0xe3,0xff,0xcc,0x74,0xff,0x67,0x56,0xf6,0x9f,0x2a,0xe7,0x5f, + 0x25,0x80,0x3c,0x16,0xc8,0x7f,0xf1,0xf9,0xc4,0xff,0xf1,0xec,0x3f,0x2d,0xcc,0xfe, + 0x43,0x2f,0xca,0xfe,0x53,0xfb,0xe1,0x43,0x33,0xda,0x7f,0x7c,0xff,0xaf,0xcb,0x9e, + 0x51,0x2b,0xef,0xbf,0x74,0x71,0xff,0xa7,0x3b,0x60,0xff,0x31,0x8f,0xe6,0x3a,0x8f, + 0x3b,0xf1,0x7f,0x4a,0xec,0x3f,0x06,0x27,0x42,0x45,0xf6,0x1f,0xdd,0x8f,0xf6,0xe3, + 0x35,0xfb,0xe4,0x2a,0x6e,0x11,0xd2,0x17,0x1f,0x0b,0xd8,0x7f,0xc6,0xe1,0x49,0xf2, + 0xa2,0x52,0xc1,0xec,0x73,0x84,0x3d,0x8a,0x81,0x29,0xcf,0xff,0xcb,0xa2,0xaf,0xab, + 0xc5,0xda,0xe6,0x75,0x4f,0xc3,0xc7,0x9d,0x9f,0x7c,0xfe,0xb3,0x34,0xf1,0x8c,0x97, + 0xc6,0x42,0x2f,0x56,0x9b,0xa7,0x54,0x87,0xf8,0x95,0x8f,0xff,0x43,0x8a,0x17,0x26, + 0xef,0x86,0x8c,0x1f,0xff,0x27,0xeb,0xd9,0x7f,0xaa,0xc5,0xfb,0xf5,0xd7,0xeb,0xc9, + 0xd1,0xcd,0x7a,0x79,0x7b,0x8e,0xb7,0xa2,0x3d,0x12,0xf4,0xff,0xda,0xac,0x8b,0x43, + 0x99,0xb5,0x22,0xbb,0x41,0x1d,0xaf,0xa6,0xcc,0x10,0xff,0x07,0x3b,0xe1,0x1e,0x2f, + 0xdb,0x05,0xf6,0x4f,0xcd,0xe6,0x03,0xee,0xc1,0xeb,0xde,0x80,0xff,0x97,0xad,0x6d, + 0xa6,0xff,0x23,0x3a,0xc1,0xcb,0x76,0xe1,0xdd,0xff,0x79,0x97,0x5d,0x44,0x39,0x8c, + 0xe3,0xa1,0xc8,0xfe,0x23,0x48,0x8e,0x97,0xed,0xe2,0x63,0x37,0xec,0xcf,0xc7,0xf9, + 0x0b,0x6d,0xb7,0xbe,0x16,0xe0,0x3f,0x15,0xf2,0xf1,0xe5,0x5f,0xff,0x5d,0xe7,0xe3, + 0x6b,0xd5,0xc1,0xcd,0x8e,0xa7,0x8d,0x2a,0x2d,0x30,0x86,0x25,0x1e,0xf8,0x4c,0xcf, + 0x0f,0xf3,0x21,0x7e,0x9e,0xf9,0x10,0xcd,0xa2,0x12,0xa8,0x94,0x0f,0x71,0x41,0xa1, + 0xf4,0xb1,0x0f,0xa7,0x10,0xfc,0x65,0xf9,0x7c,0x88,0x7a,0x99,0x8e,0xa4,0x0c,0x98, + 0xe5,0xfb,0x5f,0x2f,0xd3,0xed,0xa3,0x0c,0x98,0xe5,0xf3,0x21,0x46,0x0b,0x95,0xfb, + 0x3c,0xcc,0x87,0x58,0x1d,0xfc,0x21,0xd7,0xff,0x02,0xe7,0x23,0xd7,0x7e,0x4c,0x1f, + 0x3a,0x1a,0x52,0x0b,0xf3,0xc3,0xca,0xfd,0xff,0x70,0xea,0xf3,0xed,0x7f,0x7b,0xd6, + 0xfa,0x90,0x29,0x3d,0xfe,0xb4,0x30,0x3f,0x6c,0x91,0x84,0xfa,0xf0,0xf7,0xbc,0xfe, + 0xbe,0xae,0xc8,0x16,0xf3,0x88,0x7e,0x13,0xa8,0x59,0x01,0xe2,0xea,0xbe,0xc8,0x56, + 0x73,0x48,0xbf,0x2f,0xde,0xf0,0x2a,0x03,0x99,0xf9,0xf4,0xb2,0x42,0xbb,0x57,0xbf, + 0xb7,0x47,0xdd,0x4a,0x86,0xcc,0x3b,0x75,0x70,0x81,0x3a,0xc5,0x41,0xb7,0x9e,0x98, + 0x22,0xa2,0x24,0x51,0x88,0xb9,0x7c,0x15,0x6c,0x85,0x18,0x76,0xbf,0xd1,0xa4,0xd1, + 0x61,0x01,0x92,0x74,0x3b,0x69,0x41,0x30,0xdf,0x29,0xb1,0xf0,0x27,0xdb,0xf0,0x9e, + 0x6f,0x03,0xb1,0x60,0x10,0xe6,0xc1,0x4e,0x5b,0x00,0x4d,0x45,0x40,0x06,0x95,0x79, + 0x49,0x75,0x94,0x6c,0x24,0x83,0xb0,0x01,0x12,0x52,0xfd,0x7d,0x83,0x57,0xde,0x48, + 0x6e,0xb3,0xd7,0x75,0xd1,0x31,0x75,0x1b,0x19,0xb2,0xef,0x34,0x12,0x07,0x38,0x98, + 0x8f,0x80,0x20,0xc8,0x63,0x49,0xa1,0xdd,0x6b,0xcf,0xbe,0x2e,0xd3,0xd0,0x35,0xaa, + 0x10,0xfc,0x9f,0x2c,0x48,0x9a,0x35,0x40,0x86,0xc1,0xb2,0x93,0xd0,0x07,0xc4,0xa6, + 0x06,0x02,0x2c,0xb1,0xfd,0xf7,0xdd,0xd7,0x4f,0xef,0x26,0x49,0xbb,0xcf,0x80,0x31, + 0xda,0x4a,0x34,0x3b,0x6d,0xe8,0x63,0xd4,0x10,0xc0,0xa6,0x16,0xd1,0x80,0x01,0xa9, + 0xfe,0x2a,0x75,0x6d,0x76,0x20,0xbf,0xbe,0x8d,0xce,0x55,0xd3,0xd9,0xcc,0xe9,0x81, + 0xb6,0x44,0x9d,0xda,0x35,0x9a,0xc9,0x23,0xa8,0x51,0xcd,0xd1,0x8c,0x11,0xbf,0x45, + 0x05,0xbf,0x3d,0xf6,0x02,0x32,0x07,0xd6,0x17,0x12,0x19,0x7a,0x39,0xb9,0x13,0x41, + 0x6c,0x8b,0x3a,0x44,0xd6,0xc1,0x40,0x21,0x91,0x52,0xff,0x94,0x44,0x18,0x58,0x4a, + 0x3d,0xf3,0x0f,0xd6,0x67,0x1a,0xa0,0x09,0xa8,0xad,0x53,0xa6,0xf9,0x4c,0x02,0x31, + 0x80,0x6e,0x1b,0xb5,0x97,0x4e,0x28,0xaa,0x86,0xa4,0x4d,0x75,0xe8,0x92,0xfa,0xc7, + 0x52,0x34,0x60,0x1d,0x9d,0xcc,0x33,0x00,0x2d,0xa8,0x43,0x38,0x30,0x6c,0xcd,0xa8, + 0x71,0x40,0x97,0xd4,0x3f,0x19,0x75,0x11,0xf9,0x63,0xd8,0x60,0xc6,0x73,0x64,0x13, + 0x07,0x89,0x9c,0x6a,0xc1,0x61,0xd6,0xed,0x39,0xd5,0x20,0x87,0xe1,0x6b,0xd8,0xff, + 0xd2,0xfb,0x9a,0x11,0xf6,0x99,0x6e,0xc4,0x16,0x45,0x58,0xb5,0xaf,0xc1,0x6d,0x76, + 0xe4,0x6e,0x2c,0xb9,0x89,0x1d,0x25,0x21,0xb0,0xe7,0x21,0x90,0xc6,0x4f,0x9a,0xa6, + 0xec,0xa8,0xd1,0xad,0x69,0xc3,0x34,0x95,0x65,0x40,0xdf,0xcb,0x41,0x1f,0x02,0x70, + 0x4a,0xa4,0xef,0x85,0x92,0xc2,0x3d,0x55,0x84,0x8d,0x0c,0x07,0x14,0x38,0x50,0xd8, + 0x61,0x8b,0x5b,0x22,0xf5,0x8f,0x42,0x52,0xf6,0x6a,0xa3,0x99,0x8d,0x2e,0x06,0xd6, + 0x69,0x74,0x2f,0x49,0x4d,0xf2,0x92,0x83,0x0c,0xa4,0xb0,0x44,0xaa,0xbf,0x2f,0xad, + 0x5a,0xd9,0x41,0x63,0x03,0xd0,0x61,0x01,0xb4,0x04,0x82,0x49,0x0e,0x46,0x08,0x4c, + 0x0e,0xa6,0x10,0xd8,0x52,0xff,0xa4,0x79,0xcf,0xf1,0x2e,0x04,0x17,0x18,0xf8,0x46, + 0x0c,0x50,0x06,0x22,0x1a,0xc8,0xef,0xbb,0x96,0x5a,0xd9,0xa4,0xd1,0xd7,0x0f,0x3b, + 0x10,0x5c,0x82,0xaf,0x19,0x1b,0xa6,0x9b,0xd8,0xfb,0xf6,0xc7,0x76,0x50,0x83,0xbd, + 0x6f,0x7f,0xcc,0x8e,0x49,0xdf,0x4b,0x1d,0x24,0x1b,0x60,0x3d,0x8e,0x45,0x0e,0x12, + 0x76,0x02,0x4b,0x68,0x1f,0x96,0x20,0xd0,0x70,0x98,0xc6,0xec,0x84,0x29,0x8d,0x9f, + 0x1a,0xb2,0xd5,0x1e,0xb0,0x12,0xe3,0xb4,0x86,0x74,0xd9,0x19,0x2b,0x9e,0x54,0x4b, + 0x01,0x18,0xde,0x92,0x54,0x68,0xc2,0x4d,0xb3,0x66,0x00,0xb6,0x07,0xa7,0x40,0x97, + 0x98,0x0b,0xd4,0xc6,0x49,0xd1,0x4f,0x9b,0xb0,0x84,0x03,0xef,0x78,0x01,0xdb,0xd3, + 0xa7,0xc4,0xb2,0xa3,0x56,0x4b,0x32,0xd9,0x17,0xb9,0xc3,0x3e,0x64,0xdd,0x90,0x6c, + 0x60,0x60,0x8a,0x83,0x39,0x4e,0x89,0xd4,0x9e,0xa9,0x3e,0xb2,0x35,0x3b,0x64,0xdd, + 0xa9,0x5f,0xb6,0x5f,0xe5,0x20,0x99,0x60,0xe0,0xb0,0xe9,0x80,0x23,0xd6,0x7d,0xc9, + 0x84,0xac,0x4f,0xb0,0xbe,0x3d,0x64,0xdd,0x94,0x6c,0xd8,0x1f,0xd9,0x6a,0x1f,0x71, + 0x40,0x56,0x94,0x34,0xb3,0x9f,0xe6,0x27,0x1b,0x0a,0x31,0xa9,0x3e,0xe5,0x8f,0x1d, + 0x84,0xfd,0x09,0x06,0xe6,0xb3,0xc7,0xde,0xf1,0x50,0x94,0xff,0x47,0xd0,0x92,0x8d, + 0x5a,0xcb,0x93,0xeb,0x25,0xfd,0x03,0x6c,0x3c,0xf4,0xb7,0x34,0x69,0xea,0xb0,0xac, + 0x88,0x86,0x7c,0x80,0x03,0xc3,0x96,0x46,0x1b,0xeb,0xb4,0x41,0x6b,0x5e,0x32,0xbe, + 0x9d,0x6c,0xe4,0x40,0x95,0x40,0x4b,0x76,0xd0,0xda,0x90,0x54,0xa5,0xfa,0xbd,0x66, + 0x22,0x45,0x56,0xc3,0x3a,0x1c,0xff,0xea,0x16,0x32,0x04,0xcb,0x21,0x51,0xe0,0xe0, + 0x4e,0x04,0x24,0xe5,0x00,0xbf,0x3d,0xbd,0x38,0x7e,0xf2,0x5a,0x9b,0x52,0x07,0x5c, + 0xed,0xe0,0x14,0x24,0x3e,0x60,0xfa,0x87,0x01,0x69,0x3c,0xf4,0xae,0xa4,0xd6,0xb7, + 0x71,0xfc,0xd4,0xb1,0xd1,0x85,0x1f,0x2e,0xad,0xe9,0x12,0xb0,0x04,0x90,0xeb,0x77, + 0x5d,0x99,0xe9,0x1a,0x68,0x5a,0x8f,0xec,0x53,0x35,0xb3,0x19,0x63,0x40,0x8b,0x31, + 0x70,0x07,0x82,0x44,0x24,0x91,0xb1,0x51,0xff,0x68,0x09,0x90,0xfa,0xa7,0x8e,0x64, + 0x0e,0x0c,0xa4,0x12,0x1a,0x8d,0x90,0x4c,0x61,0xc0,0x48,0x44,0xd5,0x6e,0x06,0x52, + 0x08,0xd2,0x02,0x68,0xaa,0x29,0xf5,0x0f,0x98,0x66,0x4c,0xa7,0x94,0xe0,0x0e,0x2f, + 0x0d,0xa8,0x02,0x0d,0xa6,0x02,0x29,0x07,0x00,0x77,0x83,0x03,0xfc,0xf6,0xa4,0x15, + 0xc5,0xb6,0xf3,0x46,0xbf,0xad,0x28,0x60,0x33,0xed,0xa5,0x31,0x90,0x6d,0x33,0x10, + 0x00,0x2b,0x41,0x20,0xb5,0xa7,0xd7,0x9c,0x63,0x31,0x25,0x1f,0xc1,0xfe,0xb4,0x1c, + 0x6d,0x8f,0xe0,0x30,0x65,0xa0,0xc1,0x72,0xf4,0x8f,0x34,0x5f,0xcc,0xf9,0x4c,0xed, + 0xcc,0x8b,0x3c,0x6a,0x47,0x18,0xb8,0x91,0xa9,0x1d,0x8b,0x0e,0x51,0x06,0xe6,0x18, + 0x30,0x04,0xf3,0x11,0x48,0x0d,0x22,0x34,0x45,0x98,0xd2,0xb0,0x6d,0x0e,0xba,0x41, + 0x2f,0x20,0x48,0x2a,0x0c,0x28,0x06,0x61,0x0b,0x81,0x5e,0x90,0xc7,0x83,0x50,0x32, + 0x26,0x92,0xbb,0x76,0x88,0x9a,0x91,0x41,0x38,0x04,0x4b,0xa0,0x96,0x95,0x1c,0x32, + 0x17,0x21,0x50,0x4c,0x90,0xeb,0xab,0x6a,0xbb,0xb9,0x3a,0xd3,0x9c,0xdb,0x39,0x42, + 0x10,0x98,0xcd,0x71,0xfa,0x2a,0x69,0xef,0xba,0x3d,0x83,0x60,0x3f,0x69,0xe9,0x5a, + 0x9d,0x59,0xa7,0x53,0xb9,0xfe,0x42,0xf5,0xde,0xc9,0xbb,0x52,0x1b,0xc6,0xe8,0x3f, + 0xaa,0x7f,0x3e,0x79,0xd7,0x96,0x0d,0x4f,0x26,0xfe,0x89,0x95,0x18,0x1b,0x1e,0x15, + 0x20,0x85,0x40,0x6e,0x3f,0xe5,0x49,0x01,0xf1,0x3f,0x15,0x5b,0x69,0x04,0x39,0x58, + 0x24,0xda,0x23,0x00,0xff,0x49,0x92,0x1e,0x2b,0x96,0xa4,0x7d,0x04,0xd7,0x2f,0xb1, + 0x90,0xc5,0x10,0xc4,0x92,0xa3,0xdd,0x2d,0x31,0xbb,0x87,0x81,0x3e,0x04,0x72,0xfd, + 0x8d,0x99,0xd8,0x00,0x5d,0x8f,0x8b,0x89,0x8a,0xa0,0x67,0x3d,0x49,0x98,0xbd,0x19, + 0x18,0xa0,0x77,0x40,0xc2,0xec,0xca,0xe8,0x03,0xd1,0x04,0x96,0x48,0xd5,0xb5,0x16, + 0x45,0x33,0x87,0x75,0x63,0x54,0x6b,0x49,0x6b,0x99,0xe1,0xb8,0xa1,0x6a,0xc4,0x05, + 0x1b,0xd7,0xb6,0x71,0x20,0x3f,0xbe,0x0e,0x14,0x1b,0xf2,0x99,0x36,0x1c,0x78,0x8a, + 0x6d,0xe6,0xf5,0x36,0x8a,0x60,0x4c,0x00,0x70,0x4a,0xe4,0xfa,0x51,0xa5,0x19,0x46, + 0x0b,0x7f,0x96,0x4a,0xae,0x8e,0xac,0x83,0x43,0x85,0xf6,0x54,0x83,0x00,0x37,0x20, + 0xa8,0x69,0x16,0x40,0x6e,0x4f,0xad,0xba,0xad,0x6b,0x28,0xe7,0xd2,0x80,0xb1,0x79, + 0x02,0x1c,0xe1,0xc4,0xa0,0x97,0x81,0xfb,0x8c,0x7f,0x90,0xfb,0xbf,0x7e,0x65,0xfa, + 0xe7,0xb9,0x17,0x76,0x5d,0x5b,0xcb,0xc1,0xf7,0x77,0x5d,0xbb,0xa2,0x7e,0xed,0xca, + 0xe9,0x1d,0x2f,0x2c,0xfa,0xe7,0xda,0xfa,0xf4,0xca,0x43,0x1c,0xc8,0xed,0x59,0xf6, + 0xe0,0xed,0x17,0xfe,0x7d,0xcf,0x99,0x77,0xcf,0x71,0xf0,0xe2,0x99,0xf7,0xcf,0x2d, + 0xfb,0x64,0xcd,0xd1,0x6f,0x5d,0x38,0x71,0xfe,0xdc,0xb2,0x07,0xd6,0x5c,0xe0,0x00, + 0x3e,0x83,0xdc,0xfa,0x44,0xed,0x55,0xe9,0x15,0xb9,0x1d,0x9b,0x3a,0xcf,0x35,0x7e, + 0xb7,0xfb,0x42,0xee,0xb7,0x7f,0x7b,0xeb,0x53,0x2b,0x1e,0x7c,0x73,0x45,0xee,0xf1, + 0xf3,0x9d,0x17,0x56,0x5c,0xfd,0xe6,0x8a,0x33,0x8f,0x9f,0x97,0xeb,0x77,0x3e,0x70, + 0xfb,0xd1,0x6f,0xbd,0x78,0xe2,0xdd,0x73,0x9d,0x4e,0x33,0xce,0x77,0xf2,0x86,0x9d, + 0x78,0x1f,0xeb,0xdf,0x7e,0x94,0xb5,0x30,0x50,0x7f,0xe1,0xe5,0xfd,0x47,0x77,0xdc, + 0x74,0xe2,0xd1,0x8d,0xcb,0xd8,0x1f,0x3e,0x8b,0x7f,0x88,0xe0,0xed,0xe6,0x17,0x47, + 0xdf,0x3d,0xb7,0x30,0xc9,0xc1,0xa9,0xbf,0x0e,0x34,0xa8,0x75,0x8b,0xf9,0xa4,0x7e, + 0xb5,0x9e,0x2d,0x28,0x08,0xe0,0x6a,0x5a,0x3b,0x09,0x5b,0xb1,0x64,0x4e,0xbc,0x76, + 0x9f,0x82,0x20,0x73,0x35,0x25,0x72,0x7f,0x52,0x97,0x1f,0x8e,0x5e,0xe9,0xb0,0x41, + 0xe4,0x87,0x30,0x64,0xce,0xe7,0xc0,0xe1,0x87,0x52,0xfd,0x62,0x7e,0xe8,0x01,0x5c, + 0x91,0x19,0x51,0xe4,0xfc,0x30,0xd0,0x20,0xa4,0x6d,0x50,0x13,0xcb,0xd9,0x02,0x30, + 0xda,0xb6,0x91,0x01,0x8d,0x6c,0x47,0x46,0xc4,0x4a,0x02,0xe3,0x59,0xeb,0xd9,0x46, + 0xa2,0xc3,0xdd,0x0d,0xf6,0x58,0x4f,0x07,0x59,0x30,0xba,0xdc,0x88,0x1d,0xa0,0xdb, + 0xc8,0x02,0x1b,0xc1,0xeb,0x74,0x5b,0x96,0x83,0x42,0xf0,0xf9,0x0e,0x3f,0xb4,0x0c, + 0x48,0xea,0xec,0xf9,0xde,0x7f,0xc4,0x80,0xc1,0x81,0x2f,0x51,0xa4,0x85,0x38,0xad, + 0x32,0x7c,0x7e,0x21,0x2d,0xb4,0xf4,0x1c,0xbd,0x6a,0x12,0xc1,0x16,0x7d,0x9c,0x5e, + 0x45,0x6a,0xed,0xb4,0x19,0xd8,0xa3,0x7d,0x89,0xae,0xcc,0xce,0xcb,0xf7,0x8e,0xc1, + 0x75,0xf4,0xae,0x6c,0xd3,0x44,0xcf,0xd3,0xb1,0x56,0x58,0x95,0x6d,0xca,0x23,0xb8, + 0x0e,0x7f,0x42,0x30,0x2e,0xe9,0x4f,0xad,0xd0,0x08,0xcd,0x10,0x2f,0xa8,0x39,0x98, + 0x8b,0x4a,0x2b,0x8e,0xdc,0x87,0xaf,0x36,0x58,0xb2,0xd4,0x07,0xa6,0xff,0x07,0xb8, + 0x55,0xd5,0x71,0xb5,0xa7,0x5b,0x74,0x36,0x8b,0x70,0xd9,0x37,0x51,0xa5,0xf5,0xb2, + 0xdd,0x6d,0x86,0xc4,0xf5,0x1e,0x64,0x8b,0x74,0x0b,0xf1,0xcc,0xe7,0xf8,0x7c,0xd3, + 0xb1,0xbc,0x25,0xf9,0x06,0x53,0x17,0x76,0x3a,0xb6,0x25,0x35,0xc7,0xf4,0x56,0xaa, + 0x65,0x15,0x56,0x22,0xd7,0x47,0xd2,0xcb,0x95,0x24,0x53,0xf4,0x49,0x48,0x63,0x6f, + 0xd7,0xb0,0x92,0x7b,0x10,0xec,0x12,0x3f,0x5d,0x62,0x7b,0xf5,0x75,0x62,0x2a,0x16, + 0x8c,0xc3,0x55,0x06,0xea,0x2c,0x0e,0xa0,0x76,0x0c,0x36,0x31,0xc0,0xae,0x32,0xb1, + 0x9c,0xf6,0x57,0x19,0xb8,0x02,0xba,0x62,0x32,0x7e,0xc8,0x49,0x91,0x2e,0xf3,0xc3, + 0x31,0x06,0x72,0x7b,0x97,0x88,0x92,0x9c,0xbf,0x9e,0xb2,0x37,0x2f,0xe1,0x87,0x66, + 0x11,0x30,0x0b,0x9e,0x7d,0xde,0xc4,0xb7,0x4c,0x71,0x92,0xa6,0x0f,0x3b,0x00,0x5e, + 0xa1,0x0e,0xd8,0x2b,0x4a,0xa2,0x92,0xfe,0x37,0x7b,0x4d,0xc1,0xdf,0xd8,0xd1,0x25, + 0x02,0x40,0xfe,0x36,0xc2,0x7a,0xc0,0x60,0x44,0x4c,0xfc,0x44,0x91,0xbf,0x79,0xed, + 0x21,0x12,0x3f,0xf4,0x40,0xaa,0xa8,0xc4,0x7f,0x7e,0x86,0xa4,0xc5,0x43,0x18,0x7b, + 0x14,0x20,0xc6,0x5e,0xdc,0x01,0xa2,0xa4,0xa8,0x3d,0xf8,0x21,0xf1,0x8b,0x02,0x38, + 0x20,0x86,0xdb,0x00,0x07,0xb8,0x3f,0xa5,0xbd,0xf6,0xf4,0xe3,0xb8,0xed,0xb2,0xe3, + 0x96,0xca,0x06,0xf0,0x56,0x5b,0xb7,0x68,0x92,0xb0,0x92,0x20,0xf0,0x87,0x4f,0x3f, + 0xb0,0x91,0xef,0xf1,0x5b,0x6f,0xaf,0x14,0x04,0x20,0xb5,0x67,0x03,0xb2,0x41,0xe4, + 0x87,0x83,0xda,0x06,0x25,0x66,0xff,0xcc,0xe5,0x87,0x03,0x2e,0x10,0xfc,0xd0,0x5f, + 0xdf,0x09,0xe3,0x6f,0x0b,0xac,0xe5,0x7a,0x6c,0xbf,0x00,0xc9,0xd8,0xfe,0x9a,0xbf, + 0x22,0x08,0x32,0xb1,0x43,0x74,0x2b,0x59,0x60,0x2e,0x1f,0xbc,0x44,0x7a,0x5f,0xd2, + 0x87,0xb4,0xf0,0x49,0xeb,0xea,0x24,0xd9,0xaf,0x08,0x50,0xbb,0x1f,0x5c,0xe0,0x94, + 0x48,0xfa,0x27,0xd3,0xdb,0xa7,0xb6,0x73,0xda,0x09,0x12,0xff,0xbc,0xc1,0x66,0x8c, + 0x31,0xf1,0xf3,0x84,0xa0,0x8e,0xfa,0x5e,0x69,0xfc,0x34,0x11,0x8b,0x69,0x1b,0xc6, + 0x87,0x0d,0x7b,0x85,0xd0,0x3f,0x9b,0x78,0x89,0xab,0x88,0xfa,0xd5,0x82,0xd7,0x43, + 0x26,0x0e,0xe0,0x8d,0x76,0xd2,0xaa,0x19,0xd7,0xbf,0x8b,0xe0,0x52,0xab,0x26,0x49, + 0xb6,0xab,0xbc,0x04,0x81,0xf8,0x29,0x29,0xeb,0x9f,0x5e,0x8b,0xde,0xdf,0x32,0x17, + 0x77,0x68,0x90,0x1f,0x5d,0x4a,0x2e,0x47,0x10,0x3b,0xb6,0xe8,0x7e,0x04,0xcb,0x11, + 0x50,0x07,0x48,0xe3,0x99,0xac,0x45,0x36,0x88,0xfd,0x8f,0xed,0xc1,0xd1,0x72,0x09, + 0x7e,0x08,0x9c,0x1d,0x9b,0x18,0x2d,0xec,0x27,0x3b,0x04,0x51,0xec,0x97,0xf4,0x0f, + 0x8e,0x37,0x64,0x83,0x7c,0xfc,0x7c,0x83,0xb1,0xc1,0x7c,0x5f,0x80,0x1f,0x3a,0x40, + 0xaa,0x8f,0xf3,0xcb,0xec,0x8a,0xeb,0xbd,0x38,0x5d,0x68,0x26,0xab,0x1b,0xbd,0x1a, + 0x72,0x29,0x13,0x41,0x0f,0x02,0x2a,0x00,0x01,0xa9,0x7f,0x70,0xbe,0x14,0xe2,0x1d, + 0xb8,0xf3,0xa8,0xc3,0x09,0x15,0x9f,0x20,0x51,0xd2,0x0d,0x99,0x42,0x3c,0xa5,0x22, + 0x30,0x1c,0x60,0xfa,0xcf,0x47,0x65,0xa1,0xeb,0x9c,0x1f,0xda,0x66,0x2b,0xaa,0x1d, + 0x82,0xfc,0xd0,0x74,0x89,0xa2,0x0b,0xe4,0xf1,0x93,0x6e,0x6d,0x62,0xfc,0x50,0x1b, + 0x57,0x5a,0x91,0x93,0x75,0xb4,0x70,0x7e,0x38,0x06,0x86,0x51,0x37,0x86,0x25,0x79, + 0xc6,0x0f,0xc7,0xa4,0xf6,0x10,0x57,0xff,0x24,0x85,0xfe,0xe9,0x73,0xf5,0x0f,0x03, + 0x8b,0x70,0x9c,0x2b,0x4c,0xff,0x48,0xfd,0x63,0x72,0x25,0x53,0x63,0x8e,0xe5,0x50, + 0x7b,0x3f,0x21,0xd4,0xce,0x16,0x6d,0x9c,0xa0,0x22,0xca,0x39,0x1a,0xa9,0x4b,0x9e, + 0x5f,0x16,0x7e,0x26,0x54,0xb5,0xd8,0x26,0x1b,0x81,0x86,0x5b,0xeb,0x63,0x70,0xaf, + 0x86,0x5f,0x70,0x38,0x77,0x6c,0xd1,0xd2,0xda,0xb9,0x0a,0x7e,0x41,0x7f,0xbe,0x67, + 0x80,0xc0,0x57,0xac,0xb9,0x5b,0x22,0x2c,0x8c,0x54,0xca,0x8c,0xea,0x11,0x0a,0xaf, + 0x22,0x31,0xe3,0x60,0x9f,0x21,0x4a,0x6c,0xa9,0x3d,0xc8,0xdf,0x96,0x98,0x0d,0x99, + 0x48,0x26,0xb7,0x13,0xda,0xcd,0x06,0x33,0x32,0x00,0x3f,0xa3,0xed,0xfd,0xd1,0x4c, + 0x24,0x0e,0xbf,0xc0,0x12,0x06,0xf4,0xbd,0x52,0x7b,0xba,0x29,0xee,0x46,0x53,0x7d, + 0x49,0x40,0xb5,0x33,0x99,0x4c,0xf5,0x45,0x63,0x7f,0xef,0x82,0xc7,0x5d,0x20,0xeb, + 0x1f,0x13,0xf9,0x61,0xb2,0xe0,0x1e,0x9e,0x54,0xb2,0x23,0xfa,0xfd,0xd3,0x8f,0xfc, + 0x50,0x43,0x7e,0x68,0xdb,0x9b,0xee,0x66,0x44,0xd1,0x88,0x8d,0x53,0x87,0x16,0x7a, + 0x40,0x1e,0x3f,0x66,0xaf,0x1a,0x4b,0xd4,0xf4,0x22,0x5d,0xee,0xc9,0xc4,0xe2,0xb4, + 0x97,0xc4,0x4c,0x13,0xd5,0x0e,0x15,0xfa,0x87,0x95,0x00,0x31,0xa5,0xf1,0xa3,0x31, + 0x96,0xea,0x6a,0x3e,0x7d,0x58,0xc5,0x61,0x60,0xe0,0x30,0x18,0x16,0x1b,0x07,0x3e, + 0x1e,0xb2,0x20,0x09,0xa3,0x85,0x90,0x37,0x83,0xfc,0x90,0x83,0x1e,0xaf,0x44,0x1e, + 0x3f,0xb7,0x2d,0x5c,0x67,0x8e,0x4e,0x6f,0x5c,0x32,0x7e,0x5b,0xcd,0x3a,0xf3,0xd0, + 0xb4,0xb1,0xa4,0xe1,0x36,0xb2,0xce,0x1c,0x98,0xbe,0x01,0x41,0x84,0x95,0x20,0x90, + 0xda,0x43,0xfa,0xe9,0xb6,0xae,0x05,0x39,0x5c,0xf4,0x7f,0xf2,0xb0,0x43,0x03,0x3c, + 0x3e,0xc0,0x01,0x2c,0x37,0x24,0xfd,0x83,0xeb,0xb5,0xcf,0x0f,0x57,0xca,0xfc,0x70, + 0x57,0x05,0x7e,0xd8,0xe9,0xf3,0xc3,0x35,0x32,0x3f,0x3c,0xf3,0x3b,0xe2,0x87,0x57, + 0x32,0x5a,0xf8,0xcb,0xdc,0x85,0xf3,0x9d,0xe7,0x38,0x51,0x44,0x7e,0xf8,0x44,0x6d, + 0x90,0x1f,0x9e,0x90,0xeb,0xf3,0xff,0xfd,0xc3,0x13,0x58,0xff,0x13,0x4e,0x14,0x91, + 0x1f,0x3e,0x50,0xc4,0x0f,0x03,0xed,0x59,0xe6,0xf2,0xc3,0x85,0x97,0xdf,0x7e,0x74, + 0x47,0x3b,0x23,0x96,0xf7,0x17,0xd5,0x3f,0xfe,0xe9,0x5b,0x9f,0x02,0x83,0xe0,0xfc, + 0xc6,0x7f,0xbb,0xa3,0x9f,0xfe,0x29,0xa1,0x84,0x12,0x4a,0x28,0xa1,0x84,0x12,0x4a, + 0x28,0xa1,0x84,0x12,0xca,0xef,0xbb,0xf0,0xbd,0x03,0x0d,0xf7,0x0e,0xa1,0x84,0x12, + 0x4a,0x28,0xa1,0x84,0x12,0x4a,0x28,0xa1,0x84,0x12,0x4a,0x75,0xe1,0x7b,0x87,0x9a, + 0x70,0xef,0x10,0x4a,0x28,0xa1,0x84,0x12,0x4a,0x28,0xa1,0x84,0x12,0x4a,0x28,0xa1, + 0x54,0x17,0xbe,0x77,0xd0,0xf8,0xde,0xe1,0xff,0xba,0x29,0xa1,0x84,0x12,0x4a,0x28, + 0xa1,0x84,0x12,0x4a,0x28,0xa1,0x84,0x12,0xca,0x17,0x28,0x29,0x16,0x72,0x19,0x5e, + 0xf9,0x20,0x05,0x36,0xf3,0x62,0x8a,0xa4,0xc0,0xbc,0xe8,0xf3,0x04,0xe7,0x6f,0xd5, + 0x14,0xe4,0x89,0xff,0xcc,0xe3,0x77,0x15,0xd7,0xfb,0x5f,0x2b,0x92,0xad,0x46,0xf1, + 0x33,0x01,0x00, diff --git a/board/dave/PPChameleonEVB/u-boot.lds b/board/dave/PPChameleonEVB/u-boot.lds new file mode 100644 index 0000000..1ba6d17 --- /dev/null +++ b/board/dave/PPChameleonEVB/u-boot.lds @@ -0,0 +1,147 @@ +/* + * (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 + */ + +OUTPUT_ARCH(powerpc) +SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib); +/* Do we need any of these for elf? + __DYNAMIC = 0; */ +SECTIONS +{ + .resetvec 0xFFFFFFFC : + { + *(.resetvec) + } = 0xffff + + /* Read-only sections, merged into text segment: */ + . = + SIZEOF_HEADERS; + .interp : { *(.interp) } + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .rel.text : { *(.rel.text) } + .rela.text : { *(.rela.text) } + .rel.data : { *(.rel.data) } + .rela.data : { *(.rela.data) } + .rel.rodata : { *(.rel.rodata) } + .rela.rodata : { *(.rela.rodata) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } + .rel.ctors : { *(.rel.ctors) } + .rela.ctors : { *(.rela.ctors) } + .rel.dtors : { *(.rel.dtors) } + .rela.dtors : { *(.rela.dtors) } + .rel.bss : { *(.rel.bss) } + .rela.bss : { *(.rela.bss) } + .rel.plt : { *(.rel.plt) } + .rela.plt : { *(.rela.plt) } + .init : { *(.init) } + .plt : { *(.plt) } + .text : + { + /* WARNING - the following is hand-optimized to fit within */ + /* the sector layout of our flash chips! XXX FIXME XXX */ + + cpu/ppc4xx/start.o (.text) + cpu/ppc4xx/traps.o (.text) + cpu/ppc4xx/interrupts.o (.text) + cpu/ppc4xx/serial.o (.text) + cpu/ppc4xx/cpu_init.o (.text) + cpu/ppc4xx/speed.o (.text) + cpu/ppc4xx/405gp_enet.o (.text) + common/dlmalloc.o (.text) + lib_generic/crc32.o (.text) + lib_ppc/extable.o (.text) + lib_generic/zlib.o (.text) + +/* . = env_offset;*/ +/* common/environment.o(.text)*/ + + *(.text) + *(.fixup) + *(.got1) + } + _etext = .; + PROVIDE (etext = .); + .rodata : + { + *(.rodata) + *(.rodata1) + } + .fini : { *(.fini) } =0 + .ctors : { *(.ctors) } + .dtors : { *(.dtors) } + + /* Read-write section, merged into data segment: */ + . = (. + 0x00FF) & 0xFFFFFF00; + _erotext = .; + PROVIDE (erotext = .); + .reloc : + { + *(.got) + _GOT2_TABLE_ = .; + *(.got2) + _FIXUP_TABLE_ = .; + *(.fixup) + } + __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2; + __fixup_entries = (. - _FIXUP_TABLE_)>>2; + + .data : + { + *(.data) + *(.data1) + *(.sdata) + *(.sdata2) + *(.dynamic) + CONSTRUCTORS + } + _edata = .; + PROVIDE (edata = .); + + __u_boot_cmd_start = .; + .u_boot_cmd : { *(.u_boot_cmd) } + __u_boot_cmd_end = .; + + + __start___ex_table = .; + __ex_table : { *(__ex_table) } + __stop___ex_table = .; + + . = ALIGN(256); + __init_begin = .; + .text.init : { *(.text.init) } + .data.init : { *(.data.init) } + . = ALIGN(256); + __init_end = .; + + __bss_start = .; + .bss : + { + *(.sbss) *(.scommon) + *(.dynbss) + *(.bss) + *(COMMON) + } + _end = . ; + PROVIDE (end = .); +} diff --git a/board/dave/common/flash.c b/board/dave/common/flash.c new file mode 100644 index 0000000..3cdbaa9 --- /dev/null +++ b/board/dave/common/flash.c @@ -0,0 +1,681 @@ +/* + * (C) Copyright 2001 + * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com + * + * 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 <common.h> +#include <ppc4xx.h> +#include <asm/processor.h> + +flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */ + +/*----------------------------------------------------------------------- + * Functions + */ +static int write_word (flash_info_t *info, ulong dest, ulong data); + +/*----------------------------------------------------------------------- + */ +static void flash_get_offsets (ulong base, flash_info_t *info) +{ + int i; + short n; + + /* set up sector start address table */ + if (((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_SST) || + ((info->flash_id & FLASH_TYPEMASK) == FLASH_AM640U)) { + for (i = 0; i < info->sector_count; i++) + info->start[i] = base + (i * 0x00010000); + } else if (((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL322B) || + ((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL323B) || + ((info->flash_id & FLASH_TYPEMASK) == FLASH_AM320B) || + ((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL324B)) { + /* set sector offsets for bottom boot block type */ + for (i=0; i<8; ++i) { /* 8 x 8k boot sectors */ + info->start[i] = base; + base += 8 << 10; + } + while (i < info->sector_count) { /* 64k regular sectors */ + info->start[i] = base; + base += 64 << 10; + ++i; + } + } else if (((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL322T) || + ((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL323T) || + ((info->flash_id & FLASH_TYPEMASK) == FLASH_AM320T) || + ((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL324T)) { + /* set sector offsets for top boot block type */ + base += info->size; + i = info->sector_count; + for (n=0; n<8; ++n) { /* 8 x 8k boot sectors */ + base -= 8 << 10; + --i; + info->start[i] = base; + } + while (i > 0) { /* 64k regular sectors */ + base -= 64 << 10; + --i; + info->start[i] = base; + } + } else { + if (info->flash_id & FLASH_BTYPE) { + /* set sector offsets for bottom boot block type */ + info->start[0] = base + 0x00000000; + info->start[1] = base + 0x00004000; + info->start[2] = base + 0x00006000; + info->start[3] = base + 0x00008000; + for (i = 4; i < info->sector_count; i++) { + info->start[i] = base + (i * 0x00010000) - 0x00030000; + } + } else { + /* set sector offsets for top boot block type */ + i = info->sector_count - 1; + info->start[i--] = base + info->size - 0x00004000; + info->start[i--] = base + info->size - 0x00006000; + info->start[i--] = base + info->size - 0x00008000; + for (; i >= 0; i--) { + info->start[i] = base + i * 0x00010000; + } + } + } +} + +/*----------------------------------------------------------------------- + */ +void flash_print_info (flash_info_t *info) +{ + int i; + int k; + int size; + int erased; + volatile unsigned long *flash; + + if (info->flash_id == FLASH_UNKNOWN) { + printf ("missing or unknown FLASH type\n"); + return; + } + + switch (info->flash_id & FLASH_VENDMASK) { + case FLASH_MAN_AMD: printf ("AMD "); break; + case FLASH_MAN_FUJ: printf ("FUJITSU "); break; + case FLASH_MAN_SST: printf ("SST "); break; + case FLASH_MAN_STM: printf ("ST "); break; + default: printf ("Unknown Vendor "); break; + } + + switch (info->flash_id & FLASH_TYPEMASK) { + case FLASH_AM400B: printf ("AM29LV400B (4 Mbit, bottom boot sect)\n"); + break; + case FLASH_AM400T: printf ("AM29LV400T (4 Mbit, top boot sector)\n"); + break; + case FLASH_AM800B: printf ("AM29LV800B (8 Mbit, bottom boot sect)\n"); + break; + case FLASH_AM800T: printf ("AM29LV800T (8 Mbit, top boot sector)\n"); + break; + case FLASH_AM160B: printf ("AM29LV160B (16 Mbit, bottom boot sect)\n"); + break; + case FLASH_AM160T: printf ("AM29LV160T (16 Mbit, top boot sector)\n"); + break; + case FLASH_AM320T: printf ("AM29LV320T (32 M, top sector)\n"); + break; + case FLASH_AM320B: printf ("AM29LV320B (32 M, bottom sector)\n"); + break; + case FLASH_AMDL322T: printf ("AM29DL322T (32 M, top sector)\n"); + break; + case FLASH_AMDL322B: printf ("AM29DL322B (32 M, bottom sector)\n"); + break; + case FLASH_AMDL323T: printf ("AM29DL323T (32 M, top sector)\n"); + break; + case FLASH_AMDL323B: printf ("AM29DL323B (32 M, bottom sector)\n"); + break; + case FLASH_AM640U: printf ("AM29LV640D (64 M, uniform sector)\n"); + break; + case FLASH_SST800A: printf ("SST39LF/VF800 (8 Mbit, uniform sector size)\n"); + break; + case FLASH_SST160A: printf ("SST39LF/VF160 (16 Mbit, uniform sector size)\n"); + break; + case FLASH_STMW320DT: printf ("M29W320DT (32 M, top sector)\n"); + break; + default: printf ("Unknown Chip Type\n"); + break; + } + + printf (" Size: %ld MB in %d Sectors\n", + info->size >> 20, info->sector_count); + + printf (" Sector Start Addresses:"); + for (i=0; i<info->sector_count; ++i) { +#ifdef CFG_FLASH_EMPTY_INFO + /* + * Check if whole sector is erased + */ + if (i != (info->sector_count-1)) + size = info->start[i+1] - info->start[i]; + else + size = info->start[0] + info->size - info->start[i]; + erased = 1; + flash = (volatile unsigned long *)info->start[i]; + size = size >> 2; /* divide by 4 for longword access */ + for (k=0; k<size; k++) + { + if (*flash++ != 0xffffffff) + { + erased = 0; + break; + } + } + + if ((i % 5) == 0) + printf ("\n "); + /* print empty and read-only info */ + printf (" %08lX%s%s", + info->start[i], + erased ? " E" : " ", + info->protect[i] ? "RO " : " "); +#else + if ((i % 5) == 0) + printf ("\n "); + printf (" %08lX%s", + info->start[i], + info->protect[i] ? " (RO)" : " "); +#endif + + } + printf ("\n"); + return; +} + +/*----------------------------------------------------------------------- + */ + + +/*----------------------------------------------------------------------- + */ + +/* + * The following code cannot be run from FLASH! + */ +static ulong flash_get_size (vu_long *addr, flash_info_t *info) +{ + short i; + short n; + CFG_FLASH_WORD_SIZE value; + ulong base = (ulong)addr; + volatile CFG_FLASH_WORD_SIZE *addr2 = (CFG_FLASH_WORD_SIZE *)addr; + + /* Write auto select command: read Manufacturer ID */ + addr2[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE)0x00AA00AA; + addr2[CFG_FLASH_ADDR1] = (CFG_FLASH_WORD_SIZE)0x00550055; + addr2[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE)0x00900090; + + value = addr2[CFG_FLASH_READ0]; + + switch (value) { + case (CFG_FLASH_WORD_SIZE)AMD_MANUFACT: + info->flash_id = FLASH_MAN_AMD; + break; + case (CFG_FLASH_WORD_SIZE)FUJ_MANUFACT: + info->flash_id = FLASH_MAN_FUJ; + break; + case (CFG_FLASH_WORD_SIZE)SST_MANUFACT: + info->flash_id = FLASH_MAN_SST; + break; + case (CFG_FLASH_WORD_SIZE)STM_MANUFACT: + info->flash_id = FLASH_MAN_STM; + break; + default: + info->flash_id = FLASH_UNKNOWN; + info->sector_count = 0; + info->size = 0; + return (0); /* no or unknown flash */ + } + + value = addr2[CFG_FLASH_READ1]; /* device ID */ + + switch (value) { + case (CFG_FLASH_WORD_SIZE)AMD_ID_LV400T: + info->flash_id += FLASH_AM400T; + info->sector_count = 11; + info->size = 0x00080000; + break; /* => 0.5 MB */ + + case (CFG_FLASH_WORD_SIZE)AMD_ID_LV400B: + info->flash_id += FLASH_AM400B; + info->sector_count = 11; + info->size = 0x00080000; + break; /* => 0.5 MB */ + + case (CFG_FLASH_WORD_SIZE)AMD_ID_LV800T: + info->flash_id += FLASH_AM800T; + info->sector_count = 19; + info->size = 0x00100000; + break; /* => 1 MB */ + + case (CFG_FLASH_WORD_SIZE)AMD_ID_LV800B: + info->flash_id += FLASH_AM800B; + info->sector_count = 19; + info->size = 0x00100000; + break; /* => 1 MB */ + + case (CFG_FLASH_WORD_SIZE)AMD_ID_LV160T: + info->flash_id += FLASH_AM160T; + info->sector_count = 35; + info->size = 0x00200000; + break; /* => 2 MB */ + + case (CFG_FLASH_WORD_SIZE)AMD_ID_LV160B: + info->flash_id += FLASH_AM160B; + info->sector_count = 35; + info->size = 0x00200000; + break; /* => 2 MB */ + + case (CFG_FLASH_WORD_SIZE)STM_ID_29W320DT: + info->flash_id += FLASH_STMW320DT; + info->sector_count = 67; + info->size = 0x00400000; break; /* => 4 MB */ + + case (CFG_FLASH_WORD_SIZE)AMD_ID_LV320T: + info->flash_id += FLASH_AM320T; + info->sector_count = 71; + info->size = 0x00400000; break; /* => 4 MB */ + + case (CFG_FLASH_WORD_SIZE)AMD_ID_LV320B: + info->flash_id += FLASH_AM320B; + info->sector_count = 71; + info->size = 0x00400000; break; /* => 4 MB */ + + case (CFG_FLASH_WORD_SIZE)AMD_ID_DL322T: + info->flash_id += FLASH_AMDL322T; + info->sector_count = 71; + info->size = 0x00400000; break; /* => 4 MB */ + + case (CFG_FLASH_WORD_SIZE)AMD_ID_DL322B: + info->flash_id += FLASH_AMDL322B; + info->sector_count = 71; + info->size = 0x00400000; break; /* => 4 MB */ + + case (CFG_FLASH_WORD_SIZE)AMD_ID_DL323T: + info->flash_id += FLASH_AMDL323T; + info->sector_count = 71; + info->size = 0x00400000; break; /* => 4 MB */ + + case (CFG_FLASH_WORD_SIZE)AMD_ID_DL323B: + info->flash_id += FLASH_AMDL323B; + info->sector_count = 71; + info->size = 0x00400000; break; /* => 4 MB */ + + case (CFG_FLASH_WORD_SIZE)AMD_ID_LV640U: + info->flash_id += FLASH_AM640U; + info->sector_count = 128; + info->size = 0x00800000; break; /* => 8 MB */ + + case (CFG_FLASH_WORD_SIZE)SST_ID_xF800A: + info->flash_id += FLASH_SST800A; + info->sector_count = 16; + info->size = 0x00100000; + break; /* => 1 MB */ + + case (CFG_FLASH_WORD_SIZE)SST_ID_xF160A: + info->flash_id += FLASH_SST160A; + info->sector_count = 32; + info->size = 0x00200000; + break; /* => 2 MB */ + + default: + info->flash_id = FLASH_UNKNOWN; + return (0); /* => no or unknown flash */ + + } + + /* set up sector start address table */ + if (((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_SST) || + ((info->flash_id & FLASH_TYPEMASK) == FLASH_AM640U)) { + for (i = 0; i < info->sector_count; i++) + info->start[i] = base + (i * 0x00010000); + } else if (((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL322B) || + ((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL323B) || + ((info->flash_id & FLASH_TYPEMASK) == FLASH_AM320B) || + ((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL324B)) { + /* set sector offsets for bottom boot block type */ + for (i=0; i<8; ++i) { /* 8 x 8k boot sectors */ + info->start[i] = base; + base += 8 << 10; + } + while (i < info->sector_count) { /* 64k regular sectors */ + info->start[i] = base; + base += 64 << 10; + ++i; + } + } else if (((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL322T) || + ((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL323T) || + ((info->flash_id & FLASH_TYPEMASK) == FLASH_AM320T) || + ((info->flash_id & FLASH_TYPEMASK) == FLASH_AMDL324T)) { + /* set sector offsets for top boot block type */ + base += info->size; + i = info->sector_count; + for (n=0; n<8; ++n) { /* 8 x 8k boot sectors */ + base -= 8 << 10; + --i; + info->start[i] = base; + } + while (i > 0) { /* 64k regular sectors */ + base -= 64 << 10; + --i; + info->start[i] = base; + } + } else if ((info->flash_id & FLASH_TYPEMASK) == FLASH_STMW320DT) { + /* set sector offsets for top boot block type */ + base += info->size; + i = info->sector_count; + /* 1 x 16k boot sector */ + base -= 16 << 10; + --i; + info->start[i] = base; + /* 2 x 8k boot sectors */ + for (n=0; n<2; ++n) { + base -= 8 << 10; + --i; + info->start[i] = base; + } + /* 1 x 32k boot sector */ + base -= 32 << 10; + --i; + info->start[i] = base; + + while (i > 0) { /* 64k regular sectors */ + base -= 64 << 10; + --i; + info->start[i] = base; + } + } else { + if (info->flash_id & FLASH_BTYPE) { + /* set sector offsets for bottom boot block type */ + info->start[0] = base + 0x00000000; + info->start[1] = base + 0x00004000; + info->start[2] = base + 0x00006000; + info->start[3] = base + 0x00008000; + for (i = 4; i < info->sector_count; i++) { + info->start[i] = base + (i * 0x00010000) - 0x00030000; + } + } else { + /* set sector offsets for top boot block type */ + i = info->sector_count - 1; + info->start[i--] = base + info->size - 0x00004000; + info->start[i--] = base + info->size - 0x00006000; + info->start[i--] = base + info->size - 0x00008000; + for (; i >= 0; i--) { + info->start[i] = base + i * 0x00010000; + } + } + } + + /* 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 */ + addr2 = (volatile CFG_FLASH_WORD_SIZE *)(info->start[i]); + if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_SST) + info->protect[i] = 0; + else + info->protect[i] = addr2[CFG_FLASH_READ2] & 1; + } + + /* + * Prevent writes to uninitialized FLASH. + */ + if (info->flash_id != FLASH_UNKNOWN) { + addr2 = (CFG_FLASH_WORD_SIZE *)info->start[0]; + *addr2 = (CFG_FLASH_WORD_SIZE)0x00F000F0; /* reset bank */ + } + + return (info->size); +} + + +/*----------------------------------------------------------------------- + */ + +int flash_erase (flash_info_t *info, int s_first, int s_last) +{ + volatile CFG_FLASH_WORD_SIZE *addr = (CFG_FLASH_WORD_SIZE *)(info->start[0]); + volatile CFG_FLASH_WORD_SIZE *addr2; + int flag, prot, sect, l_sect; + ulong start, now, last; + int i; + + if ((s_first < 0) || (s_first > s_last)) { + if (info->flash_id == FLASH_UNKNOWN) { + printf ("- missing\n"); + } else { + printf ("- no sectors to erase\n"); + } + return 1; + } + + if (info->flash_id == FLASH_UNKNOWN) { + printf ("Can't erase unknown flash type - aborted\n"); + return 1; + } + + prot = 0; + for (sect=s_first; sect<=s_last; ++sect) { + if (info->protect[sect]) { + prot++; + } + } + + if (prot) { + printf ("- Warning: %d protected sectors will not be erased!\n", + prot); + } else { + printf ("\n"); + } + + l_sect = -1; + + /* Disable interrupts which might cause a timeout here */ + flag = disable_interrupts(); + + /* Start erase on unprotected sectors */ + for (sect = s_first; sect<=s_last; sect++) { + if (info->protect[sect] == 0) { /* not protected */ + addr2 = (CFG_FLASH_WORD_SIZE *)(info->start[sect]); + if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_SST) { + addr[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE)0x00AA00AA; + addr[CFG_FLASH_ADDR1] = (CFG_FLASH_WORD_SIZE)0x00550055; + addr[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE)0x00800080; + addr[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE)0x00AA00AA; + addr[CFG_FLASH_ADDR1] = (CFG_FLASH_WORD_SIZE)0x00550055; + addr2[0] = (CFG_FLASH_WORD_SIZE)0x00500050; /* block erase */ + for (i=0; i<50; i++) + udelay(1000); /* wait 1 ms */ + } else { + if (sect == s_first) { + addr[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE)0x00AA00AA; + addr[CFG_FLASH_ADDR1] = (CFG_FLASH_WORD_SIZE)0x00550055; + addr[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE)0x00800080; + addr[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE)0x00AA00AA; + addr[CFG_FLASH_ADDR1] = (CFG_FLASH_WORD_SIZE)0x00550055; + } + addr2[0] = (CFG_FLASH_WORD_SIZE)0x00300030; /* sector erase */ + } + l_sect = sect; + } + } + + /* re-enable interrupts if necessary */ + if (flag) + enable_interrupts(); + + /* wait at least 80us - let's wait 1 ms */ + udelay (1000); + + /* + * We wait for the last triggered sector + */ + if (l_sect < 0) + goto DONE; + + start = get_timer (0); + last = start; + addr = (CFG_FLASH_WORD_SIZE *)(info->start[l_sect]); + while ((addr[0] & (CFG_FLASH_WORD_SIZE)0x00800080) != (CFG_FLASH_WORD_SIZE)0x00800080) { + if ((now = get_timer(start)) > CFG_FLASH_ERASE_TOUT) { + printf ("Timeout\n"); + return 1; + } + /* show that we're waiting */ + if ((now - last) > 1000) { /* every second */ + putc ('.'); + last = now; + } + } + +DONE: + /* reset to read mode */ + addr = (CFG_FLASH_WORD_SIZE *)info->start[0]; + addr[0] = (CFG_FLASH_WORD_SIZE)0x00F000F0; /* reset bank */ + + printf (" done\n"); + return 0; +} + +/*----------------------------------------------------------------------- + * Copy memory to flash, returns: + * 0 - OK + * 1 - write timeout + * 2 - Flash not erased + */ + +int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt) +{ + ulong cp, wp, data; + int i, l, rc; + + wp = (addr & ~3); /* get lower word aligned address */ + + /* + * handle unaligned start bytes + */ + if ((l = addr - wp) != 0) { + data = 0; + for (i=0, cp=wp; i<l; ++i, ++cp) { + data = (data << 8) | (*(uchar *)cp); + } + for (; i<4 && cnt>0; ++i) { + data = (data << 8) | *src++; + --cnt; + ++cp; + } + for (; cnt==0 && i<4; ++i, ++cp) { + data = (data << 8) | (*(uchar *)cp); + } + + if ((rc = write_word(info, wp, data)) != 0) { + return (rc); + } + wp += 4; + } + + /* + * handle word aligned part + */ + while (cnt >= 4) { + data = 0; + for (i=0; i<4; ++i) { + data = (data << 8) | *src++; + } + if ((rc = write_word(info, wp, data)) != 0) { + return (rc); + } + wp += 4; + cnt -= 4; + } + + if (cnt == 0) { + return (0); + } + + /* + * handle unaligned tail bytes + */ + data = 0; + for (i=0, cp=wp; i<4 && cnt>0; ++i, ++cp) { + data = (data << 8) | *src++; + --cnt; + } + for (; i<4; ++i, ++cp) { + data = (data << 8) | (*(uchar *)cp); + } + + return (write_word(info, wp, data)); +} + +/*----------------------------------------------------------------------- + * Write a word to Flash, returns: + * 0 - OK + * 1 - write timeout + * 2 - Flash not erased + */ +static int write_word (flash_info_t *info, ulong dest, ulong data) +{ + volatile CFG_FLASH_WORD_SIZE *addr2 = (CFG_FLASH_WORD_SIZE *)(info->start[0]); + volatile CFG_FLASH_WORD_SIZE *dest2 = (CFG_FLASH_WORD_SIZE *)dest; + volatile CFG_FLASH_WORD_SIZE *data2 = (CFG_FLASH_WORD_SIZE *)&data; + ulong start; + int flag; + int i; + + /* Check if Flash is (sufficiently) erased */ + if ((*((volatile CFG_FLASH_WORD_SIZE *)dest) & + (CFG_FLASH_WORD_SIZE)data) != (CFG_FLASH_WORD_SIZE)data) { + return (2); + } + /* Disable interrupts which might cause a timeout here */ + flag = disable_interrupts(); + + for (i=0; i<4/sizeof(CFG_FLASH_WORD_SIZE); i++) + { + addr2[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE)0x00AA00AA; + addr2[CFG_FLASH_ADDR1] = (CFG_FLASH_WORD_SIZE)0x00550055; + addr2[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE)0x00A000A0; + + dest2[i] = data2[i]; + + /* re-enable interrupts if necessary */ + if (flag) + enable_interrupts(); + + /* data polling for D7 */ + start = get_timer (0); + while ((dest2[i] & (CFG_FLASH_WORD_SIZE)0x00800080) != + (data2[i] & (CFG_FLASH_WORD_SIZE)0x00800080)) { + if (get_timer(start) > CFG_FLASH_WRITE_TOUT) { + return (1); + } + } + } + + return (0); +} + +/*----------------------------------------------------------------------- + */ diff --git a/board/dave/common/fpga.c b/board/dave/common/fpga.c new file mode 100644 index 0000000..9547325 --- /dev/null +++ b/board/dave/common/fpga.c @@ -0,0 +1,256 @@ +/* + * (C) Copyright 2001-2003 + * Matthias Fuchs, esd gmbh germany, matthias.fuchs@esd-electronics.com + * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com + * + * 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 <common.h> +#include <asm/processor.h> +#include <command.h> + +/* ------------------------------------------------------------------------- */ + +#ifdef FPGA_DEBUG +#define DBG(x...) printf(x) +#else +#define DBG(x...) +#endif /* DEBUG */ + +#define MAX_ONES 226 + +#ifdef CFG_FPGA_PRG +# define FPGA_PRG CFG_FPGA_PRG /* FPGA program pin (ppc output)*/ +# define FPGA_CLK CFG_FPGA_CLK /* FPGA clk pin (ppc output) */ +# define FPGA_DATA CFG_FPGA_DATA /* FPGA data pin (ppc output) */ +# define FPGA_DONE CFG_FPGA_DONE /* FPGA done pin (ppc input) */ +# define FPGA_INIT CFG_FPGA_INIT /* FPGA init pin (ppc input) */ +#else +# define FPGA_PRG 0x04000000 /* FPGA program pin (ppc output) */ +# define FPGA_CLK 0x02000000 /* FPGA clk pin (ppc output) */ +# define FPGA_DATA 0x01000000 /* FPGA data pin (ppc output) */ +# define FPGA_DONE 0x00800000 /* FPGA done pin (ppc input) */ +# define FPGA_INIT 0x00400000 /* FPGA init pin (ppc input) */ +#endif + +#define ERROR_FPGA_PRG_INIT_LOW -1 /* Timeout after PRG* asserted */ +#define ERROR_FPGA_PRG_INIT_HIGH -2 /* Timeout after PRG* deasserted */ +#define ERROR_FPGA_PRG_DONE -3 /* Timeout after programming */ + +#define SET_FPGA(data) out32(GPIO0_OR, data) + +#define FPGA_WRITE_1 { \ + SET_FPGA(FPGA_PRG | FPGA_DATA); /* set clock to 0 */ \ + SET_FPGA(FPGA_PRG | FPGA_DATA); /* set data to 1 */ \ + SET_FPGA(FPGA_PRG | FPGA_CLK | FPGA_DATA); /* set clock to 1 */ \ + SET_FPGA(FPGA_PRG | FPGA_CLK | FPGA_DATA);} /* set data to 1 */ + +#define FPGA_WRITE_0 { \ + SET_FPGA(FPGA_PRG | FPGA_DATA); /* set clock to 0 */ \ + SET_FPGA(FPGA_PRG); /* set data to 0 */ \ + SET_FPGA(FPGA_PRG | FPGA_CLK); /* set clock to 1 */ \ + SET_FPGA(FPGA_PRG | FPGA_CLK | FPGA_DATA);} /* set data to 1 */ + +#if 0 +static int fpga_boot (unsigned char *fpgadata, int size) +{ + int i, index, len; + int count; + +#ifdef CFG_FPGA_SPARTAN2 + int j; +#else + unsigned char b; + int bit; +#endif + + /* display infos on fpgaimage */ + index = 15; + for (i = 0; i < 4; i++) { + len = fpgadata[index]; + DBG ("FPGA: %s\n", &(fpgadata[index + 1])); + index += len + 3; + } + +#ifdef CFG_FPGA_SPARTAN2 + /* search for preamble 0xFFFFFFFF */ + while (1) { + if ((fpgadata[index] == 0xff) && (fpgadata[index + 1] == 0xff) + && (fpgadata[index + 2] == 0xff) + && (fpgadata[index + 3] == 0xff)) + break; /* preamble found */ + else + index++; + } +#else + /* search for preamble 0xFF2X */ + for (index = 0; index < size - 1; index++) { + if ((fpgadata[index] == 0xff) + && ((fpgadata[index + 1] & 0xf0) == 0x30)) + break; + } + index += 2; +#endif + + DBG ("FPGA: configdata starts at position 0x%x\n", index); + DBG ("FPGA: length of fpga-data %d\n", size - index); + + /* + * Setup port pins for fpga programming + */ + out32 (GPIO0_ODR, 0x00000000); /* no open drain pins */ + out32 (GPIO0_TCR, in32 (GPIO0_TCR) | FPGA_PRG | FPGA_CLK | FPGA_DATA); /* setup for output */ + out32 (GPIO0_OR, in32 (GPIO0_OR) | FPGA_PRG | FPGA_CLK | FPGA_DATA); /* set pins to high */ + + DBG ("%s, ", + ((in32 (GPIO0_IR) & FPGA_DONE) == 0) ? "NOT DONE" : "DONE"); + DBG ("%s\n", + ((in32 (GPIO0_IR) & FPGA_INIT) == 0) ? "NOT INIT" : "INIT"); + + /* + * Init fpga by asserting and deasserting PROGRAM* + */ + SET_FPGA (FPGA_CLK | FPGA_DATA); + + /* Wait for FPGA init line low */ + count = 0; + while (in32 (GPIO0_IR) & FPGA_INIT) { + udelay (1000); /* wait 1ms */ + /* Check for timeout - 100us max, so use 3ms */ + if (count++ > 3) { + DBG ("FPGA: Booting failed!\n"); + return ERROR_FPGA_PRG_INIT_LOW; + } + } + + DBG ("%s, ", + ((in32 (GPIO0_IR) & FPGA_DONE) == 0) ? "NOT DONE" : "DONE"); + DBG ("%s\n", + ((in32 (GPIO0_IR) & FPGA_INIT) == 0) ? "NOT INIT" : "INIT"); + + /* deassert PROGRAM* */ + SET_FPGA (FPGA_PRG | FPGA_CLK | FPGA_DATA); + + /* Wait for FPGA end of init period . */ + count = 0; + while (!(in32 (GPIO0_IR) & FPGA_INIT)) { + udelay (1000); /* wait 1ms */ + /* Check for timeout */ + if (count++ > 3) { + DBG ("FPGA: Booting failed!\n"); + return ERROR_FPGA_PRG_INIT_HIGH; + } + } + + DBG ("%s, ", + ((in32 (GPIO0_IR) & FPGA_DONE) == 0) ? "NOT DONE" : "DONE"); + DBG ("%s\n", + ((in32 (GPIO0_IR) & FPGA_INIT) == 0) ? "NOT INIT" : "INIT"); + + DBG ("write configuration data into fpga\n"); + /* write configuration-data into fpga... */ + +#ifdef CFG_FPGA_SPARTAN2 + /* + * Load uncompressed image into fpga + */ + for (i = index; i < size; i++) { + for (j = 0; j < 8; j++) { + if ((fpgadata[i] & 0x80) == 0x80) { + FPGA_WRITE_1; + } else { + FPGA_WRITE_0; + } + fpgadata[i] <<= 1; + } + } +#else /* ! CFG_FPGA_SPARTAN2 */ + /* send 0xff 0x20 */ + FPGA_WRITE_1; + FPGA_WRITE_1; + FPGA_WRITE_1; + FPGA_WRITE_1; + FPGA_WRITE_1; + FPGA_WRITE_1; + FPGA_WRITE_1; + FPGA_WRITE_1; + FPGA_WRITE_0; + FPGA_WRITE_0; + FPGA_WRITE_1; + FPGA_WRITE_0; + FPGA_WRITE_0; + FPGA_WRITE_0; + FPGA_WRITE_0; + FPGA_WRITE_0; + + /* + ** Bit_DeCompression + ** Code 1 .. maxOnes : n '1's followed by '0' + ** maxOnes + 1 .. maxOnes + 1 : n - 1 '1's no '0' + ** maxOnes + 2 .. 254 : n - (maxOnes + 2) '0's followed by '1' + ** 255 : '1' + */ + + for (i = index; i < size; i++) { + b = fpgadata[i]; + if ((b >= 1) && (b <= MAX_ONES)) { + for (bit = 0; bit < b; bit++) { + FPGA_WRITE_1; + } + FPGA_WRITE_0; + } else if (b == (MAX_ONES + 1)) { + for (bit = 1; bit < b; bit++) { + FPGA_WRITE_1; + } + } else if ((b >= (MAX_ONES + 2)) && (b <= 254)) { + for (bit = 0; bit < (b - (MAX_ONES + 2)); bit++) { + FPGA_WRITE_0; + } + FPGA_WRITE_1; + } else if (b == 255) { + FPGA_WRITE_1; + } + } +#endif /* CFG_FPGA_SPARTAN2 */ + + DBG ("%s, ", + ((in32 (GPIO0_IR) & FPGA_DONE) == 0) ? "NOT DONE" : "DONE"); + DBG ("%s\n", + ((in32 (GPIO0_IR) & FPGA_INIT) == 0) ? "NOT INIT" : "INIT"); + + /* + * Check if fpga's DONE signal - correctly booted ? + */ + + /* Wait for FPGA end of programming period . */ + count = 0; + while (!(in32 (GPIO0_IR) & FPGA_DONE)) { + udelay (1000); /* wait 1ms */ + /* Check for timeout */ + if (count++ > 3) { + DBG ("FPGA: Booting failed!\n"); + return ERROR_FPGA_PRG_DONE; + } + } + + DBG ("FPGA: Booting successful!\n"); + return 0; +} +#endif /* 0 */ diff --git a/board/dave/common/pci.c b/board/dave/common/pci.c new file mode 100644 index 0000000..f8f180c --- /dev/null +++ b/board/dave/common/pci.c @@ -0,0 +1,202 @@ +/* + * (C) Copyright 2001 + * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com + * + * 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 <common.h> +#include <ppc4xx.h> +#include <asm/processor.h> +#include <pci.h> + + +u_long pci9054_iobase; + + +#define PCI_PRIMARY_CAR (0x500000dc) /* PCI config address reg */ +#define PCI_PRIMARY_CDR (0x80000000) /* PCI config data reg */ + + +/*-----------------------------------------------------------------------------+ +| Subroutine: pci9054_read_config_dword +| Description: Read a PCI configuration register +| Inputs: +| hose PCI Controller +| dev PCI Bus+Device+Function number +| offset Configuration register number +| value Address of the configuration register value +| Return value: +| 0 Successful ++-----------------------------------------------------------------------------*/ +int pci9054_read_config_dword(struct pci_controller *hose, + pci_dev_t dev, int offset, u32* value) +{ + unsigned long conAdrVal; + unsigned long val; + + /* generate coded value for CON_ADR register */ + conAdrVal = dev | (offset & 0xfc) | 0x80000000; + + /* Load the CON_ADR (CAR) value first, then read from CON_DATA (CDR) */ + *(unsigned long *)PCI_PRIMARY_CAR = conAdrVal; + + /* Note: *pResult comes back as -1 if machine check happened */ + val = in32r(PCI_PRIMARY_CDR); + + *value = (unsigned long) val; + + out32r(PCI_PRIMARY_CAR, 0); + + if ((*(unsigned long *)0x50000304) & 0x60000000) + { + /* clear pci master/target abort bits */ + *(unsigned long *)0x50000304 = *(unsigned long *)0x50000304; + } + + return 0; +} + +/*-----------------------------------------------------------------------------+ +| Subroutine: pci9054_write_config_dword +| Description: Write a PCI configuration register. +| Inputs: +| hose PCI Controller +| dev PCI Bus+Device+Function number +| offset Configuration register number +| Value Configuration register value +| Return value: +| 0 Successful +| Updated for pass2 errata #6. Need to disable interrupts and clear the +| PCICFGADR reg after writing the PCICFGDATA reg. ++-----------------------------------------------------------------------------*/ +int pci9054_write_config_dword(struct pci_controller *hose, + pci_dev_t dev, int offset, u32 value) +{ + unsigned long conAdrVal; + + conAdrVal = dev | (offset & 0xfc) | 0x80000000; + + *(unsigned long *)PCI_PRIMARY_CAR = conAdrVal; + + out32r(PCI_PRIMARY_CDR, value); + + out32r(PCI_PRIMARY_CAR, 0); + + /* clear pci master/target abort bits */ + *(unsigned long *)0x50000304 = *(unsigned long *)0x50000304; + + return (0); +} + +/*----------------------------------------------------------------------- + */ + +#ifdef CONFIG_DASA_SIM +static void pci_dasa_sim_config_pci9054(struct pci_controller *hose, pci_dev_t dev, + struct pci_config_table *_) +{ + unsigned int iobase; + unsigned short status = 0; + unsigned char timer; + + /* + * Configure PLX PCI9054 + */ + pci_read_config_word(CFG_PCI9054_DEV_FN, PCI_COMMAND, &status); + status |= PCI_COMMAND_MASTER | PCI_COMMAND_IO | PCI_COMMAND_MEMORY; + pci_write_config_word(CFG_PCI9054_DEV_FN, PCI_COMMAND, status); + + /* Check the latency timer for values >= 0x60. + */ + pci_read_config_byte(CFG_PCI9054_DEV_FN, PCI_LATENCY_TIMER, &timer); + if (timer < 0x60) + { + pci_write_config_byte(CFG_PCI9054_DEV_FN, PCI_LATENCY_TIMER, 0x60); + } + + /* Set I/O base register. + */ + pci_write_config_dword(CFG_PCI9054_DEV_FN, PCI_BASE_ADDRESS_0, CFG_PCI9054_IOBASE); + pci_read_config_dword(CFG_PCI9054_DEV_FN, PCI_BASE_ADDRESS_0, &iobase); + + pci9054_iobase = pci_mem_to_phys(CFG_PCI9054_DEV_FN, iobase & PCI_BASE_ADDRESS_MEM_MASK); + + if (pci9054_iobase == 0xffffffff) + { + printf("Error: Can not set I/O base register.\n"); + return; + } +} +#endif + +static struct pci_config_table pci9054_config_table[] = { +#ifndef CONFIG_PCI_PNP + { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, + PCI_BUS(CFG_ETH_DEV_FN), PCI_DEV(CFG_ETH_DEV_FN), PCI_FUNC(CFG_ETH_DEV_FN), + pci_cfgfunc_config_device, { CFG_ETH_IOBASE, + CFG_ETH_IOBASE, + PCI_COMMAND_IO | PCI_COMMAND_MASTER }}, +#ifdef CONFIG_DASA_SIM + { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, + PCI_BUS(CFG_PCI9054_DEV_FN), PCI_DEV(CFG_PCI9054_DEV_FN), PCI_FUNC(CFG_PCI9054_DEV_FN), + pci_dasa_sim_config_pci9054 }, +#endif +#endif + { } +}; + +static struct pci_controller pci9054_hose = { + config_table: pci9054_config_table, +}; + +void pci_init(void) +{ + struct pci_controller *hose = &pci9054_hose; + + /* + * Register the hose + */ + hose->first_busno = 0; + hose->last_busno = 0xff; + + /* System memory space */ + pci_set_region(hose->regions + 0, + 0x00000000, 0x00000000, 0x01000000, + PCI_REGION_MEM | PCI_REGION_MEMORY); + + /* PCI Memory space */ + pci_set_region(hose->regions + 1, + 0x00000000, 0xc0000000, 0x10000000, + PCI_REGION_MEM); + + pci_set_ops(hose, + pci_hose_read_config_byte_via_dword, + pci_hose_read_config_word_via_dword, + pci9054_read_config_dword, + pci_hose_write_config_byte_via_dword, + pci_hose_write_config_word_via_dword, + pci9054_write_config_dword); + + hose->region_count = 2; + + pci_register_hose(hose); + + hose->last_busno = pci_hose_scan(hose); +} diff --git a/board/evb64260/evb64260.c b/board/evb64260/evb64260.c index 4f3032e..99717be 100644 --- a/board/evb64260/evb64260.c +++ b/board/evb64260/evb64260.c @@ -237,7 +237,7 @@ int board_pre_init (void) * on-board sram on the eval board, and updates the correct * registers to boot from the sram. (device0) */ -#ifdef CONFIG_ZUMA_V2 +#if defined(CONFIG_ZUMA_V2) || defined(CONFIG_P3G4) /* Zuma has no SRAM */ sram_boot = 0; #else @@ -265,6 +265,7 @@ int board_pre_init (void) GT_REG_WRITE(DEVICE_BANK2PARAMETERS, CFG_DEV2_PAR); #endif +#ifdef CONFIG_EVB64260 #ifdef CFG_32BIT_BOOT_PAR /* detect if we are booting from the 32 bit flash */ if (GTREGREAD(DEVICE_BOOT_BANK_PARAMETERS) & (0x3 << 20)) { @@ -280,6 +281,11 @@ int board_pre_init (void) /* 8 bit boot flash only */ GT_REG_WRITE(DEVICE_BOOT_BANK_PARAMETERS, CFG_8BIT_BOOT_PAR); #endif +#else /* CONFIG_EVB64260 not defined */ + /* We are booting from 16-bit flash. + */ + GT_REG_WRITE(DEVICE_BOOT_BANK_PARAMETERS, CFG_16BIT_BOOT_PAR); +#endif gt_cpu_config(); @@ -351,7 +357,7 @@ checkboard (void) void debug_led(int led, int mode) { -#ifndef CONFIG_ZUMA_V2 +#if !defined(CONFIG_ZUMA_V2) && !defined(CONFIG_P3G4) volatile int *addr = NULL; int dummy; diff --git a/board/evb64260/flash.c b/board/evb64260/flash.c index c897393..e6cf8eb 100644 --- a/board/evb64260/flash.c +++ b/board/evb64260/flash.c @@ -54,6 +54,7 @@ flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */ static ulong flash_get_size (int portwidth, vu_long *addr, flash_info_t *info); static int write_word (flash_info_t *info, ulong dest, ulong data); static void flash_get_offsets (ulong base, flash_info_t *info); +static flash_info_t *flash_get_info(ulong base); /*----------------------------------------------------------------------- */ @@ -72,7 +73,11 @@ flash_init (void) /* the boot flash */ base = CFG_FLASH_BASE; - size_b0 = flash_get_size(1, (vu_long *)base, &flash_info[0]); +#ifndef CFG_BOOT_FLASH_WIDTH +#define CFG_BOOT_FLASH_WIDTH 1 +#endif + size_b0 = flash_get_size(CFG_BOOT_FLASH_WIDTH, (vu_long *)base, + &flash_info[0]); printf("[%ldkB@%lx] ", size_b0/1024, base); @@ -98,6 +103,22 @@ flash_init (void) base+=size; } +#if CFG_MONITOR_BASE >= CFG_FLASH_BASE + /* monitor protection ON by default */ + flash_protect(FLAG_PROTECT_SET, + CFG_MONITOR_BASE, + CFG_MONITOR_BASE + monitor_flash_len - 1, + flash_get_info(CFG_MONITOR_BASE)); +#endif + +#ifdef CFG_ENV_IS_IN_FLASH + /* ENV protection ON by default */ + flash_protect(FLAG_PROTECT_SET, + CFG_ENV_ADDR, + CFG_ENV_ADDR + CFG_ENV_SIZE - 1, + flash_get_info(CFG_ENV_ADDR)); +#endif + flash_size = size_b0 + size_b1; return flash_size; } @@ -148,6 +169,23 @@ flash_get_offsets (ulong base, flash_info_t *info) /*----------------------------------------------------------------------- */ + +static flash_info_t *flash_get_info(ulong base) +{ + int i; + flash_info_t * info; + + for (i = 0; i < CFG_MAX_FLASH_BANKS; i ++) { + info = & flash_info[i]; + if (info->start[0] <= base && base <= info->start[0] + info->size - 1) + break; + } + + return i == CFG_MAX_FLASH_BANKS ? 0 : info; +} + +/*----------------------------------------------------------------------- + */ void flash_print_info (flash_info_t *info) { @@ -247,8 +285,11 @@ static inline void flash_cmd(int width, volatile unsigned char *addr, int offset /* 2x16 */ unsigned long cmd32=(cmd<<16)|cmd; *(volatile unsigned long *)(addr+offset*2)=cmd32; + } else if (width == 2) { + /* 1x16 */ + *(volatile unsigned short *)((unsigned short*)addr+offset)=cmd; } else { - /* 1x16 or 1x8 */ + /* 1x8 */ *(volatile unsigned char *)(addr+offset)=cmd; } } diff --git a/board/evb64260/mpsc.c b/board/evb64260/mpsc.c index 718fe05..ee623ca 100644 --- a/board/evb64260/mpsc.c +++ b/board/evb64260/mpsc.c @@ -273,7 +273,7 @@ mpsc_init(int baud) /* BRG CONFIG */ galbrg_set_baudrate(CHANNEL, baud); -#ifdef CONFIG_ZUMA_V2 +#if defined(CONFIG_ZUMA_V2) || defined(CONFIG_P3G4) galbrg_set_clksrc(CHANNEL,0x8); /* connect TCLK -> BRG */ #else galbrg_set_clksrc(CHANNEL,0); @@ -387,7 +387,7 @@ galbrg_set_baudrate(int channel, int rate) galbrg_disable(channel); -#ifdef CONFIG_ZUMA_V2 +#if defined(CONFIG_ZUMA_V2) || defined(CONFIG_P3G4) /* from tclk */ clock = (CFG_BUS_HZ/(16*rate)) - 1; #else @@ -803,6 +803,7 @@ static int galmpsc_shutdown(int mpsc) { DECLARE_GLOBAL_DATA_PTR; +#if 0 unsigned int temp; /* cause RX abort (clears RX) */ @@ -810,9 +811,11 @@ galmpsc_shutdown(int mpsc) temp |= MPSC_RX_ABORT | MPSC_TX_ABORT; temp &= ~MPSC_ENTER_HUNT; GT_REG_WRITE_MIRROR(GALMPSC_CHANNELREG_2,mpsc,GALMPSC_REG_GAP,temp); +#endif - GT_REG_WRITE(GALSDMA_0_COM_REG, 0); - GT_REG_WRITE(GALSDMA_0_COM_REG, SDMA_TX_ABORT | SDMA_RX_ABORT); + GT_REG_WRITE(GALSDMA_0_COM_REG + CHANNEL * GALSDMA_REG_DIFF, 0); + GT_REG_WRITE(GALSDMA_0_COM_REG + CHANNEL * GALSDMA_REG_DIFF, + SDMA_TX_ABORT | SDMA_RX_ABORT); /* shut down the MPSC */ GT_REG_WRITE(GALMPSC_MCONF_LOW, 0); @@ -823,14 +826,15 @@ galmpsc_shutdown(int mpsc) /* shut down the sdma engines. */ /* reset config to default */ - GT_REG_WRITE(GALSDMA_0_CONF_REG, 0x000000fc); + GT_REG_WRITE(GALSDMA_0_CONF_REG + CHANNEL * GALSDMA_REG_DIFF, + 0x000000fc); udelay(100); /* clear the SDMA current and first TX and RX pointers */ - GT_REG_WRITE(GALSDMA_0_CUR_RX_PTR, 0); - GT_REG_WRITE(GALSDMA_0_CUR_TX_PTR, 0); - GT_REG_WRITE(GALSDMA_0_FIR_TX_PTR, 0); + GT_REG_WRITE(GALSDMA_0_CUR_RX_PTR + CHANNEL * GALSDMA_REG_DIFF, 0); + GT_REG_WRITE(GALSDMA_0_CUR_TX_PTR + CHANNEL * GALSDMA_REG_DIFF, 0); + GT_REG_WRITE(GALSDMA_0_FIR_TX_PTR + CHANNEL * GALSDMA_REG_DIFF, 0); udelay(100); diff --git a/board/evb64260/sdram_init.c b/board/evb64260/sdram_init.c index 3616565..d019d22 100644 --- a/board/evb64260/sdram_init.c +++ b/board/evb64260/sdram_init.c @@ -175,7 +175,30 @@ check_dimm(uchar slot, sdram_info_t *info) return 0; } -#else /* ! CONFIG_ZUMA_V2 */ +#elif defined(CONFIG_P3G4) + +static int +check_dimm(uchar slot, sdram_info_t *info) +{ + memset(info, 0, sizeof(*info)); + + if (slot) + return 0; + + info->slot = slot; + info->banks = 1; + info->registered = 0; + info->drb_size = 4; + info->tpar = 3; + info->tras_clocks = 6; + info->burst_len = 4; +#ifdef CONFIG_ECC + info->ecc = 2; +#endif + return 0; +} + +#else /* ! CONFIG_ZUMA_V2 && ! CONFIG_P3G4*/ /* This code reads the SPD chip on the sdram and populates * the array which is passed in with the relevant information */ diff --git a/common/cmd_bdinfo.c b/common/cmd_bdinfo.c index f1adeaa..dd9a489 100644 --- a/common/cmd_bdinfo.c +++ b/common/cmd_bdinfo.c @@ -81,7 +81,7 @@ int do_bdinfo ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) for (i=0; i<6; ++i) { printf ("%c%02X", i ? ':' : ' ', bd->bi_enetaddr[i]); } -#ifdef CONFIG_PN62 +#if (defined CONFIG_PN62) || (defined CONFIG_PPCHAMELEONEVB) printf ("\neth1addr ="); for (i=0; i<6; ++i) { printf ("%c%02X", i ? ':' : ' ', bd->bi_enet1addr[i]); diff --git a/common/cmd_nand.c b/common/cmd_nand.c index ec76aa3..26cbe5d 100644 --- a/common/cmd_nand.c +++ b/common/cmd_nand.c @@ -520,7 +520,7 @@ static int NanD_WaitReady(struct nand_chip *nand, int ale_wait) else udelay(10); #else /* has functional r/b signal */ - NAND_WAIT_READY(nand); + NAND_WAIT_READY(nand); #endif return ret; } diff --git a/cpu/mpc5xxx/fec.c b/cpu/mpc5xxx/fec.c index b01e44c..557355f 100644 --- a/cpu/mpc5xxx/fec.c +++ b/cpu/mpc5xxx/fec.c @@ -809,9 +809,13 @@ int mpc5xxx_fec_initialize(bd_t * bis) { mpc5xxx_fec_priv *fec; struct eth_device *dev; + char *tmp, *end; + char env_enetaddr[6]; + int i; fec = (mpc5xxx_fec_priv *)malloc(sizeof(*fec)); dev = (struct eth_device *)malloc(sizeof(*dev)); + memset(dev, 0, sizeof *dev); fec->eth = (ethernet_regs *)MPC5XXX_FEC; fec->tbdBase = (FEC_TBD *)FEC_BD_BASE; @@ -830,6 +834,21 @@ int mpc5xxx_fec_initialize(bd_t * bis) sprintf(dev->name, "FEC ETHERNET"); eth_register(dev); + /* + * Try to set the mac address now. The fec mac address is + * a garbage after reset. When not using fec for booting + * the Linux fec driver will try to work with this garbage. + */ + tmp = getenv("ethaddr"); + if (tmp) { + for (i=0; i<6; i++) { + env_enetaddr[i] = tmp ? simple_strtoul(tmp, &end, 16) : 0; + if (tmp) + tmp = (*end) ? end+1 : end; + } + mpc5xxx_fec_set_hwaddr(fec, env_enetaddr); + } + return 1; } diff --git a/cpu/ppc4xx/cpu.c b/cpu/ppc4xx/cpu.c index 1d7c0c9..ab9b2e5 100644 --- a/cpu/ppc4xx/cpu.c +++ b/cpu/ppc4xx/cpu.c @@ -50,15 +50,15 @@ int checkcpu (void) { #if defined(CONFIG_405GP) || \ defined(CONFIG_405CR) || \ - defined(CONFIG_IOP480) || \ - defined(CONFIG_440) || \ - defined(CONFIG_405EP) + defined(CONFIG_405EP) || \ + defined(CONFIG_440) || \ + defined(CONFIG_IOP480) uint pvr = get_pvr(); #endif #if defined(CONFIG_405GP) || \ defined(CONFIG_405CR) || \ - defined(CONFIG_IOP480) || \ - defined(CONFIG_405EP) + defined(CONFIG_405EP) || \ + defined(CONFIG_IOP480) DECLARE_GLOBAL_DATA_PTR; ulong clock = gd->cpu_clk; diff --git a/cpu/ppc4xx/miiphy.c b/cpu/ppc4xx/miiphy.c index 0606ebe..e719a33 100644 --- a/cpu/ppc4xx/miiphy.c +++ b/cpu/ppc4xx/miiphy.c @@ -101,6 +101,7 @@ int miiphy_read (unsigned char addr, unsigned char reg, sta_reg = reg; /* reg address */ /* set clock (50Mhz) and read flags */ sta_reg = (sta_reg | EMAC_STACR_READ) & ~EMAC_STACR_CLK_100MHZ; + sta_reg = sta_reg | CONFIG_PHY_CLK_FREQ; sta_reg = sta_reg | (addr << 5); /* Phy address */ out32 (EMAC_STACR, sta_reg); @@ -156,6 +157,7 @@ int miiphy_write (unsigned char addr, unsigned char reg, sta_reg = reg; /* reg address */ /* set clock (50Mhz) and read flags */ sta_reg = (sta_reg | EMAC_STACR_WRITE) & ~EMAC_STACR_CLK_100MHZ; + sta_reg = sta_reg | CONFIG_PHY_CLK_FREQ; /* Set clock frequency (PLB freq. dependend) */ sta_reg = sta_reg | ((unsigned long) addr << 5); /* Phy address */ memcpy (&sta_reg, &value, 2); /* put in data */ diff --git a/cpu/ppc4xx/start.S b/cpu/ppc4xx/start.S index e3e92af..215a925 100644 --- a/cpu/ppc4xx/start.S +++ b/cpu/ppc4xx/start.S @@ -702,7 +702,8 @@ _start: /* NEVER RETURNS! */ bl board_init_f /* run first part of init code (from Flash) */ -#endif /* CONFIG_405GP || CONFIG_405CR */ +#endif /* CONFIG_405GP || CONFIG_405CR || CONFIG_405 || CONFIG_405EP */ + /*----------------------------------------------------------------------- */ /*****************************************************************************/ diff --git a/drivers/pci.c b/drivers/pci.c index b9a1b9a..c91c992 100644 --- a/drivers/pci.c +++ b/drivers/pci.c @@ -428,7 +428,7 @@ int pci_hose_scan_bus(struct pci_controller *hose, int bus) dev < PCI_BDF(bus,PCI_MAX_PCI_DEVICES-1,PCI_MAX_PCI_FUNCTIONS-1); dev += PCI_BDF(0,0,1)) { -#ifndef CONFIG_405GP /* don't skip host bridge on ppc405gp */ +#if ((!defined(CONFIG_405GP)) && (!defined(CONFIG_405EP))) /* don't skip host bridge on ppc405gp and 405ep */ /* Skip our host bridge */ if ( dev == PCI_BDF(hose->first_busno,0,0) ) continue; diff --git a/include/asm-ppc/global_data.h b/include/asm-ppc/global_data.h index 8ebaa17..f17a764 100644 --- a/include/asm-ppc/global_data.h +++ b/include/asm-ppc/global_data.h @@ -60,7 +60,7 @@ typedef struct global_data { unsigned int dp_alloc_base; unsigned int dp_alloc_top; #endif -#if defined(CONFIG_EVB64260) +#if defined(CFG_GT_6426x) unsigned int mirror_hack[16]; #endif #if defined(CONFIG_SANDPOINT) || \ diff --git a/include/asm-ppc/processor.h b/include/asm-ppc/processor.h index 726102d..feaff94 100644 --- a/include/asm-ppc/processor.h +++ b/include/asm-ppc/processor.h @@ -494,6 +494,7 @@ #define PVR_405CR_RA 0x40110041 #define PVR_405CR_RB 0x401100C5 #define PVR_405CR_RC 0x40110145 /* same as pc405gp rev e */ +#define PVR_405EP_RA 0x51210950 #define PVR_405GPR_RB 0x50910951 #define PVR_440GP_RB 0x40120440 #define PVR_440GP_RC 0x40120481 diff --git a/include/asm-ppc/u-boot.h b/include/asm-ppc/u-boot.h index 8014225..9f861ac 100644 --- a/include/asm-ppc/u-boot.h +++ b/include/asm-ppc/u-boot.h @@ -61,11 +61,11 @@ typedef struct bd_info { unsigned long bi_pcifreq; /* PCI Bus Freq, in MHz */ #endif unsigned long bi_baudrate; /* Console Baudrate */ -#if defined(CONFIG_405GP) || \ +#if defined(CONFIG_405) || \ + defined(CONFIG_405GP) || \ defined(CONFIG_405CR) || \ - defined(CONFIG_440) || \ - defined(CONFIG_405) || \ - defined(CONFIG_405EP) + defined(CONFIG_405EP) || \ + defined(CONFIG_440) unsigned char bi_s_version[4]; /* Version of this structure */ unsigned char bi_r_version[32]; /* Version of the ROM (IBM) */ unsigned int bi_procfreq; /* CPU (Internal) Freq, in Hz */ @@ -76,14 +76,15 @@ typedef struct bd_info { #if defined(CONFIG_HYMOD) hymod_conf_t bi_hymod_conf; /* hymod configuration information */ #endif -#if defined(CONFIG_EVB64260) || \ - defined(CONFIG_PN62) || \ - defined(CONFIG_SXNI855T) || \ +#if defined(CFG_GT_6426x) || \ + defined(CONFIG_PN62) || \ + defined(CONFIG_PPCHAMELEONEVB) || \ + defined(CONFIG_SXNI855T) || \ defined(CONFIG_SVM_SC8xx) /* second onboard ethernet port */ unsigned char bi_enet1addr[6]; #endif -#if defined(CONFIG_EVB64260) || defined(CONFIG_SVM_SC8xx) +#if defined(CFG_GT_6426x) || defined(CONFIG_SVM_SC8xx) /* third onboard ethernet port */ unsigned char bi_enet2addr[6]; #endif diff --git a/include/configs/P3G4.h b/include/configs/P3G4.h new file mode 100644 index 0000000..d7bfe81 --- /dev/null +++ b/include/configs/P3G4.h @@ -0,0 +1,394 @@ +/* + * (C) Copyright 2001 + * Josh Huber <huber@mclx.com>, Mission Critical Linux, Inc. + * + * 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 + */ + +/* + * board/config.h - configuration options, board specific + */ + +#ifndef __CONFIG_H +#define __CONFIG_H + +#include <asm/processor.h> + +#ifndef __ASSEMBLY__ +#include <galileo/core.h> +#endif + +#include "../board/evb64260/local.h" + +/* + * High Level Configuration Options + * (easy to change) + */ + +#define CONFIG_P3G4 1 /* this is a P3G4 board */ +#define CFG_GT_6426x GT_64260 /* with a 64260 system controller */ + +#define CONFIG_BAUDRATE 115200 /* console baudrate = 115200 */ + +#undef CONFIG_ECC /* enable ECC support */ +/* #define CONFIG_EVB64260_750CX 1 */ /* Support the EVB-64260-750CX Board */ + +/* which initialization functions to call for this board */ +#define CONFIG_MISC_INIT_R 1 +#define CONFIG_BOARD_PRE_INIT 1 + +#define CFG_BOARD_NAME "P3G4" + +#undef CFG_HUSH_PARSER +#define CFG_PROMPT_HUSH_PS2 "> " + +/* + * The following defines let you select what serial you want to use + * for your console driver. + * + * to use the MPSC, #define CONFIG_MPSC. If you have wired up another + * mpsc channel, change CONFIG_MPSC_PORT to the desired value. + */ +#define CONFIG_MPSC +#define CONFIG_MPSC_PORT 1 + +#define CONFIG_NET_MULTI /* attempt all available adapters */ + +/* define this if you want to enable GT MAC filtering */ +#define CONFIG_GT_USE_MAC_HASH_TABLE + +#undef CONFIG_ETHER_PORT_MII /* use RMII */ + +#if 1 +#define CONFIG_BOOTDELAY -1 /* autoboot disabled */ +#else +#define CONFIG_BOOTDELAY 5 /* autoboot after 5 seconds */ +#endif +#define CONFIG_ZERO_BOOTDELAY_CHECK + +#undef CONFIG_BOOTARGS +#define CONFIG_BOOTCOMMAND \ + "bootp && " \ + "setenv bootargs root=/dev/nfs rw nfsroot=$serverip:$rootpath " \ + "ip=$ipaddr:$serverip:$gatewayip:" \ + "$netmask:$hostname:eth0:none; && " \ + "bootm" + +#define CONFIG_LOADS_ECHO 0 /* echo off for serial download */ +#define CFG_LOADS_BAUD_CHANGE /* allow baudrate changes */ + +#undef CONFIG_WATCHDOG /* watchdog disabled */ +#undef CONFIG_ALTIVEC /* undef to disable */ + +#define CONFIG_BOOTP_MASK (CONFIG_BOOTP_DEFAULT | \ + CONFIG_BOOTP_BOOTFILESIZE) + + +#define CONFIG_COMMANDS (CONFIG_CMD_DFL | CFG_CMD_ASKENV) + +/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */ +#include <cmd_confdefs.h> + +/* + * Miscellaneous configurable options + */ +#define CFG_LONGHELP /* undef to save memory */ +#define CFG_PROMPT "=> " /* Monitor Command Prompt */ +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +#define CFG_CBSIZE 1024 /* Console I/O Buffer Size */ +#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_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ + +#define CFG_MEMTEST_START 0x00400000 /* memtest works on */ +#define CFG_MEMTEST_END 0x00C00000 /* 4 ... 12 MB in DRAM */ + +#define CFG_LOAD_ADDR 0x00300000 /* default load address */ + +#define CFG_HZ 1000 /* decr freq: 1ms ticks */ +#define CFG_BUS_HZ 133000000 /* 133 MHz */ +#define CFG_BUS_CLK CFG_BUS_HZ + +#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200, 230400 } + + +/* + * Low Level Configuration Settings + * (address mappings, register initial values, etc.) + * You should know what you are doing if you make changes here. + */ + +/*----------------------------------------------------------------------- + * Definitions for initial stack pointer and data area + */ +#define CFG_INIT_RAM_ADDR 0x40000000 +#define CFG_INIT_RAM_END 0x1000 +#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for init data */ +#define CFG_GBL_DATA_OFFSET (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE) +#define CFG_INIT_RAM_LOCK + + +/*----------------------------------------------------------------------- + * Start addresses for the final memory configuration + * (Set up by the startup code) + * Please note that CFG_SDRAM_BASE _must_ start at 0 + */ +#define CFG_SDRAM_BASE 0x00000000 +#define CFG_FLASH_BASE 0xff800000 +#define CFG_RESET_ADDRESS 0xfff00100 +#define CFG_MONITOR_LEN (256 << 10) /* Reserve 256 kB for Monitor */ +#define CFG_MONITOR_BASE TEXT_BASE +#define CFG_MALLOC_LEN (256 << 10) /* Reserve 256 kB for malloc */ + +/* areas to map different things with the GT in physical space */ +#define CFG_DRAM_BANKS 1 +#define CFG_DFL_GT_REGS 0x14000000 /* boot time GT_REGS */ + +/* What to put in the bats. */ +#define CFG_MISC_REGION_BASE 0xf0000000 + +/* Peripheral Device section */ +#define CFG_GT_REGS 0xf8000000 +#define CFG_DEV_BASE 0xff000000 + +#define CFG_DEV0_SPACE CFG_DEV_BASE +#define CFG_DEV1_SPACE (CFG_DEV0_SPACE + CFG_DEV0_SIZE) +#define CFG_DEV2_SPACE (CFG_DEV1_SPACE + CFG_DEV1_SIZE) +#define CFG_DEV3_SPACE (CFG_DEV2_SPACE + CFG_DEV2_SIZE) + +#define CFG_DEV0_SIZE _8M /* Flash bank */ +#define CFG_DEV1_SIZE 0 /* unused */ +#define CFG_DEV2_SIZE 0 /* unused */ +#define CFG_DEV3_SIZE 0 /* unused */ + +#define CFG_16BIT_BOOT_PAR 0xc01b5e7c +#define CFG_DEV0_PAR CFG_16BIT_BOOT_PAR + +#if 0 /* Wrong?? NTL */ +#define CFG_MPP_CONTROL_0 0x53541717 /* InitAct EOT[4] DBurst TCEn[1] */ + /* DMAAck[1:0] GNT0[1:0] */ +#else +#define CFG_MPP_CONTROL_0 0x53547777 /* InitAct EOT[4] DBurst TCEn[1] */ + /* REQ0[1:0] GNT0[1:0] */ +#endif +#define CFG_MPP_CONTROL_1 0x44009911 /* TCEn[4] TCTcnt[4] GPP[13:12] */ + /* DMAReq[4] DMAAck[4] WDNMI WDE */ +#if 0 /* Wrong?? NTL */ +#define CFG_MPP_CONTROL_2 0x40091818 /* TCTcnt[0] GPP[22:21] BClkIn */ + /* DMAAck[1:0] GNT1[1:0] */ +#else +#define CFG_MPP_CONTROL_2 0x40098888 /* TCTcnt[0] */ + /* GPP[22] (RS232IntB or PCI1Int) */ + /* GPP[21] (RS323IntA) */ + /* BClkIn */ + /* REQ1[1:0] GNT1[1:0] */ +#endif + +#if 0 /* Wrong?? NTL */ +# define CFG_MPP_CONTROL_3 0x00090066 /* GPP[31:29] BClkOut0 */ + /* GPP[27:26] Int[1:0] */ +#else +# define CFG_MPP_CONTROL_3 0x22090066 /* MREQ MGNT */ + /* GPP[29] (PCI1Int) */ + /* BClkOut0 */ + /* GPP[27] (PCI0Int) */ + /* GPP[26] (RtcInt or PCI1Int) */ + /* CPUInt[25:24] */ +#endif + +#define CFG_SERIAL_PORT_MUX 0x00001102 /* 11=MPSC1/MPSC0 02=ETH 0 and 2 RMII */ + +#if 0 /* Wrong?? - NTL */ +# define CFG_GPP_LEVEL_CONTROL 0x000002c6 +#else +# define CFG_GPP_LEVEL_CONTROL 0x2c600000 /* 0010 1100 0110 0000 */ + /* gpp[29] */ + /* gpp[27:26] */ + /* gpp[22:21] */ + +# define CFG_SDRAM_CONFIG 0xd8e18200 /* 0x448 */ + /* idmas use buffer 1,1 + comm use buffer 0 + pci use buffer 1,1 + cpu use buffer 0 + normal load (see also ifdef HVL) + standard SDRAM (see also ifdef REG) + non staggered refresh */ + /* 31:26 25 23 20 19 18 16 */ + /* 110110 00 111 0 0 00 1 */ + /* refresh_count=0x200 + phisical interleaving disable + virtual interleaving enable */ + /* 15 14 13:0 */ + /* 1 0 0x200 */ +#endif + +#if 0 +#define CFG_DUART_IO CFG_DEV2_SPACE +#define CFG_DUART_CHAN 1 /* channel to use for console */ +#endif +#undef CFG_INIT_CHAN1 +#undef CFG_INIT_CHAN2 +#if 0 +#define SRAM_BASE CFG_DEV0_SPACE +#define SRAM_SIZE 0x00100000 /* 1 MB of sram */ +#endif + + +/*----------------------------------------------------------------------- + * PCI stuff + *----------------------------------------------------------------------- + */ + +#define PCI_HOST_ADAPTER 0 /* configure ar pci adapter */ +#define PCI_HOST_FORCE 1 /* configure as pci host */ +#define PCI_HOST_AUTO 2 /* detected via arbiter enable */ + +#define CONFIG_PCI /* include pci support */ +#define CONFIG_PCI_HOST PCI_HOST_FORCE /* select pci host function */ +#define CONFIG_PCI_PNP /* do pci plug-and-play */ + +/* PCI MEMORY MAP section */ +#define CFG_PCI0_MEM_BASE 0x80000000 +#define CFG_PCI0_MEM_SIZE _128M +#define CFG_PCI1_MEM_BASE 0x88000000 +#define CFG_PCI1_MEM_SIZE _128M + +#define CFG_PCI0_0_MEM_SPACE (CFG_PCI0_MEM_BASE) +#define CFG_PCI1_0_MEM_SPACE (CFG_PCI1_MEM_BASE) + + +/* PCI I/O MAP section */ +#define CFG_PCI0_IO_BASE 0xfa000000 +#define CFG_PCI0_IO_SIZE _16M +#define CFG_PCI1_IO_BASE 0xfb000000 +#define CFG_PCI1_IO_SIZE _16M + +#define CFG_PCI0_IO_SPACE (CFG_PCI0_IO_BASE) +#define CFG_PCI0_IO_SPACE_PCI 0x00000000 +#define CFG_PCI1_IO_SPACE (CFG_PCI1_IO_BASE) +#define CFG_PCI1_IO_SPACE_PCI 0x00000000 + +/*---------------------------------------------------------------------- + * Initial BAT mappings + */ + +/* NOTES: + * 1) GUARDED and WRITE_THRU not allowed in IBATS + * 2) CACHEINHIBIT and WRITETHROUGH not allowed together in same BAT + */ + +/* SDRAM */ +#define CFG_IBAT0L (CFG_SDRAM_BASE | BATL_PP_RW | BATL_CACHEINHIBIT) +#define CFG_IBAT0U (CFG_SDRAM_BASE | BATU_BL_256M | BATU_VS | BATU_VP) +#define CFG_DBAT0L (CFG_SDRAM_BASE | BATL_PP_RW | BATL_CACHEINHIBIT | BATL_GUARDEDSTORAGE) +#define CFG_DBAT0U CFG_IBAT0U + +/* init ram */ +#define CFG_IBAT1L (CFG_INIT_RAM_ADDR | BATL_PP_RW | BATL_MEMCOHERENCE) +#define CFG_IBAT1U (CFG_INIT_RAM_ADDR | BATU_BL_128K | BATU_VS | BATU_VP) +#define CFG_DBAT1L CFG_IBAT1L +#define CFG_DBAT1U CFG_IBAT1U + +/* PCI0, PCI1 in one BAT */ +#define CFG_IBAT2L BATL_NO_ACCESS +#define CFG_IBAT2U CFG_DBAT2U +#define CFG_DBAT2L (CFG_PCI0_MEM_BASE | BATL_CACHEINHIBIT | BATL_PP_RW | BATL_GUARDEDSTORAGE) +#define CFG_DBAT2U (CFG_PCI0_MEM_BASE | BATU_BL_256M | BATU_VS | BATU_VP) + +/* GT regs, bootrom, all the devices, PCI I/O */ +#define CFG_IBAT3L (CFG_MISC_REGION_BASE | BATL_CACHEINHIBIT | BATL_PP_RW) +#define CFG_IBAT3U (CFG_MISC_REGION_BASE | BATU_VS | BATU_VP | BATU_BL_256M) +#define CFG_DBAT3L (CFG_MISC_REGION_BASE | BATL_CACHEINHIBIT | BATL_PP_RW | BATL_GUARDEDSTORAGE) +#define CFG_DBAT3U CFG_IBAT3U + +/* I2C speed and slave address (for compatability) defaults */ +#define CFG_I2C_SPEED 400000 +#define CFG_I2C_SLAVE 0x7F + +/* I2C addresses for the two DIMM SPD chips */ +#ifndef CONFIG_EVB64260_750CX +#define DIMM0_I2C_ADDR 0x56 +#define DIMM1_I2C_ADDR 0x54 +#else /* CONFIG_EVB64260_750CX - only has 1 DIMM */ +#define DIMM0_I2C_ADDR 0x54 +#define DIMM1_I2C_ADDR 0x54 +#endif + +/* + * For booting Linux, the board info and command line data + * have to be in the first 8 MB of memory, since this is + * the maximum mapped by the Linux kernel during initialization. + */ +#define CFG_BOOTMAPSZ (8<<20) /* Initial Memory map for Linux */ + +/*----------------------------------------------------------------------- + * FLASH organization + */ +#define CFG_MAX_FLASH_BANKS 2 /* max number of memory banks */ +#define CFG_MAX_FLASH_SECT 67 /* max number of sectors on one chip */ + +#define CFG_EXTRA_FLASH_DEVICE DEVICE0 /* extra flash at device 0 */ +#define CFG_EXTRA_FLASH_WIDTH 2 /* 16 bit */ +#define CFG_BOOT_FLASH_WIDTH 2 /* 16 bit */ + +#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_CFI 1 + +#define CFG_ENV_IS_IN_FLASH 1 +#define CFG_ENV_SIZE 0x1000 /* Total Size of Environment Sector */ +#define CFG_ENV_SECT_SIZE 0x20000 +#define CFG_ENV_ADDR 0xFFFE0000 + +/*----------------------------------------------------------------------- + * Cache Configuration + */ +#define CFG_CACHELINE_SIZE 32 /* For all MPC74xx CPUs */ +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +#define CFG_CACHELINE_SHIFT 5 /* log base 2 of the above value */ +#endif + +/*----------------------------------------------------------------------- + * L2CR setup -- make sure this is right for your board! + * look in include/74xx_7xx.h for the defines used here + */ + +#define CFG_L2 + +#define L2_INIT (L2CR_L2SIZ_2M | L2CR_L2CLK_3 | L2CR_L2RAM_BURST | \ + L2CR_L2OH_5 | L2CR_L2CTL | L2CR_L2WT) + +#define L2_ENABLE (L2_INIT | L2CR_L2E) + +/* + * Internal Definitions + * + * Boot Flags + */ +#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from FLASH */ +#define BOOTFLAG_WARM 0x02 /* Software reboot */ + +#define CFG_BOARD_ASM_INIT 1 + + +#endif /* __CONFIG_H */ diff --git a/include/configs/PPChameleonEVB.h b/include/configs/PPChameleonEVB.h new file mode 100644 index 0000000..967a2d0 --- /dev/null +++ b/include/configs/PPChameleonEVB.h @@ -0,0 +1,734 @@ +/* + * (C) Copyright 2001-2003 + * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com + * + * 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 + */ + +/* + * board/config.h - configuration options, board specific + */ + +#ifndef __CONFIG_H +#define __CONFIG_H + +/* + * Debug stuff + */ +#undef __DEBUG_START_FROM_SRAM__ +#define __DISABLE_MACHINE_EXCEPTION__ + +#ifdef __DEBUG_START_FROM_SRAM__ +#define CFG_DUMMY_FLASH_SIZE 1024*1024*4 +#endif + +/* + * High Level Configuration Options + * (easy to change) + */ + +#define CONFIG_405EP 1 /* This is a PPC405 CPU */ +#define CONFIG_4xx 1 /* ...member of PPC4xx family */ +#define CONFIG_PPCHAMELEONEVB 1 /* ...on a PPChameleonEVB board */ + +#define CONFIG_BOARD_PRE_INIT 1 /* call board_pre_init() */ +#define CONFIG_MISC_INIT_R 1 /* call misc_init_r() */ + +#define CONFIG_SYS_CLK_FREQ 33333333 /* external frequency to pll */ + +#if 1 +#define CONFIG_BAUDRATE 9600 +#else +#define CONFIG_BAUDRATE 115200 +#endif +#define CONFIG_BOOTDELAY 3 /* autoboot after 3 seconds */ + +#if 0 +#define CONFIG_PREBOOT \ + "crc32 f0207004 ffc 0;" \ + "if cmp 0 f0207000 1;" \ + "then;echo Old CRC is correct;crc32 f0207004 ff4 f0207000;" \ + "else;echo Old CRC is bad;fi" +#endif + +#undef CONFIG_BOOTARGS +#define CONFIG_RAMBOOTCOMMAND \ + "setenv bootargs root=/dev/ram rw nfsroot=$(serverip):$(rootpath) " \ + "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;" \ + "bootm ffc00000 ffca0000" +#define CONFIG_NFSBOOTCOMMAND \ + "setenv bootargs root=/dev/nfs rw nfsroot=$(serverip):$(rootpath) " \ + "ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname)::off;" \ + "bootm ffc00000" + +#define CONFIG_PELK_NOR_KERNEL_NOR_RAMDISK_BOOTCOMMAND \ + "setenv ipaddr 192.168.10.203;" \ + "setenv serverip 192.168.10.6;" \ + "setenv netmask 255.255.255.0;" \ + "setenv bootargs root=/dev/ram rw console=ttyS0,9600;" \ + "setenv autostart yes;" \ + "bootm ffc00000 ffd00000" +/* + "setenv ethaddr 00:50:c2:1e:af:fe;" \ + "setenv eth1addr 00:50:c2:1e:af:fd;" \ +*/ + +#define CONFIG_BOOTCOMMAND CONFIG_PELK_NOR_KERNEL_NOR_RAMDISK_BOOTCOMMAND + +#define CONFIG_LOADS_ECHO 1 /* echo on for serial download */ +#define CFG_LOADS_BAUD_CHANGE 1 /* allow baudrate change */ + + +/* EThernet stuff */ +#define CONFIG_ENV_OVERWRITE /* Let the user to change the Ethernet MAC addresses */ +#define CONFIG_ETHADDR 00:50:c2:1e:af:fe +#define CONFIG_ETH1ADDR 00:50:c2:1e:af:fd + +#undef CONFIG_EXT_PHY +/*#define CONFIG_EXT_PHY*/ +#define CONFIG_MII 1 /* MII PHY management */ +#ifndef CONFIG_EXT_PHY +#define CONFIG_PHY_ADDR 1 /* PHY address */ +#else +#define CONFIG_PHY_ADDR 2 /* PHY address */ +#endif +#define CONFIG_PHY_CLK_FREQ EMAC_STACR_CLK_66MHZ + +#if 0 /* test-only */ +#define CONFIG_COMMANDS ( CONFIG_CMD_DFL | \ + CFG_CMD_IRQ | \ + CFG_CMD_ELF | \ + CFG_CMD_DATE | \ + CFG_CMD_JFFS2 | \ + CFG_CMD_I2C | \ + CFG_CMD_EEPROM ) +#else +#define CONFIG_COMMANDS ( CONFIG_CMD_DFL | \ + CFG_CMD_IRQ | \ + CFG_CMD_ELF | \ + CFG_CMD_NAND | \ + CFG_CMD_MII | \ + CFG_CMD_DATE | \ + CFG_CMD_I2C | \ + CFG_CMD_EEPROM ) +#endif + +#define CONFIG_MAC_PARTITION +#define CONFIG_DOS_PARTITION + +/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */ +#include <cmd_confdefs.h> + +#undef CONFIG_WATCHDOG /* watchdog disabled */ + +#define CONFIG_RTC_MC146818 /* DS1685 is MC146818 compatible*/ +#define CFG_RTC_REG_BASE_ADDR 0xF0000500 /* RTC Base Address */ + +#define CONFIG_SDRAM_BANK0 1 /* init onboard SDRAM bank 0 */ + +/* + * Miscellaneous configurable options + */ +#define CFG_LONGHELP /* undef to save memory */ +#define CFG_PROMPT "=> " /* Monitor Command Prompt */ + +#undef CFG_HUSH_PARSER /* use "hush" command parser */ +#ifdef CFG_HUSH_PARSER +#define CFG_PROMPT_HUSH_PS2 "> " +#endif + +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +#define CFG_CBSIZE 1024 /* Console I/O Buffer Size */ +#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_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */ + +#define CFG_DEVICE_NULLDEV 1 /* include nulldev device */ + +#define CFG_CONSOLE_INFO_QUIET 1 /* don't print console @ startup*/ + +#define CFG_MEMTEST_START 0x0400000 /* memtest works on */ +#define CFG_MEMTEST_END 0x0C00000 /* 4 ... 12 MB in DRAM */ + +#undef CFG_EXT_SERIAL_CLOCK /* no external serial clock used */ +#define CFG_IGNORE_405_UART_ERRATA_59 /* ignore ppc405gp errata #59 */ +#define CFG_BASE_BAUD 691200 + +/* The following table includes the supported baudrates */ +#define CFG_BAUDRATE_TABLE \ + { 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, \ + 57600, 115200, 230400, 460800, 921600 } + +#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 */ + +#define CONFIG_ZERO_BOOTDELAY_CHECK /* check for keypress on bootdelay==0 */ + +/*----------------------------------------------------------------------- + * NAND-FLASH stuff + *----------------------------------------------------------------------- + */ +#define CFG_NAND0_BASE 0xFF400000 +#define CFG_NAND1_BASE 0xFF000000 + +#define CFG_MAX_NAND_DEVICE 2 /* Max number of NAND devices */ +#define SECTORSIZE 512 + +#define ADDR_COLUMN 1 +#define ADDR_PAGE 2 +#define ADDR_COLUMN_PAGE 3 + +#define NAND_ChipID_UNKNOWN 0x00 +#define NAND_MAX_FLOORS 1 +#define NAND_MAX_CHIPS 1 + +#define CFG_NAND0_CE (0x80000000 >> 1) /* our CE is GPIO1 */ +#define CFG_NAND0_CLE (0x80000000 >> 2) /* our CLE is GPIO2 */ +#define CFG_NAND0_ALE (0x80000000 >> 3) /* our ALE is GPIO3 */ +#define CFG_NAND0_RDY (0x80000000 >> 4) /* our RDY is GPIO4 */ + +#define CFG_NAND1_CE (0x80000000 >> 14) /* our CE is GPIO14 */ +#define CFG_NAND1_CLE (0x80000000 >> 15) /* our CLE is GPIO15 */ +#define CFG_NAND1_ALE (0x80000000 >> 16) /* our ALE is GPIO16 */ +#define CFG_NAND1_RDY (0x80000000 >> 31) /* our RDY is GPIO31 */ + + +#define NAND_DISABLE_CE(nand) do \ +{ \ + switch((unsigned long)(((struct nand_chip *)nand)->IO_ADDR)) \ + { \ + case CFG_NAND0_BASE: \ + out32(GPIO0_OR, in32(GPIO0_OR) | CFG_NAND0_CE); \ + break; \ + case CFG_NAND1_BASE: \ + out32(GPIO0_OR, in32(GPIO0_OR) | CFG_NAND1_CE); \ + break; \ + } \ +} while(0) + +#define NAND_ENABLE_CE(nand) do \ +{ \ + switch((unsigned long)(((struct nand_chip *)nand)->IO_ADDR)) \ + { \ + case CFG_NAND0_BASE: \ + out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_NAND0_CE); \ + break; \ + case CFG_NAND1_BASE: \ + out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_NAND1_CE); \ + break; \ + } \ +} while(0) + + + +#define NAND_CTL_CLRALE(nandptr) do \ +{ \ + switch((unsigned long)nandptr) \ + { \ + case CFG_NAND0_BASE: \ + out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_NAND0_ALE); \ + break; \ + case CFG_NAND1_BASE: \ + out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_NAND1_ALE); \ + break; \ + } \ +} while(0) + +#define NAND_CTL_SETALE(nandptr) do \ +{ \ + switch((unsigned long)nandptr) \ + { \ + case CFG_NAND0_BASE: \ + out32(GPIO0_OR, in32(GPIO0_OR) | CFG_NAND0_ALE); \ + break; \ + case CFG_NAND1_BASE: \ + out32(GPIO0_OR, in32(GPIO0_OR) | CFG_NAND1_ALE); \ + break; \ + } \ +} while(0) + +#define NAND_CTL_CLRCLE(nandptr) do \ +{ \ + switch((unsigned long)nandptr) \ + { \ + case CFG_NAND0_BASE: \ + out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_NAND0_CLE); \ + break; \ + case CFG_NAND1_BASE: \ + out32(GPIO0_OR, in32(GPIO0_OR) & ~CFG_NAND1_CLE); \ + break; \ + } \ +} while(0) + +#define NAND_CTL_SETCLE(nandptr) do { \ + switch((unsigned long)nandptr) { \ + case CFG_NAND0_BASE: \ + out32(GPIO0_OR, in32(GPIO0_OR) | CFG_NAND0_CLE); \ + break; \ + case CFG_NAND1_BASE: \ + out32(GPIO0_OR, in32(GPIO0_OR) | CFG_NAND1_CLE); \ + break; \ + } \ +} while(0) + +#define NAND_WAIT_READY(nand) do { \ + ulong mask = 0; \ + switch ((ulong)(((struct nand_chip *)nand)->IO_ADDR)) { \ + case CFG_NAND0_BASE: \ + mask = CFG_NAND0_RDY; \ + break; \ + case CFG_NAND1_BASE: \ + mask = CFG_NAND1_RDY; \ + break; \ + } \ + while (!(in32(GPIO0_IR) & mask)) \ + ; \ +} while (0) + +#define WRITE_NAND_COMMAND(d, adr) do{ *(volatile __u8 *)((unsigned long)adr) = (__u8)(d); } while(0) +#define WRITE_NAND_ADDRESS(d, adr) do{ *(volatile __u8 *)((unsigned long)adr) = (__u8)(d); } while(0) +#define WRITE_NAND(d, adr) do{ *(volatile __u8 *)((unsigned long)adr) = (__u8)d; } while(0) +#define READ_NAND(adr) ((volatile unsigned char)(*(volatile __u8 *)(unsigned long)adr)) + +/*----------------------------------------------------------------------- + * PCI stuff + *----------------------------------------------------------------------- + */ +#define PCI_HOST_ADAPTER 0 /* configure as pci adapter */ +#define PCI_HOST_FORCE 1 /* configure as pci host */ +#define PCI_HOST_AUTO 2 /* detected via arbiter enable */ + +#define CONFIG_PCI /* include pci support */ +#define CONFIG_PCI_HOST PCI_HOST_HOST /* select pci host function */ +#undef CONFIG_PCI_PNP /* do pci plug-and-play */ + /* resource configuration */ + +#define CONFIG_PCI_SCAN_SHOW /* print pci devices @ startup */ + +#define CFG_PCI_SUBSYS_VENDORID 0x12FE /* PCI Vendor ID: esd gmbh */ +#define CFG_PCI_SUBSYS_DEVICEID 0x0405 /* PCI Device ID: CPCI-405 */ +#define CFG_PCI_CLASSCODE 0x0b20 /* PCI Class Code: Processor/PPC*/ +#define CFG_PCI_PTM1LA 0x00000000 /* point to sdram */ +#define CFG_PCI_PTM1MS 0xfc000001 /* 64MB, enable hard-wired to 1 */ +#define CFG_PCI_PTM1PCI 0x00000000 /* Host: use this pci address */ +#define CFG_PCI_PTM2LA 0xffc00000 /* point to flash */ +#define CFG_PCI_PTM2MS 0xffc00001 /* 4MB, enable */ +#define CFG_PCI_PTM2PCI 0x04000000 /* Host: use this pci address */ + +/*----------------------------------------------------------------------- + * Start addresses for the final memory configuration + * (Set up by the startup code) + * Please note that CFG_SDRAM_BASE _must_ start at 0 + */ +#define CFG_SDRAM_BASE 0x00000000 +#define CFG_FLASH_BASE 0xFFFC0000 +#define CFG_MONITOR_BASE CFG_FLASH_BASE +#define CFG_MONITOR_LEN (256 * 1024) /* Reserve 256 kB for Monitor */ +#define CFG_MALLOC_LEN (256 * 1024) /* Reserve 256 kB for malloc() */ + +/* + * For booting Linux, the board info and command line data + * have to be in the first 8 MB of memory, since this is + * the maximum mapped by the Linux kernel during initialization. + */ +#define CFG_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */ +/*----------------------------------------------------------------------- + * FLASH organization + */ +#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */ +#define CFG_MAX_FLASH_SECT 256 /* max number of sectors on one chip */ + +#define CFG_FLASH_ERASE_TOUT 120000 /* Timeout for Flash Erase (in ms) */ +#define CFG_FLASH_WRITE_TOUT 1000 /* Timeout for Flash Write (in ms) */ + +#define CFG_FLASH_WORD_SIZE unsigned short /* flash word size (width) */ +#define CFG_FLASH_ADDR0 0x5555 /* 1st address for flash config cycles */ +#define CFG_FLASH_ADDR1 0x2AAA /* 2nd address for flash config cycles */ +/* + * The following defines are added for buggy IOP480 byte interface. + * All other boards should use the standard values (CPCI405 etc.) + */ +#define CFG_FLASH_READ0 0x0000 /* 0 is standard */ +#define CFG_FLASH_READ1 0x0001 /* 1 is standard */ +#define CFG_FLASH_READ2 0x0002 /* 2 is standard */ + +#define CFG_FLASH_EMPTY_INFO /* print 'E' for empty sector on flinfo */ + +#if 0 /* test-only */ +#define CFG_JFFS2_FIRST_BANK 0 /* use for JFFS2 */ +#define CFG_JFFS2_NUM_BANKS 1 /* ! second bank contains U-Boot */ +#endif + +/*----------------------------------------------------------------------- + * Environment Variable setup + */ +#define CFG_ENV_IS_IN_EEPROM 1 /* use EEPROM for environment vars */ +#define CFG_ENV_OFFSET 0x100 /* environment starts at the beginning of the EEPROM */ +#define CFG_ENV_SIZE 0x700 /* 2048 bytes may be used for env vars*/ + /* total size of a CAT24WC16 is 2048 bytes */ + +#define CFG_NVRAM_BASE_ADDR 0xF0000500 /* NVRAM base address */ +#define CFG_NVRAM_SIZE 242 /* NVRAM size */ + +/*----------------------------------------------------------------------- + * I2C EEPROM (CAT24WC16) for environment + */ +#define CONFIG_HARD_I2C /* I2c with hardware support */ +#define CFG_I2C_SPEED 400000 /* I2C speed and slave address */ +#define CFG_I2C_SLAVE 0x7F + +#define CFG_I2C_EEPROM_ADDR 0x50 /* EEPROM CAT28WC08 */ +#define CFG_I2C_EEPROM_ADDR_LEN 1 /* Bytes of address */ +/* mask of address bits that overflow into the "EEPROM chip address" */ +/*#define CFG_I2C_EEPROM_ADDR_OVERFLOW 0x07*/ +#define CFG_EEPROM_PAGE_WRITE_BITS 4 /* The Catalyst CAT24WC08 has */ + /* 16 byte page write mode using*/ + /* last 4 bits of the address */ +#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10 /* and takes up to 10 msec */ +#define CFG_EEPROM_PAGE_WRITE_ENABLE + +/*----------------------------------------------------------------------- + * Cache Configuration + */ +#define CFG_DCACHE_SIZE 16384 /* For IBM 405 CPUs, older 405 ppc's */ + /* have only 8kB, 16kB is save here */ +#define CFG_CACHELINE_SIZE 32 /* ... */ +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +#define CFG_CACHELINE_SHIFT 5 /* log base 2 of the above value */ +#endif + +/* + * Init Memory Controller: + * + * BR0/1 and OR0/1 (FLASH) + */ + +#define FLASH_BASE0_PRELIM 0xFFC00000 /* FLASH bank #0 */ + +/*----------------------------------------------------------------------- + * External Bus Controller (EBC) Setup + */ + +/* Memory Bank 0 (Flash Bank 0, NOR-FLASH) initialization */ +#define CFG_EBC_PB0AP 0x92015480 +#define CFG_EBC_PB0CR 0xFFC5A000 /* BAS=0xFFC,BS=4MB,BU=R/W,BW=16bit */ + +/* Memory Bank 1 (External SRAM) initialization */ +/* Since this must replace NOR Flash, we use the same settings for CS0 */ +#define CFG_EBC_PB1AP 0x92015480 +#define CFG_EBC_PB1CR 0xFF85A000 /* BAS=0xFF8,BS=4MB,BU=R/W,BW=8bit */ + +/* Memory Bank 2 (Flash Bank 1, NAND-FLASH) initialization */ +#define CFG_EBC_PB2AP 0x92015480 +#define CFG_EBC_PB2CR 0xFF458000 /* BAS=0xFF4,BS=4MB,BU=R/W,BW=8bit */ + +/* Memory Bank 3 (Flash Bank 2, NAND-FLASH) initialization */ +#define CFG_EBC_PB3AP 0x92015480 +#define CFG_EBC_PB3CR 0xFF058000 /* BAS=0xFF0,BS=4MB,BU=R/W,BW=8bit */ + + +#if 0 /* Roese */ +/* Memory Bank 1 (Flash Bank 1, NAND-FLASH) initialization */ +#define CFG_EBC_PB1AP 0x92015480 +#define CFG_EBC_PB1CR 0xFF858000 /* BAS=0xFF8,BS=4MB,BU=R/W,BW=8bit */ + +/* Memory Bank 2 (CAN0, 1) initialization */ +#define CFG_EBC_PB2AP 0x010053C0 /* BWT=2,WBN=1,WBF=1,TH=1,RE=1,SOR=1,BEM=1 */ +#define CFG_EBC_PB2CR 0xF0018000 /* BAS=0xF00,BS=1MB,BU=R/W,BW=8bit */ + +/* Memory Bank 3 (CompactFlash IDE) initialization */ +#define CFG_EBC_PB3AP 0x010053C0 /* BWT=2,WBN=1,WBF=1,TH=1,RE=1,SOR=1,BEM=1 */ +#define CFG_EBC_PB3CR 0xF011A000 /* BAS=0xF01,BS=1MB,BU=R/W,BW=16bit */ + +/* Memory Bank 4 (NVRAM/RTC) initialization */ +#define CFG_EBC_PB4AP 0x01005280 /* TWT=2,WBN=1,WBF=1,TH=1,SOR=1 */ +#define CFG_EBC_PB4CR 0xF0218000 /* BAS=0xF02,BS=1MB,BU=R/W,BW=8bit */ +#endif + +/*----------------------------------------------------------------------- + * FPGA stuff + */ +/* FPGA internal regs */ +#define CFG_FPGA_MODE 0x00 +#define CFG_FPGA_STATUS 0x02 +#define CFG_FPGA_TS 0x04 +#define CFG_FPGA_TS_LOW 0x06 +#define CFG_FPGA_TS_CAP0 0x10 +#define CFG_FPGA_TS_CAP0_LOW 0x12 +#define CFG_FPGA_TS_CAP1 0x14 +#define CFG_FPGA_TS_CAP1_LOW 0x16 +#define CFG_FPGA_TS_CAP2 0x18 +#define CFG_FPGA_TS_CAP2_LOW 0x1a +#define CFG_FPGA_TS_CAP3 0x1c +#define CFG_FPGA_TS_CAP3_LOW 0x1e + +/* FPGA Mode Reg */ +#define CFG_FPGA_MODE_CF_RESET 0x0001 +#define CFG_FPGA_MODE_TS_IRQ_ENABLE 0x0100 +#define CFG_FPGA_MODE_TS_IRQ_CLEAR 0x1000 +#define CFG_FPGA_MODE_TS_CLEAR 0x2000 + +/* FPGA Status Reg */ +#define CFG_FPGA_STATUS_DIP0 0x0001 +#define CFG_FPGA_STATUS_DIP1 0x0002 +#define CFG_FPGA_STATUS_DIP2 0x0004 +#define CFG_FPGA_STATUS_FLASH 0x0008 +#define CFG_FPGA_STATUS_TS_IRQ 0x1000 + +#define CFG_FPGA_SPARTAN2 1 /* using Xilinx Spartan 2 now */ +#define CFG_FPGA_MAX_SIZE 128*1024 /* 128kByte is enough for XC2S50E*/ + +/* FPGA program pin configuration */ +#define CFG_FPGA_PRG 0x04000000 /* FPGA program pin (ppc output) */ +#define CFG_FPGA_CLK 0x02000000 /* FPGA clk pin (ppc output) */ +#define CFG_FPGA_DATA 0x01000000 /* FPGA data pin (ppc output) */ +#define CFG_FPGA_INIT 0x00010000 /* FPGA init pin (ppc input) */ +#define CFG_FPGA_DONE 0x00008000 /* FPGA done pin (ppc input) */ + +/*----------------------------------------------------------------------- + * Definitions for initial stack pointer and data area (in data cache) + */ +#if 0 /* test-only */ +#define CFG_INIT_DCACHE_CS 4 /* use cs # 4 for data cache memory */ + +#define CFG_INIT_RAM_ADDR 0x40000000 /* use data cache */ +#define CFG_INIT_RAM_END 0x2000 /* End of used area in RAM */ +#else +/* use on chip memory ( OCM ) for temperary stack until sdram is tested */ +#define CFG_TEMP_STACK_OCM 1 + +/* On Chip Memory location */ +#define CFG_OCM_DATA_ADDR 0xF8000000 +#define CFG_OCM_DATA_SIZE 0x1000 +#define CFG_INIT_RAM_ADDR CFG_OCM_DATA_ADDR /* inside of SDRAM */ +#define CFG_INIT_RAM_END CFG_OCM_DATA_SIZE /* End of used area in RAM */ +#endif + +#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */ +#define CFG_GBL_DATA_OFFSET (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE) +#define CFG_INIT_SP_OFFSET CFG_GBL_DATA_OFFSET + +/*----------------------------------------------------------------------- + * Definitions for GPIO setup (PPC405EP specific) + * + * GPIO0[0] - External Bus Controller BLAST output + * GPIO0[1-9] - Instruction trace outputs -> GPIO + * GPIO0[10-13] - External Bus Controller CS_1 - CS_4 outputs + * GPIO0[14-16] - External Bus Controller ABUS3-ABUS5 outputs -> GPIO + * GPIO0[17-23] - External Interrupts IRQ0 - IRQ6 inputs + * GPIO0[24-27] - UART0 control signal inputs/outputs + * GPIO0[28-29] - UART1 data signal input/output + * GPIO0[30] - EMAC0 input + * GPIO0[31] - EMAC1 reject packet as output + */ +#define CFG_GPIO0_OSRH 0x40000550 +#define CFG_GPIO0_OSRL 0x00000110 +#define CFG_GPIO0_ISR1H 0x00000000 +/*#define CFG_GPIO0_ISR1L 0x15555445*/ +#define CFG_GPIO0_ISR1L 0x15555444 +#define CFG_GPIO0_TSRH 0x00000000 +#define CFG_GPIO0_TSRL 0x00000000 +#define CFG_GPIO0_TCR 0xF7FF8014 + +/* + * Internal Definitions + * + * Boot Flags + */ +#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from FLASH */ +#define BOOTFLAG_WARM 0x02 /* Software reboot */ + +#if 1 /* test-only */ +#define CONFIG_NO_SERIAL_EEPROM +/*#undef CONFIG_NO_SERIAL_EEPROM*/ +/*----------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +#ifdef CONFIG_NO_SERIAL_EEPROM + + +/* +!------------------------------------------------------------------------------- +! Defines for entry options. +! Note: Because the 405EP SDRAM controller does not support ECC, ECC DIMMs that +! are plugged in the board will be utilized as non-ECC DIMMs. +!------------------------------------------------------------------------------- +*/ +#undef AUTO_MEMORY_CONFIG +#define DIMM_READ_ADDR 0xAB +#define DIMM_WRITE_ADDR 0xAA + + +#define CPC0_PLLMR0 (CNTRL_DCR_BASE+0x0) /* PLL mode 0 register */ +#define CPC0_BOOT (CNTRL_DCR_BASE+0x1) /* Chip Clock Status register */ +#define CPC0_CR1 (CNTRL_DCR_BASE+0x2) /* Chip Control 1 register */ +#define CPC0_EPRCSR (CNTRL_DCR_BASE+0x3) /* EMAC PHY Rcv Clk Src register*/ +#define CPC0_PLLMR1 (CNTRL_DCR_BASE+0x4) /* PLL mode 1 register */ +#define CPC0_UCR (CNTRL_DCR_BASE+0x5) /* UART Control register */ +#define CPC0_SRR (CNTRL_DCR_BASE+0x6) /* Soft Reset register */ +#define CPC0_JTAGID (CNTRL_DCR_BASE+0x7) /* JTAG ID register */ +#define CPC0_SPARE (CNTRL_DCR_BASE+0x8) /* Spare DCR */ +#define CPC0_PCI (CNTRL_DCR_BASE+0x9) /* PCI Control register */ + +/* Defines for CPC0_PLLMR1 Register fields */ +#define PLL_ACTIVE 0x80000000 +#define CPC0_PLLMR1_SSCS 0x80000000 +#define PLL_RESET 0x40000000 +#define CPC0_PLLMR1_PLLR 0x40000000 + /* Feedback multiplier */ +#define PLL_FBKDIV 0x00F00000 +#define CPC0_PLLMR1_FBDV 0x00F00000 +#define PLL_FBKDIV_16 0x00000000 +#define PLL_FBKDIV_1 0x00100000 +#define PLL_FBKDIV_2 0x00200000 +#define PLL_FBKDIV_3 0x00300000 +#define PLL_FBKDIV_4 0x00400000 +#define PLL_FBKDIV_5 0x00500000 +#define PLL_FBKDIV_6 0x00600000 +#define PLL_FBKDIV_7 0x00700000 +#define PLL_FBKDIV_8 0x00800000 +#define PLL_FBKDIV_9 0x00900000 +#define PLL_FBKDIV_10 0x00A00000 +#define PLL_FBKDIV_11 0x00B00000 +#define PLL_FBKDIV_12 0x00C00000 +#define PLL_FBKDIV_13 0x00D00000 +#define PLL_FBKDIV_14 0x00E00000 +#define PLL_FBKDIV_15 0x00F00000 + /* Forward A divisor */ +#define PLL_FWDDIVA 0x00070000 +#define CPC0_PLLMR1_FWDVA 0x00070000 +#define PLL_FWDDIVA_8 0x00000000 +#define PLL_FWDDIVA_7 0x00010000 +#define PLL_FWDDIVA_6 0x00020000 +#define PLL_FWDDIVA_5 0x00030000 +#define PLL_FWDDIVA_4 0x00040000 +#define PLL_FWDDIVA_3 0x00050000 +#define PLL_FWDDIVA_2 0x00060000 +#define PLL_FWDDIVA_1 0x00070000 + /* Forward B divisor */ +#define PLL_FWDDIVB 0x00007000 +#define CPC0_PLLMR1_FWDVB 0x00007000 +#define PLL_FWDDIVB_8 0x00000000 +#define PLL_FWDDIVB_7 0x00001000 +#define PLL_FWDDIVB_6 0x00002000 +#define PLL_FWDDIVB_5 0x00003000 +#define PLL_FWDDIVB_4 0x00004000 +#define PLL_FWDDIVB_3 0x00005000 +#define PLL_FWDDIVB_2 0x00006000 +#define PLL_FWDDIVB_1 0x00007000 + /* PLL tune bits */ +#define PLL_TUNE_MASK 0x000003FF +#define PLL_TUNE_2_M_3 0x00000133 /* 2 <= M <= 3 */ +#define PLL_TUNE_4_M_6 0x00000134 /* 3 < M <= 6 */ +#define PLL_TUNE_7_M_10 0x00000138 /* 6 < M <= 10 */ +#define PLL_TUNE_11_M_14 0x0000013C /* 10 < M <= 14 */ +#define PLL_TUNE_15_M_40 0x0000023E /* 14 < M <= 40 */ +#define PLL_TUNE_VCO_LOW 0x00000000 /* 500MHz <= VCO <= 800MHz */ +#define PLL_TUNE_VCO_HI 0x00000080 /* 800MHz < VCO <= 1000MHz */ + +/* Defines for CPC0_PLLMR0 Register fields */ + /* CPU divisor */ +#define PLL_CPUDIV 0x00300000 +#define CPC0_PLLMR0_CCDV 0x00300000 +#define PLL_CPUDIV_1 0x00000000 +#define PLL_CPUDIV_2 0x00100000 +#define PLL_CPUDIV_3 0x00200000 +#define PLL_CPUDIV_4 0x00300000 + /* PLB divisor */ +#define PLL_PLBDIV 0x00030000 +#define CPC0_PLLMR0_CBDV 0x00030000 +#define PLL_PLBDIV_1 0x00000000 +#define PLL_PLBDIV_2 0x00010000 +#define PLL_PLBDIV_3 0x00020000 +#define PLL_PLBDIV_4 0x00030000 + /* OPB divisor */ +#define PLL_OPBDIV 0x00003000 +#define CPC0_PLLMR0_OPDV 0x00003000 +#define PLL_OPBDIV_1 0x00000000 +#define PLL_OPBDIV_2 0x00001000 +#define PLL_OPBDIV_3 0x00002000 +#define PLL_OPBDIV_4 0x00003000 + /* EBC divisor */ +#define PLL_EXTBUSDIV 0x00000300 +#define CPC0_PLLMR0_EPDV 0x00000300 +#define PLL_EXTBUSDIV_2 0x00000000 +#define PLL_EXTBUSDIV_3 0x00000100 +#define PLL_EXTBUSDIV_4 0x00000200 +#define PLL_EXTBUSDIV_5 0x00000300 + /* MAL divisor */ +#define PLL_MALDIV 0x00000030 +#define CPC0_PLLMR0_MPDV 0x00000030 +#define PLL_MALDIV_1 0x00000000 +#define PLL_MALDIV_2 0x00000010 +#define PLL_MALDIV_3 0x00000020 +#define PLL_MALDIV_4 0x00000030 + /* PCI divisor */ +#define PLL_PCIDIV 0x00000003 +#define CPC0_PLLMR0_PPFD 0x00000003 +#define PLL_PCIDIV_1 0x00000000 +#define PLL_PCIDIV_2 0x00000001 +#define PLL_PCIDIV_3 0x00000002 +#define PLL_PCIDIV_4 0x00000003 + +/* +!------------------------------------------------------------------------------- +! PLL settings for 266MHz CPU, 133MHz PLB/SDRAM, 66MHz EBC, 33MHz PCI, +! assuming a 33.3MHz input clock to the 405EP. +!------------------------------------------------------------------------------- +*/ +#define PLLMR0_133_66_66_33 (PLL_CPUDIV_1 | PLL_PLBDIV_1 | \ + PLL_OPBDIV_2 | PLL_EXTBUSDIV_4 | \ + PLL_MALDIV_1 | PLL_PCIDIV_4) +#define PLLMR1_133_66_66_33 (PLL_FBKDIV_4 | \ + PLL_FWDDIVA_6 | PLL_FWDDIVB_6 | \ + PLL_TUNE_15_M_40 | PLL_TUNE_VCO_LOW) +#define PLLMR0_200_100_50_33 (PLL_CPUDIV_1 | PLL_PLBDIV_2 | \ + PLL_OPBDIV_2 | PLL_EXTBUSDIV_3 | \ + PLL_MALDIV_1 | PLL_PCIDIV_4) +#define PLLMR1_200_100_50_33 (PLL_FBKDIV_6 | \ + PLL_FWDDIVA_4 | PLL_FWDDIVB_4 | \ + PLL_TUNE_15_M_40 | PLL_TUNE_VCO_LOW) +#define PLLMR0_266_133_66_33 (PLL_CPUDIV_1 | PLL_PLBDIV_2 | \ + PLL_OPBDIV_2 | PLL_EXTBUSDIV_4 | \ + PLL_MALDIV_1 | PLL_PCIDIV_4) +#define PLLMR1_266_133_66_33 (PLL_FBKDIV_8 | \ + PLL_FWDDIVA_3 | PLL_FWDDIVB_3 | \ + PLL_TUNE_15_M_40 | PLL_TUNE_VCO_LOW) +#if 0 /* test-only */ +#define PLLMR0_DEFAULT PLLMR0_266_133_66_33 +#define PLLMR1_DEFAULT PLLMR1_266_133_66_33 +#endif +#if 0 /* test-only */ +#define PLLMR0_DEFAULT PLLMR0_200_100_50_33 +#define PLLMR1_DEFAULT PLLMR1_200_100_50_33 +#endif +#if 1 /* test-only */ +#define PLLMR0_DEFAULT PLLMR0_133_66_66_33 +#define PLLMR1_DEFAULT PLLMR1_133_66_66_33 +#endif + +#endif +#endif + +#endif /* __CONFIG_H */ diff --git a/lib_ppc/board.c b/lib_ppc/board.c index 8308969..5cf74a2 100644 --- a/lib_ppc/board.c +++ b/lib_ppc/board.c @@ -722,7 +722,7 @@ void board_init_r (gd_t *id, ulong dest_addr) load_sernum_ethaddr (); #endif -#if defined(CFG_GT_6426x) || defined(CONFIG_PN62) +#if defined(CFG_GT_6426x) || defined(CONFIG_PN62) || defined(CONFIG_PPCHAMELEONEVB) /* handle the 2nd ethernet address */ s = getenv ("eth1addr"); |