diff options
Diffstat (limited to 'board/esd')
58 files changed, 0 insertions, 12969 deletions
diff --git a/board/esd/common/cmd_loadpci.c b/board/esd/common/cmd_loadpci.c deleted file mode 100644 index 9541817d09..0000000000 --- a/board/esd/common/cmd_loadpci.c +++ /dev/null @@ -1,108 +0,0 @@ -/* - * (C) Copyright 2005-2008 - * Matthias Fuchs, esd GmbH Germany, matthias.fuchs@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <common.h> -#include <command.h> -#include <console.h> -#if !defined(CONFIG_440) -#include <asm/4xx_pci.h> -#endif - -#if defined(CONFIG_CMD_BSP) -#define ADDRMASK 0xfffff000 - -/* - * Command loadpci: wait for signal from host and boot image. - */ -int do_loadpci(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - u32 *ptr = 0; - int count = 0; - int count2 = 0; - char addr[16]; - char str[] = "\\|/-"; - u32 la, ptm1la; - -#if defined(CONFIG_440) - ptm1la = in32r(PCIL0_PTM1LA); -#else - ptm1la = in32r(PTM1LA); -#endif - while(1) { - /* - * Mark sync address - */ - ptr = (u32 *)ptm1la; - memset(ptr, 0, 0x20); - - *ptr = 0xffffffff; - puts("\nWaiting for action from pci host -"); - - /* - * Wait for host to write the start address - */ - while (*ptr == 0xffffffff) { - count++; - if (!(count % 100)) { - count2++; - putc(0x08); /* backspace */ - putc(str[count2 % 4]); - } - - /* Abort if ctrl-c was pressed */ - if (ctrlc()) { - puts("\nAbort\n"); - return 0; - } - - udelay(1000); - } - - printf("\nGot bootcode %08x: ", *ptr); - la = ptm1la + (*ptr & ADDRMASK); - sprintf(addr, "%08x", la); - - switch (*ptr & ~ADDRMASK) { - case 0: - /* - * Boot image via bootm - */ - printf("booting image at addr 0x%s ...\n", addr); - setenv("loadaddr", addr); - do_bootm(cmdtp, 0, 0, NULL); - break; - - case 1: - /* - * Boot image via "source" command - */ - printf("executing script at addr 0x%s ...\n", addr); - source(la, NULL); - break; - - case 2: - /* - * Call run_cmd - */ - printf("running command at addr 0x%s ...\n", addr); - run_command((char *)la, 0); - break; - - default: - printf("unhandled boot method\n"); - break; - } - } -} - -U_BOOT_CMD( - loadpci, 1, 1, do_loadpci, - "Wait for pci bootcmd and boot it", - "" -); - -#endif diff --git a/board/esd/common/esd405ep_nand.c b/board/esd/common/esd405ep_nand.c deleted file mode 100644 index 51ac10c8c0..0000000000 --- a/board/esd/common/esd405ep_nand.c +++ /dev/null @@ -1,69 +0,0 @@ -/* - * (C) Copyright 2007 - * Matthias Fuchs, esd gmbh germany, matthias.fuchs@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <common.h> - -#if defined(CONFIG_CMD_NAND) -#include <asm/io.h> -#include <nand.h> - -/* - * hardware specific access to control-lines - */ -static void esd405ep_nand_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl) -{ - struct nand_chip *this = mtd_to_nand(mtd); - if (ctrl & NAND_CTRL_CHANGE) { - if ( ctrl & NAND_CLE ) - out_be32((void *)GPIO0_OR, in_be32((void *)GPIO0_OR) | CONFIG_SYS_NAND_CLE); - else - out_be32((void *)GPIO0_OR, in_be32((void *)GPIO0_OR) & ~CONFIG_SYS_NAND_CLE); - if ( ctrl & NAND_ALE ) - out_be32((void *)GPIO0_OR, in_be32((void *)GPIO0_OR) | CONFIG_SYS_NAND_ALE); - else - out_be32((void *)GPIO0_OR, in_be32((void *)GPIO0_OR) & ~CONFIG_SYS_NAND_ALE); - if ( ctrl & NAND_NCE ) - out_be32((void *)GPIO0_OR, in_be32((void *)GPIO0_OR) & ~CONFIG_SYS_NAND_CE); - else - out_be32((void *)GPIO0_OR, in_be32((void *)GPIO0_OR) | CONFIG_SYS_NAND_CE); - } - - if (cmd != NAND_CMD_NONE) - writeb(cmd, this->IO_ADDR_W); -} - - -/* - * read device ready pin - */ -static int esd405ep_nand_device_ready(struct mtd_info *mtdinfo) -{ - if (in_be32((void *)GPIO0_IR) & CONFIG_SYS_NAND_RDY) - return 1; - return 0; -} - - -int board_nand_init(struct nand_chip *nand) -{ - /* - * Set NAND-FLASH GPIO signals to defaults - */ - out_be32((void *)GPIO0_OR, in_be32((void *)GPIO0_OR) & ~(CONFIG_SYS_NAND_CLE | CONFIG_SYS_NAND_ALE)); - out_be32((void *)GPIO0_OR, in_be32((void *)GPIO0_OR) | CONFIG_SYS_NAND_CE); - - /* - * Initialize nand_chip structure - */ - nand->cmd_ctrl = esd405ep_nand_hwcontrol; - nand->dev_ready = esd405ep_nand_device_ready; - nand->ecc.mode = NAND_ECC_SOFT; - nand->chip_delay = NAND_BIG_DELAY_US; - nand->options = NAND_SAMSUNG_LP_OPTIONS; - return 0; -} -#endif diff --git a/board/esd/common/flash.c b/board/esd/common/flash.c deleted file mode 100644 index e3512c78da..0000000000 --- a/board/esd/common/flash.c +++ /dev/null @@ -1,659 +0,0 @@ -/* - * (C) Copyright 2001 - * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <common.h> -#ifdef __PPC__ -#include <asm/ppc4xx.h> -#endif -#include <asm/processor.h> - -flash_info_t flash_info[CONFIG_SYS_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_EXCEL: printf ("Excel Semiconductor "); 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_SST320: printf ("SST39LF/VF320 (32 Mbit, uniform sector size)\n"); - break; - case FLASH_SST640: printf ("SST39LF/VF640 (64 Mbit, uniform sector size)\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 CONFIG_SYS_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; - CONFIG_SYS_FLASH_WORD_SIZE value; - ulong base = (ulong)addr; - volatile CONFIG_SYS_FLASH_WORD_SIZE *addr2 = (CONFIG_SYS_FLASH_WORD_SIZE *)addr; - - /* Write auto select command: read Manufacturer ID */ - addr2[CONFIG_SYS_FLASH_ADDR0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00AA00AA; - addr2[CONFIG_SYS_FLASH_ADDR1] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00550055; - addr2[CONFIG_SYS_FLASH_ADDR0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00900090; - - value = addr2[CONFIG_SYS_FLASH_READ0]; - - switch (value) { - case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_MANUFACT: - info->flash_id = FLASH_MAN_AMD; - break; - case (CONFIG_SYS_FLASH_WORD_SIZE)FUJ_MANUFACT: - info->flash_id = FLASH_MAN_FUJ; - break; - case (CONFIG_SYS_FLASH_WORD_SIZE)SST_MANUFACT: - info->flash_id = FLASH_MAN_SST; - break; - case (CONFIG_SYS_FLASH_WORD_SIZE)EXCEL_MANUFACT: - info->flash_id = FLASH_MAN_EXCEL; - break; - default: - info->flash_id = FLASH_UNKNOWN; - info->sector_count = 0; - info->size = 0; - return (0); /* no or unknown flash */ - } - - value = addr2[CONFIG_SYS_FLASH_READ1]; /* device ID */ - - switch (value) { - case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_LV400T: - info->flash_id += FLASH_AM400T; - info->sector_count = 11; - info->size = 0x00080000; - break; /* => 0.5 MB */ - - case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_LV400B: - info->flash_id += FLASH_AM400B; - info->sector_count = 11; - info->size = 0x00080000; - break; /* => 0.5 MB */ - - case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_LV800T: - info->flash_id += FLASH_AM800T; - info->sector_count = 19; - info->size = 0x00100000; - break; /* => 1 MB */ - - case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_LV800B: - info->flash_id += FLASH_AM800B; - info->sector_count = 19; - info->size = 0x00100000; - break; /* => 1 MB */ - - case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_LV160T: - info->flash_id += FLASH_AM160T; - info->sector_count = 35; - info->size = 0x00200000; - break; /* => 2 MB */ - - case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_LV160B: - info->flash_id += FLASH_AM160B; - info->sector_count = 35; - info->size = 0x00200000; - break; /* => 2 MB */ - - case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_LV320T: - info->flash_id += FLASH_AM320T; - info->sector_count = 71; - info->size = 0x00400000; break; /* => 4 MB */ - - case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_LV320B: - info->flash_id += FLASH_AM320B; - info->sector_count = 71; - info->size = 0x00400000; break; /* => 4 MB */ - - case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_DL322T: - info->flash_id += FLASH_AMDL322T; - info->sector_count = 71; - info->size = 0x00400000; break; /* => 4 MB */ - - case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_DL322B: - info->flash_id += FLASH_AMDL322B; - info->sector_count = 71; - info->size = 0x00400000; break; /* => 4 MB */ - - case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_DL323T: - info->flash_id += FLASH_AMDL323T; - info->sector_count = 71; - info->size = 0x00400000; break; /* => 4 MB */ - - case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_DL323B: - info->flash_id += FLASH_AMDL323B; - info->sector_count = 71; - info->size = 0x00400000; break; /* => 4 MB */ - - case (CONFIG_SYS_FLASH_WORD_SIZE)AMD_ID_LV640U: - info->flash_id += FLASH_AM640U; - info->sector_count = 128; - info->size = 0x00800000; break; /* => 8 MB */ - -#if !(defined(CONFIG_ADCIOP) || defined(CONFIG_DASA_SIM)) - case (CONFIG_SYS_FLASH_WORD_SIZE)SST_ID_xF800A: - info->flash_id += FLASH_SST800A; - info->sector_count = 16; - info->size = 0x00100000; - break; /* => 1 MB */ - - case (CONFIG_SYS_FLASH_WORD_SIZE)SST_ID_xF160A: - case (CONFIG_SYS_FLASH_WORD_SIZE)SST_ID_xF1601: - case (CONFIG_SYS_FLASH_WORD_SIZE)SST_ID_xF1602: - info->flash_id += FLASH_SST160A; - info->sector_count = 32; - info->size = 0x00200000; - break; /* => 2 MB */ - - case (CONFIG_SYS_FLASH_WORD_SIZE)SST_ID_xF3201: - case (CONFIG_SYS_FLASH_WORD_SIZE)SST_ID_xF3202: - info->flash_id += FLASH_SST320; - info->sector_count = 64; - info->size = 0x00400000; - break; /* => 4 MB */ - - case (CONFIG_SYS_FLASH_WORD_SIZE)SST_ID_xF6401: - case (CONFIG_SYS_FLASH_WORD_SIZE)SST_ID_xF6402: - info->flash_id += FLASH_SST640; - info->sector_count = 128; - info->size = 0x00800000; - break; /* => 8 MB */ -#endif - - 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_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 CONFIG_SYS_FLASH_WORD_SIZE *)(info->start[i]); - if ((info->flash_id & FLASH_VENDMASK) != FLASH_MAN_AMD) - info->protect[i] = 0; - else - info->protect[i] = addr2[CONFIG_SYS_FLASH_READ2] & 1; - } - - /* - * Prevent writes to uninitialized FLASH. - */ - if (info->flash_id != FLASH_UNKNOWN) { - addr2 = (CONFIG_SYS_FLASH_WORD_SIZE *)info->start[0]; - *addr2 = (CONFIG_SYS_FLASH_WORD_SIZE)0x00F000F0; /* reset bank */ - } - - return (info->size); -} - - -/*----------------------------------------------------------------------- - */ - -int flash_erase (flash_info_t *info, int s_first, int s_last) -{ - volatile CONFIG_SYS_FLASH_WORD_SIZE *addr = (CONFIG_SYS_FLASH_WORD_SIZE *)(info->start[0]); - volatile CONFIG_SYS_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 = (CONFIG_SYS_FLASH_WORD_SIZE *)(info->start[sect]); - if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_SST) { - addr[CONFIG_SYS_FLASH_ADDR0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00AA00AA; - addr[CONFIG_SYS_FLASH_ADDR1] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00550055; - addr[CONFIG_SYS_FLASH_ADDR0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00800080; - addr[CONFIG_SYS_FLASH_ADDR0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00AA00AA; - addr[CONFIG_SYS_FLASH_ADDR1] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00550055; - addr2[0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00500050; /* block erase */ - for (i=0; i<50; i++) - udelay(1000); /* wait 1 ms */ - } else { - if (sect == s_first) { - addr[CONFIG_SYS_FLASH_ADDR0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00AA00AA; - addr[CONFIG_SYS_FLASH_ADDR1] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00550055; - addr[CONFIG_SYS_FLASH_ADDR0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00800080; - addr[CONFIG_SYS_FLASH_ADDR0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00AA00AA; - addr[CONFIG_SYS_FLASH_ADDR1] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00550055; - } - addr2[0] = (CONFIG_SYS_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 = (CONFIG_SYS_FLASH_WORD_SIZE *)(info->start[l_sect]); - while ((addr[0] & (CONFIG_SYS_FLASH_WORD_SIZE)0x00800080) != (CONFIG_SYS_FLASH_WORD_SIZE)0x00800080) { - if ((now = get_timer(start)) > CONFIG_SYS_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 = (CONFIG_SYS_FLASH_WORD_SIZE *)info->start[0]; - addr[0] = (CONFIG_SYS_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) -{ - ulong *data_ptr = &data; - volatile CONFIG_SYS_FLASH_WORD_SIZE *addr2 = (CONFIG_SYS_FLASH_WORD_SIZE *)(info->start[0]); - volatile CONFIG_SYS_FLASH_WORD_SIZE *dest2 = (CONFIG_SYS_FLASH_WORD_SIZE *)dest; - volatile CONFIG_SYS_FLASH_WORD_SIZE *data2 = (CONFIG_SYS_FLASH_WORD_SIZE *)data_ptr; - ulong start; - int flag; - int i; - - /* Check if Flash is (sufficiently) erased */ - if ((*((vu_long *)dest) & data) != data) { - return (2); - } - - /* Disable interrupts which might cause a timeout here */ - flag = disable_interrupts(); - - for (i=0; i<4/sizeof(CONFIG_SYS_FLASH_WORD_SIZE); i++) - { - addr2[CONFIG_SYS_FLASH_ADDR0] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00AA00AA; - addr2[CONFIG_SYS_FLASH_ADDR1] = (CONFIG_SYS_FLASH_WORD_SIZE)0x00550055; - addr2[CONFIG_SYS_FLASH_ADDR0] = (CONFIG_SYS_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] & (CONFIG_SYS_FLASH_WORD_SIZE)0x00800080) != - (data2[i] & (CONFIG_SYS_FLASH_WORD_SIZE)0x00800080)) { - if (get_timer(start) > CONFIG_SYS_FLASH_WRITE_TOUT) { - return (1); - } - } - } - - return (0); -} - -/*----------------------------------------------------------------------- - */ diff --git a/board/esd/common/fpga.c b/board/esd/common/fpga.c deleted file mode 100644 index 5c70b474d9..0000000000 --- a/board/esd/common/fpga.c +++ /dev/null @@ -1,261 +0,0 @@ -/* - * (C) Copyright 2001-2004 - * Matthias Fuchs, esd gmbh germany, matthias.fuchs@esd-electronics.com - * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <common.h> -#include <asm/processor.h> -#include <asm/io.h> -#include <command.h> - -/* ------------------------------------------------------------------------- */ - -#ifdef FPGA_DEBUG -#define DBG(x...) printf(x) -#else -#define DBG(x...) -#endif /* DEBUG */ - -#define MAX_ONES 226 - -#ifdef CONFIG_SYS_FPGA_PRG -# define FPGA_PRG CONFIG_SYS_FPGA_PRG /* FPGA program pin (ppc output) */ -# define FPGA_CLK CONFIG_SYS_FPGA_CLK /* FPGA clk pin (ppc output) */ -# define FPGA_DATA CONFIG_SYS_FPGA_DATA /* FPGA data pin (ppc output) */ -# define FPGA_DONE CONFIG_SYS_FPGA_DONE /* FPGA done pin (ppc input) */ -# define FPGA_INIT CONFIG_SYS_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 */ - -#ifndef SET_FPGA -# define SET_FPGA(data) out_be32((void *)GPIO0_OR, data) -#endif - -#ifdef FPGA_PROG_ACTIVE_HIGH -# define FPGA_PRG_LOW FPGA_PRG -# define FPGA_PRG_HIGH 0 -#else -# define FPGA_PRG_LOW 0 -# define FPGA_PRG_HIGH FPGA_PRG -#endif - -#define FPGA_CLK_LOW 0 -#define FPGA_CLK_HIGH FPGA_CLK - -#define FPGA_DATA_LOW 0 -#define FPGA_DATA_HIGH FPGA_DATA - -#define FPGA_WRITE_1 { \ - SET_FPGA(FPGA_PRG_HIGH | FPGA_CLK_LOW | FPGA_DATA_HIGH); /* set clock to 0 */ \ - SET_FPGA(FPGA_PRG_HIGH | FPGA_CLK_LOW | FPGA_DATA_HIGH); /* set data to 1 */ \ - SET_FPGA(FPGA_PRG_HIGH | FPGA_CLK_HIGH | FPGA_DATA_HIGH); /* set clock to 1 */ \ - SET_FPGA(FPGA_PRG_HIGH | FPGA_CLK_HIGH | FPGA_DATA_HIGH);} /* set data to 1 */ - -#define FPGA_WRITE_0 { \ - SET_FPGA(FPGA_PRG_HIGH | FPGA_CLK_LOW | FPGA_DATA_HIGH); /* set clock to 0 */ \ - SET_FPGA(FPGA_PRG_HIGH | FPGA_CLK_LOW | FPGA_DATA_LOW); /* set data to 0 */ \ - SET_FPGA(FPGA_PRG_HIGH | FPGA_CLK_HIGH | FPGA_DATA_LOW); /* set clock to 1 */ \ - SET_FPGA(FPGA_PRG_HIGH | FPGA_CLK_HIGH | FPGA_DATA_HIGH);} /* set data to 1 */ - -#ifndef FPGA_DONE_STATE -# define FPGA_DONE_STATE (in_be32((void *)GPIO0_IR) & FPGA_DONE) -#endif -#ifndef FPGA_INIT_STATE -# define FPGA_INIT_STATE (in_be32((void *)GPIO0_IR) & FPGA_INIT) -#endif - - -static int fpga_boot (const unsigned char *fpgadata, int size) -{ - int i, index, len; - int count; - unsigned char b; - -#ifdef CONFIG_SYS_FPGA_SPARTAN2 - int j; -#else - 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 CONFIG_SYS_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 - */ -#ifndef CONFIG_M5249 - out_be32 ((void *)GPIO0_ODR, 0x00000000); /* no open drain pins */ - /* setup for output */ - out_be32 ((void *)GPIO0_TCR, - in_be32 ((void *)GPIO0_TCR) | - FPGA_PRG | FPGA_CLK | FPGA_DATA); -#endif - SET_FPGA (FPGA_PRG_HIGH | FPGA_CLK_HIGH | FPGA_DATA_HIGH); /* set pins to high */ - - DBG ("%s, ", (FPGA_DONE_STATE == 0) ? "NOT DONE" : "DONE"); - DBG ("%s\n", (FPGA_INIT_STATE == 0) ? "NOT INIT" : "INIT"); - - /* - * Init fpga by asserting and deasserting PROGRAM* - */ - SET_FPGA (FPGA_PRG_LOW | FPGA_CLK_HIGH | FPGA_DATA_HIGH); /* set prog active */ - - /* Wait for FPGA init line low */ - count = 0; - while (FPGA_INIT_STATE) { - 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, ", (FPGA_DONE_STATE == 0) ? "NOT DONE" : "DONE"); - DBG ("%s\n", (FPGA_INIT_STATE == 0) ? "NOT INIT" : "INIT"); - - /* deassert PROGRAM* */ - SET_FPGA (FPGA_PRG_HIGH | FPGA_CLK_HIGH | FPGA_DATA_HIGH); /* set prog inactive */ - - /* Wait for FPGA end of init period . */ - count = 0; - while (!(FPGA_INIT_STATE)) { - udelay (1000); /* wait 1ms */ - /* Check for timeout */ - if (count++ > 3) { - DBG ("FPGA: Booting failed!\n"); - return ERROR_FPGA_PRG_INIT_HIGH; - } - } - - DBG ("%s, ", (FPGA_DONE_STATE == 0) ? "NOT DONE" : "DONE"); - DBG ("%s\n", (FPGA_INIT_STATE == 0) ? "NOT INIT" : "INIT"); - - DBG ("write configuration data into fpga\n"); - /* write configuration-data into fpga... */ - -#ifdef CONFIG_SYS_FPGA_SPARTAN2 - /* - * Load uncompressed image into fpga - */ - for (i = index; i < size; i++) { - b = fpgadata[i]; - for (j = 0; j < 8; j++) { - if ((b & 0x80) == 0x80) { - FPGA_WRITE_1; - } else { - FPGA_WRITE_0; - } - b <<= 1; - } - } -#else - /* 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 - - DBG ("%s, ", (FPGA_DONE_STATE == 0) ? "NOT DONE" : "DONE"); - DBG ("%s\n", (FPGA_INIT_STATE == 0) ? "NOT INIT" : "INIT"); - - /* - * Check if fpga's DONE signal - correctly booted ? - */ - - /* Wait for FPGA end of programming period . */ - count = 0; - while (!(FPGA_DONE_STATE)) { - 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; -} diff --git a/board/esd/common/lcd.c b/board/esd/common/lcd.c deleted file mode 100644 index 29421fce2e..0000000000 --- a/board/esd/common/lcd.c +++ /dev/null @@ -1,359 +0,0 @@ -/* - * (C) Copyright 2003-2004 - * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com - * - * (C) Copyright 2005 - * Stefan Roese, DENX Software Engineering, sr@denx.de. - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <asm/io.h> -#include "lcd.h" - - -extern int video_display_bitmap (ulong, int, int); - - -int palette_index; -int palette_value; -int lcd_depth; -unsigned char *glob_lcd_reg; -unsigned char *glob_lcd_mem; - -#if defined(CONFIG_SYS_LCD_ENDIAN) -void lcd_setup(int lcd, int config) -{ - if (lcd == 0) { - /* - * Set endianess and reset lcd controller 0 (small) - */ - - /* set reset to low */ - out_be32((void*)GPIO0_OR, - in_be32((void*)GPIO0_OR) & ~CONFIG_SYS_LCD0_RST); - udelay(10); /* wait 10us */ - if (config == 1) { - /* big-endian */ - out_be32((void*)GPIO0_OR, - in_be32((void*)GPIO0_OR) | CONFIG_SYS_LCD_ENDIAN); - } else { - /* little-endian */ - out_be32((void*)GPIO0_OR, - in_be32((void*)GPIO0_OR) & ~CONFIG_SYS_LCD_ENDIAN); - } - udelay(10); /* wait 10us */ - /* set reset to high */ - out_be32((void*)GPIO0_OR, - in_be32((void*)GPIO0_OR) | CONFIG_SYS_LCD0_RST); - } else { - /* - * Set endianess and reset lcd controller 1 (big) - */ - - /* set reset to low */ - out_be32((void*)GPIO0_OR, - in_be32((void*)GPIO0_OR) & ~CONFIG_SYS_LCD1_RST); - udelay(10); /* wait 10us */ - if (config == 1) { - /* big-endian */ - out_be32((void*)GPIO0_OR, - in_be32((void*)GPIO0_OR) | CONFIG_SYS_LCD_ENDIAN); - } else { - /* little-endian */ - out_be32((void*)GPIO0_OR, - in_be32((void*)GPIO0_OR) & ~CONFIG_SYS_LCD_ENDIAN); - } - udelay(10); /* wait 10us */ - /* set reset to high */ - out_be32((void*)GPIO0_OR, - in_be32((void*)GPIO0_OR) | CONFIG_SYS_LCD1_RST); - } - - /* - * CONFIG_SYS_LCD_ENDIAN may also be FPGA_RESET, so set inactive - */ - out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) | CONFIG_SYS_LCD_ENDIAN); -} -#endif /* CONFIG_SYS_LCD_ENDIAN */ - - -int lcd_bmp(uchar *logo_bmp) -{ - int i; - uchar *ptr; - ushort *ptr2; - ushort val; - unsigned char *dst = NULL; - int x, y; - int width, height, bpp, colors, line_size; - int header_size; - unsigned char *bmp; - unsigned char r, g, b; - BITMAPINFOHEADER *bm_info; - ulong len; - - /* - * Check for bmp mark 'BM' - */ - if (*(ushort *)logo_bmp != 0x424d) { - /* - * Decompress bmp image - */ - len = CONFIG_SYS_VIDEO_LOGO_MAX_SIZE; - dst = malloc(CONFIG_SYS_VIDEO_LOGO_MAX_SIZE); - if (dst == NULL) { - printf("Error: malloc for gunzip failed!\n"); - return 1; - } - if (gunzip(dst, CONFIG_SYS_VIDEO_LOGO_MAX_SIZE, - (uchar *)logo_bmp, &len) != 0) { - free(dst); - return 1; - } - if (len == CONFIG_SYS_VIDEO_LOGO_MAX_SIZE) { - printf("Image could be truncated" - " (increase CONFIG_SYS_VIDEO_LOGO_MAX_SIZE)!\n"); - } - - /* - * Check for bmp mark 'BM' - */ - if (*(ushort *)dst != 0x424d) { - printf("LCD: Unknown image format!\n"); - free(dst); - return 1; - } - } else { - /* - * Uncompressed BMP image, just use this pointer - */ - dst = (uchar *)logo_bmp; - } - - /* - * Get image info from bmp-header - */ - bm_info = (BITMAPINFOHEADER *)(dst + 14); - bpp = LOAD_SHORT(bm_info->biBitCount); - width = LOAD_LONG(bm_info->biWidth); - height = LOAD_LONG(bm_info->biHeight); - switch (bpp) { - case 1: - colors = 1; - line_size = width >> 3; - break; - case 4: - colors = 16; - line_size = width >> 1; - break; - case 8: - colors = 256; - line_size = width; - break; - case 24: - colors = 0; - line_size = width * 3; - break; - default: - printf("LCD: Unknown bpp (%d) im image!\n", bpp); - if ((dst != NULL) && (dst != (uchar *)logo_bmp)) - free(dst); - return 1; - } - printf(" (%d*%d, %dbpp)\n", width, height, bpp); - - /* - * Write color palette - */ - if ((colors <= 256) && (lcd_depth <= 8)) { - ptr = (unsigned char *)(dst + 14 + 40); - for (i = 0; i < colors; i++) { - b = *ptr++; - g = *ptr++; - r = *ptr++; - ptr++; - S1D_WRITE_PALETTE(glob_lcd_reg, i, r, g, b); - } - } - - /* - * Write bitmap data into framebuffer - */ - ptr = glob_lcd_mem; - ptr2 = (ushort *)glob_lcd_mem; - header_size = 14 + 40 + 4*colors; /* skip bmp header */ - for (y = 0; y < height; y++) { - bmp = &dst[(height-1-y)*line_size + header_size]; - if (lcd_depth == 16) { - if (bpp == 24) { - for (x = 0; x < width; x++) { - /* - * Generate epson 16bpp fb-format - * from 24bpp image - */ - b = *bmp++ >> 3; - g = *bmp++ >> 2; - r = *bmp++ >> 3; - val = ((r & 0x1f) << 11) | - ((g & 0x3f) << 5) | - (b & 0x1f); - *ptr2++ = val; - } - } else if (bpp == 8) { - for (x = 0; x < line_size; x++) { - /* query rgb value from palette */ - ptr = (unsigned char *)(dst + 14 + 40); - ptr += (*bmp++) << 2; - b = *ptr++ >> 3; - g = *ptr++ >> 2; - r = *ptr++ >> 3; - val = ((r & 0x1f) << 11) | - ((g & 0x3f) << 5) | - (b & 0x1f); - *ptr2++ = val; - } - } - } else { - for (x = 0; x < line_size; x++) - *ptr++ = *bmp++; - } - } - - if ((dst != NULL) && (dst != (uchar *)logo_bmp)) - free(dst); - return 0; -} - - -int lcd_init(uchar *lcd_reg, uchar *lcd_mem, S1D_REGS *regs, int reg_count, - uchar *logo_bmp, ulong len) -{ - int i; - ushort s1dReg; - uchar s1dValue; - int reg_byte_swap; - - /* - * Detect epson - */ - out_8(&lcd_reg[0], 0x00); - out_8(&lcd_reg[1], 0x00); - - if (in_8(&lcd_reg[0]) == 0x1c) { - /* - * Big epson detected - */ - reg_byte_swap = false; - palette_index = 0x1e2; - palette_value = 0x1e4; - lcd_depth = 16; - puts("LCD: S1D13806"); - } else if (in_8(&lcd_reg[1]) == 0x1c) { - /* - * Big epson detected (with register swap bug) - */ - reg_byte_swap = true; - palette_index = 0x1e3; - palette_value = 0x1e5; - lcd_depth = 16; - puts("LCD: S1D13806S"); - } else if (in_8(&lcd_reg[0]) == 0x18) { - /* - * Small epson detected (704) - */ - reg_byte_swap = false; - palette_index = 0x15; - palette_value = 0x17; - lcd_depth = 8; - puts("LCD: S1D13704"); - } else if (in_8(&lcd_reg[0x10000]) == 0x24) { - /* - * Small epson detected (705) - */ - reg_byte_swap = false; - palette_index = 0x15; - palette_value = 0x17; - lcd_depth = 8; - lcd_reg += 0x10000; /* add offset for 705 regs */ - puts("LCD: S1D13705"); - } else { - out_8(&lcd_reg[0x1a], 0x00); - udelay(1000); - if (in_8(&lcd_reg[1]) == 0x0c) { - /* - * S1D13505 detected - */ - reg_byte_swap = true; - palette_index = 0x25; - palette_value = 0x27; - lcd_depth = 16; - - puts("LCD: S1D13505"); - } else { - puts("LCD: No controller detected!\n"); - return 1; - } - } - - /* - * Setup lcd controller regs - */ - for (i = 0; i < reg_count; i++) { - s1dReg = regs[i].Index; - if (reg_byte_swap) { - if ((s1dReg & 0x0001) == 0) - s1dReg |= 0x0001; - else - s1dReg &= ~0x0001; - } - s1dValue = regs[i].Value; - out_8(&lcd_reg[s1dReg], s1dValue); - } - - /* - * Save reg & mem pointer for later usage (e.g. bmp command) - */ - glob_lcd_reg = lcd_reg; - glob_lcd_mem = lcd_mem; - - /* - * Display bmp image - */ - return lcd_bmp(logo_bmp); -} - -int do_esdbmp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - ulong addr; -#ifdef CONFIG_VIDEO_SM501 - char *str; -#endif - if (argc != 2) - return cmd_usage(cmdtp); - - addr = simple_strtoul(argv[1], NULL, 16); - -#ifdef CONFIG_VIDEO_SM501 - str = getenv("bd_type"); - if ((strcmp(str, "ppc221") == 0) || (strcmp(str, "ppc231") == 0)) { - /* - * SM501 available, use standard bmp command - */ - return video_display_bitmap(addr, 0, 0); - } else { - /* - * No SM501 available, use esd epson bmp command - */ - return lcd_bmp((uchar *)addr); - } -#else - return lcd_bmp((uchar *)addr); -#endif -} - -U_BOOT_CMD( - esdbmp, 2, 1, do_esdbmp, - "display BMP image", - "<imageAddr> - display image" -); diff --git a/board/esd/common/lcd.h b/board/esd/common/lcd.h deleted file mode 100644 index 5b14bf9260..0000000000 --- a/board/esd/common/lcd.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * (C) Copyright 2003-2004 - * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -/* - * Neutralize little endians. - */ -#define SWAP_LONG(data) ((unsigned long) \ - (((unsigned long)(data) >> 24) | \ - ((unsigned long)(data) << 24) | \ - (((unsigned long)(data) >> 8) & 0x0000ff00 ) | \ - (((unsigned long)(data) << 8) & 0x00ff0000 ))) -#define SWAP_SHORT(data) ((unsigned short) \ - (((unsigned short)(data) >> 8 ) | \ - ((unsigned short)(data) << 8 ))) -#define LOAD_LONG(data) SWAP_LONG(data) -#define LOAD_SHORT(data) SWAP_SHORT(data) - -#define S1D_WRITE_PALETTE(p,i,r,g,b) \ - { \ - out_8(&((uchar*)(p))[palette_index], (uchar)(i)); \ - out_8(&((uchar*)(p))[palette_index], (uchar)(r)); \ - out_8(&((uchar*)(p))[palette_index], (uchar)(g)); \ - out_8(&((uchar*)(p))[palette_index], (uchar)(b)); \ - } - -typedef struct -{ - ushort Index; - uchar Value; -} S1D_REGS; - -typedef struct /**** BMP file info structure ****/ -{ - unsigned int biSize; /* Size of info header */ - int biWidth; /* Width of image */ - int biHeight; /* Height of image */ - unsigned short biPlanes; /* Number of color planes */ - unsigned short biBitCount; /* Number of bits per pixel */ - unsigned int biCompression; /* Type of compression to use */ - unsigned int biSizeImage; /* Size of image data */ - int biXPelsPerMeter; /* X pixels per meter */ - int biYPelsPerMeter; /* Y pixels per meter */ - unsigned int biClrUsed; /* Number of colors used */ - unsigned int biClrImportant; /* Number of important colors */ -} BITMAPINFOHEADER; diff --git a/board/esd/common/misc.c b/board/esd/common/misc.c deleted file mode 100644 index 79cd61273e..0000000000 --- a/board/esd/common/misc.c +++ /dev/null @@ -1,24 +0,0 @@ -/* - * (C) Copyright 2004 - * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <common.h> - -#ifdef CONFIG_LXT971_NO_SLEEP -#include <miiphy.h> -#endif - - -#ifdef CONFIG_LXT971_NO_SLEEP -void lxt971_no_sleep(void) -{ - unsigned short reg; - - miiphy_read("ppc_4xx_eth0", CONFIG_PHY_ADDR, 0x10, ®); - reg &= ~0x0040; /* disable sleep mode */ - miiphy_write("ppc_4xx_eth0", CONFIG_PHY_ADDR, 0x10, reg); -} -#endif /* CONFIG_LXT971_NO_SLEEP */ diff --git a/board/esd/common/pci.c b/board/esd/common/pci.c deleted file mode 100644 index faebdb1829..0000000000 --- a/board/esd/common/pci.c +++ /dev/null @@ -1,186 +0,0 @@ -/* - * (C) Copyright 2001 - * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <common.h> -#include <asm/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(CONFIG_SYS_PCI9054_DEV_FN, PCI_COMMAND, &status); - status |= PCI_COMMAND_MASTER | PCI_COMMAND_IO | PCI_COMMAND_MEMORY; - pci_write_config_word(CONFIG_SYS_PCI9054_DEV_FN, PCI_COMMAND, status); - - /* Check the latency timer for values >= 0x60. - */ - pci_read_config_byte(CONFIG_SYS_PCI9054_DEV_FN, PCI_LATENCY_TIMER, &timer); - if (timer < 0x60) - { - pci_write_config_byte(CONFIG_SYS_PCI9054_DEV_FN, PCI_LATENCY_TIMER, 0x60); - } - - /* Set I/O base register. - */ - pci_write_config_dword(CONFIG_SYS_PCI9054_DEV_FN, PCI_BASE_ADDRESS_0, CONFIG_SYS_PCI9054_IOBASE); - pci_read_config_dword(CONFIG_SYS_PCI9054_DEV_FN, PCI_BASE_ADDRESS_0, &iobase); - - pci9054_iobase = pci_mem_to_phys(CONFIG_SYS_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(CONFIG_SYS_ETH_DEV_FN), PCI_DEV(CONFIG_SYS_ETH_DEV_FN), PCI_FUNC(CONFIG_SYS_ETH_DEV_FN), - pci_cfgfunc_config_device, { CONFIG_SYS_ETH_IOBASE, - CONFIG_SYS_ETH_IOBASE, - PCI_COMMAND_IO | PCI_COMMAND_MASTER }}, -#ifdef CONFIG_DASA_SIM - { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, - PCI_BUS(CONFIG_SYS_PCI9054_DEV_FN), PCI_DEV(CONFIG_SYS_PCI9054_DEV_FN), PCI_FUNC(CONFIG_SYS_PCI9054_DEV_FN), - pci_dasa_sim_config_pci9054 }, -#endif -#endif - { } -}; - -static struct pci_controller pci9054_hose = { - config_table: pci9054_config_table, -}; - -void pci_init_board(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_SYS_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/esd/common/s1d13505_640_480_16bpp.h b/board/esd/common/s1d13505_640_480_16bpp.h deleted file mode 100644 index ca11683a22..0000000000 --- a/board/esd/common/s1d13505_640_480_16bpp.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * (C) Copyright 2008 - * Matthias Fuchs, esd gmbh germany, matthias.fuchs@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -/* - * Panel: 640x480 50Hz TFT Single 18-bit (PCLK=20.000 MHz) - * Memory: DRAM (MCLK=40.000 MHz) - */ -static S1D_REGS regs_13505_640_480_16bpp[] = -{ - {0x1B,0x00}, /* Miscellaneous Register */ - {0x23,0x20}, /* Performance Enhancement Register 1 */ - {0x01,0x30}, /* Memory Configuration Register */ - {0x22,0x24}, /* Performance Enhancement Register 0 */ - {0x02,0x25}, /* Panel Type Register */ - {0x03,0x00}, /* MOD Rate Register */ - {0x04,0x4F}, /* Horizontal Display Width Register */ - {0x05,0x0c}, /* Horizontal Non-Display Period Register */ - {0x06,0x00}, /* HRTC/FPLINE Start Position Register */ - {0x07,0x01}, /* HRTC/FPLINE Pulse Width Register */ - {0x08,0xDF}, /* Vertical Display Height Register 0 */ - {0x09,0x01}, /* Vertical Display Height Register 1 */ - {0x0A,0x3E}, /* Vertical Non-Display Period Register */ - {0x0B,0x00}, /* VRTC/FPFRAME Start Position Register */ - {0x0C,0x01}, /* VRTC/FPFRAME Pulse Width Register */ - {0x0E,0xFF}, /* Screen 1 Line Compare Register 0 */ - {0x0F,0x03}, /* Screen 1 Line Compare Register 1 */ - {0x10,0x00}, /* Screen 1 Display Start Address Register 0 */ - {0x11,0x00}, /* Screen 1 Display Start Address Register 1 */ - {0x12,0x00}, /* Screen 1 Display Start Address Register 2 */ - {0x13,0x00}, /* Screen 2 Display Start Address Register 0 */ - {0x14,0x00}, /* Screen 2 Display Start Address Register 1 */ - {0x15,0x00}, /* Screen 2 Display Start Address Register 2 */ - {0x16,0x80}, /* Memory Address Offset Register 0 */ - {0x17,0x02}, /* Memory Address Offset Register 1 */ - {0x18,0x00}, /* Pixel Panning Register */ - {0x19,0x01}, /* Clock Configuration Register */ - {0x1A,0x00}, /* Power Save Configuration Register */ - {0x1C,0x00}, /* MD Configuration Readback Register 0 */ - {0x1E,0x06}, /* General IO Pins Configuration Register 0 */ - {0x1F,0x00}, /* General IO Pins Configuration Register 1 */ - {0x20,0x00}, /* General IO Pins Control Register 0 */ - {0x21,0x00}, /* General IO Pins Control Register 1 */ - {0x23,0x20}, /* Performance Enhancement Register 1 */ - {0x0D,0x15}, /* Display Mode Register */ -}; diff --git a/board/esd/common/s1d13704_320_240_4bpp.h b/board/esd/common/s1d13704_320_240_4bpp.h deleted file mode 100644 index bd910e8b25..0000000000 --- a/board/esd/common/s1d13704_320_240_4bpp.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2000,2001 Epson Research and Development, Inc. - * - * SPDX-License-Identifier: GPL-2.0+ - * - * Generic Header information generated by 13704CFG.EXE (Build 10) - * Panel: 320x240x4bpp 78Hz Mono 4-Bit STN, Disabled (PCLK=6.666MHz) - */ - -static S1D_REGS regs_13704_320_240_4bpp[] = -{ - { 0x00, 0x00 }, /* Revision Code Register */ - { 0x01, 0x04 }, /*00*/ /* Mode Register 0 Register */ - { 0x02, 0xA4 }, /*a0*/ /* Mode Register 1 Register */ - { 0x03, 0x83 }, /*03*/ /* Mode Register 2 Register - bit7 is LUT bypass */ - { 0x04, 0x27 }, /* Horizontal Panel Size Register */ - { 0x05, 0xEF }, /* Vertical Panel Size Register (LSB) */ - { 0x06, 0x00 }, /* Vertical Panel Size Register (MSB) */ - { 0x07, 0x00 }, /* FPLINE Start Position Register */ - { 0x08, 0x00 }, /* Horizontal Non-Display Period Register */ - { 0x09, 0x00 }, /* FPFRAME Start Position Register */ - { 0x0A, 0x02 }, /* Vertical Non-Display Period Register */ - { 0x0B, 0x00 }, /* MOD Rate Register */ - { 0x0C, 0x00 }, /* Screen 1 Start Address Register (LSB) */ - { 0x0D, 0x00 }, /* Screen 1 Start Address Register (MSB) */ - { 0x0E, 0x00 }, /* Not Used */ - { 0x0F, 0x00 }, /* Screen 2 Start Address Register (LSB) */ - { 0x10, 0x00 }, /* Screen 2 Start Address Register (MSB) */ - { 0x11, 0x00 }, /* Not Used */ - { 0x12, 0x00 }, /* Memory Address Offset Register */ - { 0x13, 0xFF }, /* Screen 1 Vertical Size Register (LSB) */ - { 0x14, 0x03 }, /* Screen 1 Vertical Size Register (MSB) */ - { 0x15, 0x00 }, /* Look-Up Table Address Register */ - { 0x16, 0x00 }, /* Look-Up Table Bank Select Register */ - { 0x17, 0x00 }, /* Look-Up Table Data Register */ - { 0x18, 0x01 }, /* GPIO Configuration Control Register */ - { 0x19, 0x01 }, /* GPIO Status/Control Register */ - { 0x1A, 0x00 }, /* Scratch Pad Register */ - { 0x1B, 0x00 }, /* SwivelView Mode Register */ - { 0x1C, 0xA0 }, /* Line Byte Count Register */ - { 0x1D, 0x00 }, /* Not Used */ - { 0x1E, 0x00 }, /* Not Used */ - { 0x1F, 0x00 }, /* Not Used */ -}; diff --git a/board/esd/common/s1d13705_320_240_8bpp.h b/board/esd/common/s1d13705_320_240_8bpp.h deleted file mode 100644 index 041b4a93ca..0000000000 --- a/board/esd/common/s1d13705_320_240_8bpp.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2000,2001 Epson Research and Development, Inc. - * - * SPDX-License-Identifier: GPL-2.0+ - * - * Generic Header information generated by 13704CFG.EXE (Build 10) - * Panel: 320x240x8bpp 78Hz Mono 8-Bit STN, Disabled (PCLK=6.666MHz) - */ - -static S1D_REGS regs_13705_320_240_8bpp[] = -{ - { 0x00, 0x00 }, /* Revision Code Register */ - { 0x01, 0x23 }, /* Mode Register 0 Register */ - { 0x02, 0xE0 }, /* Mode Register 1 Register */ - { 0x03, 0x03 }, /* Mode Register 2 Register - bit7 is LUT bypass */ - { 0x04, 0x27 }, /* Horizontal Panel Size Register */ - { 0x05, 0xEF }, /* Vertical Panel Size Register (LSB) */ - { 0x06, 0x00 }, /* Vertical Panel Size Register (MSB) */ - { 0x07, 0x00 }, /* FPLINE Start Position Register */ - { 0x08, 0x00 }, /* Horizontal Non-Display Period Register */ - { 0x09, 0x01 }, /* FPFRAME Start Position Register */ - { 0x0A, 0x02 }, /* Vertical Non-Display Period Register */ - { 0x0B, 0x00 }, /* MOD Rate Register */ - { 0x0C, 0x00 }, /* Screen 1 Start Address Register (LSB) */ - { 0x0D, 0x00 }, /* Screen 1 Start Address Register (MSB) */ - { 0x0E, 0x00 }, /* Not Used */ - { 0x0F, 0x00 }, /* Screen 2 Start Address Register (LSB) */ - { 0x10, 0x00 }, /* Screen 2 Start Address Register (MSB) */ - { 0x11, 0x00 }, /* Not Used */ - { 0x12, 0x00 }, /* Memory Address Offset Register */ - { 0x13, 0xFF }, /* Screen 1 Vertical Size Register (LSB) */ - { 0x14, 0x03 }, /* Screen 1 Vertical Size Register (MSB) */ - { 0x15, 0x00 }, /* Look-Up Table Address Register */ - { 0x16, 0x00 }, /* Look-Up Table Bank Select Register */ - { 0x17, 0x00 }, /* Look-Up Table Data Register */ - { 0x18, 0x01 }, /* GPIO Configuration Control Register */ - { 0x19, 0x01 }, /* GPIO Status/Control Register */ - { 0x1A, 0x00 }, /* Scratch Pad Register */ - { 0x1B, 0x00 }, /* SwivelView Mode Register */ - { 0x1C, 0xFF }, /* Line Byte Count Register */ - { 0x1D, 0x00 }, /* Not Used */ - { 0x1E, 0x00 }, /* Not Used */ - { 0x1F, 0x00 }, /* Not Used */ -}; diff --git a/board/esd/common/s1d13806_1024_768_8bpp.h b/board/esd/common/s1d13806_1024_768_8bpp.h deleted file mode 100644 index 615fa33a3e..0000000000 --- a/board/esd/common/s1d13806_1024_768_8bpp.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (c) 2000,2001 Epson Research and Development, Inc. - * - * SPDX-License-Identifier: GPL-2.0+ - * - * File generated by S1D13806CFG.EXE - * Panel: (active) 1024x768 34Hz TFT Single 12-bit (PCLK=BUSCLK=33.333MHz) - * Memory: Embedded SDRAM (MCLK=CLKI=49.100MHz) (BUSCLK=33.333MHz) - */ - -static S1D_REGS regs_13806_1024_768_8bpp[] = -{ - {0x0001,0x00}, /* Miscellaneous Register */ - {0x01FC,0x00}, /* Display Mode Register */ - {0x0004,0x00}, /* General IO Pins Configuration Register 0 */ - {0x0005,0x00}, /* General IO Pins Configuration Register 1 */ - {0x0008,0x00}, /* General IO Pins Control Register 0 */ - {0x0009,0x00}, /* General IO Pins Control Register 1 */ - {0x0010,0x00}, /* Memory Clock Configuration Register */ - {0x0014,0x01}, /* LCD Pixel Clock Configuration Register */ - {0x0018,0x00}, /* CRT/TV Pixel Clock Configuration Register */ - {0x001C,0x02}, /* MediaPlug Clock Configuration Register */ - {0x001E,0x01}, /* CPU To Memory Wait State Select Register */ - {0x0021,0x03}, /* DRAM Refresh Rate Register */ - {0x002A,0x00}, /* DRAM Timings Control Register 0 */ - {0x002B,0x01}, /* DRAM Timings Control Register 1 */ - {0x0020,0x80}, /* Memory Configuration Register */ - {0x0030,0x55}, /* Panel Type Register */ - {0x0031,0x00}, /* MOD Rate Register */ - {0x0032,0x7F}, /* LCD Horizontal Display Width Register */ - {0x0034,0x12}, /* LCD Horizontal Non-Display Period Register */ - {0x0035,0x01}, /* TFT FPLINE Start Position Register */ - {0x0036,0x0B}, /* TFT FPLINE Pulse Width Register */ - {0x0038,0xFF}, /* LCD Vertical Display Height Register 0 */ - {0x0039,0x02}, /* LCD Vertical Display Height Register 1 */ - {0x003A,0x2C}, /* LCD Vertical Non-Display Period Register */ - {0x003B,0x0A}, /* TFT FPFRAME Start Position Register */ - {0x003C,0x01}, /* TFT FPFRAME Pulse Width Register */ - {0x0040,0x03}, /* LCD Display Mode Register */ - {0x0041,0x00}, /* LCD Miscellaneous Register */ - {0x0042,0x00}, /* LCD Display Start Address Register 0 */ - {0x0043,0x00}, /* LCD Display Start Address Register 1 */ - {0x0044,0x00}, /* LCD Display Start Address Register 2 */ - {0x0046,0x00}, /* LCD Memory Address Offset Register 0 */ - {0x0047,0x02}, /* LCD Memory Address Offset Register 1 */ - {0x0048,0x00}, /* LCD Pixel Panning Register */ - {0x004A,0x00}, /* LCD Display FIFO High Threshold Control Register */ - {0x004B,0x00}, /* LCD Display FIFO Low Threshold Control Register */ - {0x0050,0x4F}, /* CRT/TV Horizontal Display Width Register */ - {0x0052,0x13}, /* CRT/TV Horizontal Non-Display Period Register */ - {0x0053,0x01}, /* CRT/TV HRTC Start Position Register */ - {0x0054,0x0B}, /* CRT/TV HRTC Pulse Width Register */ - {0x0056,0xDF}, /* CRT/TV Vertical Display Height Register 0 */ - {0x0057,0x01}, /* CRT/TV Vertical Display Height Register 1 */ - {0x0058,0x2B}, /* CRT/TV Vertical Non-Display Period Register */ - {0x0059,0x09}, /* CRT/TV VRTC Start Position Register */ - {0x005A,0x01}, /* CRT/TV VRTC Pulse Width Register */ - {0x005B,0x10}, /* TV Output Control Register */ - {0x0060,0x03}, /* CRT/TV Display Mode Register */ - {0x0062,0x00}, /* CRT/TV Display Start Address Register 0 */ - {0x0063,0x00}, /* CRT/TV Display Start Address Register 1 */ - {0x0064,0x00}, /* CRT/TV Display Start Address Register 2 */ - {0x0066,0x40}, /* CRT/TV Memory Address Offset Register 0 */ - {0x0067,0x01}, /* CRT/TV Memory Address Offset Register 1 */ - {0x0068,0x00}, /* CRT/TV Pixel Panning Register */ - {0x006A,0x00}, /* CRT/TV Display FIFO High Threshold Control Register */ - {0x006B,0x00}, /* CRT/TV Display FIFO Low Threshold Control Register */ - {0x0070,0x00}, /* LCD Ink/Cursor Control Register */ - {0x0071,0x01}, /* LCD Ink/Cursor Start Address Register */ - {0x0072,0x00}, /* LCD Cursor X Position Register 0 */ - {0x0073,0x00}, /* LCD Cursor X Position Register 1 */ - {0x0074,0x00}, /* LCD Cursor Y Position Register 0 */ - {0x0075,0x00}, /* LCD Cursor Y Position Register 1 */ - {0x0076,0x00}, /* LCD Ink/Cursor Blue Color 0 Register */ - {0x0077,0x00}, /* LCD Ink/Cursor Green Color 0 Register */ - {0x0078,0x00}, /* LCD Ink/Cursor Red Color 0 Register */ - {0x007A,0x1F}, /* LCD Ink/Cursor Blue Color 1 Register */ - {0x007B,0x3F}, /* LCD Ink/Cursor Green Color 1 Register */ - {0x007C,0x1F}, /* LCD Ink/Cursor Red Color 1 Register */ - {0x007E,0x00}, /* LCD Ink/Cursor FIFO Threshold Register */ - {0x0080,0x00}, /* CRT/TV Ink/Cursor Control Register */ - {0x0081,0x01}, /* CRT/TV Ink/Cursor Start Address Register */ - {0x0082,0x00}, /* CRT/TV Cursor X Position Register 0 */ - {0x0083,0x00}, /* CRT/TV Cursor X Position Register 1 */ - {0x0084,0x00}, /* CRT/TV Cursor Y Position Register 0 */ - {0x0085,0x00}, /* CRT/TV Cursor Y Position Register 1 */ - {0x0086,0x00}, /* CRT/TV Ink/Cursor Blue Color 0 Register */ - {0x0087,0x00}, /* CRT/TV Ink/Cursor Green Color 0 Register */ - {0x0088,0x00}, /* CRT/TV Ink/Cursor Red Color 0 Register */ - {0x008A,0x1F}, /* CRT/TV Ink/Cursor Blue Color 1 Register */ - {0x008B,0x3F}, /* CRT/TV Ink/Cursor Green Color 1 Register */ - {0x008C,0x1F}, /* CRT/TV Ink/Cursor Red Color 1 Register */ - {0x008E,0x00}, /* CRT/TV Ink/Cursor FIFO Threshold Register */ - {0x0100,0x00}, /* BitBlt Control Register 0 */ - {0x0101,0x00}, /* BitBlt Control Register 1 */ - {0x0102,0x00}, /* BitBlt ROP Code/Color Expansion Register */ - {0x0103,0x00}, /* BitBlt Operation Register */ - {0x0104,0x00}, /* BitBlt Source Start Address Register 0 */ - {0x0105,0x00}, /* BitBlt Source Start Address Register 1 */ - {0x0106,0x00}, /* BitBlt Source Start Address Register 2 */ - {0x0108,0x00}, /* BitBlt Destination Start Address Register 0 */ - {0x0109,0x00}, /* BitBlt Destination Start Address Register 1 */ - {0x010A,0x00}, /* BitBlt Destination Start Address Register 2 */ - {0x010C,0x00}, /* BitBlt Memory Address Offset Register 0 */ - {0x010D,0x00}, /* BitBlt Memory Address Offset Register 1 */ - {0x0110,0x00}, /* BitBlt Width Register 0 */ - {0x0111,0x00}, /* BitBlt Width Register 1 */ - {0x0112,0x00}, /* BitBlt Height Register 0 */ - {0x0113,0x00}, /* BitBlt Height Register 1 */ - {0x0114,0x00}, /* BitBlt Background Color Register 0 */ - {0x0115,0x00}, /* BitBlt Background Color Register 1 */ - {0x0118,0x00}, /* BitBlt Foreground Color Register 0 */ - {0x0119,0x00}, /* BitBlt Foreground Color Register 1 */ - {0x01E0,0x00}, /* Look-Up Table Mode Register */ - {0x01E2,0x00}, /* Look-Up Table Address Register */ - {0x01F0,0x10}, /* Power Save Configuration Register */ - {0x01F1,0x00}, /* Power Save Status Register */ - {0x01F4,0x00}, /* CPU-to-Memory Access Watchdog Timer Register */ - {0x01FC,0x01}, /* Display Mode Register */ -}; diff --git a/board/esd/common/s1d13806_320_240_4bpp.h b/board/esd/common/s1d13806_320_240_4bpp.h deleted file mode 100644 index 2531f4743c..0000000000 --- a/board/esd/common/s1d13806_320_240_4bpp.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (c) 2000,2001 Epson Research and Development, Inc. - * - * SPDX-License-Identifier: GPL-2.0+ - * - * File generated by S1D13806CFG.EXE - * Panel: (active) 320x240 62Hz STN Single 4-bit (PCLK=CLKI2/4=6.250MHz) - * Memory: Embedded SDRAM (MCLK=CLKI=49.500MHz) (BUSCLK=33.333MHz) - */ - -static S1D_REGS regs_13806_320_240_4bpp[] = -{ - {0x0001,0x00}, /* Miscellaneous Register */ - {0x01FC,0x00}, /* Display Mode Register */ - {0x0004,0x08}, /* General IO Pins Configuration Register 0 */ - {0x0005,0x08}, /* General IO Pins Configuration Register 1 */ - {0x0008,0x08}, /* General IO Pins Control Register 0 */ - {0x0009,0x00}, /* General IO Pins Control Register 1 */ - {0x0010,0x00}, /* Memory Clock Configuration Register */ - {0x0014,0x32}, /* LCD Pixel Clock Configuration Register */ - {0x0018,0x00}, /* CRT/TV Pixel Clock Configuration Register */ - {0x001C,0x02}, /* MediaPlug Clock Configuration Register */ - {0x001E,0x01}, /* CPU To Memory Wait State Select Register */ - {0x0021,0x03}, /* DRAM Refresh Rate Register */ - {0x002A,0x00}, /* DRAM Timings Control Register 0 */ - {0x002B,0x01}, /* DRAM Timings Control Register 1 */ - {0x0020,0x80}, /* Memory Configuration Register */ - {0x0030,0x00}, /* Panel Type Register */ - {0x0031,0x00}, /* MOD Rate Register */ - {0x0032,0x27}, /* LCD Horizontal Display Width Register */ - {0x0034,0x03}, /* LCD Horizontal Non-Display Period Register */ - {0x0035,0x01}, /* TFT FPLINE Start Position Register */ - {0x0036,0x0B}, /* TFT FPLINE Pulse Width Register */ - {0x0038,0xEF}, /* LCD Vertical Display Height Register 0 */ - {0x0039,0x00}, /* LCD Vertical Display Height Register 1 */ - {0x003A,0x2C}, /* LCD Vertical Non-Display Period Register */ - {0x003B,0x0A}, /* TFT FPFRAME Start Position Register */ - {0x003C,0x01}, /* TFT FPFRAME Pulse Width Register */ - {0x0040,0x02}, /* LCD Display Mode Register */ - {0x0041,0x00}, /* LCD Miscellaneous Register */ - {0x0042,0x00}, /* LCD Display Start Address Register 0 */ - {0x0043,0x00}, /* LCD Display Start Address Register 1 */ - {0x0044,0x00}, /* LCD Display Start Address Register 2 */ - {0x0046,0x50}, /* LCD Memory Address Offset Register 0 */ - {0x0047,0x00}, /* LCD Memory Address Offset Register 1 */ - {0x0048,0x00}, /* LCD Pixel Panning Register */ - {0x004A,0x00}, /* LCD Display FIFO High Threshold Control Register */ - {0x004B,0x00}, /* LCD Display FIFO Low Threshold Control Register */ - {0x0050,0x4F}, /* CRT/TV Horizontal Display Width Register */ - {0x0052,0x13}, /* CRT/TV Horizontal Non-Display Period Register */ - {0x0053,0x01}, /* CRT/TV HRTC Start Position Register */ - {0x0054,0x0B}, /* CRT/TV HRTC Pulse Width Register */ - {0x0056,0xDF}, /* CRT/TV Vertical Display Height Register 0 */ - {0x0057,0x01}, /* CRT/TV Vertical Display Height Register 1 */ - {0x0058,0x2B}, /* CRT/TV Vertical Non-Display Period Register */ - {0x0059,0x09}, /* CRT/TV VRTC Start Position Register */ - {0x005A,0x01}, /* CRT/TV VRTC Pulse Width Register */ - {0x005B,0x10}, /* TV Output Control Register */ - {0x0060,0x03}, /* CRT/TV Display Mode Register */ - {0x0062,0x00}, /* CRT/TV Display Start Address Register 0 */ - {0x0063,0x00}, /* CRT/TV Display Start Address Register 1 */ - {0x0064,0x00}, /* CRT/TV Display Start Address Register 2 */ - {0x0066,0x40}, /* CRT/TV Memory Address Offset Register 0 */ - {0x0067,0x01}, /* CRT/TV Memory Address Offset Register 1 */ - {0x0068,0x00}, /* CRT/TV Pixel Panning Register */ - {0x006A,0x00}, /* CRT/TV Display FIFO High Threshold Control Register */ - {0x006B,0x00}, /* CRT/TV Display FIFO Low Threshold Control Register */ - {0x0070,0x00}, /* LCD Ink/Cursor Control Register */ - {0x0071,0x01}, /* LCD Ink/Cursor Start Address Register */ - {0x0072,0x00}, /* LCD Cursor X Position Register 0 */ - {0x0073,0x00}, /* LCD Cursor X Position Register 1 */ - {0x0074,0x00}, /* LCD Cursor Y Position Register 0 */ - {0x0075,0x00}, /* LCD Cursor Y Position Register 1 */ - {0x0076,0x00}, /* LCD Ink/Cursor Blue Color 0 Register */ - {0x0077,0x00}, /* LCD Ink/Cursor Green Color 0 Register */ - {0x0078,0x00}, /* LCD Ink/Cursor Red Color 0 Register */ - {0x007A,0x1F}, /* LCD Ink/Cursor Blue Color 1 Register */ - {0x007B,0x3F}, /* LCD Ink/Cursor Green Color 1 Register */ - {0x007C,0x1F}, /* LCD Ink/Cursor Red Color 1 Register */ - {0x007E,0x00}, /* LCD Ink/Cursor FIFO Threshold Register */ - {0x0080,0x00}, /* CRT/TV Ink/Cursor Control Register */ - {0x0081,0x01}, /* CRT/TV Ink/Cursor Start Address Register */ - {0x0082,0x00}, /* CRT/TV Cursor X Position Register 0 */ - {0x0083,0x00}, /* CRT/TV Cursor X Position Register 1 */ - {0x0084,0x00}, /* CRT/TV Cursor Y Position Register 0 */ - {0x0085,0x00}, /* CRT/TV Cursor Y Position Register 1 */ - {0x0086,0x00}, /* CRT/TV Ink/Cursor Blue Color 0 Register */ - {0x0087,0x00}, /* CRT/TV Ink/Cursor Green Color 0 Register */ - {0x0088,0x00}, /* CRT/TV Ink/Cursor Red Color 0 Register */ - {0x008A,0x1F}, /* CRT/TV Ink/Cursor Blue Color 1 Register */ - {0x008B,0x3F}, /* CRT/TV Ink/Cursor Green Color 1 Register */ - {0x008C,0x1F}, /* CRT/TV Ink/Cursor Red Color 1 Register */ - {0x008E,0x00}, /* CRT/TV Ink/Cursor FIFO Threshold Register */ - {0x0100,0x00}, /* BitBlt Control Register 0 */ - {0x0101,0x00}, /* BitBlt Control Register 1 */ - {0x0102,0x00}, /* BitBlt ROP Code/Color Expansion Register */ - {0x0103,0x00}, /* BitBlt Operation Register */ - {0x0104,0x00}, /* BitBlt Source Start Address Register 0 */ - {0x0105,0x00}, /* BitBlt Source Start Address Register 1 */ - {0x0106,0x00}, /* BitBlt Source Start Address Register 2 */ - {0x0108,0x00}, /* BitBlt Destination Start Address Register 0 */ - {0x0109,0x00}, /* BitBlt Destination Start Address Register 1 */ - {0x010A,0x00}, /* BitBlt Destination Start Address Register 2 */ - {0x010C,0x00}, /* BitBlt Memory Address Offset Register 0 */ - {0x010D,0x00}, /* BitBlt Memory Address Offset Register 1 */ - {0x0110,0x00}, /* BitBlt Width Register 0 */ - {0x0111,0x00}, /* BitBlt Width Register 1 */ - {0x0112,0x00}, /* BitBlt Height Register 0 */ - {0x0113,0x00}, /* BitBlt Height Register 1 */ - {0x0114,0x00}, /* BitBlt Background Color Register 0 */ - {0x0115,0x00}, /* BitBlt Background Color Register 1 */ - {0x0118,0x00}, /* BitBlt Foreground Color Register 0 */ - {0x0119,0x00}, /* BitBlt Foreground Color Register 1 */ - {0x01E0,0x00}, /* Look-Up Table Mode Register */ - {0x01E2,0x00}, /* Look-Up Table Address Register */ - {0x01F0,0x10}, /* Power Save Configuration Register */ - {0x01F1,0x00}, /* Power Save Status Register */ - {0x01F4,0x00}, /* CPU-to-Memory Access Watchdog Timer Register */ - {0x01FC,0x01}, /* Display Mode Register */ -}; diff --git a/board/esd/common/s1d13806_640_480_16bpp.h b/board/esd/common/s1d13806_640_480_16bpp.h deleted file mode 100644 index 38fc1a7ebc..0000000000 --- a/board/esd/common/s1d13806_640_480_16bpp.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (c) 2000,2001 Epson Research and Development, Inc. - * - * SPDX-License-Identifier: GPL-2.0+ - * - * File generated by S1D13806CFG.EXE - * Panel: (active) 640x480 59Hz TFT Single 18-bit (PCLK=CLKI2=25.000MHz) - * Memory: Embedded SDRAM (MCLK=CLKI=49.152MHz) (BUSCLK=33.333MHz) - */ - -static S1D_REGS regs_13806_640_480_16bpp[] = -{ - {0x0001,0x00}, /* Miscellaneous Register */ - {0x01FC,0x00}, /* Display Mode Register */ - {0x0004,0x18}, /* General IO Pins Configuration Register 0 */ - {0x0005,0x00}, /* General IO Pins Configuration Register 1 */ - {0x0008,0x18}, /* General IO Pins Control Register 0 */ - {0x0009,0x00}, /* General IO Pins Control Register 1 */ - {0x0010,0x00}, /* Memory Clock Configuration Register */ - {0x0014,0x02}, /* LCD Pixel Clock Configuration Register */ - {0x0018,0x02}, /* CRT/TV Pixel Clock Configuration Register */ - {0x001C,0x02}, /* MediaPlug Clock Configuration Register */ - {0x001E,0x01}, /* CPU To Memory Wait State Select Register */ - {0x0021,0x03}, /* DRAM Refresh Rate Register */ - {0x002A,0x00}, /* DRAM Timings Control Register 0 */ - {0x002B,0x01}, /* DRAM Timings Control Register 1 */ - {0x0020,0x80}, /* Memory Configuration Register */ - {0x0030,0x25}, /* Panel Type Register */ - {0x0031,0x00}, /* MOD Rate Register */ - {0x0032,0x4F}, /* LCD Horizontal Display Width Register */ - {0x0034,0x13}, /* LCD Horizontal Non-Display Period Register */ - {0x0035,0x00}, /* TFT FPLINE Start Position Register */ - {0x0036,0x0B}, /* TFT FPLINE Pulse Width Register */ - {0x0038,0xDF}, /* LCD Vertical Display Height Register 0 */ - {0x0039,0x01}, /* LCD Vertical Display Height Register 1 */ - {0x003A,0x24}, /* LCD Vertical Non-Display Period Register */ - {0x003B,0x00}, /* TFT FPFRAME Start Position Register */ - {0x003C,0x01}, /* TFT FPFRAME Pulse Width Register */ - {0x0040,0x05}, /* LCD Display Mode Register */ - {0x0041,0x00}, /* LCD Miscellaneous Register */ - {0x0042,0x00}, /* LCD Display Start Address Register 0 */ - {0x0043,0x00}, /* LCD Display Start Address Register 1 */ - {0x0044,0x00}, /* LCD Display Start Address Register 2 */ - {0x0046,0x80}, /* LCD Memory Address Offset Register 0 */ - {0x0047,0x02}, /* LCD Memory Address Offset Register 1 */ - {0x0048,0x00}, /* LCD Pixel Panning Register */ - {0x004A,0x00}, /* LCD Display FIFO High Threshold Control Register */ - {0x004B,0x00}, /* LCD Display FIFO Low Threshold Control Register */ - {0x0050,0x4F}, /* CRT/TV Horizontal Display Width Register */ - {0x0052,0x13}, /* CRT/TV Horizontal Non-Display Period Register */ - {0x0053,0x01}, /* CRT/TV HRTC Start Position Register */ - {0x0054,0x0B}, /* CRT/TV HRTC Pulse Width Register */ - {0x0056,0xDF}, /* CRT/TV Vertical Display Height Register 0 */ - {0x0057,0x01}, /* CRT/TV Vertical Display Height Register 1 */ - {0x0058,0x2B}, /* CRT/TV Vertical Non-Display Period Register */ - {0x0059,0x09}, /* CRT/TV VRTC Start Position Register */ - {0x005A,0x01}, /* CRT/TV VRTC Pulse Width Register */ - {0x005B,0x10}, /* TV Output Control Register */ - {0x0060,0x05}, /* CRT/TV Display Mode Register */ - {0x0062,0x00}, /* CRT/TV Display Start Address Register 0 */ - {0x0063,0x00}, /* CRT/TV Display Start Address Register 1 */ - {0x0064,0x00}, /* CRT/TV Display Start Address Register 2 */ - {0x0066,0x80}, /* CRT/TV Memory Address Offset Register 0 */ - {0x0067,0x02}, /* CRT/TV Memory Address Offset Register 1 */ - {0x0068,0x00}, /* CRT/TV Pixel Panning Register */ - {0x006A,0x00}, /* CRT/TV Display FIFO High Threshold Control Register */ - {0x006B,0x00}, /* CRT/TV Display FIFO Low Threshold Control Register */ - {0x0070,0x00}, /* LCD Ink/Cursor Control Register */ - {0x0071,0x01}, /* LCD Ink/Cursor Start Address Register */ - {0x0072,0x00}, /* LCD Cursor X Position Register 0 */ - {0x0073,0x00}, /* LCD Cursor X Position Register 1 */ - {0x0074,0x00}, /* LCD Cursor Y Position Register 0 */ - {0x0075,0x00}, /* LCD Cursor Y Position Register 1 */ - {0x0076,0x00}, /* LCD Ink/Cursor Blue Color 0 Register */ - {0x0077,0x00}, /* LCD Ink/Cursor Green Color 0 Register */ - {0x0078,0x00}, /* LCD Ink/Cursor Red Color 0 Register */ - {0x007A,0x1F}, /* LCD Ink/Cursor Blue Color 1 Register */ - {0x007B,0x3F}, /* LCD Ink/Cursor Green Color 1 Register */ - {0x007C,0x1F}, /* LCD Ink/Cursor Red Color 1 Register */ - {0x007E,0x00}, /* LCD Ink/Cursor FIFO Threshold Register */ - {0x0080,0x00}, /* CRT/TV Ink/Cursor Control Register */ - {0x0081,0x01}, /* CRT/TV Ink/Cursor Start Address Register */ - {0x0082,0x00}, /* CRT/TV Cursor X Position Register 0 */ - {0x0083,0x00}, /* CRT/TV Cursor X Position Register 1 */ - {0x0084,0x00}, /* CRT/TV Cursor Y Position Register 0 */ - {0x0085,0x00}, /* CRT/TV Cursor Y Position Register 1 */ - {0x0086,0x00}, /* CRT/TV Ink/Cursor Blue Color 0 Register */ - {0x0087,0x00}, /* CRT/TV Ink/Cursor Green Color 0 Register */ - {0x0088,0x00}, /* CRT/TV Ink/Cursor Red Color 0 Register */ - {0x008A,0x1F}, /* CRT/TV Ink/Cursor Blue Color 1 Register */ - {0x008B,0x3F}, /* CRT/TV Ink/Cursor Green Color 1 Register */ - {0x008C,0x1F}, /* CRT/TV Ink/Cursor Red Color 1 Register */ - {0x008E,0x00}, /* CRT/TV Ink/Cursor FIFO Threshold Register */ - {0x0100,0x00}, /* BitBlt Control Register 0 */ - {0x0101,0x00}, /* BitBlt Control Register 1 */ - {0x0102,0x00}, /* BitBlt ROP Code/Color Expansion Register */ - {0x0103,0x00}, /* BitBlt Operation Register */ - {0x0104,0x00}, /* BitBlt Source Start Address Register 0 */ - {0x0105,0x00}, /* BitBlt Source Start Address Register 1 */ - {0x0106,0x00}, /* BitBlt Source Start Address Register 2 */ - {0x0108,0x00}, /* BitBlt Destination Start Address Register 0 */ - {0x0109,0x00}, /* BitBlt Destination Start Address Register 1 */ - {0x010A,0x00}, /* BitBlt Destination Start Address Register 2 */ - {0x010C,0x00}, /* BitBlt Memory Address Offset Register 0 */ - {0x010D,0x00}, /* BitBlt Memory Address Offset Register 1 */ - {0x0110,0x00}, /* BitBlt Width Register 0 */ - {0x0111,0x00}, /* BitBlt Width Register 1 */ - {0x0112,0x00}, /* BitBlt Height Register 0 */ - {0x0113,0x00}, /* BitBlt Height Register 1 */ - {0x0114,0x00}, /* BitBlt Background Color Register 0 */ - {0x0115,0x00}, /* BitBlt Background Color Register 1 */ - {0x0118,0x00}, /* BitBlt Foreground Color Register 0 */ - {0x0119,0x00}, /* BitBlt Foreground Color Register 1 */ - {0x01E0,0x00}, /* Look-Up Table Mode Register */ - {0x01E2,0x00}, /* Look-Up Table Address Register */ - {0x01F0,0x10}, /* Power Save Configuration Register */ - {0x01F1,0x00}, /* Power Save Status Register */ - {0x01F4,0x00}, /* CPU-to-Memory Access Watchdog Timer Register */ - {0x01FC,0x01}, /* Display Mode Register */ -}; diff --git a/board/esd/common/xilinx_jtag/lenval.c b/board/esd/common/xilinx_jtag/lenval.c deleted file mode 100644 index 5405efbc5b..0000000000 --- a/board/esd/common/xilinx_jtag/lenval.c +++ /dev/null @@ -1,201 +0,0 @@ -/* - * (C) Copyright 2003 - * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -/*******************************************************/ -/* file: lenval.c */ -/* abstract: This file contains routines for using */ -/* the lenVal data structure. */ -/*******************************************************/ - -#include <common.h> -#include <asm/processor.h> - -#include "lenval.h" -#include "ports.h" - - -/***************************************************************************** - * Function: value - * Description: Extract the long value from the lenval array. - * Parameters: plvValue - ptr to lenval. - * Returns: long - the extracted value. - *****************************************************************************/ -long value( lenVal* plvValue ) -{ - long lValue; /* result to hold the accumulated result */ - short sIndex; - - lValue = 0; - for ( sIndex = 0; sIndex < plvValue->len ; ++sIndex ) - { - lValue <<= 8; /* shift the accumulated result */ - lValue |= plvValue->val[ sIndex]; /* get the last byte first */ - } - - return( lValue ); -} - -/***************************************************************************** - * Function: initLenVal - * Description: Initialize the lenval array with the given value. - * Assumes lValue is less than 256. - * Parameters: plv - ptr to lenval. - * lValue - the value to set. - * Returns: void. - *****************************************************************************/ -void initLenVal( lenVal* plv, - long lValue ) -{ - plv->len = 1; - plv->val[0] = (unsigned char)lValue; -} - -/***************************************************************************** - * Function: EqualLenVal - * Description: Compare two lenval arrays with an optional mask. - * Parameters: plvTdoExpected - ptr to lenval #1. - * plvTdoCaptured - ptr to lenval #2. - * plvTdoMask - optional ptr to mask (=0 if no mask). - * Returns: short - 0 = mismatch; 1 = equal. - *****************************************************************************/ -short EqualLenVal( lenVal* plvTdoExpected, - lenVal* plvTdoCaptured, - lenVal* plvTdoMask ) -{ - short sEqual; - short sIndex; - unsigned char ucByteVal1; - unsigned char ucByteVal2; - unsigned char ucByteMask; - - sEqual = 1; - sIndex = plvTdoExpected->len; - - while ( sEqual && sIndex-- ) - { - ucByteVal1 = plvTdoExpected->val[ sIndex ]; - ucByteVal2 = plvTdoCaptured->val[ sIndex ]; - if ( plvTdoMask ) - { - ucByteMask = plvTdoMask->val[ sIndex ]; - ucByteVal1 &= ucByteMask; - ucByteVal2 &= ucByteMask; - } - if ( ucByteVal1 != ucByteVal2 ) - { - sEqual = 0; - } - } - - return( sEqual ); -} - - -/***************************************************************************** - * Function: RetBit - * Description: return the (byte, bit) of lv (reading from left to right). - * Parameters: plv - ptr to lenval. - * iByte - the byte to get the bit from. - * iBit - the bit number (0=msb) - * Returns: short - the bit value. - *****************************************************************************/ -short RetBit( lenVal* plv, - int iByte, - int iBit ) -{ - /* assert( ( iByte >= 0 ) && ( iByte < plv->len ) ); */ - /* assert( ( iBit >= 0 ) && ( iBit < 8 ) ); */ - return( (short)( ( plv->val[ iByte ] >> ( 7 - iBit ) ) & 0x1 ) ); -} - -/***************************************************************************** - * Function: SetBit - * Description: set the (byte, bit) of lv equal to val - * Example: SetBit("00000000",byte, 1) equals "01000000". - * Parameters: plv - ptr to lenval. - * iByte - the byte to get the bit from. - * iBit - the bit number (0=msb). - * sVal - the bit value to set. - * Returns: void. - *****************************************************************************/ -void SetBit( lenVal* plv, - int iByte, - int iBit, - short sVal ) -{ - unsigned char ucByteVal; - unsigned char ucBitMask; - - ucBitMask = (unsigned char)(1 << ( 7 - iBit )); - ucByteVal = (unsigned char)(plv->val[ iByte ] & (~ucBitMask)); - - if ( sVal ) - { - ucByteVal |= ucBitMask; - } - plv->val[ iByte ] = ucByteVal; -} - -/***************************************************************************** - * Function: AddVal - * Description: add val1 to val2 and store in resVal; - * assumes val1 and val2 are of equal length. - * Parameters: plvResVal - ptr to result. - * plvVal1 - ptr of addendum. - * plvVal2 - ptr of addendum. - * Returns: void. - *****************************************************************************/ -void addVal( lenVal* plvResVal, - lenVal* plvVal1, - lenVal* plvVal2 ) -{ - unsigned char ucCarry; - unsigned short usSum; - unsigned short usVal1; - unsigned short usVal2; - short sIndex; - - plvResVal->len = plvVal1->len; /* set up length of result */ - - /* start at least significant bit and add bytes */ - ucCarry = 0; - sIndex = plvVal1->len; - while ( sIndex-- ) - { - usVal1 = plvVal1->val[ sIndex ]; /* i'th byte of val1 */ - usVal2 = plvVal2->val[ sIndex ]; /* i'th byte of val2 */ - - /* add the two bytes plus carry from previous addition */ - usSum = (unsigned short)( usVal1 + usVal2 + ucCarry ); - - /* set up carry for next byte */ - ucCarry = (unsigned char)( ( usSum > 255 ) ? 1 : 0 ); - - /* set the i'th byte of the result */ - plvResVal->val[ sIndex ] = (unsigned char)usSum; - } -} - -/***************************************************************************** - * Function: readVal - * Description: read from XSVF numBytes bytes of data into x. - * Parameters: plv - ptr to lenval in which to put the bytes read. - * sNumBytes - the number of bytes to read. - * Returns: void. - *****************************************************************************/ -void readVal( lenVal* plv, - short sNumBytes ) -{ - unsigned char* pucVal; - - plv->len = sNumBytes; /* set the length of the lenVal */ - for ( pucVal = plv->val; sNumBytes; --sNumBytes, ++pucVal ) - { - /* read a byte of data into the lenVal */ - readByte( pucVal ); - } -} diff --git a/board/esd/common/xilinx_jtag/lenval.h b/board/esd/common/xilinx_jtag/lenval.h deleted file mode 100644 index 3273eec44e..0000000000 --- a/board/esd/common/xilinx_jtag/lenval.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * (C) Copyright 2003 - * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -/*******************************************************/ -/* file: lenval.h */ -/* abstract: This file contains a description of the */ -/* data structure "lenval". */ -/*******************************************************/ - -#ifndef lenval_dot_h -#define lenval_dot_h - -/* the lenVal structure is a byte oriented type used to store an */ -/* arbitrary length binary value. As an example, the hex value */ -/* 0x0e3d is represented as a lenVal with len=2 (since 2 bytes */ -/* and val[0]=0e and val[1]=3d. val[2-MAX_LEN] are undefined */ - -/* maximum length (in bytes) of value to read in */ -/* this needs to be at least 4, and longer than the */ -/* length of the longest SDR instruction. If there is, */ -/* only 1 device in the chain, MAX_LEN must be at least */ -/* ceil(27/8) == 4. For 6 devices in a chain, MAX_LEN */ -/* must be 5, for 14 devices MAX_LEN must be 6, for 20 */ -/* devices MAX_LEN must be 7, etc.. */ -/* You can safely set MAX_LEN to a smaller number if you*/ -/* know how many devices will be in your chain. */ -#define MAX_LEN 7000 - - -typedef struct var_len_byte -{ - short len; /* number of chars in this value */ - unsigned char val[MAX_LEN+1]; /* bytes of data */ -} lenVal; - - -/* return the long representation of a lenVal */ -extern long value(lenVal *x); - -/* set lenVal equal to value */ -extern void initLenVal(lenVal *x, long value); - -/* check if expected equals actual (taking the mask into account) */ -extern short EqualLenVal(lenVal *expected, lenVal *actual, lenVal *mask); - -/* add val1+val2 and put the result in resVal */ -extern void addVal(lenVal *resVal, lenVal *val1, lenVal *val2); - -/* return the (byte, bit) of lv (reading from left to right) */ -extern short RetBit(lenVal *lv, int byte, int bit); - -/* set the (byte, bit) of lv equal to val (e.g. SetBit("00000000",byte, 1) - equals "01000000" */ -extern void SetBit(lenVal *lv, int byte, int bit, short val); - -/* read from XSVF numBytes bytes of data into x */ -extern void readVal(lenVal *x, short numBytes); - -#endif diff --git a/board/esd/common/xilinx_jtag/micro.c b/board/esd/common/xilinx_jtag/micro.c deleted file mode 100644 index 556636c554..0000000000 --- a/board/esd/common/xilinx_jtag/micro.c +++ /dev/null @@ -1,1854 +0,0 @@ -/* - * (C) Copyright 2003 - * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -/***************************************************************************** - * file: micro.c - * abstract: This file contains the function, xsvfExecute(), - * call for interpreting the XSVF commands. - * Usage: Call xsvfExecute() to process XSVF data. - * The XSVF data is retrieved by readByte() in ports.c - * Remove the main function if you already have one. - * Options: XSVF_SUPPORT_COMPRESSION - * This define supports the XC9500/XL compression scheme. - * This define adds support for XSDRINC and XSETSDRMASKS. - * XSVF_SUPPORT_ERRORCODES - * This define causes the xsvfExecute function to return - * an error code for specific errors. See error codes below. - * If this is not defined, the return value defaults to the - * legacy values for backward compatibility: - * 1 = success; 0 = failure. - * Debugging: DEBUG_MODE (Legacy name) - * Define DEBUG_MODE to compile with debugging features. - * Both micro.c and ports.c must be compiled with the DEBUG_MODE - * defined to enable the standalone main implementation in - * micro.c that reads XSVF from a file. - * History: v2.00 - Original XSVF implementation. - * v4.04 - Added delay at end of XSIR for XC18v00 support. - * Added new commands for CoolRunner support: - * XSTATE, XENDIR, XENDDR - * v4.05 - Cleanup micro.c but leave ports.c intact. - * v4.06 - Fix xsvfGotoTapState for retry transition. - * v4.07 - Update example waitTime implementations for - * compatibility with Virtex-II. - * v4.10 - Add new XSIR2 command that supports a 2-byte - * IR-length parameter for IR shifts > 255 bits. - * v4.11 - No change. Update version to match SVF2XSVF xlator. - * v4.14 - Added XCOMMENT. - * v5.00 - Improve XSTATE support. - * Added XWAIT. - *****************************************************************************/ - -#include <common.h> -#include <command.h> -#include <asm/processor.h> - -#include "micro.h" -#include "lenval.h" -#include "ports.h" - -const unsigned char *xsvfdata; - -/*============================================================================ - * XSVF #define - ============================================================================*/ - -#define XSVF_VERSION "5.00" - -/***************************************************************************** - * Define: XSVF_SUPPORT_COMPRESSION - * Description: Define this to support the XC9500/XL XSVF data compression - * scheme. - * Code size can be reduced by NOT supporting this feature. - * However, you must use the -nc (no compress) option when - * translating SVF to XSVF using the SVF2XSVF translator. - * Corresponding, uncompressed XSVF may be larger. - *****************************************************************************/ -#ifndef XSVF_SUPPORT_COMPRESSION -#define XSVF_SUPPORT_COMPRESSION 1 -#endif - -/***************************************************************************** - * Define: XSVF_SUPPORT_ERRORCODES - * Description: Define this to support the new XSVF error codes. - * (The original XSVF player just returned 1 for success and - * 0 for an unspecified failure.) - *****************************************************************************/ -#ifndef XSVF_SUPPORT_ERRORCODES -#define XSVF_SUPPORT_ERRORCODES 1 -#endif - -#ifdef XSVF_SUPPORT_ERRORCODES -#define XSVF_ERRORCODE(errorCode) errorCode -#else /* Use legacy error code */ -#define XSVF_ERRORCODE(errorCode) ((errorCode==XSVF_ERROR_NONE)?1:0) -#endif /* XSVF_SUPPORT_ERRORCODES */ - - -/*============================================================================ - * DEBUG_MODE #define - ============================================================================*/ -#define DEBUG_MODE - -#ifdef DEBUG_MODE -#define XSVFDBG_PRINTF(iDebugLevel,pzFormat) \ - { if ( xsvf_iDebugLevel >= iDebugLevel ) \ - printf( pzFormat ); } -#define XSVFDBG_PRINTF1(iDebugLevel,pzFormat,arg1) \ - { if ( xsvf_iDebugLevel >= iDebugLevel ) \ - printf( pzFormat, arg1 ); } -#define XSVFDBG_PRINTF2(iDebugLevel,pzFormat,arg1,arg2) \ - { if ( xsvf_iDebugLevel >= iDebugLevel ) \ - printf( pzFormat, arg1, arg2 ); } -#define XSVFDBG_PRINTF3(iDebugLevel,pzFormat,arg1,arg2,arg3) \ - { if ( xsvf_iDebugLevel >= iDebugLevel ) \ - printf( pzFormat, arg1, arg2, arg3 ); } -#define XSVFDBG_PRINTLENVAL(iDebugLevel,plenVal) \ - { if ( xsvf_iDebugLevel >= iDebugLevel ) \ - xsvfPrintLenVal(plenVal); } -#else /* !DEBUG_MODE */ -#define XSVFDBG_PRINTF(iDebugLevel,pzFormat) -#define XSVFDBG_PRINTF1(iDebugLevel,pzFormat,arg1) -#define XSVFDBG_PRINTF2(iDebugLevel,pzFormat,arg1,arg2) -#define XSVFDBG_PRINTF3(iDebugLevel,pzFormat,arg1,arg2,arg3) -#define XSVFDBG_PRINTLENVAL(iDebugLevel,plenVal) -#endif /* DEBUG_MODE */ - - -/*============================================================================ - * XSVF Type Declarations - ============================================================================*/ - -/***************************************************************************** - * Struct: SXsvfInfo - * Description: This structure contains all of the data used during the - * execution of the XSVF. Some data is persistent, predefined - * information (e.g. lRunTestTime). The bulk of this struct's - * size is due to the lenVal structs (defined in lenval.h) - * which contain buffers for the active shift data. The MAX_LEN - * #define in lenval.h defines the size of these buffers. - * These buffers must be large enough to store the longest - * shift data in your XSVF file. For example: - * MAX_LEN >= ( longest_shift_data_in_bits / 8 ) - * Because the lenVal struct dominates the space usage of this - * struct, the rough size of this struct is: - * sizeof( SXsvfInfo ) ~= MAX_LEN * 7 (number of lenVals) - * xsvfInitialize() contains initialization code for the data - * in this struct. - * xsvfCleanup() contains cleanup code for the data in this - * struct. - *****************************************************************************/ -typedef struct tagSXsvfInfo -{ - /* XSVF status information */ - unsigned char ucComplete; /* 0 = running; 1 = complete */ - unsigned char ucCommand; /* Current XSVF command byte */ - long lCommandCount; /* Number of commands processed */ - int iErrorCode; /* An error code. 0 = no error. */ - - /* TAP state/sequencing information */ - unsigned char ucTapState; /* Current TAP state */ - unsigned char ucEndIR; /* ENDIR TAP state (See SVF) */ - unsigned char ucEndDR; /* ENDDR TAP state (See SVF) */ - - /* RUNTEST information */ - unsigned char ucMaxRepeat; /* Max repeat loops (for xc9500/xl) */ - long lRunTestTime; /* Pre-specified RUNTEST time (usec) */ - - /* Shift Data Info and Buffers */ - long lShiftLengthBits; /* Len. current shift data in bits */ - short sShiftLengthBytes; /* Len. current shift data in bytes */ - - lenVal lvTdi; /* Current TDI shift data */ - lenVal lvTdoExpected; /* Expected TDO shift data */ - lenVal lvTdoCaptured; /* Captured TDO shift data */ - lenVal lvTdoMask; /* TDO mask: 0=dontcare; 1=compare */ - -#ifdef XSVF_SUPPORT_COMPRESSION - /* XSDRINC Data Buffers */ - lenVal lvAddressMask; /* Address mask for XSDRINC */ - lenVal lvDataMask; /* Data mask for XSDRINC */ - lenVal lvNextData; /* Next data for XSDRINC */ -#endif /* XSVF_SUPPORT_COMPRESSION */ -} SXsvfInfo; - -/* Declare pointer to functions that perform XSVF commands */ -typedef int (*TXsvfDoCmdFuncPtr)( SXsvfInfo* ); - -/*============================================================================ - * XSVF Command Bytes - ============================================================================*/ - -/* encodings of xsvf instructions */ -#define XCOMPLETE 0 -#define XTDOMASK 1 -#define XSIR 2 -#define XSDR 3 -#define XRUNTEST 4 -/* Reserved 5 */ -/* Reserved 6 */ -#define XREPEAT 7 -#define XSDRSIZE 8 -#define XSDRTDO 9 -#define XSETSDRMASKS 10 -#define XSDRINC 11 -#define XSDRB 12 -#define XSDRC 13 -#define XSDRE 14 -#define XSDRTDOB 15 -#define XSDRTDOC 16 -#define XSDRTDOE 17 -#define XSTATE 18 /* 4.00 */ -#define XENDIR 19 /* 4.04 */ -#define XENDDR 20 /* 4.04 */ -#define XSIR2 21 /* 4.10 */ -#define XCOMMENT 22 /* 4.14 */ -#define XWAIT 23 /* 5.00 */ -/* Insert new commands here */ -/* and add corresponding xsvfDoCmd function to xsvf_pfDoCmd below. */ -#define XLASTCMD 24 /* Last command marker */ - - -/*============================================================================ - * XSVF Command Parameter Values - ============================================================================*/ - -#define XSTATE_RESET 0 /* 4.00 parameter for XSTATE */ -#define XSTATE_RUNTEST 1 /* 4.00 parameter for XSTATE */ - -#define XENDXR_RUNTEST 0 /* 4.04 parameter for XENDIR/DR */ -#define XENDXR_PAUSE 1 /* 4.04 parameter for XENDIR/DR */ - -/* TAP states */ -#define XTAPSTATE_RESET 0x00 -#define XTAPSTATE_RUNTEST 0x01 /* a.k.a. IDLE */ -#define XTAPSTATE_SELECTDR 0x02 -#define XTAPSTATE_CAPTUREDR 0x03 -#define XTAPSTATE_SHIFTDR 0x04 -#define XTAPSTATE_EXIT1DR 0x05 -#define XTAPSTATE_PAUSEDR 0x06 -#define XTAPSTATE_EXIT2DR 0x07 -#define XTAPSTATE_UPDATEDR 0x08 -#define XTAPSTATE_IRSTATES 0x09 /* All IR states begin here */ -#define XTAPSTATE_SELECTIR 0x09 -#define XTAPSTATE_CAPTUREIR 0x0A -#define XTAPSTATE_SHIFTIR 0x0B -#define XTAPSTATE_EXIT1IR 0x0C -#define XTAPSTATE_PAUSEIR 0x0D -#define XTAPSTATE_EXIT2IR 0x0E -#define XTAPSTATE_UPDATEIR 0x0F - -/*============================================================================ - * XSVF Function Prototypes - ============================================================================*/ - -int xsvfDoIllegalCmd( SXsvfInfo* pXsvfInfo ); /* Illegal command function */ -int xsvfDoXCOMPLETE( SXsvfInfo* pXsvfInfo ); -int xsvfDoXTDOMASK( SXsvfInfo* pXsvfInfo ); -int xsvfDoXSIR( SXsvfInfo* pXsvfInfo ); -int xsvfDoXSIR2( SXsvfInfo* pXsvfInfo ); -int xsvfDoXSDR( SXsvfInfo* pXsvfInfo ); -int xsvfDoXRUNTEST( SXsvfInfo* pXsvfInfo ); -int xsvfDoXREPEAT( SXsvfInfo* pXsvfInfo ); -int xsvfDoXSDRSIZE( SXsvfInfo* pXsvfInfo ); -int xsvfDoXSDRTDO( SXsvfInfo* pXsvfInfo ); -int xsvfDoXSETSDRMASKS( SXsvfInfo* pXsvfInfo ); -int xsvfDoXSDRINC( SXsvfInfo* pXsvfInfo ); -int xsvfDoXSDRBCE( SXsvfInfo* pXsvfInfo ); -int xsvfDoXSDRTDOBCE( SXsvfInfo* pXsvfInfo ); -int xsvfDoXSTATE( SXsvfInfo* pXsvfInfo ); -int xsvfDoXENDXR( SXsvfInfo* pXsvfInfo ); -int xsvfDoXCOMMENT( SXsvfInfo* pXsvfInfo ); -int xsvfDoXWAIT( SXsvfInfo* pXsvfInfo ); -/* Insert new command functions here */ - -/*============================================================================ - * XSVF Global Variables - ============================================================================*/ - -/* Array of XSVF command functions. Must follow command byte value order! */ -/* If your compiler cannot take this form, then convert to a switch statement*/ -TXsvfDoCmdFuncPtr xsvf_pfDoCmd[] = -{ - xsvfDoXCOMPLETE, /* 0 */ - xsvfDoXTDOMASK, /* 1 */ - xsvfDoXSIR, /* 2 */ - xsvfDoXSDR, /* 3 */ - xsvfDoXRUNTEST, /* 4 */ - xsvfDoIllegalCmd, /* 5 */ - xsvfDoIllegalCmd, /* 6 */ - xsvfDoXREPEAT, /* 7 */ - xsvfDoXSDRSIZE, /* 8 */ - xsvfDoXSDRTDO, /* 9 */ -#ifdef XSVF_SUPPORT_COMPRESSION - xsvfDoXSETSDRMASKS, /* 10 */ - xsvfDoXSDRINC, /* 11 */ -#else - xsvfDoIllegalCmd, /* 10 */ - xsvfDoIllegalCmd, /* 11 */ -#endif /* XSVF_SUPPORT_COMPRESSION */ - xsvfDoXSDRBCE, /* 12 */ - xsvfDoXSDRBCE, /* 13 */ - xsvfDoXSDRBCE, /* 14 */ - xsvfDoXSDRTDOBCE, /* 15 */ - xsvfDoXSDRTDOBCE, /* 16 */ - xsvfDoXSDRTDOBCE, /* 17 */ - xsvfDoXSTATE, /* 18 */ - xsvfDoXENDXR, /* 19 */ - xsvfDoXENDXR, /* 20 */ - xsvfDoXSIR2, /* 21 */ - xsvfDoXCOMMENT, /* 22 */ - xsvfDoXWAIT /* 23 */ -/* Insert new command functions here */ -}; - -#ifdef DEBUG_MODE -char* xsvf_pzCommandName[] = -{ - "XCOMPLETE", - "XTDOMASK", - "XSIR", - "XSDR", - "XRUNTEST", - "Reserved5", - "Reserved6", - "XREPEAT", - "XSDRSIZE", - "XSDRTDO", - "XSETSDRMASKS", - "XSDRINC", - "XSDRB", - "XSDRC", - "XSDRE", - "XSDRTDOB", - "XSDRTDOC", - "XSDRTDOE", - "XSTATE", - "XENDIR", - "XENDDR", - "XSIR2", - "XCOMMENT", - "XWAIT" -}; - -char* xsvf_pzErrorName[] = -{ - "No error", - "ERROR: Unknown", - "ERROR: TDO mismatch", - "ERROR: TDO mismatch and exceeded max retries", - "ERROR: Unsupported XSVF command", - "ERROR: Illegal state specification", - "ERROR: Data overflows allocated MAX_LEN buffer size" -}; - -char* xsvf_pzTapState[] = -{ - "RESET", /* 0x00 */ - "RUNTEST/IDLE", /* 0x01 */ - "DRSELECT", /* 0x02 */ - "DRCAPTURE", /* 0x03 */ - "DRSHIFT", /* 0x04 */ - "DREXIT1", /* 0x05 */ - "DRPAUSE", /* 0x06 */ - "DREXIT2", /* 0x07 */ - "DRUPDATE", /* 0x08 */ - "IRSELECT", /* 0x09 */ - "IRCAPTURE", /* 0x0A */ - "IRSHIFT", /* 0x0B */ - "IREXIT1", /* 0x0C */ - "IRPAUSE", /* 0x0D */ - "IREXIT2", /* 0x0E */ - "IRUPDATE" /* 0x0F */ -}; -#endif /* DEBUG_MODE */ - -/*#ifdef DEBUG_MODE */ -/* FILE* in; /XXX* Legacy DEBUG_MODE file pointer */ -int xsvf_iDebugLevel; -/*#endif /XXX* DEBUG_MODE */ - -/*============================================================================ - * Utility Functions - ============================================================================*/ - -/***************************************************************************** - * Function: xsvfPrintLenVal - * Description: Print the lenval value in hex. - * Parameters: plv - ptr to lenval. - * Returns: void. - *****************************************************************************/ -#ifdef DEBUG_MODE -void xsvfPrintLenVal( lenVal *plv ) -{ - int i; - - if ( plv ) - { - printf( "0x" ); - for ( i = 0; i < plv->len; ++i ) - { - printf( "%02x", ((unsigned int)(plv->val[ i ])) ); - } - } -} -#endif /* DEBUG_MODE */ - - -/***************************************************************************** - * Function: xsvfInfoInit - * Description: Initialize the xsvfInfo data. - * Parameters: pXsvfInfo - ptr to the XSVF info structure. - * Returns: int - 0 = success; otherwise error. - *****************************************************************************/ -int xsvfInfoInit( SXsvfInfo* pXsvfInfo ) -{ - XSVFDBG_PRINTF1( 4, " sizeof( SXsvfInfo ) = %d bytes\n", - sizeof( SXsvfInfo ) ); - - pXsvfInfo->ucComplete = 0; - pXsvfInfo->ucCommand = XCOMPLETE; - pXsvfInfo->lCommandCount = 0; - pXsvfInfo->iErrorCode = XSVF_ERROR_NONE; - pXsvfInfo->ucMaxRepeat = 0; - pXsvfInfo->ucTapState = XTAPSTATE_RESET; - pXsvfInfo->ucEndIR = XTAPSTATE_RUNTEST; - pXsvfInfo->ucEndDR = XTAPSTATE_RUNTEST; - pXsvfInfo->lShiftLengthBits = 0L; - pXsvfInfo->sShiftLengthBytes= 0; - pXsvfInfo->lRunTestTime = 0L; - - return( 0 ); -} - -/***************************************************************************** - * Function: xsvfInfoCleanup - * Description: Cleanup the xsvfInfo data. - * Parameters: pXsvfInfo - ptr to the XSVF info structure. - * Returns: void. - *****************************************************************************/ -void xsvfInfoCleanup( SXsvfInfo* pXsvfInfo ) -{ -} - -/***************************************************************************** - * Function: xsvfGetAsNumBytes - * Description: Calculate the number of bytes the given number of bits - * consumes. - * Parameters: lNumBits - the number of bits. - * Returns: short - the number of bytes to store the number of bits. - *****************************************************************************/ -short xsvfGetAsNumBytes( long lNumBits ) -{ - return( (short)( ( lNumBits + 7L ) / 8L ) ); -} - -/***************************************************************************** - * Function: xsvfTmsTransition - * Description: Apply TMS and transition TAP controller by applying one TCK - * cycle. - * Parameters: sTms - new TMS value. - * Returns: void. - *****************************************************************************/ -void xsvfTmsTransition( short sTms ) -{ - setPort( TMS, sTms ); - setPort( TCK, 0 ); - setPort( TCK, 1 ); -} - -/***************************************************************************** - * Function: xsvfGotoTapState - * Description: From the current TAP state, go to the named TAP state. - * A target state of RESET ALWAYS causes TMS reset sequence. - * All SVF standard stable state paths are supported. - * All state transitions are supported except for the following - * which cause an XSVF_ERROR_ILLEGALSTATE: - * - Target==DREXIT2; Start!=DRPAUSE - * - Target==IREXIT2; Start!=IRPAUSE - * Parameters: pucTapState - Current TAP state; returns final TAP state. - * ucTargetState - New target TAP state. - * Returns: int - 0 = success; otherwise error. - *****************************************************************************/ -int xsvfGotoTapState( unsigned char* pucTapState, - unsigned char ucTargetState ) -{ - int i; - int iErrorCode; - - iErrorCode = XSVF_ERROR_NONE; - if ( ucTargetState == XTAPSTATE_RESET ) - { - /* If RESET, always perform TMS reset sequence to reset/sync TAPs */ - xsvfTmsTransition( 1 ); - for ( i = 0; i < 5; ++i ) - { - setPort( TCK, 0 ); - setPort( TCK, 1 ); - } - *pucTapState = XTAPSTATE_RESET; - XSVFDBG_PRINTF( 3, " TMS Reset Sequence -> Test-Logic-Reset\n" ); - XSVFDBG_PRINTF1( 3, " TAP State = %s\n", - xsvf_pzTapState[ *pucTapState ] ); - } else if ( ( ucTargetState != *pucTapState ) && - ( ( ( ucTargetState == XTAPSTATE_EXIT2DR ) && ( *pucTapState != XTAPSTATE_PAUSEDR ) ) || - ( ( ucTargetState == XTAPSTATE_EXIT2IR ) && ( *pucTapState != XTAPSTATE_PAUSEIR ) ) ) ) - { - /* Trap illegal TAP state path specification */ - iErrorCode = XSVF_ERROR_ILLEGALSTATE; - } else { - if ( ucTargetState == *pucTapState ) - { - /* Already in target state. Do nothing except when in DRPAUSE - or in IRPAUSE to comply with SVF standard */ - if ( ucTargetState == XTAPSTATE_PAUSEDR ) - { - xsvfTmsTransition( 1 ); - *pucTapState = XTAPSTATE_EXIT2DR; - XSVFDBG_PRINTF1( 3, " TAP State = %s\n", - xsvf_pzTapState[ *pucTapState ] ); - } - else if ( ucTargetState == XTAPSTATE_PAUSEIR ) - { - xsvfTmsTransition( 1 ); - *pucTapState = XTAPSTATE_EXIT2IR; - XSVFDBG_PRINTF1( 3, " TAP State = %s\n", - xsvf_pzTapState[ *pucTapState ] ); - } - } - - /* Perform TAP state transitions to get to the target state */ - while ( ucTargetState != *pucTapState ) - { - switch ( *pucTapState ) - { - case XTAPSTATE_RESET: - xsvfTmsTransition( 0 ); - *pucTapState = XTAPSTATE_RUNTEST; - break; - case XTAPSTATE_RUNTEST: - xsvfTmsTransition( 1 ); - *pucTapState = XTAPSTATE_SELECTDR; - break; - case XTAPSTATE_SELECTDR: - if ( ucTargetState >= XTAPSTATE_IRSTATES ) - { - xsvfTmsTransition( 1 ); - *pucTapState = XTAPSTATE_SELECTIR; - } - else - { - xsvfTmsTransition( 0 ); - *pucTapState = XTAPSTATE_CAPTUREDR; - } - break; - case XTAPSTATE_CAPTUREDR: - if ( ucTargetState == XTAPSTATE_SHIFTDR ) - { - xsvfTmsTransition( 0 ); - *pucTapState = XTAPSTATE_SHIFTDR; - } - else - { - xsvfTmsTransition( 1 ); - *pucTapState = XTAPSTATE_EXIT1DR; - } - break; - case XTAPSTATE_SHIFTDR: - xsvfTmsTransition( 1 ); - *pucTapState = XTAPSTATE_EXIT1DR; - break; - case XTAPSTATE_EXIT1DR: - if ( ucTargetState == XTAPSTATE_PAUSEDR ) - { - xsvfTmsTransition( 0 ); - *pucTapState = XTAPSTATE_PAUSEDR; - } - else - { - xsvfTmsTransition( 1 ); - *pucTapState = XTAPSTATE_UPDATEDR; - } - break; - case XTAPSTATE_PAUSEDR: - xsvfTmsTransition( 1 ); - *pucTapState = XTAPSTATE_EXIT2DR; - break; - case XTAPSTATE_EXIT2DR: - if ( ucTargetState == XTAPSTATE_SHIFTDR ) - { - xsvfTmsTransition( 0 ); - *pucTapState = XTAPSTATE_SHIFTDR; - } - else - { - xsvfTmsTransition( 1 ); - *pucTapState = XTAPSTATE_UPDATEDR; - } - break; - case XTAPSTATE_UPDATEDR: - if ( ucTargetState == XTAPSTATE_RUNTEST ) - { - xsvfTmsTransition( 0 ); - *pucTapState = XTAPSTATE_RUNTEST; - } - else - { - xsvfTmsTransition( 1 ); - *pucTapState = XTAPSTATE_SELECTDR; - } - break; - case XTAPSTATE_SELECTIR: - xsvfTmsTransition( 0 ); - *pucTapState = XTAPSTATE_CAPTUREIR; - break; - case XTAPSTATE_CAPTUREIR: - if ( ucTargetState == XTAPSTATE_SHIFTIR ) - { - xsvfTmsTransition( 0 ); - *pucTapState = XTAPSTATE_SHIFTIR; - } - else - { - xsvfTmsTransition( 1 ); - *pucTapState = XTAPSTATE_EXIT1IR; - } - break; - case XTAPSTATE_SHIFTIR: - xsvfTmsTransition( 1 ); - *pucTapState = XTAPSTATE_EXIT1IR; - break; - case XTAPSTATE_EXIT1IR: - if ( ucTargetState == XTAPSTATE_PAUSEIR ) - { - xsvfTmsTransition( 0 ); - *pucTapState = XTAPSTATE_PAUSEIR; - } - else - { - xsvfTmsTransition( 1 ); - *pucTapState = XTAPSTATE_UPDATEIR; - } - break; - case XTAPSTATE_PAUSEIR: - xsvfTmsTransition( 1 ); - *pucTapState = XTAPSTATE_EXIT2IR; - break; - case XTAPSTATE_EXIT2IR: - if ( ucTargetState == XTAPSTATE_SHIFTIR ) - { - xsvfTmsTransition( 0 ); - *pucTapState = XTAPSTATE_SHIFTIR; - } - else - { - xsvfTmsTransition( 1 ); - *pucTapState = XTAPSTATE_UPDATEIR; - } - break; - case XTAPSTATE_UPDATEIR: - if ( ucTargetState == XTAPSTATE_RUNTEST ) - { - xsvfTmsTransition( 0 ); - *pucTapState = XTAPSTATE_RUNTEST; - } - else - { - xsvfTmsTransition( 1 ); - *pucTapState = XTAPSTATE_SELECTDR; - } - break; - default: - iErrorCode = XSVF_ERROR_ILLEGALSTATE; - *pucTapState = ucTargetState; /* Exit while loop */ - break; - } - XSVFDBG_PRINTF1( 3, " TAP State = %s\n", - xsvf_pzTapState[ *pucTapState ] ); - } - } - - return( iErrorCode ); -} - -/***************************************************************************** - * Function: xsvfShiftOnly - * Description: Assumes that starting TAP state is SHIFT-DR or SHIFT-IR. - * Shift the given TDI data into the JTAG scan chain. - * Optionally, save the TDO data shifted out of the scan chain. - * Last shift cycle is special: capture last TDO, set last TDI, - * but does not pulse TCK. Caller must pulse TCK and optionally - * set TMS=1 to exit shift state. - * Parameters: lNumBits - number of bits to shift. - * plvTdi - ptr to lenval for TDI data. - * plvTdoCaptured - ptr to lenval for storing captured TDO data. - * iExitShift - 1=exit at end of shift; 0=stay in Shift-DR. - * Returns: void. - *****************************************************************************/ -void xsvfShiftOnly( long lNumBits, - lenVal* plvTdi, - lenVal* plvTdoCaptured, - int iExitShift ) -{ - unsigned char* pucTdi; - unsigned char* pucTdo; - unsigned char ucTdiByte; - unsigned char ucTdoByte; - unsigned char ucTdoBit; - int i; - - /* assert( ( ( lNumBits + 7 ) / 8 ) == plvTdi->len ); */ - - /* Initialize TDO storage len == TDI len */ - pucTdo = 0; - if ( plvTdoCaptured ) - { - plvTdoCaptured->len = plvTdi->len; - pucTdo = plvTdoCaptured->val + plvTdi->len; - } - - /* Shift LSB first. val[N-1] == LSB. val[0] == MSB. */ - pucTdi = plvTdi->val + plvTdi->len; - while ( lNumBits ) - { - /* Process on a byte-basis */ - ucTdiByte = (*(--pucTdi)); - ucTdoByte = 0; - for ( i = 0; ( lNumBits && ( i < 8 ) ); ++i ) - { - --lNumBits; - if ( iExitShift && !lNumBits ) - { - /* Exit Shift-DR state */ - setPort( TMS, 1 ); - } - - /* Set the new TDI value */ - setPort( TDI, (short)(ucTdiByte & 1) ); - ucTdiByte >>= 1; - - /* Set TCK low */ - setPort( TCK, 0 ); - - if ( pucTdo ) - { - /* Save the TDO value */ - ucTdoBit = readTDOBit(); - ucTdoByte |= ( ucTdoBit << i ); - } - - /* Set TCK high */ - setPort( TCK, 1 ); - } - - /* Save the TDO byte value */ - if ( pucTdo ) - { - (*(--pucTdo)) = ucTdoByte; - } - } -} - -/***************************************************************************** - * Function: xsvfShift - * Description: Goes to the given starting TAP state. - * Calls xsvfShiftOnly to shift in the given TDI data and - * optionally capture the TDO data. - * Compares the TDO captured data against the TDO expected - * data. - * If a data mismatch occurs, then executes the exception - * handling loop upto ucMaxRepeat times. - * Parameters: pucTapState - Ptr to current TAP state. - * ucStartState - Starting shift state: Shift-DR or Shift-IR. - * lNumBits - number of bits to shift. - * plvTdi - ptr to lenval for TDI data. - * plvTdoCaptured - ptr to lenval for storing TDO data. - * plvTdoExpected - ptr to expected TDO data. - * plvTdoMask - ptr to TDO mask. - * ucEndState - state in which to end the shift. - * lRunTestTime - amount of time to wait after the shift. - * ucMaxRepeat - Maximum number of retries on TDO mismatch. - * Returns: int - 0 = success; otherwise TDO mismatch. - * Notes: XC9500XL-only Optimization: - * Skip the waitTime() if plvTdoMask->val[0:plvTdoMask->len-1] - * is NOT all zeros and sMatch==1. - *****************************************************************************/ -int xsvfShift( unsigned char* pucTapState, - unsigned char ucStartState, - long lNumBits, - lenVal* plvTdi, - lenVal* plvTdoCaptured, - lenVal* plvTdoExpected, - lenVal* plvTdoMask, - unsigned char ucEndState, - long lRunTestTime, - unsigned char ucMaxRepeat ) -{ - int iErrorCode; - int iMismatch; - unsigned char ucRepeat; - int iExitShift; - - iErrorCode = XSVF_ERROR_NONE; - iMismatch = 0; - ucRepeat = 0; - iExitShift = ( ucStartState != ucEndState ); - - XSVFDBG_PRINTF1( 3, " Shift Length = %ld\n", lNumBits ); - XSVFDBG_PRINTF( 4, " TDI = "); - XSVFDBG_PRINTLENVAL( 4, plvTdi ); - XSVFDBG_PRINTF( 4, "\n"); - XSVFDBG_PRINTF( 4, " TDO Expected = "); - XSVFDBG_PRINTLENVAL( 4, plvTdoExpected ); - XSVFDBG_PRINTF( 4, "\n"); - - if ( !lNumBits ) - { - /* Compatibility with XSVF2.00: XSDR 0 = no shift, but wait in RTI */ - if ( lRunTestTime ) - { - /* Wait for prespecified XRUNTEST time */ - xsvfGotoTapState( pucTapState, XTAPSTATE_RUNTEST ); - XSVFDBG_PRINTF1( 3, " Wait = %ld usec\n", lRunTestTime ); - waitTime( lRunTestTime ); - } - } - else - { - do - { - /* Goto Shift-DR or Shift-IR */ - xsvfGotoTapState( pucTapState, ucStartState ); - - /* Shift TDI and capture TDO */ - xsvfShiftOnly( lNumBits, plvTdi, plvTdoCaptured, iExitShift ); - - if ( plvTdoExpected ) - { - /* Compare TDO data to expected TDO data */ - iMismatch = !EqualLenVal( plvTdoExpected, - plvTdoCaptured, - plvTdoMask ); - } - - if ( iExitShift ) - { - /* Update TAP state: Shift->Exit */ - ++(*pucTapState); - XSVFDBG_PRINTF1( 3, " TAP State = %s\n", - xsvf_pzTapState[ *pucTapState ] ); - - if ( iMismatch && lRunTestTime && ( ucRepeat < ucMaxRepeat ) ) - { - XSVFDBG_PRINTF( 4, " TDO Expected = "); - XSVFDBG_PRINTLENVAL( 4, plvTdoExpected ); - XSVFDBG_PRINTF( 4, "\n"); - XSVFDBG_PRINTF( 4, " TDO Captured = "); - XSVFDBG_PRINTLENVAL( 4, plvTdoCaptured ); - XSVFDBG_PRINTF( 4, "\n"); - XSVFDBG_PRINTF( 4, " TDO Mask = "); - XSVFDBG_PRINTLENVAL( 4, plvTdoMask ); - XSVFDBG_PRINTF( 4, "\n"); - XSVFDBG_PRINTF1( 3, " Retry #%d\n", ( ucRepeat + 1 ) ); - /* Do exception handling retry - ShiftDR only */ - xsvfGotoTapState( pucTapState, XTAPSTATE_PAUSEDR ); - /* Shift 1 extra bit */ - xsvfGotoTapState( pucTapState, XTAPSTATE_SHIFTDR ); - /* Increment RUNTEST time by an additional 25% */ - lRunTestTime += ( lRunTestTime >> 2 ); - } - else - { - /* Do normal exit from Shift-XR */ - xsvfGotoTapState( pucTapState, ucEndState ); - } - - if ( lRunTestTime ) - { - /* Wait for prespecified XRUNTEST time */ - xsvfGotoTapState( pucTapState, XTAPSTATE_RUNTEST ); - XSVFDBG_PRINTF1( 3, " Wait = %ld usec\n", lRunTestTime ); - waitTime( lRunTestTime ); - } - } - } while ( iMismatch && ( ucRepeat++ < ucMaxRepeat ) ); - } - - if ( iMismatch ) - { - XSVFDBG_PRINTF( 1, " TDO Expected = "); - XSVFDBG_PRINTLENVAL( 1, plvTdoExpected ); - XSVFDBG_PRINTF( 1, "\n"); - XSVFDBG_PRINTF( 1, " TDO Captured = "); - XSVFDBG_PRINTLENVAL( 1, plvTdoCaptured ); - XSVFDBG_PRINTF( 1, "\n"); - XSVFDBG_PRINTF( 1, " TDO Mask = "); - XSVFDBG_PRINTLENVAL( 1, plvTdoMask ); - XSVFDBG_PRINTF( 1, "\n"); - if ( ucMaxRepeat && ( ucRepeat > ucMaxRepeat ) ) - { - iErrorCode = XSVF_ERROR_MAXRETRIES; - } - else - { - iErrorCode = XSVF_ERROR_TDOMISMATCH; - } - } - - return( iErrorCode ); -} - -/***************************************************************************** - * Function: xsvfBasicXSDRTDO - * Description: Get the XSDRTDO parameters and execute the XSDRTDO command. - * This is the common function for all XSDRTDO commands. - * Parameters: pucTapState - Current TAP state. - * lShiftLengthBits - number of bits to shift. - * sShiftLengthBytes - number of bytes to read. - * plvTdi - ptr to lenval for TDI data. - * lvTdoCaptured - ptr to lenval for storing TDO data. - * iEndState - state in which to end the shift. - * lRunTestTime - amount of time to wait after the shift. - * ucMaxRepeat - maximum xc9500/xl retries. - * Returns: int - 0 = success; otherwise TDO mismatch. - *****************************************************************************/ -int xsvfBasicXSDRTDO( unsigned char* pucTapState, - long lShiftLengthBits, - short sShiftLengthBytes, - lenVal* plvTdi, - lenVal* plvTdoCaptured, - lenVal* plvTdoExpected, - lenVal* plvTdoMask, - unsigned char ucEndState, - long lRunTestTime, - unsigned char ucMaxRepeat ) -{ - readVal( plvTdi, sShiftLengthBytes ); - if ( plvTdoExpected ) - { - readVal( plvTdoExpected, sShiftLengthBytes ); - } - return( xsvfShift( pucTapState, XTAPSTATE_SHIFTDR, lShiftLengthBits, - plvTdi, plvTdoCaptured, plvTdoExpected, plvTdoMask, - ucEndState, lRunTestTime, ucMaxRepeat ) ); -} - -/***************************************************************************** - * Function: xsvfDoSDRMasking - * Description: Update the data value with the next XSDRINC data and address. - * Example: dataVal=0x01ff, nextData=0xab, addressMask=0x0100, - * dataMask=0x00ff, should set dataVal to 0x02ab - * Parameters: plvTdi - The current TDI value. - * plvNextData - the next data value. - * plvAddressMask - the address mask. - * plvDataMask - the data mask. - * Returns: void. - *****************************************************************************/ -#ifdef XSVF_SUPPORT_COMPRESSION -void xsvfDoSDRMasking( lenVal* plvTdi, - lenVal* plvNextData, - lenVal* plvAddressMask, - lenVal* plvDataMask ) -{ - int i; - unsigned char ucTdi; - unsigned char ucTdiMask; - unsigned char ucDataMask; - unsigned char ucNextData; - unsigned char ucNextMask; - short sNextData; - - /* add the address Mask to dataVal and return as a new dataVal */ - addVal( plvTdi, plvTdi, plvAddressMask ); - - ucNextData = 0; - ucNextMask = 0; - sNextData = plvNextData->len; - for ( i = plvDataMask->len - 1; i >= 0; --i ) - { - /* Go through data mask in reverse order looking for mask (1) bits */ - ucDataMask = plvDataMask->val[ i ]; - if ( ucDataMask ) - { - /* Retrieve the corresponding TDI byte value */ - ucTdi = plvTdi->val[ i ]; - - /* For each bit in the data mask byte, look for 1's */ - ucTdiMask = 1; - while ( ucDataMask ) - { - if ( ucDataMask & 1 ) - { - if ( !ucNextMask ) - { - /* Get the next data byte */ - ucNextData = plvNextData->val[ --sNextData ]; - ucNextMask = 1; - } - - /* Set or clear the data bit according to the next data */ - if ( ucNextData & ucNextMask ) - { - ucTdi |= ucTdiMask; /* Set bit */ - } - else - { - ucTdi &= ( ~ucTdiMask ); /* Clear bit */ - } - - /* Update the next data */ - ucNextMask <<= 1; - } - ucTdiMask <<= 1; - ucDataMask >>= 1; - } - - /* Update the TDI value */ - plvTdi->val[ i ] = ucTdi; - } - } -} -#endif /* XSVF_SUPPORT_COMPRESSION */ - -/*============================================================================ - * XSVF Command Functions (type = TXsvfDoCmdFuncPtr) - * These functions update pXsvfInfo->iErrorCode only on an error. - * Otherwise, the error code is left alone. - * The function returns the error code from the function. - ============================================================================*/ - -/***************************************************************************** - * Function: xsvfDoIllegalCmd - * Description: Function place holder for illegal/unsupported commands. - * Parameters: pXsvfInfo - XSVF information pointer. - * Returns: int - 0 = success; non-zero = error. - *****************************************************************************/ -int xsvfDoIllegalCmd( SXsvfInfo* pXsvfInfo ) -{ - XSVFDBG_PRINTF2( 0, "ERROR: Encountered unsupported command #%d (%s)\n", - ((unsigned int)(pXsvfInfo->ucCommand)), - ((pXsvfInfo->ucCommand < XLASTCMD) - ? (xsvf_pzCommandName[pXsvfInfo->ucCommand]) - : "Unknown") ); - pXsvfInfo->iErrorCode = XSVF_ERROR_ILLEGALCMD; - return( pXsvfInfo->iErrorCode ); -} - -/***************************************************************************** - * Function: xsvfDoXCOMPLETE - * Description: XCOMPLETE (no parameters) - * Update complete status for XSVF player. - * Parameters: pXsvfInfo - XSVF information pointer. - * Returns: int - 0 = success; non-zero = error. - *****************************************************************************/ -int xsvfDoXCOMPLETE( SXsvfInfo* pXsvfInfo ) -{ - pXsvfInfo->ucComplete = 1; - return( XSVF_ERROR_NONE ); -} - -/***************************************************************************** - * Function: xsvfDoXTDOMASK - * Description: XTDOMASK <lenVal.TdoMask[XSDRSIZE]> - * Prespecify the TDO compare mask. - * Parameters: pXsvfInfo - XSVF information pointer. - * Returns: int - 0 = success; non-zero = error. - *****************************************************************************/ -int xsvfDoXTDOMASK( SXsvfInfo* pXsvfInfo ) -{ - readVal( &(pXsvfInfo->lvTdoMask), pXsvfInfo->sShiftLengthBytes ); - XSVFDBG_PRINTF( 4, " TDO Mask = "); - XSVFDBG_PRINTLENVAL( 4, &(pXsvfInfo->lvTdoMask) ); - XSVFDBG_PRINTF( 4, "\n"); - return( XSVF_ERROR_NONE ); -} - -/***************************************************************************** - * Function: xsvfDoXSIR - * Description: XSIR <(byte)shiftlen> <lenVal.TDI[shiftlen]> - * Get the instruction and shift the instruction into the TAP. - * If prespecified XRUNTEST!=0, goto RUNTEST and wait after - * the shift for XRUNTEST usec. - * Parameters: pXsvfInfo - XSVF information pointer. - * Returns: int - 0 = success; non-zero = error. - *****************************************************************************/ -int xsvfDoXSIR( SXsvfInfo* pXsvfInfo ) -{ - unsigned char ucShiftIrBits; - short sShiftIrBytes; - int iErrorCode; - - /* Get the shift length and store */ - readByte( &ucShiftIrBits ); - sShiftIrBytes = xsvfGetAsNumBytes( ucShiftIrBits ); - XSVFDBG_PRINTF1( 3, " XSIR length = %d\n", - ((unsigned int)ucShiftIrBits) ); - - if ( sShiftIrBytes > MAX_LEN ) - { - iErrorCode = XSVF_ERROR_DATAOVERFLOW; - } - else - { - /* Get and store instruction to shift in */ - readVal( &(pXsvfInfo->lvTdi), xsvfGetAsNumBytes( ucShiftIrBits ) ); - - /* Shift the data */ - iErrorCode = xsvfShift( &(pXsvfInfo->ucTapState), XTAPSTATE_SHIFTIR, - ucShiftIrBits, &(pXsvfInfo->lvTdi), - /*plvTdoCaptured*/0, /*plvTdoExpected*/0, - /*plvTdoMask*/0, pXsvfInfo->ucEndIR, - pXsvfInfo->lRunTestTime, /*ucMaxRepeat*/0 ); - } - - if ( iErrorCode != XSVF_ERROR_NONE ) - { - pXsvfInfo->iErrorCode = iErrorCode; - } - return( iErrorCode ); -} - -/***************************************************************************** - * Function: xsvfDoXSIR2 - * Description: XSIR <(2-byte)shiftlen> <lenVal.TDI[shiftlen]> - * Get the instruction and shift the instruction into the TAP. - * If prespecified XRUNTEST!=0, goto RUNTEST and wait after - * the shift for XRUNTEST usec. - * Parameters: pXsvfInfo - XSVF information pointer. - * Returns: int - 0 = success; non-zero = error. - *****************************************************************************/ -int xsvfDoXSIR2( SXsvfInfo* pXsvfInfo ) -{ - long lShiftIrBits; - short sShiftIrBytes; - int iErrorCode; - - /* Get the shift length and store */ - readVal( &(pXsvfInfo->lvTdi), 2 ); - lShiftIrBits = value( &(pXsvfInfo->lvTdi) ); - sShiftIrBytes = xsvfGetAsNumBytes( lShiftIrBits ); - XSVFDBG_PRINTF1( 3, " XSIR2 length = %d\n", (int)lShiftIrBits); - - if ( sShiftIrBytes > MAX_LEN ) - { - iErrorCode = XSVF_ERROR_DATAOVERFLOW; - } - else - { - /* Get and store instruction to shift in */ - readVal( &(pXsvfInfo->lvTdi), xsvfGetAsNumBytes( lShiftIrBits ) ); - - /* Shift the data */ - iErrorCode = xsvfShift( &(pXsvfInfo->ucTapState), XTAPSTATE_SHIFTIR, - lShiftIrBits, &(pXsvfInfo->lvTdi), - /*plvTdoCaptured*/0, /*plvTdoExpected*/0, - /*plvTdoMask*/0, pXsvfInfo->ucEndIR, - pXsvfInfo->lRunTestTime, /*ucMaxRepeat*/0 ); - } - - if ( iErrorCode != XSVF_ERROR_NONE ) - { - pXsvfInfo->iErrorCode = iErrorCode; - } - return( iErrorCode ); -} - -/***************************************************************************** - * Function: xsvfDoXSDR - * Description: XSDR <lenVal.TDI[XSDRSIZE]> - * Shift the given TDI data into the JTAG scan chain. - * Compare the captured TDO with the expected TDO from the - * previous XSDRTDO command using the previously specified - * XTDOMASK. - * Parameters: pXsvfInfo - XSVF information pointer. - * Returns: int - 0 = success; non-zero = error. - *****************************************************************************/ -int xsvfDoXSDR( SXsvfInfo* pXsvfInfo ) -{ - int iErrorCode; - readVal( &(pXsvfInfo->lvTdi), pXsvfInfo->sShiftLengthBytes ); - /* use TDOExpected from last XSDRTDO instruction */ - iErrorCode = xsvfShift( &(pXsvfInfo->ucTapState), XTAPSTATE_SHIFTDR, - pXsvfInfo->lShiftLengthBits, &(pXsvfInfo->lvTdi), - &(pXsvfInfo->lvTdoCaptured), - &(pXsvfInfo->lvTdoExpected), - &(pXsvfInfo->lvTdoMask), pXsvfInfo->ucEndDR, - pXsvfInfo->lRunTestTime, pXsvfInfo->ucMaxRepeat ); - if ( iErrorCode != XSVF_ERROR_NONE ) - { - pXsvfInfo->iErrorCode = iErrorCode; - } - return( iErrorCode ); -} - -/***************************************************************************** - * Function: xsvfDoXRUNTEST - * Description: XRUNTEST <uint32> - * Prespecify the XRUNTEST wait time for shift operations. - * Parameters: pXsvfInfo - XSVF information pointer. - * Returns: int - 0 = success; non-zero = error. - *****************************************************************************/ -int xsvfDoXRUNTEST( SXsvfInfo* pXsvfInfo ) -{ - readVal( &(pXsvfInfo->lvTdi), 4 ); - pXsvfInfo->lRunTestTime = value( &(pXsvfInfo->lvTdi) ); - XSVFDBG_PRINTF1( 3, " XRUNTEST = %ld\n", pXsvfInfo->lRunTestTime ); - return( XSVF_ERROR_NONE ); -} - -/***************************************************************************** - * Function: xsvfDoXREPEAT - * Description: XREPEAT <byte> - * Prespecify the maximum number of XC9500/XL retries. - * Parameters: pXsvfInfo - XSVF information pointer. - * Returns: int - 0 = success; non-zero = error. - *****************************************************************************/ -int xsvfDoXREPEAT( SXsvfInfo* pXsvfInfo ) -{ - readByte( &(pXsvfInfo->ucMaxRepeat) ); - XSVFDBG_PRINTF1( 3, " XREPEAT = %d\n", - ((unsigned int)(pXsvfInfo->ucMaxRepeat)) ); - return( XSVF_ERROR_NONE ); -} - -/***************************************************************************** - * Function: xsvfDoXSDRSIZE - * Description: XSDRSIZE <uint32> - * Prespecify the XRUNTEST wait time for shift operations. - * Parameters: pXsvfInfo - XSVF information pointer. - * Returns: int - 0 = success; non-zero = error. - *****************************************************************************/ -int xsvfDoXSDRSIZE( SXsvfInfo* pXsvfInfo ) -{ - int iErrorCode; - iErrorCode = XSVF_ERROR_NONE; - readVal( &(pXsvfInfo->lvTdi), 4 ); - pXsvfInfo->lShiftLengthBits = value( &(pXsvfInfo->lvTdi) ); - pXsvfInfo->sShiftLengthBytes= xsvfGetAsNumBytes( pXsvfInfo->lShiftLengthBits ); - XSVFDBG_PRINTF1( 3, " XSDRSIZE = %ld\n", pXsvfInfo->lShiftLengthBits ); - if ( pXsvfInfo->sShiftLengthBytes > MAX_LEN ) - { - iErrorCode = XSVF_ERROR_DATAOVERFLOW; - pXsvfInfo->iErrorCode = iErrorCode; - } - return( iErrorCode ); -} - -/***************************************************************************** - * Function: xsvfDoXSDRTDO - * Description: XSDRTDO <lenVal.TDI[XSDRSIZE]> <lenVal.TDO[XSDRSIZE]> - * Get the TDI and expected TDO values. Then, shift. - * Compare the expected TDO with the captured TDO using the - * prespecified XTDOMASK. - * Parameters: pXsvfInfo - XSVF information pointer. - * Returns: int - 0 = success; non-zero = error. - *****************************************************************************/ -int xsvfDoXSDRTDO( SXsvfInfo* pXsvfInfo ) -{ - int iErrorCode; - iErrorCode = xsvfBasicXSDRTDO( &(pXsvfInfo->ucTapState), - pXsvfInfo->lShiftLengthBits, - pXsvfInfo->sShiftLengthBytes, - &(pXsvfInfo->lvTdi), - &(pXsvfInfo->lvTdoCaptured), - &(pXsvfInfo->lvTdoExpected), - &(pXsvfInfo->lvTdoMask), - pXsvfInfo->ucEndDR, - pXsvfInfo->lRunTestTime, - pXsvfInfo->ucMaxRepeat ); - if ( iErrorCode != XSVF_ERROR_NONE ) - { - pXsvfInfo->iErrorCode = iErrorCode; - } - return( iErrorCode ); -} - -/***************************************************************************** - * Function: xsvfDoXSETSDRMASKS - * Description: XSETSDRMASKS <lenVal.AddressMask[XSDRSIZE]> - * <lenVal.DataMask[XSDRSIZE]> - * Get the prespecified address and data mask for the XSDRINC - * command. - * Used for xc9500/xl compressed XSVF data. - * Parameters: pXsvfInfo - XSVF information pointer. - * Returns: int - 0 = success; non-zero = error. - *****************************************************************************/ -#ifdef XSVF_SUPPORT_COMPRESSION -int xsvfDoXSETSDRMASKS( SXsvfInfo* pXsvfInfo ) -{ - /* read the addressMask */ - readVal( &(pXsvfInfo->lvAddressMask), pXsvfInfo->sShiftLengthBytes ); - /* read the dataMask */ - readVal( &(pXsvfInfo->lvDataMask), pXsvfInfo->sShiftLengthBytes ); - - XSVFDBG_PRINTF( 4, " Address Mask = " ); - XSVFDBG_PRINTLENVAL( 4, &(pXsvfInfo->lvAddressMask) ); - XSVFDBG_PRINTF( 4, "\n" ); - XSVFDBG_PRINTF( 4, " Data Mask = " ); - XSVFDBG_PRINTLENVAL( 4, &(pXsvfInfo->lvDataMask) ); - XSVFDBG_PRINTF( 4, "\n" ); - - return( XSVF_ERROR_NONE ); -} -#endif /* XSVF_SUPPORT_COMPRESSION */ - -/***************************************************************************** - * Function: xsvfDoXSDRINC - * Description: XSDRINC <lenVal.firstTDI[XSDRSIZE]> <byte(numTimes)> - * <lenVal.data[XSETSDRMASKS.dataMask.len]> ... - * Get the XSDRINC parameters and execute the XSDRINC command. - * XSDRINC starts by loading the first TDI shift value. - * Then, for numTimes, XSDRINC gets the next piece of data, - * replaces the bits from the starting TDI as defined by the - * XSETSDRMASKS.dataMask, adds the address mask from - * XSETSDRMASKS.addressMask, shifts the new TDI value, - * and compares the TDO to the expected TDO from the previous - * XSDRTDO command using the XTDOMASK. - * Used for xc9500/xl compressed XSVF data. - * Parameters: pXsvfInfo - XSVF information pointer. - * Returns: int - 0 = success; non-zero = error. - *****************************************************************************/ -#ifdef XSVF_SUPPORT_COMPRESSION -int xsvfDoXSDRINC( SXsvfInfo* pXsvfInfo ) -{ - int iErrorCode; - int iDataMaskLen; - unsigned char ucDataMask; - unsigned char ucNumTimes; - unsigned char i; - - readVal( &(pXsvfInfo->lvTdi), pXsvfInfo->sShiftLengthBytes ); - iErrorCode = xsvfShift( &(pXsvfInfo->ucTapState), XTAPSTATE_SHIFTDR, - pXsvfInfo->lShiftLengthBits, - &(pXsvfInfo->lvTdi), &(pXsvfInfo->lvTdoCaptured), - &(pXsvfInfo->lvTdoExpected), - &(pXsvfInfo->lvTdoMask), pXsvfInfo->ucEndDR, - pXsvfInfo->lRunTestTime, pXsvfInfo->ucMaxRepeat ); - if ( !iErrorCode ) - { - /* Calculate number of data mask bits */ - iDataMaskLen = 0; - for ( i = 0; i < pXsvfInfo->lvDataMask.len; ++i ) - { - ucDataMask = pXsvfInfo->lvDataMask.val[ i ]; - while ( ucDataMask ) - { - iDataMaskLen += ( ucDataMask & 1 ); - ucDataMask >>= 1; - } - } - - /* Get the number of data pieces, i.e. number of times to shift */ - readByte( &ucNumTimes ); - - /* For numTimes, get data, fix TDI, and shift */ - for ( i = 0; !iErrorCode && ( i < ucNumTimes ); ++i ) - { - readVal( &(pXsvfInfo->lvNextData), - xsvfGetAsNumBytes( iDataMaskLen ) ); - xsvfDoSDRMasking( &(pXsvfInfo->lvTdi), - &(pXsvfInfo->lvNextData), - &(pXsvfInfo->lvAddressMask), - &(pXsvfInfo->lvDataMask) ); - iErrorCode = xsvfShift( &(pXsvfInfo->ucTapState), - XTAPSTATE_SHIFTDR, - pXsvfInfo->lShiftLengthBits, - &(pXsvfInfo->lvTdi), - &(pXsvfInfo->lvTdoCaptured), - &(pXsvfInfo->lvTdoExpected), - &(pXsvfInfo->lvTdoMask), - pXsvfInfo->ucEndDR, - pXsvfInfo->lRunTestTime, - pXsvfInfo->ucMaxRepeat ); - } - } - if ( iErrorCode != XSVF_ERROR_NONE ) - { - pXsvfInfo->iErrorCode = iErrorCode; - } - return( iErrorCode ); -} -#endif /* XSVF_SUPPORT_COMPRESSION */ - -/***************************************************************************** - * Function: xsvfDoXSDRBCE - * Description: XSDRB/XSDRC/XSDRE <lenVal.TDI[XSDRSIZE]> - * If not already in SHIFTDR, goto SHIFTDR. - * Shift the given TDI data into the JTAG scan chain. - * Ignore TDO. - * If cmd==XSDRE, then goto ENDDR. Otherwise, stay in ShiftDR. - * XSDRB, XSDRC, and XSDRE are the same implementation. - * Parameters: pXsvfInfo - XSVF information pointer. - * Returns: int - 0 = success; non-zero = error. - *****************************************************************************/ -int xsvfDoXSDRBCE( SXsvfInfo* pXsvfInfo ) -{ - unsigned char ucEndDR; - int iErrorCode; - ucEndDR = (unsigned char)(( pXsvfInfo->ucCommand == XSDRE ) ? - pXsvfInfo->ucEndDR : XTAPSTATE_SHIFTDR); - iErrorCode = xsvfBasicXSDRTDO( &(pXsvfInfo->ucTapState), - pXsvfInfo->lShiftLengthBits, - pXsvfInfo->sShiftLengthBytes, - &(pXsvfInfo->lvTdi), - /*plvTdoCaptured*/0, /*plvTdoExpected*/0, - /*plvTdoMask*/0, ucEndDR, - /*lRunTestTime*/0, /*ucMaxRepeat*/0 ); - if ( iErrorCode != XSVF_ERROR_NONE ) - { - pXsvfInfo->iErrorCode = iErrorCode; - } - return( iErrorCode ); -} - -/***************************************************************************** - * Function: xsvfDoXSDRTDOBCE - * Description: XSDRB/XSDRC/XSDRE <lenVal.TDI[XSDRSIZE]> <lenVal.TDO[XSDRSIZE]> - * If not already in SHIFTDR, goto SHIFTDR. - * Shift the given TDI data into the JTAG scan chain. - * Compare TDO, but do NOT use XTDOMASK. - * If cmd==XSDRTDOE, then goto ENDDR. Otherwise, stay in ShiftDR. - * XSDRTDOB, XSDRTDOC, and XSDRTDOE are the same implementation. - * Parameters: pXsvfInfo - XSVF information pointer. - * Returns: int - 0 = success; non-zero = error. - *****************************************************************************/ -int xsvfDoXSDRTDOBCE( SXsvfInfo* pXsvfInfo ) -{ - unsigned char ucEndDR; - int iErrorCode; - ucEndDR = (unsigned char)(( pXsvfInfo->ucCommand == XSDRTDOE ) ? - pXsvfInfo->ucEndDR : XTAPSTATE_SHIFTDR); - iErrorCode = xsvfBasicXSDRTDO( &(pXsvfInfo->ucTapState), - pXsvfInfo->lShiftLengthBits, - pXsvfInfo->sShiftLengthBytes, - &(pXsvfInfo->lvTdi), - &(pXsvfInfo->lvTdoCaptured), - &(pXsvfInfo->lvTdoExpected), - /*plvTdoMask*/0, ucEndDR, - /*lRunTestTime*/0, /*ucMaxRepeat*/0 ); - if ( iErrorCode != XSVF_ERROR_NONE ) - { - pXsvfInfo->iErrorCode = iErrorCode; - } - return( iErrorCode ); -} - -/***************************************************************************** - * Function: xsvfDoXSTATE - * Description: XSTATE <byte> - * <byte> == XTAPSTATE; - * Get the state parameter and transition the TAP to that state. - * Parameters: pXsvfInfo - XSVF information pointer. - * Returns: int - 0 = success; non-zero = error. - *****************************************************************************/ -int xsvfDoXSTATE( SXsvfInfo* pXsvfInfo ) -{ - unsigned char ucNextState; - int iErrorCode; - readByte( &ucNextState ); - iErrorCode = xsvfGotoTapState( &(pXsvfInfo->ucTapState), ucNextState ); - if ( iErrorCode != XSVF_ERROR_NONE ) - { - pXsvfInfo->iErrorCode = iErrorCode; - } - return( iErrorCode ); -} - -/***************************************************************************** - * Function: xsvfDoXENDXR - * Description: XENDIR/XENDDR <byte> - * <byte>: 0 = RUNTEST; 1 = PAUSE. - * Get the prespecified XENDIR or XENDDR. - * Both XENDIR and XENDDR use the same implementation. - * Parameters: pXsvfInfo - XSVF information pointer. - * Returns: int - 0 = success; non-zero = error. - *****************************************************************************/ -int xsvfDoXENDXR( SXsvfInfo* pXsvfInfo ) -{ - int iErrorCode; - unsigned char ucEndState; - - iErrorCode = XSVF_ERROR_NONE; - readByte( &ucEndState ); - if ( ( ucEndState != XENDXR_RUNTEST ) && ( ucEndState != XENDXR_PAUSE ) ) - { - iErrorCode = XSVF_ERROR_ILLEGALSTATE; - } - else - { - - if ( pXsvfInfo->ucCommand == XENDIR ) - { - if ( ucEndState == XENDXR_RUNTEST ) - { - pXsvfInfo->ucEndIR = XTAPSTATE_RUNTEST; - } - else - { - pXsvfInfo->ucEndIR = XTAPSTATE_PAUSEIR; - } - XSVFDBG_PRINTF1( 3, " ENDIR State = %s\n", - xsvf_pzTapState[ pXsvfInfo->ucEndIR ] ); - } - else /* XENDDR */ - { - if ( ucEndState == XENDXR_RUNTEST ) - { - pXsvfInfo->ucEndDR = XTAPSTATE_RUNTEST; - } - else - { - pXsvfInfo->ucEndDR = XTAPSTATE_PAUSEDR; - } - XSVFDBG_PRINTF1( 3, " ENDDR State = %s\n", - xsvf_pzTapState[ pXsvfInfo->ucEndDR ] ); - } - } - - if ( iErrorCode != XSVF_ERROR_NONE ) - { - pXsvfInfo->iErrorCode = iErrorCode; - } - return( iErrorCode ); -} - -/***************************************************************************** - * Function: xsvfDoXCOMMENT - * Description: XCOMMENT <text string ending in \0> - * <text string ending in \0> == text comment; - * Arbitrary comment embedded in the XSVF. - * Parameters: pXsvfInfo - XSVF information pointer. - * Returns: int - 0 = success; non-zero = error. - *****************************************************************************/ -int xsvfDoXCOMMENT( SXsvfInfo* pXsvfInfo ) -{ - /* Use the comment for debugging */ - /* Otherwise, read through the comment to the end '\0' and ignore */ - unsigned char ucText; - - if ( xsvf_iDebugLevel > 0 ) - { - putc( ' ' ); - } - - do - { - readByte( &ucText ); - if ( xsvf_iDebugLevel > 0 ) - { - putc( ucText ? ucText : '\n' ); - } - } while ( ucText ); - - pXsvfInfo->iErrorCode = XSVF_ERROR_NONE; - - return( pXsvfInfo->iErrorCode ); -} - -/***************************************************************************** - * Function: xsvfDoXWAIT - * Description: XWAIT <wait_state> <end_state> <wait_time> - * If not already in <wait_state>, then go to <wait_state>. - * Wait in <wait_state> for <wait_time> microseconds. - * Finally, if not already in <end_state>, then goto <end_state>. - * Parameters: pXsvfInfo - XSVF information pointer. - * Returns: int - 0 = success; non-zero = error. - *****************************************************************************/ -int xsvfDoXWAIT( SXsvfInfo* pXsvfInfo ) -{ - unsigned char ucWaitState; - unsigned char ucEndState; - long lWaitTime; - - /* Get Parameters */ - /* <wait_state> */ - readVal( &(pXsvfInfo->lvTdi), 1 ); - ucWaitState = pXsvfInfo->lvTdi.val[0]; - - /* <end_state> */ - readVal( &(pXsvfInfo->lvTdi), 1 ); - ucEndState = pXsvfInfo->lvTdi.val[0]; - - /* <wait_time> */ - readVal( &(pXsvfInfo->lvTdi), 4 ); - lWaitTime = value( &(pXsvfInfo->lvTdi) ); - XSVFDBG_PRINTF2( 3, " XWAIT: state = %s; time = %ld\n", - xsvf_pzTapState[ ucWaitState ], lWaitTime ); - - /* If not already in <wait_state>, go to <wait_state> */ - if ( pXsvfInfo->ucTapState != ucWaitState ) - { - xsvfGotoTapState( &(pXsvfInfo->ucTapState), ucWaitState ); - } - - /* Wait for <wait_time> microseconds */ - waitTime( lWaitTime ); - - /* If not already in <end_state>, go to <end_state> */ - if ( pXsvfInfo->ucTapState != ucEndState ) - { - xsvfGotoTapState( &(pXsvfInfo->ucTapState), ucEndState ); - } - - return( XSVF_ERROR_NONE ); -} - - -/*============================================================================ - * Execution Control Functions - ============================================================================*/ - -/***************************************************************************** - * Function: xsvfInitialize - * Description: Initialize the xsvf player. - * Call this before running the player to initialize the data - * in the SXsvfInfo struct. - * xsvfCleanup is called to clean up the data in SXsvfInfo - * after the XSVF is played. - * Parameters: pXsvfInfo - ptr to the XSVF information. - * Returns: int - 0 = success; otherwise error. - *****************************************************************************/ -int xsvfInitialize( SXsvfInfo* pXsvfInfo ) -{ - /* Initialize values */ - pXsvfInfo->iErrorCode = xsvfInfoInit( pXsvfInfo ); - - if ( !pXsvfInfo->iErrorCode ) - { - /* Initialize the TAPs */ - pXsvfInfo->iErrorCode = xsvfGotoTapState( &(pXsvfInfo->ucTapState), - XTAPSTATE_RESET ); - } - - return( pXsvfInfo->iErrorCode ); -} - -/***************************************************************************** - * Function: xsvfRun - * Description: Run the xsvf player for a single command and return. - * First, call xsvfInitialize. - * Then, repeatedly call this function until an error is detected - * or until the pXsvfInfo->ucComplete variable is non-zero. - * Finally, call xsvfCleanup to cleanup any remnants. - * Parameters: pXsvfInfo - ptr to the XSVF information. - * Returns: int - 0 = success; otherwise error. - *****************************************************************************/ -int xsvfRun( SXsvfInfo* pXsvfInfo ) -{ - /* Process the XSVF commands */ - if ( (!pXsvfInfo->iErrorCode) && (!pXsvfInfo->ucComplete) ) - { - /* read 1 byte for the instruction */ - readByte( &(pXsvfInfo->ucCommand) ); - ++(pXsvfInfo->lCommandCount); - - if ( pXsvfInfo->ucCommand < XLASTCMD ) - { - /* Execute the command. Func sets error code. */ - XSVFDBG_PRINTF1( 2, " %s\n", - xsvf_pzCommandName[pXsvfInfo->ucCommand] ); - /* If your compiler cannot take this form, - then convert to a switch statement */ -#if 0 /* test-only */ - xsvf_pfDoCmd[ pXsvfInfo->ucCommand ]( pXsvfInfo ); -#else - switch (pXsvfInfo->ucCommand) { - case 0: - xsvfDoXCOMPLETE(pXsvfInfo); /* 0 */ - break; - case 1: - xsvfDoXTDOMASK(pXsvfInfo); /* 1 */ - break; - case 2: - xsvfDoXSIR(pXsvfInfo); /* 2 */ - break; - case 3: - xsvfDoXSDR(pXsvfInfo); /* 3 */ - break; - case 4: - xsvfDoXRUNTEST(pXsvfInfo); /* 4 */ - break; - case 5: - xsvfDoIllegalCmd(pXsvfInfo); /* 5 */ - break; - case 6: - xsvfDoIllegalCmd(pXsvfInfo); /* 6 */ - break; - case 7: - xsvfDoXREPEAT(pXsvfInfo); /* 7 */ - break; - case 8: - xsvfDoXSDRSIZE(pXsvfInfo); /* 8 */ - break; - case 9: - xsvfDoXSDRTDO(pXsvfInfo); /* 9 */ - break; -#ifdef XSVF_SUPPORT_COMPRESSION - case 10: - xsvfDoXSETSDRMASKS(pXsvfInfo); /* 10 */ - break; - case 11: - xsvfDoXSDRINC(pXsvfInfo); /* 11 */ - break; -#else - case 10: - xsvfDoIllegalCmd(pXsvfInfo); /* 10 */ - break; - case 11: - xsvfDoIllegalCmd(pXsvfInfo); /* 11 */ - break; -#endif /* XSVF_SUPPORT_COMPRESSION */ - case 12: - xsvfDoXSDRBCE(pXsvfInfo); /* 12 */ - break; - case 13: - xsvfDoXSDRBCE(pXsvfInfo); /* 13 */ - break; - case 14: - xsvfDoXSDRBCE(pXsvfInfo); /* 14 */ - break; - case 15: - xsvfDoXSDRTDOBCE(pXsvfInfo); /* 15 */ - break; - case 16: - xsvfDoXSDRTDOBCE(pXsvfInfo); /* 16 */ - break; - case 17: - xsvfDoXSDRTDOBCE(pXsvfInfo); /* 17 */ - break; - case 18: - xsvfDoXSTATE(pXsvfInfo); /* 18 */ - break; - case 19: - xsvfDoXENDXR(pXsvfInfo); /* 19 */ - break; - case 20: - xsvfDoXENDXR(pXsvfInfo); /* 20 */ - break; - case 21: - xsvfDoXSIR2(pXsvfInfo); /* 21 */ - break; - case 22: - xsvfDoXCOMMENT(pXsvfInfo); /* 22 */ - break; - case 23: - xsvfDoXWAIT(pXsvfInfo); /* 23 */ - break; - } -#endif - } - else - { - /* Illegal command value. Func sets error code. */ - xsvfDoIllegalCmd( pXsvfInfo ); - } - } - - return( pXsvfInfo->iErrorCode ); -} - -/***************************************************************************** - * Function: xsvfCleanup - * Description: cleanup remnants of the xsvf player. - * Parameters: pXsvfInfo - ptr to the XSVF information. - * Returns: void. - *****************************************************************************/ -void xsvfCleanup( SXsvfInfo* pXsvfInfo ) -{ - xsvfInfoCleanup( pXsvfInfo ); -} - - -/*============================================================================ - * xsvfExecute() - The primary entry point to the XSVF player - ============================================================================*/ - -/***************************************************************************** - * Function: xsvfExecute - * Description: Process, interpret, and apply the XSVF commands. - * See port.c:readByte for source of XSVF data. - * Parameters: none. - * Returns: int - Legacy result values: 1 == success; 0 == failed. - *****************************************************************************/ -int xsvfExecute(void) -{ - SXsvfInfo xsvfInfo; - - xsvfInitialize( &xsvfInfo ); - - while ( !xsvfInfo.iErrorCode && (!xsvfInfo.ucComplete) ) - { - xsvfRun( &xsvfInfo ); - } - - if ( xsvfInfo.iErrorCode ) - { - XSVFDBG_PRINTF1( 0, "%s\n", xsvf_pzErrorName[ - ( xsvfInfo.iErrorCode < XSVF_ERROR_LAST ) - ? xsvfInfo.iErrorCode : XSVF_ERROR_UNKNOWN ] ); - XSVFDBG_PRINTF2( 0, "ERROR at or near XSVF command #%ld. See line #%ld in the XSVF ASCII file.\n", - xsvfInfo.lCommandCount, xsvfInfo.lCommandCount ); - } - else - { - XSVFDBG_PRINTF( 0, "SUCCESS - Completed XSVF execution.\n" ); - } - - xsvfCleanup( &xsvfInfo ); - - return( XSVF_ERRORCODE(xsvfInfo.iErrorCode) ); -} - - -/***************************************************************************** - * Function: do_cpld - * Description: main function. - * Specified here for creating stand-alone debug executable. - * Embedded users should call xsvfExecute() directly. - * Parameters: iArgc - number of command-line arguments. - * ppzArgv - array of ptrs to strings (command-line arguments). - * Returns: int - Legacy return value: 1 = success; 0 = error. - *****************************************************************************/ -int do_cpld(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - int iErrorCode; - unsigned long duration; - unsigned long long startClock, endClock; - - if (argc == 2) - xsvfdata = (unsigned char *)simple_strtoul(argv[1], NULL, 16); - else { -#ifdef CONFIG_SYS_XSVF_DEFAULT_ADDR - xsvfdata = (unsigned char *)CONFIG_SYS_XSVF_DEFAULT_ADDR; -#else - printf("Usage:\ncpld %s\n", cmdtp->help); - return -1; -#endif - } - - iErrorCode = XSVF_ERRORCODE( XSVF_ERROR_NONE ); - xsvf_iDebugLevel = 0; - - printf("XSVF Player v%s, Xilinx, Inc.\n", XSVF_VERSION); - printf("Reading XSVF data @ %p\n", xsvfdata); - - /* Initialize the I/O. SetPort initializes I/O on first call */ - setPort( TMS, 1 ); - - /* Execute the XSVF in the file */ - startClock = get_ticks(); - iErrorCode = xsvfExecute(); - endClock = get_ticks(); - duration = (unsigned long)(endClock - startClock); - printf("\nExecution Time = %d seconds\n", (int)(duration/get_tbclk())); - - return( iErrorCode ); -} -U_BOOT_CMD( - cpld, 2, 1, do_cpld, - "program onboard CPLD", - "<xsvf-addr>" -); diff --git a/board/esd/common/xilinx_jtag/micro.h b/board/esd/common/xilinx_jtag/micro.h deleted file mode 100644 index e9a7612856..0000000000 --- a/board/esd/common/xilinx_jtag/micro.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * (C) Copyright 2003 - * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -/***************************************************************************** - * File: micro.h - * Description: This header file contains the function prototype to the - * primary interface function for the XSVF player. - * Usage: FIRST - PORTS.C - * Customize the ports.c function implementations to establish - * the correct protocol for communicating with your JTAG ports - * (setPort() and readTDOBit()) and tune the waitTime() delay - * function. Also, establish access to the XSVF data source - * in the readByte() function. - * FINALLY - Call xsvfExecute(). - *****************************************************************************/ -#ifndef XSVF_MICRO_H -#define XSVF_MICRO_H - -/* Legacy error codes for xsvfExecute from original XSVF player v2.0 */ -#define XSVF_LEGACY_SUCCESS 1 -#define XSVF_LEGACY_ERROR 0 - -/* 4.04 [NEW] Error codes for xsvfExecute. */ -/* Must #define XSVF_SUPPORT_ERRORCODES in micro.c to get these codes */ -#define XSVF_ERROR_NONE 0 -#define XSVF_ERROR_UNKNOWN 1 -#define XSVF_ERROR_TDOMISMATCH 2 -#define XSVF_ERROR_MAXRETRIES 3 /* TDO mismatch after max retries */ -#define XSVF_ERROR_ILLEGALCMD 4 -#define XSVF_ERROR_ILLEGALSTATE 5 -#define XSVF_ERROR_DATAOVERFLOW 6 /* Data > lenVal MAX_LEN buffer size*/ -/* Insert new errors here */ -#define XSVF_ERROR_LAST 7 - -/***************************************************************************** - * Function: xsvfExecute - * Description: Process, interpret, and apply the XSVF commands. - * See port.c:readByte for source of XSVF data. - * Parameters: none. - * Returns: int - For error codes see above. - *****************************************************************************/ -int xsvfExecute(void); - -#endif /* XSVF_MICRO_H */ diff --git a/board/esd/common/xilinx_jtag/ports.c b/board/esd/common/xilinx_jtag/ports.c deleted file mode 100644 index d79dbd1e02..0000000000 --- a/board/esd/common/xilinx_jtag/ports.c +++ /dev/null @@ -1,99 +0,0 @@ -/* - * (C) Copyright 2003 - * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -/*******************************************************/ -/* file: ports.c */ -/* abstract: This file contains the routines to */ -/* output values on the JTAG ports, to read */ -/* the TDO bit, and to read a byte of data */ -/* from the prom */ -/* */ -/*******************************************************/ - -#include <common.h> -#include <asm/processor.h> -#include <asm/io.h> - -#include "ports.h" - -static unsigned long output = 0; -static int filepos = 0; -static int oldstate = 0; -static int newstate = 0; -static int readptr = 0; - -extern const unsigned char *xsvfdata; - -/* if in debugging mode, then just set the variables */ -void setPort(short p,short val) -{ - if (p==TMS) { - if (val) { - output |= JTAG_TMS; - } else { - output &= ~JTAG_TMS; - } - } - if (p==TDI) { - if (val) { - output |= JTAG_TDI; - } else { - output &= ~JTAG_TDI; - } - } - if (p==TCK) { - if (val) { - output |= JTAG_TCK; - } else { - output &= ~JTAG_TCK; - } - out_be32((void *)GPIO0_OR, output); - } -} - - -/* toggle tck LH */ -void pulseClock(void) -{ - setPort(TCK,0); /* set the TCK port to low */ - setPort(TCK,1); /* set the TCK port to high */ -} - - -/* read in a byte of data from the prom */ -void readByte(unsigned char *data) -{ - /* pretend reading using a file */ - *data = xsvfdata[readptr++]; - newstate = filepos++ >> 10; - if (newstate != oldstate) { - printf("%4d kB\r\r\r\r", newstate); - oldstate = newstate; - } -} - -/* read the TDO bit from port */ -unsigned char readTDOBit(void) -{ - unsigned long inputs; - - inputs = in_be32((void *)GPIO0_IR); - if (inputs & JTAG_TDO) - return 1; - else - return 0; -} - - -/* Wait at least the specified number of microsec. */ -/* Use a timer if possible; otherwise estimate the number of instructions */ -/* necessary to be run based on the microcontroller speed. For this example */ -/* we pulse the TCK port a number of times based on the processor speed. */ -void waitTime(long microsec) -{ - udelay(microsec); /* esd */ -} diff --git a/board/esd/common/xilinx_jtag/ports.h b/board/esd/common/xilinx_jtag/ports.h deleted file mode 100644 index 8ee7de92d7..0000000000 --- a/board/esd/common/xilinx_jtag/ports.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * (C) Copyright 2003 - * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -/*******************************************************/ -/* file: ports.h */ -/* abstract: This file contains extern declarations */ -/* for providing stimulus to the JTAG ports.*/ -/*******************************************************/ - -#ifndef ports_dot_h -#define ports_dot_h - -/* these constants are used to send the appropriate ports to setPort */ -/* they should be enumerated types, but some of the microcontroller */ -/* compilers don't like enumerated types */ -#define TCK (short) 0 -#define TMS (short) 1 -#define TDI (short) 2 - -/* - * Use CONFIG_SYS_FPGA_xxx defines from board include file. - */ -#define JTAG_TMS CONFIG_SYS_FPGA_PRG /* output */ -#define JTAG_TCK CONFIG_SYS_FPGA_CLK /* output */ -#define JTAG_TDI CONFIG_SYS_FPGA_DATA /* output */ -#define JTAG_TDO CONFIG_SYS_FPGA_DONE /* input */ - -/* set the port "p" (TCK, TMS, or TDI) to val (0 or 1) */ -void setPort(short p, short val); - -/* read the TDO bit and store it in val */ -unsigned char readTDOBit(void); - -/* make clock go down->up->down*/ -void pulseClock(void); - -/* read the next byte of data from the xsvf file */ -void readByte(unsigned char *data); - -void waitTime(long microsec); - -#endif diff --git a/board/esd/cpci2dp/Kconfig b/board/esd/cpci2dp/Kconfig deleted file mode 100644 index 646e8ffa1c..0000000000 --- a/board/esd/cpci2dp/Kconfig +++ /dev/null @@ -1,12 +0,0 @@ -if TARGET_CPCI2DP - -config SYS_BOARD - default "cpci2dp" - -config SYS_VENDOR - default "esd" - -config SYS_CONFIG_NAME - default "CPCI2DP" - -endif diff --git a/board/esd/cpci2dp/MAINTAINERS b/board/esd/cpci2dp/MAINTAINERS deleted file mode 100644 index 660e1859c8..0000000000 --- a/board/esd/cpci2dp/MAINTAINERS +++ /dev/null @@ -1,6 +0,0 @@ -CPCI2DP BOARD -M: Matthias Fuchs <matthias.fuchs@esd-electronics.com> -S: Maintained -F: board/esd/cpci2dp/ -F: include/configs/CPCI2DP.h -F: configs/CPCI2DP_defconfig diff --git a/board/esd/cpci2dp/Makefile b/board/esd/cpci2dp/Makefile deleted file mode 100644 index ce2c6dd912..0000000000 --- a/board/esd/cpci2dp/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# -# (C) Copyright 2000-2006 -# Wolfgang Denk, DENX Software Engineering, wd@denx.de. -# -# SPDX-License-Identifier: GPL-2.0+ -# - -obj-y = cpci2dp.o flash.o ../common/misc.o ../common/cmd_loadpci.o diff --git a/board/esd/cpci2dp/cpci2dp.c b/board/esd/cpci2dp/cpci2dp.c deleted file mode 100644 index 336c551263..0000000000 --- a/board/esd/cpci2dp/cpci2dp.c +++ /dev/null @@ -1,172 +0,0 @@ -/* - * (C) Copyright 2005 - * Matthias Fuchs, esd gmbh germany, matthias.fuchs@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <common.h> -#include <asm/processor.h> -#include <asm/io.h> -#include <command.h> -#include <malloc.h> - -DECLARE_GLOBAL_DATA_PTR; - -int board_early_init_f (void) -{ - unsigned long CPC0_CR0Reg; - - /* - * Setup GPIO pins - */ - CPC0_CR0Reg = mfdcr(CPC0_CR0); - mtdcr(CPC0_CR0, CPC0_CR0Reg | - ((CONFIG_SYS_EEPROM_WP | CONFIG_SYS_PB_LED | - CONFIG_SYS_SELF_RST | CONFIG_SYS_INTA_FAKE) << 5)); - - /* set output pins to high */ - out_be32((void *)GPIO0_OR, CONFIG_SYS_EEPROM_WP); - /* setup for output (LED=off) */ - out_be32((void *)GPIO0_TCR, CONFIG_SYS_EEPROM_WP | CONFIG_SYS_PB_LED); - - /* - * 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) PB0; active low; level sensitive - * IRQ 26 (EXT IRQ 1) PB1; active low; level sensitive - * IRQ 27 (EXT IRQ 2) PCI SLOT 0; active low; level sensitive - * IRQ 28 (EXT IRQ 3) PCI SLOT 1; active low; level sensitive - * IRQ 29 (EXT IRQ 4) PCI SLOT 2; active low; level sensitive - * IRQ 30 (EXT IRQ 5) PCI SLOT 3; active low; level sensitive - * IRQ 31 (EXT IRQ 6) unused - */ - mtdcr(UIC0SR, 0xFFFFFFFF); /* clear all ints */ - mtdcr(UIC0ER, 0x00000000); /* disable all ints */ - mtdcr(UIC0CR, 0x00000000); /* set all to be non-critical*/ - mtdcr(UIC0PR, 0xFFFFFF81); /* set int polarities */ - - mtdcr(UIC0TR, 0x10000000); /* set int trigger levels */ - mtdcr(UIC0VCR, 0x00000001); /* set vect base=0,INT0 highest priority*/ - mtdcr(UIC0SR, 0xFFFFFFFF); /* clear all ints */ - - return 0; -} - -int misc_init_r (void) -{ - unsigned long CPC0_CR0Reg; - - /* adjust flash start and offset */ - gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize; - gd->bd->bi_flashoffset = 0; - - /* - * Select cts (and not dsr) on uart1 - */ - CPC0_CR0Reg = mfdcr(CPC0_CR0); - mtdcr(CPC0_CR0, CPC0_CR0Reg | 0x00001000); - - return (0); -} - - -/* - * Check Board Identity: - */ -int checkboard (void) -{ - char str[64]; - int i = getenv_f("serial#", str, sizeof(str)); - - puts ("Board: "); - - if (i == -1) { - puts ("### No HW ID - assuming CPCI2DP"); - } else { - puts(str); - } - - printf(" (Ver 1.0)"); - - putc ('\n'); - - return 0; -} - -#if defined(CONFIG_SYS_EEPROM_WREN) -/* Input: <dev_addr> I2C address of EEPROM device to enable. - * <state> -1: deliver current state - * 0: disable write - * 1: enable write - * Returns: -1: wrong device address - * 0: dis-/en- able done - * 0/1: current state if <state> was -1. - */ -int eeprom_write_enable (unsigned dev_addr, int state) { - if (CONFIG_SYS_I2C_EEPROM_ADDR != dev_addr) { - return -1; - } else { - switch (state) { - case 1: - /* Enable write access, clear bit GPIO_SINT2. */ - out_be32((void *)GPIO0_OR, - in_be32((void *)GPIO0_OR) & ~CONFIG_SYS_EEPROM_WP); - state = 0; - break; - case 0: - /* Disable write access, set bit GPIO_SINT2. */ - out_be32((void *)GPIO0_OR, - in_be32((void *)GPIO0_OR) | CONFIG_SYS_EEPROM_WP); - state = 0; - break; - default: - /* Read current status back. */ - state = (0 == (in_be32((void *)GPIO0_OR) & - CONFIG_SYS_EEPROM_WP)); - break; - } - } - return state; -} -#endif - -#if defined(CONFIG_SYS_EEPROM_WREN) -int do_eep_wren (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - int query = argc == 1; - int state = 0; - - if (query) { - /* Query write access state. */ - state = eeprom_write_enable (CONFIG_SYS_I2C_EEPROM_ADDR, -1); - if (state < 0) { - puts ("Query of write access state failed.\n"); - } else { - printf ("Write access for device 0x%0x is %sabled.\n", - CONFIG_SYS_I2C_EEPROM_ADDR, state ? "en" : "dis"); - state = 0; - } - } else { - if ('0' == argv[1][0]) { - /* Disable write access. */ - state = eeprom_write_enable (CONFIG_SYS_I2C_EEPROM_ADDR, 0); - } else { - /* Enable write access. */ - state = eeprom_write_enable (CONFIG_SYS_I2C_EEPROM_ADDR, 1); - } - if (state < 0) { - puts ("Setup of write access state failed.\n"); - } - } - - return state; -} - -U_BOOT_CMD( - eepwren, 2, 0, do_eep_wren, - "Enable / disable / query EEPROM write access", - "" -); -#endif /* #if defined(CONFIG_SYS_EEPROM_WREN) */ diff --git a/board/esd/cpci2dp/flash.c b/board/esd/cpci2dp/flash.c deleted file mode 100644 index 34bdc053fc..0000000000 --- a/board/esd/cpci2dp/flash.c +++ /dev/null @@ -1,68 +0,0 @@ -/* - * (C) Copyright 2001 - * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <common.h> -#include <asm/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) -{ - unsigned long size_b0; - int i; - uint pbcr; - unsigned long base_b0; - - /* Init: no FLASHes known */ - for (i=0; i<CONFIG_SYS_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(EBC0_CFGADDR, PB0CR); - pbcr = mfdcr(EBC0_CFGDATA); - mtdcr(EBC0_CFGADDR, PB0CR); - base_b0 = -size_b0; - pbcr = (pbcr & 0x0001ffff) | base_b0 | (((size_b0/1024/1024)-1)<<17); - mtdcr(EBC0_CFGDATA, pbcr); - /* printf("PB1CR = %x\n", pbcr); */ - - /* Monitor protection ON by default */ - (void)flash_protect(FLAG_PROTECT_SET, - -monitor_flash_len, - 0xffffffff, - &flash_info[0]); - - flash_info[0].size = size_b0; - - return (size_b0); -} diff --git a/board/esd/cpci405/Kconfig b/board/esd/cpci405/Kconfig deleted file mode 100644 index 0df2755177..0000000000 --- a/board/esd/cpci405/Kconfig +++ /dev/null @@ -1,12 +0,0 @@ -if TARGET_CPCI4052 - -config SYS_BOARD - default "cpci405" - -config SYS_VENDOR - default "esd" - -config SYS_CONFIG_NAME - default "CPCI4052" - -endif diff --git a/board/esd/cpci405/MAINTAINERS b/board/esd/cpci405/MAINTAINERS deleted file mode 100644 index 1da58dc002..0000000000 --- a/board/esd/cpci405/MAINTAINERS +++ /dev/null @@ -1,12 +0,0 @@ -CPCI405 BOARD -M: Matthias Fuchs <matthias.fuchs@esd-electronics.com> -S: Maintained -F: board/esd/cpci405/ -F: include/configs/CPCI405.h -F: configs/CPCI405_defconfig -F: include/configs/CPCI4052.h -F: configs/CPCI4052_defconfig -F: include/configs/CPCI405AB.h -F: configs/CPCI405AB_defconfig -F: include/configs/CPCI405DT.h -F: configs/CPCI405DT_defconfig diff --git a/board/esd/cpci405/Makefile b/board/esd/cpci405/Makefile deleted file mode 100644 index 7490b780ed..0000000000 --- a/board/esd/cpci405/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -# -# (C) Copyright 2000-2006 -# Wolfgang Denk, DENX Software Engineering, wd@denx.de. -# -# SPDX-License-Identifier: GPL-2.0+ -# - -obj-y = cpci405.o flash.o ../common/misc.o -obj-y += ../common/cmd_loadpci.o diff --git a/board/esd/cpci405/cpci405.c b/board/esd/cpci405/cpci405.c deleted file mode 100644 index c510ab13ac..0000000000 --- a/board/esd/cpci405/cpci405.c +++ /dev/null @@ -1,496 +0,0 @@ -/* - * (C) Copyright 2001-2003 - * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ -#include <common.h> -#include <console.h> -#include <libfdt.h> -#include <fdt_support.h> -#include <asm/processor.h> -#include <asm/io.h> -#include <command.h> -#include <malloc.h> -#include <net.h> -#include <pci.h> - -DECLARE_GLOBAL_DATA_PTR; - -extern void __ft_board_setup(void *blob, bd_t *bd); - -#undef FPGA_DEBUG - -/* fpga configuration data - generated by bin2cc */ -const unsigned char fpgadata[] = -{ -#if defined(CONFIG_CPCI405_VER2) -# include "fpgadata_cpci4052.c" -#endif -}; - -/* - * include common fpga code (for esd boards) - */ -#include "../common/fpga.c" - -/* Prototypes */ -int cpci405_version(void); -void lxt971_no_sleep(void); - -int board_early_init_f(void) -{ -#ifndef CONFIG_CPCI405_VER2 - int index, len, i; - int status; -#endif - -#ifdef FPGA_DEBUG - /* set up serial port with default baudrate */ - (void)get_clocks(); - gd->baudrate = CONFIG_BAUDRATE; - serial_init(); - console_init_f(); -#endif - - /* - * First pull fpga-prg pin low, - * to disable fpga logic (on version 2 board) - */ - out_be32((void *)GPIO0_ODR, 0x00000000); /* no open drain pins */ - out_be32((void *)GPIO0_TCR, CONFIG_SYS_FPGA_PRG); /* setup for output */ - out_be32((void *)GPIO0_OR, CONFIG_SYS_FPGA_PRG); /* set output pins to high */ - out_be32((void *)GPIO0_OR, 0); /* pull prg low */ - - /* - * Boot onboard FPGA - */ -#ifndef CONFIG_CPCI405_VER2 - if (cpci405_version() == 1) { - status = fpga_boot((unsigned char *)fpgadata, sizeof(fpgadata)); - if (status != 0) { - /* booting FPGA failed */ -#ifndef FPGA_DEBUG - /* set up serial port with default baudrate */ - (void)get_clocks(); - gd->baudrate = CONFIG_BAUDRATE; - serial_init(); - console_init_f(); -#endif - 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 = fpgadata[index]; - printf("FPGA: %s\n", &(fpgadata[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); - } - } -#endif /* !CONFIG_CPCI405_VER2 */ - - /* - * 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) CAN1 (+FPGA on CPCI4052); active low; level sens. - * IRQ 27 (EXT IRQ 2) PCI SLOT 0; active low; level sensitive - * IRQ 28 (EXT IRQ 3) PCI SLOT 1; active low; level sensitive - * IRQ 29 (EXT IRQ 4) PCI SLOT 2; active low; level sensitive - * IRQ 30 (EXT IRQ 5) PCI SLOT 3; active low; level sensitive - * IRQ 31 (EXT IRQ 6) COMPACT FLASH; active high; level sensitive - */ - mtdcr(UIC0SR, 0xFFFFFFFF); /* clear all ints */ - mtdcr(UIC0ER, 0x00000000); /* disable all ints */ - mtdcr(UIC0CR, 0x00000000); /* set all to be non-critical*/ -#if defined(CONFIG_CPCI405_6U) - if (cpci405_version() == 3) { - mtdcr(UIC0PR, 0xFFFFFF99); /* set int polarities */ - } else { - mtdcr(UIC0PR, 0xFFFFFF81); /* set int polarities */ - } -#else - mtdcr(UIC0PR, 0xFFFFFF81); /* set int polarities */ -#endif - mtdcr(UIC0TR, 0x10000000); /* set int trigger levels */ - mtdcr(UIC0VCR, 0x00000001); /* set vect base=0, - * INT0 highest priority */ - mtdcr(UIC0SR, 0xFFFFFFFF); /* clear all ints */ - - return 0; -} - -int ctermm2(void) -{ -#if defined(CONFIG_CPCI405_VER2) - return 0; /* no, board is cpci405 */ -#else - if ((in_8((void*)0xf0000400) == 0x00) && - (in_8((void*)0xf0000401) == 0x01)) - return 0; /* no, board is cpci405 */ - else - return -1; /* yes, board is cterm-m2 */ -#endif -} - -int cpci405_host(void) -{ - if (mfdcr(CPC0_PSR) & PSR_PCI_ARBIT_EN) - return -1; /* yes, board is cpci405 host */ - else - return 0; /* no, board is cpci405 adapter */ -} - -int cpci405_version(void) -{ - unsigned long CPC0_CR0Reg; - unsigned long value; - - /* - * Setup GPIO pins (CS2/GPIO11 and CS3/GPIO12 as GPIO) - */ - CPC0_CR0Reg = mfdcr(CPC0_CR0); - mtdcr(CPC0_CR0, CPC0_CR0Reg | 0x03000000); - out_be32((void*)GPIO0_ODR, in_be32((void*)GPIO0_ODR) & ~0x00180000); - out_be32((void*)GPIO0_TCR, in_be32((void*)GPIO0_TCR) & ~0x00180000); - udelay(1000); /* wait some time before reading input */ - value = in_be32((void*)GPIO0_IR) & 0x00180000; /* get config bits */ - - /* - * Restore GPIO settings - */ - mtdcr(CPC0_CR0, CPC0_CR0Reg); - - switch (value) { - case 0x00180000: - /* CS2==1 && CS3==1 -> version 1 */ - return 1; - case 0x00080000: - /* CS2==0 && CS3==1 -> version 2 */ - return 2; - case 0x00100000: - /* CS2==1 && CS3==0 -> version 3 or 6U board */ - return 3; - case 0x00000000: - /* CS2==0 && CS3==0 -> version 4 */ - return 4; - default: - /* should not be reached! */ - return 2; - } -} - -int misc_init_r (void) -{ - unsigned long CPC0_CR0Reg; - - /* adjust flash start and offset */ - gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize; - gd->bd->bi_flashoffset = 0; - -#if defined(CONFIG_CPCI405_VER2) - { - unsigned char *dst; - ulong len = sizeof(fpgadata); - int status; - int index; - int i; - - /* - * On CPCI-405 version 2 the environment is saved in eeprom! - * FPGA can be gzip compressed (malloc) and booted this late. - */ - if (cpci405_version() >= 2) { - /* - * Setup GPIO pins (CS6+CS7 as GPIO) - */ - CPC0_CR0Reg = mfdcr(CPC0_CR0); - mtdcr(CPC0_CR0, CPC0_CR0Reg | 0x00300000); - - dst = malloc(CONFIG_SYS_FPGA_MAX_SIZE); - if (gunzip(dst, CONFIG_SYS_FPGA_MAX_SIZE, - (uchar *)fpgadata, &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); - } - - /* restore gpio/cs settings */ - mtdcr(CPC0_CR0, CPC0_CR0Reg); - - 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 */ - -#if defined(CONFIG_CPCI405_6U) -#error HIER GETH ES WEITER MIT IO ACCESSORS - if (cpci405_version() == 3) { - /* - * Enable outputs in fpga on version 3 board - */ - out_be16((void*)CONFIG_SYS_FPGA_BASE_ADDR, - in_be16((void*)CONFIG_SYS_FPGA_BASE_ADDR) | - CONFIG_SYS_FPGA_MODE_ENABLE_OUTPUT); - - /* - * Set outputs to 0 - */ - out_8((void*)CONFIG_SYS_LED_ADDR, 0x00); - - /* - * Reset external DUART - */ - out_be16((void*)CONFIG_SYS_FPGA_BASE_ADDR, - in_be16((void*)CONFIG_SYS_FPGA_BASE_ADDR) | - CONFIG_SYS_FPGA_MODE_DUART_RESET); - udelay(100); - out_be16((void*)CONFIG_SYS_FPGA_BASE_ADDR, - in_be16((void*)CONFIG_SYS_FPGA_BASE_ADDR) & - ~CONFIG_SYS_FPGA_MODE_DUART_RESET); - } -#endif - } - else { - puts("\n*** U-Boot Version does not match Board Version!\n"); - puts("*** CPCI-405 Version 1.x detected!\n"); - puts("*** Please use correct U-Boot version " - "(CPCI405 instead of CPCI4052)!\n\n"); - } - } -#else /* CONFIG_CPCI405_VER2 */ - if (cpci405_version() >= 2) { - puts("\n*** U-Boot Version does not match Board Version!\n"); - puts("*** CPCI-405 Board Version 2.x detected!\n"); - puts("*** Please use correct U-Boot version " - "(CPCI4052 instead of CPCI405)!\n\n"); - } -#endif /* CONFIG_CPCI405_VER2 */ - - /* - * Select cts (and not dsr) on uart1 - */ - CPC0_CR0Reg = mfdcr(CPC0_CR0); - mtdcr(CPC0_CR0, CPC0_CR0Reg | 0x00001000); - - return 0; -} - -/* - * Check Board Identity: - */ - -int checkboard(void) -{ -#ifndef CONFIG_CPCI405_VER2 - int index; - int len; -#endif - char str[64]; - int i = getenv_f("serial#", str, sizeof(str)); - unsigned short ver; - - puts("Board: "); - - if (i == -1) - puts("### No HW ID - assuming CPCI405"); - else - puts(str); - - ver = cpci405_version(); - printf(" (Ver %d.x, ", ver); - - if (ctermm2()) { - char str[4]; - - /* - * Read board-id and save in env-variable - */ - sprintf(str, "%d", *(unsigned char *)0xf0000400); - setenv("boardid", str); - printf("CTERM-M2 - Id=%s)", str); - } else { - if (cpci405_host()) - puts("PCI Host Version)"); - else - puts("PCI Adapter Version)"); - } - -#ifndef CONFIG_CPCI405_VER2 - puts("\nFPGA: "); - - /* display infos on fpgaimage */ - index = 15; - for (i = 0; i < 4; i++) { - len = fpgadata[index]; - printf("%s ", &(fpgadata[index + 1])); - index += len + 3; - } -#endif - - putc('\n'); - return 0; -} - -void reset_phy(void) -{ -#if defined(CONFIG_LXT971_NO_SLEEP) - - /* - * Disable sleep mode in LXT971 - */ - lxt971_no_sleep(); -#endif -} - -#if defined(CONFIG_CPCI405_VER2) && defined (CONFIG_IDE_RESET) -void ide_set_reset(int on) -{ - /* - * Assert or deassert CompactFlash Reset Pin - */ - if (on) { /* assert RESET */ - out_be16((void*)CONFIG_SYS_FPGA_BASE_ADDR, - in_be16((void*)CONFIG_SYS_FPGA_BASE_ADDR) & - ~CONFIG_SYS_FPGA_MODE_CF_RESET); - } else { /* release RESET */ - out_be16((void*)CONFIG_SYS_FPGA_BASE_ADDR, - in_be16((void*)CONFIG_SYS_FPGA_BASE_ADDR) | - CONFIG_SYS_FPGA_MODE_CF_RESET); - } -} - -#endif /* CONFIG_IDE_RESET && CONFIG_CPCI405_VER2 */ - -#if defined(CONFIG_PCI) -void cpci405_pci_fixup_irq(struct pci_controller *hose, pci_dev_t dev) -{ - unsigned char int_line = 0xff; - - /* - * Write pci interrupt line register (cpci405 specific) - */ - switch (PCI_DEV(dev) & 0x03) { - case 0: - int_line = 27 + 2; - break; - case 1: - int_line = 27 + 3; - break; - case 2: - int_line = 27 + 0; - break; - case 3: - int_line = 27 + 1; - break; - } - - pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE, int_line); -} - -int pci_pre_init(struct pci_controller *hose) -{ - hose->fixup_irq = cpci405_pci_fixup_irq; - return 1; -} -#endif /* defined(CONFIG_PCI) */ - -#ifdef CONFIG_OF_BOARD_SETUP -int ft_board_setup(void *blob, bd_t *bd) -{ - int rc; - - __ft_board_setup(blob, bd); - - /* - * Disable PCI in adapter mode. - */ - if (!cpci405_host()) { - rc = fdt_find_and_setprop(blob, "/plb/pci@ec000000", "status", - "disabled", sizeof("disabled"), 1); - if (rc) { - printf("Unable to update property status in PCI node, " - "err=%s\n", - fdt_strerror(rc)); - } - } - - return 0; -} -#endif /* CONFIG_OF_BOARD_SETUP */ diff --git a/board/esd/cpci405/flash.c b/board/esd/cpci405/flash.c deleted file mode 100644 index 091652b623..0000000000 --- a/board/esd/cpci405/flash.c +++ /dev/null @@ -1,138 +0,0 @@ -/* - * (C) Copyright 2001-2003 - * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <common.h> -#include <asm/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 calc_size(unsigned long size) -{ - switch (size) { - case 1 << 20: - return 0; - case 2 << 20: - return 1; - case 4 << 20: - return 2; - case 8 << 20: - return 3; - case 16 << 20: - return 4; - default: - return 0; - } -} - - -unsigned long flash_init (void) -{ - unsigned long size_b0, size_b1; - int i; - uint pbcr; - unsigned long base_b0, base_b1; - - /* Init: no FLASHes known */ - for (i = 0; i < CONFIG_SYS_MAX_FLASH_BANKS; ++i) { - flash_info[i].flash_id = FLASH_UNKNOWN; - } - - /* Static FLASH Bank configuration here - FIXME XXX */ - - base_b0 = FLASH_BASE0_PRELIM; - size_b0 = flash_get_size ((vu_long *) base_b0, &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); - } - - base_b1 = FLASH_BASE1_PRELIM; - size_b1 = flash_get_size ((vu_long *) base_b1, &flash_info[1]); - - /* Re-do sizing to get full correct info */ - - if (size_b1) { - if (size_b1 < (1 << 20)) { - /* minimum CS size on PPC405GP is 1MB !!! */ - size_b1 = 1 << 20; - } - base_b1 = -size_b1; - mtdcr (EBC0_CFGADDR, PB0CR); - pbcr = mfdcr (EBC0_CFGDATA); - mtdcr (EBC0_CFGADDR, PB0CR); - pbcr = (pbcr & 0x0001ffff) | base_b1 | (calc_size(size_b1) << 17); - mtdcr (EBC0_CFGDATA, pbcr); -#if 0 /* test-only */ - printf("size_b1=%x base_b1=%x PB1CR = %x\n", - size_b1, base_b1, pbcr); /* test-only */ -#endif - } - - if (size_b0) { - if (size_b0 < (1 << 20)) { - /* minimum CS size on PPC405GP is 1MB !!! */ - size_b0 = 1 << 20; - } - base_b0 = base_b1 - size_b0; - mtdcr (EBC0_CFGADDR, PB1CR); - pbcr = mfdcr (EBC0_CFGDATA); - mtdcr (EBC0_CFGADDR, PB1CR); - pbcr = (pbcr & 0x0001ffff) | base_b0 | (calc_size(size_b0) << 17); - mtdcr (EBC0_CFGDATA, pbcr); -#if 0 /* test-only */ - printf("size_b0=%x base_b0=%x PB0CR = %x\n", - size_b0, base_b0, pbcr); /* test-only */ -#endif - } - - size_b0 = flash_get_size ((vu_long *) base_b0, &flash_info[0]); - - flash_get_offsets (base_b0, &flash_info[0]); - - /* monitor protection ON by default */ - flash_protect (FLAG_PROTECT_SET, - base_b0 + size_b0 - monitor_flash_len, - base_b0 + size_b0 - 1, &flash_info[0]); - - if (size_b1) { - /* Re-do sizing to get full correct info */ - size_b1 = flash_get_size ((vu_long *) base_b1, &flash_info[1]); - - flash_get_offsets (base_b1, &flash_info[1]); - - /* monitor protection ON by default */ - flash_protect (FLAG_PROTECT_SET, - base_b1 + size_b1 - monitor_flash_len, - base_b1 + size_b1 - 1, &flash_info[1]); - /* monitor protection OFF by default (one is enough) */ - flash_protect (FLAG_PROTECT_CLEAR, - base_b0 + size_b0 - monitor_flash_len, - base_b0 + size_b0 - 1, &flash_info[0]); - } else { - flash_info[1].flash_id = FLASH_UNKNOWN; - flash_info[1].sector_count = -1; - } - - flash_info[0].size = size_b0; - flash_info[1].size = size_b1; - - return (size_b0 + size_b1); -} diff --git a/board/esd/cpci405/fpgadata_cpci4052.c b/board/esd/cpci405/fpgadata_cpci4052.c deleted file mode 100644 index bedbb1f7ec..0000000000 --- a/board/esd/cpci405/fpgadata_cpci4052.c +++ /dev/null @@ -1,1529 +0,0 @@ -0x1f, 0x8b, 0x08, 0x08, 0xe9, 0xf4, 0x75, 0x3e, -0x00, 0x03, 0x63, 0x70, 0x63, 0x69, 0x34, 0x30, -0x35, 0x5f, 0x32, 0x5f, 0x30, 0x34, 0x2e, 0x62, -0x69, 0x74, 0x00, 0xed, 0x7c, 0x0f, 0x74, 0x14, -0xd7, 0x79, 0xef, 0x37, 0x77, 0x66, 0xc5, 0x68, -0x77, 0xa5, 0x1d, 0xad, 0x56, 0xce, 0xda, 0x16, -0xf2, 0x68, 0x25, 0xc8, 0xa2, 0xae, 0xc4, 0xb2, -0xc2, 0x58, 0x96, 0xc5, 0x6a, 0xb4, 0x92, 0xe9, -0xda, 0xe0, 0xb0, 0x26, 0x6e, 0xc3, 0x6b, 0xfd, -0x92, 0xc5, 0x26, 0xad, 0xfa, 0x0e, 0x71, 0x85, -0xd3, 0xe6, 0xa9, 0x6e, 0x5f, 0xdf, 0xd5, 0x6a, -0x31, 0x02, 0x61, 0x58, 0xff, 0x69, 0xa3, 0xb8, -0x24, 0x59, 0x88, 0xda, 0x28, 0x2e, 0xc9, 0x5b, -0x04, 0x01, 0x61, 0x1c, 0x7b, 0x50, 0x65, 0x2c, -0x40, 0x06, 0x85, 0xfa, 0xbc, 0x87, 0x6d, 0x6a, -0x2f, 0x8e, 0xea, 0xa7, 0x60, 0x99, 0xca, 0x40, -0x1d, 0xf1, 0xcf, 0x7a, 0xdf, 0x9d, 0x7f, 0xbb, -0x22, 0x89, 0xdb, 0xd3, 0xd7, 0x73, 0xfa, 0xce, -0x79, 0x9e, 0xc4, 0xc7, 0xd7, 0xba, 0xba, 0x33, -0xf7, 0x7e, 0xf3, 0xdd, 0xdf, 0xf7, 0xfb, 0x7d, -0xdf, 0x1d, 0x41, 0xa1, 0x6b, 0x5a, 0xff, 0x1f, -0x00, 0xb7, 0x0e, 0x4a, 0x1e, 0xed, 0x78, 0xf4, -0x0f, 0x96, 0x06, 0xef, 0xfc, 0x4a, 0xe8, 0x2b, -0xc1, 0xa5, 0x75, 0x8f, 0x3d, 0xba, 0x1e, 0x1e, -0x01, 0x7b, 0xe8, 0xeb, 0x4b, 0xee, 0xfc, 0xa3, -0x8d, 0x4b, 0x96, 0x2e, 0x85, 0x47, 0xc1, 0x11, -0x0a, 0x06, 0xeb, 0x17, 0xe3, 0xff, 0x97, 0xdc, -0x05, 0xeb, 0xa1, 0x70, 0xc9, 0x5d, 0x8d, 0x4b, -0x96, 0x35, 0x2e, 0x0d, 0xc2, 0x57, 0x01, 0xe2, -0x3d, 0xb3, 0x78, 0xbd, 0xf0, 0xad, 0xdf, 0xfa, -0xbd, 0x20, 0x50, 0x0e, 0x00, 0xe6, 0x05, 0xb9, -0x38, 0xfb, 0x77, 0x41, 0x90, 0x93, 0x39, 0xa0, -0xcd, 0xb5, 0x41, 0x50, 0xd9, 0x7f, 0x83, 0xd1, -0x5f, 0x18, 0x04, 0x39, 0xff, 0xbf, 0xb9, 0x20, -0x28, 0x10, 0x03, 0xcf, 0xd7, 0xc0, 0x1d, 0x84, -0x9b, 0x2e, 0x0e, 0x04, 0xaa, 0xb7, 0x3e, 0xad, -0x8f, 0xdc, 0xdc, 0xc5, 0xae, 0x7f, 0x45, 0x9f, -0xfb, 0x57, 0x74, 0x09, 0xff, 0xd6, 0x3e, 0xfd, -0x5f, 0xb3, 0x6e, 0xf0, 0xe0, 0xcc, 0x38, 0x6d, -0x45, 0x60, 0x63, 0x0d, 0xa9, 0x79, 0x44, 0x1f, -0xa7, 0xda, 0x2e, 0xc1, 0x58, 0x72, 0x99, 0xbc, -0x6a, 0x0b, 0xa9, 0x22, 0x63, 0xea, 0x37, 0x82, -0xae, 0x3e, 0x3e, 0x08, 0x1d, 0xfa, 0x8c, 0xa4, -0xf7, 0x68, 0xcf, 0x80, 0xcf, 0x27, 0x8a, 0xa4, -0x1a, 0x7a, 0x40, 0xa6, 0x8e, 0xe7, 0x13, 0x69, -0xd0, 0xd7, 0xdc, 0x63, 0x9b, 0xa4, 0xbb, 0x64, -0x19, 0x44, 0x72, 0x9b, 0xd8, 0xd5, 0x93, 0x96, -0xa3, 0x0e, 0x42, 0x7c, 0x9c, 0x3e, 0x4e, 0x2d, -0x19, 0x20, 0x3f, 0x00, 0xec, 0x03, 0xe2, 0xe4, -0x7a, 0x38, 0x9f, 0xea, 0xa0, 0x24, 0x23, 0xc4, -0xf5, 0xc9, 0x94, 0xa9, 0x70, 0x1e, 0x0e, 0xa8, -0x81, 0xdd, 0xbc, 0x0c, 0xc3, 0x64, 0x19, 0xb8, -0x32, 0xbc, 0x24, 0xe8, 0xe3, 0xb2, 0x5c, 0x1a, -0xde, 0x81, 0x57, 0x54, 0x57, 0x96, 0xbf, 0x0c, -0x7f, 0x0e, 0x77, 0x50, 0xd7, 0x34, 0x3f, 0x03, -0xfa, 0x38, 0x45, 0x1a, 0x80, 0x13, 0x10, 0xca, -0x16, 0x0d, 0xf0, 0x7e, 0xbc, 0x41, 0x48, 0x71, -0xa6, 0x71, 0x9c, 0xac, 0xf5, 0x8d, 0xda, 0xfc, -0xf0, 0x1b, 0x31, 0x5f, 0x56, 0x1c, 0x20, 0x01, -0x38, 0x2f, 0xf8, 0x54, 0x31, 0xcd, 0x3f, 0x8e, -0xef, 0x4f, 0xbb, 0xa7, 0xad, 0x0d, 0x7a, 0x14, -0x19, 0x0a, 0x25, 0x02, 0xb6, 0x5d, 0xd0, 0xce, -0x89, 0x29, 0x32, 0x84, 0x76, 0x60, 0x97, 0xcc, -0x2d, 0xa3, 0x7b, 0xd2, 0x95, 0xd5, 0xe2, 0xef, -0x92, 0x5b, 0x1e, 0xfa, 0x21, 0xad, 0x4c, 0x8b, -0x6b, 0xc9, 0x5a, 0x63, 0x5c, 0x34, 0xea, 0x4a, -0x1d, 0x49, 0xef, 0x5e, 0x54, 0x74, 0x9b, 0xc3, -0x4e, 0xcf, 0xa5, 0x83, 0x71, 0x67, 0x0f, 0x6f, -0x9a, 0x58, 0x99, 0xbf, 0x47, 0xf9, 0x67, 0x29, -0x0c, 0xae, 0xf1, 0xd6, 0xeb, 0xb0, 0x44, 0x6a, -0x3e, 0xb6, 0x78, 0xb4, 0x7e, 0xbc, 0x40, 0x9f, -0xe7, 0x80, 0x6d, 0x02, 0x8e, 0xc3, 0x8b, 0xaa, -0x33, 0xc3, 0xfb, 0xe0, 0x44, 0x32, 0x24, 0x07, -0x32, 0x55, 0x35, 0x86, 0x3d, 0xa3, 0x25, 0xcf, -0x09, 0x4f, 0x42, 0xa5, 0x2a, 0x4e, 0x47, 0x96, -0xc2, 0x66, 0xa8, 0xa2, 0xe2, 0x34, 0x71, 0x1b, -0x76, 0x51, 0xe1, 0x3b, 0xf0, 0x4d, 0xba, 0x28, -0xdb, 0xde, 0x59, 0xf0, 0xbc, 0x63, 0x33, 0xad, -0x8c, 0x17, 0xb6, 0x93, 0x0e, 0xd0, 0xd7, 0x17, -0xf5, 0x4c, 0x91, 0xc3, 0xd4, 0x77, 0x56, 0xbc, -0xbb, 0xc0, 0x09, 0xdd, 0x20, 0xab, 0x85, 0x7e, -0xfb, 0x1a, 0x41, 0x7f, 0x0f, 0x93, 0x65, 0x93, -0xf0, 0xd6, 0xae, 0xc6, 0xcc, 0xb6, 0xf4, 0x3c, -0xbf, 0x70, 0x9c, 0x84, 0x68, 0xd1, 0x0b, 0xfc, -0x13, 0xc6, 0x3d, 0xa3, 0x90, 0x26, 0x3d, 0x80, -0xf3, 0xa4, 0x8e, 0x2c, 0xcc, 0x60, 0xa3, 0x58, -0xe5, 0x9f, 0x31, 0xde, 0x9f, 0x28, 0x4d, 0x90, -0x63, 0x74, 0x50, 0x81, 0x14, 0x59, 0x0f, 0x3f, -0x87, 0x70, 0xcb, 0xbc, 0xa7, 0x79, 0x62, 0xdc, -0x93, 0x0a, 0xeb, 0x61, 0x0b, 0xec, 0x8e, 0x89, -0xcf, 0xe1, 0x7b, 0x3f, 0x24, 0xd4, 0x29, 0x8e, -0x9d, 0x44, 0x06, 0x49, 0xeb, 0xf3, 0xda, 0x96, -0x92, 0xa7, 0xe4, 0x2a, 0xc5, 0x1e, 0xb3, 0xef, -0x17, 0x7f, 0x02, 0x8b, 0x15, 0x47, 0xac, 0xa0, -0xc0, 0xb0, 0x99, 0x28, 0x78, 0x60, 0x13, 0x54, -0xc6, 0xed, 0x6b, 0x89, 0x07, 0x7e, 0x0c, 0xb5, -0xca, 0xed, 0x6b, 0x09, 0xe1, 0x74, 0x9b, 0x0d, -0x15, 0x1d, 0x51, 0xd4, 0x35, 0x41, 0x4f, 0xdd, -0x26, 0x7e, 0x57, 0x5b, 0x76, 0x4d, 0xd8, 0xe3, -0x7a, 0xd5, 0x51, 0xc7, 0xeb, 0x76, 0xe9, 0x9b, -0x3f, 0x51, 0x70, 0x05, 0xc2, 0x4a, 0x51, 0x6a, -0xe5, 0x7a, 0x60, 0x8d, 0x95, 0x29, 0xfe, 0xfd, -0x82, 0x0e, 0xe3, 0x79, 0x97, 0xe1, 0x86, 0x50, -0xaf, 0xdc, 0x31, 0xce, 0x57, 0xc3, 0x35, 0x21, -0xac, 0xb8, 0xc6, 0xf9, 0x85, 0x86, 0x3d, 0x1b, -0xa4, 0x6c, 0x72, 0x08, 0x88, 0x28, 0x26, 0x88, -0x4c, 0x87, 0xe4, 0x3a, 0xd1, 0xb1, 0x9b, 0x6c, -0x37, 0xd6, 0x20, 0xda, 0x46, 0xe4, 0xbd, 0x7e, -0x39, 0x62, 0x97, 0x12, 0x82, 0xbc, 0x57, 0x0c, -0x3c, 0xe2, 0x90, 0x12, 0xc4, 0xf0, 0x4f, 0x6f, -0x59, 0xbf, 0x77, 0xaf, 0x22, 0x2b, 0xd1, 0x4c, -0xc1, 0x42, 0xe9, 0x10, 0x14, 0x2b, 0x0e, 0x89, -0x3c, 0x69, 0xd8, 0x2c, 0x2d, 0xf5, 0xe3, 0x14, -0x7c, 0x8a, 0x2b, 0xe5, 0xa8, 0x16, 0xaf, 0x10, -0x7c, 0xde, 0x73, 0xbc, 0xdf, 0xf0, 0x33, 0x3f, -0xfc, 0x8d, 0x72, 0x05, 0x5e, 0x56, 0xe6, 0xa5, -0xf8, 0x09, 0x6d, 0x9e, 0xae, 0x14, 0x7f, 0xdc, -0x78, 0x47, 0x7e, 0x29, 0x1d, 0x1f, 0x85, 0x10, -0xda, 0x9a, 0x4f, 0xa3, 0xad, 0xb1, 0x91, 0x74, -0xd8, 0xcd, 0x71, 0xc2, 0xdd, 0xb0, 0x1d, 0xaa, -0xba, 0xc4, 0x2c, 0xfa, 0xee, 0x8b, 0x9c, 0x8f, -0xae, 0xcc, 0x46, 0xec, 0x86, 0x2f, 0xf9, 0x6d, -0x5f, 0xe0, 0xba, 0x21, 0xad, 0x8a, 0x19, 0xb2, -0x0d, 0xf6, 0x81, 0x5f, 0xc5, 0xb9, 0xd8, 0x2d, -0xff, 0x0c, 0x73, 0xe8, 0x2f, 0x8a, 0x18, 0x73, -0x97, 0xf7, 0x1c, 0x4c, 0x2f, 0x1a, 0xbd, 0x3d, -0x46, 0x44, 0xc3, 0xd6, 0x7e, 0xb1, 0x02, 0x4e, -0xd1, 0xfa, 0x74, 0xf1, 0x24, 0xff, 0x5d, 0x3a, -0x9b, 0xbe, 0x7b, 0xe6, 0x2b, 0x93, 0xa5, 0x76, -0x03, 0x57, 0xc4, 0xf9, 0xdb, 0x4a, 0xaf, 0xe2, -0xeb, 0x7e, 0x99, 0xf2, 0x53, 0x70, 0x4f, 0x6c, -0xd9, 0xb0, 0x2b, 0xcd, 0x0f, 0x1b, 0xfe, 0xa9, -0xd8, 0x3e, 0x81, 0x13, 0xa9, 0xaf, 0x4f, 0x3a, -0x0f, 0xb9, 0x4f, 0xc1, 0xa9, 0x9f, 0x86, 0x27, -0x9c, 0x7d, 0xfc, 0xb8, 0x61, 0xcf, 0x81, 0x92, -0xff, 0x41, 0x13, 0xe9, 0xaa, 0xf5, 0xb8, 0x0d, -0x2a, 0x68, 0x37, 0xad, 0xcd, 0x62, 0xe3, 0xbc, -0xb9, 0x6f, 0x61, 0xe7, 0xf0, 0x0e, 0xa9, 0x92, -0x16, 0x3e, 0xe2, 0x5b, 0xde, 0xb3, 0x19, 0x16, -0x8f, 0xae, 0x5d, 0x4f, 0x46, 0xa8, 0xbe, 0xbe, -0xb8, 0x67, 0xcc, 0x9d, 0x40, 0x3b, 0x14, 0x52, -0xe2, 0x14, 0xba, 0x21, 0xa0, 0x8a, 0x7e, 0x72, -0x26, 0xa9, 0xbf, 0x87, 0x81, 0xb2, 0x34, 0x1c, -0x83, 0x41, 0xf5, 0x81, 0x0c, 0xff, 0x67, 0xde, -0x53, 0x64, 0x39, 0xdb, 0x18, 0x17, 0x92, 0xfa, -0x3d, 0x29, 0x9c, 0x83, 0x2b, 0x4a, 0x78, 0xbc, -0x78, 0xbf, 0x63, 0x0a, 0xde, 0x86, 0x70, 0xd6, -0xb5, 0xb7, 0x34, 0x6b, 0xf8, 0x27, 0x17, 0xbb, -0x24, 0x9d, 0xa2, 0xfb, 0xb2, 0xab, 0x2e, 0xb6, -0x36, 0x09, 0xa7, 0xa0, 0x59, 0x15, 0x66, 0xf8, -0x89, 0x36, 0xbd, 0xaf, 0x4b, 0x58, 0x07, 0xbd, -0x3d, 0xbe, 0xa3, 0xfe, 0x21, 0xe2, 0x84, 0x5e, -0xa8, 0x3b, 0x12, 0xdd, 0x9f, 0xc8, 0x2a, 0xba, -0x7f, 0x52, 0xdb, 0x2a, 0xe8, 0x5a, 0x20, 0xab, -0x7d, 0x19, 0x7b, 0x80, 0xf5, 0xa9, 0xf6, 0x41, -0x92, 0x35, 0xec, 0x29, 0x0a, 0x45, 0x72, 0xd7, -0x7a, 0x79, 0x54, 0x0c, 0x92, 0x5a, 0xb9, 0x5b, -0xae, 0x3b, 0xb3, 0x35, 0x44, 0x86, 0x8d, 0xd5, -0x41, 0xe1, 0xd7, 0xe0, 0x44, 0x74, 0xf0, 0x2d, -0xe7, 0x32, 0x7e, 0xb9, 0x70, 0x6a, 0x7d, 0xf3, -0x78, 0xf1, 0x81, 0xee, 0x2c, 0xd1, 0xef, 0x99, -0x9e, 0x3f, 0x95, 0xf8, 0x85, 0x5c, 0x71, 0xdc, -0xf5, 0xf1, 0xf7, 0xae, 0xd3, 0x6b, 0x4d, 0xcb, -0xcf, 0x14, 0x5d, 0xec, 0x9e, 0x34, 0xfc, 0x53, -0xb5, 0x4d, 0x29, 0xef, 0x76, 0x85, 0xcf, 0xb9, -0x2e, 0x95, 0x7e, 0xa2, 0x5c, 0xa3, 0xf5, 0xd9, -0x3b, 0x66, 0xf8, 0x69, 0x0b, 0x3f, 0x6f, 0x24, -0x0f, 0x27, 0xea, 0xb2, 0x2b, 0xbf, 0x4e, 0xc6, -0xe8, 0xe1, 0x17, 0x7c, 0x59, 0xc7, 0x10, 0xc9, -0x0a, 0x26, 0x7e, 0x8e, 0x29, 0xfb, 0xd0, 0x54, -0x8e, 0x20, 0xf6, 0xed, 0x13, 0xd2, 0xac, 0xf1, -0x9e, 0x89, 0x9f, 0x65, 0x7b, 0xe0, 0x30, 0x4e, -0x7d, 0x65, 0x86, 0x4c, 0xc1, 0x3e, 0xc4, 0x4f, -0x6c, 0x4c, 0x1b, 0xef, 0x41, 0x29, 0x9b, 0x92, -0xd0, 0x54, 0xea, 0xea, 0x0c, 0x37, 0x05, 0xd7, -0x20, 0x84, 0x7d, 0xad, 0xe3, 0x16, 0x7e, 0xbe, -0x04, 0xaf, 0xa0, 0xa9, 0x5c, 0xd3, 0x55, 0xd7, -0x61, 0x56, 0x6b, 0xe4, 0xe1, 0xe7, 0x1e, 0xee, -0x03, 0x1c, 0xe7, 0xcc, 0x94, 0x4e, 0x91, 0x13, -0xd8, 0xa8, 0xcb, 0xf0, 0xe3, 0x46, 0x7c, 0x18, -0xb5, 0x35, 0x31, 0x53, 0x4d, 0xd8, 0xa7, 0x49, -0x40, 0xc4, 0xc6, 0x2f, 0x8a, 0x32, 0xe4, 0xa2, -0x85, 0x9f, 0xab, 0xe0, 0x7b, 0x10, 0xc8, 0x16, -0x06, 0xc9, 0x2a, 0x78, 0x56, 0x0e, 0xa8, 0xde, -0x20, 0x99, 0xb1, 0xfc, 0xb3, 0xa2, 0x67, 0x73, -0xa2, 0x36, 0xeb, 0xf8, 0x13, 0x52, 0x01, 0xdf, -0x4c, 0xd5, 0x66, 0xb9, 0x4e, 0x32, 0x6a, 0xe2, -0xa7, 0x58, 0x07, 0xdf, 0xa3, 0x4d, 0xef, 0x15, -0x35, 0x96, 0x7e, 0x61, 0xfc, 0xef, 0xd3, 0x4d, -0x53, 0xce, 0x7b, 0xf8, 0xd3, 0x86, 0x7f, 0x2a, -0xf3, 0x7f, 0x08, 0xd7, 0xa4, 0x26, 0xf5, 0x64, -0x86, 0xdf, 0x00, 0x1f, 0x40, 0x93, 0x8a, 0x31, -0x20, 0x87, 0x9f, 0x17, 0x12, 0x27, 0x84, 0xb0, -0xfa, 0xc0, 0x8b, 0x2b, 0x03, 0xda, 0xfa, 0xb0, -0xef, 0xbc, 0x85, 0x9f, 0x4f, 0x51, 0x74, 0x3d, -0x55, 0xbc, 0x9c, 0x28, 0x87, 0x83, 0xb0, 0x48, -0x75, 0x74, 0x90, 0xd3, 0x39, 0xfc, 0xa4, 0x9b, -0xe9, 0xe2, 0x6c, 0xe1, 0x13, 0x91, 0x0a, 0x38, -0x48, 0x2b, 0xb3, 0x8e, 0x4e, 0x32, 0x6d, 0xbc, -0xda, 0xa8, 0x67, 0x0c, 0x61, 0x33, 0x70, 0x24, -0x1a, 0x8c, 0x38, 0xd1, 0xb0, 0x7e, 0x66, 0xeb, -0xd3, 0x16, 0x7e, 0x0e, 0x20, 0x5e, 0x87, 0x69, -0x51, 0x1a, 0xf7, 0xe6, 0x55, 0xf0, 0x51, 0xdc, -0x2b, 0x57, 0x2d, 0xfc, 0xd4, 0x61, 0x13, 0xf7, -0xb4, 0xd6, 0x90, 0x5c, 0xb4, 0xf4, 0x74, 0x0e, -0x3f, 0xe1, 0x0a, 0x1f, 0x56, 0x8a, 0x75, 0x2c, -0x08, 0xad, 0x47, 0x2c, 0x18, 0xce, 0xc3, 0xcf, -0x43, 0x5c, 0xa0, 0x03, 0x43, 0xcd, 0x04, 0x1c, -0x82, 0xdd, 0x8a, 0x23, 0x85, 0x3e, 0x68, 0xe2, -0x27, 0x42, 0x2a, 0xd4, 0xad, 0xb5, 0xeb, 0x7d, -0x3e, 0xd6, 0x77, 0xd4, 0xc2, 0x4f, 0x81, 0x2e, -0x11, 0x02, 0x8a, 0xe8, 0x26, 0x23, 0xb0, 0x17, -0x71, 0x1e, 0xb1, 0x60, 0xd8, 0xc2, 0xcf, 0x75, -0x4a, 0x27, 0xce, 0x65, 0xfb, 0x26, 0xfe, 0x9c, -0x32, 0x1d, 0x63, 0x40, 0xf3, 0xe8, 0x05, 0x5e, -0x7f, 0x0f, 0x88, 0x9f, 0xca, 0x15, 0x06, 0x8d, -0x4f, 0xb3, 0xb9, 0xcc, 0x0b, 0x33, 0x80, 0xca, -0xe1, 0xe7, 0x84, 0x7c, 0x0c, 0x9a, 0x95, 0xd5, -0xa9, 0xee, 0x09, 0xb8, 0xa1, 0xd4, 0x2b, 0xce, -0x14, 0x7f, 0xd4, 0xc2, 0xcf, 0x73, 0x89, 0x1e, -0x52, 0x07, 0x7c, 0x32, 0x92, 0x45, 0xfc, 0xac, -0x01, 0x91, 0x92, 0x93, 0x79, 0xf8, 0xd9, 0x05, -0x7e, 0xc5, 0xe1, 0x4e, 0x20, 0x90, 0x82, 0xac, -0x88, 0x6c, 0x2e, 0xc6, 0x3d, 0x4b, 0xfa, 0xc5, -0x2d, 0x50, 0xc7, 0xa6, 0x3e, 0x21, 0xee, 0xc5, -0x86, 0x1f, 0xd7, 0x60, 0xe2, 0x67, 0xd9, 0x04, -0xee, 0xf7, 0x46, 0x06, 0xe1, 0x13, 0xc2, 0x15, -0x16, 0xa7, 0x53, 0xfc, 0xa4, 0xe1, 0x9f, 0x7e, -0x2e, 0x09, 0x1a, 0xa4, 0xea, 0x36, 0x6b, 0xd4, -0xf1, 0x53, 0x5f, 0x3b, 0xe2, 0xa7, 0x30, 0xc3, -0x85, 0x61, 0x35, 0x45, 0x5e, 0x30, 0x4a, 0x31, -0x56, 0x51, 0xfe, 0xb8, 0x89, 0x9f, 0x18, 0xdf, -0x5f, 0x84, 0xc5, 0x83, 0x8e, 0x34, 0xf1, 0x0b, -0xef, 0x70, 0xb5, 0x43, 0xd1, 0x34, 0xb1, 0xc6, -0xa1, 0x7f, 0xe2, 0x3e, 0xea, 0xc1, 0x57, 0x8a, -0xb1, 0x51, 0x0a, 0x44, 0xec, 0xc1, 0xc8, 0x71, -0xc3, 0x3f, 0xd3, 0x5c, 0xb9, 0x78, 0x17, 0xa9, -0xa5, 0x8e, 0x06, 0x7c, 0xe8, 0x37, 0xa1, 0x96, -0xfa, 0x3b, 0xc8, 0xa4, 0x31, 0x6e, 0x40, 0xac, -0x48, 0xff, 0x82, 0x2e, 0xcf, 0xba, 0x3a, 0xf9, -0x70, 0xfa, 0x35, 0xba, 0x5c, 0x2e, 0xee, 0xe4, -0xcf, 0x5b, 0xf8, 0xf9, 0x43, 0x7a, 0x8d, 0x84, -0x8f, 0xb8, 0x0e, 0xf0, 0x1f, 0x0a, 0xd7, 0xa0, -0x89, 0x71, 0x94, 0x61, 0xa2, 0xaf, 0x0f, 0x6c, -0x9f, 0xc4, 0x4f, 0x25, 0xc3, 0xe9, 0xd5, 0x3f, -0xe9, 0xfe, 0x91, 0x72, 0x32, 0x15, 0x92, 0x8b, -0x86, 0x78, 0xd5, 0xc2, 0xcf, 0xef, 0x24, 0xba, -0x9f, 0xae, 0x4d, 0xe3, 0xf3, 0xea, 0xc8, 0x8e, -0x4d, 0x7e, 0x59, 0xbc, 0x27, 0x1f, 0x3f, 0x61, -0xb3, 0x1b, 0xe7, 0x12, 0x24, 0x3b, 0xe9, 0x93, -0x72, 0x25, 0x6c, 0xe9, 0x70, 0xab, 0x92, 0xbe, -0x3e, 0x59, 0xf7, 0x4f, 0xaa, 0xaf, 0x01, 0xc3, -0x0c, 0x02, 0xd4, 0xa8, 0x60, 0xe2, 0xe7, 0x4b, -0xc8, 0x7b, 0xc2, 0x48, 0x85, 0xaa, 0x5e, 0x42, -0xc3, 0xfa, 0x00, 0xf7, 0xa6, 0x79, 0x4f, 0x0a, -0x53, 0xe2, 0x35, 0x2e, 0x9c, 0x5a, 0x9d, 0xe1, -0xa7, 0xd0, 0xd6, 0x68, 0xbc, 0x4c, 0x0e, 0x3f, -0x25, 0x84, 0x00, 0xae, 0x99, 0xee, 0x98, 0xe6, -0xaf, 0xc3, 0x0d, 0xb8, 0x0b, 0xec, 0xd3, 0xbc, -0x6a, 0xe1, 0xe7, 0x06, 0x86, 0x2f, 0xff, 0xd3, -0x81, 0xf8, 0x22, 0x1c, 0xc2, 0x01, 0x18, 0x7c, -0x72, 0xf8, 0x19, 0x80, 0xc3, 0x5c, 0x5d, 0x17, -0xeb, 0x83, 0x41, 0xea, 0xbb, 0xd5, 0x8e, 0x7d, -0x96, 0x7f, 0x3a, 0x95, 0xfa, 0x78, 0xa0, 0xd7, -0xb1, 0x74, 0x78, 0x2c, 0xbe, 0x4f, 0x96, 0x9d, -0xf6, 0x65, 0x96, 0x7f, 0x42, 0xd1, 0xc3, 0xf2, -0x35, 0x08, 0xf7, 0xb8, 0x2e, 0xf2, 0x37, 0xe8, -0x55, 0xf4, 0xcf, 0xe2, 0x0c, 0xaf, 0x1a, 0xfe, -0x99, 0xbe, 0x15, 0xa1, 0x4a, 0x6a, 0xb6, 0xf3, -0x17, 0x79, 0xc4, 0xcf, 0xf5, 0x77, 0x4b, 0x45, -0x1f, 0xf1, 0x39, 0xfc, 0xfc, 0x04, 0x66, 0x4b, -0xee, 0x91, 0x1f, 0xb8, 0x54, 0x58, 0xa7, 0x8e, -0xd1, 0x3f, 0x9f, 0x71, 0x36, 0xe4, 0xe1, 0xe7, -0x8f, 0xa4, 0x83, 0x1d, 0xbe, 0xb8, 0xe3, 0x12, -0x59, 0x10, 0xeb, 0x95, 0xeb, 0x46, 0xec, 0x43, -0x88, 0x83, 0x06, 0x7e, 0x0a, 0x63, 0x80, 0x53, -0xc8, 0xa2, 0xcd, 0x44, 0xd2, 0x5d, 0x18, 0xf8, -0x39, 0xda, 0xec, 0x62, 0x3e, 0x7e, 0x0a, 0x08, -0xb7, 0x19, 0xe2, 0x23, 0xbd, 0xb4, 0xf8, 0x55, -0x7b, 0x0e, 0x3f, 0xc1, 0xa6, 0xc1, 0x66, 0x1c, -0x5f, 0x69, 0x00, 0x56, 0x8e, 0xd6, 0xa5, 0x31, -0x1e, 0xa9, 0x26, 0x7e, 0x96, 0xbc, 0x24, 0xce, -0xc2, 0x2b, 0x0a, 0xc2, 0xe6, 0x04, 0xcc, 0xf2, -0xcb, 0xe7, 0xf2, 0xcf, 0x3d, 0x26, 0x1c, 0x8d, -0x49, 0xf8, 0x42, 0xba, 0x9c, 0x99, 0x3c, 0xfe, -0x19, 0x10, 0x5f, 0x01, 0x7c, 0xde, 0x34, 0xee, -0x69, 0xc4, 0xcf, 0x2e, 0x7c, 0x47, 0x21, 0xc3, -0x66, 0xaa, 0xc0, 0x20, 0x47, 0xce, 0xde, 0x9e, -0x29, 0xd0, 0x80, 0xb4, 0x45, 0x0c, 0xba, 0x1b, -0x4c, 0xfc, 0x94, 0x2a, 0xfa, 0x10, 0xaa, 0x26, -0x11, 0xaa, 0xde, 0x69, 0xfb, 0x3e, 0x0d, 0xb4, -0x17, 0x3e, 0x41, 0x9a, 0x24, 0x7d, 0x5c, 0x54, -0x2c, 0xa6, 0xfb, 0x20, 0x78, 0xde, 0x15, 0xe4, -0x8f, 0xd3, 0x9f, 0xa5, 0x9b, 0xda, 0x9d, 0x8d, -0xbc, 0xdb, 0xc4, 0x4f, 0xcf, 0x4b, 0x38, 0x97, -0x57, 0x46, 0x5c, 0x97, 0xbb, 0x26, 0x0b, 0xde, -0x96, 0x9a, 0x95, 0x3c, 0xfc, 0x14, 0xd9, 0xfa, -0x64, 0xf4, 0xdd, 0x41, 0x86, 0xad, 0x5c, 0xe8, -0x08, 0xce, 0xf3, 0xbc, 0xb1, 0xbe, 0x28, 0xb7, -0x13, 0x0e, 0x46, 0x6b, 0x55, 0x47, 0x08, 0xfd, -0x6c, 0x07, 0x04, 0xd5, 0xad, 0x1d, 0xe4, 0xa2, -0x61, 0x17, 0x19, 0xf9, 0xe7, 0xc1, 0x34, 0x62, -0xf9, 0x13, 0xe4, 0xcb, 0xf0, 0x7d, 0xfa, 0xd5, -0xac, 0xd8, 0x89, 0xef, 0x5d, 0x5f, 0x5f, 0x3b, -0xfa, 0xa7, 0x11, 0xab, 0x9c, 0x52, 0x37, 0x95, -0x55, 0x7b, 0x1e, 0x7e, 0x0a, 0x03, 0x08, 0x9b, -0xcd, 0x0c, 0x36, 0x3b, 0xe1, 0x42, 0xf4, 0xae, -0x64, 0x00, 0xf1, 0xd3, 0xb0, 0x59, 0x54, 0x62, -0x54, 0x28, 0x2c, 0x23, 0x7e, 0xbe, 0x07, 0x33, -0xa2, 0x06, 0xa4, 0x39, 0xfc, 0xec, 0x87, 0x37, -0xa1, 0xb1, 0xbd, 0x48, 0xe2, 0x93, 0x70, 0x4c, -0x08, 0x22, 0x4e, 0x70, 0xc3, 0x60, 0xe2, 0x67, -0x35, 0xec, 0xe5, 0xe4, 0x38, 0xe2, 0x67, 0x35, -0x74, 0x91, 0xdd, 0x8a, 0x78, 0x33, 0x7e, 0xd6, -0x28, 0x85, 0x29, 0xd2, 0x0f, 0x5b, 0x38, 0x5f, -0x8b, 0x38, 0x07, 0x3f, 0x61, 0x6f, 0xb5, 0x8f, -0xe1, 0xa7, 0x40, 0xb7, 0x40, 0x3c, 0x2a, 0xe6, -0xe1, 0xe7, 0xfc, 0x38, 0xcc, 0xc4, 0x1a, 0xa1, -0x08, 0xf9, 0xa7, 0x32, 0x1a, 0x0b, 0x79, 0x02, -0x94, 0x37, 0xf1, 0x73, 0x68, 0x3e, 0xc2, 0x91, -0xd4, 0x7c, 0x04, 0xf1, 0xf3, 0xf2, 0x1a, 0x8c, -0x9b, 0x6d, 0xae, 0x1c, 0x7e, 0x36, 0x20, 0x9f, -0x7f, 0xb3, 0xa5, 0x19, 0x29, 0x62, 0x62, 0x22, -0x7d, 0x9f, 0xb4, 0x6c, 0xd4, 0x39, 0xee, 0x7b, -0xdf, 0xf0, 0x4f, 0x2f, 0x64, 0xa5, 0x21, 0xa5, -0x0e, 0x1c, 0x4f, 0x26, 0x14, 0x4a, 0x41, 0xb6, -0xfb, 0x73, 0xf8, 0x19, 0xb5, 0x25, 0x61, 0x6f, -0x3c, 0xa0, 0xdc, 0x8a, 0x58, 0x9e, 0x46, 0x32, -0xbd, 0x4a, 0x94, 0xe0, 0xb4, 0x89, 0x9f, 0x9e, -0x7e, 0x16, 0x03, 0xe2, 0x2b, 0x53, 0xc2, 0x7a, -0xb2, 0x05, 0x63, 0x80, 0x37, 0x0f, 0x3f, 0x85, -0x7e, 0xef, 0x9b, 0x10, 0x8e, 0x17, 0xa5, 0xd6, -0xfd, 0xe3, 0xd2, 0x23, 0xc9, 0x6f, 0xb4, 0xac, -0x4a, 0xb5, 0x9a, 0xf8, 0xd9, 0x2e, 0xb1, 0x71, -0x1a, 0x7e, 0xb6, 0x49, 0x48, 0x9c, 0x58, 0xe3, -0x2d, 0xc3, 0xd6, 0x7e, 0xcd, 0xd6, 0x3e, 0xa9, -0x88, 0xb6, 0x56, 0xc2, 0x68, 0x24, 0x04, 0x47, -0x69, 0x95, 0x89, 0x9f, 0xa2, 0xe0, 0x87, 0x97, -0xc1, 0x37, 0x20, 0x66, 0x89, 0x1f, 0xb6, 0x62, -0x8c, 0x2b, 0xce, 0x5a, 0xf8, 0x29, 0x22, 0x7e, -0x3e, 0x8b, 0xfe, 0x89, 0xf1, 0x7d, 0x1b, 0x62, -0x4f, 0x8d, 0x5a, 0x28, 0x93, 0xe3, 0x56, 0x7c, -0x2f, 0x17, 0x0e, 0xa6, 0xab, 0xb2, 0x85, 0x9d, -0xe4, 0x2c, 0x6c, 0x96, 0x17, 0x8d, 0x88, 0x71, -0x0b, 0x3f, 0xfd, 0xde, 0x0a, 0xd8, 0x37, 0x50, -0x9f, 0x7d, 0xe0, 0x4f, 0xab, 0xbe, 0x4b, 0x5f, -0x7b, 0xe1, 0xee, 0xac, 0xab, 0x3d, 0x0f, 0x3f, -0x71, 0xff, 0x75, 0xbc, 0xac, 0x16, 0x0f, 0xf2, -0xb5, 0xe8, 0xa8, 0xcb, 0xc6, 0x17, 0xe7, 0xf8, -0x67, 0x5c, 0xf8, 0x11, 0x30, 0x9a, 0xb4, 0xe3, -0x4a, 0xf7, 0xac, 0xf2, 0x41, 0x5f, 0xf3, 0xe5, -0x40, 0x7b, 0x95, 0x64, 0xe2, 0xa7, 0xb4, 0x7d, -0xe4, 0x20, 0x95, 0x27, 0x0b, 0x67, 0x48, 0xb8, -0xba, 0x9b, 0x2e, 0x9e, 0xf4, 0xb6, 0x93, 0x9a, -0x3c, 0xfc, 0xfc, 0xa6, 0x5c, 0x39, 0x8a, 0x7b, -0x0c, 0x9d, 0x18, 0x6a, 0x55, 0x31, 0x5e, 0x53, -0x60, 0xf8, 0xa7, 0xe2, 0xd9, 0x26, 0xec, 0x23, -0xb2, 0xda, 0x1b, 0x24, 0xc5, 0x52, 0xa9, 0x8a, -0xfc, 0x53, 0x26, 0x5e, 0x13, 0x3f, 0x6d, 0x7b, -0xe0, 0x5d, 0x08, 0xbd, 0x31, 0x6f, 0x9a, 0x7f, -0x19, 0x66, 0xa3, 0xcd, 0xaa, 0x33, 0x7d, 0x7b, -0x9d, 0xc5, 0xf5, 0x19, 0x16, 0x84, 0xd5, 0xa2, -0x0c, 0xbf, 0x07, 0x18, 0x39, 0x72, 0xa5, 0xe7, -0xe0, 0xe7, 0x35, 0x68, 0xce, 0xba, 0xa6, 0xed, -0xe5, 0xe4, 0x54, 0xe1, 0x72, 0x15, 0x8d, 0x67, -0x72, 0x37, 0x03, 0x3f, 0x55, 0xc4, 0x17, 0xe4, -0x98, 0xa4, 0x4e, 0x2d, 0x4a, 0xfb, 0x4c, 0xff, -0xa4, 0x36, 0xd6, 0x57, 0x33, 0x82, 0x5b, 0x64, -0x0f, 0x72, 0xa9, 0xc7, 0x54, 0x7b, 0x3a, 0x87, -0x9f, 0x92, 0x53, 0xde, 0x27, 0x06, 0x46, 0x1d, -0xa1, 0x82, 0x6d, 0xe9, 0xee, 0x75, 0x81, 0x9f, -0xf2, 0x0b, 0x13, 0x16, 0x7e, 0x8a, 0x1b, 0x90, -0xbb, 0x35, 0xaa, 0xc5, 0x17, 0xb9, 0x9f, 0xa8, -0xa7, 0xe4, 0xe6, 0xd1, 0xe2, 0x7e, 0x3e, 0x6b, -0xe2, 0x67, 0xd9, 0x75, 0x79, 0x16, 0xc2, 0x6b, -0x90, 0x1e, 0x6f, 0x10, 0x67, 0xe3, 0xe1, 0x31, -0x24, 0x2b, 0x93, 0x11, 0x0b, 0x3f, 0x3d, 0xd3, -0xc9, 0xc3, 0x72, 0x51, 0x94, 0x34, 0xc0, 0x25, -0x7a, 0x57, 0xb6, 0x18, 0xf9, 0xa7, 0xe1, 0x2f, -0x14, 0x2e, 0x88, 0x43, 0xd4, 0x27, 0xa3, 0x5b, -0xfa, 0x00, 0x05, 0x24, 0xe3, 0x9f, 0xd3, 0x96, -0x7e, 0x1f, 0x83, 0x0c, 0x0b, 0x35, 0x80, 0x12, -0x71, 0x1f, 0xf4, 0xb3, 0xcd, 0x9d, 0x8f, 0x9f, -0x38, 0xce, 0x27, 0xf6, 0x3c, 0x33, 0x00, 0xf7, -0x80, 0x8f, 0x2d, 0x34, 0x1f, 0x3f, 0xaf, 0xa4, -0x1b, 0x82, 0x45, 0x4e, 0xfe, 0x07, 0x70, 0x09, -0x96, 0xa9, 0xc5, 0x19, 0x62, 0xea, 0x07, 0xc4, -0x4f, 0xe7, 0x75, 0x68, 0xe6, 0x76, 0x8c, 0xf3, -0x7f, 0x60, 0xf2, 0xcf, 0xeb, 0x79, 0xf8, 0x89, -0xfb, 0x1d, 0x9c, 0xc9, 0xee, 0x01, 0x8d, 0x7f, -0xba, 0x32, 0xe4, 0x0d, 0xe3, 0xfd, 0x21, 0x7e, -0x52, 0x4a, 0x6b, 0x0a, 0xc4, 0xe7, 0xc9, 0x00, -0xe2, 0xa7, 0xf6, 0xbc, 0x8b, 0x39, 0xfc, 0x14, -0x52, 0x6e, 0x3f, 0xe2, 0xa1, 0xd2, 0x83, 0xf8, -0xa9, 0x71, 0x37, 0x93, 0xd7, 0xc9, 0x4a, 0x05, -0x6c, 0xa3, 0x8b, 0x64, 0xf1, 0x18, 0x79, 0x3e, -0xf9, 0x7d, 0x06, 0xa4, 0x4f, 0xc0, 0x75, 0xa3, -0x2f, 0xea, 0x75, 0xc2, 0x78, 0xba, 0x41, 0x0e, -0xd8, 0xf9, 0xde, 0xe4, 0xcf, 0x92, 0x0d, 0x93, -0x2e, 0xe4, 0x9f, 0x05, 0x7a, 0x9f, 0x52, 0xbe, -0x13, 0xae, 0x56, 0x2e, 0x87, 0x1d, 0x09, 0x7e, -0x52, 0x79, 0x1b, 0x8d, 0xee, 0x42, 0x0e, 0x5d, -0x60, 0xec, 0x95, 0xb2, 0x29, 0x61, 0x1a, 0x96, -0xb5, 0x6c, 0xa5, 0x3c, 0x03, 0xfc, 0x85, 0x0c, -0xf0, 0x87, 0x4d, 0xfe, 0x79, 0x5f, 0x39, 0xec, -0x27, 0x95, 0x8a, 0x4d, 0x25, 0x5e, 0xf4, 0xc1, -0x4a, 0xe4, 0x9f, 0x70, 0xd1, 0x58, 0x9f, 0x0c, -0x15, 0xb0, 0x9f, 0x2e, 0x96, 0xed, 0x51, 0x82, -0x40, 0x4a, 0x17, 0x30, 0xfe, 0x79, 0xc6, 0x98, -0x4b, 0x3b, 0xc6, 0xaa, 0xcc, 0x1a, 0x7f, 0x62, -0x4b, 0x6d, 0x82, 0xd9, 0xba, 0x9a, 0xad, 0xe1, -0xad, 0x3c, 0xfe, 0xf9, 0xb1, 0xba, 0xbc, 0xa7, -0x22, 0xcb, 0x7f, 0x4b, 0xbe, 0x0a, 0xcb, 0xa8, -0x83, 0xe1, 0xa7, 0x3e, 0x17, 0xd4, 0xef, 0x30, -0x24, 0x2e, 0x2c, 0xb9, 0x23, 0x59, 0x1a, 0x4f, -0xcd, 0xa0, 0xf1, 0x5c, 0xb4, 0xea, 0xb4, 0xb9, -0xa7, 0x19, 0xff, 0x4c, 0x84, 0x62, 0xfc, 0xf3, -0x7c, 0xb5, 0x74, 0x2c, 0xb2, 0x90, 0x71, 0xbe, -0x61, 0xa3, 0x8f, 0x0a, 0x0b, 0x94, 0x43, 0xf4, -0x85, 0xb5, 0x3d, 0x5e, 0xc4, 0xcf, 0x5d, 0xd4, -0xa7, 0xf3, 0x4f, 0xfd, 0xd2, 0xf0, 0x53, 0xaa, -0x41, 0x48, 0xb5, 0x57, 0x9b, 0x24, 0x6e, 0x0e, -0x7e, 0x22, 0xb6, 0x8a, 0x92, 0xbd, 0x3a, 0x59, -0xc9, 0xc8, 0x1f, 0xc3, 0x4f, 0xfd, 0x9e, 0x43, -0xf3, 0xdb, 0x11, 0xe7, 0x1b, 0xa1, 0xf6, 0xaf, -0x19, 0x3f, 0xd3, 0x49, 0xf1, 0x85, 0x79, 0x39, -0xfc, 0xbc, 0x01, 0xcb, 0x95, 0xa2, 0x71, 0xfe, -0xb2, 0xf2, 0x11, 0xdc, 0xc2, 0xe6, 0x72, 0xc1, -0xc2, 0xcf, 0xfd, 0xf0, 0x0f, 0x64, 0xb9, 0xe2, -0x8c, 0x71, 0xd5, 0xf2, 0x3f, 0x40, 0x85, 0x72, -0x47, 0xaa, 0xea, 0x82, 0xe1, 0x83, 0x88, 0x9f, -0x30, 0x84, 0xae, 0x59, 0x44, 0xa1, 0x12, 0x7a, -0x00, 0x81, 0x94, 0xe2, 0x5c, 0x0c, 0xfc, 0x14, -0x92, 0xc2, 0xb7, 0xa0, 0x5a, 0xf1, 0xbb, 0x13, -0xd5, 0xe4, 0x69, 0x08, 0x28, 0x76, 0x89, 0x9c, -0x36, 0xe6, 0xe2, 0x8d, 0xf5, 0x6b, 0xd4, 0xb9, -0x10, 0xd7, 0x40, 0xd9, 0x1a, 0x56, 0x32, 0xfc, -0xd4, 0xfb, 0xd2, 0x6d, 0xfd, 0xc2, 0x4f, 0xe9, -0xd2, 0x3f, 0xf1, 0x78, 0xb9, 0x6a, 0x74, 0xb8, -0x3f, 0x67, 0x18, 0x39, 0x69, 0xc6, 0xb1, 0x12, -0xd4, 0xf6, 0xfe, 0x70, 0xc7, 0x1d, 0xcf, 0x39, -0x18, 0xff, 0xd4, 0xfa, 0xde, 0x32, 0x39, 0xa6, -0x24, 0xcb, 0xa8, 0xdf, 0xbd, 0x2e, 0xda, 0x9a, -0xd6, 0xd6, 0xf7, 0x54, 0x8e, 0x7f, 0x8a, 0xb6, -0x46, 0x28, 0x56, 0xaa, 0x32, 0xf6, 0xf7, 0x71, -0xaf, 0xbc, 0xd3, 0x56, 0x87, 0xbf, 0x12, 0x31, -0x75, 0xa3, 0x68, 0x5b, 0x01, 0x5d, 0x0f, 0xca, -0x9b, 0x6e, 0x0d, 0x24, 0x9c, 0xb0, 0x3b, 0xab, -0x05, 0xc9, 0xe1, 0x9c, 0x3e, 0xf2, 0x3d, 0x05, -0xeb, 0x90, 0x7a, 0x91, 0x97, 0xe0, 0x2f, 0x8b, -0xbe, 0xc6, 0xf4, 0xca, 0xa8, 0x89, 0xd7, 0x5e, -0x37, 0x42, 0xf4, 0x12, 0xb9, 0xa8, 0x93, 0xaf, -0x80, 0x09, 0x3a, 0x3f, 0xfb, 0xed, 0x4e, 0x2b, -0x97, 0x20, 0xce, 0xa7, 0x30, 0x8d, 0x88, 0xbd, -0x38, 0x33, 0x6f, 0x4c, 0x9a, 0x81, 0x0a, 0x14, -0x7b, 0x7c, 0xe4, 0x16, 0x7d, 0x5c, 0x5c, 0x78, -0x1e, 0xa6, 0xe8, 0x8b, 0xeb, 0xeb, 0x3a, 0xab, -0x2a, 0x50, 0xc8, 0x37, 0x4f, 0xb8, 0x66, 0xf8, -0x33, 0xc6, 0x3c, 0x07, 0xa0, 0x2f, 0x99, 0x94, -0x97, 0xca, 0x45, 0x41, 0x7b, 0x31, 0xdd, 0xbc, -0x2b, 0x90, 0x45, 0x22, 0x7a, 0x9e, 0xc8, 0x86, -0xd3, 0xa7, 0x0a, 0xf6, 0xc0, 0x22, 0xa7, 0xe3, -0x23, 0xd2, 0x44, 0x37, 0x05, 0x6b, 0x47, 0x71, -0x2e, 0x47, 0x15, 0xbd, 0x4f, 0xf1, 0x50, 0xa0, -0x4a, 0xbf, 0x5c, 0xb8, 0x94, 0x14, 0x91, 0x2e, -0x2d, 0xd0, 0xfb, 0xc6, 0x0d, 0x6d, 0x3f, 0x80, -0x9c, 0x3d, 0xab, 0x36, 0x90, 0xe2, 0xfd, 0xbc, -0x8b, 0x24, 0x04, 0xb6, 0x6f, 0xf9, 0x0b, 0x54, -0x9f, 0x4b, 0x1a, 0x7d, 0x70, 0x26, 0x16, 0x96, -0x16, 0xff, 0x98, 0x9f, 0x52, 0xae, 0x46, 0xc2, -0xea, 0x8e, 0x4c, 0xd5, 0xa4, 0xa5, 0xdf, 0xa7, -0x85, 0x29, 0xb1, 0x5e, 0x2e, 0x9a, 0x7e, 0xf6, -0xba, 0x7c, 0x76, 0x77, 0x95, 0xba, 0x7a, 0xba, -0x34, 0x6e, 0x70, 0xcc, 0x2e, 0xe1, 0x11, 0x18, -0x18, 0xf5, 0x85, 0x6a, 0xfb, 0xc8, 0x14, 0xe9, -0x39, 0x57, 0x83, 0xfb, 0xdd, 0x97, 0xe3, 0x9f, -0xd8, 0x97, 0xd8, 0x2d, 0x2e, 0x7a, 0x09, 0xfb, -0x86, 0xa0, 0xe6, 0x48, 0x61, 0xc6, 0x9d, 0xd3, -0xef, 0xf8, 0x4c, 0x48, 0x17, 0xde, 0xb7, 0x84, -0x7c, 0x88, 0xe4, 0xbe, 0x7d, 0xd4, 0xb1, 0xb4, -0x60, 0x58, 0x30, 0x1d, 0x5b, 0x86, 0xc9, 0x58, -0xe8, 0xb6, 0xa2, 0xfd, 0xa5, 0x1f, 0xd2, 0x19, -0xa9, 0xf1, 0x9d, 0xa2, 0x03, 0x5d, 0x71, 0xd9, -0xd4, 0xef, 0xd3, 0x70, 0x19, 0x96, 0xdb, 0x71, -0x0a, 0x53, 0x23, 0x67, 0xdd, 0xe1, 0x51, 0xdc, -0xef, 0x66, 0x4c, 0x55, 0x6d, 0xff, 0x04, 0xa7, -0x68, 0x48, 0x2d, 0x7c, 0x89, 0x7f, 0x5f, 0x79, -0x97, 0x86, 0xc7, 0x03, 0x43, 0x16, 0xff, 0x54, -0xa5, 0x09, 0xd2, 0xdd, 0x53, 0x75, 0x19, 0xa9, -0xe5, 0x18, 0xf4, 0xd2, 0xba, 0x37, 0xc4, 0x21, -0xc8, 0x5a, 0xf1, 0x7d, 0x8a, 0x7e, 0x4f, 0x4e, -0x33, 0x2e, 0x35, 0x46, 0x9f, 0x85, 0xc0, 0xe8, -0xad, 0xf9, 0xfa, 0xbd, 0xbf, 0xfc, 0x6f, 0x11, -0xc6, 0xc4, 0x4c, 0xc1, 0x94, 0xd4, 0xcb, 0xd5, -0xa9, 0x85, 0x39, 0xfc, 0xa4, 0x65, 0x23, 0x18, -0x6a, 0x42, 0x68, 0x2a, 0xfe, 0x82, 0x26, 0xe4, -0x31, 0xf8, 0x98, 0xfa, 0x21, 0xcb, 0xed, 0x17, -0xde, 0x25, 0xcb, 0x19, 0x6c, 0xce, 0x22, 0x7e, -0x2e, 0x57, 0x8b, 0x91, 0x7f, 0x9a, 0xba, 0x1f, -0x63, 0xff, 0x35, 0x18, 0x44, 0xb8, 0xd5, 0x63, -0xd5, 0x11, 0xc6, 0xf9, 0x8c, 0xf7, 0xde, 0x83, -0x7b, 0xfa, 0xf0, 0xd6, 0x2a, 0x7c, 0xde, 0x1a, -0x96, 0xf3, 0x58, 0x7c, 0xc4, 0x31, 0x47, 0xbf, -0x8b, 0xc8, 0x3f, 0x91, 0xb2, 0x45, 0xa6, 0x18, -0xff, 0x3c, 0x92, 0x87, 0x9f, 0xe9, 0xae, 0x5b, -0xd4, 0x83, 0x29, 0xf9, 0x9c, 0xd8, 0xe9, 0xfe, -0xf2, 0xc8, 0x66, 0x5a, 0x8b, 0xf8, 0x49, 0xce, -0x18, 0xf6, 0x8c, 0x46, 0x8b, 0xe1, 0x52, 0x26, -0x98, 0x2d, 0x6e, 0xe0, 0x4f, 0xc2, 0xcf, 0x68, -0xd3, 0xa4, 0xab, 0x31, 0x4f, 0xbf, 0xef, 0x67, -0xb1, 0x71, 0x1c, 0xa7, 0xb0, 0x47, 0xc2, 0xc0, -0x34, 0xec, 0xda, 0x6b, 0xcd, 0x65, 0xc0, 0x36, -0x51, 0x78, 0x02, 0x06, 0xb1, 0xaf, 0x4a, 0xcb, -0x33, 0x64, 0x8b, 0xf2, 0xf0, 0xf3, 0xe9, 0xe7, -0xb8, 0xcd, 0x50, 0x79, 0x06, 0x5d, 0x0f, 0xf9, -0x04, 0x2c, 0x1e, 0x15, 0x51, 0xbf, 0x1b, 0xfb, -0x81, 0xc2, 0x01, 0xd8, 0x9c, 0xd4, 0x64, 0xfb, -0x27, 0x12, 0xce, 0x85, 0x91, 0x8e, 0x51, 0x2b, -0xff, 0xf9, 0x7e, 0xe4, 0x6f, 0x99, 0x1c, 0x66, -0xef, 0x41, 0xcb, 0x2f, 0xcd, 0xc1, 0x4f, 0xe9, -0x38, 0x0a, 0x15, 0xe4, 0x9f, 0x93, 0xa6, 0x90, -0xbf, 0xca, 0xe9, 0xf7, 0x64, 0xfa, 0x7d, 0xad, -0xa1, 0xdf, 0x15, 0x43, 0xc8, 0x9b, 0xf9, 0x02, -0x2d, 0xff, 0x09, 0xa1, 0x16, 0x17, 0xd3, 0xe1, -0xc7, 0x74, 0x52, 0x95, 0xc3, 0xcf, 0xf5, 0xb0, -0x85, 0x68, 0xb0, 0x39, 0x42, 0xb6, 0x70, 0x8f, -0xdd, 0x84, 0x9f, 0xe2, 0x16, 0x5d, 0xb6, 0x4f, -0xc0, 0xcd, 0xf8, 0xd9, 0x26, 0x40, 0x17, 0xa4, -0xa3, 0x08, 0x9b, 0x13, 0xd0, 0xc5, 0x05, 0xa2, -0x73, 0xf5, 0x7b, 0x4c, 0x65, 0xb2, 0x9d, 0xe9, -0xf7, 0x51, 0xa8, 0xf3, 0xec, 0xc8, 0xe1, 0xe7, -0xe8, 0xfc, 0x37, 0x58, 0x3a, 0xb1, 0x6d, 0x75, -0xaa, 0xf5, 0x0d, 0x91, 0x35, 0x5c, 0x39, 0xfc, -0xf4, 0xda, 0x5e, 0x45, 0x6c, 0x0d, 0x99, 0x9a, -0x39, 0x7c, 0xbf, 0x8b, 0xe1, 0xa7, 0xde, 0xd7, -0x29, 0x21, 0x7e, 0xca, 0xbb, 0x19, 0x6c, 0x62, -0x03, 0xea, 0xbc, 0x0e, 0xea, 0x36, 0xf1, 0x13, -0xf5, 0x3b, 0xec, 0x15, 0xe5, 0x18, 0xf2, 0x56, -0xa6, 0xdf, 0x03, 0x11, 0x9c, 0xcb, 0x69, 0xc3, -0x9e, 0xde, 0xb2, 0x7e, 0xc4, 0x79, 0x63, 0x0d, -0x87, 0x8c, 0x35, 0x98, 0xf8, 0xe9, 0x61, 0xf9, -0x4f, 0xed, 0x79, 0xef, 0x03, 0x4b, 0x2a, 0xec, -0xc8, 0xc3, 0x4f, 0xe8, 0x37, 0xd2, 0x9e, 0x8f, -0x4e, 0x28, 0x46, 0xfe, 0x33, 0x87, 0x9f, 0x08, -0x9b, 0x74, 0x90, 0x99, 0xd8, 0x8a, 0x0f, 0x96, -0x7e, 0x47, 0xfe, 0xb9, 0x1d, 0x69, 0x27, 0xd3, -0xef, 0xf0, 0x82, 0x50, 0xc7, 0x1a, 0x26, 0x7e, -0x32, 0xfd, 0xde, 0xad, 0xbd, 0x5b, 0x9f, 0x9e, -0x3b, 0x9c, 0x83, 0x9f, 0x61, 0xba, 0x99, 0x85, -0xd9, 0x4e, 0xd4, 0xef, 0xdf, 0x87, 0xda, 0x57, -0x35, 0xfc, 0xd4, 0x6d, 0xed, 0x17, 0x2b, 0xc8, -0x29, 0xba, 0x24, 0xeb, 0xba, 0xc6, 0x87, 0x55, -0xd4, 0xef, 0x93, 0xae, 0xce, 0xaa, 0xe3, 0x46, -0x7c, 0x47, 0xfe, 0x49, 0x19, 0xaf, 0x43, 0x0d, -0xf4, 0xa1, 0xde, 0xc8, 0xe4, 0xe5, 0x3f, 0xff, -0x29, 0x7e, 0x72, 0x33, 0xe3, 0x9f, 0x3f, 0x43, -0xe1, 0x49, 0x91, 0xe0, 0xcd, 0x94, 0x9e, 0x31, -0xd6, 0x87, 0xfa, 0xdd, 0xb7, 0x15, 0xee, 0x3c, -0xe2, 0xe8, 0x8c, 0x9c, 0xad, 0xde, 0x47, 0x6b, -0xa7, 0x56, 0xfe, 0xa9, 0xfb, 0xbc, 0xb1, 0x06, -0xa0, 0x3b, 0xe9, 0x76, 0x2d, 0xe4, 0xa3, 0xef, -0x1e, 0x14, 0x10, 0x3f, 0x1f, 0x27, 0x23, 0x06, -0x7e, 0xc6, 0x3d, 0x27, 0x91, 0x56, 0x57, 0xb3, -0x6d, 0x87, 0x42, 0x49, 0xa8, 0x53, 0x57, 0x06, -0x89, 0xb5, 0x1f, 0xca, 0x5e, 0x96, 0x8e, 0x31, -0xdd, 0xc8, 0xa8, 0xd0, 0x35, 0x61, 0x31, 0xce, -0xe5, 0x8b, 0xe7, 0x2d, 0x9f, 0x9f, 0x92, 0x8c, -0xe9, 0xe9, 0x44, 0x94, 0x35, 0x84, 0x1c, 0xff, -0xbc, 0x01, 0xf5, 0x6c, 0x5c, 0x93, 0xc6, 0xa5, -0x9c, 0xd3, 0x7c, 0xb6, 0xcd, 0xd4, 0x47, 0x8c, -0x63, 0x32, 0x9a, 0xb4, 0x66, 0x0f, 0x13, 0xeb, -0x2a, 0xea, 0xdb, 0x73, 0x16, 0x7e, 0x6e, 0x80, -0x43, 0x3d, 0x3e, 0x9d, 0x9b, 0x32, 0x92, 0xca, -0xb4, 0xbd, 0x89, 0x9f, 0x80, 0xfc, 0x93, 0xd9, -0x3a, 0xe3, 0x7e, 0x4a, 0xd8, 0x57, 0x55, 0x37, -0x8c, 0x24, 0x35, 0xc7, 0x3f, 0xff, 0x33, 0xbd, -0x22, 0x85, 0x46, 0x5c, 0xff, 0x5c, 0xba, 0x1c, -0xae, 0x29, 0xe1, 0xf1, 0x6d, 0xfb, 0xf8, 0xac, -0xb1, 0xdf, 0xd3, 0xf3, 0xaf, 0xa7, 0x67, 0xab, -0x9b, 0x8f, 0xb9, 0xf6, 0x31, 0xfd, 0xde, 0x10, -0x3e, 0xe1, 0x3a, 0x90, 0xd3, 0xef, 0xdc, 0x27, -0xc8, 0xe7, 0x97, 0xc7, 0x5d, 0x43, 0x7c, 0x0d, -0x8c, 0xe1, 0xfe, 0xbb, 0x63, 0xc8, 0xaa, 0x1f, -0xa9, 0xe2, 0x05, 0x38, 0x9c, 0x40, 0xf7, 0xca, -0x90, 0x1a, 0x78, 0xab, 0xab, 0x8e, 0xf1, 0x4f, -0x99, 0xe8, 0x6b, 0x18, 0x45, 0xfe, 0xb9, 0x8f, -0x6c, 0x50, 0xf0, 0x75, 0xfb, 0xc0, 0x78, 0xef, -0x16, 0x7e, 0xda, 0x98, 0x7e, 0x7f, 0x2c, 0xae, -0xe9, 0xf7, 0xbf, 0x82, 0xba, 0x11, 0x96, 0xff, -0x34, 0x6c, 0x26, 0x95, 0x69, 0xa6, 0x92, 0x4f, -0x05, 0x79, 0x3b, 0x8c, 0x46, 0xc3, 0x69, 0x47, -0xc6, 0x91, 0x97, 0xff, 0xf4, 0xa2, 0xa9, 0x50, -0xbf, 0x3b, 0x66, 0xe0, 0x13, 0x96, 0x4f, 0x9e, -0x76, 0x34, 0x18, 0xe3, 0x62, 0x9a, 0x7e, 0x47, -0xfd, 0xa7, 0xd5, 0x65, 0x20, 0x34, 0xd2, 0x94, -0xc3, 0x4f, 0xa6, 0xdf, 0xd1, 0x54, 0xdf, 0x10, -0x87, 0x50, 0x53, 0xf6, 0xc2, 0xb2, 0xac, 0x18, -0x8c, 0xe4, 0xf8, 0x27, 0xcb, 0x2f, 0xf9, 0x95, -0xc2, 0x06, 0x22, 0x72, 0x5d, 0x44, 0x90, 0xc5, -0x20, 0x4c, 0x73, 0xba, 0x3d, 0xa7, 0xe1, 0xcb, -0xf4, 0x20, 0xad, 0x5d, 0x8f, 0x52, 0xf9, 0xf9, -0xae, 0x1d, 0x5d, 0x0b, 0x3a, 0xb1, 0x31, 0x2a, -0xe9, 0xef, 0x21, 0x0a, 0x5f, 0xa0, 0x97, 0x52, -0x0d, 0x3f, 0x7f, 0x60, 0xa8, 0x97, 0xd0, 0x13, -0x74, 0xe9, 0xa4, 0x88, 0xfc, 0xd3, 0x30, 0xb5, -0x32, 0x1f, 0xf5, 0xbb, 0x3b, 0xcc, 0x64, 0xbb, -0xaa, 0xbd, 0xf7, 0x53, 0x37, 0xe9, 0x77, 0x5c, -0xdf, 0xfc, 0x0c, 0xef, 0x87, 0x63, 0x34, 0x24, -0x3b, 0x73, 0xf8, 0x39, 0x7a, 0xab, 0x26, 0x7d, -0x94, 0xb5, 0xd3, 0xfc, 0x5a, 0xf8, 0x5f, 0x50, -0xa9, 0xf4, 0x74, 0xf8, 0x4e, 0x1b, 0xe3, 0x34, -0xfd, 0x8e, 0xfc, 0xf3, 0xbe, 0xce, 0xd0, 0x60, -0x10, 0x35, 0x3a, 0xd3, 0xef, 0x3d, 0xe6, 0xbe, -0x45, 0xfe, 0x79, 0x18, 0x02, 0x31, 0x31, 0x68, -0x3f, 0x8e, 0x62, 0x2f, 0xad, 0xfa, 0x11, 0x3f, -0x21, 0x57, 0x3f, 0x42, 0xfd, 0x3e, 0x84, 0xb0, -0x39, 0x04, 0x27, 0xa1, 0x9e, 0x3a, 0xd3, 0xfc, -0x8b, 0x56, 0xbe, 0x40, 0xd3, 0xef, 0x6e, 0x17, -0x25, 0x8f, 0x98, 0x89, 0x50, 0x13, 0xaf, 0x45, -0xad, 0x4e, 0x12, 0x8a, 0xbb, 0xfa, 0x4a, 0xab, -0x7f, 0x15, 0x7e, 0x1e, 0x22, 0xbe, 0x0e, 0x47, -0x9f, 0x4f, 0x80, 0x2d, 0x2d, 0x75, 0xb1, 0xbc, -0xfc, 0x67, 0x83, 0xa6, 0xdf, 0x7d, 0x6b, 0x1d, -0x6e, 0xe4, 0xa6, 0x5b, 0x0a, 0xeb, 0x22, 0xd8, -0x77, 0xd2, 0xdc, 0xd3, 0x1e, 0x01, 0xfb, 0x64, -0xa5, 0x57, 0x22, 0x0b, 0xa1, 0x4b, 0xd6, 0xf0, -0xf3, 0xb8, 0x4d, 0xb7, 0xd9, 0x50, 0x51, 0x5c, -0x98, 0x81, 0xc1, 0x32, 0xc4, 0x4f, 0x59, 0x62, -0xf8, 0xb2, 0x23, 0xa7, 0xdf, 0xfb, 0xca, 0x18, -0x34, 0x2e, 0x67, 0x35, 0x9b, 0x37, 0x0a, 0x6e, -0x48, 0xba, 0x7e, 0x37, 0x6c, 0xd6, 0x67, 0x63, -0x7d, 0xcd, 0x8a, 0x73, 0xbc, 0x4a, 0x90, 0x8e, -0x89, 0xe1, 0xfb, 0x9d, 0xe3, 0xfc, 0x51, 0xc3, -0xcf, 0x1a, 0xbc, 0x1a, 0x6c, 0x8a, 0x48, 0xf5, -0xe2, 0xd0, 0xd3, 0xb2, 0x58, 0x62, 0xf9, 0xcf, -0x02, 0x23, 0xbe, 0x03, 0xea, 0x77, 0x08, 0xb4, -0xde, 0x16, 0xa2, 0xfb, 0xc5, 0x4d, 0x5d, 0xb5, -0x71, 0x91, 0xf1, 0x4f, 0x7d, 0xed, 0x5e, 0x81, -0xf1, 0xcf, 0xc7, 0x94, 0xdb, 0x53, 0x35, 0x13, -0xbb, 0x9f, 0x92, 0x17, 0x47, 0xb5, 0x1c, 0x84, -0xb1, 0x57, 0xca, 0x26, 0xa4, 0x2b, 0xd0, 0xa4, -0x6c, 0x4f, 0xb1, 0xbc, 0x46, 0x4b, 0x38, 0x16, -0xc8, 0xe5, 0x3f, 0xa3, 0x9c, 0x86, 0x9f, 0xeb, -0x8b, 0x52, 0x3c, 0xab, 0x73, 0x35, 0x31, 0x9b, -0xe5, 0xec, 0xa9, 0xd9, 0x1a, 0xee, 0xa0, 0xa5, -0x95, 0xc2, 0x28, 0xd4, 0x43, 0x80, 0x5a, 0xf6, -0x34, 0xf2, 0x9f, 0x03, 0x8e, 0x2c, 0x68, 0xfa, -0x3d, 0x2d, 0xfe, 0x52, 0xfe, 0xf3, 0x1c, 0x9f, -0x89, 0x38, 0xa5, 0xee, 0x84, 0x4c, 0x31, 0x36, -0x9a, 0xfa, 0x9d, 0x96, 0x94, 0x6b, 0x52, 0x19, -0x31, 0x6b, 0x29, 0xd9, 0xac, 0x56, 0x26, 0x30, -0xde, 0x66, 0x05, 0x7d, 0x5c, 0x8f, 0x58, 0x01, -0x2c, 0xff, 0xe9, 0xe8, 0x74, 0xdc, 0x06, 0xc3, -0x34, 0x93, 0x75, 0x76, 0xf2, 0xef, 0x99, 0xfa, -0xbd, 0x6c, 0x8f, 0x0e, 0x47, 0xcb, 0xfe, 0x2e, -0x2b, 0x5e, 0x45, 0xae, 0xf1, 0x5d, 0xe6, 0x83, -0xfa, 0x3c, 0x15, 0xa6, 0xdf, 0x91, 0x76, 0x3a, -0xaf, 0xf0, 0x61, 0xee, 0x18, 0xad, 0xaf, 0x76, -0x75, 0xf2, 0x60, 0xe2, 0xa7, 0x77, 0xbb, 0x70, -0x30, 0x5d, 0x37, 0xd9, 0xd3, 0xe9, 0xbb, 0x25, -0xdd, 0x95, 0xa9, 0xf4, 0x23, 0x70, 0xd7, 0x18, -0xba, 0x0a, 0xf5, 0xbb, 0x84, 0x73, 0x19, 0x16, -0x1f, 0x27, 0xde, 0x48, 0x52, 0xae, 0x8c, 0xe3, -0xa4, 0xcc, 0x71, 0x71, 0x61, 0x9b, 0xb4, 0x0f, -0xea, 0xa6, 0x11, 0xaa, 0x98, 0xf3, 0x60, 0xd0, -0x0a, 0x12, 0xd1, 0xe8, 0x1b, 0xd2, 0xe7, 0xf2, -0x6a, 0x20, 0xb3, 0xb2, 0x16, 0x4e, 0xd0, 0xc1, -0x94, 0x2b, 0xe3, 0x30, 0x73, 0x02, 0x49, 0xd0, -0xf6, 0x0a, 0xc5, 0x7d, 0x34, 0x21, 0x5c, 0xa2, -0x4d, 0xac, 0x61, 0xea, 0xf7, 0xb4, 0xa4, 0x95, -0x40, 0x46, 0x9d, 0x33, 0x7c, 0x83, 0x7c, 0x1c, -0xea, 0x87, 0x11, 0x3f, 0x47, 0x0d, 0xfc, 0xdc, -0xa5, 0xeb, 0xf7, 0x71, 0x84, 0x4d, 0x8a, 0xf1, -0x88, 0x11, 0x35, 0x32, 0x99, 0xcb, 0x7f, 0x0a, -0x87, 0x85, 0xba, 0x61, 0x71, 0x10, 0xf1, 0x73, -0x0b, 0xe7, 0xd3, 0x72, 0xa3, 0xb9, 0xfc, 0x27, -0xdd, 0xe7, 0x0b, 0x14, 0xda, 0xdd, 0xa4, 0x3f, -0xb9, 0x2b, 0x22, 0x83, 0xbf, 0x9e, 0x0c, 0x1b, -0xfe, 0x49, 0x8b, 0x36, 0x28, 0x08, 0x8d, 0xef, -0x3a, 0x3f, 0xae, 0xf2, 0x2b, 0xa3, 0xf1, 0xc1, -0xb5, 0xab, 0x06, 0xab, 0xac, 0xfc, 0xe7, 0xb7, -0xaf, 0xab, 0xb3, 0x72, 0xf8, 0x98, 0xab, 0xbe, -0x5b, 0x55, 0xaf, 0xc7, 0xc3, 0x5f, 0x40, 0x20, -0xb5, 0xf8, 0x67, 0xd9, 0x75, 0xd8, 0x80, 0xdb, -0xbc, 0x68, 0x94, 0x0f, 0xb3, 0x78, 0x74, 0xbf, -0x33, 0xa7, 0xdf, 0x55, 0xef, 0xac, 0xb0, 0x95, -0xca, 0x8f, 0x38, 0x7a, 0x48, 0x40, 0x3e, 0x4c, -0xeb, 0xa6, 0xed, 0x39, 0xfd, 0x3e, 0x6a, 0x7b, -0x5d, 0xf4, 0xa3, 0x8d, 0x1c, 0x90, 0x70, 0x6e, -0xd9, 0xa7, 0x73, 0x22, 0x4b, 0xbf, 0x73, 0x7b, -0x98, 0x9b, 0x28, 0xc8, 0x0b, 0xf4, 0x18, 0x60, -0xcf, 0xf8, 0x4c, 0x1e, 0x29, 0x21, 0xbe, 0x9c, -0x83, 0x10, 0x9a, 0xca, 0xc1, 0xfa, 0x2a, 0x58, -0x3d, 0x6e, 0xd4, 0xe2, 0x9f, 0x2f, 0x31, 0x9b, -0x0d, 0x6b, 0xb1, 0x6a, 0x96, 0x2c, 0x9f, 0xce, -0xcf, 0x7f, 0xc2, 0x1e, 0xe5, 0xcd, 0x92, 0x50, -0x7a, 0xd5, 0x10, 0xcf, 0xea, 0x32, 0x8c, 0x43, -0xf3, 0xa6, 0x7e, 0x3f, 0x63, 0x2b, 0x47, 0x7a, -0xec, 0xcb, 0x22, 0x7e, 0x06, 0x90, 0x9b, 0xd6, -0x4d, 0xcf, 0xe1, 0x9f, 0x0f, 0xd4, 0x64, 0x84, -0x6a, 0xc9, 0x4f, 0xc9, 0x36, 0x09, 0xbd, 0xfa, -0x72, 0x1e, 0xff, 0x9c, 0xe6, 0x2a, 0x60, 0x7b, -0x7a, 0x41, 0xbb, 0x18, 0x2d, 0x60, 0xe0, 0x55, -0x9b, 0xe5, 0x3b, 0x23, 0x9f, 0x18, 0x7d, 0x51, -0xd1, 0xa9, 0x4c, 0xd3, 0xa5, 0x72, 0xa0, 0x87, -0xdf, 0xae, 0xe2, 0xbb, 0x55, 0x5d, 0x4b, 0xf8, -0xb7, 0x4c, 0xfd, 0x3e, 0xff, 0x29, 0xf8, 0x98, -0xbb, 0x47, 0x71, 0xa9, 0x8e, 0x3f, 0x83, 0x0f, -0x24, 0x2d, 0xcf, 0x60, 0xea, 0xf7, 0x01, 0x96, -0x9f, 0x40, 0x9f, 0x98, 0xff, 0x22, 0x72, 0x53, -0x23, 0xa6, 0x1e, 0x37, 0xf1, 0xb3, 0x64, 0xa7, -0x70, 0x90, 0xd5, 0x8f, 0x36, 0xda, 0xad, 0x8d, -0x71, 0x51, 0xd2, 0xd7, 0x47, 0xe1, 0x3b, 0x23, -0x3f, 0x4e, 0xd6, 0xa6, 0xa3, 0x9d, 0xa4, 0x42, -0x9b, 0x0b, 0xfa, 0xae, 0x6a, 0xf1, 0x4f, 0x2d, -0xff, 0x39, 0x21, 0xde, 0x4d, 0x9c, 0xac, 0x91, -0x9d, 0x53, 0x3f, 0xea, 0x81, 0xab, 0x42, 0x98, -0xd6, 0xee, 0x21, 0xac, 0xb6, 0x1b, 0x1e, 0x70, -0xe5, 0xeb, 0xf7, 0xac, 0x30, 0x43, 0x19, 0x6c, -0x76, 0xc7, 0x2d, 0xfc, 0xcc, 0xe9, 0x77, 0xf2, -0x73, 0x84, 0xcd, 0x55, 0xcf, 0xf3, 0x8c, 0x7f, -0x36, 0x29, 0x81, 0x9b, 0xf8, 0x27, 0x57, 0x17, -0x8b, 0xee, 0x24, 0x13, 0x02, 0x72, 0xcc, 0x87, -0xc5, 0x39, 0xfc, 0x93, 0xfc, 0x80, 0xd6, 0x2a, -0x85, 0xe3, 0xee, 0x11, 0x8d, 0x7f, 0xce, 0xc9, -0x7f, 0x3a, 0xe9, 0x26, 0xa8, 0x8d, 0xfb, 0xd7, -0x92, 0x91, 0x5b, 0x50, 0xc7, 0xcd, 0xc9, 0x7f, -0x16, 0xc5, 0x61, 0x12, 0xc2, 0x9e, 0x55, 0xf7, -0x7e, 0x1e, 0xf9, 0x27, 0x17, 0x06, 0x67, 0x8e, -0x7f, 0x6a, 0xf5, 0x23, 0xb0, 0xea, 0x32, 0xcd, -0xf9, 0xfc, 0xb3, 0xcf, 0x76, 0x99, 0xbc, 0x0e, -0xf7, 0xb4, 0x39, 0xc7, 0x1d, 0xd5, 0xac, 0xef, -0x7e, 0x04, 0xaf, 0x0b, 0xb9, 0xfa, 0x11, 0xca, -0x76, 0xd4, 0xef, 0x04, 0x71, 0x07, 0x81, 0x94, -0xe1, 0xa7, 0xa5, 0xdf, 0x6d, 0x23, 0x0a, 0xab, -0x1f, 0xd9, 0xdd, 0x3e, 0x21, 0x8d, 0x40, 0xaa, -0x14, 0xce, 0xe1, 0x9f, 0x25, 0x5b, 0x10, 0xe7, -0x11, 0xde, 0xab, 0xb9, 0x43, 0xc6, 0x1a, 0x4c, -0xfe, 0xc9, 0xea, 0x47, 0x42, 0xa3, 0x52, 0xc3, -0x72, 0xbf, 0xc8, 0x3f, 0x5b, 0xbe, 0x8d, 0xf8, -0x69, 0xf8, 0x75, 0x3b, 0xab, 0x1f, 0xe1, 0x3c, -0x9d, 0x38, 0x4f, 0xe9, 0x8a, 0xd0, 0x14, 0xbd, -0x99, 0x7f, 0x42, 0x98, 0xab, 0x65, 0xfc, 0x13, -0x6d, 0x2d, 0x14, 0xe5, 0xf1, 0x4f, 0xae, 0x81, -0x0c, 0xd3, 0xc5, 0xd4, 0x99, 0x25, 0x7e, 0xee, -0x45, 0x6e, 0x31, 0x15, 0x6f, 0xe2, 0x9f, 0x29, -0xb6, 0x7d, 0xec, 0x4e, 0x89, 0xbd, 0x5b, 0x7f, -0x30, 0x32, 0x6c, 0xd5, 0x8f, 0x24, 0x94, 0x29, -0x68, 0xeb, 0x18, 0x29, 0xa7, 0x07, 0x71, 0x0d, -0x62, 0x07, 0x98, 0xfc, 0x73, 0x40, 0x2c, 0x86, -0xd7, 0x68, 0x73, 0x3a, 0xd0, 0x7e, 0xfb, 0x1d, -0xe8, 0x2f, 0xcb, 0x11, 0x3f, 0x2b, 0x2d, 0xfe, -0x79, 0x2b, 0xd3, 0x6a, 0x61, 0xa5, 0x38, 0xcd, -0x7f, 0x98, 0xbe, 0xc6, 0xce, 0x5d, 0x64, 0xe6, -0xd4, 0xdf, 0xaf, 0xd1, 0xe6, 0x89, 0x00, 0xe2, -0x27, 0xd3, 0xef, 0xd9, 0xa2, 0x7c, 0xfe, 0x99, -0x81, 0xee, 0x3e, 0x0c, 0x35, 0x7d, 0xf6, 0x3a, -0xd2, 0x4d, 0x6b, 0xdb, 0xc5, 0x3f, 0xe1, 0xcf, -0x9b, 0x36, 0x83, 0x97, 0xe0, 0xfb, 0x25, 0xb5, -0x3d, 0x3d, 0x8f, 0x90, 0x72, 0xf1, 0x9b, 0x72, -0xed, 0xf1, 0xff, 0xb4, 0x31, 0xaf, 0xfe, 0x3e, -0xc2, 0xd2, 0x90, 0xb1, 0x68, 0x5a, 0xab, 0x1f, -0x05, 0xe4, 0x1e, 0xe6, 0x9f, 0x7a, 0x1f, 0xc3, -0xcf, 0x0f, 0x28, 0xab, 0xfb, 0x3a, 0x9a, 0xe0, -0x6d, 0xa1, 0x89, 0xe9, 0xb1, 0x1c, 0xff, 0x9c, -0x64, 0xdb, 0x75, 0xd8, 0xf5, 0x1c, 0xf2, 0xcf, -0x0f, 0x40, 0x23, 0x24, 0x7b, 0xcc, 0x1a, 0xa6, -0xf4, 0x09, 0x9c, 0x92, 0xef, 0x4a, 0x6f, 0x9b, -0xbe, 0x9d, 0xf1, 0x4f, 0xbc, 0xc1, 0x74, 0xa9, -0xc5, 0x3f, 0x61, 0x15, 0xdb, 0xef, 0x13, 0xe2, -0xfe, 0x52, 0x0d, 0x5f, 0x64, 0x3f, 0x6a, 0xf4, -0x1c, 0x7e, 0x2a, 0xbd, 0xb0, 0x10, 0x21, 0x35, -0xa1, 0x15, 0xb1, 0xb3, 0x22, 0x6a, 0x7b, 0xc3, -0x9e, 0x76, 0x41, 0x84, 0x5e, 0x8f, 0xfc, 0x9a, -0xdf, 0x93, 0xd8, 0x46, 0xf7, 0x31, 0xff, 0x0c, -0x5a, 0xef, 0x01, 0xf1, 0x93, 0x9c, 0xa8, 0x5e, -0xda, 0x13, 0x38, 0xc0, 0xbf, 0x24, 0x5c, 0x5b, -0x17, 0x8e, 0xb6, 0x0d, 0xf2, 0xd9, 0x02, 0x43, -0xbf, 0x7f, 0x1b, 0xb9, 0x70, 0x50, 0x83, 0x9c, -0x40, 0x7c, 0xb6, 0x21, 0x2c, 0xac, 0xde, 0xdb, -0x3a, 0xf9, 0x64, 0x5e, 0xfd, 0x88, 0x86, 0xd3, -0xc8, 0x3f, 0xb3, 0xa8, 0xc4, 0x43, 0x59, 0x57, -0x9e, 0x7e, 0x07, 0xe4, 0x9f, 0xdd, 0x75, 0xbb, -0x1c, 0x43, 0xca, 0x05, 0xd8, 0x42, 0x77, 0x6b, -0xf9, 0x4f, 0x21, 0x8f, 0x7f, 0xea, 0x35, 0xb7, -0x31, 0x76, 0xb6, 0xe9, 0xe6, 0xfc, 0x27, 0x4e, -0x3d, 0xa5, 0xd5, 0xc0, 0xb6, 0xfc, 0x72, 0xfe, -0x13, 0x5f, 0x69, 0x46, 0x0b, 0x35, 0xea, 0xa8, -0x56, 0x10, 0xca, 0xe6, 0xea, 0x47, 0x5a, 0xcc, -0x71, 0x4c, 0x93, 0xeb, 0xc2, 0x4f, 0x52, 0xcd, -0xea, 0xea, 0x9b, 0xeb, 0x47, 0xe1, 0x94, 0xc6, -0xf5, 0x67, 0x94, 0x65, 0x5a, 0xcd, 0xdb, 0xd0, -0xda, 0xaa, 0x2d, 0x60, 0xe6, 0x93, 0xc7, 0x18, -0x39, 0xd2, 0x9e, 0x67, 0xf8, 0xd9, 0xa8, 0xe0, -0x34, 0xe6, 0xe9, 0x56, 0xa5, 0x8c, 0x9e, 0x3b, -0xbc, 0x0a, 0x26, 0xff, 0xac, 0x60, 0xfc, 0xd3, -0x8f, 0xb2, 0xfd, 0x1d, 0x78, 0x89, 0xd5, 0xbc, -0x9f, 0x20, 0xd7, 0x65, 0x7d, 0x5c, 0xd4, 0x5b, -0x4c, 0x11, 0x36, 0x07, 0xbe, 0xd2, 0xd8, 0x7a, -0x12, 0xa6, 0xfb, 0x97, 0x4e, 0xe5, 0xeb, 0xf7, -0xf2, 0x3d, 0xec, 0x95, 0x26, 0x5d, 0x1f, 0xf1, -0xd7, 0x5b, 0xa6, 0x19, 0x7e, 0x7e, 0xc4, 0x8f, -0x3f, 0xa9, 0xcf, 0x13, 0xf9, 0xa7, 0xf8, 0x75, -0xca, 0xe2, 0x43, 0x6b, 0x16, 0x1f, 0xa0, 0xd7, -0xdf, 0xa9, 0x81, 0x9f, 0xac, 0x7e, 0x04, 0x95, -0xb4, 0x97, 0x69, 0xa0, 0xfd, 0x28, 0x86, 0x7e, -0x17, 0xf1, 0xb3, 0x5a, 0x1f, 0xa7, 0xf3, 0xcf, -0xca, 0x34, 0xab, 0x65, 0xc1, 0x01, 0xbd, 0xfe, -0x3e, 0xb7, 0x7e, 0x24, 0x0f, 0x6b, 0xb6, 0xce, -0xe8, 0xb6, 0xb6, 0xf0, 0x13, 0x58, 0xfd, 0x68, -0x5f, 0xca, 0x91, 0x46, 0x53, 0x7d, 0x92, 0x0e, -0xcd, 0xa9, 0xbf, 0x1b, 0x9c, 0x68, 0x9e, 0x56, -0x7f, 0x17, 0x1a, 0x6f, 0xae, 0x1f, 0xe5, 0x61, -0xd6, 0x32, 0x65, 0x4e, 0xfd, 0x1d, 0x39, 0x26, -0xa9, 0x6b, 0xd9, 0xce, 0xf4, 0xed, 0xde, 0x5f, -0x59, 0x7f, 0x37, 0xb5, 0xef, 0xcd, 0xf5, 0x77, -0xd8, 0x2b, 0x68, 0xa9, 0xc6, 0x11, 0x7a, 0x48, -0x07, 0xa8, 0x5c, 0xfd, 0x48, 0x3f, 0x0b, 0x70, -0x3b, 0x6d, 0x65, 0x0d, 0xb7, 0x96, 0xff, 0xe4, -0x25, 0xa3, 0x4f, 0x83, 0x4d, 0xb5, 0x38, 0xc5, -0x5f, 0x8e, 0xde, 0xd0, 0x27, 0x75, 0x71, 0x9e, -0xbe, 0x86, 0x21, 0x1b, 0xcb, 0x8d, 0x86, 0x55, -0x84, 0xcd, 0xcb, 0xf2, 0xeb, 0x28, 0xac, 0x8b, -0x73, 0xdc, 0x54, 0xcb, 0x7f, 0x42, 0x1d, 0x2b, -0xbb, 0x9f, 0x43, 0xb2, 0x5e, 0xc3, 0x0e, 0xd0, -0xbc, 0x63, 0xe2, 0xa7, 0xc6, 0x3f, 0xeb, 0x18, -0x6c, 0x1e, 0x05, 0x06, 0x96, 0x5a, 0xfe, 0xd3, -0xaa, 0x1f, 0x49, 0x6c, 0x0d, 0xde, 0x94, 0xef, -0x7d, 0xd8, 0x22, 0x6b, 0xc5, 0xb0, 0xbc, 0xfa, -0x91, 0x78, 0xc5, 0x16, 0x8e, 0x3f, 0x95, 0x2a, -0x9d, 0x90, 0x8e, 0xe8, 0xcf, 0xb3, 0xea, 0x47, -0x31, 0xcd, 0x66, 0xf7, 0x9e, 0xd2, 0x6c, 0x46, -0x7f, 0x45, 0xfd, 0x88, 0x1d, 0x71, 0xd0, 0xce, -0x3a, 0x84, 0xf2, 0xf5, 0xbb, 0x28, 0xf8, 0xc5, -0x17, 0x99, 0x0f, 0xa6, 0x23, 0xa3, 0xf0, 0x22, -0xa9, 0x62, 0xfa, 0x3d, 0xbf, 0x7e, 0x64, 0x9e, -0x63, 0x61, 0xb9, 0x6d, 0xb6, 0xa1, 0xf2, 0xea, -0x47, 0x92, 0x11, 0x66, 0x51, 0x33, 0xc3, 0x02, -0x8a, 0x8d, 0x49, 0x83, 0x7f, 0xb2, 0xfa, 0x91, -0x51, 0x7f, 0x7f, 0x07, 0x1b, 0x77, 0xa6, 0xb1, -0x71, 0x5e, 0x7f, 0x1c, 0x88, 0x45, 0x3a, 0xff, -0xd4, 0xf6, 0xdf, 0x25, 0x68, 0x44, 0x67, 0x2c, -0x1d, 0xf6, 0xe8, 0xf3, 0x8c, 0x0b, 0x9f, 0xc0, -0xe1, 0xae, 0xdf, 0xc8, 0xce, 0x1b, 0xc2, 0x30, -0x74, 0x2a, 0x15, 0xea, 0x77, 0x0e, 0xe5, 0xce, -0x2f, 0xc1, 0xf6, 0x24, 0xca, 0xf6, 0xf7, 0x99, -0x0f, 0x2a, 0xdd, 0x78, 0x4f, 0xd4, 0x40, 0xe7, -0x8d, 0xb3, 0x46, 0x12, 0xec, 0x54, 0xf4, 0xb9, -0x44, 0x5e, 0x6f, 0xdb, 0x01, 0xeb, 0x7a, 0xec, -0x1d, 0x05, 0x23, 0x73, 0xe3, 0x3b, 0x5b, 0xc3, -0x49, 0xe8, 0x56, 0xfa, 0x29, 0xea, 0xe2, 0x33, -0x79, 0xf5, 0x23, 0xd4, 0x8d, 0x59, 0x6d, 0xdf, -0x9e, 0x48, 0x85, 0x28, 0x62, 0xf9, 0x05, 0xc3, -0xd6, 0x19, 0xbd, 0x7e, 0x34, 0xcc, 0xfa, 0xa2, -0xd7, 0xa4, 0x30, 0xb5, 0xe5, 0xf8, 0x67, 0x97, -0x74, 0xdd, 0x66, 0xc8, 0xf6, 0xb3, 0x70, 0x0a, -0x75, 0x15, 0x2b, 0x2a, 0x9b, 0xf5, 0xa3, 0x24, -0xf2, 0xcf, 0x82, 0x00, 0x93, 0xed, 0x53, 0x88, -0xd7, 0xbb, 0xf1, 0x9e, 0x24, 0xaf, 0x7e, 0xc4, -0xf8, 0x27, 0xa3, 0xa4, 0x53, 0xac, 0x16, 0x42, -0xf3, 0xeb, 0xef, 0x18, 0xb4, 0xf7, 0x29, 0x48, -0xe7, 0x42, 0x89, 0xb1, 0xd1, 0x5e, 0x31, 0xfd, -0x4c, 0x9e, 0x7e, 0xa7, 0xde, 0x0d, 0xea, 0xe1, -0x68, 0x78, 0x64, 0xd5, 0x41, 0xfe, 0x43, 0x7a, -0x22, 0x1e, 0xea, 0x2b, 0xfe, 0xf1, 0xf7, 0xac, -0xfa, 0xd1, 0xb7, 0xa7, 0x46, 0x70, 0xbf, 0x9f, -0x61, 0xb5, 0x79, 0xf1, 0x92, 0x7f, 0x39, 0x2d, -0xbe, 0x98, 0x57, 0x7f, 0xbf, 0x4c, 0x5e, 0x4d, -0x35, 0x83, 0xf3, 0xbd, 0xee, 0x26, 0xe9, 0x94, -0x96, 0x0f, 0xe1, 0xa7, 0x13, 0xfa, 0xfa, 0x54, -0xe9, 0x43, 0xb9, 0x57, 0xc6, 0xb9, 0x24, 0xc9, -0x62, 0x96, 0xff, 0xd4, 0xf0, 0x33, 0x61, 0xe2, -0x67, 0x56, 0xed, 0x96, 0x03, 0x6a, 0x21, 0x90, -0x2d, 0xa6, 0x7e, 0xbf, 0xc8, 0xe9, 0xf6, 0x54, -0xcb, 0x58, 0x19, 0xa7, 0x6e, 0xda, 0x9f, 0xbe, -0x3f, 0xcd, 0xf5, 0x6a, 0xc0, 0xe6, 0x9b, 0x36, -0x6c, 0x4d, 0x3d, 0x54, 0x39, 0x91, 0x0a, 0x67, -0x8b, 0xf6, 0x74, 0xbf, 0x40, 0x4e, 0xe8, 0xf9, -0x64, 0xd5, 0xc8, 0xa3, 0x7c, 0x04, 0x2f, 0x88, -0xb3, 0xec, 0x38, 0xd0, 0x5b, 0xfc, 0x13, 0x8a, -0x51, 0x3f, 0x9a, 0x36, 0x73, 0xd4, 0x52, 0x3f, -0x41, 0xd9, 0x3e, 0xee, 0xa4, 0xa5, 0x4e, 0xd6, -0x60, 0xe3, 0xce, 0x9a, 0xfc, 0x53, 0x58, 0x3e, -0x8a, 0xa6, 0x7a, 0x43, 0xfc, 0x6b, 0x14, 0xce, -0xbd, 0xb0, 0x9b, 0x39, 0xce, 0x55, 0xdd, 0x2c, -0xec, 0xfc, 0x27, 0x61, 0xf9, 0x25, 0xa4, 0x18, -0xc5, 0xac, 0xd0, 0xa9, 0xd5, 0x8f, 0xa8, 0xde, -0x97, 0xe1, 0x2a, 0x84, 0x1d, 0xb4, 0x72, 0x42, -0x7c, 0xd3, 0x5e, 0x01, 0xdf, 0xd5, 0x31, 0xeb, -0x63, 0xa3, 0xef, 0x7e, 0x91, 0x90, 0xbf, 0x23, -0x41, 0x75, 0x55, 0xb0, 0x54, 0x84, 0xb7, 0xa5, -0xe0, 0x11, 0xe4, 0x9f, 0xa6, 0x7e, 0x8f, 0xcc, -0x1f, 0x52, 0x66, 0xa5, 0x97, 0xd5, 0xc5, 0x1d, -0xfc, 0x99, 0xf8, 0x3f, 0x69, 0xf3, 0x2c, 0x1d, -0x37, 0x63, 0xf8, 0x6f, 0x4d, 0xb2, 0xf3, 0x1a, -0x6a, 0x45, 0xaa, 0xd4, 0x8f, 0x8d, 0x46, 0xbd, -0x7e, 0xa4, 0xf7, 0x8d, 0x3e, 0xfd, 0x7c, 0x62, -0x33, 0x59, 0xac, 0x16, 0xc5, 0x88, 0x9d, 0x6e, -0x36, 0xf8, 0xa7, 0xc9, 0xf9, 0xe0, 0x9b, 0x0a, -0x3b, 0xbf, 0x74, 0x7f, 0xc3, 0x6d, 0x15, 0xb0, -0x99, 0x2e, 0xd2, 0xf8, 0xa7, 0x64, 0xfa, 0xe7, -0xeb, 0xd0, 0x4d, 0x02, 0xd3, 0x62, 0x70, 0x77, -0xb1, 0xc8, 0xc3, 0x06, 0x1d, 0x3f, 0xf5, 0xbe, -0x49, 0xdb, 0x10, 0x1c, 0xa7, 0x77, 0x64, 0xec, -0xd9, 0xaa, 0x7b, 0x0a, 0xee, 0x67, 0x7b, 0x25, -0xcd, 0x5f, 0xb4, 0xf8, 0xa7, 0x2a, 0xcf, 0x48, -0x61, 0x27, 0x6e, 0x65, 0x35, 0x6e, 0xe9, 0x77, -0xd9, 0xf0, 0xa5, 0xf7, 0xe9, 0x31, 0xa2, 0x71, -0xa9, 0x85, 0xc8, 0x3f, 0xeb, 0x34, 0xfc, 0x34, -0xdf, 0x91, 0xf0, 0xfb, 0xf6, 0x2d, 0xf3, 0xd8, -0xb1, 0x1e, 0xfb, 0x42, 0x33, 0xc7, 0x99, 0x35, -0xd6, 0xee, 0x15, 0x16, 0xe0, 0x8f, 0x02, 0x5a, -0x8d, 0x48, 0xb1, 0xf2, 0x9f, 0x60, 0xdc, 0x53, -0x48, 0x68, 0xb4, 0xd3, 0x4d, 0xb4, 0xc6, 0x1c, -0xfc, 0x14, 0xd7, 0x45, 0x46, 0xd7, 0x84, 0x3d, -0x7d, 0x9b, 0xea, 0xad, 0xfc, 0xe0, 0xc7, 0xc4, -0xc8, 0x7f, 0x16, 0xbd, 0x81, 0xb0, 0xd9, 0x3c, -0x82, 0x61, 0xe8, 0xb2, 0x49, 0x44, 0xdf, 0x9b, -0xa7, 0xfb, 0xa7, 0xc8, 0x7d, 0xac, 0x1e, 0x83, -0x65, 0x6d, 0xce, 0x3e, 0xfe, 0x1b, 0x5a, 0x9e, -0x81, 0x60, 0x1f, 0x31, 0xf3, 0x9f, 0x3f, 0x23, -0x54, 0x0c, 0x08, 0xe2, 0x30, 0x72, 0xef, 0x9b, -0xeb, 0x47, 0xb6, 0x11, 0x95, 0x4d, 0xa1, 0xe7, -0xa1, 0x84, 0x0d, 0x76, 0xe9, 0x73, 0x79, 0xcb, -0xe2, 0x9f, 0x7f, 0x0d, 0x3f, 0xa0, 0x75, 0x4a, -0xcf, 0x69, 0x7b, 0x35, 0xfc, 0x40, 0x5b, 0x03, -0x32, 0x05, 0xbd, 0x2f, 0xfd, 0x17, 0x13, 0xe4, -0x18, 0x17, 0x6e, 0xf3, 0x3f, 0xc7, 0x2f, 0x20, -0x7f, 0x00, 0xe1, 0x96, 0xef, 0xe4, 0xe7, 0x3f, -0x93, 0xca, 0x9b, 0xd0, 0x14, 0x77, 0x79, 0xf9, -0xa3, 0xf4, 0x4d, 0xed, 0x20, 0x53, 0xd5, 0x69, -0x83, 0x83, 0x21, 0x7e, 0x26, 0xd8, 0xf9, 0x4f, -0x27, 0x85, 0x4a, 0xa2, 0xaf, 0xaf, 0x6a, 0xd8, -0xec, 0xc3, 0xd0, 0xb5, 0x95, 0xf3, 0x75, 0x21, -0xed, 0xac, 0x41, 0x61, 0xd6, 0xa8, 0xe5, 0x3f, -0xab, 0x75, 0xbb, 0xf8, 0x6d, 0x0f, 0x70, 0xa5, -0xcc, 0x3f, 0x1b, 0xdc, 0xdb, 0x59, 0x7e, 0x5e, -0xcf, 0x7f, 0xea, 0x57, 0x25, 0x57, 0xee, 0xdb, -0x9c, 0xae, 0xa4, 0xfe, 0xf5, 0xe4, 0x29, 0xf8, -0xbe, 0x76, 0xde, 0x2d, 0xa2, 0x2a, 0xc6, 0xb8, -0x9e, 0x30, 0x79, 0x8d, 0x2e, 0xc9, 0x3a, 0x67, -0x7a, 0xbf, 0x43, 0xfe, 0x37, 0x02, 0xe9, 0x6b, -0x9d, 0x55, 0xc3, 0xb2, 0xf1, 0x1e, 0xe6, 0x23, -0xff, 0x0c, 0x17, 0x53, 0xd7, 0xee, 0xd6, 0x0d, -0xec, 0x5c, 0xa5, 0xa6, 0x81, 0x92, 0xc6, 0x3e, -0xb2, 0x7d, 0x1c, 0x79, 0x1b, 0x69, 0x27, 0xda, -0x33, 0x0c, 0xda, 0x7e, 0x1f, 0xaa, 0x1a, 0xdf, -0xad, 0xf7, 0xfd, 0xa0, 0x64, 0x73, 0x7a, 0x33, -0xad, 0xed, 0x11, 0xa3, 0x89, 0x72, 0x46, 0x7c, -0xd5, 0x95, 0x4f, 0x90, 0xf3, 0x92, 0xe9, 0x9f, -0x49, 0xcd, 0x65, 0xa3, 0x31, 0xf2, 0xb0, 0xfc, -0x7d, 0xe6, 0xbb, 0x1b, 0xc9, 0x94, 0x95, 0xff, -0x9c, 0x92, 0x7a, 0x21, 0x90, 0x11, 0x81, 0x7c, -0x01, 0xb1, 0xc0, 0x89, 0x6b, 0x88, 0x98, 0xfe, -0x39, 0x50, 0x36, 0x85, 0xf0, 0x57, 0xa7, 0xfa, -0x97, 0x3a, 0x1e, 0x23, 0x1f, 0xa0, 0xde, 0x74, -0x65, 0xbe, 0xf8, 0x9e, 0xe9, 0x67, 0x68, 0xfc, -0x0f, 0x12, 0xe1, 0x27, 0xd1, 0x65, 0x11, 0x64, -0x49, 0x58, 0xbd, 0x03, 0x85, 0xbc, 0xd1, 0xc7, -0xc5, 0xae, 0x8b, 0xef, 0x72, 0x21, 0xfc, 0x51, -0x77, 0x00, 0x4e, 0x69, 0x7b, 0x4c, 0xce, 0x1a, -0xcf, 0x53, 0x85, 0xaf, 0xe2, 0xf3, 0x76, 0xa3, -0x19, 0xed, 0x4e, 0x5c, 0x9f, 0x46, 0x9c, 0xa6, -0x0d, 0xbb, 0x50, 0xa8, 0x86, 0xbf, 0x62, 0x14, -0x2a, 0x45, 0x02, 0xb4, 0x57, 0x3b, 0x44, 0xe9, -0x36, 0x7d, 0x57, 0x84, 0xea, 0x23, 0xdd, 0x10, -0xa7, 0x9a, 0x2e, 0x7e, 0x56, 0xb3, 0xf5, 0x33, -0xa6, 0x7f, 0x2a, 0xe2, 0x57, 0x07, 0xde, 0x85, -0xd0, 0x11, 0x47, 0x0a, 0xf5, 0xad, 0x5e, 0x9f, -0xe6, 0x4d, 0xde, 0xba, 0x7b, 0xfe, 0x14, 0xcc, -0x4a, 0xcd, 0x5d, 0xae, 0x23, 0xfc, 0x65, 0xa3, -0xae, 0xfd, 0x68, 0xb6, 0xd2, 0xd4, 0xda, 0x17, -0x30, 0x7c, 0x0d, 0x9e, 0xab, 0x53, 0xf9, 0x10, -0x1c, 0xe3, 0xea, 0xb3, 0x81, 0x99, 0xbc, 0xfa, -0xd1, 0x05, 0x89, 0x95, 0xdd, 0x31, 0xbe, 0xa7, -0x71, 0xd3, 0x1c, 0x40, 0x81, 0xac, 0x64, 0x21, -0xc7, 0x3f, 0xd9, 0x51, 0x44, 0x3b, 0x52, 0x09, -0xa9, 0xdb, 0xd6, 0x7e, 0x44, 0x0c, 0x16, 0xcc, -0x39, 0xff, 0x49, 0x6b, 0x46, 0x06, 0x20, 0x42, -0x9d, 0x5b, 0x68, 0x31, 0x12, 0xbf, 0x1c, 0xff, -0x44, 0x7b, 0x5e, 0x3a, 0xd6, 0x78, 0x66, 0x7b, -0xc6, 0xe1, 0x23, 0x47, 0x68, 0x03, 0x3b, 0xd0, -0x69, 0xd6, 0x8f, 0xa6, 0x35, 0xfd, 0x7e, 0x50, -0x5d, 0x7d, 0xbd, 0xfb, 0x17, 0xd2, 0x0d, 0xb8, -0x4b, 0x3b, 0xff, 0x69, 0xd5, 0x8f, 0xd0, 0xc4, -0xde, 0x90, 0xea, 0xdc, 0xef, 0xa8, 0x84, 0xb7, -0xe5, 0xd0, 0xb0, 0x2b, 0x77, 0x7e, 0xe9, 0x8c, -0x2d, 0x20, 0x1e, 0x52, 0x14, 0x8c, 0x39, 0x76, -0x36, 0xcf, 0xd0, 0xf8, 0xca, 0x4c, 0xde, 0xf9, -0xf9, 0x55, 0x30, 0x08, 0x69, 0x75, 0x91, 0x44, -0x04, 0x78, 0xfa, 0xa1, 0x6d, 0x4c, 0xbf, 0x77, -0x18, 0xf6, 0x64, 0xfa, 0xfd, 0x95, 0x74, 0x55, -0xf6, 0xd6, 0xdb, 0x12, 0x07, 0x94, 0xcd, 0xbb, -0x17, 0x4d, 0x3a, 0x66, 0x0a, 0xa2, 0x46, 0x5f, -0x14, 0xf5, 0xd1, 0xc5, 0xb4, 0x9c, 0xbd, 0xf7, -0x36, 0x87, 0x1d, 0xde, 0xa2, 0x4d, 0x59, 0xd7, -0x8b, 0xfc, 0x1a, 0x4b, 0xbf, 0xef, 0x51, 0x5e, -0x2c, 0x59, 0x3e, 0x56, 0xfc, 0x2c, 0x7f, 0xa6, -0xed, 0x2a, 0x87, 0x5c, 0x78, 0x6f, 0xbe, 0x7e, -0x17, 0xae, 0x32, 0x5c, 0xca, 0x38, 0x64, 0x78, -0x1d, 0x06, 0xd5, 0xd5, 0x0d, 0xad, 0x24, 0xa7, -0xdf, 0x3d, 0x2c, 0xff, 0x29, 0x4a, 0x05, 0x3b, -0xdd, 0x9b, 0xf5, 0x64, 0xbc, 0xdb, 0xd2, 0x32, -0xdf, 0x41, 0xda, 0xf9, 0xb5, 0x20, 0x74, 0x92, -0x10, 0x74, 0xd3, 0x75, 0xd9, 0xdb, 0x3b, 0xad, -0x1c, 0x12, 0x8b, 0xef, 0x83, 0x10, 0x58, 0xeb, -0x3f, 0x44, 0x06, 0x8c, 0x62, 0x03, 0xb9, 0xcd, -0xe4, 0x9f, 0x25, 0x03, 0xf0, 0x09, 0x34, 0x67, -0x9c, 0x53, 0x8e, 0x7b, 0xe8, 0x49, 0xbd, 0x90, -0xd4, 0x98, 0x57, 0x3f, 0xd2, 0x61, 0xb3, 0x3b, -0x2b, 0xeb, 0x42, 0x9e, 0x9f, 0x53, 0x7f, 0x87, -0x70, 0xfb, 0xaa, 0x3e, 0x9e, 0xe5, 0x3f, 0x1f, -0x67, 0x40, 0x7a, 0xd3, 0xf9, 0x4f, 0xe5, 0x0f, -0xfb, 0xe4, 0x6a, 0xa1, 0x4b, 0x68, 0x57, 0xc4, -0x9b, 0xea, 0xef, 0x50, 0x17, 0x13, 0x0f, 0x90, -0x00, 0xc1, 0xa0, 0x15, 0xbd, 0xf9, 0xfc, 0x12, -0x45, 0xa8, 0x7a, 0x06, 0x6d, 0xdd, 0x85, 0xbc, -0xce, 0x9f, 0x57, 0x7f, 0x2f, 0xd2, 0x53, 0x08, -0xce, 0x4d, 0x8e, 0xca, 0xc8, 0xe8, 0x83, 0x3e, -0x6e, 0xae, 0x7e, 0x87, 0xff, 0xc6, 0x2d, 0x57, -0x5c, 0x3f, 0xe5, 0xdf, 0x80, 0x1b, 0x52, 0xb3, -0xb2, 0x78, 0xae, 0x7e, 0x3f, 0x05, 0xac, 0xfe, -0xde, 0x5b, 0x0d, 0x4f, 0x79, 0xeb, 0x95, 0xd5, -0xe3, 0xfc, 0x49, 0x4b, 0xbf, 0xc7, 0x35, 0xd8, -0xec, 0x49, 0x46, 0xfc, 0x64, 0xab, 0x5c, 0x73, -0x13, 0x7e, 0xb2, 0x3c, 0x99, 0xd2, 0xee, 0x4e, -0x08, 0xbb, 0xb6, 0xc8, 0x1a, 0x17, 0xce, 0xaf, -0x1f, 0x6d, 0x81, 0x62, 0xc5, 0x9f, 0xd1, 0xce, -0x59, 0xd5, 0x28, 0xb7, 0xcf, 0xd1, 0xef, 0xc2, -0xb1, 0x3f, 0xaa, 0x88, 0x6c, 0x4b, 0x15, 0x2e, -0x94, 0x8e, 0xc5, 0x06, 0x5b, 0x56, 0xe7, 0xe1, -0x27, 0xd7, 0x4f, 0x0e, 0x31, 0xd8, 0x7c, 0xbe, -0xea, 0x7d, 0xf8, 0x15, 0xf5, 0xa3, 0x19, 0x25, -0x24, 0x39, 0xe9, 0x17, 0x71, 0xa1, 0xca, 0xa0, -0xe0, 0xcc, 0x3f, 0xff, 0x29, 0x0a, 0x2f, 0xb7, -0x2c, 0xda, 0x62, 0x9f, 0x70, 0xfb, 0xe1, 0x00, -0x54, 0xa5, 0x0a, 0xe6, 0xea, 0xf7, 0xbd, 0xb2, -0x9f, 0x8a, 0x83, 0x8c, 0x7f, 0x52, 0xf9, 0xf4, -0x96, 0x5c, 0xfd, 0x28, 0xcd, 0x95, 0xc3, 0xc1, -0xe4, 0x62, 0x6a, 0x8f, 0x93, 0xf2, 0xfb, 0xf6, -0x8b, 0x95, 0xe7, 0xde, 0xca, 0xd5, 0xdf, 0x07, -0xc4, 0x0a, 0xf8, 0x31, 0xbd, 0x3b, 0xbb, 0x6a, -0x6d, 0xd5, 0x3b, 0xf0, 0xdf, 0xe9, 0xc6, 0xac, -0xad, 0x93, 0xcf, 0xab, 0x1f, 0x31, 0xda, 0xa9, -0x3a, 0xfe, 0x86, 0x9f, 0x92, 0x67, 0xc0, 0xc3, -0xce, 0x87, 0xe4, 0xeb, 0xf7, 0xe7, 0xd2, 0x0d, -0xfd, 0x5f, 0xf8, 0x09, 0xff, 0x58, 0xdb, 0x6b, -0xcf, 0x86, 0x26, 0x9d, 0x0d, 0x2b, 0xbd, 0x26, -0xd6, 0x71, 0xdf, 0x19, 0x19, 0x1c, 0xaf, 0x4c, -0x8b, 0x35, 0xa4, 0x4e, 0x7e, 0x32, 0x2d, 0xf7, -0xfb, 0x1b, 0xed, 0x35, 0x96, 0x7e, 0xdf, 0x09, -0x7f, 0x21, 0x2e, 0x3a, 0xe3, 0x28, 0x21, 0xe5, -0x9b, 0x76, 0x70, 0x9f, 0x57, 0x1d, 0x8f, 0x13, -0x6a, 0xe6, 0x3f, 0x99, 0x7f, 0x72, 0xb2, 0x5a, -0xb8, 0x88, 0x38, 0x0b, 0x12, 0xb0, 0x10, 0xd0, -0x3f, 0x53, 0xa6, 0x7e, 0x2f, 0xd1, 0xce, 0xcd, -0x8c, 0xef, 0x18, 0xa8, 0x59, 0x0e, 0xc7, 0xd3, -0x07, 0x94, 0x3f, 0xcc, 0xf0, 0x2f, 0xe4, 0xce, -0x7f, 0xc2, 0x95, 0xf5, 0x61, 0xb5, 0xb8, 0x1f, -0xf1, 0x73, 0x46, 0x69, 0x54, 0xc4, 0x0c, 0xd7, -0x6e, 0x9e, 0xa1, 0x93, 0xae, 0x73, 0x37, 0xa0, -0x5e, 0x79, 0x20, 0x66, 0x6b, 0x92, 0x4f, 0xc2, -0xe7, 0xe3, 0xce, 0xe9, 0x56, 0x35, 0xaf, 0x7e, -0xb4, 0x57, 0x4d, 0x77, 0x6e, 0xef, 0xbf, 0x2d, -0x00, 0x54, 0x59, 0x16, 0x2f, 0x9a, 0x7b, 0xfe, -0xf3, 0x10, 0xf5, 0xc5, 0xa3, 0xec, 0x7b, 0x84, -0x17, 0x94, 0xba, 0xa8, 0x88, 0xf8, 0x59, 0x62, -0xf8, 0xa7, 0xc7, 0x09, 0x43, 0x1e, 0xdf, 0x4a, -0x7b, 0x95, 0xfd, 0x29, 0x92, 0x40, 0xc7, 0xb9, -0x35, 0x4f, 0xbf, 0xdb, 0x36, 0x28, 0x87, 0x94, -0xd0, 0x5a, 0xe7, 0xe9, 0x82, 0x97, 0x92, 0xe7, -0xe5, 0xf0, 0x1a, 0xe7, 0x01, 0x5e, 0x9d, 0x67, -0xe8, 0xf7, 0x07, 0xa7, 0x94, 0x99, 0x78, 0x73, -0xa4, 0xf8, 0xfd, 0xd2, 0x3f, 0x53, 0xae, 0x96, -0xdf, 0x69, 0x77, 0x7d, 0x9c, 0x77, 0x7e, 0x7e, -0x1a, 0x35, 0x60, 0x3d, 0xb8, 0x54, 0xbe, 0x03, -0xc6, 0x58, 0x00, 0x1d, 0xe7, 0x83, 0x29, 0xe3, -0xfc, 0x92, 0xf7, 0x3c, 0xf4, 0x50, 0x9f, 0xec, -0xe8, 0x21, 0x3e, 0x6c, 0xd4, 0xc8, 0xf6, 0x3e, -0x12, 0x34, 0x6b, 0xde, 0x90, 0x86, 0x5d, 0x44, -0x86, 0x95, 0xe0, 0xd3, 0x41, 0xbf, 0x30, 0x48, -0x42, 0xc6, 0x5e, 0x51, 0x85, 0x01, 0x3f, 0xca, -0x76, 0x74, 0x67, 0x0c, 0x5e, 0xe8, 0xe0, 0x82, -0x3d, 0xe3, 0x36, 0xc7, 0x71, 0x65, 0xe7, 0xd8, -0xe7, 0x43, 0xf1, 0xd5, 0x19, 0xc7, 0x42, 0x72, -0x8c, 0x2e, 0x8b, 0xa3, 0x9f, 0x81, 0x11, 0x57, -0xb2, 0x5c, 0x1f, 0x7c, 0x0c, 0xcd, 0xeb, 0x11, -0x36, 0x3f, 0x56, 0xfe, 0x39, 0xd5, 0x18, 0x77, -0x29, 0x8e, 0x1c, 0xff, 0xdc, 0x25, 0x5f, 0xf3, -0x84, 0x14, 0x67, 0x90, 0x17, 0x84, 0x37, 0x49, -0x50, 0x09, 0xa4, 0x79, 0x8f, 0x75, 0x7e, 0xa9, -0xa6, 0xaf, 0x37, 0xe1, 0x53, 0xc4, 0x21, 0x56, -0xd3, 0x40, 0x4d, 0x89, 0x81, 0xbe, 0x91, 0x82, -0x31, 0x97, 0x7b, 0x49, 0x86, 0xca, 0x54, 0xe4, -0x50, 0xe1, 0x3d, 0x03, 0xd8, 0x90, 0x48, 0x83, -0xd1, 0x17, 0x97, 0xbe, 0x0c, 0x94, 0xca, 0x69, -0x51, 0x24, 0x2f, 0x8a, 0x09, 0xf6, 0xfd, 0x91, -0xb7, 0x20, 0x9c, 0xd4, 0xfb, 0xa2, 0xe2, 0x0a, -0xf8, 0x88, 0x06, 0x69, 0x80, 0x73, 0x0c, 0xc0, -0x69, 0xc8, 0xa4, 0x9d, 0x4b, 0x1c, 0xb7, 0x99, -0xfa, 0xbd, 0x6c, 0x9b, 0x7a, 0x45, 0x0e, 0x27, -0xe7, 0x51, 0xae, 0x5d, 0xb9, 0x8a, 0xba, 0xc3, -0x75, 0xa8, 0x75, 0xdc, 0xd2, 0x6a, 0xfd, 0xce, -0x61, 0x08, 0x65, 0xd9, 0x67, 0x16, 0xec, 0xfb, -0x23, 0x15, 0x31, 0x6b, 0xd8, 0x38, 0x03, 0x12, -0x15, 0xb7, 0xc1, 0x93, 0xb0, 0x4b, 0x15, 0xf5, -0xfa, 0x3b, 0xe2, 0xa7, 0x42, 0x4c, 0xae, 0x28, -0xc3, 0x5f, 0x92, 0xcd, 0x7a, 0xd9, 0x08, 0x35, -0x10, 0xe3, 0xc2, 0xed, 0x56, 0xfe, 0xb3, 0x5d, -0xd8, 0x86, 0x3f, 0x92, 0xc7, 0xc5, 0x26, 0x56, -0x7f, 0x57, 0xe4, 0x33, 0x8e, 0x7e, 0x0b, 0x0b, -0x26, 0xcb, 0x46, 0xc9, 0x71, 0x94, 0xed, 0x81, -0x17, 0xf8, 0x9f, 0xa3, 0xf0, 0x1b, 0x4c, 0xb9, -0xb2, 0x39, 0xfe, 0xa9, 0xd7, 0x8f, 0x88, 0x8e, -0x9f, 0x62, 0x13, 0xec, 0x50, 0xbb, 0x2d, 0xfe, -0x89, 0x7c, 0xfe, 0x1c, 0xab, 0x33, 0xbb, 0xf9, -0x6a, 0x0d, 0x0b, 0x56, 0xa5, 0x4a, 0x89, 0x64, -0xbe, 0xbf, 0xf5, 0x9a, 0x19, 0x1d, 0x7d, 0x3e, -0x5d, 0xac, 0x23, 0x46, 0xca, 0x46, 0xae, 0xa4, -0xc1, 0xb6, 0x14, 0x7e, 0x28, 0x57, 0x29, 0x8e, -0x71, 0xb2, 0x14, 0xd8, 0xf7, 0x47, 0xe2, 0x38, -0x31, 0xb6, 0x2d, 0xf2, 0x2c, 0x0f, 0xdd, 0x24, -0x57, 0x46, 0x1d, 0x6b, 0x88, 0x87, 0xfe, 0x58, -0xae, 0x8d, 0x8a, 0xa7, 0xed, 0xe6, 0xf7, 0x47, -0x33, 0xf3, 0x59, 0xfe, 0x93, 0xd5, 0xa7, 0x1d, -0x5a, 0x7e, 0x10, 0xa3, 0x3f, 0xbf, 0xcc, 0x18, -0xd7, 0x33, 0x7f, 0xe2, 0xa1, 0x2b, 0x9e, 0x70, -0x9b, 0xeb, 0xe9, 0xd6, 0x89, 0x98, 0xde, 0xe0, -0xdf, 0x13, 0x4c, 0xfc, 0x7c, 0x83, 0xbe, 0x2e, -0x87, 0x23, 0xae, 0xd3, 0xdd, 0x13, 0x70, 0x9f, -0xd8, 0x8c, 0x98, 0xd5, 0xed, 0x23, 0xb9, 0xfa, -0xd1, 0x56, 0x46, 0x3b, 0x93, 0x91, 0x2c, 0xf3, -0xb3, 0xb2, 0xde, 0x24, 0x79, 0xd2, 0xd2, 0xef, -0x9b, 0xa0, 0xab, 0x2d, 0xa0, 0xf0, 0x12, 0x79, -0xd5, 0xd3, 0xc5, 0x69, 0xfc, 0xf3, 0x36, 0x63, -0xed, 0x7d, 0x42, 0x3f, 0xd1, 0xa9, 0x73, 0x44, -0x3f, 0x43, 0xd0, 0x9b, 0x22, 0x3f, 0x32, 0xf9, -0x27, 0xcb, 0x7f, 0xea, 0x47, 0x3b, 0xd9, 0x01, -0x05, 0x6c, 0xf4, 0xf1, 0x7e, 0xcb, 0x9e, 0x49, -0xe1, 0x0a, 0x67, 0xe5, 0x3c, 0xb0, 0xf1, 0x0c, -0x6f, 0xf2, 0x4f, 0x56, 0x3f, 0x3a, 0xa3, 0x0c, -0xb2, 0xb2, 0x11, 0x2e, 0x96, 0x60, 0xac, 0x02, -0x9e, 0x98, 0xdf, 0x26, 0xd9, 0xee, 0x86, 0xad, -0x5d, 0x3e, 0x2a, 0x0e, 0xb0, 0x1c, 0x35, 0xd4, -0x51, 0x47, 0x96, 0x8f, 0x98, 0xfc, 0x53, 0xb8, -0x8f, 0x3e, 0x9b, 0x42, 0xfe, 0x79, 0xb7, 0x4f, -0xcb, 0x7f, 0xaa, 0x2b, 0x65, 0x62, 0x8e, 0xa3, -0xd2, 0x5a, 0xd0, 0x7d, 0xa2, 0xa0, 0x9c, 0xd3, -0xc4, 0xb3, 0x4c, 0x14, 0xc5, 0xb0, 0x59, 0xcf, -0xef, 0xc0, 0xdf, 0xa3, 0x9b, 0x38, 0x3b, 0x1d, -0x86, 0x90, 0x6f, 0xe7, 0xcd, 0xa3, 0x46, 0x62, -0xd9, 0x80, 0x70, 0x8d, 0x43, 0x0a, 0x15, 0xe4, -0xa7, 0xc4, 0x3f, 0xd5, 0xce, 0x55, 0x5a, 0xb9, -0x6d, 0xc5, 0xf6, 0x42, 0xc4, 0x90, 0x99, 0x9f, -0xc0, 0x6c, 0x6a, 0x79, 0x56, 0x9c, 0xe4, 0xc7, -0x8d, 0x81, 0x2f, 0xdc, 0xba, 0x55, 0xdd, 0x2c, -0x6b, 0x47, 0x93, 0xce, 0x6a, 0xf9, 0xf9, 0xbe, -0x47, 0x42, 0xe7, 0x8d, 0xfd, 0x27, 0x41, 0x5f, -0x6a, 0xb3, 0x50, 0xab, 0xf6, 0x76, 0x90, 0x87, -0xe1, 0x60, 0x41, 0xad, 0x2a, 0xae, 0x77, 0x4f, -0x50, 0xd3, 0x3f, 0xb7, 0x6a, 0x12, 0x74, 0xa5, -0x9e, 0x83, 0x60, 0xdf, 0x1f, 0x85, 0x2c, 0x3d, -0x56, 0xf6, 0xde, 0x02, 0x43, 0x66, 0x6e, 0xd0, -0x92, 0x0a, 0xce, 0x3d, 0x7f, 0x67, 0xf2, 0xcf, -0x14, 0x37, 0x80, 0x3f, 0x6a, 0xd2, 0xeb, 0xef, -0x97, 0x70, 0xc2, 0x8b, 0xd3, 0xf3, 0xfe, 0xd1, -0x7c, 0x0f, 0x52, 0x4a, 0x3a, 0x95, 0x46, 0xfd, -0xde, 0xc1, 0x97, 0x3b, 0x4f, 0x91, 0x25, 0xaa, -0x98, 0x2d, 0x9d, 0x34, 0xe6, 0xb2, 0x0b, 0x43, -0x3a, 0xca, 0x61, 0xa6, 0xd1, 0x03, 0xc8, 0x3f, -0x7d, 0x47, 0x8a, 0xd2, 0x6b, 0x66, 0xda, 0xf4, -0xb5, 0xd3, 0x16, 0x39, 0xd8, 0x0b, 0xff, 0x45, -0x8d, 0xee, 0x2d, 0x08, 0x68, 0x67, 0x19, 0xb5, -0xf3, 0x9f, 0x86, 0x5d, 0x3c, 0x4e, 0x59, 0x3f, -0xbe, 0x82, 0xbc, 0x15, 0xb5, 0xe8, 0x78, 0xaf, -0xec, 0xce, 0xe5, 0x3f, 0xd7, 0x25, 0x7a, 0x95, -0x46, 0x35, 0x90, 0xe1, 0x03, 0x02, 0x3b, 0x40, -0x53, 0x9c, 0xe6, 0xcd, 0x9c, 0x40, 0xba, 0xec, -0x6c, 0xfa, 0x86, 0x1f, 0x69, 0xe7, 0x38, 0xaf, -0x7f, 0xd7, 0xf3, 0x54, 0x96, 0xcf, 0x26, 0x4d, -0xfc, 0xbc, 0x00, 0x33, 0x05, 0xf5, 0xba, 0x3d, -0xaf, 0x41, 0xbd, 0xea, 0xcc, 0xff, 0xfe, 0xe8, -0x02, 0x0c, 0x15, 0xb0, 0x63, 0x9f, 0xca, 0x05, -0x78, 0x85, 0x7e, 0x4f, 0x15, 0xe7, 0x7c, 0x7f, -0x04, 0x19, 0xa2, 0x7d, 0x76, 0x34, 0xe6, 0x65, -0x87, 0x67, 0xc5, 0xb9, 0xdf, 0x1f, 0x0d, 0xe9, -0x32, 0x7a, 0x8a, 0x1d, 0x5e, 0x67, 0x0b, 0x9d, -0x36, 0xf2, 0x36, 0x8c, 0x7f, 0xce, 0xe8, 0x69, -0xcf, 0x29, 0xf1, 0x1a, 0x09, 0xb1, 0x09, 0xe7, -0xd5, 0xdf, 0x3d, 0x9f, 0x1c, 0xd5, 0x8f, 0x7d, -0x7a, 0xb5, 0xda, 0xcb, 0xdc, 0xfc, 0xe7, 0x01, -0x39, 0x64, 0xd8, 0x1a, 0x79, 0x9d, 0x7f, 0x4e, -0xfd, 0x1d, 0xdd, 0x52, 0x4b, 0x7b, 0x4e, 0x09, -0x48, 0x28, 0x8f, 0x88, 0x99, 0x48, 0xde, 0xf9, -0x25, 0x29, 0xa3, 0x68, 0x67, 0x7b, 0xf1, 0xdd, -0x26, 0x31, 0x48, 0xe6, 0xbe, 0x3f, 0x8a, 0xb7, -0x54, 0xc0, 0x81, 0xcc, 0x2e, 0x26, 0x95, 0xdf, -0xa1, 0x07, 0x53, 0x95, 0x53, 0x85, 0xf9, 0xdf, -0x1f, 0x15, 0xab, 0x57, 0xd2, 0xc1, 0xec, 0x8e, -0x06, 0xfe, 0xa4, 0x72, 0x29, 0x15, 0xcc, 0x16, -0xe5, 0x7f, 0x7f, 0xc4, 0xce, 0xcf, 0x37, 0x33, -0xda, 0xa9, 0x25, 0x70, 0x8e, 0x14, 0xe7, 0x7f, -0x7f, 0x84, 0x31, 0x55, 0x1c, 0x34, 0xce, 0x64, -0xc8, 0xa1, 0xd1, 0x40, 0xfe, 0xf7, 0x47, 0xe5, -0x82, 0x7e, 0xec, 0xd3, 0x7d, 0x56, 0x7c, 0x25, -0xe6, 0x7f, 0x43, 0x9c, 0xf3, 0xfd, 0x11, 0x32, -0x6f, 0x2d, 0x85, 0xf0, 0x0e, 0x92, 0xe2, 0x05, -0x93, 0x22, 0xfb, 0xfe, 0x48, 0x5f, 0x9f, 0x96, -0x5f, 0x3a, 0x22, 0x9b, 0x39, 0xb2, 0x3a, 0x66, -0xeb, 0xfc, 0xef, 0x8f, 0xae, 0xd2, 0x90, 0x7e, -0x7e, 0xe9, 0x22, 0x2c, 0x63, 0xf5, 0xf7, 0x39, -0xdf, 0x1f, 0x55, 0x5a, 0xdf, 0x1f, 0xdd, 0x94, -0xff, 0x9c, 0x80, 0x6b, 0xca, 0xa0, 0xb2, 0x3a, -0xd5, 0x3a, 0xe1, 0xd1, 0xbf, 0xb3, 0x69, 0x9d, -0xc3, 0x3f, 0x61, 0xb7, 0xf2, 0x57, 0x5a, 0x8e, -0x53, 0x62, 0xe7, 0xe7, 0xf9, 0x74, 0x5e, 0xfe, -0x73, 0x2f, 0xa9, 0x51, 0x56, 0x22, 0xf6, 0x70, -0x87, 0x14, 0x8c, 0x55, 0xa9, 0x48, 0x3e, 0xff, -0xdc, 0x27, 0x6b, 0xc7, 0x3e, 0x47, 0x90, 0x54, -0xc9, 0x51, 0xe4, 0x9f, 0x89, 0xbc, 0xfa, 0xd1, -0x74, 0x8c, 0x51, 0xc4, 0xd6, 0x2c, 0x74, 0x42, -0xc8, 0xe3, 0xcc, 0xe5, 0x3f, 0xfb, 0xb4, 0xf3, -0xf3, 0xcb, 0x10, 0xcf, 0x18, 0x2e, 0x49, 0xe1, -0xb6, 0x1d, 0x29, 0xfe, 0x6f, 0x8c, 0xfc, 0x27, -0xab, 0xbf, 0xdf, 0xf0, 0xb3, 0x73, 0x56, 0xd8, -0x77, 0x43, 0xd4, 0x0e, 0x16, 0xe5, 0xbe, 0x3f, -0xca, 0xc2, 0x50, 0x7c, 0x10, 0xef, 0xe9, 0x63, -0x89, 0x50, 0xdf, 0xfc, 0xde, 0x39, 0xdf, 0x1f, -0xc1, 0x5e, 0xa7, 0x46, 0x3b, 0x47, 0xa4, 0xbd, -0x20, 0x47, 0x1c, 0x79, 0xdf, 0x1f, 0x21, 0xff, -0x3c, 0x14, 0x5f, 0x38, 0x37, 0x87, 0x9b, 0xf7, -0xfd, 0xd1, 0x15, 0x45, 0x3f, 0x2f, 0x25, 0x5c, -0x81, 0x41, 0xed, 0xfc, 0xa7, 0xf5, 0xfd, 0x51, -0x3f, 0x5c, 0x11, 0x1a, 0xf3, 0xf0, 0x93, 0x7d, -0x7f, 0xa4, 0x8f, 0x33, 0xf8, 0xa7, 0x66, 0x6b, -0xef, 0x8c, 0x26, 0xe4, 0xe7, 0x7c, 0x7f, 0xf4, -0x72, 0x0f, 0xd3, 0x9b, 0xee, 0x49, 0x38, 0x90, -0xf2, 0xd1, 0x9b, 0xea, 0xef, 0x87, 0xa9, 0xf1, -0x6e, 0x07, 0xb1, 0xd1, 0x93, 0xcb, 0x7f, 0x32, -0xfe, 0x79, 0xc0, 0x3c, 0x33, 0x74, 0x40, 0xac, -0x9c, 0x14, 0x3b, 0xdc, 0x79, 0xdf, 0x1f, 0xc1, -0x2c, 0x3b, 0xbf, 0xc4, 0xf2, 0x9f, 0x97, 0x92, -0xf5, 0x33, 0x81, 0xce, 0x39, 0xe7, 0xe7, 0xaf, -0x02, 0x3b, 0x4e, 0xa9, 0xf9, 0xe7, 0xcb, 0x6f, -0xcd, 0x39, 0xbf, 0x74, 0x01, 0x6e, 0xd0, 0x30, -0xee, 0xf7, 0x79, 0xfa, 0xf7, 0x86, 0xb8, 0xdf, -0xf3, 0xbe, 0x3f, 0xa2, 0xfb, 0xd3, 0x81, 0x49, -0x47, 0xe3, 0x2d, 0x27, 0xe1, 0x60, 0x56, 0x9e, -0x14, 0x1b, 0xad, 0x6f, 0x85, 0x90, 0x7f, 0xd2, -0x83, 0x0c, 0x5b, 0x1f, 0x77, 0x9f, 0xa5, 0x07, -0x25, 0x79, 0x54, 0x7c, 0xdc, 0x8a, 0xef, 0x1a, -0xff, 0xa4, 0x7a, 0x0e, 0x57, 0x60, 0x07, 0x84, -0xe6, 0x7c, 0x7f, 0xb4, 0x87, 0x1d, 0x01, 0xd0, -0xf7, 0xfb, 0x47, 0xb0, 0x8f, 0xed, 0x77, 0xf3, -0x9e, 0x29, 0xe4, 0x9f, 0x48, 0x3f, 0x8c, 0xbd, -0xd2, 0xc2, 0x3e, 0x4a, 0xb4, 0xf2, 0x9f, 0x94, -0xd5, 0xdf, 0x49, 0xbd, 0x71, 0xee, 0x89, 0xe1, -0xd2, 0xdc, 0xef, 0x8f, 0x5e, 0x54, 0x7c, 0x47, -0x7a, 0x33, 0xbe, 0x29, 0xe1, 0xb0, 0xca, 0xea, -0xef, 0xbe, 0x7c, 0xfe, 0x99, 0x51, 0x16, 0x1a, -0xd8, 0x43, 0x65, 0x75, 0x6e, 0xfd, 0x5d, 0xcd, -0x04, 0xe5, 0x31, 0x76, 0xe6, 0xb2, 0x6b, 0x5f, -0x95, 0x3c, 0x3a, 0x19, 0xb4, 0xce, 0xcf, 0xd3, -0xa2, 0x0d, 0xe9, 0x6b, 0x10, 0x1a, 0x75, 0x1d, -0xec, 0xfe, 0x30, 0x73, 0xcd, 0x5d, 0x3f, 0xee, -0x3c, 0x58, 0x6a, 0xd5, 0xdf, 0xe7, 0x5f, 0x4f, -0x5e, 0x8d, 0x37, 0x8f, 0x9d, 0x1a, 0x6c, 0x9d, -0x4a, 0xcf, 0x06, 0xc3, 0x27, 0x5d, 0x83, 0x56, -0xfe, 0x13, 0xd4, 0x16, 0x5b, 0x87, 0x72, 0x56, -0xfa, 0x9c, 0x60, 0x7b, 0x95, 0xdb, 0xb8, 0xe5, -0xe1, 0xe8, 0x97, 0x84, 0xf9, 0xaa, 0x3e, 0x4d, -0x80, 0x57, 0xdb, 0x6c, 0x1b, 0x61, 0x55, 0xcb, -0xe7, 0xa4, 0xb2, 0xa3, 0x05, 0x72, 0xb0, 0x7c, -0x55, 0x95, 0x64, 0x53, 0x97, 0xc4, 0x8c, 0x71, -0x11, 0x0e, 0xc9, 0x9c, 0xec, 0x16, 0x85, 0x27, -0x5b, 0xe4, 0xfd, 0xd1, 0x0d, 0x44, 0x14, 0xa8, -0x71, 0xde, 0x14, 0xf9, 0x28, 0x2a, 0xc8, 0xb5, -0x70, 0x0b, 0xd8, 0x68, 0x65, 0x47, 0x61, 0xd4, -0xee, 0x96, 0x6d, 0xd4, 0xba, 0x67, 0x94, 0x7b, -0x1c, 0x1e, 0xa6, 0x9f, 0x93, 0x6d, 0xa3, 0x9b, -0xfe, 0xb8, 0xe1, 0xbe, 0xa5, 0xee, 0xf5, 0x1e, -0x6a, 0xde, 0xf3, 0xd5, 0x18, 0xc4, 0x39, 0x2f, -0xac, 0x80, 0x12, 0x0a, 0xf1, 0x07, 0x45, 0x21, -0xc2, 0x01, 0x5d, 0x62, 0x8e, 0x53, 0x40, 0xe6, -0x44, 0x88, 0x80, 0x44, 0x85, 0x2a, 0x4e, 0xa4, -0xac, 0x61, 0xf5, 0x7d, 0xb1, 0x4c, 0xe9, 0x8a, -0xc9, 0x0f, 0x89, 0x65, 0x3c, 0x17, 0xc9, 0x2a, -0x93, 0x92, 0xb7, 0x0c, 0x4a, 0x8c, 0x7b, 0x52, -0x27, 0xf7, 0x39, 0x68, 0x51, 0xa5, 0x0e, 0xc1, -0xc9, 0xdd, 0x29, 0xb7, 0xac, 0x95, 0xbe, 0x21, -0x40, 0xa5, 0x31, 0x8e, 0x2a, 0x02, 0x9b, 0x31, -0xb3, 0xae, 0x70, 0x2b, 0x67, 0x8f, 0x22, 0x41, -0xe5, 0x8c, 0xfa, 0x11, 0xbc, 0x1a, 0x27, 0x5e, -0x2e, 0x81, 0xbf, 0x83, 0xce, 0xee, 0x05, 0x22, -0x41, 0xd2, 0xcb, 0x99, 0xf3, 0x3c, 0x12, 0xe3, -0xd6, 0xc3, 0x7d, 0xb0, 0x46, 0x29, 0xa7, 0xb6, -0xf5, 0xdc, 0x7d, 0xa8, 0x7e, 0x1f, 0xa2, 0xe6, -0x3d, 0x5f, 0x85, 0x42, 0xb6, 0xf6, 0x65, 0x50, -0x44, 0x39, 0x56, 0x2e, 0x5d, 0x83, 0x46, 0xb0, -0xe6, 0x19, 0x29, 0x08, 0x76, 0x39, 0x65, 0x5e, -0x04, 0x74, 0x67, 0x34, 0x1e, 0xd2, 0x11, 0xcb, -0x9e, 0x49, 0x31, 0x16, 0x62, 0xa2, 0x8f, 0x65, -0x07, 0x65, 0x41, 0x64, 0x7f, 0x23, 0x41, 0xb5, -0xec, 0xe9, 0xe0, 0x42, 0xea, 0x2a, 0x2d, 0x32, -0x72, 0x41, 0x1a, 0x45, 0xa3, 0xb7, 0xa9, 0xb2, -0x79, 0xcf, 0xd6, 0x05, 0x71, 0x35, 0x1a, 0xbc, -0xc5, 0x29, 0x74, 0xdb, 0x3a, 0xb4, 0x3e, 0x5b, -0xce, 0x9e, 0x11, 0x78, 0xbc, 0x4b, 0x94, 0x57, -0xf8, 0x25, 0xb4, 0x27, 0xa0, 0xf1, 0xc4, 0x3c, -0x9b, 0xad, 0x11, 0x16, 0x76, 0x15, 0xa6, 0x23, -0xed, 0xd2, 0xf3, 0x42, 0x35, 0x2d, 0x0c, 0x46, -0xa2, 0x79, 0x7d, 0xf8, 0x16, 0xb8, 0x08, 0xc4, -0xa8, 0x47, 0x36, 0x1b, 0x60, 0xde, 0x93, 0x16, -0x70, 0x2d, 0x34, 0x16, 0xf7, 0x78, 0x6d, 0x05, -0xdc, 0x7d, 0x94, 0xc4, 0x25, 0xaf, 0x79, 0x02, -0x19, 0xfb, 0xdc, 0x36, 0x01, 0x09, 0x80, 0x14, -0x15, 0x9e, 0x31, 0x1a, 0xa6, 0x44, 0xc0, 0x7b, -0xae, 0xe0, 0x1f, 0xa4, 0x6f, 0xc4, 0xff, 0xd8, -0x3b, 0x9f, 0x35, 0x70, 0x3a, 0x5e, 0x50, 0xac, -0x79, 0xae, 0x28, 0xdc, 0xd8, 0x75, 0x36, 0xfe, -0x25, 0x6f, 0xd9, 0x51, 0x5b, 0x47, 0xd7, 0xc3, -0xf2, 0x7f, 0xf5, 0x96, 0x59, 0x73, 0xb9, 0x37, -0xc2, 0x6d, 0xa4, 0x67, 0xe3, 0x77, 0x79, 0x8b, -0x8e, 0x72, 0x1d, 0xf4, 0x6c, 0xe5, 0x5d, 0xe2, -0x7c, 0xb5, 0xc4, 0xec, 0x5b, 0x51, 0xb0, 0x84, -0x3a, 0xe3, 0xf3, 0xbc, 0xca, 0xd1, 0x82, 0x3f, -0xa6, 0x45, 0xf1, 0x2a, 0xaf, 0x48, 0xcd, 0xf7, -0x0e, 0x84, 0x7b, 0x84, 0xf9, 0xa7, 0x1f, 0xb6, -0xa2, 0xa3, 0x3a, 0xe5, 0x5b, 0xd0, 0x3f, 0x8d, -0x7d, 0x04, 0x50, 0xc0, 0x55, 0x25, 0xa3, 0xd3, -0xee, 0x06, 0x61, 0x3b, 0x57, 0x49, 0xd7, 0xc6, -0xdd, 0x5e, 0xec, 0x33, 0xef, 0xa9, 0x94, 0x75, -0xc0, 0x2a, 0x28, 0x05, 0x41, 0xb5, 0x75, 0xc8, -0x51, 0xc2, 0x1a, 0xe6, 0x3d, 0xef, 0x8d, 0x40, -0x1c, 0xed, 0x89, 0x66, 0x4c, 0x40, 0x3c, 0x2d, -0xfa, 0x89, 0x5d, 0xa2, 0xd6, 0x5c, 0x22, 0x82, -0xdc, 0xe5, 0x95, 0x57, 0x88, 0x25, 0x09, 0x01, -0x37, 0x06, 0xf6, 0x95, 0xe4, 0xf5, 0x55, 0x2a, -0x47, 0x1e, 0x0a, 0xde, 0xeb, 0x2c, 0x8b, 0x70, -0x4a, 0x97, 0x22, 0xbb, 0x9d, 0x36, 0x25, 0x6f, -0x9e, 0x31, 0xfa, 0x90, 0x5c, 0x26, 0xda, 0x22, -0xd8, 0x50, 0xe4, 0x12, 0x71, 0x93, 0x39, 0x4b, -0x96, 0xb1, 0x53, 0x30, 0x6e, 0x15, 0x40, 0x8b, -0x28, 0x20, 0x3e, 0x08, 0xc0, 0x71, 0x56, 0xd7, -0xbd, 0x11, 0x22, 0x77, 0x51, 0x39, 0x2e, 0x7a, -0xdd, 0x09, 0x61, 0x80, 0x5b, 0x08, 0xa2, 0xd7, -0xf2, 0xf9, 0x7b, 0x95, 0x79, 0x71, 0x65, 0x2d, -0xfc, 0xb6, 0x50, 0xd6, 0x75, 0x6f, 0xbc, 0x04, -0x35, 0x29, 0x94, 0x59, 0x73, 0x79, 0x55, 0xe1, -0x82, 0xa0, 0x67, 0x6a, 0x5b, 0x64, 0xf9, 0x4c, -0xd1, 0x2d, 0x50, 0x6e, 0xad, 0x1d, 0x0d, 0x83, -0xaf, 0x8b, 0xa2, 0xeb, 0xf5, 0x2c, 0x94, 0xfd, -0x62, 0x41, 0x81, 0x00, 0xb9, 0x3e, 0x89, 0x89, -0x4c, 0x20, 0x0a, 0xc2, 0xde, 0x02, 0xa9, 0x30, -0x4e, 0x62, 0x79, 0x7d, 0x02, 0xb7, 0x04, 0xa2, -0x8a, 0x5b, 0x12, 0xfa, 0xb9, 0x45, 0x70, 0xbf, -0x52, 0x5a, 0xee, 0x51, 0xad, 0xbe, 0x2a, 0x5b, -0xbb, 0xfa, 0x3b, 0xc1, 0x5b, 0xb6, 0xd9, 0x76, -0xdb, 0xda, 0xe9, 0xfd, 0x71, 0xf7, 0xce, 0x92, -0x39, 0xf7, 0xe4, 0x0a, 0x21, 0xa2, 0x48, 0x29, -0xb8, 0x53, 0xd1, 0x6e, 0x9e, 0xeb, 0x13, 0x85, -0x78, 0x89, 0x57, 0x58, 0xc1, 0x95, 0xf4, 0xb4, -0x05, 0x25, 0xb1, 0x80, 0x70, 0x4f, 0xe7, 0xcd, -0xb3, 0x25, 0x56, 0xe2, 0x11, 0x7e, 0x8b, 0x2b, -0x53, 0x5a, 0xa4, 0x12, 0x45, 0x78, 0x90, 0xb3, -0xe5, 0xd9, 0xac, 0x32, 0x22, 0x3e, 0x94, 0x28, -0x93, 0x37, 0x45, 0x2b, 0x23, 0x7e, 0x05, 0x1b, -0xc9, 0xdc, 0x30, 0x3b, 0x47, 0xa8, 0x92, 0x96, -0xfc, 0x60, 0x5f, 0x80, 0x8d, 0xdd, 0x8a, 0x3f, -0xd7, 0x05, 0x4e, 0xfe, 0x41, 0xee, 0x39, 0x15, -0xfd, 0xb9, 0x8d, 0xff, 0x22, 0xcb, 0x6b, 0x06, -0xbd, 0x79, 0xf7, 0x9c, 0x87, 0x98, 0x05, 0x5f, -0x92, 0xcb, 0x46, 0x6d, 0x8f, 0x97, 0x3c, 0x9c, -0xf8, 0x92, 0xaf, 0x2c, 0xb7, 0x3e, 0x94, 0xcf, -0xaa, 0x14, 0x44, 0x74, 0xa9, 0x32, 0x1b, 0xb9, -0x7b, 0x36, 0xcf, 0xae, 0x9e, 0xfd, 0xfb, 0xd9, -0xcb, 0xb3, 0x37, 0xac, 0x06, 0xfc, 0xab, 0xae, -0x65, 0x6f, 0x3b, 0x96, 0x0d, 0xbf, 0x9e, 0xd9, -0xb7, 0x21, 0xf0, 0xae, 0x3e, 0x6e, 0x2a, 0xd7, -0xf7, 0xf9, 0xa6, 0x55, 0xa7, 0x4a, 0xeb, 0x47, -0xc6, 0x3e, 0xaa, 0x6f, 0xd6, 0xfb, 0x3e, 0xca, -0x7b, 0x9e, 0x37, 0x7a, 0xd4, 0xbd, 0x24, 0xb9, -0x6d, 0xdd, 0x3d, 0x66, 0x23, 0xd7, 0x67, 0x23, -0x1b, 0x95, 0x9d, 0xb1, 0x79, 0x9e, 0xc2, 0x57, -0x59, 0xa3, 0xe3, 0x2e, 0x4f, 0x61, 0x6e, 0x0d, -0xc2, 0xbc, 0x8d, 0xdc, 0xc3, 0xb8, 0xff, 0x6c, -0x23, 0x1c, 0x36, 0xf0, 0x45, 0x96, 0xe4, 0xfa, -0x0a, 0x70, 0xfb, 0x44, 0x81, 0xe1, 0x3c, 0xee, -0x95, 0xe8, 0x9c, 0xbd, 0x82, 0x20, 0xb5, 0x0e, -0xf7, 0xf1, 0x0a, 0x89, 0xd3, 0x37, 0x74, 0x01, -0xe4, 0xb0, 0x00, 0xdf, 0xdf, 0xe3, 0xe8, 0x5a, -0xbf, 0x29, 0x73, 0xa3, 0x08, 0x42, 0xe5, 0xb4, -0xd4, 0x9f, 0x77, 0x4f, 0x80, 0x75, 0x1c, 0xfb, -0x75, 0xdc, 0x2b, 0x6c, 0xdc, 0x0a, 0xe0, 0x72, -0xf7, 0xf4, 0x08, 0x0b, 0xba, 0x34, 0x9f, 0x78, -0x4e, 0x58, 0xc8, 0x15, 0x2a, 0x91, 0x3f, 0x92, -0x72, 0x7d, 0x55, 0x10, 0xed, 0x72, 0x83, 0xd0, -0x57, 0xe2, 0x13, 0xee, 0xe7, 0xdc, 0xf2, 0xbd, -0x03, 0x25, 0xd6, 0xd3, 0x54, 0x27, 0xee, 0x59, -0x94, 0x03, 0x0d, 0xe0, 0x04, 0x9e, 0x22, 0x1f, -0x0d, 0x72, 0x46, 0x48, 0xc5, 0x9f, 0xde, 0x02, -0x65, 0xc0, 0x65, 0x85, 0x98, 0x72, 0x8b, 0x64, -0x63, 0xb1, 0x29, 0xc6, 0x19, 0x61, 0x1a, 0xc7, -0x29, 0x88, 0xed, 0x2c, 0x13, 0xc5, 0xe6, 0x03, -0x3a, 0x4e, 0xe6, 0xfa, 0x84, 0x38, 0xc6, 0x9c, -0xdf, 0x63, 0x31, 0x47, 0x0f, 0x3e, 0x25, 0x66, -0x1c, 0x93, 0x38, 0xc5, 0x13, 0xb7, 0x79, 0x69, -0x01, 0x14, 0xb2, 0x31, 0x7d, 0xf8, 0x4b, 0x85, -0x09, 0xe3, 0x71, 0x0a, 0x62, 0x81, 0xd4, 0xb5, -0x4d, 0x6e, 0x15, 0x25, 0xa4, 0xa4, 0x1a, 0xe0, -0x4b, 0x26, 0x86, 0x28, 0x78, 0xfb, 0x10, 0x9b, -0x22, 0xc3, 0xf9, 0x20, 0x63, 0x59, 0x8c, 0x3b, -0x1b, 0xe3, 0x14, 0x07, 0x84, 0x54, 0x67, 0xb0, -0x95, 0x65, 0xe0, 0x83, 0xd4, 0x99, 0x69, 0x15, -0x8d, 0xbf, 0xd2, 0xc3, 0xee, 0xd9, 0x0a, 0x1d, -0x48, 0x4c, 0x7e, 0x5b, 0xfb, 0x0b, 0x28, 0x5d, -0xde, 0x20, 0x02, 0x0d, 0xb5, 0xee, 0x89, 0xb8, -0x84, 0x58, 0x87, 0x8f, 0xd1, 0xb0, 0x47, 0x26, -0xa2, 0xb5, 0x8f, 0x62, 0x08, 0xdf, 0xec, 0x47, -0x2b, 0xb4, 0x3e, 0x04, 0xa8, 0x88, 0x68, 0xed, -0x3f, 0xe5, 0x5e, 0x3d, 0xfe, 0x71, 0xa0, 0x61, -0x8b, 0x07, 0x9b, 0x0f, 0x46, 0x8c, 0x7b, 0x46, -0x19, 0xea, 0x50, 0x29, 0x2e, 0x78, 0x39, 0xbd, -0x21, 0x79, 0x2d, 0xbf, 0x8e, 0x2a, 0xc4, 0x06, -0x08, 0x63, 0x92, 0x28, 0x60, 0x83, 0x6a, 0x0d, -0xb0, 0xe6, 0xa9, 0xe3, 0xfc, 0x9d, 0xde, 0x22, -0xd6, 0x18, 0x89, 0x7f, 0xd5, 0x5b, 0x94, 0xc3, -0xba, 0x15, 0xb0, 0xb1, 0xab, 0x3c, 0xfe, 0xfb, -0xde, 0x92, 0xa3, 0xc2, 0xc6, 0xae, 0x55, 0xf1, -0xdf, 0xf4, 0x5a, 0x3e, 0xa1, 0x70, 0x2b, 0x60, -0x09, 0xdd, 0x19, 0xff, 0x9c, 0xf7, 0xd6, 0xa3, -0x05, 0x1b, 0xbb, 0x76, 0xc6, 0x3f, 0xef, 0xb5, -0xfc, 0x33, 0xa6, 0xe1, 0xbc, 0x88, 0xbf, 0x1e, -0x3d, 0x0a, 0x4b, 0xba, 0x1e, 0xc6, 0xc8, 0x5c, -0x36, 0x6c, 0xae, 0x9d, 0x73, 0x73, 0xd5, 0xf4, -0x3e, 0xb9, 0x94, 0x05, 0x6f, 0xd6, 0x70, 0x47, -0x05, 0x13, 0xe7, 0x15, 0x5c, 0x43, 0x25, 0x8e, -0x5b, 0xe1, 0x85, 0x27, 0xa1, 0xb2, 0xcb, 0xcb, -0x22, 0x3a, 0x35, 0xbe, 0x2f, 0x86, 0x7b, 0xe3, -0x42, 0x27, 0x14, 0xc3, 0x6f, 0x52, 0x29, 0x2b, -0x34, 0x70, 0xc5, 0xe8, 0x33, 0xb9, 0x77, 0xc4, -0xad, 0x81, 0xf5, 0x5d, 0x85, 0x72, 0x81, 0x7e, -0xcf, 0x42, 0x39, 0x12, 0x45, 0x3e, 0x67, 0xcc, -0xd3, 0x46, 0x4c, 0x33, 0x26, 0x84, 0x47, 0x74, -0xc0, 0xb7, 0xfa, 0x30, 0x3e, 0x28, 0x47, 0x3c, -0x32, 0x42, 0x40, 0xab, 0x10, 0x53, 0x3d, 0x08, -0xf8, 0x25, 0x4a, 0xde, 0x3b, 0xc2, 0x30, 0x1a, -0xb4, 0x89, 0xf8, 0x42, 0xd6, 0x60, 0x60, 0xb5, -0x39, 0xd1, 0x3f, 0x8d, 0x3e, 0x41, 0xc3, 0x79, -0xaa, 0x19, 0x51, 0xd1, 0x5f, 0x86, 0x69, 0x6b, -0xbc, 0x27, 0x01, 0xc4, 0x79, 0x59, 0xf4, 0x92, -0x02, 0x99, 0x22, 0xe0, 0xfb, 0x45, 0xb0, 0xe6, -0x09, 0x05, 0x8c, 0x2f, 0xfd, 0x1e, 0xba, 0xa5, -0x60, 0x11, 0x27, 0xd3, 0x9e, 0xa0, 0xe1, 0xf5, -0x3c, 0xc5, 0x3b, 0x4e, 0xaa, 0xe1, 0x5b, 0xf0, -0x88, 0x52, 0x98, 0x7b, 0xef, 0xf1, 0x02, 0x91, -0xb3, 0xc3, 0x0a, 0x8a, 0x32, 0xdf, 0x8f, 0x6b, -0xf7, 0xe5, 0xd6, 0x1e, 0x13, 0x38, 0xa8, 0x8c, -0x89, 0x31, 0x52, 0xc6, 0xfe, 0x94, 0x4d, 0xcc, -0xf9, 0x10, 0xf1, 0xa0, 0x7f, 0x9a, 0xf6, 0x6c, -0x03, 0x1b, 0x14, 0x76, 0xb4, 0xc6, 0x3c, 0x6f, -0xc0, 0x02, 0x28, 0x8a, 0x93, 0xdf, 0x86, 0x61, -0x6b, 0xed, 0xad, 0x42, 0x5c, 0x91, 0xa4, 0xb6, -0xf2, 0x92, 0x6e, 0x14, 0xa6, 0x5e, 0x69, 0x45, -0x45, 0xce, 0x3f, 0x39, 0x9d, 0xbb, 0x61, 0x5c, -0x49, 0x0a, 0xda, 0x9f, 0x45, 0x92, 0xc1, 0x7a, -0x47, 0x9c, 0xd8, 0x86, 0x38, 0x4f, 0x11, 0xe7, -0xe9, 0x7a, 0x1d, 0xf0, 0x9f, 0xce, 0xd9, 0x53, -0x51, 0x62, 0x1b, 0x3d, 0x60, 0xb3, 0x71, 0x2d, -0x23, 0xb1, 0x07, 0x3d, 0x82, 0x4d, 0xca, 0xd9, -0x53, 0x10, 0xd3, 0x11, 0xd1, 0xb3, 0x55, 0xa8, -0xec, 0x42, 0x9c, 0x07, 0xcf, 0x93, 0x36, 0x19, -0xed, 0x69, 0xbc, 0x5b, 0xce, 0x6e, 0x23, 0xda, -0xda, 0x04, 0x0d, 0xf0, 0xf7, 0x80, 0xdf, 0xc2, -0x25, 0xe5, 0xde, 0x07, 0xf8, 0x2f, 0x2a, 0xc9, -0xd3, 0x77, 0x2e, 0x5d, 0xfb, 0xc0, 0xbc, 0x52, -0xe5, 0xb9, 0xb3, 0xeb, 0x96, 0x16, 0x5a, 0xf7, -0xe4, 0xa2, 0xf2, 0xe3, 0x95, 0x3b, 0xe1, 0xf7, -0x71, 0x2e, 0x6d, 0x8f, 0x94, 0x3c, 0x2c, 0xcc, -0x83, 0x3c, 0x9c, 0xd7, 0xe1, 0x1d, 0x21, 0xb5, -0xca, 0x1b, 0x1d, 0x61, 0xd8, 0xfa, 0xef, 0x80, -0xf3, 0xb5, 0x9f, 0x32, 0xae, 0xfe, 0x53, 0xfa, -0x18, 0xbc, 0x97, 0x1e, 0xd4, 0xe7, 0xf2, 0xda, -0x33, 0x4b, 0x92, 0x4f, 0x5d, 0xc9, 0xf5, 0x91, -0x24, 0xec, 0x62, 0x07, 0x0f, 0x25, 0xab, 0x91, -0xeb, 0xc3, 0x0d, 0xcb, 0x19, 0x1b, 0xd6, 0x68, -0xe4, 0x4d, 0x26, 0x89, 0xbc, 0x58, 0x64, 0x68, -0x68, 0x35, 0x72, 0xd7, 0x5c, 0xd7, 0x54, 0x20, -0xbf, 0x0f, 0xc1, 0x73, 0x4c, 0x7b, 0xb9, 0xdd, -0x41, 0xa3, 0x91, 0x9b, 0x8b, 0xd6, 0x0b, 0x62, -0xae, 0x61, 0xcd, 0x84, 0xf1, 0x0c, 0x59, 0x3b, -0x3e, 0x69, 0xfd, 0x0a, 0xb1, 0xfa, 0xd8, 0x7f, -0x8d, 0x69, 0x3f, 0xe6, 0x43, 0x7a, 0x7f, 0xae, -0xcf, 0x9e, 0x24, 0xbb, 0x60, 0x40, 0xa9, 0x91, -0xf4, 0x06, 0xd4, 0x48, 0xb9, 0x27, 0xde, 0xb4, -0xbe, 0xca, 0xdc, 0xfa, 0xc4, 0x9b, 0xd7, 0x57, -0x49, 0xac, 0x71, 0xa2, 0xc4, 0xfe, 0x3e, 0xda, -0x18, 0x2e, 0xab, 0x5c, 0xc5, 0x86, 0xb6, 0x3e, -0x22, 0x58, 0xe3, 0x36, 0x07, 0xf1, 0xd7, 0xbf, -0x8e, 0xe3, 0xcc, 0x46, 0xee, 0x79, 0x84, 0x11, -0x24, 0x59, 0x11, 0x73, 0x8d, 0x39, 0xf6, 0x94, -0xd9, 0xf3, 0xf2, 0x1a, 0xe6, 0x25, 0x51, 0x9e, -0x85, 0x91, 0x7a, 0xfc, 0x87, 0x37, 0x75, 0x91, -0xf9, 0x9d, 0xcd, 0xa7, 0x5c, 0x4d, 0x4d, 0xbf, -0xfc, 0x33, 0x97, 0xeb, 0x5f, 0x1c, 0xf6, 0x7f, -0x71, 0x35, 0xcf, 0xce, 0xce, 0xaa, 0x73, 0x1a, -0xff, 0x6f, 0xf6, 0x7d, 0x9a, 0xcf, 0x03, 0x73, -0x05, 0xc8, 0xf9, 0x3c, 0xfc, 0x3b, 0xf9, 0x7c, -0xbe, 0x57, 0xe7, 0x79, 0xe0, 0xa7, 0xfa, 0xbc, -0x68, 0xfa, 0xbc, 0xd5, 0x98, 0xeb, 0xf3, 0x73, -0x47, 0xfe, 0x1a, 0x9f, 0x1f, 0x1b, 0xf8, 0x7a, -0x4d, 0xf9, 0x70, 0x6e, 0xdc, 0xaf, 0xdd, 0xd3, -0xbf, 0xe4, 0xf3, 0xca, 0x1c, 0x9f, 0xb7, 0x96, -0xa5, 0x39, 0xff, 0xd7, 0xa1, 0x7c, 0x58, 0xf8, -0x97, 0xc7, 0x7d, 0xda, 0x9e, 0xfe, 0x34, 0xbb, -0x40, 0x1e, 0x8b, 0xcb, 0x59, 0x58, 0xfe, 0xe5, -0x9f, 0xdd, 0x74, 0x7d, 0xe6, 0xf3, 0xbf, 0xae, -0xef, 0xd7, 0x5f, 0xec, 0x6f, 0x39, 0x12, 0xed, -0xdf, 0x2d, 0xaf, 0xfd, 0x6b, 0xc7, 0x7c, 0x76, -0x7d, 0x76, 0x7d, 0x76, 0x7d, 0x76, 0x7d, 0x76, -0x7d, 0x76, 0xfd, 0xff, 0x72, 0x69, 0x71, 0x92, -0x68, 0x71, 0x52, 0xfd, 0x8f, 0x9e, 0xcb, 0x67, -0xd7, 0x67, 0xd7, 0x67, 0xd7, 0x67, 0xd7, 0x67, -0xd7, 0x67, 0xd7, 0x7f, 0xc4, 0x15, 0x64, 0x65, -0x00, 0xd8, 0xfb, 0xb2, 0xf1, 0xf7, 0xff, 0xf9, -0x20, 0x28, 0xf3, 0x3e, 0xfd, 0xf7, 0xb5, 0xdf, -0xb3, 0x05, 0x21, 0xcd, 0xe5, 0xc6, 0xf7, 0xa7, -0x6e, 0x9e, 0xeb, 0xff, 0x01, 0x51, 0x16, 0x5f, -0xd0, 0xd5, 0x60, 0x00, 0x00, diff --git a/board/esd/plu405/Kconfig b/board/esd/plu405/Kconfig deleted file mode 100644 index b3082cb022..0000000000 --- a/board/esd/plu405/Kconfig +++ /dev/null @@ -1,12 +0,0 @@ -if TARGET_PLU405 - -config SYS_BOARD - default "plu405" - -config SYS_VENDOR - default "esd" - -config SYS_CONFIG_NAME - default "PLU405" - -endif diff --git a/board/esd/plu405/MAINTAINERS b/board/esd/plu405/MAINTAINERS deleted file mode 100644 index ccb365843d..0000000000 --- a/board/esd/plu405/MAINTAINERS +++ /dev/null @@ -1,6 +0,0 @@ -PLU405 BOARD -M: Matthias Fuchs <matthias.fuchs@esd-electronics.com> -S: Maintained -F: board/esd/plu405/ -F: include/configs/PLU405.h -F: configs/PLU405_defconfig diff --git a/board/esd/plu405/Makefile b/board/esd/plu405/Makefile deleted file mode 100644 index 6ffae677b1..0000000000 --- a/board/esd/plu405/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -# -# (C) Copyright 2000-2006 -# Wolfgang Denk, DENX Software Engineering, wd@denx.de. -# -# SPDX-License-Identifier: GPL-2.0+ -# - -obj-y = plu405.o flash.o \ - ../common/misc.o \ - ../common/esd405ep_nand.o \ diff --git a/board/esd/plu405/flash.c b/board/esd/plu405/flash.c deleted file mode 100644 index 23e81642e0..0000000000 --- a/board/esd/plu405/flash.c +++ /dev/null @@ -1,85 +0,0 @@ -/* - * (C) Copyright 2001 - * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <common.h> -#include <asm/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) -{ - unsigned long size_b0; - int i; - uint pbcr; - unsigned long base_b0; - int size_val = 0; - - /* Init: no FLASHes known */ - for (i=0; i<CONFIG_SYS_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(EBC0_CFGADDR, PB0CR); - pbcr = mfdcr(EBC0_CFGDATA); - mtdcr(EBC0_CFGADDR, 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(EBC0_CFGDATA, pbcr); - - /* Monitor protection ON by default */ - (void)flash_protect(FLAG_PROTECT_SET, - -CONFIG_SYS_MONITOR_LEN, - 0xffffffff, - &flash_info[0]); - - flash_info[0].size = size_b0; - - return (size_b0); -} diff --git a/board/esd/plu405/fpgadata.c b/board/esd/plu405/fpgadata.c deleted file mode 100644 index 485b9a2097..0000000000 --- a/board/esd/plu405/fpgadata.c +++ /dev/null @@ -1,2358 +0,0 @@ -0x1f, 0x8b, 0x08, 0x08, 0x04, 0x44, 0x9f, 0x46, -0x00, 0x03, 0x70, 0x6c, 0x75, 0x34, 0x30, 0x35, -0x5f, 0x31, 0x5f, 0x31, 0x2e, 0x62, 0x69, 0x74, -0x00, 0x94, 0x9a, 0x0f, 0x70, 0x14, 0x55, 0x9e, -0xc7, 0x7f, 0xfd, 0xba, 0x93, 0x74, 0xa6, 0x3b, -0xe9, 0x36, 0x7f, 0x30, 0xb7, 0x08, 0xd7, 0x19, -0x07, 0x76, 0xc4, 0x61, 0x18, 0x42, 0x80, 0x98, -0x0d, 0x49, 0x33, 0xa4, 0xac, 0x71, 0xc9, 0x1e, -0xf1, 0xce, 0xbb, 0xe2, 0xf6, 0xbc, 0xdd, 0x11, -0x71, 0x8f, 0xbb, 0xe2, 0x2c, 0xd6, 0xdd, 0xb3, -0xb8, 0x3b, 0x4b, 0x5f, 0x66, 0xa2, 0x04, 0x92, -0x92, 0x01, 0x39, 0x37, 0xba, 0xac, 0x35, 0x40, -0x6e, 0x8d, 0x4a, 0x59, 0x11, 0x75, 0x8d, 0x82, -0xbb, 0x4d, 0x0c, 0x3a, 0x60, 0xd4, 0xb9, 0x94, -0x7b, 0x8b, 0x7f, 0x8e, 0x6d, 0xd8, 0xc0, 0x46, -0x89, 0x3a, 0xcb, 0xa2, 0x06, 0x65, 0xcd, 0xbd, -0xd7, 0x3d, 0xdd, 0xd3, 0x99, 0x9e, 0x04, 0x37, -0x5a, 0xc5, 0x2f, 0xaf, 0x1f, 0x8f, 0xf7, 0xfb, -0xcd, 0xef, 0xfd, 0x7e, 0x9f, 0xfe, 0xbe, 0x81, -0x52, 0x29, 0x63, 0xfe, 0x07, 0xc0, 0xdc, 0x06, -0xd2, 0x96, 0xcd, 0xff, 0x56, 0x1f, 0x5a, 0xfe, -0xfd, 0xa5, 0xdf, 0x5f, 0x1a, 0xbc, 0xf3, 0xf6, -0x8d, 0xb0, 0x01, 0x84, 0xba, 0x1f, 0x2d, 0x0f, -0xdd, 0xf1, 0xe3, 0x1f, 0x2e, 0xad, 0xaf, 0x87, -0xdb, 0xc9, 0x6f, 0xa1, 0xd0, 0xca, 0x25, 0xe4, -0xff, 0xa5, 0x37, 0xc0, 0x46, 0x28, 0x5d, 0x5a, -0xd7, 0xb8, 0xfc, 0x86, 0xc6, 0xa5, 0x2b, 0xe1, -0x0e, 0x60, 0x96, 0xf5, 0x4d, 0x91, 0x9f, 0x27, -0x1f, 0xf9, 0xdb, 0x1f, 0x84, 0x00, 0x33, 0x00, -0x50, 0x12, 0x62, 0xa2, 0xf4, 0x4f, 0x21, 0xc4, -0x28, 0x0c, 0xe0, 0x96, 0xc5, 0x21, 0xd0, 0xe8, -0xef, 0x90, 0x7d, 0x5e, 0x1a, 0x02, 0xc5, 0xf9, -0x3b, 0x13, 0x02, 0x15, 0xda, 0x41, 0xed, 0x81, -0x0a, 0x19, 0xae, 0xf8, 0xc3, 0xa8, 0x1c, 0xb6, -0xec, 0x3f, 0x73, 0xfe, 0xd4, 0x09, 0x3c, 0xe3, -0xb4, 0xdc, 0x4f, 0xcb, 0x85, 0xa4, 0x65, 0xa2, -0xd0, 0xd7, 0x59, 0x1f, 0xec, 0xf5, 0xdf, 0xfd, -0x5a, 0xeb, 0x7f, 0x66, 0xad, 0xff, 0xe7, 0xce, -0x87, 0x8a, 0xaf, 0x31, 0x1d, 0x80, 0xb3, 0xf7, -0x63, 0x86, 0x87, 0x03, 0x06, 0x43, 0x14, 0x64, -0x28, 0xa6, 0x86, 0x42, 0x46, 0x10, 0x80, 0x69, -0x18, 0xeb, 0x0f, 0x5b, 0xf3, 0x87, 0x8a, 0xbe, -0x82, 0x29, 0xdc, 0xa2, 0x8a, 0x1a, 0x5b, 0x8f, -0x76, 0xe2, 0x16, 0x5d, 0x4a, 0xb1, 0x75, 0xf0, -0x16, 0x35, 0x26, 0x59, 0xe3, 0x11, 0x35, 0x32, -0xb0, 0xc5, 0x9a, 0x5f, 0xf3, 0x31, 0x1c, 0xc6, -0x4b, 0xa2, 0x91, 0x2e, 0x4f, 0x33, 0xbc, 0x17, -0x0b, 0xea, 0x42, 0x17, 0xda, 0x0f, 0x4f, 0x61, -0x62, 0x0c, 0x22, 0xfa, 0xc8, 0x30, 0x32, 0x9c, -0x15, 0xc5, 0x13, 0x45, 0x3d, 0xdc, 0x01, 0x10, -0x55, 0xbf, 0xec, 0xe9, 0x84, 0x18, 0x04, 0x34, -0x41, 0xae, 0x68, 0x85, 0x38, 0x35, 0x42, 0x68, -0x04, 0x9e, 0x35, 0x8d, 0x43, 0x8c, 0xb5, 0xbe, -0xc6, 0x1d, 0x84, 0xc3, 0x10, 0x8c, 0x96, 0xf6, -0xc6, 0xbe, 0x89, 0x1e, 0x85, 0xe0, 0x51, 0xa1, -0x17, 0xfd, 0x1e, 0x9e, 0x82, 0xa0, 0x26, 0x0c, -0xa0, 0x09, 0xfa, 0x88, 0x18, 0xde, 0x0c, 0x17, -0xcd, 0xce, 0x5f, 0x7d, 0xd5, 0x04, 0x9c, 0x87, -0xe6, 0x0d, 0xa2, 0xcc, 0x2e, 0x14, 0x53, 0xbb, -0x9a, 0xef, 0x28, 0xe9, 0x89, 0x6f, 0x80, 0xd7, -0xa1, 0x59, 0x93, 0x06, 0xd8, 0x09, 0xf8, 0xd2, -0x34, 0xd2, 0x9c, 0xb5, 0x7e, 0x92, 0x39, 0x02, -0x53, 0xd0, 0xb4, 0xba, 0x3c, 0x73, 0xed, 0x08, -0x4c, 0xf1, 0xf7, 0xa9, 0x25, 0x1a, 0x3b, 0x40, -0x46, 0x5a, 0x34, 0x29, 0xc3, 0x5e, 0xb6, 0x8c, -0x71, 0xb0, 0xd6, 0xd7, 0xe4, 0x83, 0x74, 0x91, -0xa8, 0xf8, 0x73, 0x76, 0x81, 0x7a, 0x02, 0x35, -0xab, 0x52, 0x62, 0xcd, 0x59, 0x6b, 0x59, 0x7b, -0xfd, 0x8b, 0x9c, 0x15, 0xd9, 0x93, 0x45, 0x01, -0x63, 0x93, 0xfc, 0x41, 0xf6, 0x9f, 0xa0, 0x3b, -0x19, 0x8c, 0xfc, 0x43, 0x05, 0x7a, 0x4d, 0x3b, -0x6c, 0xed, 0xff, 0xbc, 0x69, 0x5c, 0x20, 0xd9, -0x6f, 0xfe, 0xa4, 0xb8, 0x36, 0x1a, 0x04, 0x58, -0xc4, 0xdd, 0x05, 0x38, 0xce, 0x04, 0x46, 0x05, -0x40, 0x47, 0xad, 0xb0, 0xd8, 0xf1, 0x99, 0x24, -0x67, 0xc5, 0xfc, 0xc9, 0xc8, 0xdf, 0x83, 0x17, -0xf0, 0xe2, 0xa8, 0xff, 0x9f, 0xd1, 0x77, 0x61, -0x5b, 0xc7, 0x62, 0x5d, 0x88, 0xa0, 0x77, 0xe9, -0x88, 0x2e, 0x6c, 0x45, 0xa7, 0xe0, 0x71, 0xd3, -0xf8, 0xca, 0x5e, 0x3f, 0xc2, 0xb7, 0xc1, 0x1f, -0xa1, 0x49, 0x2d, 0x67, 0x1e, 0x82, 0xd8, 0x10, -0x34, 0x91, 0xd5, 0x58, 0x8d, 0x8e, 0x68, 0x52, -0x88, 0x1d, 0x31, 0x8d, 0xa5, 0xec, 0x28, 0xb2, -0x12, 0x49, 0xad, 0xa6, 0xf1, 0x69, 0x51, 0xa5, -0x9b, 0xd9, 0x0c, 0x59, 0x86, 0x44, 0x23, 0xcd, -0x4e, 0xaa, 0xf9, 0xf1, 0x49, 0x17, 0x5b, 0xf1, -0xe1, 0x39, 0x23, 0x3e, 0x29, 0x31, 0xc6, 0xfa, -0xb0, 0x16, 0xa9, 0xd3, 0x24, 0xcc, 0x7a, 0x5d, -0xf1, 0xff, 0xd0, 0xce, 0x9f, 0x54, 0xcd, 0x5e, -0x78, 0x01, 0x02, 0x61, 0x3e, 0xb4, 0x5b, 0x54, -0xee, 0x67, 0x6a, 0x35, 0x41, 0x0d, 0xcb, 0xb0, -0x0d, 0x16, 0x6b, 0xc2, 0x16, 0xf4, 0x3e, 0x79, -0x64, 0x18, 0x17, 0xec, 0xcf, 0x57, 0x81, 0xc7, -0x0c, 0xef, 0xf8, 0x4d, 0x9e, 0x0a, 0x78, 0x00, -0xd7, 0xea, 0x82, 0x1e, 0x5b, 0x01, 0xdb, 0x2c, -0x7f, 0xb3, 0x8e, 0xeb, 0x76, 0x66, 0x6f, 0xe2, -0x7a, 0x68, 0xd0, 0x46, 0xfb, 0x15, 0x54, 0x96, -0x88, 0x47, 0xf4, 0x31, 0xa1, 0x7e, 0x7f, 0x19, -0xce, 0xcf, 0xb7, 0x51, 0x3b, 0x3f, 0xc7, 0xab, -0xc7, 0xe1, 0x0b, 0x68, 0xc1, 0x62, 0x92, 0xbd, -0xa1, 0xf8, 0x44, 0xa4, 0x0e, 0x4b, 0x3a, 0x6a, -0x44, 0x27, 0xa0, 0x19, 0x4b, 0x49, 0x96, 0x3e, -0x32, 0x8c, 0x2f, 0xec, 0xfd, 0x44, 0x98, 0x24, -0x4c, 0x42, 0x33, 0x48, 0xbc, 0x70, 0x5a, 0x9d, -0x54, 0x89, 0x81, 0x59, 0x5d, 0x35, 0x46, 0x88, -0x01, 0x59, 0x63, 0x14, 0xac, 0xf5, 0x79, 0xb9, -0x0f, 0x2e, 0x91, 0xf8, 0x8b, 0xcf, 0x55, 0x2e, -0x0c, 0xbf, 0x0e, 0x75, 0xaa, 0xb4, 0xbb, 0x64, -0x4c, 0xbd, 0x04, 0x34, 0x91, 0xd8, 0x31, 0xc8, -0x1a, 0x43, 0xf6, 0x7e, 0x30, 0xb7, 0x11, 0x5e, -0x84, 0x60, 0x7b, 0x57, 0xc2, 0x53, 0x02, 0x1d, -0x09, 0xaf, 0x4a, 0xf2, 0xff, 0x2c, 0x26, 0x23, -0xaa, 0x90, 0x40, 0x63, 0xe4, 0x51, 0x23, 0x35, -0x74, 0xb0, 0xaa, 0x60, 0x43, 0x91, 0x8f, 0xce, -0x0f, 0xfb, 0xf7, 0x78, 0x7c, 0xb0, 0x1d, 0xbc, -0xe1, 0xb5, 0xe6, 0x34, 0x7b, 0xbe, 0x61, 0xbc, -0x6a, 0xe7, 0x83, 0x52, 0xc5, 0xc1, 0x33, 0x10, -0x50, 0x79, 0x19, 0xf9, 0xc8, 0x31, 0x54, 0x54, -0x41, 0x46, 0xc3, 0xc6, 0x48, 0xd6, 0xf0, 0x53, -0x63, 0x88, 0xb1, 0xf2, 0x61, 0x6b, 0x59, 0xd4, -0x70, 0x4a, 0xc4, 0x82, 0x1f, 0x52, 0x50, 0x47, -0xbc, 0x43, 0xb6, 0x9b, 0xb6, 0xf1, 0x26, 0x6b, -0xe5, 0x67, 0x6f, 0x11, 0x75, 0xaa, 0xa5, 0x7d, -0xc9, 0x1e, 0xf6, 0x53, 0x62, 0xfc, 0x4a, 0x95, -0xda, 0xd9, 0xf7, 0x2d, 0x37, 0x37, 0x12, 0xa3, -0x91, 0x1a, 0xe7, 0x8a, 0xad, 0x7c, 0xa8, 0x21, -0xf3, 0xdf, 0x81, 0x55, 0x43, 0x62, 0x26, 0x5e, -0xcf, 0xbc, 0x41, 0x13, 0x2f, 0x5d, 0x72, 0x11, -0xf2, 0xe3, 0xf3, 0xaa, 0x5d, 0x1f, 0x1a, 0x6a, -0x74, 0x18, 0x84, 0xa0, 0x1c, 0xe9, 0x44, 0xb5, -0x6a, 0x17, 0x17, 0x04, 0x81, 0xee, 0x87, 0x8c, -0x4c, 0x33, 0xde, 0xe4, 0xac, 0xf8, 0x44, 0xa0, -0x93, 0x38, 0x15, 0x54, 0xf9, 0x10, 0xf1, 0xb7, -0x03, 0x7c, 0xea, 0x5a, 0xc3, 0x4d, 0x26, 0xa0, -0xb2, 0x0e, 0xc7, 0x73, 0x9f, 0x57, 0x2f, 0xd7, -0x07, 0x2f, 0x32, 0xc1, 0x28, 0xbf, 0x47, 0x09, -0x90, 0x78, 0x92, 0xe8, 0x3d, 0x5c, 0x28, 0x9e, -0x76, 0x3e, 0x24, 0xab, 0xc7, 0xc4, 0x77, 0xb8, -0xa6, 0x4d, 0x81, 0x44, 0x69, 0xb1, 0x77, 0xbb, -0xde, 0xac, 0xae, 0x4b, 0xa0, 0xb3, 0xf0, 0xef, -0x79, 0xfb, 0x1f, 0xb7, 0xeb, 0x4f, 0x8a, 0xe9, -0x83, 0x1b, 0xe8, 0xe0, 0x23, 0xc2, 0x39, 0xf5, -0x52, 0xc2, 0x78, 0xfa, 0x7b, 0x97, 0xbf, 0x5f, -0xd8, 0xf5, 0x87, 0x97, 0x8d, 0x7c, 0x93, 0x45, -0xb4, 0xa6, 0x16, 0xa5, 0xd4, 0xe6, 0x52, 0xa9, -0x93, 0x3d, 0xed, 0x8a, 0xff, 0x09, 0xbb, 0xfe, -0xf8, 0x8b, 0xfc, 0xf0, 0x12, 0x2c, 0xe9, 0xe7, -0x75, 0xf4, 0x2d, 0xfc, 0xe0, 0xea, 0x25, 0x0f, -0x09, 0xfb, 0xd1, 0x97, 0xa1, 0x97, 0x20, 0x88, -0xe7, 0x26, 0xd1, 0x38, 0x50, 0x43, 0x48, 0x92, -0xfc, 0xb6, 0xf2, 0xc1, 0x6f, 0xd6, 0x9f, 0x49, -0x8f, 0x0f, 0x49, 0x4a, 0xbc, 0x8b, 0x9c, 0x8e, -0x06, 0xf4, 0x86, 0xef, 0x59, 0x66, 0xfa, 0x79, -0x39, 0x61, 0xd7, 0x1f, 0x2c, 0xdf, 0x6a, 0x1c, -0x52, 0xcf, 0x16, 0x6f, 0x0f, 0x6c, 0x53, 0x17, -0x63, 0xd6, 0x71, 0x6c, 0x6d, 0x63, 0xdc, 0x5e, -0xbf, 0xab, 0xeb, 0x94, 0xfc, 0x39, 0x5e, 0xa5, -0x07, 0x1b, 0x84, 0x39, 0xf0, 0x1a, 0x31, 0xa4, -0xf5, 0xe4, 0x74, 0xd0, 0x11, 0x61, 0x2b, 0x7b, -0xca, 0x30, 0xa4, 0xad, 0xec, 0x87, 0x76, 0xfd, -0xe1, 0xab, 0x8d, 0x7a, 0xa2, 0x95, 0x0d, 0x54, -0x6e, 0xa4, 0x06, 0x76, 0x96, 0x11, 0xdb, 0x18, -0xb2, 0xeb, 0x0f, 0x14, 0xfd, 0x92, 0x36, 0xa9, -0x64, 0xf9, 0x49, 0x76, 0xbe, 0xfc, 0x5a, 0x82, -0x11, 0xdb, 0xde, 0x59, 0xf3, 0x99, 0x3a, 0x95, -0x98, 0xde, 0xbf, 0x34, 0xbb, 0xfe, 0xf4, 0xd7, -0xec, 0x55, 0xc9, 0x26, 0x3b, 0xcb, 0x6e, 0x66, -0x6f, 0xc5, 0xdb, 0xa0, 0x76, 0x8f, 0xa7, 0x1d, -0xbd, 0x9d, 0xbf, 0x7f, 0xf6, 0x49, 0xfb, 0xf3, -0x05, 0xbc, 0xd7, 0xf4, 0x57, 0x46, 0xff, 0xe8, -0x7b, 0x90, 0xaf, 0x6d, 0x2d, 0x6d, 0x7f, 0xf5, -0x6d, 0xee, 0x05, 0xf8, 0xd7, 0x69, 0xfe, 0x6a, -0x76, 0xfd, 0x51, 0xcc, 0xfa, 0x93, 0xb9, 0x49, -0x42, 0x6d, 0xc5, 0x31, 0x55, 0xc1, 0xc2, 0x7c, -0x78, 0x55, 0xcd, 0xaf, 0xe7, 0x5d, 0xf6, 0x79, -0xef, 0xaf, 0x9e, 0xe0, 0x89, 0x53, 0x99, 0xf2, -0xe7, 0xd8, 0xdb, 0xe1, 0x75, 0xed, 0x10, 0x33, -0xef, 0x08, 0xf9, 0x58, 0xbf, 0x84, 0x7b, 0xa7, -0xd7, 0x4f, 0x7b, 0x3f, 0x98, 0x31, 0xe2, 0xd3, -0xb6, 0xae, 0xaa, 0x92, 0x3c, 0x8d, 0x34, 0x43, -0xf9, 0x00, 0xc9, 0x87, 0xfc, 0xf8, 0xe4, 0xea, -0x61, 0xad, 0x6c, 0xf4, 0x3b, 0x4d, 0xcc, 0xb0, -0x7f, 0x87, 0xdf, 0xc0, 0x12, 0xf4, 0xa4, 0x49, -0x37, 0xcf, 0xaf, 0xe7, 0x5a, 0xab, 0xb5, 0x9f, -0x7d, 0xdc, 0x66, 0xf8, 0x29, 0x04, 0xb7, 0xf6, -0x1f, 0x79, 0xe9, 0x71, 0xe8, 0xd7, 0x03, 0x0a, -0x3f, 0x80, 0x7e, 0x07, 0x87, 0xa7, 0xf7, 0x5f, -0xa4, 0xdb, 0xf5, 0x01, 0x93, 0x7e, 0x47, 0xba, -0xb3, 0xce, 0xef, 0x42, 0x3e, 0xb9, 0x5b, 0x09, -0x2a, 0xa5, 0x89, 0x8a, 0x33, 0x8a, 0x6b, 0xbe, -0x9d, 0x0f, 0x7c, 0x95, 0x68, 0x04, 0x81, 0x07, -0xd4, 0x03, 0xfb, 0xc8, 0x69, 0x2d, 0x95, 0x49, -0xf4, 0xf2, 0xe3, 0x93, 0xab, 0x3f, 0x50, 0xb6, -0x99, 0xf6, 0x77, 0x4d, 0xc4, 0x95, 0x3e, 0x44, -0xda, 0x0a, 0x94, 0x25, 0x8c, 0xf8, 0x64, 0xfd, -0x3d, 0x6c, 0x1a, 0x9a, 0x5d, 0x7f, 0xf6, 0x15, -0x5d, 0x86, 0xdf, 0x12, 0xa7, 0x96, 0x68, 0xc4, -0xbb, 0xcb, 0xd0, 0x02, 0x4f, 0x17, 0xf2, 0xf7, -0x03, 0xbb, 0xfe, 0x68, 0x45, 0xd9, 0x24, 0xd1, -0x2b, 0x9b, 0xe1, 0x32, 0x5e, 0x59, 0xdb, 0x93, -0x62, 0x2f, 0xc0, 0x6f, 0x67, 0xe4, 0x1f, 0x2c, -0x53, 0xc8, 0x69, 0x4c, 0x76, 0x77, 0xb1, 0x01, -0xf8, 0x00, 0x7b, 0xc1, 0xd3, 0x85, 0xf4, 0x64, -0x77, 0x1e, 0xff, 0xe8, 0xb9, 0xfa, 0x5f, 0xd4, -0x96, 0x75, 0xaa, 0xb8, 0x8d, 0x56, 0x27, 0x95, -0x38, 0x3e, 0xec, 0xea, 0x47, 0x43, 0x39, 0xfe, -0xa9, 0xa6, 0xfc, 0xb3, 0x08, 0x93, 0xa0, 0x05, -0xe0, 0x09, 0x6d, 0xd1, 0x06, 0x4f, 0x4f, 0xc5, -0x39, 0xa5, 0x3b, 0x2f, 0x9e, 0x39, 0xfe, 0x81, -0xaa, 0x00, 0x8d, 0x46, 0x72, 0xe7, 0x13, 0xc2, -0x66, 0xc8, 0x68, 0x4d, 0x21, 0xbe, 0x8b, 0xfd, -0x9d, 0xab, 0xff, 0x6a, 0x76, 0xfd, 0x39, 0x0d, -0x46, 0x7f, 0xdf, 0x25, 0xe9, 0xec, 0x11, 0xf8, -0x13, 0xac, 0x04, 0x49, 0xab, 0x74, 0xc7, 0x67, -0xd2, 0xc9, 0x3f, 0xf2, 0x7b, 0xd0, 0x3c, 0x22, -0xfa, 0x0e, 0x4c, 0xa0, 0x14, 0x5e, 0xa1, 0x92, -0xfa, 0x73, 0x16, 0xd6, 0x9a, 0xcb, 0x6e, 0xb6, -0xd6, 0xcf, 0xd8, 0xf5, 0x27, 0xd5, 0x6a, 0xf0, -0x4f, 0x82, 0x1f, 0x24, 0xbb, 0x25, 0xfd, 0x48, -0x2d, 0xc7, 0x68, 0x8c, 0x99, 0xb6, 0xff, 0x72, -0x27, 0xff, 0x9c, 0x31, 0xe3, 0x93, 0xf6, 0x28, -0xe1, 0x11, 0x02, 0xa8, 0x3e, 0x20, 0xf5, 0x59, -0x97, 0x69, 0x7c, 0x3c, 0x05, 0xf9, 0x67, 0x03, -0x33, 0x9f, 0x36, 0xfd, 0xa4, 0x27, 0x52, 0x7c, -0x4a, 0x2e, 0xc2, 0xb5, 0x8a, 0xb0, 0x9e, 0xf0, -0xcf, 0x34, 0x1e, 0xf0, 0x6c, 0x45, 0x27, 0x1d, -0xfc, 0x43, 0xf3, 0xad, 0x29, 0x5d, 0xce, 0x6d, -0x9b, 0x80, 0x30, 0x54, 0x69, 0x52, 0x05, 0x29, -0xb3, 0x71, 0x72, 0x22, 0xca, 0x43, 0x6c, 0x9b, -0x05, 0x42, 0xa3, 0x76, 0xba, 0xa9, 0xf3, 0x68, -0x7c, 0x56, 0xa5, 0x17, 0xff, 0x9a, 0x44, 0xe3, -0x22, 0x01, 0x83, 0x72, 0x92, 0x3f, 0xea, 0x94, -0x3c, 0x13, 0xff, 0xf4, 0x17, 0x19, 0x41, 0x96, -0x49, 0x58, 0x48, 0xfc, 0xa1, 0x99, 0x21, 0xd1, -0x38, 0x33, 0x1b, 0xff, 0x5c, 0x65, 0xd4, 0x13, -0x2c, 0x00, 0x7b, 0x2b, 0xf7, 0x3c, 0xda, 0x07, -0x82, 0x4a, 0x76, 0xfb, 0xf8, 0x8c, 0xfc, 0xa3, -0x99, 0xfc, 0xb3, 0x81, 0x60, 0xde, 0x7c, 0xf8, -0x85, 0xb6, 0xf8, 0xb6, 0xb9, 0x5b, 0xd1, 0x67, -0x2e, 0xfe, 0xc9, 0xd8, 0xe7, 0x3d, 0x52, 0x65, -0x04, 0x2d, 0xd3, 0x7d, 0x0d, 0x6a, 0xe3, 0x9f, -0x55, 0x95, 0xb4, 0x50, 0x1f, 0x7b, 0x13, 0x0e, -0xcc, 0xc2, 0x3f, 0xfd, 0x14, 0x72, 0x12, 0xd2, -0x41, 0xd6, 0xcf, 0x7f, 0x06, 0xf7, 0xc5, 0x05, -0x1d, 0x5d, 0x52, 0xf2, 0xf8, 0x07, 0x39, 0xf8, -0x07, 0x8c, 0xa6, 0x23, 0xb3, 0x45, 0xb4, 0xfb, -0xdc, 0x64, 0xb6, 0xa1, 0xce, 0xd9, 0xf8, 0xc7, -0x68, 0x6a, 0x43, 0x65, 0x03, 0x71, 0x1f, 0x73, -0x09, 0xd7, 0x85, 0xa5, 0xc4, 0xed, 0xb4, 0x8d, -0xce, 0xcc, 0x3f, 0x46, 0x93, 0x6d, 0x17, 0xf6, -0xee, 0xf0, 0x95, 0xbe, 0xb8, 0x9e, 0xf0, 0x4f, -0xc2, 0x6b, 0xb6, 0x5d, 0xc9, 0xd1, 0x7f, 0x73, -0xfc, 0x53, 0x93, 0xe5, 0x1f, 0x61, 0x37, 0xda, -0x28, 0xbf, 0x08, 0xfb, 0x57, 0xcf, 0x4d, 0xa0, -0x3e, 0x63, 0xda, 0xdc, 0x82, 0xfc, 0xc3, 0x03, -0x97, 0x6d, 0xfa, 0x75, 0x45, 0xc4, 0x50, 0xda, -0xe7, 0xca, 0xe8, 0x18, 0x47, 0x47, 0x3c, 0x0e, -0x1e, 0xc8, 0xd5, 0x9f, 0x41, 0x3e, 0x6a, 0x39, -0x15, 0x85, 0x41, 0xa6, 0x02, 0x76, 0x62, 0xd6, -0x24, 0x40, 0xc1, 0xe1, 0xef, 0xc7, 0xac, 0xb5, -0x9f, 0xde, 0x79, 0x59, 0xa7, 0xf6, 0x10, 0xef, -0xfe, 0x44, 0x78, 0x66, 0x67, 0xfa, 0x6f, 0xde, -0xaf, 0xc9, 0xef, 0xef, 0xe7, 0x4a, 0xac, 0x78, -0xf6, 0x56, 0x1b, 0xbc, 0xa4, 0x8a, 0xe9, 0x6d, -0x63, 0xf0, 0x29, 0x1c, 0x6a, 0xaf, 0x19, 0x60, -0x17, 0xb8, 0x78, 0xe0, 0x9c, 0x9d, 0x3f, 0x0d, -0x72, 0x94, 0xa3, 0x90, 0xe3, 0xef, 0x44, 0x7a, -0x62, 0x12, 0xbc, 0x50, 0x86, 0x11, 0x2e, 0xc0, -0x3f, 0xb9, 0xb7, 0xd8, 0x56, 0xe2, 0x9d, 0xa8, -0xf2, 0x35, 0x68, 0x58, 0x79, 0x86, 0xe9, 0x57, -0xf9, 0x04, 0xe2, 0x18, 0x07, 0xef, 0x65, 0xfd, -0xcd, 0xf1, 0x98, 0x11, 0x3d, 0x0d, 0x76, 0x91, -0xe8, 0x3d, 0xc1, 0xfb, 0xd5, 0xed, 0x89, 0x70, -0x9f, 0xea, 0x8a, 0x67, 0x8e, 0x7f, 0x38, 0xca, -0xb7, 0xcd, 0x61, 0x6e, 0x2f, 0x79, 0xfa, 0x4c, -0xc5, 0xbf, 0xac, 0xe7, 0xe7, 0xd8, 0xfb, 0x5f, -0x53, 0x80, 0x7f, 0xfa, 0xc1, 0x98, 0xbf, 0x3a, -0xeb, 0xdd, 0xdd, 0x11, 0xe9, 0x51, 0xe2, 0x5d, -0xbe, 0xbf, 0x1f, 0xda, 0xf5, 0xc7, 0x0f, 0x26, -0xff, 0x48, 0x78, 0x8d, 0x22, 0xa6, 0xda, 0x56, -0x80, 0xd4, 0xb9, 0x46, 0x87, 0x14, 0x9a, 0x91, -0x7f, 0x38, 0xca, 0x3f, 0x8b, 0x7b, 0x05, 0x7d, -0x87, 0xbf, 0xf8, 0xc1, 0xa3, 0x5e, 0x4a, 0x3b, -0xe3, 0xf0, 0x2e, 0x49, 0x63, 0x21, 0xc7, 0x3f, -0xec, 0x8e, 0x1c, 0xff, 0xfc, 0x97, 0x51, 0x7f, -0x06, 0x05, 0x2f, 0x12, 0x21, 0xae, 0xb6, 0x1e, -0xa5, 0xc7, 0x84, 0xbc, 0x2b, 0x05, 0xb4, 0x52, -0x67, 0x7d, 0xb6, 0xeb, 0x4f, 0x2d, 0x73, 0x8d, -0x79, 0x7e, 0x37, 0xa1, 0xf9, 0x91, 0x6d, 0x7c, -0x6d, 0x6a, 0xee, 0x16, 0x74, 0xaa, 0xe3, 0x27, -0x70, 0xdd, 0xb4, 0xf3, 0x9b, 0xcc, 0xad, 0xcf, -0xcf, 0x97, 0x3f, 0xef, 0x58, 0xb5, 0x4f, 0xf0, -0x7b, 0x9b, 0xf1, 0x8d, 0x78, 0xf9, 0x05, 0x89, -0x62, 0xcf, 0x6f, 0xc8, 0xb1, 0x95, 0x4c, 0xfe, -0x99, 0x97, 0xc7, 0x3f, 0x65, 0x26, 0xff, 0x90, -0xd3, 0x37, 0x41, 0x4e, 0xdf, 0x2f, 0x53, 0xd2, -0xc0, 0x9a, 0x8f, 0xe4, 0x99, 0xf9, 0x47, 0x35, -0xfb, 0x57, 0xb2, 0x2c, 0xc5, 0xde, 0x03, 0xaf, -0xe2, 0x65, 0xfa, 0xba, 0x49, 0x76, 0x4a, 0x99, -0x72, 0xf6, 0xaf, 0x75, 0x93, 0x95, 0xe9, 0x1c, -0xff, 0x5c, 0x65, 0xf0, 0x0f, 0xe6, 0x55, 0xd4, -0xa4, 0xfe, 0xaf, 0x72, 0xdd, 0x90, 0x44, 0xb6, -0xad, 0xe6, 0xf3, 0x5b, 0x8e, 0x37, 0x12, 0x60, -0xd4, 0xab, 0x4e, 0x7e, 0x0b, 0xba, 0x06, 0x1e, -0xe6, 0x6e, 0x33, 0xa6, 0x29, 0xf9, 0xf3, 0x87, -0xed, 0xfa, 0x13, 0xad, 0x1a, 0xe1, 0x49, 0xd0, -0x74, 0x1e, 0x76, 0x04, 0x60, 0xb7, 0xb8, 0x28, -0x13, 0x5b, 0x8e, 0xde, 0x72, 0xf5, 0xf7, 0x93, -0x76, 0x7e, 0xfa, 0x0d, 0xde, 0x6b, 0x92, 0xc5, -0x27, 0xd9, 0x26, 0xc2, 0x3f, 0x3f, 0xba, 0x28, -0xbc, 0xcc, 0x4e, 0xa9, 0xf9, 0xfe, 0x9e, 0x70, -0xec, 0xc7, 0x18, 0xdc, 0xf3, 0xa0, 0xc2, 0x1e, -0x64, 0xbe, 0xc4, 0xd3, 0xa7, 0xd9, 0xc6, 0x98, -0x5d, 0x1f, 0x76, 0xc9, 0x97, 0x19, 0x52, 0xb4, -0xef, 0x12, 0xf5, 0xca, 0x26, 0xfe, 0x14, 0xb3, -0x4c, 0xbb, 0x26, 0x53, 0x69, 0x96, 0xf1, 0x32, -0x47, 0x3d, 0xd7, 0xed, 0xfd, 0x1c, 0xed, 0xdc, -0x4c, 0x9b, 0x54, 0x9a, 0xef, 0x47, 0x07, 0x8b, -0x63, 0x8c, 0x97, 0x74, 0x2b, 0x30, 0xdb, 0x96, -0xe4, 0x78, 0x7f, 0x3f, 0xad, 0x5a, 0xeb, 0x13, -0xfe, 0x91, 0xc9, 0x53, 0xcc, 0xf7, 0x17, 0x07, -0x60, 0x87, 0xe2, 0x3d, 0xca, 0x0f, 0x78, 0x27, -0xdc, 0xbc, 0x94, 0xab, 0x3f, 0x1c, 0xed, 0x47, -0x41, 0x1c, 0x81, 0xf2, 0x1e, 0x88, 0x81, 0xa2, -0xad, 0x0d, 0x15, 0x9b, 0x61, 0x31, 0xfa, 0xdd, -0x81, 0x7c, 0xfe, 0xc1, 0x22, 0xed, 0xa7, 0xcd, -0x58, 0x1c, 0x20, 0xbc, 0xb1, 0x83, 0x59, 0x76, -0xf4, 0xe4, 0x00, 0xd9, 0x3f, 0x75, 0x53, 0x70, -0xf8, 0x3b, 0x6e, 0xd7, 0x9f, 0xe4, 0xbc, 0xcb, -0x32, 0xe9, 0x5f, 0x5a, 0x99, 0x4a, 0xbc, 0x9b, -0x80, 0x5f, 0x69, 0xdf, 0x73, 0xb8, 0x79, 0x19, -0x3e, 0xc9, 0xfa, 0xcb, 0x5a, 0xf1, 0xd4, 0xb2, -0xfc, 0x2c, 0x9d, 0x61, 0xeb, 0x60, 0x18, 0xaf, -0xc4, 0xa2, 0x86, 0x1a, 0xe1, 0x93, 0x19, 0xf9, -0x47, 0x33, 0xf8, 0x27, 0x98, 0x14, 0x0e, 0x22, -0x45, 0xee, 0xc2, 0xde, 0x24, 0xdf, 0x8b, 0x9e, -0x86, 0x7c, 0xfe, 0xc9, 0xe9, 0x3f, 0x29, 0x6e, -0x84, 0x7b, 0x16, 0x44, 0x10, 0xfa, 0xc2, 0x1b, -0xa1, 0x0b, 0x6d, 0xec, 0x28, 0x0d, 0x55, 0xf0, -0xae, 0x7e, 0x74, 0x21, 0x8f, 0x7f, 0x8c, 0x97, -0x94, 0x3b, 0xe9, 0xfa, 0x89, 0xeb, 0xe8, 0xfa, -0x4f, 0xcd, 0xc8, 0x3f, 0x6a, 0xb5, 0x11, 0x84, -0xb0, 0x74, 0x2d, 0x0a, 0xc7, 0xb4, 0xd4, 0x8a, -0x8e, 0xb2, 0x9e, 0xf8, 0xb5, 0xca, 0xf9, 0x2b, -0xe8, 0x3f, 0x2d, 0x37, 0x4a, 0xe3, 0x95, 0x83, -0x84, 0x0f, 0xef, 0xd1, 0xca, 0x35, 0xf6, 0xa2, -0x41, 0x8c, 0xce, 0xfe, 0x3e, 0xe1, 0xd2, 0x7f, -0x48, 0x91, 0xe9, 0x83, 0x94, 0x6c, 0x7c, 0x10, -0x63, 0xf8, 0x8a, 0xfa, 0xcf, 0x6d, 0x42, 0x27, -0xe1, 0xb7, 0x6e, 0xec, 0x1d, 0x27, 0x85, 0xf7, -0x98, 0x2b, 0x1f, 0x72, 0xfc, 0x33, 0x6e, 0xf1, -0xe1, 0xf5, 0x28, 0x06, 0xb1, 0xa4, 0xff, 0x03, -0xbe, 0xd4, 0x3b, 0xab, 0xfe, 0x93, 0xe5, 0x1f, -0x61, 0x3c, 0xdc, 0x08, 0x0f, 0x24, 0xf6, 0x25, -0xf9, 0x4d, 0xde, 0xd1, 0x9c, 0xfe, 0x93, 0x35, -0x2e, 0x4f, 0xe3, 0x1f, 0x02, 0x39, 0x20, 0xc9, -0x6c, 0xa7, 0x77, 0x48, 0x6e, 0xd0, 0x02, 0x4a, -0xbe, 0xfe, 0x53, 0x12, 0x72, 0xea, 0x3f, 0x06, -0xff, 0xb4, 0x80, 0xd4, 0x5e, 0x79, 0x12, 0xbe, -0x92, 0xbf, 0xd5, 0x29, 0xfd, 0xa1, 0x00, 0x3f, -0xbb, 0xf8, 0x27, 0x42, 0x82, 0xa0, 0xc0, 0x93, -0x50, 0xa7, 0xf5, 0x60, 0xd2, 0x94, 0xf2, 0xe2, -0xbf, 0xc6, 0xc5, 0x3f, 0x43, 0xc2, 0x16, 0x4f, -0x0d, 0x3c, 0x00, 0xfb, 0x34, 0x3e, 0x8a, 0x12, -0x6e, 0xfd, 0xc7, 0x8e, 0x3f, 0x36, 0xf9, 0x27, -0x2a, 0xac, 0x8f, 0xcd, 0xe1, 0x7f, 0x8e, 0x95, -0x8f, 0x78, 0x3f, 0xba, 0x5b, 0x7e, 0x3c, 0x5f, -0xff, 0xb1, 0xe3, 0x9f, 0xe5, 0x9f, 0xbf, 0x16, -0xe4, 0x0a, 0x0f, 0xc4, 0x38, 0x25, 0xed, 0xaf, -0x8f, 0x1d, 0x53, 0x66, 0xd3, 0x7f, 0xfa, 0x4d, -0xc8, 0x89, 0xb2, 0x8d, 0xf2, 0xc7, 0x5b, 0xea, -0x70, 0x60, 0x4c, 0xf8, 0x4f, 0xfc, 0xe1, 0xcc, -0xfa, 0x0f, 0xd8, 0x4d, 0xe7, 0x74, 0x78, 0x52, -0x6d, 0xae, 0x20, 0xc6, 0x3e, 0xee, 0x8a, 0xfc, -0xa3, 0x49, 0x7b, 0xe3, 0x0b, 0xe1, 0x78, 0xc7, -0x40, 0xab, 0xf8, 0x0d, 0x02, 0xb9, 0x57, 0xd4, -0x7f, 0x56, 0x0b, 0xbd, 0xe1, 0x05, 0xd0, 0xa1, -0x79, 0x27, 0x3d, 0x89, 0x8a, 0x6f, 0x1a, 0xfa, -0x4f, 0xf9, 0x6c, 0xfc, 0x43, 0x06, 0x3d, 0x9c, -0xba, 0xbd, 0xd6, 0x4b, 0xfa, 0xbb, 0xa7, 0x0f, -0xe7, 0xe9, 0x15, 0x15, 0x0e, 0xfe, 0xe1, 0x0c, -0xfe, 0x89, 0x0a, 0x35, 0xa8, 0x08, 0x3a, 0x40, -0x21, 0xd8, 0x53, 0xde, 0x09, 0x33, 0xf3, 0x4f, -0x43, 0x99, 0xcd, 0x3f, 0xa4, 0xa4, 0x33, 0x75, -0x54, 0x08, 0x4a, 0x4e, 0xd7, 0x1f, 0x4a, 0x30, -0xfb, 0x26, 0x63, 0xeb, 0x3f, 0xf3, 0xb2, 0xfe, -0xde, 0xc2, 0x5e, 0x44, 0xcf, 0x43, 0x73, 0xbb, -0xf4, 0xb6, 0x70, 0x8b, 0xe1, 0x66, 0xb9, 0x93, -0x67, 0xb8, 0x1c, 0x6f, 0x18, 0xfc, 0xa3, 0x49, -0xe9, 0xb8, 0x0f, 0x8e, 0x41, 0x5d, 0x44, 0x4c, -0xb3, 0xf5, 0x6e, 0xfd, 0xc7, 0xc1, 0x3f, 0x59, -0xc8, 0x49, 0x22, 0x1e, 0x4e, 0x92, 0x54, 0xe3, -0xef, 0x27, 0xdd, 0x76, 0x66, 0xfe, 0x89, 0x14, -0xd9, 0x4e, 0xb5, 0xd6, 0x6e, 0x47, 0x4a, 0xbb, -0x47, 0x0e, 0x73, 0x90, 0xcf, 0x3f, 0xa3, 0x39, -0xfe, 0xa9, 0xee, 0xb3, 0x82, 0xdc, 0xba, 0xfa, -0xa7, 0xb2, 0x57, 0xf5, 0x3c, 0x8c, 0xfe, 0x7b, -0x76, 0xfd, 0x87, 0x6e, 0xf2, 0x87, 0x52, 0x42, -0xf8, 0x01, 0x3a, 0x7e, 0xa6, 0x4e, 0x5d, 0x94, -0x60, 0x1d, 0x9f, 0xef, 0x8b, 0xf9, 0xfc, 0x33, -0xce, 0xf4, 0x71, 0x97, 0xe8, 0x79, 0xf9, 0x06, -0x7b, 0x10, 0x2e, 0xc5, 0x8e, 0xa8, 0x65, 0x35, -0x39, 0x37, 0x0b, 0xe8, 0x3f, 0x7e, 0xd9, 0xe2, -0x9f, 0x78, 0x2d, 0x9c, 0xe4, 0xe7, 0x90, 0xf8, -0xb3, 0x8a, 0x72, 0x45, 0xfd, 0x67, 0x0f, 0xc1, -0xf8, 0x45, 0xe4, 0x7c, 0x79, 0x71, 0x38, 0x59, -0xb9, 0xd5, 0x92, 0x7d, 0x0a, 0xe9, 0x3f, 0xd9, -0xf7, 0x2f, 0x81, 0x41, 0x25, 0xc3, 0x0f, 0x81, -0x6f, 0x12, 0x42, 0xc5, 0xa5, 0xae, 0xfa, 0x93, -0xd3, 0x7f, 0x92, 0x26, 0xff, 0xa8, 0x64, 0xf0, -0x1a, 0xe6, 0x27, 0xbc, 0x82, 0x3c, 0xa1, 0xe2, -0x5b, 0x99, 0x99, 0xf5, 0x9f, 0x7e, 0x7e, 0x3e, -0x81, 0x1c, 0x42, 0x3b, 0x11, 0x61, 0x0e, 0xfc, -0x1a, 0x2f, 0xf7, 0x8a, 0xeb, 0xd9, 0x0a, 0x4b, -0xf6, 0x29, 0xa4, 0xff, 0xcc, 0x33, 0xea, 0xad, -0x4a, 0xaa, 0xc7, 0xd9, 0xe2, 0xa7, 0x4c, 0x63, -0x0c, 0xde, 0x9b, 0x45, 0xff, 0xa1, 0x4d, 0x6a, -0x55, 0x5f, 0xf9, 0xf8, 0x9a, 0x6f, 0xc1, 0xb1, -0x7d, 0xcb, 0xa2, 0x81, 0x49, 0xb6, 0x19, 0xa6, -0xf2, 0xfa, 0x97, 0xe6, 0xe4, 0x1f, 0xba, 0xc9, -0x39, 0xfc, 0x86, 0xf0, 0x55, 0xf8, 0x7e, 0xe5, -0x3a, 0xd5, 0x00, 0x9b, 0x99, 0xf9, 0x07, 0x4c, -0xfe, 0x39, 0xfa, 0x5d, 0x0d, 0xd5, 0x54, 0xdd, -0xdf, 0x74, 0x1b, 0xe6, 0x6f, 0x41, 0x55, 0xae, -0xf9, 0x0e, 0xfd, 0xc7, 0xac, 0x3f, 0x54, 0x6f, -0xf4, 0x40, 0x07, 0xf6, 0x03, 0xdf, 0x40, 0x0e, -0x5a, 0x7e, 0x3c, 0x53, 0x0e, 0xfd, 0xc7, 0xec, -0x2f, 0xe4, 0x74, 0x5f, 0xef, 0x3d, 0x9e, 0xa8, -0x6b, 0x0f, 0x0c, 0x74, 0xd7, 0xba, 0x78, 0xe6, -0x7c, 0x4e, 0xff, 0x31, 0xf9, 0x07, 0x49, 0x49, -0xe1, 0x03, 0xb8, 0xa4, 0x12, 0x83, 0xa6, 0x8d, -0x5b, 0xff, 0xb1, 0xd6, 0x67, 0xe4, 0xcb, 0xa6, -0x9e, 0xaf, 0xb1, 0x17, 0x94, 0x11, 0xa6, 0x1e, -0x44, 0x99, 0x0d, 0x29, 0x33, 0xeb, 0x3f, 0x18, -0x0c, 0xfe, 0x89, 0xde, 0xd4, 0xf7, 0x4a, 0x12, -0x25, 0x87, 0xbc, 0xbc, 0x3f, 0x81, 0x16, 0x16, -0xe0, 0x19, 0x07, 0xff, 0x30, 0x74, 0x3e, 0x19, -0x4c, 0xe1, 0xed, 0x38, 0x78, 0x13, 0xff, 0x4c, -0x85, 0xb7, 0xf6, 0x4a, 0xfc, 0x13, 0x80, 0x52, -0x85, 0x04, 0xad, 0x1f, 0xfc, 0x54, 0x88, 0xe6, -0xae, 0xa0, 0xff, 0x18, 0xf9, 0x80, 0x49, 0xb7, -0x4a, 0x31, 0xcd, 0x10, 0xa0, 0xe7, 0x2b, 0xdf, -0xdf, 0x9c, 0xfe, 0x43, 0xf8, 0xc7, 0xf0, 0xb7, -0x2c, 0xca, 0x1e, 0x21, 0xfd, 0xfd, 0x05, 0x58, -0x92, 0x26, 0xfd, 0xdd, 0x75, 0xbf, 0x83, 0x6c, -0xde, 0xb8, 0xea, 0x2b, 0x94, 0xbd, 0xed, 0xda, -0x0d, 0x13, 0x78, 0x99, 0xd2, 0x33, 0xc2, 0x36, -0xe1, 0x4f, 0xf0, 0xaa, 0x94, 0x78, 0x31, 0x97, -0x48, 0x19, 0xbb, 0x3e, 0x60, 0xf8, 0xd8, 0xa2, -0x9d, 0x0d, 0xd0, 0x85, 0x57, 0x28, 0x04, 0xdb, -0x5a, 0x54, 0x32, 0x92, 0x21, 0x85, 0x28, 0x68, -0xeb, 0x3f, 0xf6, 0x79, 0xe4, 0x8b, 0x46, 0x20, -0x0e, 0x7e, 0xea, 0x14, 0x86, 0x43, 0xb0, 0x08, -0x78, 0x44, 0x5e, 0x34, 0x08, 0xff, 0xa4, 0xf9, -0x43, 0x48, 0xcc, 0xf9, 0x6b, 0xc5, 0x9f, 0xf2, -0x4f, 0x56, 0x2d, 0xd9, 0xc0, 0x3f, 0x8a, 0xef, -0xf4, 0xee, 0x48, 0x90, 0x68, 0xd1, 0x11, 0xff, -0x2e, 0x14, 0x28, 0xc0, 0x3f, 0xa4, 0xff, 0x66, -0xd5, 0x86, 0x03, 0x90, 0xc1, 0x0d, 0xb5, 0xe2, -0xcf, 0x4a, 0x03, 0x70, 0x1e, 0xdd, 0xa3, 0x89, -0x8f, 0x0a, 0x01, 0x37, 0xff, 0xe8, 0x26, 0xff, -0xd0, 0x20, 0x64, 0x48, 0x2a, 0xad, 0x84, 0x5c, -0x58, 0x26, 0x0b, 0xea, 0x3f, 0x70, 0xd0, 0x3a, -0x7d, 0xfb, 0xd4, 0x13, 0x77, 0xd5, 0x55, 0x49, -0x7d, 0xac, 0xb9, 0xac, 0x98, 0x10, 0x82, 0xd6, -0x3f, 0xed, 0xd0, 0x7f, 0x8a, 0x44, 0x35, 0xbb, -0x49, 0x0d, 0x76, 0x84, 0xe7, 0x28, 0x6b, 0x07, -0xd0, 0xcf, 0xf0, 0x61, 0x58, 0x32, 0x5a, 0x13, -0xf2, 0x04, 0x2c, 0xd7, 0x72, 0xfc, 0xa3, 0x17, -0x7d, 0xc7, 0x0a, 0x42, 0x4c, 0xc1, 0x9a, 0x2f, -0xba, 0x36, 0x89, 0xa4, 0xc0, 0x43, 0x4c, 0x60, -0x92, 0x24, 0x86, 0x88, 0xe2, 0xf9, 0xfc, 0x13, -0x35, 0xf9, 0x87, 0x36, 0xfd, 0x51, 0xb5, 0x13, -0x2f, 0x20, 0x86, 0xd7, 0xbc, 0x21, 0xf2, 0xff, -0x3d, 0x7a, 0xcc, 0x12, 0x46, 0x1c, 0xfa, 0x0f, -0x88, 0x16, 0xed, 0x60, 0xd0, 0xd4, 0xfa, 0x56, -0xa9, 0x9e, 0x35, 0x47, 0xf8, 0x5d, 0x82, 0x08, -0xaf, 0x64, 0xf5, 0x9f, 0x69, 0xfc, 0x73, 0x5f, -0x36, 0x3e, 0x1e, 0xaa, 0xff, 0xec, 0xb4, 0xe3, -0xf3, 0x3f, 0xec, 0xad, 0x33, 0xf2, 0x8f, 0x01, -0xe1, 0x48, 0x67, 0x56, 0xa8, 0x3b, 0x07, 0xd8, -0x8f, 0x92, 0xaf, 0x13, 0x02, 0x37, 0x88, 0x7d, -0x26, 0xfd, 0x87, 0x16, 0x8d, 0x93, 0x70, 0x3f, -0xaa, 0x55, 0x89, 0xf1, 0x7f, 0x98, 0xf0, 0x8f, -0xee, 0x2c, 0x44, 0x2e, 0xfd, 0xc7, 0xa4, 0x9d, -0xa7, 0xf1, 0x82, 0x28, 0x31, 0xde, 0x34, 0xdc, -0x24, 0x85, 0xc5, 0x0e, 0x85, 0x4b, 0xff, 0x31, -0x8a, 0xb6, 0x12, 0x8b, 0x24, 0xff, 0x20, 0xac, -0x40, 0x23, 0x46, 0x18, 0xf9, 0x7a, 0x8f, 0x38, -0x0b, 0xff, 0x24, 0xd9, 0x4b, 0xf8, 0x5c, 0x74, -0xe5, 0x11, 0xe9, 0x1c, 0xc1, 0x9e, 0x13, 0xd0, -0x84, 0xc5, 0x71, 0xc1, 0x5f, 0x88, 0x7f, 0xf2, -0x6e, 0x1f, 0x76, 0x62, 0xf6, 0xa8, 0xd1, 0xa1, -0x96, 0x74, 0xc4, 0x67, 0xe6, 0x1f, 0xda, 0xd4, -0xce, 0xc2, 0xf1, 0x64, 0x5d, 0x54, 0x4a, 0x20, -0x1f, 0x7c, 0x00, 0xcd, 0xad, 0x62, 0x15, 0xbb, -0x10, 0xcf, 0xc4, 0x3f, 0xb4, 0xc9, 0x0e, 0x2b, -0x4f, 0x84, 0x57, 0xb4, 0x0a, 0xb4, 0xfe, 0x6c, -0x27, 0x15, 0x86, 0x4f, 0x78, 0x17, 0xce, 0xc6, -0x3f, 0x59, 0xbd, 0x91, 0x74, 0xf3, 0x3e, 0xfc, -0x04, 0x15, 0x5a, 0xe9, 0x3f, 0xe4, 0xd6, 0x7f, -0xb8, 0x5c, 0xf7, 0x17, 0x0f, 0x80, 0x4f, 0x15, -0xaa, 0x2a, 0x44, 0x02, 0x42, 0xa4, 0x62, 0x57, -0x79, 0xb8, 0x42, 0xfc, 0xb3, 0x29, 0xe7, 0xaf, -0x79, 0xff, 0x45, 0xf8, 0x67, 0x9c, 0x84, 0x25, -0x40, 0x1a, 0x71, 0x81, 0xfb, 0xaf, 0xbf, 0xb0, -0xfd, 0x7d, 0xdb, 0xd0, 0x7f, 0xa4, 0x34, 0x71, -0xfc, 0x92, 0x01, 0x42, 0x0e, 0xfe, 0x71, 0xdc, -0x7f, 0x5d, 0x84, 0x77, 0xac, 0xf9, 0x6f, 0xc0, -0xd5, 0x86, 0x81, 0x8f, 0x43, 0x4b, 0x54, 0x7a, -0x9f, 0xad, 0x47, 0xc7, 0x0b, 0xf0, 0x0f, 0xd7, -0x65, 0x42, 0xce, 0xb8, 0xc1, 0x3f, 0x42, 0x0c, -0xe9, 0xc8, 0x18, 0xe1, 0x91, 0x02, 0x5d, 0xf9, -0xfc, 0xc3, 0x13, 0xfe, 0xd9, 0x65, 0xd1, 0xce, -0x76, 0xc6, 0xa7, 0xce, 0x95, 0x63, 0xc7, 0xa8, -0xbf, 0xed, 0x42, 0x15, 0x29, 0xbc, 0x1d, 0x2e, -0xfd, 0x87, 0xf0, 0xcf, 0x76, 0x8b, 0x76, 0x1e, -0x01, 0xef, 0x8d, 0xc2, 0xc3, 0x46, 0x60, 0x83, -0x74, 0x9a, 0xcf, 0x7a, 0xe4, 0xe4, 0x9f, 0x61, -0x6b, 0xff, 0xc7, 0xe0, 0x68, 0x64, 0x85, 0x89, -0x31, 0xc6, 0xb6, 0x1f, 0x16, 0x7c, 0x70, 0xdc, -0xa5, 0xff, 0x30, 0x7d, 0x0e, 0xda, 0xe9, 0xa5, -0xf7, 0x65, 0xec, 0x70, 0x76, 0x44, 0x28, 0xa4, -0xff, 0xc8, 0x36, 0x6d, 0x9e, 0x96, 0x53, 0xd0, -0x08, 0x7f, 0x49, 0xef, 0x97, 0x53, 0xc6, 0x8d, -0x64, 0x2e, 0xfe, 0x4e, 0xfe, 0x69, 0x50, 0xb2, -0x90, 0x33, 0xc9, 0x3d, 0xa8, 0x53, 0xfd, 0xc7, -0xd3, 0x80, 0x76, 0xc0, 0x92, 0x1e, 0x0f, 0x25, -0xc6, 0x0f, 0xdd, 0xfc, 0xf3, 0x57, 0x4a, 0xf6, -0x50, 0xbc, 0x11, 0x8d, 0x0f, 0x19, 0x85, 0x5a, -0xa4, 0xdf, 0x4f, 0xd0, 0xc9, 0x5f, 0x13, 0x67, -0xe4, 0x1f, 0x7a, 0x48, 0xd3, 0x68, 0x27, 0x57, -0xab, 0x91, 0xd3, 0x57, 0x45, 0xde, 0x5f, 0xc8, -0xfc, 0x1f, 0xa3, 0x79, 0x96, 0x90, 0x9b, 0xcf, -0x3f, 0x06, 0xe4, 0x8c, 0xc2, 0x6b, 0xf8, 0x86, -0xa8, 0x70, 0x89, 0x9d, 0x0f, 0xaf, 0x75, 0xac, -0x4a, 0x06, 0xd6, 0x0b, 0xf3, 0x0b, 0xf1, 0x4f, -0x7f, 0xae, 0x89, 0xff, 0x91, 0x23, 0xc6, 0x33, -0x66, 0x7f, 0xc7, 0x65, 0x7b, 0x0a, 0xf2, 0x4f, -0xf5, 0x17, 0xc6, 0xb7, 0x35, 0xc8, 0xb2, 0x17, -0xc8, 0x6b, 0xfb, 0x52, 0xbd, 0x6d, 0x2b, 0x6d, -0x5b, 0xf4, 0xfe, 0xeb, 0xfd, 0x5c, 0xff, 0x72, -0xf2, 0x4f, 0xaf, 0xfa, 0x1b, 0xb2, 0xc9, 0x72, -0xb2, 0x7f, 0x52, 0x76, 0x96, 0x6b, 0x9e, 0x2d, -0x16, 0xcf, 0xdc, 0x1c, 0xab, 0x2a, 0xc4, 0x3f, -0xbd, 0xd9, 0xb7, 0xb3, 0x8a, 0x0c, 0x3c, 0x2e, -0xd7, 0x86, 0xf9, 0x0c, 0x2d, 0x53, 0xdc, 0x62, -0x5c, 0xba, 0x35, 0x57, 0xaf, 0x9c, 0xfc, 0x93, -0x82, 0x87, 0x4c, 0x35, 0xe3, 0x28, 0xc4, 0xa3, -0xbe, 0x34, 0x09, 0x63, 0xb6, 0xbf, 0xd7, 0xe7, -0x1a, 0xbd, 0x83, 0x7f, 0x8a, 0xfa, 0xad, 0x26, -0xa2, 0xc3, 0x7e, 0xb5, 0x4e, 0x17, 0x3f, 0x5b, -0x9b, 0x2d, 0x9b, 0x83, 0xb9, 0xfe, 0xe5, 0xb8, -0xff, 0x22, 0xb5, 0xc3, 0x1c, 0xbc, 0xf6, 0xb4, -0xf2, 0xa5, 0xfa, 0x1f, 0x61, 0x69, 0x20, 0x3e, -0x9e, 0x1d, 0x89, 0x17, 0xe2, 0x1f, 0x92, 0x22, -0x9f, 0x58, 0xfd, 0xee, 0x2d, 0x58, 0x16, 0x25, -0x46, 0x3d, 0x2d, 0xe3, 0x03, 0x65, 0xed, 0x6c, -0x33, 0x9e, 0x82, 0xab, 0xa7, 0xf3, 0x4f, 0x07, -0xf7, 0xed, 0x70, 0xb6, 0x49, 0xbd, 0xc2, 0x75, -0x6b, 0xde, 0x8d, 0x02, 0xbd, 0x38, 0x36, 0x14, -0x89, 0x44, 0xae, 0xff, 0xea, 0x0e, 0xfd, 0x47, -0x51, 0xb2, 0xea, 0xc4, 0x19, 0xa5, 0x7b, 0xbb, -0x97, 0x1a, 0x4f, 0xd3, 0x69, 0x6a, 0x76, 0xfe, -0xc2, 0x7c, 0xfe, 0x01, 0x43, 0xfd, 0x98, 0x1b, -0x22, 0x41, 0xa3, 0xef, 0x5f, 0xa4, 0x3f, 0x76, -0x19, 0xc4, 0x28, 0xc8, 0xdf, 0xe6, 0x0a, 0xf0, -0x8f, 0x18, 0x95, 0xcf, 0x5b, 0x4e, 0xbd, 0x0e, -0x87, 0xd4, 0x75, 0x99, 0x35, 0x49, 0xea, 0x26, -0x94, 0x6d, 0x31, 0xfa, 0xcb, 0x8a, 0x3c, 0xfe, -0xf9, 0x4e, 0xc2, 0x52, 0x33, 0xd2, 0x9e, 0xcf, -0x09, 0x9a, 0x10, 0x63, 0x8b, 0x9b, 0x7f, 0xdc, -0xf7, 0x5f, 0x93, 0xec, 0xbd, 0x70, 0x39, 0xb6, -0x4c, 0x27, 0xa0, 0x78, 0xaf, 0x8b, 0x9f, 0xf3, -0xef, 0xbf, 0x82, 0xa7, 0x09, 0xe4, 0x04, 0x61, -0x10, 0x7b, 0xe9, 0xf7, 0x7f, 0x6c, 0xec, 0xc9, -0xdd, 0x7f, 0x39, 0xea, 0x8f, 0xdd, 0x8f, 0xda, -0x60, 0x10, 0x91, 0xf3, 0x05, 0xa8, 0xad, 0x00, -0xef, 0xe5, 0xe9, 0x3f, 0x24, 0x68, 0xc5, 0x01, -0x18, 0x1c, 0x5e, 0xa4, 0x91, 0xf5, 0x03, 0x2e, -0xfe, 0x74, 0xdc, 0x7f, 0x55, 0x67, 0x3f, 0xf4, -0xd0, 0xd5, 0x9b, 0xe5, 0x0c, 0x6e, 0xd4, 0xa4, -0xbe, 0x92, 0xcd, 0xd3, 0xf9, 0x50, 0x28, 0x70, -0xff, 0x65, 0x44, 0x83, 0xa0, 0xf1, 0x0b, 0x9a, -0x84, 0x4b, 0x2e, 0xcf, 0x7e, 0xff, 0x45, 0x16, -0x69, 0xa4, 0xc7, 0x70, 0x02, 0xc6, 0x55, 0x62, -0x3c, 0x97, 0x4b, 0x4b, 0x3b, 0xdf, 0x1c, 0xfc, -0xc3, 0x99, 0xbb, 0x5d, 0xfb, 0x32, 0x9a, 0xa8, -0x1a, 0xd4, 0x48, 0x3e, 0xcc, 0x29, 0xb0, 0x7f, -0x27, 0xff, 0xd0, 0x68, 0x90, 0xb0, 0x34, 0x91, -0x68, 0x24, 0x65, 0x5e, 0x13, 0x50, 0xb6, 0xec, -0x14, 0xbe, 0xff, 0x72, 0xf0, 0xcf, 0x29, 0xe6, -0xf9, 0x74, 0xad, 0xde, 0x1d, 0xc9, 0x61, 0x80, -0xad, 0x87, 0x9c, 0xcc, 0xd3, 0x7f, 0x1a, 0x4c, -0xb5, 0x47, 0xa7, 0x86, 0x8f, 0x15, 0xf3, 0xbe, -0xff, 0x53, 0x40, 0xff, 0xd1, 0x0c, 0xec, 0xf9, -0x94, 0x46, 0xe3, 0x34, 0xeb, 0x8e, 0x4f, 0x41, -0xfe, 0x99, 0x80, 0x0c, 0xcd, 0x46, 0xcc, 0xba, -0xe3, 0x53, 0x90, 0x7f, 0xe8, 0xdb, 0x13, 0xfd, -0xfe, 0x0f, 0xda, 0xeb, 0x7a, 0x9f, 0x2a, 0xc4, -0x3f, 0xc5, 0xa7, 0xe0, 0x17, 0xda, 0x02, 0xdd, -0x53, 0x53, 0xc0, 0xdf, 0x82, 0xfc, 0x33, 0xc2, -0x3f, 0x8b, 0x15, 0x4d, 0x08, 0xc4, 0x7a, 0x5c, -0xf9, 0x56, 0x90, 0x7f, 0xc6, 0xe1, 0x33, 0x7c, -0x37, 0x2e, 0x1f, 0x43, 0xfe, 0xdc, 0xc8, 0xcc, -0xfa, 0x4f, 0xa7, 0xf5, 0xf6, 0xdd, 0xc1, 0xba, -0xbf, 0x0f, 0xe3, 0xe6, 0x1f, 0xa6, 0x97, 0xf6, -0x3b, 0x8d, 0xf4, 0x47, 0xf9, 0xfa, 0xd9, 0xf5, -0x9f, 0xac, 0xc8, 0xb0, 0xcb, 0x50, 0x1b, 0xbc, -0x6a, 0xb7, 0x03, 0x63, 0x0a, 0xe9, 0x3f, 0x9c, -0xf9, 0xb4, 0xd4, 0x78, 0xca, 0x2f, 0xa4, 0x7f, -0xd1, 0xc7, 0xcc, 0xfc, 0xfd, 0x1f, 0x3e, 0xfb, -0xfd, 0x1f, 0x52, 0x7f, 0xa8, 0xfa, 0x01, 0xaa, -0x50, 0xe3, 0x71, 0xeb, 0x21, 0x0e, 0xfe, 0x29, -0x35, 0xf5, 0x9f, 0x32, 0xd3, 0xbb, 0x15, 0xcc, -0x4e, 0x2c, 0x28, 0x2e, 0x7f, 0x3f, 0xce, 0xf1, -0x4f, 0xb5, 0x43, 0xcd, 0x78, 0x99, 0x18, 0x3b, -0xdf, 0x2e, 0xa0, 0x6f, 0x38, 0xf9, 0x27, 0xcb, -0x03, 0x69, 0x96, 0xde, 0x7f, 0x11, 0x63, 0x34, -0xee, 0x73, 0xeb, 0x45, 0x6e, 0xfd, 0xc7, 0x50, -0x7b, 0x48, 0xe9, 0x11, 0x3a, 0x67, 0xd5, 0x7f, -0x80, 0x1b, 0x76, 0x79, 0xd7, 0x5a, 0x40, 0xef, -0x2a, 0xa0, 0xff, 0x64, 0xa3, 0xb7, 0x7b, 0xd6, -0xef, 0xff, 0xec, 0xaf, 0xea, 0x9b, 0xee, 0xdd, -0xba, 0x3d, 0xdd, 0x1b, 0x0d, 0xd9, 0xc7, 0xb1, -0x7f, 0xe4, 0xba, 0xff, 0xca, 0xce, 0xef, 0x27, -0x86, 0xcc, 0xf6, 0xb9, 0xe2, 0x53, 0x90, 0x7f, -0x68, 0xb4, 0x1b, 0x41, 0x8a, 0xb3, 0x49, 0x57, -0xfc, 0xf3, 0xef, 0xbf, 0x48, 0xb7, 0xd2, 0x09, -0x84, 0x3c, 0xa6, 0x12, 0xfe, 0x19, 0x47, 0xfe, -0x2b, 0xeb, 0x3f, 0x9a, 0xf0, 0xff, 0xec, 0x5d, -0x6f, 0x70, 0x1c, 0x45, 0x76, 0xef, 0x9d, 0x1d, -0xcb, 0x63, 0x69, 0xa5, 0x1d, 0xdb, 0x12, 0x25, -0x62, 0xe3, 0x5b, 0xaf, 0x05, 0xa7, 0xa3, 0xd6, -0x6b, 0x59, 0x0a, 0x3e, 0xfe, 0x08, 0x69, 0x2c, -0xa8, 0x94, 0x8c, 0x55, 0xe5, 0x2d, 0xc2, 0x07, -0x92, 0xa2, 0xa8, 0x2d, 0xca, 0x1f, 0x9c, 0x2a, -0x1d, 0x51, 0x25, 0xf9, 0xe0, 0xba, 0x23, 0x66, -0x2c, 0x0b, 0x22, 0x63, 0x5d, 0xd0, 0x01, 0x97, -0x38, 0x09, 0xa1, 0xd6, 0x2e, 0x7f, 0x30, 0x57, -0xae, 0x8a, 0x64, 0x63, 0x63, 0xd9, 0x17, 0xdd, -0x58, 0x08, 0x4e, 0x18, 0x63, 0x94, 0x40, 0x11, -0x03, 0x2e, 0x6e, 0x21, 0x22, 0x27, 0x40, 0xe7, -0x08, 0x63, 0x1b, 0xdb, 0xc8, 0x76, 0xba, 0x7b, -0xa6, 0xbb, 0x5f, 0xcf, 0xf4, 0xec, 0x8e, 0x8f, -0x4a, 0x8a, 0xaa, 0xa0, 0x4f, 0xaf, 0x76, 0xbb, -0xd6, 0xd3, 0xcf, 0x33, 0xef, 0xfd, 0xe6, 0xf7, -0x7e, 0xef, 0x75, 0x0a, 0x3f, 0x1d, 0x43, 0x0e, -0x0e, 0x44, 0x4b, 0xb5, 0xe0, 0xf3, 0x72, 0xdc, -0x5f, 0xff, 0x72, 0xfe, 0x89, 0x3c, 0xad, 0x3f, -0x77, 0xf0, 0xf3, 0xeb, 0x28, 0xf8, 0x93, 0x69, -0x58, 0xff, 0x72, 0x41, 0x4e, 0x67, 0xfc, 0x43, -0xfd, 0xbc, 0x7d, 0x07, 0x36, 0x16, 0xbf, 0x60, -0x96, 0xe5, 0x7f, 0xdc, 0xfa, 0xd7, 0x8d, 0x31, -0x6c, 0x20, 0x95, 0xfe, 0x47, 0x63, 0xfe, 0xb1, -0xe6, 0x5d, 0xb5, 0x68, 0x92, 0xda, 0x14, 0x6b, -0xb3, 0xae, 0xd8, 0x3f, 0x9c, 0x4a, 0x9e, 0x52, -0xf0, 0x3f, 0x93, 0xb5, 0x3e, 0xfe, 0x87, 0x5c, -0xe4, 0x52, 0x74, 0x90, 0xc4, 0x9f, 0xfc, 0xb6, -0x87, 0x4a, 0xd4, 0xbf, 0x6c, 0xf4, 0xbc, 0x49, -0x3f, 0xb4, 0xb4, 0xa5, 0xb1, 0x83, 0xe8, 0x66, -0x67, 0xc9, 0x03, 0x8a, 0x78, 0x25, 0xd5, 0xbf, -0x3c, 0x7f, 0x56, 0x24, 0xd0, 0xb0, 0x91, 0x72, -0x96, 0xd4, 0x0b, 0x37, 0x72, 0xe3, 0x3d, 0x5f, -0xfd, 0x8b, 0xee, 0x37, 0x83, 0x2e, 0xd9, 0x38, -0x7e, 0xf6, 0xc5, 0xf7, 0x05, 0xf4, 0x2d, 0xc7, -0x01, 0x1f, 0xee, 0x39, 0x61, 0x0f, 0xfe, 0xf6, -0x52, 0x0e, 0x1b, 0x83, 0x55, 0xdd, 0x01, 0xff, -0x4c, 0xf9, 0xf9, 0x1f, 0x22, 0xe3, 0x9c, 0x23, -0xef, 0x23, 0xc4, 0x9f, 0xad, 0x81, 0x78, 0x2e, -0xf0, 0xd2, 0x31, 0xbd, 0xdb, 0x4d, 0x52, 0x7b, -0x7a, 0x67, 0xf4, 0x11, 0x1b, 0x27, 0xb2, 0x81, -0xa7, 0x82, 0xf9, 0x0b, 0xd4, 0xbf, 0xbc, 0x7c, -0x87, 0x6f, 0xaa, 0x19, 0x34, 0xd2, 0x8f, 0x8d, -0xbd, 0x8a, 0x7c, 0x17, 0xe0, 0x7f, 0xdc, 0xfb, -0x0d, 0x1b, 0xc7, 0x28, 0xde, 0x2e, 0xc1, 0xff, -0x18, 0x5e, 0x36, 0x19, 0x24, 0xfb, 0xd5, 0xa8, -0x91, 0x09, 0xd4, 0x43, 0x8b, 0x7e, 0xfe, 0xc7, -0x49, 0x16, 0xe3, 0x73, 0xc6, 0x79, 0xb6, 0xf1, -0x48, 0xf8, 0xe7, 0x2a, 0xc2, 0xf7, 0x4f, 0x11, -0x7f, 0xcb, 0xef, 0x9f, 0xb9, 0xd4, 0x5b, 0x21, -0xf5, 0x2f, 0x02, 0x72, 0x66, 0xec, 0x11, 0x82, -0x7f, 0xae, 0x70, 0xfc, 0xb3, 0xe8, 0x4d, 0xed, -0x0d, 0xaf, 0xfe, 0x55, 0xc1, 0xeb, 0x5f, 0xf3, -0xba, 0x0c, 0xb6, 0x3b, 0xfc, 0xa2, 0xd1, 0xe0, -0xc0, 0xfd, 0x8e, 0xef, 0x7e, 0x36, 0xa4, 0xfe, -0xe5, 0x7a, 0x0f, 0xff, 0xbe, 0x43, 0x85, 0x40, -0xde, 0x27, 0x53, 0x69, 0x0f, 0x9a, 0xce, 0x0a, -0x7c, 0x52, 0x07, 0xf3, 0xaf, 0x4d, 0xd1, 0x60, -0x26, 0xc6, 0xdc, 0x62, 0x7d, 0x10, 0x52, 0xff, -0x92, 0xbc, 0xc1, 0x8d, 0x0b, 0x5a, 0x98, 0xfe, -0xd9, 0xa9, 0xe1, 0xde, 0x6e, 0xda, 0x26, 0xf2, -0x7b, 0xca, 0x83, 0xee, 0x5f, 0x48, 0xf5, 0xaf, -0xcf, 0xf9, 0xff, 0xbe, 0x99, 0x75, 0x76, 0xcc, -0x8a, 0xeb, 0x3f, 0xc3, 0xf8, 0x9f, 0x0b, 0x81, -0xfa, 0x97, 0x8b, 0x76, 0x2c, 0xec, 0x8d, 0xdb, -0x84, 0x7f, 0x3e, 0x61, 0xfc, 0xcf, 0x2c, 0xcf, -0x77, 0xa4, 0xfe, 0x25, 0x57, 0x7f, 0x00, 0x0d, -0xf2, 0x2e, 0xe3, 0x7f, 0xe6, 0xb8, 0xfe, 0x73, -0x9d, 0x91, 0xb0, 0xbe, 0x74, 0xd5, 0x3e, 0x04, -0xed, 0x2c, 0x25, 0x68, 0x87, 0xe1, 0x9f, 0x7b, -0xc6, 0x53, 0x9c, 0xff, 0x61, 0xeb, 0xad, 0x1b, -0x81, 0x7f, 0x08, 0x90, 0x7e, 0xfa, 0xfc, 0x0e, -0xee, 0x1f, 0x4e, 0x24, 0x4e, 0xf2, 0xf8, 0xf0, -0x0b, 0x88, 0x7f, 0x2e, 0xa3, 0xe6, 0x63, 0xc9, -0xfd, 0xf1, 0x19, 0x71, 0x7f, 0x7a, 0xfe, 0x19, -0x13, 0xf8, 0xe7, 0x67, 0x52, 0xb4, 0x3c, 0x28, -0x85, 0x91, 0xd3, 0xf8, 0x55, 0xeb, 0x0e, 0x8a, -0x7f, 0x38, 0xbe, 0xb2, 0xad, 0x17, 0x0c, 0x80, -0x76, 0x96, 0x17, 0xab, 0x7e, 0x5c, 0xc1, 0x61, -0xcf, 0x49, 0xcd, 0xdb, 0xef, 0x84, 0x0a, 0xff, -0xcc, 0xa0, 0x03, 0x76, 0x83, 0x78, 0xac, 0x76, -0x60, 0x23, 0xed, 0x51, 0x91, 0xef, 0x23, 0x35, -0xfe, 0x31, 0x9b, 0x25, 0xd8, 0x73, 0x09, 0x1d, -0x67, 0xf8, 0x87, 0x5d, 0x3f, 0xa8, 0x7f, 0x61, -0x23, 0x27, 0xa7, 0x21, 0x22, 0x84, 0xbe, 0xd3, -0xc5, 0x3f, 0xec, 0xfa, 0x01, 0xff, 0x43, 0x68, -0x81, 0x66, 0x2b, 0xf9, 0x07, 0xb4, 0x3e, 0x02, -0x89, 0x02, 0x82, 0x7f, 0xd8, 0xf5, 0x03, 0xfe, -0x67, 0x0a, 0x6d, 0x37, 0x88, 0xfe, 0xb9, 0x43, -0xe0, 0x9f, 0xd4, 0xf6, 0x12, 0xfc, 0xcf, 0x14, -0xe5, 0x7f, 0xd6, 0x03, 0xbc, 0x34, 0x6e, 0x7a, -0xeb, 0x4f, 0xf2, 0xfb, 0x0d, 0x09, 0xfe, 0xe7, -0x55, 0xfc, 0x72, 0x48, 0xf5, 0xcf, 0xe2, 0x13, -0xcd, 0xe3, 0x43, 0x8e, 0xcf, 0x63, 0xcb, 0x41, -0xfd, 0x8b, 0xf3, 0x3f, 0x04, 0xff, 0xac, 0x61, -0x9f, 0xf8, 0xf8, 0x9f, 0x53, 0x37, 0x89, 0xfd, -0x6a, 0xe7, 0xd1, 0x28, 0xc6, 0x03, 0x22, 0xad, -0x9f, 0xf7, 0x8c, 0xc5, 0xfe, 0xfa, 0x97, 0xa7, -0x8e, 0x3e, 0x4f, 0xd4, 0xd1, 0x93, 0xdb, 0xf8, -0x27, 0xef, 0xa2, 0x00, 0xff, 0xb3, 0xd9, 0x2c, -0xea, 0x00, 0xed, 0xec, 0x26, 0xf8, 0x87, 0xc3, -0x9e, 0xff, 0xb4, 0x19, 0xff, 0xc3, 0xe3, 0x8f, -0x01, 0xea, 0x5f, 0xa9, 0x11, 0xbb, 0x51, 0x02, -0x42, 0xaf, 0xa6, 0xb6, 0x32, 0xfd, 0x33, 0xf3, -0xbf, 0x84, 0x7f, 0x8e, 0x12, 0x3e, 0x8d, 0x18, -0x77, 0xb8, 0x08, 0x93, 0xfb, 0xf3, 0x35, 0xbe, -0xbe, 0x50, 0x07, 0xae, 0x9f, 0xa8, 0xbb, 0xe7, -0x03, 0x18, 0xf3, 0x5b, 0x27, 0xc0, 0xff, 0x4c, -0x4b, 0xfc, 0x8f, 0xc3, 0x8c, 0x98, 0xe7, 0x31, -0xef, 0xab, 0xb3, 0x21, 0xf8, 0xc7, 0x6e, 0x8e, -0x6d, 0x80, 0xf7, 0x9b, 0xed, 0xf9, 0x7f, 0xcc, -0x57, 0xff, 0xf2, 0xd0, 0xce, 0x21, 0xb4, 0xdb, -0x05, 0x42, 0xde, 0x27, 0x97, 0xd0, 0x53, 0xa1, -0xf8, 0xa7, 0xc9, 0x3c, 0xa1, 0xef, 0x27, 0xef, -0x0b, 0xb7, 0xf7, 0xf2, 0x27, 0xe8, 0x24, 0x6b, -0x54, 0x79, 0x43, 0xc5, 0xff, 0x9c, 0xb6, 0x47, -0x0d, 0x82, 0x1f, 0x7a, 0xc9, 0xf3, 0x5b, 0x4d, -0x19, 0xa1, 0x94, 0x57, 0xc8, 0x2e, 0xf2, 0xf8, -0xb0, 0xb7, 0x7f, 0x19, 0x43, 0x3b, 0xbf, 0xb1, -0x2f, 0xd8, 0xab, 0x89, 0xfe, 0x99, 0xcb, 0x7e, -0x3e, 0xb4, 0x7e, 0xed, 0x7e, 0xf5, 0x71, 0x50, -0xff, 0xe3, 0xc6, 0x93, 0x36, 0xe7, 0xe9, 0x02, -0x12, 0x69, 0x4e, 0x63, 0xf8, 0x47, 0xbc, 0xff, -0x32, 0xfc, 0x83, 0xf3, 0x97, 0x79, 0xce, 0x6e, -0x29, 0x56, 0xfd, 0x49, 0x95, 0x9b, 0xbf, 0xde, -0xba, 0xb8, 0xe2, 0x02, 0x6b, 0xe4, 0x11, 0xfc, -0x8c, 0xa7, 0xff, 0x71, 0xa3, 0xcd, 0x41, 0x13, -0x5f, 0x7f, 0x2e, 0xce, 0x77, 0x74, 0xca, 0xf2, -0xae, 0xff, 0xb3, 0x0a, 0xb6, 0x1e, 0x39, 0x4b, -0x0d, 0xbe, 0xfe, 0x97, 0x68, 0x17, 0x5e, 0x2f, -0xf0, 0xde, 0xbb, 0xac, 0x70, 0x1f, 0xa8, 0x7f, -0xb9, 0x61, 0x67, 0x88, 0xf8, 0xd3, 0x04, 0xf9, -0x9d, 0xc5, 0x73, 0x11, 0xaf, 0xf6, 0xd6, 0xf1, -0xfd, 0xce, 0xa1, 0xb3, 0x6e, 0xff, 0x08, 0xcf, -0x2f, 0x6f, 0xb2, 0xf8, 0xf9, 0x99, 0xbf, 0xfe, -0xe5, 0xf9, 0x27, 0x35, 0x4a, 0xd6, 0x0b, 0xff, -0x30, 0x61, 0x86, 0x54, 0xff, 0x32, 0x78, 0x3c, -0xbf, 0x8a, 0x7e, 0xe8, 0x24, 0x1d, 0x28, 0xf3, -0x78, 0xcb, 0x35, 0x26, 0x00, 0xff, 0xd3, 0x2d, -0xf2, 0xef, 0x11, 0xfb, 0x56, 0x67, 0xc7, 0x40, -0x2f, 0xd7, 0xff, 0x14, 0xd1, 0x8e, 0x79, 0xf4, -0xab, 0x69, 0xa8, 0xff, 0x81, 0xeb, 0x6f, 0x71, -0x76, 0xf4, 0x6b, 0x33, 0x31, 0x96, 0xaf, 0xcd, -0x1d, 0xa1, 0xf8, 0x87, 0xf8, 0xe7, 0x08, 0x89, -0xc6, 0x68, 0x11, 0xd7, 0xff, 0x4c, 0x33, 0xff, -0x8c, 0xf1, 0xf8, 0x83, 0x7e, 0x0a, 0xd0, 0xdd, -0x11, 0x74, 0x83, 0xf3, 0x34, 0xdb, 0x6f, 0xd5, -0x10, 0xce, 0x47, 0xc4, 0x3f, 0x1b, 0x86, 0x16, -0x3b, 0x42, 0xff, 0x53, 0x0d, 0xd2, 0x3a, 0xed, -0xdf, 0x71, 0x54, 0xf8, 0x67, 0x2b, 0xf3, 0x27, -0xc7, 0x3f, 0x13, 0xf1, 0xab, 0xfa, 0xb5, 0x86, -0x16, 0x09, 0x36, 0x87, 0xf3, 0x3f, 0x84, 0xf6, -0x39, 0x83, 0x0e, 0x4f, 0xa6, 0x25, 0xda, 0x27, -0x9c, 0xff, 0xb1, 0xaa, 0x1a, 0xb5, 0x13, 0xd8, -0x2d, 0x29, 0x09, 0xe6, 0x85, 0xf3, 0x3f, 0x39, -0x82, 0xaf, 0xf0, 0x6b, 0x6c, 0x5a, 0x82, 0x91, -0xe1, 0xfa, 0x9f, 0x9e, 0x64, 0x3f, 0x71, 0x4b, -0x47, 0xb3, 0x04, 0x0b, 0x39, 0x7e, 0x0e, 0xd4, -0xbf, 0x72, 0x14, 0x16, 0xce, 0x99, 0xbf, 0x52, -0x03, 0x21, 0x3f, 0xff, 0x83, 0x83, 0x12, 0xfe, -0x7d, 0xfd, 0x27, 0x56, 0x88, 0xde, 0x0c, 0xd6, -0xbf, 0x32, 0x2e, 0xfb, 0xb7, 0x13, 0xdf, 0xa8, -0xc3, 0xbe, 0xcb, 0x0e, 0xe5, 0x7f, 0x48, 0x5b, -0x9c, 0xc2, 0x2d, 0xa5, 0xf8, 0x9f, 0x07, 0x31, -0x1e, 0x38, 0xe8, 0xa3, 0x41, 0x42, 0xf9, 0x1f, -0x0c, 0x72, 0x4c, 0x82, 0x7f, 0xac, 0xd6, 0x09, -0x48, 0xfb, 0x84, 0xf3, 0x3f, 0xc8, 0x85, 0xcd, -0x66, 0x08, 0x50, 0x0c, 0xf0, 0x3f, 0xc5, 0xc4, -0xa0, 0xc2, 0x2d, 0x25, 0xf8, 0x1f, 0x23, 0x47, -0xe2, 0x8f, 0xef, 0x35, 0x2a, 0x94, 0xff, 0x59, -0x55, 0x34, 0x1e, 0xec, 0x08, 0x6e, 0x33, 0x9c, -0xff, 0xb9, 0xdf, 0xb8, 0x01, 0x7b, 0x6f, 0xd8, -0x0e, 0xf1, 0xa7, 0x9f, 0xff, 0x69, 0x2f, 0x24, -0x66, 0x30, 0xec, 0xb9, 0x9a, 0xc8, 0xda, 0x4f, -0x03, 0xfc, 0x43, 0x8c, 0xac, 0x92, 0xff, 0xd1, -0xff, 0xc5, 0xa5, 0x7d, 0x6a, 0x64, 0xfc, 0x53, -0xa2, 0xfe, 0xf5, 0x0c, 0x4e, 0x73, 0x5f, 0xe8, -0xcd, 0x6b, 0xe1, 0x6b, 0x7e, 0xb8, 0xfe, 0x87, -0xb1, 0x0d, 0xbb, 0x25, 0xda, 0xa1, 0xa4, 0xfe, -0xa7, 0xd4, 0x7a, 0x75, 0xfd, 0x0b, 0x0d, 0xc7, -0x82, 0xfd, 0x5f, 0xe1, 0xfa, 0x1f, 0xb2, 0xbb, -0x66, 0xf5, 0x7e, 0x41, 0xfd, 0x8b, 0xe2, 0x9f, -0xbb, 0x29, 0x9f, 0xa3, 0x5f, 0xb3, 0xe4, 0x6d, -0x2a, 0xf9, 0x1f, 0xd2, 0xff, 0xd5, 0xb6, 0x36, -0x81, 0xd7, 0x9b, 0x97, 0x8c, 0x66, 0xf5, 0xfa, -0xa0, 0xfe, 0xc7, 0x20, 0x32, 0x6c, 0x8a, 0x7f, -0xd4, 0xfd, 0x5f, 0x72, 0xfd, 0x2b, 0x4b, 0x64, -0x06, 0x64, 0x77, 0xa1, 0xfb, 0xf5, 0xf1, 0x3f, -0x1d, 0x8d, 0xae, 0x8c, 0x3c, 0xbd, 0x56, 0xed, -0x4f, 0x49, 0xff, 0x83, 0xaf, 0x3f, 0x97, 0x78, -0x8e, 0xc0, 0x36, 0x2b, 0xe4, 0xfa, 0x03, 0xf5, -0xaf, 0x75, 0xee, 0xfd, 0x50, 0x08, 0xf1, 0x4f, -0x80, 0xff, 0x31, 0x5d, 0x6f, 0x5b, 0x21, 0xfe, -0xf7, 0xeb, 0x7f, 0x32, 0x6e, 0x91, 0xf2, 0x08, -0xc1, 0x3f, 0x80, 0xf6, 0x29, 0xc5, 0xff, 0xb8, -0x34, 0x45, 0xea, 0x98, 0xf2, 0x79, 0x51, 0xe1, -0x1f, 0x0c, 0x7b, 0x0e, 0xa0, 0xe5, 0x4e, 0x99, -0xfe, 0x2f, 0x5e, 0xff, 0xc2, 0xb0, 0xc7, 0xf8, -0x8a, 0xe0, 0x1f, 0x40, 0xfb, 0x94, 0xe2, 0x7f, -0x4a, 0xc6, 0x13, 0xbf, 0xfe, 0xa7, 0x7d, 0x2a, -0x79, 0x4a, 0xdb, 0x62, 0xfd, 0x6a, 0xf0, 0x80, -0x3a, 0x7f, 0x05, 0xf4, 0x3f, 0x04, 0xf6, 0x3c, -0x84, 0x5e, 0x6e, 0x5a, 0xad, 0x8e, 0x3f, 0xb2, -0xfe, 0x87, 0x14, 0xf5, 0x96, 0x4c, 0x6a, 0x18, -0x08, 0x69, 0x37, 0xb3, 0x65, 0xb2, 0xde, 0x3b, -0x80, 0x7f, 0xce, 0x2e, 0xa9, 0xad, 0xe8, 0xd2, -0x0f, 0x0c, 0x86, 0xe4, 0x3b, 0x59, 0xff, 0xf3, -0x39, 0x6a, 0x1b, 0x4b, 0xd6, 0x12, 0xd8, 0x63, -0x91, 0xf7, 0x77, 0x6d, 0xc6, 0xad, 0x38, 0xa8, -0xfb, 0xbf, 0x20, 0xfe, 0xf9, 0x3a, 0x15, 0xe2, -0x9f, 0x80, 0xfe, 0x87, 0xe8, 0xeb, 0x5a, 0x71, -0xb4, 0x6f, 0x51, 0xc7, 0x73, 0x27, 0x88, 0x7f, -0x06, 0x35, 0x92, 0x88, 0x49, 0xfe, 0xed, 0x50, -0xe8, 0x99, 0x03, 0xf8, 0xa7, 0xd2, 0xad, 0x76, -0x85, 0xe4, 0x6b, 0x05, 0xfe, 0x31, 0x29, 0xcd, -0x58, 0x0c, 0xc3, 0x03, 0xdc, 0xfd, 0xae, 0xfe, -0xc7, 0xa9, 0x19, 0xa4, 0xb0, 0xd0, 0x9f, 0xdf, -0xc3, 0xf4, 0x3f, 0x4e, 0x32, 0xa7, 0xd8, 0x66, -0x39, 0xfe, 0xe7, 0x1a, 0xe1, 0x7f, 0x88, 0x0c, -0x86, 0xf7, 0x7f, 0x05, 0xf8, 0x1f, 0xdb, 0x0c, -0xa0, 0x9d, 0x8e, 0x6b, 0x96, 0xab, 0x08, 0x4a, -0xcf, 0xd8, 0xa4, 0x11, 0xbe, 0x26, 0xa4, 0xfe, -0xc5, 0x8d, 0x81, 0xd8, 0xb3, 0x8c, 0x11, 0xda, -0x16, 0x82, 0x7f, 0x7c, 0x6e, 0xac, 0xf2, 0x0c, -0x93, 0x94, 0x1a, 0x2b, 0x15, 0xf8, 0x87, 0x79, -0x63, 0x8d, 0x6b, 0x30, 0xbd, 0x9c, 0xf9, 0x46, -0x09, 0xfd, 0x0f, 0xf1, 0xc6, 0xf7, 0x22, 0xe2, -0x1f, 0xc9, 0xdb, 0x99, 0xd4, 0x07, 0x5a, 0x19, -0xfc, 0x03, 0xae, 0x7f, 0x3f, 0x7e, 0x5f, 0x88, -0x80, 0x7f, 0x80, 0x7f, 0x12, 0xe8, 0x59, 0xce, -0x60, 0x94, 0xaa, 0x7f, 0xa1, 0x97, 0xfb, 0x56, -0x7e, 0x8c, 0x8d, 0x65, 0x56, 0x04, 0xfc, 0x83, -0xd1, 0x8e, 0xfe, 0xa5, 0xd6, 0x3a, 0x9e, 0x6c, -0x5a, 0x91, 0xb0, 0xde, 0x2e, 0x5b, 0xff, 0x12, -0xde, 0xe8, 0x89, 0x5f, 0xb9, 0xf7, 0x1a, 0x5a, -0x15, 0xa5, 0xfe, 0x75, 0x14, 0x6d, 0xc1, 0x68, -0x5c, 0xd0, 0x3e, 0x65, 0xeb, 0x5f, 0x31, 0xda, -0x6d, 0xfa, 0xd3, 0x12, 0xfd, 0xef, 0x92, 0xfe, -0xe7, 0xe5, 0xde, 0x95, 0xc5, 0x1d, 0x9b, 0x6f, -0xf9, 0xd0, 0xfe, 0x9b, 0xbe, 0xf2, 0xf5, 0x2f, -0xaf, 0xad, 0x60, 0x09, 0xbe, 0xdf, 0xfc, 0xf3, -0x16, 0x6e, 0x09, 0xa9, 0x7f, 0x31, 0xa3, 0x54, -0xff, 0xbb, 0xc4, 0xff, 0xc4, 0x68, 0x21, 0x2c, -0x58, 0x8f, 0x50, 0xea, 0x7f, 0xa6, 0x5c, 0x19, -0x0c, 0x11, 0x8a, 0xbc, 0x1e, 0x11, 0xff, 0xc4, -0x68, 0xff, 0xf5, 0x27, 0xc6, 0x7b, 0x51, 0xf1, -0xcf, 0xa3, 0x6e, 0xe1, 0x6c, 0x7b, 0x44, 0xfc, -0xe3, 0x1a, 0x27, 0x98, 0x42, 0xe6, 0xd5, 0x70, -0xfc, 0xc3, 0xbb, 0xbd, 0x28, 0xff, 0xe0, 0xef, -0x3f, 0xf2, 0xe3, 0x1f, 0x79, 0x77, 0x9f, 0x94, -0xc1, 0x3f, 0xe0, 0x5b, 0xaa, 0x17, 0x3a, 0x57, -0x78, 0x1d, 0x5f, 0x76, 0x35, 0xc4, 0x3f, 0xba, -0x1f, 0xff, 0xb8, 0x68, 0x27, 0x46, 0x8d, 0x8f, -0xd0, 0x29, 0xf7, 0x93, 0x8f, 0x6d, 0xf7, 0xab, -0xd8, 0xdf, 0x4a, 0xf8, 0x87, 0xed, 0x77, 0x01, -0x35, 0x9a, 0xd2, 0xe3, 0x68, 0x6b, 0x2c, 0x63, -0x2d, 0x30, 0x49, 0x47, 0x58, 0x78, 0xfd, 0xab, -0xc2, 0xf3, 0xa7, 0x2b, 0x04, 0x92, 0xfd, 0xf9, -0x24, 0x8f, 0x0f, 0x80, 0xff, 0x99, 0xd2, 0x2f, -0x69, 0x9e, 0x9e, 0xe7, 0x75, 0xb4, 0x45, 0xba, -0xfe, 0x69, 0xe4, 0xc3, 0x3f, 0x6c, 0xbf, 0xcb, -0x98, 0xb1, 0xa5, 0x7c, 0xfd, 0xab, 0xe0, 0x0d, -0x22, 0x10, 0xb4, 0x8f, 0xc0, 0x3f, 0xfc, 0xfe, -0x97, 0xf8, 0x9f, 0x23, 0x5a, 0xb6, 0x70, 0x1f, -0xe9, 0x67, 0x7c, 0xaa, 0x3c, 0xfe, 0x69, 0x72, -0xcb, 0x5e, 0xe3, 0x37, 0x36, 0xf5, 0x72, 0x9a, -0x42, 0xd4, 0xbf, 0x74, 0x15, 0xff, 0x43, 0x8c, -0x62, 0x55, 0x8e, 0xd2, 0xb6, 0x65, 0xf1, 0xcf, -0xe6, 0xf8, 0x0b, 0xd4, 0xa8, 0xde, 0x14, 0x3f, -0x89, 0x7e, 0x5d, 0x1e, 0xff, 0xd0, 0xe8, 0xa1, -0xb5, 0x3a, 0x35, 0x80, 0xdf, 0xb8, 0x1a, 0x8a, -0x7f, 0x00, 0xda, 0x39, 0xb5, 0xf8, 0x02, 0x7a, -0xbc, 0x3c, 0xfe, 0xa1, 0x57, 0xbb, 0xf0, 0x47, -0x13, 0x55, 0x0f, 0x78, 0xfd, 0xef, 0x0b, 0xc8, -0x27, 0xbf, 0x75, 0xbf, 0xfa, 0x5c, 0xc2, 0x3f, -0x12, 0x3a, 0x5a, 0x92, 0x0f, 0xf6, 0xcb, 0x87, -0xf1, 0x3f, 0xd4, 0x40, 0x5e, 0x7f, 0xf7, 0x02, -0xd0, 0xdf, 0x14, 0xd0, 0x3f, 0x83, 0x68, 0x09, -0xf6, 0x3b, 0x57, 0x0e, 0xff, 0x10, 0xa3, 0x6f, -0x3e, 0xf8, 0xe4, 0x73, 0x35, 0xfe, 0xb9, 0x8b, -0x47, 0xef, 0x7c, 0xd2, 0x89, 0x9f, 0x67, 0x61, -0xfc, 0xb1, 0x12, 0xf8, 0xc7, 0xcb, 0x56, 0x56, -0xcd, 0x80, 0x36, 0x65, 0x97, 0xc3, 0x3f, 0xb7, -0x12, 0xbd, 0x0a, 0xfd, 0x76, 0xa2, 0x6a, 0x27, -0xfe, 0xdf, 0x8f, 0x80, 0x7f, 0x3c, 0xff, 0x58, -0x95, 0xe6, 0xa2, 0x89, 0x32, 0xf8, 0xe7, 0xa8, -0x84, 0x06, 0x6d, 0xa1, 0xf7, 0xee, 0x2e, 0x81, -0x7f, 0xbc, 0xfd, 0x5a, 0x35, 0x4e, 0x2c, 0xd8, -0xbf, 0x03, 0xf0, 0x4f, 0x9d, 0x54, 0xff, 0xba, -0xab, 0x73, 0x40, 0xc9, 0xff, 0xc4, 0xb8, 0xff, -0x21, 0xfe, 0x39, 0x6c, 0xa7, 0xbb, 0x8c, 0x28, -0xfc, 0x4f, 0xa3, 0xbb, 0xbb, 0xfd, 0xe8, 0xd6, -0x8e, 0x46, 0x35, 0xde, 0xe3, 0xfa, 0xe7, 0x79, -0x00, 0xff, 0x1c, 0x46, 0xe9, 0xbc, 0x51, 0x86, -0xff, 0x81, 0xf9, 0xf7, 0x52, 0xae, 0x31, 0x9f, -0x50, 0xe1, 0xc3, 0x30, 0xfc, 0x63, 0xb7, 0xa3, -0x72, 0xf8, 0x07, 0x81, 0xfb, 0xf3, 0xe2, 0xbd, -0x6d, 0x56, 0x02, 0xe2, 0x2b, 0x05, 0xfe, 0xa9, -0x03, 0xf8, 0x67, 0xc8, 0xc9, 0x76, 0x36, 0x46, -0xe4, 0x7f, 0x28, 0x5f, 0xea, 0x36, 0x0e, 0x9c, -0x60, 0xf8, 0xa7, 0x8c, 0xfe, 0x07, 0x1d, 0x1a, -0x5b, 0xb9, 0xa9, 0x33, 0x22, 0xff, 0x43, 0xd0, -0xce, 0x6c, 0x67, 0x9b, 0x95, 0x21, 0xc6, 0xdb, -0xee, 0x20, 0x20, 0x15, 0xfe, 0xa9, 0x16, 0xfe, -0x21, 0xc4, 0x69, 0x67, 0x34, 0xfe, 0xc7, 0xf3, -0x3f, 0x8e, 0xde, 0x88, 0xb9, 0xa5, 0xa6, 0x3c, -0xfe, 0x79, 0x09, 0xad, 0x44, 0x46, 0x14, 0xfe, -0xc7, 0xdb, 0xdd, 0x41, 0x7b, 0x55, 0xde, 0x88, -0xc4, 0xff, 0x78, 0xfe, 0xec, 0xc8, 0x9e, 0x33, -0xa2, 0xf0, 0x3f, 0x1e, 0xda, 0xb9, 0x5a, 0x68, -0x1f, 0xcc, 0xf8, 0xf8, 0x9f, 0x10, 0xfc, 0xe3, -0x96, 0x21, 0x3a, 0xda, 0xb4, 0x0d, 0x11, 0xf9, -0x1f, 0x9a, 0xdd, 0x1a, 0xb1, 0xff, 0xaf, 0x87, -0xff, 0x69, 0xa0, 0x32, 0xe6, 0xeb, 0xe0, 0x7f, -0xb2, 0x9d, 0xca, 0xf5, 0xa1, 0xfc, 0x4f, 0x26, -0xd7, 0x78, 0x5d, 0xfc, 0x4f, 0x1b, 0x1a, 0x88, -0xc2, 0xff, 0x78, 0xbb, 0xbb, 0x12, 0xbb, 0x3b, -0x17, 0x81, 0xff, 0x11, 0xeb, 0x51, 0x7b, 0xce, -0x88, 0xc6, 0xff, 0x54, 0x11, 0x3c, 0x30, 0x4d, -0x1a, 0xe1, 0xcb, 0xf3, 0x3f, 0xee, 0xa6, 0x3a, -0x88, 0x91, 0xcd, 0x19, 0x91, 0xf8, 0x1f, 0xe2, -0xb4, 0x3d, 0xb1, 0x17, 0x53, 0xd9, 0x0e, 0xb5, -0x3f, 0xfd, 0xfd, 0x5f, 0xee, 0xd5, 0x8e, 0xac, -0x6b, 0xcd, 0x25, 0x22, 0xf1, 0x3f, 0xde, 0xb7, -0xbd, 0x6d, 0x7f, 0x11, 0x8d, 0xff, 0xf1, 0xbc, -0x6d, 0xb5, 0x99, 0x35, 0x51, 0xf8, 0x9f, 0xac, -0xbd, 0x83, 0xa0, 0x9d, 0x51, 0xb4, 0xaa, 0xdf, -0x88, 0xc8, 0xff, 0x90, 0xa7, 0x63, 0xd8, 0xc8, -0xe4, 0x2a, 0x55, 0xcf, 0x8b, 0x52, 0xff, 0x7c, -0x1a, 0x1d, 0xd4, 0x57, 0x3a, 0xca, 0xe7, 0x57, -0x89, 0x7f, 0x3e, 0x44, 0xe7, 0xed, 0xd6, 0x7c, -0x4d, 0x44, 0xfe, 0x87, 0xc6, 0x13, 0x9d, 0xf6, -0x7f, 0x95, 0xe4, 0x7f, 0x40, 0xfe, 0xd2, 0x5b, -0x9f, 0x59, 0x9d, 0xe2, 0xf9, 0xab, 0x3a, 0x14, -0xff, 0x7c, 0xc5, 0xaf, 0x3f, 0x77, 0x9b, 0xa1, -0xba, 0x7e, 0x14, 0xe8, 0xff, 0xf2, 0xd6, 0xc7, -0xbf, 0xaf, 0x8e, 0x57, 0x70, 0xfe, 0x0f, 0x05, -0x39, 0x2e, 0x8d, 0x36, 0x6c, 0x35, 0x20, 0x65, -0xbe, 0x83, 0xfa, 0xe7, 0x7d, 0xb4, 0x48, 0xe1, -0x76, 0x73, 0x9f, 0xba, 0xa5, 0x4f, 0x99, 0xbf, -0x42, 0xf0, 0x0f, 0xbe, 0x5b, 0x86, 0xca, 0xf1, -0x3f, 0xc8, 0x0d, 0xda, 0x35, 0xb3, 0x54, 0xff, -0xd3, 0x62, 0x27, 0xca, 0xf0, 0x3f, 0xb5, 0x02, -0xff, 0xe8, 0xc3, 0x63, 0x8d, 0x7b, 0xfd, 0xf9, -0xeb, 0x16, 0x35, 0xff, 0xe3, 0x7e, 0x6b, 0x3f, -0x52, 0xec, 0x57, 0xf2, 0x45, 0x12, 0xfe, 0xe1, -0xd9, 0x6d, 0x44, 0xbf, 0xd5, 0xf1, 0xc7, 0xe7, -0x06, 0x35, 0xff, 0xe3, 0xed, 0xb7, 0xd9, 0xc9, -0x94, 0xe1, 0x7f, 0x40, 0xfd, 0x4b, 0x3f, 0x7f, -0x1d, 0xfc, 0xcf, 0x29, 0x57, 0xf6, 0x9c, 0x4a, -0x74, 0xc6, 0xdb, 0xcc, 0x08, 0xf8, 0x67, 0x67, -0x3c, 0x8b, 0x8e, 0xf6, 0x66, 0x53, 0x95, 0x7b, -0xa3, 0xe9, 0x9f, 0x07, 0xb5, 0x2e, 0x7c, 0x63, -0x64, 0x71, 0x42, 0x50, 0xe8, 0xeb, 0xe4, 0xfe, -0x2f, 0x8f, 0x7f, 0xa3, 0x8e, 0x6d, 0xaa, 0x7c, -0x4e, 0x0b, 0x30, 0x42, 0x1d, 0x0a, 0xfe, 0xc7, -0x8c, 0x93, 0x41, 0x49, 0xad, 0xa9, 0x2e, 0x57, -0x3f, 0xb6, 0x45, 0x9a, 0x0f, 0xa0, 0xc0, 0x3f, -0x9e, 0x2c, 0x0a, 0x25, 0x8b, 0x02, 0x06, 0x87, -0xf0, 0x3f, 0x1f, 0xb8, 0x7c, 0x2c, 0x7d, 0x30, -0x73, 0x4a, 0x7d, 0x6f, 0x38, 0xff, 0x63, 0x55, -0xa5, 0x62, 0xdd, 0x62, 0x7e, 0x42, 0xa9, 0xfa, -0x17, 0x75, 0x8b, 0x8d, 0xdf, 0x17, 0x82, 0x7a, -0xb0, 0x90, 0xfa, 0x17, 0x6d, 0x84, 0x9f, 0xa9, -0xa0, 0x13, 0x11, 0xc9, 0xd8, 0x9f, 0x50, 0xfc, -0x93, 0x21, 0xfe, 0xc1, 0xbf, 0xaf, 0x3d, 0x86, -0x36, 0x98, 0x71, 0x57, 0x11, 0x14, 0x82, 0x7f, -0x6e, 0x82, 0xfe, 0x89, 0x3d, 0x6e, 0x27, 0xff, -0x2d, 0x1a, 0xfe, 0xf1, 0xf8, 0x6a, 0x3b, 0xd9, -0x5f, 0x5a, 0xff, 0x1c, 0x63, 0xfc, 0x33, 0x89, -0x1e, 0xda, 0x4a, 0xbb, 0x2a, 0xaf, 0xd0, 0x4f, -0x02, 0xfc, 0x63, 0xbe, 0x20, 0xed, 0x97, 0xcc, -0x3b, 0x8a, 0xaa, 0x7f, 0xc6, 0x46, 0xf7, 0x44, -0x55, 0xab, 0xc2, 0x9f, 0xa1, 0xfc, 0x4f, 0xbb, -0x9d, 0x2c, 0xee, 0x88, 0xa4, 0x7f, 0x16, 0xb2, -0xe7, 0x6d, 0x45, 0xb4, 0x39, 0x32, 0xff, 0x63, -0x25, 0x77, 0x5e, 0x4f, 0xfd, 0x8b, 0x14, 0x52, -0xaf, 0x0b, 0xff, 0x84, 0xcc, 0xeb, 0x2b, 0xc9, -0xff, 0x94, 0xc4, 0x3f, 0xf3, 0xf2, 0x81, 0x6c, -0x5b, 0x12, 0xff, 0x30, 0x3c, 0x30, 0x19, 0xf7, -0x1a, 0xdb, 0x73, 0x51, 0xf1, 0x0f, 0x95, 0x3d, -0xaf, 0xdd, 0x30, 0x49, 0x85, 0x34, 0xe5, 0xf1, -0x8f, 0x96, 0xa2, 0x46, 0x0d, 0x33, 0x28, 0xfe, -0x99, 0x0e, 0xc5, 0x3f, 0x83, 0x9e, 0xec, 0x59, -0x18, 0xe5, 0xf0, 0x8f, 0xfb, 0x1f, 0x51, 0x29, -0xe9, 0xcf, 0x5f, 0xa4, 0x46, 0x87, 0x02, 0xff, -0xd4, 0xbb, 0x97, 0x9d, 0xab, 0xfa, 0x3b, 0xc5, -0xf5, 0x2b, 0xf0, 0xcf, 0xf3, 0xae, 0xec, 0xb9, -0x93, 0x16, 0xc2, 0x22, 0xeb, 0x9f, 0x43, 0x8c, -0x20, 0xfe, 0xf1, 0xd0, 0x4e, 0x0d, 0x19, 0xd4, -0x13, 0x19, 0xff, 0x50, 0x03, 0xe8, 0x7f, 0x4a, -0xe1, 0x9f, 0xcd, 0xec, 0x69, 0xdd, 0x18, 0x0d, -0xff, 0xf4, 0x28, 0x60, 0x4f, 0x59, 0xfe, 0x87, -0xf1, 0xf9, 0x65, 0xeb, 0x5f, 0x24, 0x49, 0xb5, -0xb1, 0x44, 0xa6, 0xa8, 0x7f, 0xe9, 0x10, 0xff, -0x78, 0x43, 0x0e, 0x1f, 0x22, 0x6d, 0x5c, 0x44, -0xd8, 0x5c, 0xba, 0xfe, 0xe5, 0xed, 0x77, 0x56, -0x11, 0xa6, 0x4a, 0xf1, 0x3f, 0xb7, 0xbb, 0x6d, -0x3e, 0xef, 0xa8, 0xeb, 0x5f, 0x3c, 0x3e, 0x70, -0xfe, 0xe7, 0x30, 0x93, 0x95, 0x16, 0x14, 0xfa, -0x8d, 0xcf, 0x83, 0xfa, 0x67, 0xee, 0x8d, 0xbd, -0x8b, 0x5d, 0x63, 0xbe, 0xfb, 0x49, 0x56, 0x5d, -0xff, 0x9a, 0xef, 0x45, 0xef, 0x31, 0x22, 0x0c, -0x96, 0xe3, 0xf9, 0x86, 0xd9, 0x15, 0x8e, 0xe5, -0xe7, 0x7f, 0xd6, 0xf1, 0x6c, 0x55, 0xe8, 0x8d, -0x52, 0xff, 0xa2, 0xdf, 0xd2, 0x46, 0xb0, 0xc1, -0x8a, 0x19, 0x23, 0xb0, 0x5e, 0x67, 0xf7, 0x03, -0xe3, 0x7f, 0xc4, 0x74, 0x29, 0x44, 0x0c, 0xbd, -0x5c, 0xfd, 0x0b, 0xb2, 0x5b, 0x91, 0xf0, 0x4f, -0x8f, 0xaa, 0xfe, 0x15, 0x2b, 0x51, 0xff, 0x9a, -0xbf, 0x05, 0xcd, 0x99, 0x2d, 0x4d, 0x89, 0x88, -0xfa, 0x1f, 0xca, 0xff, 0x58, 0x69, 0x5b, 0xc9, -0xff, 0xcc, 0x72, 0xff, 0x37, 0xc2, 0xfa, 0xd7, -0x90, 0x99, 0x36, 0x94, 0xef, 0xe3, 0xa1, 0xfa, -0xe7, 0xdd, 0x05, 0x54, 0x9a, 0xff, 0x41, 0x74, -0xfe, 0xb0, 0x87, 0x2e, 0x46, 0xec, 0xa6, 0x66, -0x5d, 0xe9, 0x1f, 0x7e, 0xfd, 0xbb, 0x4c, 0xc0, -0xff, 0xe0, 0xf8, 0x6c, 0xaf, 0x52, 0xe2, 0x43, -0x90, 0x7f, 0xc5, 0xf3, 0xa8, 0x5f, 0x4a, 0xdc, -0x99, 0x52, 0xe2, 0x73, 0xa1, 0x7f, 0x66, 0xfd, -0x5f, 0x2e, 0x7f, 0x95, 0x48, 0xf7, 0x29, 0xf9, -0x2b, 0xa1, 0x7f, 0x76, 0x20, 0x1f, 0x78, 0xc4, -0x4e, 0x2d, 0x54, 0xbe, 0x7f, 0xcd, 0xf2, 0xdb, -0x21, 0x8f, 0x20, 0xff, 0x63, 0xaf, 0x28, 0x54, -0xaa, 0xf8, 0x90, 0x39, 0xbe, 0x5e, 0xe2, 0x7f, -0xce, 0xa2, 0xc3, 0x7a, 0x8d, 0x52, 0xff, 0x53, -0xc1, 0xd6, 0x5b, 0x4b, 0x21, 0x3f, 0x66, 0xfe, -0xeb, 0x13, 0xd5, 0x5f, 0x28, 0xf1, 0x0f, 0xdb, -0xaf, 0x01, 0xf9, 0x9f, 0xaf, 0xed, 0x66, 0xa4, -0x8e, 0x57, 0x42, 0xff, 0x09, 0xf9, 0x1f, 0xda, -0x7f, 0x51, 0x9a, 0xff, 0x41, 0x90, 0xff, 0x39, -0xd0, 0xbf, 0xbc, 0x49, 0xa9, 0xff, 0x81, 0xfa, -0x67, 0x10, 0xcf, 0xf7, 0x5b, 0xe9, 0x07, 0x95, -0xf1, 0xe7, 0x7d, 0x81, 0x7f, 0x74, 0x86, 0x7f, -0x70, 0xd0, 0xbe, 0x8a, 0xbe, 0x1c, 0x4a, 0x2a, -0xf9, 0x1f, 0xf1, 0xfb, 0x52, 0x3e, 0xea, 0x0c, -0xc9, 0x47, 0x42, 0x4f, 0xeb, 0xce, 0x7f, 0x16, -0x7a, 0xd7, 0xdc, 0x09, 0x25, 0xff, 0xc3, 0xd7, -0xdb, 0xba, 0xc8, 0xb6, 0xe6, 0x88, 0x1d, 0xc6, -0xff, 0xb0, 0xf0, 0xc3, 0xfb, 0xbf, 0xf8, 0x74, -0xbe, 0xfe, 0x32, 0xfc, 0x4f, 0x2d, 0xc4, 0x3f, -0x56, 0x26, 0x8c, 0x0f, 0x61, 0xbf, 0xcf, 0xfa, -0xbf, 0xe8, 0xee, 0x2e, 0xa3, 0x65, 0xa4, 0xed, -0x3d, 0xb8, 0x5f, 0xd1, 0xff, 0x75, 0x18, 0xf2, -0x21, 0xd7, 0xac, 0x76, 0xeb, 0x69, 0xd5, 0x7e, -0xcf, 0xf0, 0xf8, 0x73, 0x7b, 0x1d, 0xf0, 0xcf, -0x5f, 0x1b, 0x2d, 0x6a, 0x3d, 0xcc, 0x19, 0xfe, -0xfc, 0xd6, 0x23, 0xa0, 0x7f, 0xbe, 0x88, 0xd2, -0xc6, 0x12, 0x15, 0xff, 0x23, 0xf4, 0xc9, 0x96, -0xde, 0x07, 0x76, 0x67, 0x14, 0x3a, 0x94, 0x78, -0xef, 0xdf, 0x63, 0x6c, 0x7d, 0xbd, 0xbe, 0x07, -0xa2, 0x9d, 0x74, 0x88, 0x9e, 0x8a, 0x3f, 0xef, -0xde, 0xfc, 0x43, 0x8f, 0xff, 0x19, 0x6c, 0xc6, -0xdf, 0xaa, 0xf8, 0x1f, 0x7e, 0x3d, 0xd3, 0x52, -0xff, 0x97, 0xdd, 0xd6, 0xa3, 0xdc, 0xef, 0x65, -0x81, 0x67, 0x10, 0xb8, 0xdf, 0xa6, 0xad, 0x66, -0xc4, 0xfd, 0x5f, 0xad, 0xc4, 0x3f, 0x86, 0x0e, -0xf0, 0xcf, 0xe8, 0xe4, 0x8a, 0x5d, 0x4a, 0xfe, -0x67, 0x8c, 0x3f, 0x5d, 0xc6, 0xcf, 0xc1, 0xf3, -0x32, 0x82, 0x52, 0x5b, 0x79, 0x7c, 0x86, 0x81, -0x28, 0xd8, 0xff, 0x45, 0x9f, 0xd6, 0x43, 0xc6, -0xf2, 0x47, 0x42, 0xf8, 0x10, 0x76, 0xbf, 0x35, -0xd6, 0x73, 0xfd, 0xf3, 0x87, 0xfa, 0xdc, 0x93, -0x2d, 0x1f, 0x25, 0x18, 0xec, 0xa9, 0x06, 0xf8, -0xe7, 0x38, 0x8f, 0x3f, 0x92, 0xfe, 0xf9, 0x22, -0x1a, 0x2d, 0xc7, 0xff, 0xe4, 0xf5, 0x51, 0x91, -0xad, 0xe6, 0xec, 0x96, 0x86, 0xe4, 0x25, 0x45, -0xfe, 0x9a, 0x14, 0x7a, 0x63, 0x04, 0xf4, 0xcf, -0x2f, 0xd5, 0x2f, 0xef, 0x52, 0xc5, 0x9f, 0x45, -0x9f, 0x89, 0xe7, 0x51, 0xf0, 0x3f, 0xcf, 0xa3, -0xe7, 0xd0, 0x72, 0x6b, 0x7d, 0x4f, 0x45, 0x70, -0xbf, 0xaf, 0x59, 0xfc, 0x7e, 0xab, 0x75, 0xdf, -0xee, 0xe3, 0x34, 0xdf, 0x39, 0xa9, 0x9e, 0x1d, -0xaa, 0xf8, 0x33, 0x09, 0xf0, 0xaa, 0xbb, 0xdf, -0xef, 0x0d, 0xc5, 0xf6, 0xa1, 0x23, 0x83, 0xcd, -0x7f, 0x15, 0x57, 0xed, 0xf7, 0xa4, 0xa8, 0xb7, -0x2e, 0x84, 0xdd, 0x5e, 0xd6, 0xe8, 0x03, 0x4a, -0xff, 0x4c, 0xeb, 0x02, 0xff, 0x80, 0x78, 0xfe, -0x35, 0x35, 0xb4, 0xe0, 0xfb, 0xfe, 0x34, 0xe7, -0x7f, 0x8e, 0x49, 0xf5, 0x2f, 0x27, 0xdb, 0xa3, -0xd2, 0xf3, 0xa4, 0x8b, 0xc1, 0xfe, 0x2f, 0xfa, -0x6d, 0x7f, 0x76, 0x16, 0x1b, 0xdd, 0x0a, 0xfe, -0x87, 0xdd, 0x3f, 0x86, 0xe9, 0xab, 0x7f, 0xa9, -0xe2, 0x73, 0x87, 0xb8, 0x3f, 0x51, 0xbd, 0xdc, -0xdd, 0x66, 0xc1, 0xb2, 0x97, 0xe0, 0xbb, 0x2a, -0xb8, 0xfe, 0xb9, 0xce, 0x57, 0xff, 0x52, 0xf3, -0x3f, 0x7f, 0x14, 0xa2, 0xff, 0x69, 0x77, 0x12, -0xeb, 0x14, 0xfd, 0x83, 0x00, 0xff, 0xd4, 0x4b, -0x68, 0x67, 0xd5, 0x69, 0xa3, 0x77, 0x51, 0x90, -0xff, 0x11, 0xf8, 0x47, 0xd6, 0xff, 0xe8, 0xdd, -0xaf, 0x18, 0x2a, 0x7e, 0x03, 0x9c, 0x7f, 0x01, -0xeb, 0x5f, 0x47, 0xb5, 0x47, 0x1d, 0xa3, 0x74, -0xff, 0xbb, 0x4f, 0xff, 0xd3, 0x96, 0xef, 0x1a, -0xb8, 0x27, 0xc8, 0x3f, 0x8c, 0xf3, 0xeb, 0xf7, -0xf5, 0x7f, 0xb5, 0x6d, 0x54, 0xeb, 0xc3, 0x95, -0xf8, 0x07, 0x1b, 0xad, 0x6b, 0xbb, 0xfa, 0xe2, -0x99, 0x80, 0xbe, 0xe5, 0x5c, 0x38, 0xff, 0x63, -0xd8, 0xf1, 0x47, 0x6d, 0xff, 0xfc, 0xea, 0xb3, -0x00, 0xff, 0x74, 0x49, 0x78, 0x18, 0xaf, 0xd7, -0x6a, 0x02, 0xe7, 0x83, 0x00, 0xfc, 0xe3, 0x9e, -0x7f, 0xc1, 0xb3, 0x7f, 0xde, 0x38, 0xa5, 0x3d, -0x1c, 0x98, 0x87, 0x0c, 0xf1, 0x4f, 0x97, 0xcb, -0xff, 0x50, 0xb4, 0x63, 0xb6, 0x5a, 0x89, 0x86, -0x78, 0x42, 0x7b, 0x05, 0xc9, 0x42, 0x68, 0x80, -0x7f, 0xea, 0xa0, 0x7f, 0xf4, 0xf6, 0x8d, 0xd8, -0x38, 0x5d, 0x0a, 0xff, 0xd4, 0xc9, 0x6a, 0xbd, -0x89, 0x84, 0x8a, 0xff, 0x19, 0x0b, 0xeb, 0x7f, -0xcf, 0x8c, 0x19, 0x4e, 0xfc, 0xa1, 0x20, 0xfe, -0xe1, 0xcf, 0x7b, 0x0a, 0xe2, 0x1f, 0x7a, 0x10, -0x46, 0xa7, 0xf6, 0x70, 0x09, 0xfc, 0xb3, 0x89, -0xf3, 0x3f, 0x1d, 0xd4, 0x28, 0xf6, 0xdf, 0xa6, -0x98, 0xb7, 0xf0, 0xbe, 0x82, 0xff, 0x99, 0x4f, -0xd1, 0xce, 0xde, 0xcc, 0x74, 0x7c, 0x53, 0x29, -0xfc, 0x13, 0x0b, 0x64, 0x7f, 0x3a, 0xf6, 0x27, -0x2b, 0xe3, 0x1f, 0x91, 0x8f, 0x24, 0xfc, 0x43, -0x0e, 0xc2, 0x60, 0x69, 0x0e, 0x02, 0x83, 0x90, -0xfe, 0xaf, 0x11, 0x04, 0xf0, 0xcf, 0x32, 0x91, -0x7f, 0xd3, 0x45, 0xfe, 0xff, 0x7b, 0xbb, 0x9f, -0xff, 0x31, 0xa8, 0x70, 0x25, 0x16, 0x86, 0x7f, -0x1a, 0x6b, 0x65, 0xfe, 0x27, 0x67, 0xd4, 0x7a, -0x30, 0xa0, 0x52, 0x8d, 0x7f, 0x60, 0xfd, 0xeb, -0x30, 0x36, 0x78, 0xfe, 0x95, 0xe6, 0x3f, 0xcf, -0x67, 0xeb, 0x77, 0xfa, 0xf4, 0x3c, 0xb9, 0xe4, -0xec, 0x3d, 0x0a, 0x3c, 0x13, 0x57, 0xf6, 0x7f, -0x61, 0x63, 0x23, 0xf6, 0x4f, 0xf0, 0xfc, 0x8b, -0x33, 0xe0, 0xfc, 0x0b, 0xd0, 0xed, 0x8e, 0xdd, -0xfe, 0x87, 0x9e, 0x10, 0xda, 0x8f, 0x7f, 0xd8, -0xff, 0x6f, 0xa7, 0x84, 0x7f, 0x50, 0xa6, 0xd3, -0x58, 0xd4, 0x1b, 0xc4, 0x3f, 0x6f, 0x73, 0x7e, -0xbb, 0x1e, 0xf9, 0xfd, 0xb9, 0xd3, 0x9d, 0xa7, -0xbd, 0x36, 0x04, 0xff, 0xc8, 0xfd, 0x5f, 0x5b, -0xac, 0x06, 0x25, 0xfe, 0x89, 0xb1, 0xf5, 0x13, -0xa2, 0xfe, 0xb5, 0x91, 0x8c, 0x81, 0xb2, 0xde, -0x1a, 0x54, 0xf4, 0xbf, 0x5f, 0x06, 0xf7, 0x8f, -0xc4, 0xff, 0xb4, 0xc6, 0x36, 0xf4, 0x45, 0xe7, -0x7f, 0x3e, 0x83, 0xb0, 0x27, 0xa9, 0xc4, 0x3f, -0x80, 0xff, 0x71, 0x0d, 0x3e, 0x8f, 0x57, 0x7a, -0x1f, 0x17, 0xe7, 0x5f, 0x2c, 0x04, 0xf8, 0xc7, -0x9b, 0xf6, 0xf3, 0x0e, 0xed, 0xff, 0xaa, 0x04, -0xcf, 0xef, 0x84, 0x38, 0xff, 0x02, 0xd6, 0xbf, -0x5e, 0xf6, 0xda, 0xbe, 0xc4, 0xf9, 0x17, 0x2f, -0x07, 0xf0, 0x0f, 0x8e, 0xff, 0x3f, 0x11, 0xef, -0xfb, 0x38, 0xfb, 0x1c, 0x8a, 0x07, 0xe7, 0xfb, -0xc1, 0xfa, 0xd7, 0xa8, 0x94, 0xad, 0x26, 0xde, -0xba, 0xb2, 0x2d, 0x98, 0xbf, 0x4e, 0x09, 0xfc, -0x63, 0xc2, 0xf8, 0xa3, 0x53, 0xa3, 0xd6, 0x13, -0x22, 0x8a, 0xeb, 0xff, 0x98, 0xaf, 0xf7, 0xeb, -0x7f, 0xc6, 0xab, 0x7a, 0x5e, 0x0b, 0xc6, 0xab, -0xd7, 0x6c, 0xb6, 0x3e, 0x55, 0x2b, 0x55, 0x37, -0xb2, 0x84, 0x08, 0xba, 0xb7, 0x04, 0xfe, 0xf1, -0xe9, 0x7f, 0x68, 0x74, 0x0d, 0xe6, 0xf7, 0x89, -0x12, 0xfc, 0xcf, 0x50, 0x7c, 0x9f, 0xff, 0x93, -0x7b, 0x04, 0xfe, 0x59, 0x6e, 0xfa, 0xb2, 0x5b, -0x62, 0x76, 0x5b, 0x9b, 0x15, 0xe8, 0x7f, 0x97, -0xce, 0xbf, 0x80, 0xf9, 0xeb, 0x58, 0xe5, 0x90, -0x57, 0x7f, 0x49, 0xaa, 0xf1, 0x8f, 0x2f, 0xdf, -0x91, 0x44, 0xa6, 0xea, 0x7f, 0xe7, 0xf8, 0xa7, -0x36, 0x90, 0xfd, 0x2b, 0x06, 0x02, 0x78, 0x3b, -0x84, 0xff, 0x21, 0x6c, 0x98, 0x37, 0xf6, 0x47, -0x9e, 0xff, 0x5c, 0xac, 0xe0, 0xfc, 0x8f, 0x0f, -0xff, 0xb8, 0x85, 0xbf, 0x40, 0x7e, 0xff, 0x7e, -0x0f, 0xff, 0x07, 0xb4, 0x3e, 0xb4, 0x0b, 0x35, -0x92, 0xf0, 0x17, 0x6e, 0x20, 0xf8, 0xa7, 0x23, -0x7c, 0x75, 0x16, 0x32, 0x4b, 0x19, 0xf0, 0xaf, -0x0f, 0x2d, 0x47, 0x86, 0xa5, 0x99, 0xa5, 0x8c, -0x6f, 0xf2, 0xfb, 0xe4, 0x58, 0x33, 0x83, 0x9d, -0x6f, 0x16, 0x62, 0x80, 0xbf, 0xd2, 0x0b, 0x5d, -0xe3, 0x9b, 0xfc, 0xfe, 0xf5, 0xfe, 0x7d, 0xcb, -0xfc, 0x6f, 0x92, 0xb3, 0xfc, 0x4e, 0xa0, 0xbf, -0x44, 0x4b, 0x9d, 0x12, 0x86, 0xfe, 0x7b, 0xff, -0xfe, 0xff, 0xb2, 0xff, 0x75, 0xd3, 0x8e, 0xe0, -0xf3, 0x18, 0x8f, 0x3f, 0xd7, 0xfb, 0xd7, 0xda, -0x1a, 0x65, 0x55, 0x32, 0xf9, 0x7b, 0xfe, 0xfc, -0xff, 0xc1, 0x5f, 0xfb, 0xb5, 0x6b, 0xd7, 0x9c, -0x32, 0xc6, 0xff, 0xe7, 0xf5, 0xdf, 0xb2, 0xe7, -0xf1, 0xbb, 0x78, 0xf8, 0x5d, 0x3c, 0xfc, 0x06, -0xfe, 0xff, 0x2e, 0x1e, 0x96, 0xfb, 0xfb, 0xb6, -0xc5, 0x9f, 0x6f, 0xd7, 0x7a, 0xc8, 0x8f, 0xc5, -0xae, 0xd9, 0x2d, 0xbb, 0x12, 0x17, 0x5d, 0xe1, -0x74, 0x84, 0xfa, 0xe0, 0x82, 0xa3, 0xf6, 0xee, -0x62, 0xf5, 0x90, 0x76, 0xb5, 0x14, 0x3f, 0x86, -0x06, 0x12, 0x07, 0x62, 0x19, 0xd6, 0x76, 0x9a, -0xf6, 0xf4, 0x60, 0xb1, 0x50, 0x7e, 0xac, 0x4e, -0x62, 0x23, 0xd3, 0xce, 0x02, 0x05, 0x3f, 0x09, -0xf4, 0x51, 0xb1, 0x5a, 0xf0, 0x76, 0x70, 0x20, -0xd6, 0xf4, 0x8e, 0xb2, 0x7e, 0xb7, 0x35, 0x96, -0xf2, 0xd6, 0xef, 0x42, 0x90, 0xff, 0xa9, 0x6c, -0xcf, 0x7b, 0xb0, 0xf9, 0xf1, 0x32, 0xfc, 0x58, -0x0d, 0x7d, 0x0d, 0x89, 0xb5, 0x4d, 0x56, 0xe3, -0x9f, 0x75, 0xfc, 0xbf, 0x7f, 0x4e, 0x5d, 0x1f, -0x3c, 0x6a, 0x65, 0x7b, 0xb1, 0x31, 0x17, 0x4d, -0x1f, 0x4e, 0x8c, 0x6e, 0x84, 0x8d, 0x37, 0x4b, -0xd5, 0x07, 0xa5, 0xfe, 0x38, 0xfb, 0x47, 0x96, -0xb2, 0x5e, 0x26, 0xd5, 0x07, 0xd9, 0x7c, 0xa4, -0x01, 0xc2, 0x86, 0x4d, 0x56, 0xc3, 0xfa, 0xa0, -0x7e, 0x20, 0xd6, 0xea, 0x6c, 0x68, 0x5a, 0x0c, -0xf8, 0x31, 0x5f, 0x7f, 0x1c, 0xd5, 0x87, 0x07, -0xe6, 0xc9, 0x0b, 0x7e, 0x8c, 0xf0, 0xdb, 0x1f, -0xa0, 0x35, 0x4e, 0xb5, 0xeb, 0x8d, 0xdb, 0x89, -0x3e, 0xff, 0x77, 0x29, 0x3f, 0x7f, 0x08, 0xf8, -0x31, 0xe9, 0xfd, 0x14, 0xdd, 0x86, 0xdf, 0x77, -0xb4, 0x13, 0x76, 0xf8, 0xf9, 0x68, 0x48, 0xe6, -0xc7, 0x56, 0x2c, 0xa7, 0xfa, 0x70, 0x3f, 0x1f, -0x08, 0xeb, 0x83, 0xd2, 0xfb, 0x69, 0x43, 0x02, -0xb6, 0xa5, 0x84, 0xf0, 0x63, 0xef, 0xa3, 0x35, -0x76, 0xb5, 0xcb, 0x86, 0xdd, 0x55, 0x18, 0x28, -0xd0, 0xf9, 0xd8, 0x84, 0x16, 0x8b, 0xa9, 0xf8, -0x31, 0xa9, 0x3f, 0xce, 0x0a, 0xab, 0x0f, 0x02, -0x7e, 0x03, 0xb0, 0x25, 0x77, 0x14, 0xbc, 0xfe, -0xf1, 0xed, 0x01, 0x7d, 0x14, 0x5b, 0xcf, 0xe7, -0x43, 0x0e, 0x6a, 0x53, 0xfa, 0x70, 0x7f, 0x7a, -0x23, 0x65, 0xb7, 0x5e, 0x2c, 0x3b, 0x1f, 0x12, -0xcc, 0x07, 0x48, 0x4f, 0xd9, 0xfe, 0xf5, 0x82, -0x1f, 0x23, 0xe9, 0x54, 0x3e, 0x0d, 0xb6, 0x36, -0x3d, 0x8e, 0x9f, 0x0a, 0x5f, 0x7d, 0x90, 0xcf, -0x27, 0xd9, 0x6c, 0xe4, 0xe1, 0xee, 0x9a, 0xc9, -0x69, 0x20, 0x44, 0x86, 0x14, 0x3a, 0x1f, 0x12, -0xea, 0xc3, 0xbf, 0x70, 0xe7, 0x5d, 0x07, 0xfb, -0xe3, 0xce, 0x48, 0xf3, 0x91, 0xde, 0x13, 0xfa, -0xf0, 0xbb, 0xac, 0xe4, 0xcf, 0xe2, 0xe7, 0x52, -0xfe, 0xfe, 0xc1, 0x33, 0xd2, 0x7c, 0x6c, 0xc0, -0x86, 0xa5, 0xed, 0xf5, 0x76, 0x7c, 0x97, 0xd6, -0x1f, 0xca, 0x8f, 0x59, 0xf3, 0xc6, 0x7d, 0xfb, -0x5d, 0xd4, 0x31, 0xce, 0xc6, 0x62, 0x83, 0xf3, -0x61, 0x99, 0xff, 0x77, 0xca, 0xf3, 0x21, 0xe9, -0xf9, 0x74, 0x7b, 0xd0, 0x82, 0xf0, 0xfa, 0x60, -0x1d, 0xb8, 0xfe, 0x2f, 0xd0, 0x9d, 0x54, 0x0f, -0xaf, 0xaf, 0xd3, 0xe4, 0x7e, 0x37, 0x50, 0x1f, -0x8c, 0xed, 0x91, 0x4e, 0x8f, 0xfd, 0xb3, 0xa4, -0x98, 0x8f, 0xcd, 0xd7, 0xcf, 0x07, 0xf5, 0x41, -0xa9, 0x3f, 0x2e, 0x45, 0x8d, 0xe0, 0x7c, 0x4e, -0xc8, 0x8f, 0xed, 0x05, 0xf5, 0xc1, 0x42, 0xd6, -0x5e, 0x5f, 0xd0, 0xee, 0x4a, 0x85, 0xd7, 0x07, -0x1b, 0xfb, 0xb8, 0x5e, 0x37, 0x41, 0xe6, 0xb3, -0xe5, 0xb1, 0x91, 0xb4, 0x79, 0x47, 0x4f, 0x80, -0x1f, 0x5b, 0x8e, 0x64, 0x99, 0x50, 0x2e, 0xfe, -0x63, 0x85, 0x70, 0x48, 0xf0, 0x63, 0x8d, 0x62, -0x3e, 0xd2, 0x0b, 0x3a, 0x19, 0x8b, 0x34, 0xff, -0xe2, 0xb6, 0x1b, 0x02, 0xfa, 0x28, 0xc0, 0x8f, -0x2d, 0x05, 0xf1, 0xfc, 0x32, 0xf1, 0xc6, 0xf0, -0xfa, 0x52, 0xf5, 0x41, 0x0b, 0xd6, 0x77, 0xce, -0xdb, 0xab, 0xf3, 0x03, 0x17, 0xef, 0x29, 0xc9, -0x8f, 0x49, 0xf3, 0x91, 0x2c, 0x1a, 0x7f, 0x4c, -0x7c, 0xd9, 0x77, 0xb8, 0x9f, 0x7c, 0xc5, 0xf4, -0x51, 0xfc, 0x79, 0xb4, 0x25, 0x3d, 0xc3, 0xcd, -0xe3, 0x0b, 0x7a, 0x14, 0xe7, 0x83, 0x8c, 0xf3, -0xfa, 0x20, 0x99, 0x0f, 0xd9, 0xc2, 0xa2, 0xcd, -0x6a, 0xb4, 0xb1, 0x07, 0xc7, 0x1f, 0x84, 0xfc, -0xfe, 0x04, 0xf5, 0x41, 0x2f, 0x7f, 0x55, 0x91, -0x63, 0xc8, 0x2e, 0xa3, 0x35, 0xf9, 0xea, 0xd9, -0x2a, 0xc3, 0xbf, 0x5f, 0x0d, 0xce, 0x87, 0x14, -0xfe, 0x21, 0x07, 0xcb, 0x76, 0x61, 0xe3, 0x53, -0xb1, 0x9e, 0x29, 0x88, 0x02, 0xf5, 0xc1, 0x9a, -0x59, 0x7a, 0x1e, 0x68, 0xcb, 0xbd, 0xd5, 0xee, -0xa0, 0x6c, 0x39, 0x9e, 0x4f, 0x81, 0xfa, 0x20, -0xc8, 0x5f, 0xc3, 0x76, 0xca, 0x32, 0x86, 0xb4, -0x4f, 0x03, 0xe7, 0x73, 0x85, 0xf1, 0x63, 0x5b, -0x1f, 0x71, 0x6e, 0x1c, 0xd2, 0x7e, 0x87, 0xfc, -0xf5, 0x20, 0xc0, 0x8f, 0x41, 0x3d, 0xcc, 0x01, -0xed, 0x11, 0x6b, 0x27, 0x19, 0x94, 0xed, 0x8b, -0xcf, 0xb0, 0x3e, 0xe8, 0xd7, 0x87, 0x57, 0xf7, -0xe0, 0xc7, 0xc4, 0x9f, 0x5f, 0x8a, 0x1c, 0x72, -0x4b, 0xfd, 0x71, 0xf4, 0x7c, 0xc6, 0xd9, 0xe0, -0xf9, 0x56, 0xf3, 0x45, 0x7d, 0x70, 0x0c, 0xde, -0x3f, 0x5f, 0xd9, 0xed, 0x4e, 0xa6, 0x93, 0xd6, -0x07, 0x6f, 0x7b, 0x5d, 0xc2, 0x3f, 0xfc, 0x3c, -0x91, 0x31, 0x43, 0x56, 0x43, 0xf5, 0x54, 0xf7, -0x57, 0x66, 0x0a, 0x47, 0xed, 0x15, 0xb3, 0x6a, -0xfc, 0x33, 0x81, 0xa4, 0x7c, 0xd4, 0x78, 0x2f, -0xa9, 0x0f, 0xe2, 0xe7, 0xab, 0x61, 0x32, 0x44, -0x1f, 0xa5, 0xb3, 0xfa, 0x20, 0x39, 0x66, 0x4e, -0xcb, 0x76, 0x78, 0xf5, 0xc1, 0x74, 0x48, 0x7d, -0x70, 0xa1, 0xa4, 0xcf, 0x41, 0xad, 0xa6, 0x31, -0x20, 0xc6, 0x86, 0x2b, 0xf4, 0x51, 0x85, 0x85, -0xfc, 0xfc, 0x0b, 0x5a, 0x1f, 0x84, 0xf3, 0xa3, -0xb4, 0x92, 0xf5, 0x41, 0x6d, 0x46, 0x27, 0xf3, -0x19, 0xa8, 0xfe, 0xfc, 0x0d, 0xa3, 0xed, 0x15, -0x08, 0xb4, 0xe4, 0xf9, 0x90, 0xa0, 0x5f, 0x20, -0x3d, 0x61, 0x2c, 0xc0, 0xd7, 0xbf, 0xa2, 0x73, -0xd5, 0xa9, 0x6a, 0xa5, 0x3e, 0xaa, 0x28, 0xdd, -0x0f, 0xa8, 0xc1, 0xe9, 0x6c, 0xc4, 0xc6, 0x62, -0x27, 0x83, 0x81, 0xe2, 0xa2, 0xae, 0x20, 0xfe, -0x99, 0x35, 0x21, 0xfe, 0xe9, 0xdf, 0x95, 0x37, -0xa6, 0x9f, 0x74, 0xeb, 0x65, 0x0b, 0x94, 0xf8, -0x67, 0x53, 0xbd, 0xa7, 0x8f, 0x5a, 0x8d, 0x61, -0xcf, 0x01, 0xb3, 0xc9, 0xca, 0x34, 0xe0, 0xcb, -0x26, 0xfd, 0x71, 0x09, 0x01, 0x84, 0x34, 0x70, -0x3e, 0x6c, 0xad, 0x8c, 0x7f, 0x2c, 0x7a, 0x90, -0xee, 0x7f, 0xa3, 0xf6, 0x71, 0x09, 0xff, 0xcc, -0x63, 0xfb, 0x35, 0x74, 0x89, 0x9d, 0x7e, 0xcc, -0x62, 0x83, 0x92, 0x26, 0x13, 0x4a, 0xfc, 0x73, -0xc2, 0xf0, 0xf5, 0xdb, 0x26, 0xac, 0x38, 0xf9, -0x24, 0x73, 0xc2, 0xe8, 0xe9, 0x60, 0xf1, 0x24, -0xbe, 0x1f, 0xd6, 0x07, 0x4d, 0x88, 0xee, 0x66, -0xd7, 0x6d, 0x4e, 0x53, 0x63, 0xca, 0x50, 0xe2, -0x9f, 0x2e, 0x5d, 0xee, 0x3e, 0x98, 0x6c, 0x6c, -0xd5, 0xf6, 0xd1, 0x4f, 0x0c, 0x35, 0xfe, 0xd1, -0x65, 0x7d, 0x78, 0xa1, 0xfa, 0x23, 0x6a, 0xb4, -0xda, 0x99, 0x08, 0xfa, 0x28, 0x72, 0x50, 0xd1, -0x56, 0x05, 0x10, 0x7a, 0x46, 0x5d, 0x1f, 0xfc, -0x14, 0xb5, 0x6e, 0xca, 0xfc, 0x43, 0xdc, 0x1d, -0x0b, 0x59, 0x13, 0xa9, 0x3e, 0x98, 0x33, 0x76, -0x6a, 0x53, 0xc6, 0x76, 0x74, 0xe7, 0xfd, 0x86, -0x84, 0x7f, 0xd8, 0x1f, 0xab, 0x0f, 0xba, 0xf3, -0xb1, 0x2d, 0xbc, 0x9e, 0x0e, 0x8a, 0x5c, 0x4b, -0x85, 0xcd, 0x0a, 0xfc, 0x93, 0x82, 0xf5, 0x41, -0x32, 0x16, 0xc0, 0x20, 0x63, 0x01, 0xb6, 0x22, -0x7a, 0x50, 0x91, 0xa2, 0x3e, 0xb8, 0xf9, 0x26, -0xb6, 0x29, 0xaa, 0xbe, 0x5e, 0x46, 0xfb, 0xd3, -0xe9, 0x7c, 0x00, 0xd8, 0xa8, 0x75, 0x66, 0xbe, -0x52, 0x1f, 0x75, 0xc9, 0x1d, 0x44, 0x46, 0xc7, -0x1e, 0xc2, 0x46, 0xb9, 0xc5, 0x50, 0x1f, 0x45, -0x3e, 0x5c, 0xe3, 0x76, 0xd3, 0xe3, 0xf8, 0xfc, -0x48, 0x82, 0x08, 0xcb, 0xdf, 0x44, 0xed, 0xf7, -0x25, 0x94, 0xf8, 0xa7, 0x1e, 0x81, 0xfe, 0xb8, -0x8b, 0x68, 0x8d, 0x99, 0x29, 0x68, 0x45, 0x32, -0x16, 0xd2, 0x34, 0xd4, 0xf5, 0x41, 0x24, 0xd5, -0x07, 0x53, 0x79, 0x7c, 0x1b, 0x8c, 0xd3, 0xb1, -0x90, 0x86, 0x1a, 0xff, 0xd4, 0x8a, 0xfe, 0x38, -0x0c, 0x3b, 0x2b, 0xf2, 0xd8, 0x9f, 0xe3, 0xda, -0x76, 0x24, 0x0b, 0xd5, 0x64, 0x7d, 0xd4, 0x08, -0xbd, 0x48, 0xfa, 0x6d, 0xb3, 0xd5, 0xba, 0xd3, -0xfb, 0xff, 0xcd, 0x28, 0xf1, 0xcf, 0x84, 0xbf, -0x5e, 0x5c, 0xf3, 0x8f, 0x9e, 0x11, 0x5e, 0x1f, -0x9c, 0x66, 0xf8, 0x67, 0x1a, 0xe3, 0x9f, 0x95, -0xb4, 0x3e, 0x68, 0xb4, 0x19, 0x19, 0x25, 0xfe, -0x91, 0xf4, 0x51, 0x87, 0x9c, 0x55, 0xcf, 0x19, -0x64, 0x3e, 0xe4, 0x68, 0x6a, 0xd5, 0xa0, 0xa1, -0xd6, 0x47, 0xe9, 0x72, 0xf5, 0xbc, 0x68, 0x34, -0x3d, 0x89, 0x0d, 0x87, 0x18, 0xde, 0x8b, 0xc3, -0xfa, 0xa6, 0xb4, 0xc0, 0x3f, 0xc8, 0x04, 0xd5, -0xb1, 0x83, 0xd6, 0xca, 0x31, 0x23, 0x97, 0x3a, -0x6d, 0x1f, 0x44, 0x2b, 0x7b, 0x81, 0x50, 0x6a, -0x91, 0xc0, 0x3f, 0xc6, 0xce, 0x87, 0x05, 0xda, -0xf9, 0x2f, 0x57, 0x16, 0xf5, 0x1b, 0xe7, 0x82, -0xdd, 0x5a, 0x4c, 0xa8, 0xf1, 0x4f, 0xdd, 0x3e, -0x31, 0x5d, 0xf6, 0x22, 0x89, 0x4e, 0x83, 0xd4, -0x58, 0x63, 0x87, 0xe8, 0xa3, 0xfa, 0x46, 0x4d, -0x6f, 0x9a, 0x0d, 0xed, 0x6f, 0x2a, 0x24, 0x26, -0x68, 0xda, 0x6a, 0x29, 0xe8, 0x6e, 0xfe, 0xba, -0x8b, 0xe2, 0x1f, 0x51, 0x8f, 0xf3, 0xc5, 0x1f, -0xbb, 0x3a, 0x47, 0x81, 0xcd, 0x0f, 0x4c, 0x03, -0x54, 0x0c, 0x85, 0x3e, 0xca, 0x5f, 0x1f, 0x1c, -0x34, 0xf2, 0x9a, 0x3b, 0xd8, 0x7f, 0x81, 0xb2, -0x3e, 0x68, 0xf9, 0xe2, 0x8f, 0xdd, 0x48, 0x07, -0xb5, 0xa1, 0x46, 0xf4, 0x83, 0x10, 0x7d, 0x14, -0x17, 0x75, 0xd3, 0xfc, 0xe5, 0x18, 0x36, 0x0e, -0xb3, 0x97, 0xf1, 0x8d, 0xe4, 0xbd, 0x51, 0x52, -0xe9, 0xc5, 0x84, 0xe8, 0x47, 0x58, 0x08, 0xfb, -0x07, 0xc9, 0xc1, 0x9d, 0x7d, 0x54, 0x28, 0x85, -0xe3, 0xc9, 0x50, 0x4c, 0xd4, 0x07, 0xf9, 0xfd, -0xbf, 0x9c, 0xe2, 0x1f, 0x6f, 0x3e, 0x00, 0x99, -0x97, 0x98, 0x20, 0xf9, 0xee, 0xa4, 0xdd, 0x96, -0x8f, 0x50, 0x1f, 0x24, 0xe7, 0xb9, 0x37, 0x3e, -0x85, 0x8d, 0x5f, 0xe4, 0xb3, 0x79, 0x50, 0x1f, -0x5c, 0x04, 0xf1, 0x4f, 0xb7, 0x09, 0xdf, 0xee, -0x0b, 0xf7, 0xf5, 0x6b, 0x03, 0xa8, 0x3f, 0x95, -0xed, 0x8f, 0xa4, 0x8f, 0xca, 0xa6, 0xfa, 0x51, -0xc5, 0x09, 0xf2, 0xfe, 0x85, 0xfe, 0x54, 0x5d, -0x1f, 0x84, 0xfa, 0x28, 0x52, 0x1f, 0xac, 0x20, -0xfe, 0x99, 0x08, 0xaf, 0x0f, 0xfe, 0x5c, 0xaa, -0x06, 0xde, 0xed, 0x54, 0x93, 0xfd, 0x9e, 0xf7, -0x09, 0xa5, 0x44, 0x7d, 0xd0, 0x79, 0x42, 0xd6, -0x47, 0xa5, 0xca, 0xcc, 0x87, 0x1c, 0x93, 0xf5, -0x51, 0xd9, 0x14, 0x19, 0xe4, 0x18, 0xe4, 0x7f, -0xf8, 0x7c, 0xda, 0xe3, 0x68, 0xc0, 0x84, 0xf7, -0x03, 0x52, 0xea, 0x75, 0x05, 0xfe, 0x29, 0x72, -0xfc, 0xe3, 0x7a, 0x0f, 0xa9, 0xe7, 0x43, 0xf2, -0xfc, 0xb8, 0xd6, 0xa7, 0x8f, 0xba, 0x41, 0xa9, -0x97, 0x0b, 0x9f, 0x8f, 0x6d, 0xab, 0xf5, 0x63, -0xa1, 0xf3, 0x91, 0x72, 0xca, 0xdf, 0x0f, 0xc3, -0x3f, 0x66, 0xc8, 0x7c, 0x48, 0x81, 0x7f, 0x26, -0xa4, 0xf8, 0x63, 0xca, 0x6e, 0x01, 0xfd, 0x71, -0xec, 0x7e, 0x9b, 0x95, 0xf4, 0x51, 0x4f, 0xc8, -0x34, 0x88, 0xc0, 0x3f, 0x7c, 0x3e, 0x76, 0xa7, -0xd1, 0x65, 0x09, 0x35, 0x78, 0xaa, 0xd5, 0x56, -0xce, 0x87, 0x7c, 0x5f, 0xcc, 0xc7, 0xae, 0xfb, -0xa5, 0x59, 0xde, 0x3f, 0x62, 0x3e, 0x76, 0x23, -0xc4, 0x3f, 0x5f, 0xda, 0x4d, 0x84, 0xff, 0x39, -0x13, 0xc0, 0xe7, 0x80, 0xff, 0xa9, 0x0f, 0xf2, -0x3f, 0x73, 0xe8, 0x3f, 0xfc, 0xfc, 0x8f, 0xd0, -0x3f, 0xf8, 0xf8, 0x9f, 0x7c, 0x19, 0xfe, 0x67, -0x93, 0x1c, 0x7f, 0x1a, 0x66, 0x29, 0xff, 0xe3, -0x9f, 0xb7, 0x20, 0xfa, 0xd7, 0xa6, 0xeb, 0x24, -0x35, 0x78, 0xcb, 0x9e, 0x84, 0xe0, 0x7f, 0x60, -0x7f, 0x1c, 0xbb, 0xfe, 0xce, 0x98, 0x8c, 0x7f, -0xf4, 0x10, 0x7d, 0x38, 0xbb, 0x7e, 0xbf, 0x3e, -0x5c, 0xad, 0x7f, 0x0e, 0xc3, 0x3f, 0x76, 0x56, -0xad, 0x4f, 0x16, 0xfc, 0x4f, 0x40, 0x1f, 0xa5, -0x34, 0x4e, 0xaa, 0xf1, 0xcf, 0xb0, 0x2d, 0x8f, -0x45, 0xe2, 0x78, 0x40, 0xcc, 0xc7, 0xde, 0xec, -0x9f, 0x0f, 0x10, 0xb5, 0x3f, 0x8e, 0xd0, 0x20, -0xb4, 0x3f, 0x4e, 0xb1, 0xdf, 0x15, 0xca, 0xf9, -0xd8, 0x04, 0xff, 0x78, 0x86, 0x9f, 0xff, 0x01, -0xfd, 0x71, 0xf5, 0x41, 0x35, 0x78, 0x91, 0xcd, -0x47, 0x12, 0xf3, 0x01, 0x2a, 0x42, 0xf0, 0x8f, -0x6b, 0x14, 0x4a, 0xf0, 0x3f, 0xfa, 0x1e, 0xbf, -0xf7, 0xd2, 0xe3, 0x81, 0xf9, 0x48, 0xd2, 0x7c, -0x6c, 0x43, 0xe8, 0xc3, 0xf9, 0xf5, 0xfb, 0xf9, -0x1f, 0xbe, 0x5f, 0xa2, 0x8f, 0x1a, 0x41, 0x21, -0xb7, 0x01, 0xe7, 0x7f, 0xce, 0x82, 0xfb, 0x07, -0xf0, 0x3f, 0xd3, 0x7c, 0x50, 0xa4, 0xcf, 0xff, -0x21, 0xf3, 0xb1, 0x47, 0x7d, 0xb4, 0x0f, 0x33, -0xee, 0x07, 0xfd, 0x71, 0x22, 0xfe, 0x0c, 0xa0, -0x5d, 0x34, 0xfe, 0x54, 0xb8, 0x13, 0x5d, 0x3c, -0xbd, 0x4a, 0xb7, 0x23, 0xe9, 0xc3, 0x6d, 0x88, -0x7f, 0x5e, 0xa2, 0x46, 0xfa, 0xb4, 0xfd, 0xf7, -0xbe, 0xe7, 0x57, 0xf4, 0x43, 0xf5, 0xf7, 0x3f, -0xcc, 0xf9, 0x1f, 0xf4, 0x09, 0x1b, 0x94, 0xed, -0xe7, 0x7f, 0xc0, 0x7c, 0xec, 0x3a, 0x39, 0xbf, -0x93, 0x6c, 0x0e, 0xe2, 0xed, 0x07, 0xac, 0xdf, -0x84, 0xc7, 0x07, 0xa8, 0x0f, 0xbf, 0x32, 0xd8, -0x5e, 0xac, 0xb9, 0x18, 0xbf, 0x06, 0xf3, 0xd7, -0xaa, 0xa9, 0xe4, 0x25, 0x38, 0x1f, 0xdb, 0x00, -0xfc, 0xcf, 0x21, 0xb4, 0xf2, 0x35, 0x02, 0x7b, -0x82, 0xe7, 0x83, 0x88, 0xf9, 0xd8, 0x82, 0xff, -0x79, 0x1e, 0xc3, 0xa4, 0x3f, 0x97, 0x64, 0x60, -0xae, 0xb1, 0xbe, 0x27, 0x0d, 0xe7, 0x03, 0x80, -0xf8, 0x33, 0xec, 0x7b, 0xed, 0x02, 0xfd, 0x71, -0xfc, 0x7a, 0x44, 0xfe, 0xda, 0x47, 0xf6, 0x5b, -0xac, 0x01, 0x63, 0x91, 0x54, 0xf3, 0x01, 0x62, -0x92, 0x7e, 0x3e, 0xa4, 0x5f, 0xac, 0xe8, 0xc3, -0x3f, 0x5e, 0xf4, 0x9e, 0x0b, 0x9b, 0x0f, 0x29, -0xe6, 0x63, 0xef, 0x42, 0x0c, 0xff, 0xe0, 0xeb, -0x19, 0xb2, 0x6e, 0x55, 0xe7, 0xaf, 0x90, 0xf9, -0xd8, 0x23, 0x46, 0xd9, 0xf9, 0x90, 0x95, 0x3a, -0xe8, 0x8f, 0xdb, 0xef, 0xa3, 0xc5, 0x04, 0xfe, -0x11, 0xf3, 0xb1, 0x6f, 0xea, 0x86, 0xfb, 0xa5, -0xf3, 0x21, 0x83, 0xfe, 0x71, 0x56, 0x70, 0xfc, -0xf3, 0xcf, 0x7c, 0x53, 0xe4, 0x7c, 0xd8, 0xbb, -0x95, 0xfb, 0xfd, 0x63, 0xf1, 0x3c, 0xfe, 0x0f, -0x7b, 0xd7, 0x1e, 0x1c, 0xc5, 0x71, 0xe6, 0x7b, -0x1e, 0x2b, 0x8d, 0xb4, 0x2b, 0x34, 0x7a, 0x2c, -0xac, 0x1d, 0x20, 0xa3, 0x07, 0xa0, 0x73, 0x84, -0x58, 0x0b, 0xbf, 0x72, 0x70, 0x30, 0x5a, 0x01, -0x11, 0x8f, 0x98, 0x8d, 0xc1, 0xa0, 0xa4, 0x54, -0x57, 0x63, 0x17, 0x55, 0xf1, 0x1f, 0x9c, 0x4b, -0x38, 0x57, 0x17, 0xe7, 0x1e, 0x76, 0xaf, 0x1e, -0x80, 0x2d, 0xe7, 0xbc, 0xc1, 0x9c, 0xad, 0x3b, -0x53, 0x75, 0x22, 0x21, 0x39, 0xd7, 0x95, 0xcf, -0x07, 0xc4, 0x0f, 0xce, 0x76, 0xd9, 0x23, 0x59, -0x38, 0x32, 0xa7, 0xc3, 0x9c, 0x8f, 0x72, 0x11, -0x9b, 0x32, 0xb2, 0x8b, 0x4a, 0x54, 0x65, 0xfb, -0xac, 0xe3, 0xc8, 0x19, 0x12, 0x1b, 0xae, 0x7b, -0x5e, 0xdd, 0x33, 0xd3, 0xbd, 0x3b, 0x6b, 0xec, -0x4b, 0x72, 0xf6, 0xfe, 0xf5, 0x63, 0xb6, 0x19, -0x75, 0x7f, 0xdb, 0xf3, 0xf5, 0x6f, 0xbe, 0xa7, -0x59, 0x15, 0x66, 0x3b, 0x05, 0xf3, 0xe3, 0xc0, -0x13, 0x72, 0x90, 0xed, 0x14, 0xac, 0x8f, 0x24, -0x4f, 0x86, 0xac, 0x7f, 0x36, 0x78, 0xd4, 0xc7, -0xf7, 0x98, 0xf9, 0x71, 0x5c, 0xe0, 0xeb, 0x8f, -0xa6, 0x04, 0xa4, 0xd1, 0xe4, 0x02, 0x52, 0x38, -0xcb, 0xf4, 0xd5, 0x07, 0x78, 0xd1, 0x2f, 0x0d, -0x31, 0xbc, 0x1f, 0x0a, 0xd7, 0x87, 0x0c, 0x83, -0x42, 0xf5, 0x21, 0x83, 0x60, 0xb4, 0x50, 0x7d, -0x48, 0x47, 0x50, 0xc4, 0x22, 0xed, 0xf2, 0x1f, -0xf7, 0xf7, 0x0d, 0xf8, 0xbf, 0x58, 0xe0, 0x4b, -0x9c, 0xfe, 0xb0, 0x7e, 0xda, 0x33, 0xce, 0xa9, -0x0f, 0x99, 0x7c, 0x3e, 0x24, 0x0d, 0xaa, 0xc2, -0x7c, 0xe1, 0xfa, 0x48, 0xb8, 0x2c, 0xc3, 0x2e, -0x96, 0x7c, 0xb8, 0xfd, 0xd1, 0x22, 0xd6, 0xc7, -0xa6, 0x56, 0xb7, 0xde, 0xb2, 0xff, 0x44, 0xa8, -0x0f, 0xc9, 0x78, 0xac, 0x8a, 0xd7, 0x07, 0xe0, -0x00, 0x5e, 0x7d, 0x48, 0x1e, 0x28, 0x54, 0x1f, -0x80, 0xcd, 0x7f, 0xdc, 0xf1, 0xe1, 0xfa, 0x00, -0xa5, 0xd5, 0x47, 0x2a, 0xad, 0x3e, 0x76, 0x84, -0xfa, 0x00, 0x91, 0xf8, 0x0f, 0xc7, 0xff, 0xc5, -0x03, 0x9d, 0xdc, 0xfa, 0x90, 0x14, 0xa0, 0xeb, -0x2b, 0xf2, 0xfa, 0xa3, 0xf1, 0x00, 0xab, 0x3e, -0x92, 0xb3, 0xba, 0x47, 0xd9, 0xeb, 0xf5, 0xe6, -0x13, 0xea, 0x8f, 0x16, 0x00, 0xb3, 0x02, 0xf5, -0x91, 0x82, 0xfd, 0xd1, 0x82, 0xf3, 0x9f, 0x6f, -0xf3, 0x1f, 0x77, 0x7f, 0xfa, 0xfb, 0xa3, 0xf1, -0x00, 0xb1, 0x3f, 0x14, 0xad, 0x0f, 0x70, 0x03, -0xa7, 0x3f, 0x1a, 0x2b, 0x2d, 0x8e, 0xaa, 0x0f, -0xe0, 0x7e, 0xc2, 0xf5, 0x01, 0x02, 0xc0, 0xaa, -0x57, 0x43, 0xea, 0x63, 0x6b, 0x42, 0xd8, 0xdb, -0x15, 0x06, 0x94, 0xff, 0x4b, 0x99, 0x5f, 0xc1, -0x2d, 0x0b, 0x80, 0xc1, 0xf5, 0x08, 0x34, 0x1d, -0xe3, 0xd5, 0x07, 0xb8, 0x87, 0xad, 0x6f, 0x29, -0xff, 0x57, 0x32, 0xca, 0xf9, 0x75, 0x82, 0xd4, -0x47, 0xba, 0x8a, 0xd2, 0x3f, 0xbf, 0xa4, 0x0a, -0xd5, 0x8e, 0xf3, 0xeb, 0x63, 0x17, 0x5f, 0x2f, -0xe5, 0xff, 0x92, 0x29, 0xe9, 0x05, 0xdd, 0xee, -0x93, 0x4e, 0x04, 0x3e, 0x65, 0x7f, 0x6e, 0x09, -0xd5, 0x87, 0x0c, 0x82, 0xd1, 0x8d, 0x07, 0xeb, -0x8e, 0xb1, 0xeb, 0x23, 0xf9, 0xf2, 0xe5, 0x37, -0x52, 0xff, 0x91, 0xd1, 0x1f, 0x2d, 0x44, 0x03, -0xbe, 0x4c, 0xae, 0xd4, 0x11, 0xfb, 0x0f, 0xae, -0x0f, 0xb0, 0x8c, 0x79, 0x7e, 0x49, 0x1c, 0xff, -0xd7, 0x76, 0xf0, 0x68, 0xa1, 0xf3, 0x6e, 0x56, -0xc0, 0xfe, 0x03, 0xc2, 0xd9, 0x61, 0x0c, 0xfe, -0x43, 0xec, 0x3f, 0x4a, 0x38, 0x5a, 0xfe, 0xbd, -0x70, 0x7c, 0xb8, 0xe8, 0xf1, 0x9f, 0x79, 0xbc, -0xf5, 0x7a, 0xe0, 0xc1, 0x19, 0x69, 0xba, 0x9c, -0x97, 0x1f, 0x17, 0xb9, 0x3f, 0x48, 0x54, 0xfe, -0xc3, 0xa8, 0x8f, 0xcd, 0x5a, 0xef, 0x15, 0xf0, -0x9f, 0x08, 0xfc, 0x64, 0x82, 0x57, 0x1f, 0x9b, -0x03, 0x3e, 0x4b, 0xfe, 0x53, 0xa0, 0x3e, 0x24, -0x17, 0xcc, 0x94, 0xc2, 0x7f, 0xf8, 0xf5, 0x21, -0xb9, 0xe0, 0x8d, 0x02, 0xf5, 0xb1, 0x99, 0xf6, -0x1f, 0x9a, 0xff, 0x84, 0xba, 0xf5, 0x7d, 0x9a, -0xfc, 0x67, 0x14, 0x44, 0x59, 0x2f, 0xc5, 0x7f, -0xf6, 0x7e, 0xbe, 0xf9, 0x0f, 0xa7, 0x9f, 0xc5, -0x27, 0xe6, 0x3f, 0x47, 0xfc, 0xfc, 0x67, 0xfe, -0xa7, 0xc2, 0x7f, 0xa8, 0xfa, 0x48, 0xc3, 0x5c, -0xfe, 0x53, 0xfd, 0xa9, 0xf0, 0x1f, 0x10, 0xe4, -0x3f, 0xc5, 0xfa, 0x83, 0xd4, 0x14, 0xe1, 0x3f, -0xc1, 0xfe, 0xb0, 0xc9, 0x28, 0xf3, 0xa7, 0xf8, -0x8f, 0xf0, 0x29, 0xf3, 0x9f, 0xc8, 0xf9, 0x71, -0x9f, 0x90, 0xff, 0xb4, 0xfa, 0xed, 0x3f, 0xfb, -0x69, 0xfe, 0x13, 0x0c, 0xdb, 0x63, 0xf0, 0x1f, -0x5f, 0x7d, 0x48, 0x2e, 0xe0, 0xf2, 0x1f, 0x0e, -0x20, 0xfc, 0xc7, 0xa4, 0xfa, 0xa3, 0x45, 0xe2, -0x3f, 0x91, 0xf4, 0x0f, 0xe1, 0x3f, 0xaa, 0xdb, -0x1f, 0xb6, 0x30, 0xff, 0xf1, 0x7e, 0x2f, 0x23, -0xd2, 0xfb, 0x17, 0xe1, 0x3f, 0x46, 0x98, 0xff, -0x88, 0xe1, 0xf5, 0x1e, 0xf7, 0xe6, 0x33, 0xc0, -0xc8, 0x8f, 0xa3, 0x81, 0x1c, 0xb0, 0xff, 0x98, -0x5c, 0xfe, 0xe3, 0xf3, 0x7f, 0x6d, 0xa3, 0xf9, -0x4f, 0xf1, 0xf3, 0xab, 0x40, 0x7e, 0x5c, 0x18, -0xac, 0x3f, 0x58, 0xcb, 0x8b, 0xff, 0xe1, 0xf2, -0x01, 0x6f, 0x7f, 0xc2, 0x2a, 0x1e, 0xff, 0x89, -0x10, 0xff, 0xc3, 0x03, 0x75, 0xd3, 0x22, 0xc5, -0x7f, 0x14, 0x7b, 0x93, 0x74, 0xd2, 0x81, 0x40, -0xda, 0xd2, 0xf1, 0x04, 0x93, 0xff, 0x8c, 0x0d, -0x33, 0x69, 0x8f, 0xd9, 0x74, 0x42, 0xe1, 0xf9, -0xbf, 0x58, 0xcb, 0xd4, 0xb5, 0x6e, 0xda, 0x30, -0xc8, 0x8a, 0xff, 0xf1, 0x8b, 0xf1, 0x87, 0x3a, -0x5d, 0x68, 0x88, 0xef, 0xff, 0xb2, 0xc1, 0x7f, -0x83, 0x5e, 0x9d, 0x2e, 0xa4, 0xf9, 0xef, 0x45, -0xfb, 0xc3, 0xae, 0xf0, 0xfb, 0x07, 0x8b, 0xf2, -0x9f, 0x76, 0x93, 0x8e, 0x6f, 0x99, 0x09, 0xf9, -0xbf, 0x24, 0xdf, 0xfc, 0x5f, 0x1c, 0x69, 0x7f, -0x9d, 0x9e, 0x3f, 0x5d, 0x1f, 0x89, 0xa9, 0x7f, -0xa0, 0x36, 0x45, 0xcb, 0x87, 0xf4, 0x87, 0xbd, -0x10, 0xa8, 0x0f, 0xe0, 0x82, 0xfd, 0x53, 0x74, -0x3c, 0x8c, 0xcf, 0xff, 0xe5, 0x06, 0xf9, 0xf8, -0x68, 0x4f, 0xda, 0x2e, 0x94, 0xed, 0xd9, 0x7f, -0x28, 0xff, 0x17, 0x53, 0x3e, 0xcb, 0x7c, 0xfe, -0x62, 0xe2, 0xff, 0x0a, 0xc4, 0xff, 0x38, 0xe0, -0x43, 0xd0, 0xde, 0xed, 0xd3, 0x57, 0x5e, 0xfd, -0xcf, 0xc9, 0x14, 0x53, 0xff, 0xc0, 0x86, 0x8c, -0xdf, 0xff, 0xe5, 0xca, 0x33, 0x54, 0x1f, 0x80, -0x34, 0x8a, 0x65, 0xfa, 0xbf, 0xb6, 0xcb, 0xcc, -0xfd, 0x06, 0x1a, 0xcf, 0xfa, 0xf4, 0x0f, 0xcf, -0xff, 0xe5, 0x80, 0x73, 0x80, 0x34, 0x8a, 0xcd, -0x15, 0xf4, 0x7f, 0xb9, 0xe0, 0x85, 0x48, 0xfe, -0x2f, 0x0f, 0xe4, 0xdb, 0x75, 0x2a, 0xbe, 0xa5, -0xbc, 0x40, 0x7d, 0x00, 0x07, 0x88, 0x77, 0xb7, -0x94, 0xe2, 0xff, 0xd2, 0x17, 0xfa, 0x0a, 0x65, -0xf3, 0xfc, 0x5f, 0x04, 0x34, 0x3b, 0x85, 0xb2, -0x25, 0xab, 0x94, 0x74, 0x71, 0xff, 0xd7, 0xd3, -0x76, 0x20, 0x90, 0x13, 0x1a, 0xc4, 0xf6, 0x7f, -0x51, 0x40, 0x5f, 0xe6, 0x2b, 0x94, 0x4d, 0xf9, -0xbf, 0xa8, 0xf1, 0x2a, 0x71, 0x84, 0xc1, 0x95, -0xbd, 0x74, 0xfc, 0x0f, 0xb3, 0x3e, 0xa4, 0xe1, -0xa3, 0x3d, 0x5a, 0x4b, 0x74, 0xff, 0x17, 0x38, -0x14, 0x28, 0x0c, 0xc5, 0x8c, 0xff, 0xf1, 0xff, -0x10, 0xe3, 0x0a, 0xdb, 0xff, 0xc5, 0xe3, 0x6f, -0x86, 0x2f, 0xfe, 0x87, 0xf8, 0xbf, 0x6a, 0xd8, -0xfc, 0x67, 0xf9, 0xed, 0x4b, 0xa8, 0x2b, 0x4c, -0xff, 0x57, 0x80, 0xf6, 0xd0, 0xf1, 0x3f, 0x2c, -0xff, 0x17, 0xa0, 0x68, 0xcf, 0x0b, 0xea, 0x92, -0x7c, 0x0b, 0xbb, 0x3e, 0xa4, 0xa7, 0x7f, 0x74, -0x9f, 0x7e, 0x6e, 0x9d, 0xa1, 0xf5, 0x0f, 0xc7, -0xff, 0x45, 0x80, 0xb2, 0x38, 0xdb, 0xc2, 0xf3, -0x7f, 0x31, 0x69, 0xcf, 0xf2, 0xa9, 0x56, 0xae, -0xff, 0xeb, 0x2f, 0x02, 0xa7, 0xb9, 0xa5, 0x46, -0x74, 0x9f, 0x3e, 0x21, 0xef, 0xbf, 0x7b, 0x5f, -0x08, 0x55, 0x33, 0xbe, 0x04, 0x2e, 0xc1, 0x9f, -0x4e, 0xd1, 0xe7, 0x97, 0x49, 0xf8, 0xa7, 0x9d, -0x7f, 0x31, 0xea, 0x9f, 0xff, 0xd3, 0xa0, 0x69, -0x55, 0x8b, 0x8f, 0xff, 0xb8, 0xe3, 0xd9, 0xf6, -0x9f, 0xa7, 0x41, 0x83, 0x4e, 0x17, 0x86, 0xa2, -0xeb, 0x43, 0xb2, 0xf4, 0xcf, 0x61, 0x2f, 0xf1, -0xc7, 0xbe, 0xf2, 0x0a, 0x55, 0x1f, 0x20, 0xe4, -0xbf, 0x60, 0x9c, 0x2f, 0x1c, 0xff, 0x17, 0xed, -0x28, 0xf4, 0x05, 0x66, 0x70, 0xfc, 0x5f, 0xa4, -0x50, 0x92, 0x89, 0x0b, 0x05, 0x30, 0xfd, 0x5f, -0x4c, 0xfe, 0xf3, 0x2f, 0x46, 0x5b, 0x96, 0x3e, -0xbf, 0x38, 0xfe, 0x2f, 0x0f, 0xa0, 0x6d, 0x66, -0xd2, 0xe3, 0xa9, 0xfa, 0xd8, 0xe1, 0xfa, 0x00, -0x96, 0x7c, 0x5a, 0x75, 0xaa, 0x90, 0x78, 0x86, -0xf2, 0x7f, 0xf1, 0xf8, 0x0f, 0xa0, 0xe5, 0x43, -0xea, 0x43, 0xee, 0x0f, 0xd6, 0x07, 0xb0, 0x03, -0xa1, 0x85, 0x60, 0x3d, 0x28, 0x86, 0xfd, 0xe7, -0x9e, 0xdf, 0x47, 0xfb, 0x4f, 0xb0, 0x3e, 0x12, -0x1b, 0x70, 0xfb, 0xa3, 0xfd, 0x5f, 0xd9, 0x7f, -0xe4, 0x2b, 0xb3, 0xff, 0x14, 0xf7, 0x7f, 0x55, -0x5d, 0x91, 0xfd, 0xa7, 0x50, 0x7f, 0xb4, 0xa2, -0xf6, 0x9f, 0x08, 0xf2, 0xf9, 0x14, 0xfd, 0x5f, -0xd1, 0xfa, 0xc3, 0x7e, 0x6e, 0xed, 0x3f, 0xbf, -0x1d, 0xff, 0x57, 0xe1, 0xfe, 0x68, 0x85, 0xec, -0x3f, 0x7c, 0xff, 0x17, 0x27, 0xfe, 0xe7, 0x4a, -0xfd, 0x5f, 0xd1, 0xfa, 0xc3, 0x46, 0xb6, 0xff, -0x90, 0xfa, 0x48, 0x62, 0x41, 0xfb, 0x8f, 0x67, -0x7f, 0x88, 0x68, 0xff, 0x71, 0xef, 0x7f, 0x85, -0xf5, 0xb1, 0xb9, 0xf6, 0x1f, 0xdd, 0x1b, 0x5f, -0x9a, 0xfd, 0x27, 0xd8, 0x1f, 0x8d, 0x0d, 0x38, -0xfd, 0x41, 0x4a, 0xaf, 0x8f, 0x5d, 0xd4, 0xfe, -0x13, 0xee, 0x8f, 0x16, 0xb1, 0x3f, 0x6c, 0x44, -0xfb, 0x0f, 0x9b, 0xff, 0x04, 0xe3, 0x9d, 0x0a, -0xf5, 0x47, 0x63, 0x01, 0x56, 0x7f, 0x34, 0x91, -0x0a, 0x84, 0x7e, 0x33, 0xa8, 0x3f, 0x0b, 0xf4, -0x47, 0x23, 0xa0, 0x9c, 0xc1, 0x7f, 0x28, 0xff, -0x57, 0x81, 0xc0, 0x06, 0x7e, 0x7f, 0xb4, 0x12, -0xed, 0x3f, 0x9c, 0x78, 0x21, 0x7e, 0x7f, 0x34, -0xdc, 0xbf, 0x32, 0x20, 0x1f, 0x89, 0x5b, 0x1f, -0x29, 0xd8, 0x36, 0x97, 0xc1, 0x7f, 0x22, 0xd9, -0x7f, 0xf8, 0xfd, 0x61, 0x09, 0xd8, 0x96, 0x38, -0x4f, 0x0a, 0x45, 0x06, 0xf9, 0xcf, 0x2c, 0x1f, -0xdb, 0xb9, 0x13, 0x3c, 0xd7, 0x77, 0x27, 0x54, -0x7e, 0x4c, 0x1a, 0x85, 0x14, 0xe3, 0x3f, 0x3f, -0xc2, 0xf9, 0x14, 0xb5, 0x5e, 0xa3, 0x90, 0x4c, -0x61, 0xfe, 0x63, 0xfd, 0x22, 0x3b, 0x5b, 0xf2, -0xa4, 0x51, 0x48, 0x71, 0xfe, 0xd3, 0x06, 0x13, -0x0f, 0xc5, 0xbd, 0x47, 0xa9, 0x28, 0xff, 0x91, -0x57, 0xc2, 0xea, 0xee, 0xf8, 0x5f, 0x96, 0xc0, -0x7f, 0x54, 0xc4, 0x3f, 0x5b, 0xd5, 0xa8, 0xfc, -0x07, 0xbd, 0xad, 0x29, 0x07, 0x2b, 0xed, 0xaf, -0x86, 0xa2, 0xf1, 0x1f, 0x45, 0xad, 0x2c, 0x21, -0xfe, 0x67, 0xc9, 0x54, 0xcb, 0x37, 0x49, 0xe3, -0x8c, 0x53, 0xaa, 0x7b, 0x7f, 0x3e, 0xff, 0x49, -0x1c, 0x8c, 0x27, 0xa2, 0xf3, 0x1f, 0x7f, 0x20, -0x59, 0x14, 0xfe, 0x93, 0xc8, 0xc7, 0x5b, 0x4b, -0xe1, 0x3f, 0x4a, 0xd6, 0x4b, 0xa4, 0x6d, 0x64, -0xf3, 0x9f, 0x94, 0x6f, 0xbd, 0x95, 0xcb, 0xc9, -0x7a, 0x23, 0xf0, 0x9f, 0x93, 0x95, 0xd7, 0x91, -0x78, 0xaa, 0xe2, 0xfc, 0x67, 0xc9, 0xc8, 0xac, -0x69, 0xa9, 0x85, 0xd8, 0x7f, 0xdc, 0xf9, 0x70, -0xf8, 0x8f, 0xb8, 0x02, 0x2c, 0x86, 0xfd, 0xa5, -0xf0, 0x9f, 0x4c, 0x62, 0x6f, 0xbc, 0x39, 0x3a, -0xff, 0x69, 0xc5, 0xf9, 0x47, 0xcd, 0xa5, 0xf0, -0x1f, 0x45, 0x25, 0xe3, 0x8b, 0xf3, 0x1f, 0xf4, -0x7e, 0x57, 0x5f, 0x89, 0xbe, 0x12, 0x23, 0xf3, -0x9f, 0x56, 0x2a, 0x11, 0xbb, 0x38, 0xff, 0xf9, -0x2b, 0xbd, 0xfa, 0x64, 0x49, 0xfc, 0x27, 0x5b, -0x7d, 0x5a, 0x6a, 0x2e, 0x81, 0xff, 0x68, 0xf1, -0xdd, 0xa4, 0x51, 0x48, 0x24, 0xfe, 0x53, 0x2f, -0xca, 0x25, 0xf0, 0x9f, 0xae, 0x38, 0x2d, 0xcf, -0x20, 0xff, 0xe9, 0x78, 0x30, 0x4c, 0x63, 0x86, -0x87, 0x9a, 0x4b, 0xe2, 0x3f, 0x7b, 0x4a, 0xe4, -0x3f, 0x03, 0x44, 0xfe, 0x2c, 0xfe, 0x93, 0x09, -0xd3, 0x9e, 0x96, 0x92, 0xf8, 0xcf, 0x4d, 0xe4, -0x79, 0x89, 0xc4, 0x7f, 0x66, 0xfa, 0xe6, 0xba, -0xa6, 0x95, 0x48, 0xfc, 0xa7, 0x3b, 0x6e, 0x7f, -0xb5, 0xf1, 0xee, 0x4e, 0x1e, 0xff, 0x21, 0xf6, -0x1f, 0x74, 0x0c, 0xd5, 0x97, 0xc8, 0x7f, 0x4e, -0x7b, 0xe7, 0x57, 0x53, 0x24, 0xfe, 0xe3, 0xe8, -0x9f, 0xf1, 0xf8, 0x8e, 0x28, 0xf1, 0x3f, 0x63, -0x48, 0xed, 0xcc, 0x8d, 0xce, 0x7f, 0xd0, 0x41, -0xd0, 0x6e, 0xc9, 0x73, 0x3b, 0x8f, 0xff, 0xf8, -0xf5, 0x27, 0x52, 0xb3, 0x4f, 0x5a, 0xfa, 0xf3, -0x1e, 0x7c, 0xe5, 0xdd, 0x48, 0xfc, 0x87, 0x65, -0xff, 0x61, 0xc5, 0xff, 0x58, 0x1a, 0x7e, 0x2c, -0x91, 0x95, 0x96, 0x83, 0x12, 0xf8, 0x4f, 0x65, -0x9e, 0x14, 0x7e, 0x8c, 0xe2, 0xff, 0x52, 0xe8, -0xf1, 0x7c, 0xfe, 0xe3, 0x81, 0x4a, 0xea, 0xbc, -0xe3, 0xf2, 0x1f, 0x0b, 0xd8, 0x12, 0x4b, 0xf4, -0x92, 0x42, 0xc4, 0x2c, 0xfe, 0xd3, 0xe9, 0x3f, -0xdf, 0xf9, 0xfc, 0x47, 0xbd, 0x0c, 0x6f, 0x8c, -0x1c, 0xff, 0x63, 0x62, 0xfe, 0x03, 0x1a, 0x8b, -0xd9, 0x7f, 0x3c, 0xfb, 0xf3, 0x44, 0xcc, 0x0b, -0xa2, 0x8b, 0x6a, 0xff, 0x11, 0x82, 0xd9, 0xee, -0x04, 0xb8, 0xa9, 0x76, 0xc4, 0xff, 0x65, 0xf1, -0x1f, 0x91, 0xd3, 0x46, 0x87, 0x61, 0xff, 0xe1, -0xf9, 0xbf, 0xa2, 0xe6, 0x7f, 0x15, 0xb3, 0xff, -0x9c, 0x62, 0xef, 0x87, 0x82, 0xf6, 0x9f, 0xe7, -0x8a, 0xbe, 0x2f, 0x50, 0xfe, 0xaf, 0x68, 0xf1, -0x3f, 0x94, 0xff, 0x2b, 0x9a, 0xfd, 0xc7, 0xf3, -0x7f, 0x05, 0xfa, 0xc3, 0x72, 0xec, 0x3f, 0xde, -0xf3, 0x18, 0xcd, 0xfe, 0xc3, 0xad, 0x8f, 0xcd, -0xb3, 0xff, 0x78, 0xfa, 0x0d, 0xfa, 0xed, 0x3f, -0x7f, 0x62, 0x81, 0x8a, 0x42, 0xfd, 0x41, 0x22, -0xf9, 0xdf, 0x41, 0x31, 0xfe, 0xc3, 0xcd, 0xff, -0x8a, 0x68, 0xff, 0x71, 0xe7, 0x1f, 0xd5, 0xfe, -0xe3, 0xce, 0xff, 0xb3, 0xb1, 0xff, 0x1c, 0xf7, -0xf3, 0x1f, 0xbd, 0x98, 0x3d, 0x84, 0xf8, 0xbf, -0x3e, 0x23, 0xfb, 0x8f, 0x3f, 0xff, 0x4b, 0x0f, -0x0c, 0x53, 0xbc, 0x0c, 0xa9, 0xef, 0x7d, 0x42, -0xfb, 0x0f, 0xf1, 0x7f, 0x61, 0xfe, 0xa3, 0x05, -0x96, 0x59, 0x11, 0xea, 0x0f, 0xe2, 0xed, 0x9f, -0xc2, 0xf6, 0x1f, 0x85, 0x95, 0xff, 0x45, 0xec, -0x3f, 0xdc, 0xc4, 0x2e, 0xc2, 0x7f, 0xa6, 0x23, -0xd9, 0x7f, 0xce, 0x95, 0x68, 0xff, 0xe1, 0xe4, -0x7f, 0x7d, 0x36, 0xf6, 0x1f, 0xa5, 0xf8, 0xf3, -0x4b, 0xfc, 0x5f, 0xd1, 0xec, 0x3f, 0xef, 0xd0, -0xfc, 0x47, 0xf9, 0x8d, 0x5a, 0x54, 0x9f, 0x10, -0x7e, 0x12, 0xbb, 0x24, 0x5c, 0xfe, 0xc1, 0xca, -0xa9, 0xf2, 0x22, 0xf6, 0x1f, 0x57, 0x3e, 0xbe, -0xfe, 0xb0, 0x7c, 0xfb, 0x0f, 0xc9, 0xff, 0xf2, -0xf3, 0x9f, 0x05, 0xec, 0xf1, 0x3e, 0xfe, 0xa3, -0x50, 0x61, 0xcf, 0x09, 0x8e, 0xfd, 0x87, 0xca, -0xff, 0x7a, 0x5c, 0x59, 0x49, 0x56, 0xb7, 0x90, -0x63, 0x3f, 0x27, 0xfc, 0x47, 0xbf, 0x72, 0xfe, -0x53, 0x28, 0xff, 0x0b, 0x46, 0xb2, 0xff, 0x14, -0xf3, 0x7f, 0xb9, 0x40, 0x29, 0xce, 0x7f, 0xd6, -0x87, 0xe4, 0xb3, 0x3e, 0xc0, 0x7f, 0x98, 0xfe, -0x41, 0x0c, 0xbc, 0x7c, 0x7f, 0x9a, 0xff, 0x7c, -0xfd, 0xa3, 0x9a, 0x52, 0xed, 0x3f, 0x97, 0xe0, -0xd2, 0xe6, 0xc4, 0x64, 0x79, 0x3b, 0x98, 0x84, -0xd7, 0x6a, 0x55, 0x93, 0xd2, 0xec, 0x22, 0xfe, -0xaf, 0x67, 0x61, 0x23, 0x50, 0xfa, 0x44, 0x6d, -0x64, 0xb7, 0x82, 0x00, 0xc8, 0x2c, 0xb4, 0x68, -0xcf, 0x2c, 0xae, 0xff, 0xeb, 0x59, 0xc1, 0x50, -0x94, 0x5a, 0x51, 0x86, 0x10, 0x34, 0x6a, 0x0a, -0xa8, 0x95, 0x83, 0xfb, 0x21, 0x60, 0xff, 0x79, -0x56, 0x46, 0xb7, 0x55, 0xc5, 0x55, 0x60, 0x37, -0x40, 0x00, 0xa2, 0xd7, 0xae, 0x82, 0xf1, 0xcf, -0xea, 0x6f, 0x40, 0xbb, 0xd1, 0xba, 0x5b, 0x6a, -0x04, 0xaf, 0xc0, 0xc3, 0x30, 0x71, 0xb0, 0xba, -0x25, 0x6c, 0x1f, 0x0b, 0xe4, 0x7f, 0xbd, 0xb8, -0xaa, 0x7a, 0x54, 0x3a, 0xa8, 0x7f, 0xac, 0xae, -0x84, 0xb3, 0x66, 0xe6, 0x5c, 0x08, 0x15, 0x12, -0x0f, 0xda, 0x7f, 0xfe, 0xdc, 0x48, 0x0c, 0x4b, -0x0b, 0xd5, 0x57, 0x60, 0x3b, 0x4c, 0x1c, 0x91, -0x5a, 0x42, 0xf9, 0xdd, 0x7e, 0xfb, 0x0f, 0x62, -0xfb, 0x86, 0x32, 0x8c, 0xa6, 0x7d, 0x1f, 0xd4, -0xa0, 0x72, 0xa4, 0xb6, 0xc5, 0x5f, 0x0f, 0x2a, -0x64, 0xff, 0x39, 0x0c, 0xae, 0x81, 0x8a, 0x26, -0x2a, 0xe0, 0x7e, 0xa0, 0xe1, 0xfe, 0x20, 0xb2, -0x2a, 0x59, 0x62, 0x51, 0x27, 0xdd, 0xd2, 0x01, -0x7e, 0xfb, 0xcf, 0xd3, 0x70, 0xf1, 0x88, 0x72, -0x87, 0xf8, 0x25, 0xb0, 0x13, 0xe7, 0x83, 0x77, -0x89, 0x37, 0x84, 0xf2, 0xc1, 0xfd, 0xfe, 0xaf, -0x73, 0xe0, 0x0f, 0x91, 0x58, 0xca, 0x5b, 0xc1, -0x31, 0x90, 0xd6, 0x13, 0x20, 0x2e, 0xe3, 0xfe, -0x20, 0x05, 0xfc, 0x5f, 0x97, 0x9c, 0xb6, 0x71, -0xc2, 0x25, 0x5c, 0x36, 0xc1, 0x94, 0xfe, 0xa7, -0xb8, 0xff, 0x6b, 0x2a, 0xf1, 0x58, 0x27, 0x12, -0x0b, 0xb4, 0xf2, 0x13, 0x8f, 0x89, 0x41, 0xf9, -0x84, 0xed, 0x3f, 0x2d, 0x46, 0x65, 0x4a, 0xdc, -0x05, 0xf6, 0x63, 0xed, 0x71, 0x0a, 0xec, 0x2a, -0xea, 0xff, 0x52, 0xee, 0x16, 0xe7, 0x83, 0x47, -0xec, 0xb0, 0x9f, 0x37, 0x42, 0xeb, 0x0d, 0xd8, -0x7f, 0xf4, 0x56, 0xb3, 0x0b, 0x67, 0xcf, 0x3d, -0x84, 0x89, 0xf4, 0x57, 0x6b, 0x5f, 0x31, 0x83, -0xfd, 0x56, 0x02, 0xf6, 0x1f, 0x75, 0x45, 0x3e, -0x31, 0x22, 0x29, 0xe0, 0x0d, 0xbd, 0x1d, 0x56, -0x1f, 0x90, 0xde, 0x65, 0xe4, 0xbf, 0xbb, 0xf3, -0x41, 0xfc, 0x47, 0xb5, 0xca, 0xfe, 0x58, 0x65, -0x00, 0x15, 0xab, 0x3f, 0xc8, 0x4c, 0x34, 0xff, -0xd7, 0x2f, 0x20, 0x4e, 0xeb, 0x4e, 0xb0, 0xf9, -0x8f, 0xdf, 0xfe, 0x73, 0x67, 0x36, 0xbe, 0x57, -0xfc, 0x25, 0xb8, 0x4f, 0x6f, 0xd3, 0x2b, 0xf7, -0xd6, 0x15, 0xe7, 0x3f, 0x4b, 0xf4, 0xf8, 0x09, -0xf1, 0x3c, 0xf8, 0x3e, 0x02, 0x0a, 0x06, 0xc5, -0xfc, 0x5f, 0x8b, 0x7b, 0xe3, 0x3d, 0xe2, 0x87, -0x60, 0xd0, 0x5c, 0x9c, 0xad, 0xec, 0x11, 0x4f, -0x16, 0xf5, 0x7f, 0xb5, 0x82, 0x6a, 0xd0, 0x64, -0x22, 0x35, 0xbf, 0x02, 0x87, 0xfd, 0x84, 0xd7, -0x5b, 0x38, 0xfe, 0x39, 0x7c, 0xe2, 0x07, 0xed, -0x3f, 0x2b, 0xf5, 0xc4, 0x49, 0xe9, 0x57, 0xb8, -0xfe, 0x8f, 0x99, 0x38, 0x21, 0x5d, 0xe7, 0x1f, -0xbf, 0x8b, 0x11, 0xff, 0xac, 0xe0, 0x6a, 0x36, -0xea, 0x11, 0xa4, 0x1f, 0xaa, 0xa0, 0x18, 0xea, -0x0f, 0xd2, 0x18, 0xb2, 0xff, 0x64, 0x70, 0xb4, -0x0f, 0x3c, 0x34, 0x4b, 0x43, 0xa0, 0x2f, 0x6c, -0x01, 0x0b, 0xda, 0x7f, 0x5a, 0xed, 0x6a, 0x3f, -0x87, 0x40, 0xa3, 0x5e, 0x91, 0x16, 0xc3, 0x8c, -0x28, 0x9c, 0xff, 0x95, 0xd8, 0x6b, 0x95, 0x79, -0x3c, 0x8c, 0x7f, 0xdf, 0x66, 0x06, 0xff, 0x71, -0xf7, 0xa7, 0x93, 0xff, 0x95, 0x59, 0x52, 0x90, -0xff, 0x30, 0xe2, 0x9f, 0x07, 0xe2, 0x0d, 0xe8, -0xd8, 0x64, 0xd7, 0x3f, 0xec, 0x0c, 0xe6, 0x7f, -0x2d, 0xf9, 0x61, 0x7c, 0x4a, 0xbc, 0x09, 0xfc, -0x35, 0x68, 0x43, 0x40, 0xba, 0x3b, 0xd0, 0x31, -0x96, 0x19, 0xff, 0x7c, 0x5d, 0x5f, 0x02, 0xf4, -0x83, 0xb6, 0xa9, 0xf5, 0xe9, 0x5a, 0xa5, 0x00, -0xff, 0x71, 0xf2, 0xbf, 0x74, 0xdc, 0xa6, 0xb9, -0x66, 0xd0, 0x36, 0x9b, 0x74, 0x17, 0xce, 0xff, -0x42, 0x24, 0x67, 0xf1, 0x48, 0xf5, 0xb4, 0xd4, -0x0e, 0x5e, 0xc6, 0x6c, 0x67, 0x5a, 0xba, 0xba, -0x78, 0xfc, 0x33, 0x5e, 0xdd, 0x7b, 0xb8, 0xed, -0xb2, 0x89, 0xc0, 0x74, 0x01, 0xff, 0x17, 0xce, -0xff, 0x3a, 0x43, 0x9f, 0x56, 0xb3, 0x2e, 0x48, -0xbf, 0x0e, 0x9d, 0x5f, 0xa1, 0xfc, 0xaf, 0x71, -0xdc, 0x9f, 0x5a, 0x7f, 0x0a, 0x2c, 0x19, 0x55, -0xb2, 0x48, 0xff, 0x78, 0xf3, 0xf7, 0xea, 0x1f, -0xba, 0xf7, 0xc7, 0xfc, 0xc7, 0xf1, 0x76, 0x9d, -0xc0, 0xf9, 0xf2, 0x66, 0xa5, 0x21, 0xfe, 0xbc, -0x50, 0xfc, 0xb3, 0x9b, 0xff, 0xa5, 0x22, 0xe9, -0x1d, 0xc4, 0x66, 0x10, 0x80, 0xa4, 0x41, 0xe4, -0x69, 0x37, 0x42, 0x3d, 0xe5, 0xcb, 0xff, 0x7a, -0x93, 0xf8, 0xbf, 0xac, 0x42, 0xbb, 0xef, 0x42, -0x7e, 0xfc, 0xb3, 0x63, 0xff, 0xd1, 0xed, 0x6f, -0x75, 0xeb, 0x5b, 0x4a, 0x3e, 0x76, 0x46, 0x58, -0xd3, 0xdb, 0x41, 0xfe, 0x03, 0xab, 0xa7, 0x84, -0x19, 0x2c, 0x8d, 0xe9, 0xaa, 0xf3, 0x12, 0x3e, -0xef, 0x96, 0xf8, 0xf4, 0x39, 0x95, 0xff, 0x65, -0xe7, 0xbf, 0x83, 0xf5, 0xb8, 0x4d, 0xed, 0x73, -0x23, 0x56, 0x18, 0xcf, 0x74, 0xd8, 0x9f, 0x65, -0x10, 0xfe, 0xb3, 0x5d, 0xb0, 0x2e, 0x1e, 0xc2, -0xdf, 0x6a, 0x6d, 0x7a, 0x05, 0x73, 0x3c, 0x33, -0xfe, 0x59, 0x45, 0xd2, 0xd0, 0x95, 0xb4, 0x25, -0x9f, 0xed, 0xb6, 0x7c, 0x96, 0x86, 0xec, 0x3f, -0x8a, 0x6b, 0xe4, 0x29, 0x9f, 0xb2, 0x16, 0x5e, -0xe5, 0xae, 0xb7, 0x58, 0xfe, 0x57, 0xe7, 0xf3, -0x76, 0xfd, 0xba, 0x19, 0xe9, 0x42, 0x98, 0xff, -0x90, 0xfc, 0xaf, 0xef, 0x5f, 0x00, 0xaf, 0x82, -0xa5, 0xf4, 0x6e, 0xe9, 0x2c, 0x68, 0xff, 0x41, -0xf2, 0x1f, 0x2a, 0x6e, 0xff, 0xf1, 0x7e, 0xdf, -0x09, 0xf0, 0x80, 0xda, 0x2f, 0x97, 0x60, 0xff, -0x91, 0x9f, 0xa8, 0x1d, 0xd2, 0x16, 0x72, 0xed, -0x3f, 0x62, 0xb0, 0xfe, 0xa1, 0xfc, 0x04, 0x62, -0x23, 0x4f, 0x47, 0xb6, 0xff, 0xe4, 0xc0, 0x93, -0x68, 0x51, 0xcb, 0x3c, 0x69, 0x8c, 0x62, 0xa0, -0xb9, 0xf2, 0x49, 0x85, 0xf9, 0x0f, 0xc0, 0xf7, -0x6f, 0x77, 0xef, 0xc6, 0x30, 0x34, 0x8d, 0xfa, -0xf8, 0xcf, 0x85, 0xfa, 0x85, 0xd9, 0xa1, 0xe1, -0x90, 0xfd, 0x8a, 0x6b, 0xff, 0x31, 0xe5, 0xc5, -0x60, 0xc8, 0xd4, 0x7c, 0xd2, 0x38, 0x5e, 0x20, -0xfe, 0x67, 0x06, 0xcc, 0x17, 0x73, 0x81, 0xe8, -0xdf, 0xb7, 0x34, 0x7e, 0xfe, 0xd7, 0x1d, 0x60, -0x31, 0x18, 0x03, 0x07, 0x5d, 0xb6, 0x73, 0x5d, -0xd0, 0xfe, 0xa3, 0x06, 0xf9, 0x4f, 0xfd, 0xe3, -0xfc, 0xb2, 0x12, 0x44, 0x9e, 0x9e, 0xfe, 0x51, -0xe4, 0x03, 0x89, 0x63, 0x44, 0x3e, 0x45, 0xe3, -0x7f, 0xa6, 0xd5, 0x7d, 0xe8, 0x19, 0xe6, 0xb4, -0x85, 0x65, 0xd6, 0x7f, 0x7e, 0x58, 0xde, 0xd5, -0xb7, 0xbf, 0x84, 0xf8, 0x9f, 0x7f, 0x06, 0x39, -0x5d, 0x2b, 0xb2, 0xdf, 0x08, 0xff, 0x99, 0x90, -0x9f, 0x85, 0xc7, 0xa9, 0x68, 0x67, 0x07, 0x88, -0x7c, 0xfe, 0x33, 0x22, 0x06, 0xdb, 0xc2, 0xbe, -0xad, 0x14, 0xe0, 0x3f, 0xe0, 0x27, 0xc6, 0x28, -0x68, 0xf7, 0x9f, 0xfe, 0x05, 0xf9, 0xcf, 0x02, -0x78, 0xdf, 0x54, 0xa3, 0xd3, 0x1f, 0xd6, 0x39, -0x76, 0x61, 0x01, 0xfe, 0x23, 0x37, 0x8b, 0x43, -0x6a, 0xa0, 0x8d, 0xa9, 0xfe, 0x55, 0x91, 0x5f, -0xff, 0x39, 0x26, 0xe6, 0xf4, 0x91, 0xc8, 0xf1, -0x3f, 0xdd, 0x8a, 0x89, 0xf4, 0x53, 0x3b, 0xc3, -0xdf, 0xc7, 0xb3, 0xff, 0x20, 0x1a, 0x13, 0xb4, -0xe7, 0x84, 0xf9, 0x8f, 0x97, 0x7f, 0x91, 0xaa, -0xfa, 0x55, 0xdf, 0xbf, 0x19, 0x7e, 0xf9, 0x84, -0xfb, 0xa3, 0xbd, 0x4c, 0xd5, 0x3f, 0x9c, 0x80, -0xbb, 0xb5, 0x46, 0xbf, 0xd9, 0x47, 0xe6, 0xc7, -0xff, 0x18, 0x60, 0x10, 0xe6, 0x0c, 0x2d, 0x72, -0xfc, 0xcf, 0x11, 0xc4, 0x67, 0xee, 0xd3, 0x39, -0x6d, 0x61, 0x59, 0xfc, 0x47, 0xfe, 0x31, 0x78, -0x05, 0xd1, 0x1e, 0x6b, 0xb6, 0x11, 0xec, 0x3f, -0x13, 0x60, 0xa0, 0xac, 0x94, 0xf8, 0x1f, 0x05, -0xec, 0x6f, 0x34, 0xc3, 0xf2, 0xe7, 0xc6, 0xff, -0x28, 0x03, 0x5f, 0x45, 0xb4, 0xa7, 0xd1, 0x67, -0xed, 0xb9, 0xa8, 0xf3, 0xed, 0x3f, 0x8a, 0x5c, -0x0d, 0xfa, 0x60, 0xb1, 0xe7, 0x85, 0xf0, 0x1f, -0x01, 0xcc, 0x5d, 0xb8, 0x53, 0x2f, 0xf6, 0xfc, -0x12, 0xff, 0x97, 0x02, 0xaf, 0x46, 0xaf, 0xd5, -0x87, 0x7c, 0x6c, 0xe7, 0xf5, 0x02, 0xf1, 0x3f, -0x2d, 0xf2, 0x01, 0x86, 0x35, 0xc3, 0xbd, 0xa2, -0x86, 0xf9, 0x8f, 0xfc, 0x42, 0xd7, 0x24, 0xf4, -0x9d, 0x5f, 0xd2, 0x1b, 0xe0, 0x83, 0x3e, 0x5e, -0xfc, 0xcf, 0x3f, 0x82, 0xe7, 0xdf, 0xd9, 0x69, -0xbf, 0x76, 0x79, 0xb3, 0x3d, 0xa5, 0xbb, 0xef, -0x5f, 0x72, 0x28, 0xfe, 0x67, 0x04, 0x0c, 0xab, -0x3b, 0x03, 0xfa, 0xea, 0x64, 0x28, 0xf1, 0x8d, -0xd8, 0x7f, 0x70, 0x7f, 0xd8, 0xfe, 0x80, 0x3c, -0xcd, 0x50, 0xbf, 0x4b, 0xe2, 0xff, 0x52, 0xd0, -0xf9, 0x75, 0x6c, 0x77, 0x50, 0x7f, 0x06, 0x1b, -0xc1, 0xd3, 0xf1, 0x3f, 0x8f, 0x63, 0xa5, 0xe4, -0x7c, 0x2b, 0x58, 0x20, 0xd0, 0x3f, 0xee, 0xcb, -0x3e, 0xfb, 0x0f, 0x38, 0xd2, 0x72, 0x2e, 0x54, -0xf6, 0xe7, 0x4c, 0x80, 0x0f, 0x10, 0xff, 0xd7, -0xa8, 0xbc, 0x20, 0xff, 0x1c, 0xf4, 0x9f, 0x5f, -0x63, 0xce, 0xfb, 0x7b, 0xa3, 0x7b, 0xa5, 0x9d, -0xee, 0x0f, 0xdb, 0x02, 0x8e, 0x04, 0xc6, 0x4f, -0xeb, 0x81, 0x8c, 0xf8, 0x0c, 0x65, 0xff, 0x51, -0x13, 0xe8, 0x7d, 0x7f, 0xa4, 0x88, 0x7c, 0x28, -0xfe, 0x33, 0xbc, 0x1d, 0x6d, 0xf2, 0xc3, 0x01, -0xf9, 0xbc, 0x49, 0xef, 0x87, 0x72, 0xda, 0xfe, -0x03, 0xc3, 0xf1, 0xcf, 0x9d, 0x81, 0xfa, 0xcf, -0x0f, 0x32, 0xe2, 0x7f, 0x26, 0xac, 0xdd, 0xf2, -0x2a, 0x06, 0x33, 0xc5, 0xe3, 0x9f, 0xfb, 0xda, -0xb6, 0x59, 0x6c, 0x67, 0x08, 0xb6, 0xcd, 0xc4, -0x9f, 0x67, 0xf0, 0x9f, 0x50, 0x7f, 0xd8, 0x51, -0xdc, 0xaf, 0x53, 0xe9, 0x17, 0x5a, 0x4f, 0xc4, -0x9b, 0x19, 0xcf, 0xd7, 0xb9, 0x60, 0xfc, 0x8f, -0x8e, 0xa5, 0x9d, 0x41, 0x62, 0x9f, 0xb0, 0x89, -0x25, 0xdf, 0xfe, 0x43, 0xfa, 0x5f, 0x58, 0x65, -0xf7, 0x5e, 0xab, 0x3e, 0xd2, 0x14, 0x3e, 0x7f, -0x47, 0xbd, 0xf9, 0xbf, 0x8d, 0xfb, 0x5f, 0x88, -0xf7, 0x9a, 0xf6, 0x32, 0xb1, 0x5b, 0xf9, 0x20, -0xcb, 0x3e, 0xc6, 0xee, 0x0f, 0x6b, 0x99, 0x35, -0x46, 0x3c, 0xb7, 0x63, 0x8d, 0x17, 0xba, 0x4f, -0xf8, 0xcf, 0x31, 0xb9, 0xd5, 0x2a, 0x53, 0x39, -0x74, 0xb8, 0xf6, 0xb8, 0xb3, 0x6d, 0x32, 0xad, -0x2a, 0xe1, 0x6f, 0xc1, 0xfc, 0xaf, 0x77, 0x04, -0xcf, 0xfe, 0xfc, 0x2a, 0xec, 0xcf, 0xe1, 0xfa, -0x90, 0x99, 0xb0, 0x87, 0x74, 0xc6, 0xdb, 0x0e, -0xb7, 0x0b, 0xf3, 0x65, 0xdc, 0x16, 0x16, 0x9f, -0xfe, 0x99, 0x5d, 0x36, 0x08, 0x7b, 0xc4, 0x7c, -0xfd, 0x2f, 0x9c, 0xfa, 0xcf, 0x9d, 0x93, 0xc6, -0x4b, 0xca, 0x72, 0x58, 0xad, 0x79, 0x61, 0x3f, -0x9d, 0xac, 0xfe, 0xb0, 0x56, 0xfc, 0xcf, 0x32, -0x4c, 0x9b, 0x4f, 0xeb, 0x97, 0xd5, 0x95, 0xe3, -0xd5, 0xff, 0x45, 0xc9, 0x47, 0xf7, 0xec, 0x3f, -0xee, 0x7a, 0x9d, 0xfa, 0x5d, 0x53, 0xe8, 0xb5, -0x65, 0x12, 0xbc, 0x04, 0x91, 0xa2, 0xce, 0xb3, -0xfa, 0xc3, 0x12, 0xfd, 0xef, 0xd4, 0xdf, 0x50, -0xb0, 0x1a, 0xd9, 0x05, 0x1a, 0xf0, 0xe9, 0x13, -0x8e, 0x28, 0x38, 0x47, 0xf1, 0x4f, 0x6c, 0xff, -0x69, 0x9d, 0xaa, 0xb4, 0xcb, 0x1e, 0x36, 0x8c, -0xc4, 0xbb, 0x18, 0xeb, 0xa5, 0xfc, 0x5f, 0xf6, -0xfb, 0xd7, 0xb8, 0x95, 0x6d, 0xd1, 0x0f, 0x90, -0x22, 0xba, 0x4a, 0xa4, 0xdf, 0x38, 0x1c, 0xff, -0x57, 0x30, 0xfe, 0x67, 0xa4, 0x4c, 0x43, 0x2f, -0xa1, 0xc7, 0xc4, 0x9f, 0xa2, 0x17, 0xa5, 0xb8, -0x15, 0xf6, 0x03, 0xcb, 0x7d, 0xfc, 0xc7, 0xbb, -0xbf, 0xe3, 0xff, 0x7a, 0x10, 0xd1, 0x1e, 0xfd, -0x02, 0x58, 0xce, 0xf3, 0x7f, 0xb9, 0xe3, 0x3d, -0xfb, 0xcf, 0xdf, 0x49, 0xcd, 0xe8, 0xa0, 0x6c, -0xd3, 0x37, 0xa8, 0x94, 0x7d, 0x40, 0xf5, 0xf8, -0x8f, 0x3b, 0x9e, 0xf2, 0x7f, 0x2d, 0x02, 0xb8, -0xec, 0x70, 0x55, 0xbe, 0x32, 0xec, 0xe1, 0x9a, -0xf6, 0x7e, 0x5f, 0xd2, 0xff, 0xe2, 0xea, 0x85, -0xc0, 0x29, 0x53, 0x1c, 0x1e, 0x4f, 0xf9, 0xbf, -0x80, 0x6b, 0xfd, 0x28, 0x93, 0x6b, 0x71, 0x19, -0xc0, 0x0a, 0x55, 0x0c, 0xd9, 0x43, 0x1a, 0xa9, -0xfc, 0x77, 0xc5, 0xb0, 0xda, 0xc2, 0xa2, 0x45, -0xb5, 0xe0, 0xb2, 0xab, 0xd8, 0xfe, 0x13, 0xee, -0xbf, 0x40, 0xea, 0x3f, 0xdb, 0xf6, 0x9f, 0x95, -0xd9, 0xea, 0x7c, 0xd3, 0x79, 0x1b, 0x90, 0xb0, -0x9f, 0x3a, 0x56, 0xfe, 0xbb, 0xed, 0x3f, 0xca, -0x54, 0x9f, 0x90, 0xfe, 0x14, 0xbc, 0x8f, 0x41, -0xbe, 0x3f, 0xcc, 0x07, 0xa8, 0xfe, 0x17, 0x4e, -0xfd, 0xc3, 0x21, 0xc4, 0x76, 0x70, 0xdb, 0x0b, -0x35, 0x3e, 0xc0, 0xf2, 0x7f, 0x91, 0xfa, 0xbd, -0x6e, 0xfc, 0x4f, 0x5a, 0x0c, 0xb7, 0xf9, 0xb0, -0xc1, 0x7a, 0x35, 0xf3, 0x9a, 0xe0, 0x8e, 0x4f, -0xc5, 0x6c, 0x6b, 0xcf, 0x50, 0x5e, 0xfc, 0x05, -0x96, 0xa7, 0x21, 0xe5, 0x81, 0x2b, 0xc6, 0x5a, -0x4e, 0xfd, 0x67, 0x67, 0x92, 0x76, 0xbf, 0xd7, -0xf2, 0x87, 0x05, 0x06, 0xff, 0x21, 0xfe, 0x0e, -0x2f, 0x1f, 0x50, 0xd8, 0x56, 0xc0, 0xff, 0xc5, -0xe8, 0x7f, 0x51, 0x37, 0xd5, 0x88, 0xe4, 0x2f, -0x4c, 0x52, 0x61, 0x3f, 0x96, 0x29, 0x32, 0x10, -0xff, 0x33, 0xe0, 0xf9, 0xbf, 0x7e, 0x0e, 0xef, -0xd7, 0xda, 0xa0, 0x32, 0x22, 0xdd, 0x41, 0xd9, -0x7f, 0xc4, 0x36, 0x5e, 0x7f, 0xd8, 0xc6, 0xe3, -0x42, 0x3f, 0xb4, 0xda, 0x74, 0x86, 0x33, 0x98, -0xa8, 0xfe, 0x17, 0x5e, 0xfc, 0xcf, 0x5d, 0xa7, -0xd1, 0xf3, 0x8b, 0x1e, 0xcc, 0x9b, 0x18, 0xfc, -0x27, 0x64, 0xff, 0x99, 0xda, 0x78, 0xf7, 0xa6, -0xb7, 0xc0, 0xcf, 0x72, 0x7f, 0x34, 0xd5, 0x86, -0x0b, 0x21, 0x7e, 0xe8, 0x34, 0x8a, 0x55, 0xc3, -0xf5, 0x9f, 0xe7, 0xb9, 0xf9, 0x5f, 0x4d, 0x93, -0x22, 0xd6, 0x1e, 0x55, 0xac, 0x7e, 0xe8, 0xbe, -0xfe, 0x17, 0x56, 0xfe, 0x57, 0xe2, 0xc2, 0xa6, -0xb7, 0x6a, 0x5f, 0xed, 0xc3, 0xc0, 0x09, 0xfb, -0xd9, 0x78, 0xa1, 0xee, 0x92, 0x9b, 0x1a, 0xe6, -0xeb, 0x7f, 0xe1, 0xea, 0x9f, 0xd3, 0x70, 0xd0, -0x06, 0x44, 0xff, 0xb8, 0x85, 0x10, 0x89, 0xfd, -0xed, 0x07, 0xb6, 0xff, 0x6b, 0x4c, 0xd9, 0x21, -0x9e, 0x56, 0x10, 0x4d, 0x3a, 0x81, 0x14, 0x4b, -0x58, 0x5f, 0x11, 0xfb, 0x8f, 0xd5, 0x9f, 0x5a, -0xc0, 0xf6, 0xe7, 0xda, 0x49, 0xdc, 0x66, 0x65, -0x54, 0x49, 0xdf, 0xef, 0xea, 0x9f, 0x5a, 0x57, -0x9e, 0x8d, 0x54, 0xfd, 0xe7, 0xe4, 0xe3, 0xf8, -0x10, 0x99, 0x6a, 0x45, 0xfa, 0xd3, 0x32, 0x9b, -0xe3, 0xb0, 0xd2, 0xd0, 0x7a, 0x8f, 0x7b, 0xfa, -0x30, 0x0f, 0xde, 0x4b, 0xd8, 0x17, 0x9b, 0x3e, -0x00, 0xb8, 0x5e, 0x34, 0xeb, 0x7d, 0xb3, 0x89, -0xf4, 0x87, 0xcd, 0xa9, 0x1f, 0x29, 0x97, 0xcb, -0xd0, 0xc5, 0x99, 0xba, 0x8f, 0xc0, 0xab, 0xf8, -0xfe, 0x0c, 0x7f, 0x50, 0xf9, 0x01, 0x8a, 0xff, -0x6c, 0x77, 0x8a, 0xd4, 0x65, 0x3e, 0x90, 0x87, -0x02, 0x69, 0x5c, 0x2c, 0xfb, 0x0f, 0x3e, 0xef, -0xf0, 0xdb, 0xfd, 0xb0, 0xf8, 0x9f, 0x1a, 0xe2, -0x03, 0x9c, 0xf1, 0xcc, 0xfa, 0x3f, 0x65, 0x98, -0xf6, 0x30, 0xeb, 0x43, 0x52, 0xf9, 0xef, 0x74, -0xfd, 0x9f, 0x7f, 0x95, 0x57, 0x98, 0xcc, 0xfe, -0x56, 0x23, 0x65, 0xee, 0x7c, 0x2c, 0xfb, 0x8f, -0x68, 0xd3, 0x1e, 0x95, 0xef, 0xff, 0x5a, 0xd8, -0xeb, 0xfd, 0x05, 0xbb, 0xe9, 0xde, 0x77, 0x2a, -0xe7, 0x8e, 0x21, 0x30, 0xd9, 0xb2, 0xb4, 0xf2, -0x77, 0xa2, 0x1f, 0xa2, 0xdd, 0x74, 0x4f, 0x98, -0x2c, 0x7e, 0x7f, 0x05, 0x8a, 0x74, 0x77, 0xbc, -0xa5, 0xd8, 0x65, 0xf6, 0x45, 0x3f, 0xc4, 0x4f, -0x2c, 0xff, 0x70, 0x3f, 0x44, 0x56, 0x87, 0x44, -0xb9, 0xc0, 0xfd, 0xe7, 0x9a, 0xa5, 0xf5, 0x43, -0x54, 0x4b, 0x94, 0xbf, 0x5a, 0x48, 0xfe, 0x8c, -0x7e, 0x88, 0x09, 0x33, 0x24, 0xf3, 0x2f, 0xfa, -0x21, 0x16, 0x06, 0x9f, 0xe7, 0xf1, 0xbf, 0x63, -0xcf, 0xe3, 0x27, 0xeb, 0x0f, 0xeb, 0x44, 0x0e, -0x04, 0xc0, 0xef, 0x8d, 0x3e, 0x9c, 0x24, 0xd2, -0xfe, 0x4e, 0x40, 0xfe, 0x93, 0xbf, 0x2d, 0x7d, -0x68, 0xdd, 0xed, 0x8b, 0xfe, 0xb0, 0x81, 0xcf, -0x17, 0xfa, 0xf0, 0xff, 0xf9, 0xf8, 0xa3, 0x1d, -0x52, 0xaf, 0x7e, 0x5a, 0xbd, 0x11, 0x54, 0x8d, -0x5a, 0x60, 0x91, 0x1c, 0xfb, 0x99, 0xb4, 0xc3, -0xec, 0x51, 0xe7, 0xd4, 0x57, 0x1d, 0xc5, 0x20, -0x3b, 0x47, 0xae, 0x32, 0xaf, 0xf5, 0xc6, 0xaf, -0x5e, 0x25, 0xef, 0x10, 0x7a, 0xf4, 0xad, 0x2a, -0x18, 0x8f, 0xd9, 0x20, 0x49, 0x80, 0xe0, 0x00, -0xf3, 0x5a, 0x97, 0x0f, 0x03, 0x28, 0x0a, 0x1a, -0xec, 0xd2, 0x6a, 0x15, 0xd0, 0xe7, 0x00, 0x99, -0x02, 0x0d, 0xb0, 0xcb, 0x40, 0xc0, 0x6b, 0x2f, -0x83, 0xb7, 0xb8, 0xd0, 0x0b, 0xba, 0xc1, 0x6c, -0x30, 0x08, 0x05, 0xc3, 0x02, 0xc9, 0x01, 0xe1, -0x36, 0xa1, 0x1b, 0x6c, 0x49, 0xc5, 0x76, 0x0a, -0x06, 0x06, 0x20, 0x46, 0x8d, 0x3f, 0xda, 0x1d, -0xbb, 0x41, 0xf8, 0x3a, 0xdc, 0xd4, 0x21, 0xef, -0x8e, 0xdd, 0x25, 0xf4, 0xc0, 0xad, 0x5a, 0x72, -0xc2, 0x03, 0x02, 0x02, 0x23, 0x08, 0x50, 0xf3, -0x39, 0xaa, 0xeb, 0x5a, 0x56, 0x91, 0xc5, 0x18, -0xfa, 0x4b, 0x06, 0x48, 0x81, 0x32, 0x20, 0x10, -0x20, 0xbb, 0x80, 0xac, 0xf7, 0x68, 0x97, 0x7c, -0xbb, 0x90, 0x82, 0x6b, 0x34, 0x70, 0x9f, 0xdc, -0x28, 0x28, 0xf9, 0x0c, 0x50, 0x77, 0xcb, 0x0d, -0x82, 0x02, 0x32, 0x9a, 0x3a, 0x20, 0x6b, 0x36, -0xa0, 0xc7, 0xaf, 0x8b, 0xdd, 0x32, 0xba, 0x79, -0xe4, 0xd6, 0xd6, 0xfa, 0x59, 0xb1, 0x4c, 0x2e, -0x9b, 0xdf, 0xac, 0xc4, 0x2a, 0x63, 0x3a, 0xcc, -0x6a, 0xf5, 0x2d, 0x49, 0xd1, 0x06, 0xcb, 0x93, -0x80, 0x92, 0xcf, 0x5c, 0xa1, 0x1c, 0xdc, 0x6a, -0x26, 0xb3, 0x72, 0x42, 0xd8, 0x8a, 0x40, 0x4d, -0x6f, 0xac, 0x47, 0xd8, 0x04, 0x36, 0x9b, 0xc9, -0x74, 0xec, 0x8f, 0x05, 0x09, 0x83, 0x9b, 0x64, -0xaf, 0xfc, 0x2a, 0x1a, 0xaf, 0xe9, 0x0a, 0xa8, -0x05, 0x32, 0x44, 0xca, 0x06, 0x69, 0x3e, 0x5d, -0xd0, 0x90, 0x0a, 0xec, 0x84, 0x2a, 0x94, 0x55, -0x41, 0x46, 0xaa, 0x01, 0x03, 0xd0, 0x41, 0xc9, -0xc7, 0x10, 0x91, 0xe8, 0x81, 0x86, 0x54, 0x87, -0x05, 0x1a, 0xec, 0x50, 0x2c, 0x7c, 0x45, 0xd1, -0xca, 0x1c, 0xd0, 0x41, 0xc9, 0x27, 0x1b, 0x6b, -0x16, 0xbe, 0x09, 0xb6, 0xe8, 0xf5, 0x30, 0xb6, -0xcd, 0x02, 0xf3, 0xf2, 0x31, 0x43, 0x38, 0x05, -0xfe, 0x0c, 0x24, 0xf3, 0x31, 0xcd, 0x06, 0xf4, -0x7a, 0xf5, 0xb8, 0x01, 0x4e, 0x81, 0x1b, 0xb0, -0xe1, 0xc4, 0xfa, 0xbd, 0xb4, 0x24, 0x94, 0x6e, -0x07, 0xdd, 0x70, 0x36, 0xa8, 0x22, 0x80, 0xda, -0x3f, 0x9d, 0x72, 0x3a, 0x97, 0xd0, 0x3a, 0xd1, -0x5f, 0x96, 0xd3, 0x30, 0xa1, 0x49, 0x8a, 0x3a, -0x56, 0x9f, 0x1e, 0xc5, 0x57, 0xd4, 0x97, 0x80, -0x03, 0xa8, 0xdf, 0x0b, 0x7d, 0xd2, 0xe8, 0x9d, -0x4a, 0xc2, 0x3b, 0xc3, 0x01, 0xa6, 0x0b, 0x26, -0xbc, 0x2b, 0x94, 0x7c, 0x24, 0x21, 0x0d, 0x37, -0x68, 0x75, 0x78, 0x77, 0x59, 0x20, 0x51, 0x3f, -0x26, 0xa4, 0x73, 0x1b, 0xd2, 0x9b, 0x14, 0xf9, -0x98, 0x0b, 0xa8, 0xf1, 0x47, 0x33, 0x31, 0x23, -0xd7, 0xad, 0x6d, 0x41, 0xe3, 0x1d, 0x10, 0x43, -0x60, 0x14, 0x83, 0x64, 0xbf, 0xa0, 0xd9, 0x00, -0x52, 0xf2, 0xc9, 0x58, 0x92, 0xf3, 0x44, 0x88, -0xc0, 0x18, 0x02, 0x78, 0x21, 0x68, 0x45, 0x0e, -0xa0, 0xd7, 0x7b, 0x8b, 0x6c, 0xe4, 0x52, 0xda, -0x9a, 0x2e, 0xb0, 0x07, 0x81, 0xab, 0xb4, 0x35, -0x09, 0x30, 0x26, 0x6f, 0xcb, 0x25, 0xd2, 0x9d, -0x5d, 0x35, 0x7b, 0x64, 0xcd, 0x06, 0xb4, 0x3c, -0x8d, 0x58, 0xb7, 0xb0, 0x05, 0xdc, 0x0a, 0xeb, -0x35, 0x07, 0xc8, 0xe8, 0x0a, 0x58, 0x03, 0x6a, -0x60, 0xd2, 0x88, 0xa5, 0x6c, 0xa0, 0x53, 0xfb, -0xa7, 0x4c, 0xf8, 0x06, 0xec, 0x31, 0x92, 0xc3, -0xb1, 0x32, 0xa1, 0x03, 0xaa, 0x86, 0x9c, 0x8a, -0x95, 0x81, 0x0e, 0x98, 0x35, 0xea, 0x53, 0xd6, -0x15, 0x0b, 0x10, 0x73, 0x11, 0x30, 0x6b, 0xad, -0xbd, 0x50, 0xab, 0xcb, 0xb5, 0x02, 0x80, 0x1d, -0x9a, 0x8a, 0x9e, 0x85, 0x1a, 0x79, 0x40, 0xd7, -0xd4, 0x2e, 0xeb, 0x8a, 0x05, 0xd0, 0x31, 0xe6, -0xcd, 0x67, 0x8d, 0x58, 0x03, 0x07, 0x8c, 0x05, -0xaa, 0xb0, 0x46, 0xfa, 0x06, 0xdc, 0x6c, 0x24, -0x53, 0x55, 0x18, 0x9c, 0x34, 0xae, 0x47, 0xa0, -0xdc, 0x01, 0xd4, 0x7c, 0xc6, 0xd7, 0xc4, 0x76, -0xf4, 0xf5, 0x18, 0x5b, 0x53, 0xc9, 0x97, 0x63, -0x3b, 0x72, 0xfb, 0x8c, 0x6f, 0xa7, 0xe6, 0x61, -0x70, 0xda, 0xf8, 0xae, 0x7d, 0xc5, 0x02, 0xb4, -0x3e, 0x59, 0x23, 0xec, 0x80, 0xa7, 0x8d, 0x1b, -0x53, 0x55, 0x2f, 0x4b, 0x36, 0x10, 0x30, 0xe8, -0x31, 0xe6, 0xd8, 0x57, 0x2c, 0x60, 0xd6, 0x50, -0xe3, 0xd1, 0x4d, 0xd0, 0xfd, 0xbb, 0xc1, 0xcb, -0x36, 0x48, 0xa9, 0x18, 0x24, 0x8c, 0x4e, 0x74, -0x7f, 0xd0, 0x60, 0x03, 0xb3, 0x86, 0xda, 0x3f, -0x82, 0x06, 0xba, 0xd0, 0x13, 0xe3, 0xe9, 0x9f, -0xd8, 0x18, 0x02, 0x3d, 0xda, 0x1c, 0x5b, 0x11, -0x59, 0x00, 0x52, 0xbb, 0xad, 0x4c, 0xb8, 0x0d, -0x76, 0x1b, 0xb3, 0x53, 0xc9, 0x9d, 0x1e, 0x00, -0xb7, 0xe5, 0xba, 0x0d, 0x4b, 0xff, 0x34, 0xd8, -0x80, 0x1a, 0xbf, 0x5a, 0x4f, 0xa6, 0x85, 0x0d, -0x60, 0x13, 0x90, 0x61, 0xac, 0x57, 0xe8, 0x01, -0x5b, 0x41, 0xd2, 0xf4, 0x80, 0x90, 0x76, 0x00, -0x99, 0xcf, 0x6a, 0xb4, 0x7f, 0x46, 0x94, 0x16, -0xb1, 0x12, 0xed, 0x1f, 0x03, 0xa6, 0xd0, 0x23, -0x28, 0x78, 0xa0, 0x1f, 0xed, 0x1f, 0x0b, 0x40, -0x6a, 0xbd, 0xeb, 0x64, 0x63, 0x3f, 0xda, 0x3f, -0x95, 0x78, 0x77, 0xe5, 0x14, 0x3b, 0xc0, 0xcb, -0x03, 0x86, 0x0d, 0xe8, 0xf1, 0x9d, 0x0b, 0xb2, -0xa3, 0x9b, 0xdb, 0x6f, 0x55, 0x06, 0x91, 0xb6, -0xc9, 0x65, 0x35, 0xa4, 0x7f, 0x10, 0x18, 0x40, -0x6a, 0x47, 0x41, 0xfa, 0x27, 0x0b, 0x2d, 0x00, -0x28, 0xf9, 0x54, 0x0a, 0xd9, 0x89, 0xcd, 0xe9, -0xa4, 0x22, 0x77, 0x0a, 0x59, 0x13, 0x81, 0x44, -0x2c, 0x0c, 0x74, 0x4a, 0x3e, 0x40, 0x37, 0x54, -0x55, 0x96, 0x05, 0xc4, 0x38, 0x33, 0x58, 0xdb, -0x58, 0x2a, 0xd0, 0x06, 0x80, 0x00, 0x32, 0x9f, -0x8c, 0xd8, 0x08, 0xe1, 0x88, 0xd6, 0x35, 0x2c, -0x8a, 0x00, 0xc2, 0xb4, 0xa6, 0x28, 0x16, 0xd0, -0x10, 0x90, 0xca, 0x2c, 0x90, 0x50, 0xa8, 0xf9, -0xac, 0xd6, 0xcb, 0x2d, 0x25, 0x2f, 0x25, 0x61, -0xcc, 0xd6, 0xf6, 0xf3, 0xa0, 0xab, 0x7f, 0x08, -0x20, 0xeb, 0x1d, 0xd4, 0xe7, 0x58, 0xfa, 0x47, -0x1a, 0x84, 0x12, 0x06, 0xe8, 0x74, 0x30, 0x25, -0x43, 0xee, 0x01, 0x73, 0x90, 0xda, 0xa9, 0xd1, -0x80, 0x0d, 0xe8, 0xf9, 0xcb, 0x69, 0x21, 0x01, -0x3a, 0xd1, 0x5f, 0xb6, 0x80, 0x84, 0x9e, 0x27, -0x39, 0x0d, 0xf0, 0x83, 0xa5, 0x9a, 0x40, 0x13, -0x1c, 0x40, 0x0d, 0xb7, 0x95, 0x8c, 0x8e, 0xf4, -0xcf, 0xb5, 0x30, 0x61, 0x48, 0xdd, 0x60, 0x2f, -0xb8, 0x0e, 0x54, 0x00, 0x51, 0x07, 0x27, 0xf5, -0x66, 0x0c, 0xb0, 0x46, 0xa2, 0xc6, 0xcb, 0xd7, -0xea, 0x1b, 0xb2, 0x75, 0xf9, 0xbd, 0x47, 0x05, -0x04, 0x3a, 0x36, 0xd5, 0xd7, 0x23, 0xd0, 0xb1, -0x21, 0xbb, 0xa9, 0x5e, 0x1e, 0xcf, 0x35, 0x60, -0xa0, 0xca, 0xf4, 0xf8, 0x45, 0xb1, 0x3b, 0x46, -0xbf, 0x95, 0xde, 0xb2, 0x3b, 0xf6, 0x23, 0x0b, -0xcc, 0xde, 0x97, 0xb4, 0xc1, 0x96, 0x07, 0x92, -0xff, 0x90, 0x73, 0x80, 0x6f, 0xfe, 0x36, 0xe3, -0xc7, 0xf3, 0xb1, 0xc8, 0xa6, 0x8e, 0xe6, 0xd3, -0x6c, 0xcf, 0x27, 0x2f, 0x3b, 0xf3, 0xf1, 0x8d, -0xdf, 0x66, 0xd4, 0xa4, 0xe4, 0x35, 0xe8, 0xf7, -0x5a, 0x85, 0x0f, 0xb2, 0x32, 0xad, 0x66, 0xb7, -0x7c, 0x7b, 0x4d, 0x6a, 0x60, 0x4d, 0x43, 0xcd, -0xc0, 0x2a, 0x07, 0xd0, 0xe3, 0xe5, 0x8e, 0x6c, -0xcd, 0x66, 0xf9, 0x56, 0x74, 0x98, 0xc4, 0x10, -0x88, 0x25, 0x85, 0xd8, 0xaa, 0xd5, 0x59, 0xb0, -0x59, 0x4e, 0x82, 0xa4, 0xbe, 0x3a, 0xab, 0x6e, -0x4e, 0x24, 0x85, 0x24, 0xbd, 0x1f, 0x94, 0x06, -0x51, 0xd1, 0xfb, 0x54, 0x6d, 0x50, 0x69, 0xc8, -0x28, 0xd9, 0xbe, 0x7a, 0x04, 0x84, 0x4c, 0x0a, -0x83, 0x98, 0x72, 0xdb, 0x2d, 0xf6, 0x15, 0x7a, -0x3a, 0x95, 0x40, 0x84, 0x60, 0x04, 0xb4, 0xa0, -0x8d, 0x27, 0x42, 0x7d, 0x44, 0x6d, 0x91, 0x11, -0xc8, 0xdb, 0xc0, 0x14, 0x87, 0xf5, 0x03, 0xea, -0x35, 0x34, 0xdb, 0x06, 0x09, 0xb1, 0x0e, 0x0c, -0x98, 0x0d, 0xe9, 0xd4, 0x06, 0x69, 0x13, 0x38, -0x39, 0x96, 0x4c, 0x57, 0x21, 0xa0, 0x6e, 0x36, -0xaf, 0x47, 0xc0, 0xac, 0x53, 0x4f, 0x9a, 0xd7, -0xb7, 0x57, 0xd1, 0xf3, 0xa9, 0x10, 0xee, 0xea, -0xe8, 0xc9, 0x6f, 0xd5, 0xe6, 0x61, 0x1a, 0x30, -0x17, 0x7e, 0xdb, 0x06, 0xfb, 0xe0, 0x77, 0x11, -0x1f, 0x58, 0x73, 0x97, 0x70, 0x1a, 0x81, 0xbf, -0xa1, 0xe5, 0x1f, 0x5f, 0x97, 0x79, 0x3d, 0xff, -0xd4, 0x81, 0xc5, 0x15, 0x5f, 0xc1, 0xe0, 0xc9, -0x03, 0x8b, 0xd7, 0xc6, 0x6f, 0x59, 0x77, 0x62, -0xcf, 0x53, 0xcd, 0xff, 0x54, 0x11, 0xcf, 0xac, -0x3b, 0x89, 0xc1, 0x1f, 0xd0, 0xf3, 0x59, 0x76, -0xef, 0xcd, 0x97, 0xff, 0xe3, 0xc5, 0xf3, 0xef, -0x5f, 0x5c, 0x89, 0xc1, 0x33, 0xe7, 0x3f, 0xb8, -0xb8, 0xec, 0xd2, 0xc6, 0x33, 0x0f, 0x5d, 0x3e, -0xfb, 0xf1, 0xc5, 0x65, 0xf7, 0x6c, 0xbc, 0x8c, -0xc1, 0xc7, 0xe0, 0x0a, 0x3e, 0x2b, 0xfe, 0xb6, -0x62, 0x61, 0x66, 0x6d, 0x7e, 0xcf, 0xb6, 0x05, -0x17, 0xab, 0x7f, 0xd2, 0x79, 0x39, 0xff, 0xeb, -0x6d, 0x2b, 0xfe, 0x7e, 0xed, 0xbd, 0xaf, 0xad, -0xcd, 0x3f, 0xf2, 0xf1, 0xca, 0xcb, 0x6b, 0x17, -0xbd, 0xb6, 0xf6, 0xfc, 0x23, 0x67, 0xe9, 0xf1, -0x2b, 0xef, 0xb9, 0xf9, 0xcc, 0x43, 0xcf, 0x9c, -0x7d, 0x9f, 0x4c, 0xc3, 0x9e, 0xd8, 0xd9, 0x0f, -0xd0, 0xf8, 0x9b, 0xcf, 0x58, 0x33, 0xa4, 0xc7, -0x37, 0xcd, 0xef, 0x3a, 0xb3, 0xe7, 0xc6, 0xb3, -0x0f, 0xdc, 0xb6, 0x0c, 0xff, 0xc7, 0x43, 0x67, -0xdf, 0x7f, 0x1b, 0x81, 0xb7, 0xea, 0x9e, 0x19, -0x78, 0xff, 0x62, 0x53, 0xca, 0x02, 0xef, 0x7d, -0xcf, 0x37, 0xa1, 0xbe, 0x5e, 0x7d, 0x9f, 0xba, -0x48, 0xbd, 0x6f, 0xb4, 0x11, 0x01, 0x70, 0xa3, -0x5c, 0x71, 0x54, 0xec, 0xd5, 0xe7, 0xaa, 0x8b, -0xea, 0x2d, 0x80, 0xbe, 0x9a, 0x5b, 0x41, 0xcb, -0x53, 0x1e, 0xdc, 0x01, 0x10, 0x09, 0xac, 0x05, -0xe3, 0x83, 0x98, 0x0d, 0x6e, 0xb2, 0xf8, 0x21, -0x38, 0xed, 0x23, 0x8a, 0xf4, 0x78, 0x87, 0x1f, -0x5e, 0x05, 0xfa, 0x73, 0x18, 0xcc, 0x56, 0xe4, -0x9d, 0x2e, 0x3f, 0xf4, 0x00, 0xf4, 0x4d, 0xc8, -0x26, 0x69, 0xb9, 0x20, 0x7f, 0x53, 0x69, 0x40, -0x3e, 0xca, 0xaa, 0xbb, 0x84, 0x04, 0xec, 0x8c, -0xc3, 0x89, 0x6d, 0xed, 0xc2, 0xdc, 0x81, 0xaf, -0x69, 0x35, 0xc7, 0x64, 0xbc, 0x31, 0xbe, 0x76, -0x53, 0xcd, 0x84, 0x0d, 0xb4, 0x1a, 0xd3, 0x7f, -0x7f, 0x55, 0x29, 0x43, 0xfc, 0x70, 0x10, 0xb1, -0x2e, 0xef, 0xfe, 0x0a, 0x06, 0x7d, 0xe4, 0x2f, -0x92, 0x4f, 0x15, 0xa2, 0x85, 0x88, 0x1f, 0x1a, -0x00, 0x3d, 0x56, 0x82, 0x02, 0x11, 0x1b, 0x1c, -0x96, 0x9b, 0xd1, 0x95, 0x4c, 0xaf, 0xba, 0x0f, -0x33, 0x46, 0x98, 0x31, 0x7c, 0xef, 0x68, 0x5f, -0x91, 0xd7, 0x0d, 0xce, 0x7e, 0x6c, 0xf5, 0x11, -0x75, 0xc9, 0xc0, 0xb7, 0x72, 0xb5, 0x23, 0xab, -0x1e, 0xab, 0xb9, 0x46, 0xee, 0x32, 0x6f, 0xb1, -0xc1, 0x3a, 0xfb, 0x0a, 0x35, 0x7b, 0xb3, 0x0a, -0xd4, 0x81, 0xfa, 0x89, 0xd8, 0xc3, 0x60, 0x12, -0x4a, 0xa0, 0x1e, 0x71, 0x1f, 0xfb, 0xb4, 0x31, -0x63, 0x36, 0xa8, 0xc7, 0x40, 0x27, 0xff, 0x01, -0xbd, 0xaa, 0xaa, 0x2a, 0x7a, 0x97, 0xed, 0x06, -0xf8, 0x29, 0xc2, 0x6f, 0xa2, 0x82, 0x0a, 0x56, -0xa1, 0x7f, 0xc8, 0x59, 0x61, 0xb6, 0x6a, 0xbd, -0x34, 0xeb, 0x82, 0xe7, 0xbe, 0x46, 0xf7, 0xb7, -0x5f, 0x57, 0x35, 0xd9, 0xff, 0xa6, 0x2a, 0xfb, -0x5f, 0x39, 0xe9, 0xf1, 0xb2, 0x61, 0x2b, 0x49, -0xac, 0xe8, 0x53, 0x48, 0xe3, 0x23, 0xfd, 0x69, -0x08, 0xc3, 0x16, 0x31, 0x71, 0xbe, 0xaa, 0x81, -0xde, 0x78, 0x55, 0xd0, 0x45, 0x03, 0x0c, 0x83, -0xff, 0x6d, 0xdf, 0x7c, 0x5e, 0xa4, 0xb8, 0x82, -0x38, 0x5e, 0x6f, 0xe6, 0xed, 0xa4, 0xc5, 0xd9, -0xa5, 0x7b, 0x33, 0x0b, 0xad, 0x2c, 0x32, 0xa3, -0xab, 0x1e, 0xbc, 0xf4, 0x2c, 0x0a, 0x8a, 0x07, -0x9f, 0xbb, 0x33, 0xeb, 0xac, 0xb0, 0xda, 0x44, -0x54, 0x08, 0x39, 0xb4, 0xc1, 0x8b, 0xb7, 0xec, -0xcd, 0x4b, 0xe2, 0x9b, 0xcd, 0x45, 0xc4, 0xc3, -0xa2, 0x22, 0x0a, 0x82, 0x7b, 0xd0, 0xdc, 0x84, -0xfc, 0x09, 0x33, 0x0b, 0x19, 0x48, 0x4e, 0x42, -0x62, 0x6e, 0x21, 0x1b, 0xc8, 0xc5, 0xbb, 0x10, -0x72, 0x90, 0xb5, 0xea, 0xbd, 0xfe, 0xf1, 0x7a, -0xc7, 0x08, 0x7a, 0x88, 0x20, 0xf5, 0xbd, 0xec, -0x97, 0xda, 0x37, 0x4d, 0x75, 0xbf, 0x9a, 0xea, -0x4f, 0xf5, 0xcc, 0x1c, 0xa2, 0x9e, 0x65, 0xcd, -0x2e, 0x32, 0x61, 0x66, 0x4c, 0x64, 0x2d, 0x4f, -0x5f, 0x75, 0x17, 0x2c, 0x1f, 0xf6, 0x88, 0x0f, -0x0d, 0x28, 0xfa, 0x9b, 0x68, 0x6e, 0x67, 0xc6, -0xf2, 0x61, 0x7e, 0xbf, 0xa0, 0x33, 0x1f, 0xe7, -0xc3, 0xf9, 0xd4, 0xa8, 0x3c, 0xa2, 0xf2, 0xf5, -0x15, 0xb0, 0xd8, 0x89, 0xd8, 0x96, 0x9b, 0xf9, -0x41, 0x39, 0x32, 0x28, 0xe5, 0x63, 0xf8, 0xad, -0x0e, 0x6b, 0xd6, 0x78, 0x01, 0x9a, 0xe1, 0x57, -0xa9, 0xb1, 0x11, 0x5d, 0xe4, 0x23, 0xc6, 0xf9, -0x70, 0xdc, 0x14, 0xf5, 0x10, 0x8b, 0xb7, 0x1e, -0x1f, 0x4f, 0xb3, 0x74, 0x7c, 0x27, 0x1f, 0x85, -0x1b, 0xd9, 0x80, 0x2e, 0xa2, 0x7f, 0x6a, 0x02, -0x34, 0xb8, 0x5f, 0x64, 0xe6, 0xd2, 0xc8, 0x42, -0x9e, 0x4f, 0x4f, 0x11, 0x0d, 0xce, 0x26, 0x9f, -0x85, 0xa2, 0x06, 0xab, 0x86, 0x0f, 0x05, 0x45, -0xca, 0xa6, 0x28, 0x9f, 0x1e, 0x7d, 0xa5, 0x44, -0x67, 0xf3, 0x86, 0xc6, 0x7a, 0x41, 0x3e, 0x14, -0xf4, 0x95, 0x3b, 0x6b, 0xb4, 0x31, 0xe0, 0xe4, -0x73, 0x09, 0x69, 0x50, 0x27, 0xad, 0x18, 0x2e, -0x21, 0x28, 0xbe, 0x30, 0x58, 0x98, 0xf3, 0x61, -0x66, 0x54, 0x71, 0x7f, 0x17, 0x4b, 0x72, 0xb5, -0x3f, 0x9b, 0x9c, 0x09, 0x83, 0xd1, 0x7f, 0x1b, -0xe7, 0xfa, 0x23, 0x76, 0xae, 0xea, 0x47, 0xc9, -0x61, 0x4b, 0x83, 0x64, 0x76, 0x8d, 0xf0, 0x44, -0x66, 0x8d, 0xa9, 0xa4, 0x91, 0x62, 0x7d, 0x8c, -0x7c, 0xd8, 0x36, 0x58, 0x28, 0x46, 0xa9, 0x99, -0x19, 0x89, 0xd5, 0xfe, 0x6d, 0x34, 0x17, 0x33, -0x62, 0x9c, 0xd9, 0x74, 0xea, 0x67, 0x1a, 0xc7, -0x4c, 0xe4, 0x43, 0x25, 0xd7, 0x45, 0xa2, 0x97, -0xed, 0x58, 0x3a, 0x87, 0xdb, 0x34, 0xdd, 0xc3, -0x08, 0xf5, 0x1f, 0xdf, 0xed, 0x3f, 0x0a, 0xcb, -0xf5, 0x8a, 0x0e, 0x93, 0xda, 0x03, 0xf8, 0x01, -0xcd, 0xde, 0xa4, 0x16, 0x0a, 0xe4, 0x43, 0xed, -0x65, 0x26, 0x24, 0x53, 0xac, 0x87, 0x6e, 0x22, -0xaf, 0xb7, 0xa6, 0xbc, 0xc5, 0x35, 0xd8, 0x90, -0xc7, 0xc5, 0x3e, 0x1c, 0xd5, 0x82, 0x2d, 0x79, -0x1d, 0xcd, 0x19, 0xc7, 0x38, 0xf5, 0x2c, 0xbe, -0x40, 0x1a, 0xf4, 0xa2, 0x0a, 0xce, 0x0b, 0x58, -0x2d, 0x7b, 0xb0, 0x5a, 0xb0, 0xed, 0x5c, 0x25, -0x2c, 0xec, 0x89, 0x3b, 0x19, 0x28, 0x3a, 0xf9, -0x60, 0xfd, 0x34, 0x4d, 0x91, 0xc0, 0x2d, 0xa2, -0xc1, 0x8d, 0xa5, 0x12, 0x1f, 0xa6, 0xc6, 0xad, -0x9f, 0x05, 0xa9, 0x86, 0x8d, 0x66, 0xd7, 0xf3, -0x2b, 0x32, 0xee, 0xfb, 0x68, 0x82, 0x8a, 0x54, -0xda, 0x6f, 0x76, 0x8c, 0xe9, 0x1b, 0x03, 0xce, -0xf5, 0xc1, 0xf7, 0xcb, 0xa0, 0x11, 0x4d, 0x78, -0xf0, 0x4b, 0x13, 0x06, 0x8d, 0x1f, 0x45, 0x5d, -0x2c, 0x42, 0xac, 0x31, 0x82, 0xa6, 0x19, 0x0f, -0x8c, 0x51, 0xce, 0xf5, 0xf1, 0xa8, 0xff, 0x10, -0x1f, 0x82, 0xc2, 0x69, 0x14, 0x70, 0x3e, 0xf5, -0xe4, 0x82, 0xb0, 0xa0, 0xa8, 0xc6, 0xf8, 0x10, -0xf3, 0xd9, 0x3f, 0x4d, 0x7c, 0x88, 0xcd, 0x60, -0x3f, 0x32, 0xd9, 0x7c, 0x0b, 0xf9, 0x10, 0x52, -0x3e, 0xcc, 0x41, 0xd1, 0xc9, 0x47, 0xec, 0xe8, -0x3f, 0xa5, 0xb6, 0x93, 0x1b, 0xe7, 0xfa, 0xa8, -0xca, 0x55, 0x78, 0x08, 0x35, 0xfa, 0xe2, 0x40, -0x32, 0xf1, 0x30, 0x6b, 0x3b, 0x1e, 0x99, 0xf5, -0xbc, 0x23, 0x39, 0xf9, 0x24, 0xb8, 0x4d, 0x53, -0xb8, 0x4d, 0x9a, 0xf6, 0x0b, 0x37, 0x4e, 0xfb, -0x5b, 0x70, 0x5c, 0xdc, 0xc2, 0x48, 0xbc, 0x95, -0xfe, 0xcb, 0xe9, 0x3f, 0x31, 0x9e, 0xe0, 0x09, -0x35, 0xf5, 0x4d, 0xf5, 0x91, 0x7e, 0xba, 0x11, -0xa9, 0xba, 0x5f, 0x95, 0x30, 0x84, 0x48, 0x79, -0x64, 0x7e, 0x82, 0x34, 0xe2, 0xd4, 0x33, 0xbe, -0x53, 0x8f, 0xa9, 0xc9, 0xb8, 0x1a, 0xcb, 0xfb, -0xd0, 0x3e, 0x3d, 0xa9, 0xaa, 0x0d, 0x5c, 0xd6, -0x06, 0x2f, 0x46, 0xf3, 0x02, 0xda, 0xaa, 0x4e, -0x66, 0xd3, 0xc9, 0x67, 0x51, 0x5e, 0x19, 0x86, -0xd1, 0x52, 0x08, 0xdf, 0xcb, 0x64, 0x80, 0xa6, -0x1e, 0xa0, 0x19, 0x1a, 0x73, 0x37, 0x33, 0x6e, -0xff, 0x51, 0xc4, 0x87, 0x83, 0x0a, 0x3d, 0xa7, -0xdc, 0xf9, 0xd4, 0xd0, 0x89, 0x14, 0xd7, 0xa7, -0xd7, 0x49, 0xf6, 0x84, 0xb5, 0x25, 0xa1, 0x75, -0xe7, 0x6b, 0x1f, 0x41, 0xb1, 0x15, 0xdc, 0xcc, -0xb0, 0xf0, 0x81, 0x1c, 0xe3, 0x43, 0xec, 0x3f, -0x9d, 0x8b, 0xc1, 0x8c, 0xec, 0x9e, 0xf6, 0xfd, -0x4e, 0xec, 0x37, 0x64, 0x57, 0x04, 0xca, 0x1a, -0x08, 0x3a, 0x32, 0x0e, 0x6c, 0xc4, 0xa9, 0x1f, -0x2a, 0xc0, 0xfc, 0xb9, 0x83, 0xbf, 0x36, 0x81, -0x25, 0x09, 0xb6, 0x36, 0x45, 0x6e, 0x8a, 0x7a, -0x00, 0x69, 0xb1, 0x50, 0x95, 0xf9, 0xb0, 0x9f, -0x19, 0x1b, 0x71, 0xeb, 0x67, 0xa5, 0x7a, 0x41, -0xdd, 0x7b, 0xde, 0x3a, 0xaa, 0x57, 0x2a, 0x55, -0xf5, 0xdb, 0xf3, 0x83, 0x47, 0x27, 0x57, 0xc4, -0x05, 0x34, 0xc7, 0xd0, 0x54, 0x53, 0xe3, 0xe4, -0x23, 0x90, 0x07, 0x90, 0x0f, 0xf1, 0xa6, 0xff, -0xf3, 0x1c, 0xdd, 0xfd, 0x2f, 0x37, 0x0b, 0x0c, -0x78, 0x2b, 0x0f, 0x1c, 0xc9, 0xf8, 0x70, 0xf7, -0xd9, 0xb3, 0xc4, 0x87, 0xcf, 0xae, 0x1d, 0x31, -0x7c, 0xf8, 0xc4, 0xf0, 0xe1, 0xef, 0x64, 0x96, -0x9d, 0xe5, 0x70, 0x2a, 0xe3, 0xc3, 0x93, 0x37, -0xce, 0x13, 0x1f, 0x6e, 0xbf, 0x3e, 0x65, 0xc0, -0xec, 0x95, 0xe5, 0xc3, 0x5f, 0xb7, 0x5f, 0x6d, -0x97, 0x78, 0xec, 0x7d, 0x65, 0xb0, 0xf0, 0xe5, -0x3a, 0x1e, 0xf6, 0xdf, 0x14, 0x14, 0xe7, 0x1e, -0x2f, 0x93, 0x31, 0x7c, 0x68, 0x22, 0xdf, 0xba, -0xeb, 0x0d, 0x16, 0xfe, 0xf3, 0x37, 0xa5, 0x91, -0x81, 0xe2, 0x0d, 0x63, 0x2c, 0x1f, 0x52, 0xa4, -0xc4, 0xab, 0x27, 0x33, 0x3e, 0x3c, 0xb0, 0xef, -0xdc, 0x9f, 0x77, 0xda, 0xb4, 0xfe, 0xbb, 0x73, -0xa3, 0xcf, 0xe9, 0x85, 0x39, 0x6a, 0x7e, 0x78, -0xf6, 0x11, 0x8e, 0x58, 0xf8, 0xb6, 0xc6, 0xbf, -0x8b, 0xf5, 0x0f, 0x3f, 0x0a, 0x8b, 0xc5, 0x62, -0xb1, 0x58, 0x2c, 0x16, 0x8b, 0xc5, 0xfa, 0xd4, -0x65, 0x66, 0x07, 0xc9, 0xb3, 0x03, 0x8b, 0xc5, -0x62, 0xb1, 0x58, 0x2c, 0x16, 0x8b, 0xc5, 0x7a, -0xb7, 0xcc, 0xec, 0x50, 0xe3, 0xd9, 0x81, 0xc5, -0x62, 0xb1, 0x58, 0x2c, 0x16, 0x8b, 0xc5, 0x62, -0xbd, 0x5b, 0x66, 0x76, 0xf0, 0xcc, 0xec, 0xf0, -0xb1, 0x53, 0x61, 0xb1, 0x58, 0x2c, 0x16, 0x8b, -0xc5, 0x62, 0xb1, 0x58, 0xff, 0xa3, 0x22, 0xfa, -0x7d, 0x1c, 0x3c, 0xfb, 0x23, 0x02, 0x4d, 0xbf, -0x5a, 0xa9, 0x46, 0xa0, 0xde, 0xfb, 0xf3, 0x84, -0xf4, 0xb5, 0x13, 0x11, 0x6c, 0x88, 0xe2, 0x98, -0x7f, 0x7d, 0xb9, 0x73, 0xdd, 0x1b, 0x3b, 0x1c, -0x29, 0xc2, 0xf0, 0x33, 0x01, 0x00, diff --git a/board/esd/plu405/plu405.c b/board/esd/plu405/plu405.c deleted file mode 100644 index 03bf9c8fe5..0000000000 --- a/board/esd/plu405/plu405.c +++ /dev/null @@ -1,345 +0,0 @@ -/* - * (C) Copyright 2001-2003 - * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <common.h> -#include <asm/processor.h> -#include <asm/io.h> -#include <command.h> -#include <malloc.h> -#include <sja1000.h> - -#undef FPGA_DEBUG - -DECLARE_GLOBAL_DATA_PTR; - -extern void lxt971_no_sleep(void); - -/* 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" - -/* - * generate a short spike on the CAN tx line - * to bring the couplers in sync - */ -void init_coupler(u32 addr) -{ - struct sja1000_basic_s *ctrl = (struct sja1000_basic_s *)addr; - - /* reset */ - out_8(&ctrl->cr, CR_RR); - - /* dominant */ - out_8(&ctrl->btr0, 0x00); /* btr setup is required */ - out_8(&ctrl->btr1, 0x14); /* we use 1Mbit/s */ - out_8(&ctrl->oc, OC_TP1 | OC_TN1 | OC_POL1 | - OC_TP0 | OC_TN0 | OC_POL0 | OC_MODE1); - out_8(&ctrl->cr, 0x00); - - /* delay */ - in_8(&ctrl->cr); - in_8(&ctrl->cr); - in_8(&ctrl->cr); - in_8(&ctrl->cr); - - /* reset */ - out_8(&ctrl->cr, CR_RR); -} - -int board_early_init_f(void) -{ - /* - * 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(UIC0SR, 0xFFFFFFFF); /* clear all ints */ - mtdcr(UIC0ER, 0x00000000); /* disable all ints */ - mtdcr(UIC0CR, 0x00000000); /* set all to be non-critical*/ - mtdcr(UIC0PR, 0xFFFFFF99); /* set int polarities */ - mtdcr(UIC0TR, 0x10000000); /* set int trigger levels */ - mtdcr(UIC0VCR, 0x00000001); /* set vect base=0,INT0 highest prio */ - mtdcr(UIC0SR, 0xFFFFFFFF); /* clear all ints */ - - /* - * EBC Configuration Register: set ready timeout to - * 512 ebc-clks -> ca. 15 us - */ - mtebc(EBC0_CFG, 0xa8400000); /* ebc always driven */ - - return 0; -} - -int misc_init_r(void) -{ - unsigned char *dst; - unsigned char fctr; - ulong len = sizeof(fpgadata); - int status; - int index; - int i; - - /* adjust flash start and offset */ - gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize; - gd->bd->bi_flashoffset = 0; - - dst = malloc(CONFIG_SYS_FPGA_MAX_SIZE); - if (gunzip(dst, CONFIG_SYS_FPGA_MAX_SIZE, - (uchar *)fpgadata, &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 */ - - /* - * Reset external DUARTs - */ - out_be32((void*)GPIO0_OR, - in_be32((void*)GPIO0_OR) | CONFIG_SYS_DUART_RST); - udelay(10); - out_be32((void*)GPIO0_OR, - in_be32((void*)GPIO0_OR) & ~CONFIG_SYS_DUART_RST); - udelay(1000); - - /* - * Set NAND-FLASH GPIO signals to default - */ - out_be32((void*)GPIO0_OR, - in_be32((void*)GPIO0_OR) & - ~(CONFIG_SYS_NAND_CLE | CONFIG_SYS_NAND_ALE)); - out_be32((void*)GPIO0_OR, - in_be32((void*)GPIO0_OR) | CONFIG_SYS_NAND_CE); - - /* - * Setup EEPROM write protection - */ - out_be32((void*)GPIO0_OR, - in_be32((void*)GPIO0_OR) | CONFIG_SYS_EEPROM_WP); - out_be32((void*)GPIO0_TCR, - in_be32((void*)GPIO0_TCR) | CONFIG_SYS_EEPROM_WP); - - /* - * Enable interrupts in exar duart mcr[3] - */ - out_8((void *)DUART0_BA + 4, 0x08); - out_8((void *)DUART1_BA + 4, 0x08); - - /* - * Enable auto RS485 mode in 2nd external uart - */ - out_8((void *)DUART1_BA + 3, 0xbf); /* write LCR */ - fctr = in_8((void *)DUART1_BA + 1); /* read FCTR */ - fctr |= 0x08; /* enable RS485 mode */ - out_8((void *)DUART1_BA + 1, fctr); /* write FCTR */ - out_8((void *)DUART1_BA + 3, 0); /* write LCR */ - - /* - * Init magnetic couplers - */ - if (!getenv("noinitcoupler")) { - init_coupler(CAN0_BA); - init_coupler(CAN1_BA); - } - return 0; -} - -/* - * Check Board Identity: - */ -int checkboard(void) -{ - char str[64]; - int i = getenv_f("serial#", str, sizeof(str)); - - puts("Board: "); - - if (i == -1) - puts("### No HW ID - assuming PLU405"); - else - puts(str); - - putc('\n'); - return 0; -} - -#ifdef CONFIG_IDE_RESET -#define FPGA_CTRL (CONFIG_SYS_FPGA_BASE_ADDR + CONFIG_SYS_FPGA_CTRL) -void ide_set_reset(int on) -{ - /* - * Assert or deassert CompactFlash Reset Pin - */ - if (on) { /* assert RESET */ - out_be16((void *)FPGA_CTRL, - in_be16((void *)FPGA_CTRL) & - ~CONFIG_SYS_FPGA_CTRL_CF_RESET); - } else { /* release RESET */ - out_be16((void *)FPGA_CTRL, - in_be16((void *)FPGA_CTRL) | - CONFIG_SYS_FPGA_CTRL_CF_RESET); - } -} -#endif /* CONFIG_IDE_RESET */ - -void reset_phy(void) -{ -#ifdef CONFIG_LXT971_NO_SLEEP - - /* - * Disable sleep mode in LXT971 - */ - lxt971_no_sleep(); -#endif -} - -#if defined(CONFIG_SYS_EEPROM_WREN) -/* Input: <dev_addr> I2C address of EEPROM device to enable. - * <state> -1: deliver current state - * 0: disable write - * 1: enable write - * Returns: -1: wrong device address - * 0: dis-/en- able done - * 0/1: current state if <state> was -1. - */ -int eeprom_write_enable(unsigned dev_addr, int state) -{ - if (CONFIG_SYS_I2C_EEPROM_ADDR != dev_addr) { - return -1; - } else { - switch (state) { - case 1: - /* Enable write access, clear bit GPIO0. */ - out_be32((void*)GPIO0_OR, - in_be32((void*)GPIO0_OR) & - ~CONFIG_SYS_EEPROM_WP); - state = 0; - break; - case 0: - /* Disable write access, set bit GPIO0. */ - out_be32((void*)GPIO0_OR, - in_be32((void*)GPIO0_OR) | - CONFIG_SYS_EEPROM_WP); - state = 0; - break; - default: - /* Read current status back. */ - state = ((in_be32((void*)GPIO0_OR) & - CONFIG_SYS_EEPROM_WP) == 0); - break; - } - } - return state; -} - -int do_eep_wren(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - int query = argc == 1; - int state = 0; - - if (query) { - /* Query write access state. */ - state = eeprom_write_enable(CONFIG_SYS_I2C_EEPROM_ADDR, -1); - if (state < 0) { - puts("Query of write access state failed.\n"); - } else { - printf("Write access for device 0x%0x is %sabled.\n", - CONFIG_SYS_I2C_EEPROM_ADDR, - state ? "en" : "dis"); - state = 0; - } - } else { - if (argv[1][0] == '0') { - /* Disable write access. */ - state = eeprom_write_enable(CONFIG_SYS_I2C_EEPROM_ADDR, - 0); - } else { - /* Enable write access. */ - state = eeprom_write_enable(CONFIG_SYS_I2C_EEPROM_ADDR, - 1); - } - if (state < 0) - puts("Setup of write access state failed.\n"); - } - - return state; -} - -U_BOOT_CMD(eepwren, 2, 0, do_eep_wren, - "Enable / disable / query EEPROM write access", - "" -); -#endif /* #if defined(CONFIG_SYS_EEPROM_WREN) */ diff --git a/board/esd/pmc405de/Kconfig b/board/esd/pmc405de/Kconfig deleted file mode 100644 index 4b05787a49..0000000000 --- a/board/esd/pmc405de/Kconfig +++ /dev/null @@ -1,12 +0,0 @@ -if TARGET_PMC405DE - -config SYS_BOARD - default "pmc405de" - -config SYS_VENDOR - default "esd" - -config SYS_CONFIG_NAME - default "PMC405DE" - -endif diff --git a/board/esd/pmc405de/MAINTAINERS b/board/esd/pmc405de/MAINTAINERS deleted file mode 100644 index a891e23414..0000000000 --- a/board/esd/pmc405de/MAINTAINERS +++ /dev/null @@ -1,6 +0,0 @@ -PMC405DE BOARD -M: Matthias Fuchs <matthias.fuchs@esd-electronics.com> -S: Maintained -F: board/esd/pmc405de/ -F: include/configs/PMC405DE.h -F: configs/PMC405DE_defconfig diff --git a/board/esd/pmc405de/Makefile b/board/esd/pmc405de/Makefile deleted file mode 100644 index b3f6dcd1e7..0000000000 --- a/board/esd/pmc405de/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -# -# (C) Copyright 2000-2006 -# Wolfgang Denk, DENX Software Engineering, wd@denx.de. -# -# SPDX-License-Identifier: GPL-2.0+ -# - -obj-y = pmc405de.o -obj-$(CONFIG_CMD_CHIP_CONFIG) += chip_config.o -obj-y += ../common/cmd_loadpci.o diff --git a/board/esd/pmc405de/chip_config.c b/board/esd/pmc405de/chip_config.c deleted file mode 100644 index c06a6aeb02..0000000000 --- a/board/esd/pmc405de/chip_config.c +++ /dev/null @@ -1,44 +0,0 @@ -/* - * (C) Copyright 2008-2009 - * Stefan Roese, DENX Software Engineering, sr@denx.de. - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <common.h> -#include <asm/ppc4xx_config.h> - -struct ppc4xx_config ppc4xx_config_val[] = { - { - "133", - "CPU: 133 PLB: 133 OPB: 66 EBC: 44 PCI: 44/66", - { - 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x40, 0x12, 0x12, 0x42, 0x3e, 0x00, 0x00 - } - }, - { - "266", - "CPU: 266 PLB: 133 OPB: 66 EBC: 44 PCI: 44/66", - { - 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x50, 0x22, 0x2d, 0x42, 0x3e, 0x00, 0x00 - } - }, - { - "333", - "CPU: 333 PLB: 111 OPB: 55 EBC: 55 PCI: 55/111", - { - 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x60, 0x29, 0x2d, 0x42, 0xbe, 0x00, 0x00 - } - }, -}; - -int ppc4xx_config_count = ARRAY_SIZE(ppc4xx_config_val); diff --git a/board/esd/pmc405de/pmc405de.c b/board/esd/pmc405de/pmc405de.c deleted file mode 100644 index 31ac72861f..0000000000 --- a/board/esd/pmc405de/pmc405de.c +++ /dev/null @@ -1,507 +0,0 @@ -/* - * (C) Copyright 2009 - * Matthias Fuchs, esd gmbh germany, matthias.fuchs@esd.eu - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <common.h> -#include <console.h> -#include <libfdt.h> -#include <fdt_support.h> -#include <asm/processor.h> -#include <asm/io.h> -#include <asm/ppc4xx-gpio.h> -#include <asm/4xx_pci.h> -#include <command.h> -#include <malloc.h> - -/* - * PMC405-DE cpld registers - * - all registers are 8 bit - * - all registers are on 32 bit addesses - */ -struct pmc405de_cpld { - /* cpld design version */ - u8 version; - u8 reserved0[3]; - - /* misc. status lines */ - u8 status; - u8 reserved1[3]; - - /* - * gated control flags - * gate bit(s) must be written with '1' to - * access control flag - */ - u8 control; - u8 reserved2[3]; -}; - -#define CPLD_VERSION_MASK 0x0f -#define CPLD_CONTROL_POSTLED_N 0x01 -#define CPLD_CONTROL_POSTLED_GATE 0x02 -#define CPLD_CONTROL_RESETOUT_N 0x40 -#define CPLD_CONTROL_RESETOUT_N_GATE 0x80 - -DECLARE_GLOBAL_DATA_PTR; - -extern void __ft_board_setup(void *blob, bd_t *bd); -extern void pll_write(u32 a, u32 b); - -static int wait_for_pci_ready_done; - -static int is_monarch(void); -static int pci_is_66mhz(void); -static int board_revision(void); -static int cpld_revision(void); -static void upd_plb_pci_div(u32 pllmr0, u32 pllmr1, u32 div); - -int board_early_init_f(void) -{ - u32 pllmr0, pllmr1; - - /* - * check M66EN and patch PLB:PCI divider for 66MHz PCI - * - * fCPU==333MHz && fPCI==66MHz (PLBDiv==3 && M66EN==1): PLB/PCI=1 - * fCPU==333MHz && fPCI==33MHz (PLBDiv==3 && M66EN==0): PLB/PCI=2 - * fCPU==133|266MHz && fPCI==66MHz (PLBDiv==1|2 && M66EN==1): PLB/PCI=2 - * fCPU==133|266MHz && fPCI==33MHz (PLBDiv==1|2 && M66EN==0): PLB/PCI=3 - * - * calling upd_plb_pci_div() may end in calling pll_write() which will - * do a chip reset and never return. - */ - pllmr0 = mfdcr(CPC0_PLLMR0); - pllmr1 = mfdcr(CPC0_PLLMR1); - - if ((pllmr0 & PLLMR0_CPU_TO_PLB_MASK) == PLLMR0_CPU_PLB_DIV_3) { - /* fCPU=333MHz, fPLB=111MHz */ - if (pci_is_66mhz()) - upd_plb_pci_div(pllmr0, pllmr1, PLLMR0_PCI_PLB_DIV_1); - else - upd_plb_pci_div(pllmr0, pllmr1, PLLMR0_PCI_PLB_DIV_2); - } else { - /* fCPU=133|266MHz, fPLB=133MHz */ - if (pci_is_66mhz()) - upd_plb_pci_div(pllmr0, pllmr1, PLLMR0_PCI_PLB_DIV_2); - else - upd_plb_pci_div(pllmr0, pllmr1, PLLMR0_PCI_PLB_DIV_3); - } - - /* - * IRQ 25 (EXT IRQ 0) PCI-INTA#; active low; level sensitive - * IRQ 26 (EXT IRQ 1) PCI-INTB#; active low; level sensitive - * IRQ 27 (EXT IRQ 2) PCI-INTC#; active low; level sensitive - * IRQ 28 (EXT IRQ 3) PCI-INTD#; active low; level sensitive - * IRQ 29 (EXT IRQ 4) ETH0-PHY-IRQ#; active low; level sensitive - * IRQ 30 (EXT IRQ 5) ETH1-PHY-IRQ#; active low; level sensitive - * IRQ 31 (EXT IRQ 6) PLD-IRQ#; active low; level sensitive - */ - mtdcr(UIC0SR, 0xFFFFFFFF); /* clear all ints */ - mtdcr(UIC0ER, 0x00000000); /* disable all ints */ - mtdcr(UIC0CR, 0x00000000); /* set all to be non-critical*/ - mtdcr(UIC0PR, 0xFFFFFF80); /* set int polarities */ - mtdcr(UIC0TR, 0x10000000); /* set int trigger levels */ - mtdcr(UIC0VCR, 0x00000001); /* set vect base=0, INT0 highest prio */ - mtdcr(UIC0SR, 0xFFFFFFFF); /* clear all ints */ - - /* - * EBC Configuration Register: - * - set ready timeout to 512 ebc-clks -> ca. 15 us - * - EBC lines are always driven - */ - mtebc(EBC0_CFG, 0xa8400000); - - return 0; -} - -static void upd_plb_pci_div(u32 pllmr0, u32 pllmr1, u32 div) -{ - if ((pllmr0 & PLLMR0_PCI_TO_PLB_MASK) != div) - pll_write((pllmr0 & ~PLLMR0_PCI_TO_PLB_MASK) | div, pllmr1); -} - -int misc_init_r(void) -{ - int i; - struct ppc4xx_gpio *gpio0 = (struct ppc4xx_gpio *)GPIO_BASE; - struct pmc405de_cpld *cpld = - (struct pmc405de_cpld *)CONFIG_SYS_CPLD_BASE; - - if (!is_monarch()) { - /* PCI configuration done: release EREADY */ - setbits_be32(&gpio0->or, CONFIG_SYS_GPIO_EREADY); - setbits_be32(&gpio0->tcr, CONFIG_SYS_GPIO_EREADY); - } - - /* turn off POST LED */ - out_8(&cpld->control, - CPLD_CONTROL_POSTLED_N | CPLD_CONTROL_POSTLED_GATE); - - /* turn on LEDs: RUN, A, B */ - clrbits_be32(&gpio0->or, - CONFIG_SYS_GPIO_LEDRUN_N | - CONFIG_SYS_GPIO_LEDA_N | - CONFIG_SYS_GPIO_LEDB_N); - - for (i=0; i < 200; i++) - udelay(1000); - - /* turn off LEDs: A, B */ - setbits_be32(&gpio0->or, - CONFIG_SYS_GPIO_LEDA_N | - CONFIG_SYS_GPIO_LEDB_N); - - return (0); -} - -static int is_monarch(void) -{ - struct ppc4xx_gpio *gpio0 = (struct ppc4xx_gpio *)GPIO_BASE; - return (in_be32(&gpio0->ir) & CONFIG_SYS_GPIO_MONARCH_N) == 0; -} - -static int pci_is_66mhz(void) -{ - struct ppc4xx_gpio *gpio0 = (struct ppc4xx_gpio *)GPIO_BASE; - return (in_be32(&gpio0->ir) & CONFIG_SYS_GPIO_M66EN); -} - -static int board_revision(void) -{ - struct ppc4xx_gpio *gpio0 = (struct ppc4xx_gpio *)GPIO_BASE; - return ((in_be32(&gpio0->ir) & CONFIG_SYS_GPIO_HWREV_MASK) >> - CONFIG_SYS_GPIO_HWREV_SHIFT); -} - -static int cpld_revision(void) -{ - struct pmc405de_cpld *cpld = - (struct pmc405de_cpld *)CONFIG_SYS_CPLD_BASE; - return ((in_8(&cpld->version) & CPLD_VERSION_MASK)); -} - -/* - * Check Board Identity - */ -int checkboard(void) -{ - puts("Board: esd GmbH - PMC-CPU/405-DE"); - - gd->board_type = board_revision(); - printf(", Rev 1.%ld, ", gd->board_type); - - if (!is_monarch()) - puts("non-"); - - printf("monarch, PCI=%s MHz, PLD-Rev 1.%d\n", - pci_is_66mhz() ? "66" : "33", cpld_revision()); - - return 0; -} - - -static void wait_for_pci_ready(void) -{ - struct ppc4xx_gpio *gpio0 = (struct ppc4xx_gpio *)GPIO_BASE; - int i; - char *s = getenv("pcidelay"); - - /* only wait once */ - if (wait_for_pci_ready_done) - return; - - /* - * We have our own handling of the pcidelay variable. - * Using CONFIG_PCI_BOOTDELAY enables pausing for host - * and adapter devices. For adapter devices we do not - * want this. - */ - if (s) { - int ms = simple_strtoul(s, NULL, 10); - printf("PCI: Waiting for %d ms\n", ms); - for (i=0; i<ms; i++) - udelay(1000); - } - - if (!(in_be32(&gpio0->ir) & CONFIG_SYS_GPIO_EREADY)) { - printf("PCI: Waiting for EREADY (CTRL-C to skip) ... "); - while (1) { - if (ctrlc()) { - puts("abort\n"); - break; - } - if (in_be32(&gpio0->ir) & CONFIG_SYS_GPIO_EREADY) { - printf("done\n"); - break; - } - } - } - - wait_for_pci_ready_done = 1; -} - -/* - * Overwrite weak is_pci_host() - * - * This routine is called to determine if a pci scan should be - * performed. With various hardware environments (especially cPCI and - * PPMC) it's insufficient to depend on the state of the arbiter enable - * bit in the strap register, or generic host/adapter assumptions. - * - * Return 0 for adapter mode, non-zero for host (monarch) mode. - */ -int is_pci_host(struct pci_controller *hose) -{ - char *s; - - if (!is_monarch()) { - /* - * Overwrite PCI identification when running in - * non-monarch mode - * This should be moved into pci_target_init() - * when it is sometimes available for 405 CPUs - */ - pci_write_config_word(PCIDEVID_405GP, - PCI_SUBSYSTEM_ID, - CONFIG_SYS_PCI_SUBSYS_ID_NONMONARCH); - pci_write_config_word(PCIDEVID_405GP, - PCI_CLASS_SUB_CODE, - CONFIG_SYS_PCI_CLASSCODE_NONMONARCH); - } - - s = getenv("pciscan"); - if (s == NULL) { - if (is_monarch()) { - wait_for_pci_ready(); - return 1; - } else { - return 0; - } - } else { - if (!strcmp(s, "yes")) - return 1; - } - - return 0; -} - -/* - * Overwrite weak pci_pre_init() - * - * The default implementation enables the 405EP - * internal PCI arbiter. We do not want that - * on a PMC module. - */ -int pci_pre_init(struct pci_controller *hose) -{ - return 1; -} - -#ifdef CONFIG_OF_BOARD_SETUP -int ft_board_setup(void *blob, bd_t *bd) -{ - int rc; - - __ft_board_setup(blob, bd); - - /* - * Disable PCI in non-monarch mode. - */ - if (!is_monarch()) { - rc = fdt_find_and_setprop(blob, "/plb/pci@ec000000", "status", - "disabled", sizeof("disabled"), 1); - if (rc) { - printf("Unable to update property status in PCI node, " - "err=%s\n", - fdt_strerror(rc)); - } - } - - return 0; -} -#endif /* CONFIG_OF_BOARD_SETUP */ - -#if defined(CONFIG_SYS_EEPROM_WREN) -/* Input: <dev_addr> I2C address of EEPROM device to enable. - * <state> -1: deliver current state - * 0: disable write - * 1: enable write - * Returns: -1: wrong device address - * 0: dis-/en- able done - * 0/1: current state if <state> was -1. - */ -int eeprom_write_enable(unsigned dev_addr, int state) -{ - struct ppc4xx_gpio *gpio0 = (struct ppc4xx_gpio *)GPIO_BASE; - - if (CONFIG_SYS_I2C_EEPROM_ADDR != dev_addr) { - return -1; - } else { - switch (state) { - case 1: - /* Enable write access, clear bit GPIO0. */ - clrbits_be32(&gpio0->or, CONFIG_SYS_GPIO_EEPROM_WP); - state = 0; - break; - case 0: - /* Disable write access, set bit GPIO0. */ - setbits_be32(&gpio0->or, CONFIG_SYS_GPIO_EEPROM_WP); - state = 0; - break; - default: - /* Read current status back. */ - state = (0 == (in_be32(&gpio0->or) & - CONFIG_SYS_GPIO_EEPROM_WP)); - break; - } - } - return state; -} - -int do_eep_wren(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - int query = argc == 1; - int state = 0; - - if (query) { - /* Query write access state. */ - state = eeprom_write_enable(CONFIG_SYS_I2C_EEPROM_ADDR, - 1); - if (state < 0) { - puts("Query of write access state failed.\n"); - } else { - printf("Write access for device 0x%0x is %sabled.\n", - CONFIG_SYS_I2C_EEPROM_ADDR, - state ? "en" : "dis"); - state = 0; - } - } else { - if ('0' == argv[1][0]) { - /* Disable write access. */ - state = eeprom_write_enable( - CONFIG_SYS_I2C_EEPROM_ADDR, 0); - } else { - /* Enable write access. */ - state = eeprom_write_enable( - CONFIG_SYS_I2C_EEPROM_ADDR, 1); - } - if (state < 0) - puts ("Setup of write access state failed.\n"); - } - - return state; -} - -U_BOOT_CMD(eepwren, 2, 0, do_eep_wren, - "Enable / disable / query EEPROM write access", - "" -); -#endif /* #if defined(CONFIG_SYS_EEPROM_WREN) */ - -#if defined(CONFIG_PRAM) -#include <environment.h> - -int do_painit(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - u32 pram, nextbase, base; - char *v; - u32 param; - ulong *lptr; - - v = getenv("pram"); - if (v) - pram = simple_strtoul(v, NULL, 10); - else { - printf("Error: pram undefined. Please define pram in KiB\n"); - return 1; - } - - base = gd->bd->bi_memsize; -#if defined(CONFIG_LOGBUFFER) - base -= LOGBUFF_LEN + LOGBUFF_OVERHEAD; -#endif - /* - * gd->bd->bi_memsize == physical ram size - CONFIG_SYS_MM_TOP_HIDE - */ - param = base - (pram << 10); - printf("PARAM: @%08x\n", param); - debug("memsize=0x%08x, base=0x%08x\n", (u32)gd->bd->bi_memsize, base); - - /* clear entire PA ram */ - memset((void*)param, 0, (pram << 10)); - - /* reserve 4k for pointer field */ - nextbase = base - 4096; - lptr = (ulong*)(base); - - /* - * *(--lptr) = item_size; - * *(--lptr) = base - item_base = distance from field top; - */ - - /* env is first (4k aligned) */ - nextbase -= ((CONFIG_ENV_SIZE + 4096 - 1) & ~(4096 - 1)); - memcpy((void*)nextbase, env_ptr, CONFIG_ENV_SIZE); - *(--lptr) = CONFIG_ENV_SIZE; /* size */ - *(--lptr) = base - nextbase; /* offset | type=0 */ - - /* free section */ - *(--lptr) = nextbase - param; /* size */ - *(--lptr) = (base - param) | 126; /* offset | type=126 */ - - /* terminate pointer field */ - *(--lptr) = crc32(0, (void*)(base - 0x10), 0x10); - *(--lptr) = 0; /* offset=0 -> terminator */ - return 0; -} -U_BOOT_CMD( - painit, 1, 1, do_painit, - "prepare PciAccess system", - "" -); -#endif /* CONFIG_PRAM */ - -int do_selfreset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - struct ppc4xx_gpio *gpio0 = (struct ppc4xx_gpio *)GPIO_BASE; - setbits_be32(&gpio0->tcr, CONFIG_SYS_GPIO_SELFRST_N); - return 0; -} -U_BOOT_CMD( - selfreset, 1, 1, do_selfreset, - "assert self-reset# signal", - "" -); - -int do_resetout(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - struct pmc405de_cpld *cpld = - (struct pmc405de_cpld *)CONFIG_SYS_CPLD_BASE; - - if (argc > 1) { - if (argv[1][0] == '0') { - /* assert */ - printf("PMC-RESETOUT# asserted\n"); - out_8(&cpld->control, - CPLD_CONTROL_RESETOUT_N_GATE); - } else { - /* deassert */ - printf("PMC-RESETOUT# deasserted\n"); - out_8(&cpld->control, - CPLD_CONTROL_RESETOUT_N | - CPLD_CONTROL_RESETOUT_N_GATE); - } - } else { - printf("PMC-RESETOUT# is %s\n", - (in_8(&cpld->control) & CPLD_CONTROL_RESETOUT_N) ? - "inactive" : "active"); - } - return 0; -} -U_BOOT_CMD( - resetout, 2, 1, do_resetout, - "assert PMC-RESETOUT# signal", - "" -); diff --git a/board/esd/pmc440/Kconfig b/board/esd/pmc440/Kconfig deleted file mode 100644 index df8bd65ab7..0000000000 --- a/board/esd/pmc440/Kconfig +++ /dev/null @@ -1,12 +0,0 @@ -if TARGET_PMC440 - -config SYS_BOARD - default "pmc440" - -config SYS_VENDOR - default "esd" - -config SYS_CONFIG_NAME - default "PMC440" - -endif diff --git a/board/esd/pmc440/MAINTAINERS b/board/esd/pmc440/MAINTAINERS deleted file mode 100644 index 32fb9baeef..0000000000 --- a/board/esd/pmc440/MAINTAINERS +++ /dev/null @@ -1,6 +0,0 @@ -PMC440 BOARD -M: Matthias Fuchs <matthias.fuchs@esd-electronics.com> -S: Maintained -F: board/esd/pmc440/ -F: include/configs/PMC440.h -F: configs/PMC440_defconfig diff --git a/board/esd/pmc440/Makefile b/board/esd/pmc440/Makefile deleted file mode 100644 index 708e9d138e..0000000000 --- a/board/esd/pmc440/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -# -# (C) Copyright 2002-2006 -# Wolfgang Denk, DENX Software Engineering, wd@denx.de. -# -# SPDX-License-Identifier: GPL-2.0+ -# - -obj-y = pmc440.o cmd_pmc440.o sdram.o fpga.o \ - ../common/cmd_loadpci.o -extra-y += init.o diff --git a/board/esd/pmc440/cmd_pmc440.c b/board/esd/pmc440/cmd_pmc440.c deleted file mode 100644 index b7cd595362..0000000000 --- a/board/esd/pmc440/cmd_pmc440.c +++ /dev/null @@ -1,554 +0,0 @@ -/* - * (C) Copyright 2007-2008 - * Matthias Fuchs, esd Gmbh, matthias.fuchs@esd-electronics.com. - * - * SPDX-License-Identifier: GPL-2.0+ - */ -#include <common.h> -#include <command.h> -#include <console.h> -#include <asm/io.h> -#include <asm/cache.h> -#include <asm/processor.h> -#if defined(CONFIG_LOGBUFFER) -#include <logbuff.h> -#endif - -#include "pmc440.h" - -int is_monarch(void); -int bootstrap_eeprom_write(unsigned dev_addr, unsigned offset, - uchar *buffer, unsigned cnt); -int eeprom_write_enable(unsigned dev_addr, int state); - -DECLARE_GLOBAL_DATA_PTR; - -#if defined(CONFIG_CMD_BSP) - -static int got_fifoirq; -static int got_hcirq; - -int fpga_interrupt(u32 arg) -{ - pmc440_fpga_t *fpga = (pmc440_fpga_t *)arg; - int rc = -1; /* not for us */ - u32 status = FPGA_IN32(&fpga->status); - - /* check for interrupt from fifo module */ - if (status & STATUS_FIFO_ISF) { - /* disable this int source */ - FPGA_OUT32(&fpga->hostctrl, HOSTCTRL_FIFOIE_GATE); - rc = 0; - got_fifoirq = 1; /* trigger backend */ - } - - if (status & STATUS_HOST_ISF) { - FPGA_OUT32(&fpga->hostctrl, HOSTCTRL_HCINT_GATE); - rc = 0; - got_hcirq = 1; - } - - return rc; -} - -int do_waithci(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA; - - got_hcirq = 0; - - FPGA_CLRBITS(&fpga->ctrla, CTRL_HOST_IE); - FPGA_OUT32(&fpga->hostctrl, HOSTCTRL_HCINT_GATE); - - irq_install_handler(IRQ0_FPGA, - (interrupt_handler_t *)fpga_interrupt, - fpga); - - FPGA_SETBITS(&fpga->ctrla, CTRL_HOST_IE); - - while (!got_hcirq) { - /* Abort if ctrl-c was pressed */ - if (ctrlc()) { - puts("\nAbort\n"); - break; - } - } - if (got_hcirq) - printf("Got interrupt!\n"); - - FPGA_CLRBITS(&fpga->ctrla, CTRL_HOST_IE); - irq_free_handler(IRQ0_FPGA); - return 0; -} -U_BOOT_CMD( - waithci, 1, 1, do_waithci, - "Wait for host control interrupt", - "" -); - -void dump_fifo(pmc440_fpga_t *fpga, int f, int *n) -{ - u32 ctrl; - - while (!((ctrl = FPGA_IN32(&fpga->fifo[f].ctrl)) & FIFO_EMPTY)) { - printf("%5d %d %3d %08x", - (*n)++, f, ctrl & (FIFO_LEVEL_MASK | FIFO_FULL), - FPGA_IN32(&fpga->fifo[f].data)); - if (ctrl & FIFO_OVERFLOW) { - printf(" OVERFLOW\n"); - FPGA_CLRBITS(&fpga->fifo[f].ctrl, FIFO_OVERFLOW); - } else - printf("\n"); - } -} - -int do_fifo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA; - int i; - int n = 0; - u32 ctrl, data, f; - char str[] = "\\|/-"; - int abort = 0; - int count = 0; - int count2 = 0; - - switch (argc) { - case 1: - /* print all fifos status information */ - printf("fifo level status\n"); - printf("______________________________\n"); - for (i=0; i<FIFO_COUNT; i++) { - ctrl = FPGA_IN32(&fpga->fifo[i].ctrl); - printf(" %d %3d %s%s%s %s\n", - i, ctrl & (FIFO_LEVEL_MASK | FIFO_FULL), - ctrl & FIFO_FULL ? "FULL " : "", - ctrl & FIFO_EMPTY ? "EMPTY " : "", - ctrl & (FIFO_FULL|FIFO_EMPTY) ? "" : "NOT EMPTY", - ctrl & FIFO_OVERFLOW ? "OVERFLOW" : ""); - } - break; - - case 2: - /* completely read out fifo 'n' */ - if (!strcmp(argv[1],"read")) { - printf(" # fifo level data\n"); - printf("______________________________\n"); - - for (i=0; i<FIFO_COUNT; i++) - dump_fifo(fpga, i, &n); - - } else if (!strcmp(argv[1],"wait")) { - got_fifoirq = 0; - - irq_install_handler(IRQ0_FPGA, - (interrupt_handler_t *)fpga_interrupt, - fpga); - - printf(" # fifo level data\n"); - printf("______________________________\n"); - - /* enable all fifo interrupts */ - FPGA_OUT32(&fpga->hostctrl, - HOSTCTRL_FIFOIE_GATE | HOSTCTRL_FIFOIE_FLAG); - for (i=0; i<FIFO_COUNT; i++) { - /* enable interrupts from all fifos */ - FPGA_SETBITS(&fpga->fifo[i].ctrl, FIFO_IE); - } - - while (1) { - /* wait loop */ - while (!got_fifoirq) { - count++; - if (!(count % 100)) { - count2++; - putc(0x08); /* backspace */ - putc(str[count2 % 4]); - } - - /* Abort if ctrl-c was pressed */ - if ((abort = ctrlc())) { - puts("\nAbort\n"); - break; - } - udelay(1000); - } - if (abort) - break; - - /* simple fifo backend */ - if (got_fifoirq) { - for (i=0; i<FIFO_COUNT; i++) - dump_fifo(fpga, i, &n); - - got_fifoirq = 0; - /* unmask global fifo irq */ - FPGA_OUT32(&fpga->hostctrl, - HOSTCTRL_FIFOIE_GATE | - HOSTCTRL_FIFOIE_FLAG); - } - } - - /* disable all fifo interrupts */ - FPGA_OUT32(&fpga->hostctrl, HOSTCTRL_FIFOIE_GATE); - for (i=0; i<FIFO_COUNT; i++) - FPGA_CLRBITS(&fpga->fifo[i].ctrl, FIFO_IE); - - irq_free_handler(IRQ0_FPGA); - - } else { - printf("Usage:\nfifo %s\n", cmdtp->help); - return 1; - } - break; - - case 4: - case 5: - if (!strcmp(argv[1],"write")) { - /* get fifo number or fifo address */ - f = simple_strtoul(argv[2], NULL, 16); - - /* data paramter */ - data = simple_strtoul(argv[3], NULL, 16); - - /* get optional count parameter */ - n = 1; - if (argc >= 5) - n = (int)simple_strtoul(argv[4], NULL, 10); - - if (f < FIFO_COUNT) { - printf("writing %d x %08x to fifo %d\n", - n, data, f); - for (i=0; i<n; i++) - FPGA_OUT32(&fpga->fifo[f].data, data); - } else { - printf("writing %d x %08x to fifo port at " - "address %08x\n", - n, data, f); - for (i=0; i<n; i++) - out_be32((void *)f, data); - } - } else { - printf("Usage:\nfifo %s\n", cmdtp->help); - return 1; - } - break; - - default: - printf("Usage:\nfifo %s\n", cmdtp->help); - return 1; - } - return 0; -} -U_BOOT_CMD( - fifo, 5, 1, do_fifo, - "Fifo module operations", - "wait\nfifo read\n" - "fifo write fifo(0..3) data [cnt=1]\n" - "fifo write address(>=4) data [cnt=1]\n" - " - without arguments: print all fifo's status\n" - " - with 'wait' argument: interrupt driven read from all fifos\n" - " - with 'read' argument: read current contents from all fifos\n" - " - with 'write' argument: write 'data' 'cnt' times to " - "'fifo' or 'address'" -); - -int do_setup_bootstrap_eeprom(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - ulong sdsdp[5]; - ulong delay; - int count=16; - - if (argc < 2) { - printf("Usage:\nsbe %s\n", cmdtp->help); - return -1; - } - - if (argc > 1) { - if (!strcmp(argv[1], "400")) { - /* PLB=133MHz, PLB/PCI=3 */ - printf("Bootstrapping for 400MHz\n"); - sdsdp[0]=0x8678624e; - sdsdp[1]=0x095fa030; - sdsdp[2]=0x40082350; - sdsdp[3]=0x0d050000; - } else if (!strcmp(argv[1], "533")) { - /* PLB=133MHz, PLB/PCI=3 */ - printf("Bootstrapping for 533MHz\n"); - sdsdp[0]=0x87788252; - sdsdp[1]=0x095fa030; - sdsdp[2]=0x40082350; - sdsdp[3]=0x0d050000; - } else if (!strcmp(argv[1], "667")) { - /* PLB=133MHz, PLB/PCI=3 */ - printf("Bootstrapping for 667MHz\n"); - sdsdp[0]=0x8778a256; - sdsdp[1]=0x095fa030; - sdsdp[2]=0x40082350; - sdsdp[3]=0x0d050000; - } else { - printf("Usage:\nsbe %s\n", cmdtp->help); - return -1; - } - } - - if (argc > 2) { - sdsdp[4] = 0; - if (argv[2][0]=='1') - sdsdp[4]=0x19750100; - else if (argv[2][0]=='0') - sdsdp[4]=0x19750000; - if (sdsdp[4]) - count += 4; - } - - if (argc > 3) { - delay = simple_strtoul(argv[3], NULL, 10); - if (delay > 20) - delay = 20; - sdsdp[4] |= delay; - } - - printf("Writing boot EEPROM ...\n"); - if (bootstrap_eeprom_write(CONFIG_SYS_I2C_BOOT_EEPROM_ADDR, - 0, (uchar*)sdsdp, count) != 0) - printf("bootstrap_eeprom_write failed\n"); - else - printf("done (dump via 'i2c md 52 0.1 14')\n"); - - return 0; -} -U_BOOT_CMD( - sbe, 4, 0, do_setup_bootstrap_eeprom, - "setup bootstrap eeprom", - "<cpufreq:400|533|667> [<console-uart:0|1> [<bringup delay (0..20s)>]]" -); - -#if defined(CONFIG_PRAM) -#include <environment.h> -#include <search.h> -#include <errno.h> - -int do_painit(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - u32 pram, nextbase, base; - char *v; - u32 param; - ulong *lptr; - - env_t *envp; - char *res; - int len; - - v = getenv("pram"); - if (v) - pram = simple_strtoul(v, NULL, 10); - else { - printf("Error: pram undefined. Please define pram in KiB\n"); - return 1; - } - - base = (u32)gd->ram_size; -#if defined(CONFIG_LOGBUFFER) - base -= LOGBUFF_LEN + LOGBUFF_OVERHEAD; -#endif - /* - * gd->ram_size == physical ram size - CONFIG_SYS_MEM_TOP_HIDE - */ - param = base - (pram << 10); - printf("PARAM: @%08x\n", param); - debug("memsize=0x%08x, base=0x%08x\n", (u32)gd->ram_size, base); - - /* clear entire PA ram */ - memset((void*)param, 0, (pram << 10)); - - /* reserve 4k for pointer field */ - nextbase = base - 4096; - lptr = (ulong*)(base); - - /* - * *(--lptr) = item_size; - * *(--lptr) = base - item_base = distance from field top; - */ - - /* env is first (4k aligned) */ - nextbase -= ((CONFIG_ENV_SIZE + 4096 - 1) & ~(4096 - 1)); - envp = (env_t *)nextbase; - res = (char *)envp->data; - len = hexport_r(&env_htab, '\0', 0, &res, ENV_SIZE, 0, NULL); - if (len < 0) { - error("Cannot export environment: errno = %d\n", errno); - return 1; - } - envp->crc = crc32(0, envp->data, ENV_SIZE); - - *(--lptr) = CONFIG_ENV_SIZE; /* size */ - *(--lptr) = base - nextbase; /* offset | type=0 */ - - /* free section */ - *(--lptr) = nextbase - param; /* size */ - *(--lptr) = (base - param) | 126; /* offset | type=126 */ - - /* terminate pointer field */ - *(--lptr) = crc32(0, (void*)(base - 0x10), 0x10); - *(--lptr) = 0; /* offset=0 -> terminator */ - return 0; -} -U_BOOT_CMD( - painit, 1, 1, do_painit, - "prepare PciAccess system", - "" -); -#endif /* CONFIG_PRAM */ - -int do_selfreset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - in_be32((void*)CONFIG_SYS_RESET_BASE); - return 0; -} -U_BOOT_CMD( - selfreset, 1, 1, do_selfreset, - "assert self-reset# signal", - "" -); - -int do_resetout(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA; - - /* requiers bootet FPGA and PLD_IOEN_N active */ - if (in_be32((void*)GPIO1_OR) & GPIO1_IOEN_N) { - printf("Error: resetout requires a bootet FPGA\n"); - return -1; - } - - if (argc > 1) { - if (argv[1][0] == '0') { - /* assert */ - printf("PMC-RESETOUT# asserted\n"); - FPGA_OUT32(&fpga->hostctrl, - HOSTCTRL_PMCRSTOUT_GATE); - } else { - /* deassert */ - printf("PMC-RESETOUT# deasserted\n"); - FPGA_OUT32(&fpga->hostctrl, - HOSTCTRL_PMCRSTOUT_GATE | - HOSTCTRL_PMCRSTOUT_FLAG); - } - } else { - printf("PMC-RESETOUT# is %s\n", - FPGA_IN32(&fpga->hostctrl) & HOSTCTRL_PMCRSTOUT_FLAG ? - "inactive" : "active"); - } - - return 0; -} -U_BOOT_CMD( - resetout, 2, 1, do_resetout, - "assert PMC-RESETOUT# signal", - "" -); - -int do_inta(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - if (is_monarch()) { - printf("This command is only supported in non-monarch mode\n"); - return -1; - } - - if (argc > 1) { - if (argv[1][0] == '0') { - /* assert */ - printf("inta# asserted\n"); - out_be32((void*)GPIO1_TCR, - in_be32((void*)GPIO1_TCR) | GPIO1_INTA_FAKE); - } else { - /* deassert */ - printf("inta# deasserted\n"); - out_be32((void*)GPIO1_TCR, - in_be32((void*)GPIO1_TCR) & ~GPIO1_INTA_FAKE); - } - } else { - printf("inta# is %s\n", - in_be32((void*)GPIO1_TCR) & GPIO1_INTA_FAKE ? - "active" : "inactive"); - } - return 0; -} -U_BOOT_CMD( - inta, 2, 1, do_inta, - "Assert/Deassert or query INTA# state in non-monarch mode", - "" -); - -/* test-only */ -int do_pmm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - ulong pciaddr; - - if (argc > 1) { - pciaddr = simple_strtoul(argv[1], NULL, 16); - - pciaddr &= 0xf0000000; - - /* map PCI address at 0xc0000000 in PLB space */ - - /* PMM1 Mask/Attribute - disabled b4 setting */ - out32r(PCIL0_PMM1MA, 0x00000000); - /* PMM1 Local Address */ - out32r(PCIL0_PMM1LA, 0xc0000000); - /* PMM1 PCI Low Address */ - out32r(PCIL0_PMM1PCILA, pciaddr); - /* PMM1 PCI High Address */ - out32r(PCIL0_PMM1PCIHA, 0x00000000); - /* 256MB + No prefetching, and enable region */ - out32r(PCIL0_PMM1MA, 0xf0000001); - } else { - printf("Usage:\npmm %s\n", cmdtp->help); - } - return 0; -} -U_BOOT_CMD( - pmm, 2, 1, do_pmm, - "Setup pmm[1] registers", - "<pciaddr> (pciaddr will be aligned to 256MB)" -); - -#if defined(CONFIG_SYS_EEPROM_WREN) -int do_eep_wren(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - int query = argc == 1; - int state = 0; - - if (query) { - /* Query write access state. */ - state = eeprom_write_enable(CONFIG_SYS_I2C_EEPROM_ADDR, -1); - if (state < 0) { - puts("Query of write access state failed.\n"); - } else { - printf("Write access for device 0x%0x is %sabled.\n", - CONFIG_SYS_I2C_EEPROM_ADDR, state ? "en" : "dis"); - state = 0; - } - } else { - if ('0' == argv[1][0]) { - /* Disable write access. */ - state = eeprom_write_enable(CONFIG_SYS_I2C_EEPROM_ADDR, 0); - } else { - /* Enable write access. */ - state = eeprom_write_enable(CONFIG_SYS_I2C_EEPROM_ADDR, 1); - } - if (state < 0) { - puts("Setup of write access state failed.\n"); - } - } - - return state; -} -U_BOOT_CMD(eepwren, 2, 0, do_eep_wren, - "Enable / disable / query EEPROM write access", - "" -); -#endif /* #if defined(CONFIG_SYS_EEPROM_WREN) */ - -#endif /* CONFIG_CMD_BSP */ diff --git a/board/esd/pmc440/config.mk b/board/esd/pmc440/config.mk deleted file mode 100644 index 9cb071e45b..0000000000 --- a/board/esd/pmc440/config.mk +++ /dev/null @@ -1,16 +0,0 @@ -# -# (C) Copyright 2002-2010 -# Wolfgang Denk, DENX Software Engineering, wd@denx.de. -# -# SPDX-License-Identifier: GPL-2.0+ -# - -PLATFORM_CPPFLAGS += -DCONFIG_440=1 - -ifeq ($(debug),1) -PLATFORM_CPPFLAGS += -DDEBUG -endif - -ifeq ($(dbcr),1) -PLATFORM_CPPFLAGS += -DCONFIG_SYS_INIT_DBCR=0x8cff0000 -endif diff --git a/board/esd/pmc440/fpga.c b/board/esd/pmc440/fpga.c deleted file mode 100644 index f876da855b..0000000000 --- a/board/esd/pmc440/fpga.c +++ /dev/null @@ -1,446 +0,0 @@ -/* - * (C) Copyright 2007 - * Matthias Fuchs, esd gmbh, matthias.fuchs@esd-electronics.com. - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <common.h> -#include <asm/io.h> -#include <spartan2.h> -#include <spartan3.h> -#include <command.h> -#include "fpga.h" -#include "pmc440.h" - -DECLARE_GLOBAL_DATA_PTR; - -#if defined(CONFIG_FPGA) - -#define USE_SP_CODE - -#ifdef USE_SP_CODE -xilinx_spartan3_slave_parallel_fns pmc440_fpga_fns = { - fpga_pre_config_fn, - fpga_pgm_fn, - fpga_init_fn, - NULL, /* err */ - fpga_done_fn, - fpga_clk_fn, - fpga_cs_fn, - fpga_wr_fn, - NULL, /* rdata */ - fpga_wdata_fn, - fpga_busy_fn, - fpga_abort_fn, - fpga_post_config_fn, -}; -#else -xilinx_spartan3_slave_serial_fns pmc440_fpga_fns = { - fpga_pre_config_fn, - fpga_pgm_fn, - fpga_clk_fn, - fpga_init_fn, - fpga_done_fn, - fpga_wr_fn, - fpga_post_config_fn, -}; -#endif - -xilinx_spartan2_slave_serial_fns ngcc_fpga_fns = { - ngcc_fpga_pre_config_fn, - ngcc_fpga_pgm_fn, - ngcc_fpga_clk_fn, - ngcc_fpga_init_fn, - ngcc_fpga_done_fn, - ngcc_fpga_wr_fn, - ngcc_fpga_post_config_fn -}; - -xilinx_desc fpga[CONFIG_FPGA_COUNT] = { - XILINX_XC3S1200E_DESC( -#ifdef USE_SP_CODE - slave_parallel, -#else - slave_serial, -#endif - (void *)&pmc440_fpga_fns, - 0), - XILINX_XC2S200_DESC( - slave_serial, - (void *)&ngcc_fpga_fns, - 0) -}; - - -/* - * Set the active-low FPGA reset signal. - */ -void fpga_reset(int assert) -{ - debug("%s:%d: RESET ", __FUNCTION__, __LINE__); - if (assert) { - out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) & ~GPIO1_FPGA_DATA); - debug("asserted\n"); - } else { - out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) | GPIO1_FPGA_DATA); - debug("deasserted\n"); - } -} - - -/* - * Initialize the SelectMap interface. We assume that the mode and the - * initial state of all of the port pins have already been set! - */ -void fpga_serialslave_init(void) -{ - debug("%s:%d: Initialize serial slave interface\n", __FUNCTION__, - __LINE__); - fpga_pgm_fn(false, false, 0); /* make sure program pin is inactive */ -} - - -/* - * Set the FPGA's active-low SelectMap program line to the specified level - */ -int fpga_pgm_fn(int assert, int flush, int cookie) -{ - debug("%s:%d: FPGA PROGRAM ", - __FUNCTION__, __LINE__); - - if (assert) { - out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) & ~GPIO1_FPGA_PRG); - debug("asserted\n"); - } else { - out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) | GPIO1_FPGA_PRG); - debug("deasserted\n"); - } - return assert; -} - - -/* - * Test the state of the active-low FPGA INIT line. Return 1 on INIT - * asserted (low). - */ -int fpga_init_fn(int cookie) -{ - if (in_be32((void*)GPIO1_IR) & GPIO1_FPGA_INIT) - return 0; - else - return 1; -} - -#ifdef USE_SP_CODE -int fpga_abort_fn(int cookie) -{ - return 0; -} - - -int fpga_cs_fn(int assert_cs, int flush, int cookie) -{ - return assert_cs; -} - - -int fpga_busy_fn(int cookie) -{ - return 1; -} -#endif - - -/* - * Test the state of the active-high FPGA DONE pin - */ -int fpga_done_fn(int cookie) -{ - if (in_be32((void*)GPIO1_IR) & GPIO1_FPGA_DONE) - return 1; - else - return 0; -} - - -/* - * FPGA pre-configuration function. Just make sure that - * FPGA reset is asserted to keep the FPGA from starting up after - * configuration. - */ -int fpga_pre_config_fn(int cookie) -{ - debug("%s:%d: FPGA pre-configuration\n", __FUNCTION__, __LINE__); - fpga_reset(true); - - /* release init# */ - out_be32((void*)GPIO0_OR, in_be32((void*)GPIO0_OR) | GPIO0_FPGA_FORCEINIT); - /* disable PLD IOs */ - out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) | GPIO1_IOEN_N); - return 0; -} - - -/* - * FPGA post configuration function. Blip the FPGA reset line and then see if - * the FPGA appears to be running. - */ -int fpga_post_config_fn(int cookie) -{ - pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA; - int rc=0; - char *s; - - debug("%s:%d: FPGA post configuration\n", __FUNCTION__, __LINE__); - - /* enable PLD0..7 pins */ - out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) & ~GPIO1_IOEN_N); - - fpga_reset(true); - udelay (100); - fpga_reset(false); - udelay (100); - - FPGA_OUT32(&fpga->status, (gd->board_type << STATUS_HWREV_SHIFT) & STATUS_HWREV_MASK); - - /* NGCC/CANDES only: enable ledlink */ - if ((s = getenv("bd_type")) && - ((!strcmp(s, "ngcc")) || (!strcmp(s, "candes")))) - FPGA_SETBITS(&fpga->ctrla, 0x29f8c000); - - return rc; -} - - -int fpga_clk_fn(int assert_clk, int flush, int cookie) -{ - if (assert_clk) - out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) | GPIO1_FPGA_CLK); - else - out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) & ~GPIO1_FPGA_CLK); - - return assert_clk; -} - - -int fpga_wr_fn(int assert_write, int flush, int cookie) -{ - if (assert_write) - out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) | GPIO1_FPGA_DATA); - else - out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) & ~GPIO1_FPGA_DATA); - - return assert_write; -} - -#ifdef USE_SP_CODE -int fpga_wdata_fn(uchar data, int flush, int cookie) -{ - uchar val = data; - ulong or = in_be32((void*)GPIO1_OR); - int i = 7; - do { - /* Write data */ - if (val & 0x80) - or = (or & ~GPIO1_FPGA_CLK) | GPIO1_FPGA_DATA; - else - or = or & ~(GPIO1_FPGA_CLK | GPIO1_FPGA_DATA); - - out_be32((void*)GPIO1_OR, or); - - /* Assert the clock */ - or |= GPIO1_FPGA_CLK; - out_be32((void*)GPIO1_OR, or); - val <<= 1; - i --; - } while (i > 0); - - /* Write last data bit (the 8th clock comes from the sp_load() code */ - if (val & 0x80) - or = (or & ~GPIO1_FPGA_CLK) | GPIO1_FPGA_DATA; - else - or = or & ~(GPIO1_FPGA_CLK | GPIO1_FPGA_DATA); - - out_be32((void*)GPIO1_OR, or); - - return 0; -} -#endif - -#define NGCC_FPGA_PRG CLOCK_EN -#define NGCC_FPGA_DATA RESET_OUT -#define NGCC_FPGA_DONE CLOCK_IN -#define NGCC_FPGA_INIT IRIGB_R_IN -#define NGCC_FPGA_CLK CLOCK_OUT - -void ngcc_fpga_serialslave_init(void) -{ - debug("%s:%d: Initialize serial slave interface\n", - __FUNCTION__, __LINE__); - - /* make sure program pin is inactive */ - ngcc_fpga_pgm_fn(false, false, 0); -} - -/* - * Set the active-low FPGA reset signal. - */ -void ngcc_fpga_reset(int assert) -{ - debug("%s:%d: RESET ", __FUNCTION__, __LINE__); - - if (assert) { - FPGA_CLRBITS(NGCC_CTRL_BASE, NGCC_CTRL_FPGARST_N); - debug("asserted\n"); - } else { - FPGA_SETBITS(NGCC_CTRL_BASE, NGCC_CTRL_FPGARST_N); - debug("deasserted\n"); - } -} - - -/* - * Set the FPGA's active-low SelectMap program line to the specified level - */ -int ngcc_fpga_pgm_fn(int assert, int flush, int cookie) -{ - pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA; - - debug("%s:%d: FPGA PROGRAM ", __FUNCTION__, __LINE__); - - if (assert) { - FPGA_CLRBITS(&fpga->ctrla, NGCC_FPGA_PRG); - debug("asserted\n"); - } else { - FPGA_SETBITS(&fpga->ctrla, NGCC_FPGA_PRG); - debug("deasserted\n"); - } - - return assert; -} - - -/* - * Test the state of the active-low FPGA INIT line. Return 1 on INIT - * asserted (low). - */ -int ngcc_fpga_init_fn(int cookie) -{ - pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA; - - debug("%s:%d: INIT check... ", __FUNCTION__, __LINE__); - if (FPGA_IN32(&fpga->status) & NGCC_FPGA_INIT) { - debug("high\n"); - return 0; - } else { - debug("low\n"); - return 1; - } -} - - -/* - * Test the state of the active-high FPGA DONE pin - */ -int ngcc_fpga_done_fn(int cookie) -{ - pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA; - - debug("%s:%d: DONE check... ", __FUNCTION__, __LINE__); - if (FPGA_IN32(&fpga->status) & NGCC_FPGA_DONE) { - debug("DONE high\n"); - return 1; - } else { - debug("low\n"); - return 0; - } -} - - -/* - * FPGA pre-configuration function. - */ -int ngcc_fpga_pre_config_fn(int cookie) -{ - pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA; - debug("%s:%d: FPGA pre-configuration\n", __FUNCTION__, __LINE__); - - ngcc_fpga_reset(true); - FPGA_CLRBITS(&fpga->ctrla, 0xfffffe00); - - ngcc_fpga_reset(true); - return 0; -} - - -/* - * FPGA post configuration function. Blip the FPGA reset line and then see if - * the FPGA appears to be running. - */ -int ngcc_fpga_post_config_fn(int cookie) -{ - pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA; - - debug("%s:%d: NGCC FPGA post configuration\n", __FUNCTION__, __LINE__); - - udelay (100); - ngcc_fpga_reset(false); - - FPGA_SETBITS(&fpga->ctrla, 0x29f8c000); - - return 0; -} - - -int ngcc_fpga_clk_fn(int assert_clk, int flush, int cookie) -{ - pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA; - - if (assert_clk) - FPGA_SETBITS(&fpga->ctrla, NGCC_FPGA_CLK); - else - FPGA_CLRBITS(&fpga->ctrla, NGCC_FPGA_CLK); - - return assert_clk; -} - - -int ngcc_fpga_wr_fn(int assert_write, int flush, int cookie) -{ - pmc440_fpga_t *fpga = (pmc440_fpga_t *)FPGA_BA; - - if (assert_write) - FPGA_SETBITS(&fpga->ctrla, NGCC_FPGA_DATA); - else - FPGA_CLRBITS(&fpga->ctrla, NGCC_FPGA_DATA); - - return assert_write; -} - - -/* - * Initialize the fpga. Return 1 on success, 0 on failure. - */ -int pmc440_init_fpga(void) -{ - char *s; - - debug("%s:%d: Initialize FPGA interface\n", - __FUNCTION__, __LINE__); - fpga_init(); - - fpga_serialslave_init (); - debug("%s:%d: Adding fpga 0\n", __FUNCTION__, __LINE__); - fpga_add (fpga_xilinx, &fpga[0]); - - /* NGCC only */ - if ((s = getenv("bd_type")) && !strcmp(s, "ngcc")) { - ngcc_fpga_serialslave_init (); - debug("%s:%d: Adding fpga 1\n", __FUNCTION__, __LINE__); - fpga_add (fpga_xilinx, &fpga[1]); - } - - return 0; -} -#endif /* CONFIG_FPGA */ diff --git a/board/esd/pmc440/fpga.h b/board/esd/pmc440/fpga.h deleted file mode 100644 index 3810788a92..0000000000 --- a/board/esd/pmc440/fpga.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * (C) Copyright 2007 - * Matthias Fuchs, esd gmbh germany, matthias.fuchs@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -extern int pmc440_init_fpga(void); - -extern int fpga_pgm_fn(int assert_pgm, int flush, int cookie); -extern int fpga_init_fn(int cookie); -extern int fpga_err_fn(int cookie); -extern int fpga_done_fn(int cookie); -extern int fpga_clk_fn(int assert_clk, int flush, int cookie); -extern int fpga_cs_fn(int assert_cs, int flush, int cookie); -extern int fpga_wr_fn(int assert_write, int flush, int cookie); -extern int fpga_wdata_fn (uchar data, int flush, int cookie); -extern int fpga_read_data_fn(unsigned char *data, int cookie); -extern int fpga_write_data_fn(unsigned char data, int flush, int cookie); -extern int fpga_busy_fn(int cookie); -extern int fpga_abort_fn(int cookie ); -extern int fpga_pre_config_fn(int cookie ); -extern int fpga_post_config_fn(int cookie ); - -extern int ngcc_fpga_pgm_fn(int assert_pgm, int flush, int cookie); -extern int ngcc_fpga_init_fn(int cookie); -extern int ngcc_fpga_done_fn(int cookie); -extern int ngcc_fpga_clk_fn(int assert_clk, int flush, int cookie); -extern int ngcc_fpga_wr_fn(int assert_write, int flush, int cookie); -extern int ngcc_fpga_pre_config_fn(int cookie ); -extern int ngcc_fpga_post_config_fn(int cookie ); diff --git a/board/esd/pmc440/init.S b/board/esd/pmc440/init.S deleted file mode 100644 index 1f26fad147..0000000000 --- a/board/esd/pmc440/init.S +++ /dev/null @@ -1,69 +0,0 @@ -/* - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <asm-offsets.h> -#include <ppc_asm.tmpl> -#include <asm/mmu.h> -#include <config.h> - -/* - * TLB TABLE - * - * This table is used by the cpu boot code to setup the initial tlb - * entries. Rather than make broad assumptions in the cpu source tree, - * this table lets each board set things up however they like. - * - * Pointer to the table is returned in r1 - * - */ - .section .bootpg,"ax" - .globl tlbtab - -tlbtab: - tlbtab_start - - /* - * BOOT_CS (FLASH) must be first. Before relocation SA_I can be off to use the - * speed up boot process. It is patched after relocation to enable SA_I - */ - tlbentry( CONFIG_SYS_BOOT_BASE_ADDR, SZ_256M, CONFIG_SYS_BOOT_BASE_ADDR, 1, AC_RWX | SA_G ) - - /* TLB entries for DDR2 SDRAM are generated dynamically */ - -#ifdef CONFIG_SYS_INIT_RAM_DCACHE - /* TLB-entry for init-ram in dcache (SA_I must be turned off!) */ - tlbentry( CONFIG_SYS_INIT_RAM_ADDR, SZ_64K, CONFIG_SYS_INIT_RAM_ADDR, 0, AC_RWX | SA_G ) -#endif - - /* TLB-entry for PCI Memory */ - tlbentry( CONFIG_SYS_PCI_MEMBASE, SZ_256M, CONFIG_SYS_PCI_MEMBASE, 1, AC_RW | SA_IG ) - tlbentry( CONFIG_SYS_PCI_MEMBASE1, SZ_256M, CONFIG_SYS_PCI_MEMBASE1, 1, AC_RW | SA_IG ) - tlbentry( CONFIG_SYS_PCI_MEMBASE2, SZ_256M, CONFIG_SYS_PCI_MEMBASE2, 1, AC_RW | SA_IG ) - tlbentry( CONFIG_SYS_PCI_MEMBASE3, SZ_256M, CONFIG_SYS_PCI_MEMBASE3, 1, AC_RW | SA_IG ) - - /* TLB-entries for EBC */ - /* PMC440 maps EBC to 0xef000000 which is handled by the peripheral - * tlb entry. - * This dummy entry is only for convinience in order not to modify the - * amount of entries. Currently OS/9 relies on this :-) - */ - tlbentry( 0xc0000000, SZ_256M, 0xc0000000, 1, AC_RWX | SA_IG ) - - /* TLB-entry for NAND */ - tlbentry( CONFIG_SYS_NAND_ADDR, SZ_1K, CONFIG_SYS_NAND_ADDR, 1, AC_RWX | SA_IG ) - - /* TLB-entry for Internal Registers & OCM */ - tlbentry( 0xe0000000, SZ_16M, 0xe0000000, 0, AC_RWX | SA_I ) - - /*TLB-entry PCI registers*/ - tlbentry( 0xEEC00000, SZ_1K, 0xEEC00000, 1, AC_RWX | SA_IG ) - - /* TLB-entry for peripherals */ - tlbentry( 0xEF000000, SZ_16M, 0xEF000000, 1, AC_RWX | SA_IG) - - /* TLB-entry PCI IO space */ - tlbentry(0xE8000000, SZ_64K, 0xE8000000, 1, AC_RWX | SA_IG) - - /* TODO: what about high IO space */ - tlbtab_end diff --git a/board/esd/pmc440/pmc440.c b/board/esd/pmc440/pmc440.c deleted file mode 100644 index 0d43505e35..0000000000 --- a/board/esd/pmc440/pmc440.c +++ /dev/null @@ -1,906 +0,0 @@ -/* - * (Cg) Copyright 2007-2008 - * Matthias Fuchs, esd gmbh, matthias.fuchs@esd-electronics.com. - * Based on board/amcc/sequoia/sequoia.c - * - * (C) Copyright 2006 - * Stefan Roese, DENX Software Engineering, sr@denx.de. - * - * (C) Copyright 2006 - * Jacqueline Pira-Ferriol, AMCC/IBM, jpira-ferriol@fr.ibm.com - * Alain Saurel, AMCC/IBM, alain.saurel@fr.ibm.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ -#include <common.h> -#include <console.h> -#include <libfdt.h> -#include <fdt_support.h> -#include <asm/ppc440.h> -#include <asm/processor.h> -#include <asm/io.h> -#include <asm/bitops.h> -#include <command.h> -#include <i2c.h> -#ifdef CONFIG_RESET_PHY_R -#include <miiphy.h> -#endif -#include <serial.h> -#include <asm/4xx_pci.h> -#include <usb.h> - -#include "fpga.h" -#include "pmc440.h" - -DECLARE_GLOBAL_DATA_PTR; - -extern flash_info_t flash_info[CONFIG_SYS_MAX_FLASH_BANKS]; -extern void __ft_board_setup(void *blob, bd_t *bd); - -ulong flash_get_size(ulong base, int banknum); -static int pci_is_66mhz(void); -int is_monarch(void); -static int bootstrap_eeprom_read(unsigned dev_addr, unsigned offset, - uchar *buffer, unsigned cnt); - -struct serial_device *default_serial_console(void) -{ - uchar buf[4]; - ulong delay; - int i; - ulong val; - - /* - * Use default console on P4 when strapping jumper - * is installed (bootstrap option != 'H'). - */ - mfsdr(SDR0_PINSTP, val); - if (((val & 0xf0000000) >> 29) != 7) - return &eserial2_device; - - ulong scratchreg = in_be32((void *)GPIO0_ISR3L); - if (!(scratchreg & 0x80)) { - /* mark scratchreg valid */ - scratchreg = (scratchreg & 0xffffff00) | 0x80; - - i2c_init_all(); - - i = bootstrap_eeprom_read(CONFIG_SYS_I2C_BOOT_EEPROM_ADDR, - 0x10, buf, 4); - if ((i != -1) && (buf[0] == 0x19) && (buf[1] == 0x75)) { - scratchreg |= buf[2]; - - /* bringup delay for console */ - for (delay = 0; delay < (1000 * (ulong)buf[3]); delay++) - udelay(1000); - } else - scratchreg |= 0x01; - out_be32((void *)GPIO0_ISR3L, scratchreg); - } - - if (scratchreg & 0x01) - return &eserial2_device; - else - return &eserial1_device; -} - -int board_early_init_f(void) -{ - u32 sdr0_cust0; - u32 sdr0_pfc1, sdr0_pfc2; - u32 reg; - - /* general EBC configuration (disable EBC timeouts) */ - mtdcr(EBC0_CFGADDR, EBC0_CFG); - mtdcr(EBC0_CFGDATA, 0xf8400000); - - /* Setup the GPIO pins */ - out_be32((void *)GPIO0_OR, 0x40000102); - out_be32((void *)GPIO0_TCR, 0x4c90011f); - out_be32((void *)GPIO0_OSRL, 0x28051400); - out_be32((void *)GPIO0_OSRH, 0x55005000); - out_be32((void *)GPIO0_TSRL, 0x08051400); - out_be32((void *)GPIO0_TSRH, 0x55005000); - out_be32((void *)GPIO0_ISR1L, 0x54000000); - out_be32((void *)GPIO0_ISR1H, 0x00000000); - out_be32((void *)GPIO0_ISR2L, 0x44000000); - out_be32((void *)GPIO0_ISR2H, 0x00000100); - out_be32((void *)GPIO0_ISR3L, 0x00000000); - out_be32((void *)GPIO0_ISR3H, 0x00000000); - - out_be32((void *)GPIO1_OR, 0x80002408); - out_be32((void *)GPIO1_TCR, 0xd6003c08); - out_be32((void *)GPIO1_OSRL, 0x0a5a0000); - out_be32((void *)GPIO1_OSRH, 0x00000000); - out_be32((void *)GPIO1_TSRL, 0x00000000); - out_be32((void *)GPIO1_TSRH, 0x00000000); - out_be32((void *)GPIO1_ISR1L, 0x00005555); - out_be32((void *)GPIO1_ISR1H, 0x40000000); - out_be32((void *)GPIO1_ISR2L, 0x04010000); - out_be32((void *)GPIO1_ISR2H, 0x00000000); - out_be32((void *)GPIO1_ISR3L, 0x01400000); - out_be32((void *)GPIO1_ISR3H, 0x00000000); - - /* patch PLB:PCI divider for 66MHz PCI */ - mfcpr(CPR0_SPCID, reg); - if (pci_is_66mhz() && (reg != 0x02000000)) { - mtcpr(CPR0_SPCID, 0x02000000); /* 133MHZ : 2 for 66MHz PCI */ - - mfcpr(CPR0_ICFG, reg); - reg |= CPR0_ICFG_RLI_MASK; - mtcpr(CPR0_ICFG, reg); - - mtspr(SPRN_DBCR0, 0x20000000); /* do chip reset */ - } - - /* - * Setup the interrupt controller polarities, triggers, etc. - */ - mtdcr(UIC0SR, 0xffffffff); /* clear all */ - mtdcr(UIC0ER, 0x00000000); /* disable all */ - mtdcr(UIC0CR, 0x00000005); /* ATI & UIC1 crit are critical */ - mtdcr(UIC0PR, 0xfffff7ef); - mtdcr(UIC0TR, 0x00000000); - mtdcr(UIC0VR, 0x00000000); /* int31 highest, base=0x000 */ - mtdcr(UIC0SR, 0xffffffff); /* clear all */ - - mtdcr(UIC1SR, 0xffffffff); /* clear all */ - mtdcr(UIC1ER, 0x00000000); /* disable all */ - mtdcr(UIC1CR, 0x00000000); /* all non-critical */ - mtdcr(UIC1PR, 0xffffc7f5); - mtdcr(UIC1TR, 0x00000000); - mtdcr(UIC1VR, 0x00000000); /* int31 highest, base=0x000 */ - mtdcr(UIC1SR, 0xffffffff); /* clear all */ - - mtdcr(UIC2SR, 0xffffffff); /* clear all */ - mtdcr(UIC2ER, 0x00000000); /* disable all */ - mtdcr(UIC2CR, 0x00000000); /* all non-critical */ - mtdcr(UIC2PR, 0x27ffffff); - mtdcr(UIC2TR, 0x00000000); - mtdcr(UIC2VR, 0x00000000); /* int31 highest, base=0x000 */ - mtdcr(UIC2SR, 0xffffffff); /* clear all */ - - /* select Ethernet pins */ - mfsdr(SDR0_PFC1, sdr0_pfc1); - sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_SELECT_MASK) | - SDR0_PFC1_SELECT_CONFIG_4; - mfsdr(SDR0_PFC2, sdr0_pfc2); - sdr0_pfc2 = (sdr0_pfc2 & ~SDR0_PFC2_SELECT_MASK) | - SDR0_PFC2_SELECT_CONFIG_4; - - /* enable 2nd IIC */ - sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_SIS_MASK) | SDR0_PFC1_SIS_IIC1_SEL; - - mtsdr(SDR0_PFC2, sdr0_pfc2); - mtsdr(SDR0_PFC1, sdr0_pfc1); - - /* setup NAND FLASH */ - mfsdr(SDR0_CUST0, sdr0_cust0); - sdr0_cust0 = SDR0_CUST0_MUX_NDFC_SEL | - SDR0_CUST0_NDFC_ENABLE | - SDR0_CUST0_NDFC_BW_8_BIT | - SDR0_CUST0_NDFC_ARE_MASK | - (0x80000000 >> (28 + CONFIG_SYS_NAND_CS)); - mtsdr(SDR0_CUST0, sdr0_cust0); - - return 0; -} - -#if defined(CONFIG_MISC_INIT_F) -int misc_init_f(void) -{ - struct pci_controller hose; - hose.first_busno = 0; - hose.last_busno = 0; - hose.region_count = 0; - - if (getenv("pciearly") && (!is_monarch())) { - printf("PCI: early target init\n"); - pci_setup_indirect(&hose, PCIL0_CFGADR, PCIL0_CFGDATA); - pci_target_init(&hose); - } - return 0; -} -#endif - -/* - * misc_init_r. - */ -int misc_init_r(void) -{ - uint pbcr; - int size_val = 0; - u32 reg; - unsigned long usb2d0cr = 0; - unsigned long usb2phy0cr, usb2h0cr = 0; - unsigned long sdr0_pfc1; - unsigned long sdr0_srst0, sdr0_srst1; - char *act = getenv("usbact"); - - /* - * FLASH stuff... - */ - - /* Re-do sizing to get full correct info */ - - /* adjust flash start and offset */ - gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize; - gd->bd->bi_flashoffset = 0; - - mtdcr(EBC0_CFGADDR, PB0CR); - pbcr = mfdcr(EBC0_CFGDATA); - size_val = ffs(gd->bd->bi_flashsize) - 21; - pbcr = (pbcr & 0x0001ffff) | gd->bd->bi_flashstart | (size_val << 17); - mtdcr(EBC0_CFGADDR, PB0CR); - mtdcr(EBC0_CFGDATA, pbcr); - - /* - * Re-check to get correct base address - */ - flash_get_size(gd->bd->bi_flashstart, 0); - -#ifdef CONFIG_ENV_IS_IN_FLASH - /* Monitor protection ON by default */ - (void)flash_protect(FLAG_PROTECT_SET, - -CONFIG_SYS_MONITOR_LEN, - 0xffffffff, - &flash_info[0]); - - /* Env protection ON by default */ - (void)flash_protect(FLAG_PROTECT_SET, - CONFIG_ENV_ADDR_REDUND, - CONFIG_ENV_ADDR_REDUND + 2*CONFIG_ENV_SECT_SIZE - 1, - &flash_info[0]); -#endif - - /* - * USB suff... - */ - if ((act == NULL || strcmp(act, "host") == 0) && - !(in_be32((void *)GPIO0_IR) & GPIO0_USB_PRSNT)) { - /* SDR Setting */ - mfsdr(SDR0_PFC1, sdr0_pfc1); - mfsdr(SDR0_USB2D0CR, usb2d0cr); - mfsdr(SDR0_USB2PHY0CR, usb2phy0cr); - mfsdr(SDR0_USB2H0CR, usb2h0cr); - - usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_XOCLK_MASK; - usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL; - usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_WDINT_MASK; - usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_WDINT_16BIT_30MHZ; - usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DVBUS_MASK; - usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PURDIS; - usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DWNSTR_MASK; - usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_HOST; - usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_UTMICN_MASK; - usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_HOST; - - /* - * An 8-bit/60MHz interface is the only possible alternative - * when connecting the Device to the PHY - */ - usb2h0cr = usb2h0cr &~SDR0_USB2H0CR_WDINT_MASK; - usb2h0cr = usb2h0cr | SDR0_USB2H0CR_WDINT_16BIT_30MHZ; - - usb2d0cr = usb2d0cr &~SDR0_USB2D0CR_USB2DEV_EBC_SEL_MASK; - sdr0_pfc1 = sdr0_pfc1 &~SDR0_PFC1_UES_MASK; - - mtsdr(SDR0_PFC1, sdr0_pfc1); - mtsdr(SDR0_USB2D0CR, usb2d0cr); - mtsdr(SDR0_USB2PHY0CR, usb2phy0cr); - mtsdr(SDR0_USB2H0CR, usb2h0cr); - - /* - * Take USB out of reset: - * -Initial status = all cores are in reset - * -deassert reset to OPB1, P4OPB0, OPB2, PLB42OPB1 OPB2PLB40 cores - * -wait 1 ms - * -deassert reset to PHY - * -wait 1 ms - * -deassert reset to HOST - * -wait 4 ms - * -deassert all other resets - */ - mfsdr(SDR0_SRST1, sdr0_srst1); - sdr0_srst1 &= ~(SDR0_SRST1_OPBA1 | \ - SDR0_SRST1_P4OPB0 | \ - SDR0_SRST1_OPBA2 | \ - SDR0_SRST1_PLB42OPB1 | \ - SDR0_SRST1_OPB2PLB40); - mtsdr(SDR0_SRST1, sdr0_srst1); - udelay(1000); - - mfsdr(SDR0_SRST1, sdr0_srst1); - sdr0_srst1 &= ~SDR0_SRST1_USB20PHY; - mtsdr(SDR0_SRST1, sdr0_srst1); - udelay(1000); - - mfsdr(SDR0_SRST0, sdr0_srst0); - sdr0_srst0 &= ~SDR0_SRST0_USB2H; - mtsdr(SDR0_SRST0, sdr0_srst0); - udelay(4000); - - /* finally all the other resets */ - mtsdr(SDR0_SRST1, 0x00000000); - mtsdr(SDR0_SRST0, 0x00000000); - - if (!(in_be32((void *)GPIO0_IR) & GPIO0_USB_PRSNT)) { - /* enable power on USB socket */ - out_be32((void *)GPIO1_OR, - in_be32((void *)GPIO1_OR) & ~GPIO1_USB_PWR_N); - } - - printf("USB: Host\n"); - - } else if ((strcmp(act, "dev") == 0) || - (in_be32((void *)GPIO0_IR) & GPIO0_USB_PRSNT)) { - mfsdr(SDR0_USB2PHY0CR, usb2phy0cr); - - usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_XOCLK_MASK; - usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL; - usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DVBUS_MASK; - usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PURDIS; - usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DWNSTR_MASK; - usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_HOST; - usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_UTMICN_MASK; - usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_HOST; - mtsdr(SDR0_USB2PHY0CR, usb2phy0cr); - - udelay (1000); - mtsdr(SDR0_SRST1, 0x672c6000); - - udelay (1000); - mtsdr(SDR0_SRST0, 0x00000080); - - udelay (1000); - mtsdr(SDR0_SRST1, 0x60206000); - - *(unsigned int *)(0xe0000350) = 0x00000001; - - udelay (1000); - mtsdr(SDR0_SRST1, 0x60306000); - - /* SDR Setting */ - mfsdr(SDR0_USB2PHY0CR, usb2phy0cr); - mfsdr(SDR0_USB2H0CR, usb2h0cr); - mfsdr(SDR0_USB2D0CR, usb2d0cr); - mfsdr(SDR0_PFC1, sdr0_pfc1); - - usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_XOCLK_MASK; - usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL; - usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_WDINT_MASK; - usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_WDINT_8BIT_60MHZ; - usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DVBUS_MASK; - usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PUREN; - usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DWNSTR_MASK; - usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_DEV; - usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_UTMICN_MASK; - usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_DEV; - - usb2h0cr = usb2h0cr &~SDR0_USB2H0CR_WDINT_MASK; - usb2h0cr = usb2h0cr | SDR0_USB2H0CR_WDINT_8BIT_60MHZ; - - usb2d0cr = usb2d0cr &~SDR0_USB2D0CR_USB2DEV_EBC_SEL_MASK; - - sdr0_pfc1 = sdr0_pfc1 &~SDR0_PFC1_UES_MASK; - sdr0_pfc1 = sdr0_pfc1 | SDR0_PFC1_UES_EBCHR_SEL; - - mtsdr(SDR0_USB2H0CR, usb2h0cr); - mtsdr(SDR0_USB2PHY0CR, usb2phy0cr); - mtsdr(SDR0_USB2D0CR, usb2d0cr); - mtsdr(SDR0_PFC1, sdr0_pfc1); - - /*clear resets*/ - udelay(1000); - mtsdr(SDR0_SRST1, 0x00000000); - udelay(1000); - mtsdr(SDR0_SRST0, 0x00000000); - - printf("USB: Device\n"); - } - - /* - * Clear PLB4A0_ACR[WRP] - * This fix will make the MAL burst disabling patch for the Linux - * EMAC driver obsolete. - */ - reg = mfdcr(PLB4A0_ACR) & ~PLB4Ax_ACR_WRP_MASK; - mtdcr(PLB4A0_ACR, reg); - -#ifdef CONFIG_FPGA - pmc440_init_fpga(); -#endif - - /* turn off POST LED */ - out_be32((void *)GPIO1_OR, in_be32((void *)GPIO1_OR) & ~GPIO1_POST_N); - /* turn on RUN LED */ - out_be32((void *)GPIO0_OR, - in_be32((void *)GPIO0_OR) & ~GPIO0_LED_RUN_N); - return 0; -} - -int is_monarch(void) -{ - if (in_be32((void *)GPIO1_IR) & GPIO1_NONMONARCH) - return 0; - - return 1; -} - -static int pci_is_66mhz(void) -{ - if (in_be32((void *)GPIO1_IR) & GPIO1_M66EN) - return 1; - return 0; -} - -static int board_revision(void) -{ - return (int)((in_be32((void *)GPIO1_IR) & GPIO1_HWID_MASK) >> 4); -} - -int checkboard(void) -{ - puts("Board: esd GmbH - PMC440"); - - gd->board_type = board_revision(); - printf(", Rev 1.%ld, ", gd->board_type); - - if (!is_monarch()) { - puts("non-"); - } - - printf("monarch, PCI=%s MHz\n", pci_is_66mhz() ? "66" : "33"); - return (0); -} - - -#if defined(CONFIG_PCI) && defined(CONFIG_PCI_PNP) -/* - * Assign interrupts to PCI devices. Some OSs rely on this. - */ -void board_pci_fixup_irq(struct pci_controller *hose, pci_dev_t dev) -{ - unsigned char int_line[] = {IRQ_PCIC, IRQ_PCID, IRQ_PCIA, IRQ_PCIB}; - - pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE, - int_line[PCI_DEV(dev) & 0x03]); -} -#endif - -/* - * pci_target_init - * - * The bootstrap configuration provides default settings for the pci - * inbound map (PIM). But the bootstrap config choices are limited and - * may not be sufficient for a given board. - */ -#if defined(CONFIG_PCI) && defined(CONFIG_SYS_PCI_TARGET_INIT) -void pci_target_init(struct pci_controller *hose) -{ - char *ptmla_str, *ptmms_str; - - /* - * Set up Direct MMIO registers - */ - /* - * PowerPC440EPX PCI Master configuration. - * Map one 1Gig range of PLB/processor addresses to PCI memory space. - * PLB address 0x80000000-0xBFFFFFFF - * ==> PCI address 0x80000000-0xBFFFFFFF - * Use byte reversed out routines to handle endianess. - * Make this region non-prefetchable. - */ - out32r(PCIL0_PMM0MA, 0x00000000); /* PMM0 Mask/Attribute */ - /* - disabled b4 setting */ - out32r(PCIL0_PMM0LA, CONFIG_SYS_PCI_MEMBASE); /* PMM0 Local Address */ - out32r(PCIL0_PMM0PCILA, CONFIG_SYS_PCI_MEMBASE); /* PMM0 PCI Low Addr */ - out32r(PCIL0_PMM0PCIHA, 0x00000000); /* PMM0 PCI High Address */ - out32r(PCIL0_PMM0MA, 0xc0000001); /* 1G + No prefetching, */ - /* and enable region */ - - if (!is_monarch()) { - ptmla_str = getenv("ptm1la"); - ptmms_str = getenv("ptm1ms"); - if(NULL != ptmla_str && NULL != ptmms_str ) { - out32r(PCIL0_PTM1MS, - simple_strtoul(ptmms_str, NULL, 16)); - out32r(PCIL0_PTM1LA, - simple_strtoul(ptmla_str, NULL, 16)); - } else { - /* BAR1: default top 64MB of RAM */ - out32r(PCIL0_PTM1MS, 0xfc000001); - out32r(PCIL0_PTM1LA, 0x0c000000); - } - } else { - /* BAR1: default: complete 256MB RAM */ - out32r(PCIL0_PTM1MS, 0xf0000001); - out32r(PCIL0_PTM1LA, 0x00000000); - } - - ptmla_str = getenv("ptm2la"); /* Local Addr. Reg */ - ptmms_str = getenv("ptm2ms"); /* Memory Size/Attribute */ - if(NULL != ptmla_str && NULL != ptmms_str ) { - out32r(PCIL0_PTM2MS, simple_strtoul(ptmms_str, NULL, 16)); - out32r(PCIL0_PTM2LA, simple_strtoul(ptmla_str, NULL, 16)); - } else { - /* BAR2: default: 4MB FPGA */ - out32r(PCIL0_PTM2MS, 0xffc00001); /* Memory Size/Attribute */ - out32r(PCIL0_PTM2LA, 0xef000000); /* Local Addr. Reg */ - } - - if (is_monarch()) { - /* BAR2: map FPGA registers behind system memory at 1GB */ - pci_hose_write_config_dword(hose, 0, - PCI_BASE_ADDRESS_2, 0x40000008); - } - - /* - * Set up Configuration registers - */ - - /* Program the board's vendor id */ - pci_hose_write_config_word(hose, 0, PCI_SUBSYSTEM_VENDOR_ID, - CONFIG_SYS_PCI_SUBSYS_VENDORID); - - /* disabled for PMC405 backward compatibility */ - /* Configure command register as bus master */ - /* pci_write_config_word(0, PCI_COMMAND, PCI_COMMAND_MASTER); */ - - - /* 240nS PCI clock */ - pci_hose_write_config_word(hose, 0, PCI_LATENCY_TIMER, 1); - - /* No error reporting */ - pci_hose_write_config_word(hose, 0, PCI_ERREN, 0); - - if (!is_monarch()) { - /* Program the board's subsystem id/classcode */ - pci_hose_write_config_word(hose, 0, PCI_SUBSYSTEM_ID, - CONFIG_SYS_PCI_SUBSYS_ID_NONMONARCH); - pci_hose_write_config_word(hose, 0, PCI_CLASS_SUB_CODE, - CONFIG_SYS_PCI_CLASSCODE_NONMONARCH); - - /* PCI configuration done: release ERREADY */ - out_be32((void *)GPIO1_OR, - in_be32((void *)GPIO1_OR) | GPIO1_PPC_EREADY); - out_be32((void *)GPIO1_TCR, - in_be32((void *)GPIO1_TCR) | GPIO1_PPC_EREADY); - } else { - /* Program the board's subsystem id/classcode */ - pci_hose_write_config_word(hose, 0, PCI_SUBSYSTEM_ID, - CONFIG_SYS_PCI_SUBSYS_ID_MONARCH); - pci_hose_write_config_word(hose, 0, PCI_CLASS_SUB_CODE, - CONFIG_SYS_PCI_CLASSCODE_MONARCH); - } - - /* enable host configuration */ - pci_hose_write_config_dword(hose, 0, PCI_BRDGOPT2, 0x00000101); -} -#endif /* defined(CONFIG_PCI) && defined(CONFIG_SYS_PCI_TARGET_INIT) */ - -/* - * Override weak default pci_master_init() - */ -#if defined(CONFIG_PCI) && defined(CONFIG_SYS_PCI_MASTER_INIT) -void pci_master_init(struct pci_controller *hose) -{ - /* - * Only configure the master in monach mode - */ - if (is_monarch()) - __pci_master_init(hose); -} -#endif /* defined(CONFIG_PCI) && defined(CONFIG_SYS_PCI_MASTER_INIT) */ - -static void wait_for_pci_ready(void) -{ - if (!(in_be32((void *)GPIO1_IR) & GPIO1_PPC_EREADY)) { - printf("PCI: Waiting for EREADY (CTRL-C to skip) ... "); - while (1) { - if (ctrlc()) { - puts("abort\n"); - break; - } - if (in_be32((void *)GPIO1_IR) & GPIO1_PPC_EREADY) { - printf("done\n"); - break; - } - } - } -} - -/* - * Override weak is_pci_host() - * - * This routine is called to determine if a pci scan should be - * performed. With various hardware environments (especially cPCI and - * PPMC) it's insufficient to depend on the state of the arbiter enable - * bit in the strap register, or generic host/adapter assumptions. - * - * Rather than hard-code a bad assumption in the general 440 code, the - * 440 pci code requires the board to decide at runtime. - * - * Return 0 for adapter mode, non-zero for host (monarch) mode. - */ -#if defined(CONFIG_PCI) -int is_pci_host(struct pci_controller *hose) -{ - char *s = getenv("pciscan"); - if (s == NULL) - if (is_monarch()) { - wait_for_pci_ready(); - return 1; - } else - return 0; - else if (!strcmp(s, "yes")) - return 1; - - return 0; -} -#endif /* defined(CONFIG_PCI) */ - -#ifdef CONFIG_RESET_PHY_R -static int pmc440_setup_vsc8601(char *devname, int phy_addr, - unsigned short behavior, unsigned short method) -{ - /* adjust LED behavior */ - if (miiphy_write(devname, phy_addr, 0x1f, 0x0001) != 0) { - printf("Phy%d: register write access failed\n", phy_addr); - return -1; - } - - miiphy_write(devname, phy_addr, 0x11, 0x0010); - miiphy_write(devname, phy_addr, 0x11, behavior); - miiphy_write(devname, phy_addr, 0x10, method); - miiphy_write(devname, phy_addr, 0x1f, 0x0000); - - return 0; -} - -static int pmc440_setup_ksz9031(char *devname, int phy_addr) -{ - unsigned short id1, id2; - - if (miiphy_read(devname, phy_addr, 2, &id1) || - miiphy_read(devname, phy_addr, 3, &id2)) { - printf("Phy%d: cannot read id\n", phy_addr); - return -1; - } - - if ((id1 != 0x0022) || ((id2 & 0xfff0) != 0x1620)) { - printf("Phy%d: unexpected id\n", phy_addr); - return -1; - } - - /* MMD 2.08: adjust tx_clk pad skew */ - miiphy_write(devname, phy_addr, 0x0d, 2); - miiphy_write(devname, phy_addr, 0x0e, 8); - miiphy_write(devname, phy_addr, 0x0d, 0x4002); - miiphy_write(devname, phy_addr, 0x0e, 0xf | (0x17 << 5)); - - return 0; -} - -void reset_phy(void) -{ - char *s; - unsigned short val_method, val_behavior; - - if (gd->board_type < 4) { - /* special LED setup for NGCC/CANDES */ - s = getenv("bd_type"); - if (s && ((!strcmp(s, "ngcc")) || (!strcmp(s, "candes")))) { - val_method = 0x0e0a; - val_behavior = 0x0cf2; - } else { - /* PMC440 standard type */ - val_method = 0x0e10; - val_behavior = 0x0cf0; - } - - /* boards up to rev. 1.3 use Vitesse VSC8601 phys */ - pmc440_setup_vsc8601("ppc_4xx_eth0", CONFIG_PHY_ADDR, - val_method, val_behavior); - pmc440_setup_vsc8601("ppc_4xx_eth1", CONFIG_PHY1_ADDR, - val_method, val_behavior); - } else { - /* rev. 1.4 uses a Micrel KSZ9031 */ - pmc440_setup_ksz9031("ppc_4xx_eth0", CONFIG_PHY_ADDR); - pmc440_setup_ksz9031("ppc_4xx_eth1", CONFIG_PHY1_ADDR); - } -} -#endif - -#if defined(CONFIG_SYS_EEPROM_WREN) -/* - * Input: <dev_addr> I2C address of EEPROM device to enable. - * <state> -1: deliver current state - * 0: disable write - * 1: enable write - * Returns: -1: wrong device address - * 0: dis-/en- able done - * 0/1: current state if <state> was -1. - */ -int eeprom_write_enable(unsigned dev_addr, int state) -{ - if ((CONFIG_SYS_I2C_EEPROM_ADDR != dev_addr) && - (CONFIG_SYS_I2C_BOOT_EEPROM_ADDR != dev_addr)) { - return -1; - } else { - switch (state) { - case 1: - /* Enable write access, clear bit GPIO_SINT2. */ - out_be32((void *)GPIO0_OR, - in_be32((void *)GPIO0_OR) & ~GPIO0_EP_EEP); - state = 0; - break; - case 0: - /* Disable write access, set bit GPIO_SINT2. */ - out_be32((void *)GPIO0_OR, - in_be32((void *)GPIO0_OR) | GPIO0_EP_EEP); - state = 0; - break; - default: - /* Read current status back. */ - state = (0 == (in_be32((void *)GPIO0_OR) - & GPIO0_EP_EEP)); - break; - } - } - return state; -} -#endif /* #if defined(CONFIG_SYS_EEPROM_WREN) */ - -#define CONFIG_SYS_BOOT_EEPROM_PAGE_WRITE_BITS 3 -int bootstrap_eeprom_write(unsigned dev_addr, unsigned offset, - uchar *buffer, unsigned cnt) -{ - unsigned end = offset + cnt; - unsigned blk_off; - int rcode = 0; - -#if defined(CONFIG_SYS_EEPROM_WREN) - eeprom_write_enable(dev_addr, 1); -#endif - /* - * Write data until done or would cross a write page boundary. - * We must write the address again when changing pages - * because the address counter only increments within a page. - */ - while (offset < end) { - unsigned alen, len; - unsigned maxlen; - uchar addr[2]; - - blk_off = offset & 0xFF; /* block offset */ - - addr[0] = offset >> 8; /* block number */ - addr[1] = blk_off; /* block offset */ - alen = 2; - addr[0] |= dev_addr; /* insert device address */ - - len = end - offset; - -#define BOOT_EEPROM_PAGE_SIZE (1 << CONFIG_SYS_BOOT_EEPROM_PAGE_WRITE_BITS) -#define BOOT_EEPROM_PAGE_OFFSET(x) ((x) & (BOOT_EEPROM_PAGE_SIZE - 1)) - - maxlen = BOOT_EEPROM_PAGE_SIZE - - BOOT_EEPROM_PAGE_OFFSET(blk_off); - if (maxlen > I2C_RXTX_LEN) - maxlen = I2C_RXTX_LEN; - - if (len > maxlen) - len = maxlen; - - if (i2c_write (addr[0], offset, alen-1, buffer, len) != 0) - rcode = 1; - - buffer += len; - offset += len; - -#if defined(CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS) - udelay(CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS * 1000); -#endif - } -#if defined(CONFIG_SYS_EEPROM_WREN) - eeprom_write_enable(dev_addr, 0); -#endif - return rcode; -} - -static int bootstrap_eeprom_read(unsigned dev_addr, unsigned offset, - uchar *buffer, unsigned cnt) -{ - unsigned end = offset + cnt; - unsigned blk_off; - int rcode = 0; - - /* - * Read data until done or would cross a page boundary. - * We must write the address again when changing pages - * because the next page may be in a different device. - */ - while (offset < end) { - unsigned alen, len; - unsigned maxlen; - uchar addr[2]; - - blk_off = offset & 0xFF; /* block offset */ - - addr[0] = offset >> 8; /* block number */ - addr[1] = blk_off; /* block offset */ - alen = 2; - - addr[0] |= dev_addr; /* insert device address */ - - len = end - offset; - - maxlen = 0x100 - blk_off; - if (maxlen > I2C_RXTX_LEN) - maxlen = I2C_RXTX_LEN; - if (len > maxlen) - len = maxlen; - - if (i2c_read (addr[0], offset, alen-1, buffer, len) != 0) - rcode = 1; - buffer += len; - offset += len; - } - - return rcode; -} - -#if defined(CONFIG_USB_OHCI_NEW) && defined(CONFIG_SYS_USB_OHCI_BOARD_INIT) -int board_usb_init(int index, enum usb_init_type init) -{ - char *act = getenv("usbact"); - int i; - - if ((act == NULL || strcmp(act, "host") == 0) && - !(in_be32((void *)GPIO0_IR) & GPIO0_USB_PRSNT)) - /* enable power on USB socket */ - out_be32((void *)GPIO1_OR, - in_be32((void *)GPIO1_OR) & ~GPIO1_USB_PWR_N); - - for (i=0; i<1000; i++) - udelay(1000); - - return 0; -} - -int usb_board_stop(void) -{ - /* disable power on USB socket */ - out_be32((void *)GPIO1_OR, in_be32((void *)GPIO1_OR) | GPIO1_USB_PWR_N); - return 0; -} - -int board_usb_cleanup(int index, enum usb_init_type init) -{ - return usb_board_stop(); -} -#endif /* defined(CONFIG_USB_OHCI) && defined(CONFIG_SYS_USB_OHCI_BOARD_INIT) */ - -#ifdef CONFIG_OF_BOARD_SETUP -int ft_board_setup(void *blob, bd_t *bd) -{ - int rc; - - __ft_board_setup(blob, bd); - - /* - * Disable PCI in non-monarch mode. - */ - if (!is_monarch()) { - rc = fdt_find_and_setprop(blob, "/plb/pci@1ec000000", "status", - "disabled", sizeof("disabled"), 1); - if (rc) { - printf("Unable to update property status in PCI node, "); - printf("err=%s\n", fdt_strerror(rc)); - } - } - - return 0; -} -#endif /* CONFIG_OF_BOARD_SETUP */ diff --git a/board/esd/pmc440/pmc440.h b/board/esd/pmc440/pmc440.h deleted file mode 100644 index 84e0b1f46c..0000000000 --- a/board/esd/pmc440/pmc440.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * (C) Copyright 2007-2008 - * Matthias Fuchs, esd gmbh, matthias.fuchs@esd-electronics.com. - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#ifndef __PMC440_H__ -#define __PMC440_H__ - -/* - * GPIOs - */ -#define GPIO1_INTA_FAKE (0x80000000 >> (45-32)) /* GPIO45 OD */ -#define GPIO1_NONMONARCH (0x80000000 >> (63-32)) /* GPIO63 I */ -#define GPIO1_PPC_EREADY (0x80000000 >> (62-32)) /* GPIO62 I/O */ -#define GPIO1_M66EN (0x80000000 >> (61-32)) /* GPIO61 I */ -#define GPIO1_POST_N (0x80000000 >> (60-32)) /* GPIO60 O */ -#define GPIO1_IOEN_N (0x80000000 >> (50-32)) /* GPIO50 O */ -#define GPIO1_HWID_MASK (0xf0000000 >> (56-32)) /* GPIO56..59 I */ - -#define GPIO1_USB_PWR_N (0x80000000 >> (32-32)) /* GPIO32 I */ -#define GPIO0_LED_RUN_N (0x80000000 >> 30) /* GPIO30 O */ -#define GPIO0_EP_EEP (0x80000000 >> 23) /* GPIO23 O */ -#define GPIO0_USB_ID (0x80000000 >> 21) /* GPIO21 I */ -#define GPIO0_USB_PRSNT (0x80000000 >> 20) /* GPIO20 I */ - -/* - * FPGA programming pin configuration - */ -#define GPIO1_FPGA_PRG (0x80000000 >> (53-32)) /* FPGA program pin (ppc output) */ -#define GPIO1_FPGA_CLK (0x80000000 >> (51-32)) /* FPGA clk pin (ppc output) */ -#define GPIO1_FPGA_DATA (0x80000000 >> (52-32)) /* FPGA data pin (ppc output) */ -#define GPIO1_FPGA_DONE (0x80000000 >> (55-32)) /* FPGA done pin (ppc input) */ -#define GPIO1_FPGA_INIT (0x80000000 >> (54-32)) /* FPGA init pin (ppc input) */ -#define GPIO0_FPGA_FORCEINIT (0x80000000 >> 27) /* low: force INIT# low */ - -/* - * FPGA interface - */ -#define FPGA_BA CONFIG_SYS_FPGA_BASE0 -#define FPGA_OUT32(p,v) out_be32(((void*)(p)), (v)) -#define FPGA_IN32(p) in_be32((void*)(p)) -#define FPGA_SETBITS(p,v) out_be32(((void*)(p)), in_be32((void*)(p)) | (v)) -#define FPGA_CLRBITS(p,v) out_be32(((void*)(p)), in_be32((void*)(p)) & ~(v)) - -struct pmc440_fifo_s { - u32 data; - u32 ctrl; -}; - -/* fifo ctrl register */ -#define FIFO_IE (1 << 15) -#define FIFO_OVERFLOW (1 << 10) -#define FIFO_EMPTY (1 << 9) -#define FIFO_FULL (1 << 8) -#define FIFO_LEVEL_MASK 0x000000ff - -#define FIFO_COUNT 4 - -struct pmc440_fpga_s { - u32 ctrla; - u32 status; - u32 ctrlb; - u32 pad1[0x40 / sizeof(u32) - 3]; - u32 irig_time; /* offset: 0x0040 */ - u32 irig_tod; - u32 irig_cf; - u32 pad2; - u32 irig_rx_time; /* offset: 0x0050 */ - u32 pad3[3]; - u32 hostctrl; /* offset: 0x0060 */ - u32 pad4[0x20 / sizeof(u32) - 1]; - struct pmc440_fifo_s fifo[FIFO_COUNT]; /* 0x0080..0x009f */ -}; - -typedef struct pmc440_fpga_s pmc440_fpga_t; - -/* ctrl register */ -#define CTRL_HOST_IE (1 << 8) - -/* outputs */ -#define RESET_EN (1 << 31) -#define CLOCK_EN (1 << 30) -#define RESET_OUT (1 << 19) -#define CLOCK_OUT (1 << 22) -#define RESET_OUT (1 << 19) -#define IRIGB_R_OUT (1 << 14) - -/* status register */ -#define STATUS_VERSION_SHIFT 24 -#define STATUS_VERSION_MASK 0xff000000 -#define STATUS_HWREV_SHIFT 20 -#define STATUS_HWREV_MASK 0x00f00000 - -#define STATUS_CAN_ISF (1 << 11) -#define STATUS_CSTM_ISF (1 << 10) -#define STATUS_FIFO_ISF (1 << 9) -#define STATUS_HOST_ISF (1 << 8) - -/* inputs */ -#define RESET_IN (1 << 0) -#define CLOCK_IN (1 << 1) -#define IRIGB_R_IN (1 << 5) - -/* hostctrl register */ -#define HOSTCTRL_PMCRSTOUT_GATE (1 << 17) -#define HOSTCTRL_PMCRSTOUT_FLAG (1 << 16) -#define HOSTCTRL_CSTM1IE_GATE (1 << 7) -#define HOSTCTRL_CSTM1IW_FLAG (1 << 6) -#define HOSTCTRL_CSTM0IE_GATE (1 << 5) -#define HOSTCTRL_CSTM0IW_FLAG (1 << 4) -#define HOSTCTRL_FIFOIE_GATE (1 << 3) -#define HOSTCTRL_FIFOIE_FLAG (1 << 2) -#define HOSTCTRL_HCINT_GATE (1 << 1) -#define HOSTCTRL_HCINT_FLAG (1 << 0) - -#define NGCC_CTRL_BASE (CONFIG_SYS_FPGA_BASE0 + 0x80000) -#define NGCC_CTRL_FPGARST_N (1 << 2) - -/* - * FPGA to PPC interrupt - */ -#define IRQ0_FPGA (32+28) /* UIC1 - FPGA internal */ -#define IRQ1_FPGA (32+30) /* UIC1 - custom module */ -#define IRQ2_FPGA (64+ 3) /* UIC2 - custom module / CAN */ -#define IRQ_ETH0 (64+ 4) /* UIC2 */ -#define IRQ_ETH1 ( 27) /* UIC0 */ -#define IRQ_RTC (64+ 0) /* UIC2 */ -#define IRQ_PCIA (64+ 1) /* UIC2 */ -#define IRQ_PCIB (32+18) /* UIC1 */ -#define IRQ_PCIC (32+19) /* UIC1 */ -#define IRQ_PCID (32+20) /* UIC1 */ - -#endif /* __PMC440_H__ */ diff --git a/board/esd/pmc440/sdram.c b/board/esd/pmc440/sdram.c deleted file mode 100644 index c379e7723d..0000000000 --- a/board/esd/pmc440/sdram.c +++ /dev/null @@ -1,140 +0,0 @@ -/* - * (C) Copyright 2009 - * Matthias Fuchs, esd gmbh, matthias.fuchs@esd.eu - * - * (C) Copyright 2006 - * Sylvie Gohl, AMCC/IBM, gohl.sylvie@fr.ibm.com - * Jacqueline Pira-Ferriol, AMCC/IBM, jpira-ferriol@fr.ibm.com - * Thierry Roman, AMCC/IBM, thierry_roman@fr.ibm.com - * Alain Saurel, AMCC/IBM, alain.saurel@fr.ibm.com - * Robert Snyder, AMCC/IBM, rob.snyder@fr.ibm.com - * - * (C) Copyright 2006-2007 - * Stefan Roese, DENX Software Engineering, sr@denx.de. - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -/* define DEBUG for debug output */ -#undef DEBUG - -#include <common.h> -#include <asm/processor.h> -#include <asm/io.h> -#include <asm/mmu.h> -#include <asm/ppc440.h> - -DECLARE_GLOBAL_DATA_PTR; - -extern int denali_wait_for_dlllock(void); -extern void denali_core_search_data_eye(void); - -struct sdram_conf_s { - ulong size; - int rows; - int banks; -}; - -struct sdram_conf_s sdram_conf[] = { - {(1024 << 20), 14, 8}, /* 1GByte: 4x2GBit, 14x10, 8 banks */ - {(512 << 20), 13, 8}, /* 512MByte: 4x1GBit, 13x10, 8 banks */ - {(256 << 20), 13, 4}, /* 256MByte: 4x512MBit, 13x10, 4 banks */ -}; - -/* - * dram_init -- 440EPx's DDR controller is a DENALI Core - */ -int initdram_by_rb(int rows, int banks) -{ - ulong speed = get_bus_freq(0); - - mtsdram(DDR0_02, 0x00000000); - - mtsdram(DDR0_00, 0x0000190A); - mtsdram(DDR0_01, 0x01000000); - mtsdram(DDR0_03, 0x02030602); - mtsdram(DDR0_04, 0x0A020200); - mtsdram(DDR0_05, 0x02020308); - mtsdram(DDR0_06, 0x0102C812); - mtsdram(DDR0_07, 0x000D0100); - mtsdram(DDR0_08, 0x02430001); - mtsdram(DDR0_09, 0x00011D5F); - mtsdram(DDR0_10, 0x00000100); - mtsdram(DDR0_11, 0x0027C800); - mtsdram(DDR0_12, 0x00000003); - mtsdram(DDR0_14, 0x00000000); - mtsdram(DDR0_17, 0x19000000); - mtsdram(DDR0_18, 0x19191919); - mtsdram(DDR0_19, 0x19191919); - mtsdram(DDR0_20, 0x0B0B0B0B); - mtsdram(DDR0_21, 0x0B0B0B0B); - mtsdram(DDR0_22, 0x00267F0B); - mtsdram(DDR0_23, 0x00000000); - mtsdram(DDR0_24, 0x01010002); - if (speed > 133333334) - mtsdram(DDR0_26, 0x5B26050C); - else - mtsdram(DDR0_26, 0x5B260408); - mtsdram(DDR0_27, 0x0000682B); - mtsdram(DDR0_28, 0x00000000); - mtsdram(DDR0_31, 0x00000000); - - mtsdram(DDR0_42, - DDR0_42_ADDR_PINS_DECODE(14 - rows) | - 0x00000006); - mtsdram(DDR0_43, - DDR0_43_EIGHT_BANK_MODE_ENCODE(8 == banks ? 1 : 0) | - 0x030A0200); - - mtsdram(DDR0_44, 0x00000003); - mtsdram(DDR0_02, 0x00000001); - - denali_wait_for_dlllock(); - -#ifdef CONFIG_DDR_DATA_EYE - /* - * Perform data eye search if requested. - */ - denali_core_search_data_eye(); -#endif - /* - * Clear possible errors resulting from data-eye-search. - * If not done, then we could get an interrupt later on when - * exceptions are enabled. - */ - set_mcsr(get_mcsr()); - - return 0; -} - -int dram_init(void) -{ - phys_size_t size; - int n; - - /* go through supported memory configurations */ - for (n = 0; n < ARRAY_SIZE(sdram_conf); n++) { - size = sdram_conf[n].size; - - /* program TLB entries */ - program_tlb(0, CONFIG_SYS_SDRAM_BASE, size, - TLB_WORD2_I_ENABLE); - - /* - * setup denali core - */ - initdram_by_rb(sdram_conf[n].rows, - sdram_conf[n].banks); - - /* check for suitable configuration */ - if (get_ram_size(CONFIG_SYS_SDRAM_BASE, size) == size) { - gd->ram_size = size; - return 0; - } - - /* delete TLB entries */ - remove_tlb(CONFIG_SYS_SDRAM_BASE, size); - } - - return -ENXIO; -} diff --git a/board/esd/vom405/Kconfig b/board/esd/vom405/Kconfig deleted file mode 100644 index ecdf8c9fea..0000000000 --- a/board/esd/vom405/Kconfig +++ /dev/null @@ -1,12 +0,0 @@ -if TARGET_VOM405 - -config SYS_BOARD - default "vom405" - -config SYS_VENDOR - default "esd" - -config SYS_CONFIG_NAME - default "VOM405" - -endif diff --git a/board/esd/vom405/MAINTAINERS b/board/esd/vom405/MAINTAINERS deleted file mode 100644 index 385f60a3a3..0000000000 --- a/board/esd/vom405/MAINTAINERS +++ /dev/null @@ -1,6 +0,0 @@ -VOM405 BOARD -M: Matthias Fuchs <matthias.fuchs@esd-electronics.com> -S: Maintained -F: board/esd/vom405/ -F: include/configs/VOM405.h -F: configs/VOM405_defconfig diff --git a/board/esd/vom405/Makefile b/board/esd/vom405/Makefile deleted file mode 100644 index 7cf5c0224c..0000000000 --- a/board/esd/vom405/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -# -# (C) Copyright 2000-2006 -# Wolfgang Denk, DENX Software Engineering, wd@denx.de. -# -# SPDX-License-Identifier: GPL-2.0+ -# - -# Objects for Xilinx JTAG programming (CPLD) -CPLD = ../common/xilinx_jtag/lenval.o \ - ../common/xilinx_jtag/micro.o \ - ../common/xilinx_jtag/ports.o - -obj-y = vom405.o flash.o ../common/misc.o $(CPLD) diff --git a/board/esd/vom405/flash.c b/board/esd/vom405/flash.c deleted file mode 100644 index 23e81642e0..0000000000 --- a/board/esd/vom405/flash.c +++ /dev/null @@ -1,85 +0,0 @@ -/* - * (C) Copyright 2001 - * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <common.h> -#include <asm/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) -{ - unsigned long size_b0; - int i; - uint pbcr; - unsigned long base_b0; - int size_val = 0; - - /* Init: no FLASHes known */ - for (i=0; i<CONFIG_SYS_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(EBC0_CFGADDR, PB0CR); - pbcr = mfdcr(EBC0_CFGDATA); - mtdcr(EBC0_CFGADDR, 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(EBC0_CFGDATA, pbcr); - - /* Monitor protection ON by default */ - (void)flash_protect(FLAG_PROTECT_SET, - -CONFIG_SYS_MONITOR_LEN, - 0xffffffff, - &flash_info[0]); - - flash_info[0].size = size_b0; - - return (size_b0); -} diff --git a/board/esd/vom405/vom405.c b/board/esd/vom405/vom405.c deleted file mode 100644 index 7de6f6654b..0000000000 --- a/board/esd/vom405/vom405.c +++ /dev/null @@ -1,148 +0,0 @@ -/* - * (C) Copyright 2001-2004 - * Stefan Roese, esd gmbh germany, stefan.roese@esd-electronics.com - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <common.h> -#include <asm/processor.h> -#include <asm/io.h> -#include <command.h> -#include <malloc.h> -#include <sja1000.h> - -DECLARE_GLOBAL_DATA_PTR; - -extern void lxt971_no_sleep(void); - -/* - * generate a short spike on the CAN tx line - * to bring the couplers in sync - */ -void init_coupler(u32 addr) -{ - struct sja1000_basic_s *ctrl = (struct sja1000_basic_s *)addr; - - /* reset */ - out_8(&ctrl->cr, CR_RR); - - /* dominant */ - out_8(&ctrl->btr0, 0x00); /* btr setup is required */ - out_8(&ctrl->btr1, 0x14); /* we use 1Mbit/s */ - out_8(&ctrl->oc, OC_TP1 | OC_TN1 | OC_POL1 | - OC_TP0 | OC_TN0 | OC_POL0 | OC_MODE1); - out_8(&ctrl->cr, 0x00); - - /* delay */ - in_8(&ctrl->cr); - in_8(&ctrl->cr); - in_8(&ctrl->cr); - in_8(&ctrl->cr); - - /* reset */ - out_8(&ctrl->cr, CR_RR); -} - -int board_early_init_f (void) -{ - /* - * 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(UIC0SR, 0xFFFFFFFF); /* clear all ints */ - mtdcr(UIC0ER, 0x00000000); /* disable all ints */ - mtdcr(UIC0CR, 0x00000000); /* set all to be non-critical*/ - mtdcr(UIC0PR, 0xFFFFFF80); /* set int polarities */ - mtdcr(UIC0TR, 0x10000000); /* set int trigger levels */ - mtdcr(UIC0VCR, 0x00000001); /* set vect base=0,INT0 highest priority*/ - mtdcr(UIC0SR, 0xFFFFFFFF); /* clear all ints */ - - /* - * EBC Configuration Register: set ready timeout to 512 ebc-clks -> ca. 15 us - */ - mtebc (EBC0_CFG, 0xa8400000); /* ebc always driven */ - - /* - * Reset CPLD via GPIO12 (CS3) pin - */ - out_be32((void *)GPIO0_OR, - in_be32((void *)GPIO0_OR) & ~(0x80000000 >> 12)); - udelay(1000); /* wait 1ms */ - out_be32((void *)GPIO0_OR, - in_be32((void *)GPIO0_OR) | (0x80000000 >> 12)); - udelay(1000); /* wait 1ms */ - - return 0; -} - -int misc_init_r (void) -{ - /* adjust flash start and offset */ - gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize; - gd->bd->bi_flashoffset = 0; - - /* - * Init magnetic coupler - */ - if (!getenv("noinitcoupler")) - init_coupler(CAN_BA); - - return (0); -} - -/* - * Check Board Identity: - */ -int checkboard (void) -{ - char str[64]; - int i = getenv_f("serial#", str, sizeof(str)); - int flashcnt; - int delay; - u8 *led_reg = (u8 *)(CAN_BA + 0x1000); - - puts ("Board: "); - - if (i == -1) { - puts ("### No HW ID - assuming VOM405"); - } else { - puts(str); - } - - printf(" (PLD-Version=%02d)\n", in_8(led_reg)); - - /* - * Flash LEDs - */ - for (flashcnt = 0; flashcnt < 3; flashcnt++) { - out_8(led_reg, 0x40); /* LED_B..D off */ - for (delay = 0; delay < 100; delay++) - udelay(1000); - out_8(led_reg, 0x47); /* LED_B..D on */ - for (delay = 0; delay < 50; delay++) - udelay(1000); - } - out_8(led_reg, 0x40); - - return 0; -} - -void reset_phy(void) -{ -#ifdef CONFIG_LXT971_NO_SLEEP - - /* - * Disable sleep mode in LXT971 - */ - lxt971_no_sleep(); -#endif -} |