Mercurial > ecos
changeset 134:d2f49caf9e38 ecos-sw-2000-11-03
Merge from eCos master repository on 2000-11-03-09:00:49-GMT
line wrap: on
line diff
--- a/packages/ChangeLog +++ b/packages/ChangeLog @@ -1,7 +1,20 @@ +2000-11-01 Jesper Skov <jskov@redhat.com> + + * ecos.db: Added cq7750 target and SH3/SH4 variant packages. Moved + EDK7708 package. + +2000-10-25 Drew Moseley <dmoseley@redhat.com> + + * ecos.db: Add support for SA1100 Multimedia + 2000-10-20 Gary Thomas <gthomas@redhat.com> * ecos.db: Add FLASH drivers for PowerPC/MBX. +2000-10-20 Gary Thomas <gthomas@redhat.com> + + * ecos.db: Include FLASH drivers for all Cirrus Logic targets. + 2000-09-15 Jesper Skov <jskov@redhat.com> * ecos.db: Made PID use generic 16x5x driver. @@ -9,6 +22,7 @@ 2000-09-15 Jesper Skov <jskov@redhat.c 2000-09-14 Jesper Skov <jskov@redhat.com> * ecos.db: Added generic 16x5x driver package. + * ecos.db: Use generic 16x5x driver for REF4955. 2000-09-06 Jesper Skov <jskov@redhat.com> @@ -98,6 +112,10 @@ 2000-06-22 Jesper Skov <jskov@redhat.c * ecos.db: Add CYGPKG_SNMPLIB and CYGPKG_SNMPAGENT. +2000-06-06 Jesper Skov <jskov@redhat.com> + + * ecos.db: Removed REF4955 watchdog. Isn't supported on the board. + 2000-06-05 John Dallaway <jld@redhat.com> * ecos.db: @@ -128,10 +146,19 @@ 2000-05-25 John Dallaway <jld@redhat.c * ecos.db: Tidy V850-related display strings. +2000-05-25 Jesper Skov <jskov@redhat.com> + + * ecos.db: Added REF4955 serial driver package. + Added wallclock driver package. + 2000-05-16 Nick Garnett <nickg@cygnus.co.uk> * ecos.db: Fixed naming bug in CYGPKG_LIBC_SETJMP entry. +2000-05-10 Jesper Skov <jskov@redhat.com> + + * ecos.db: Added tx49 related packages. + 2000-04-26 Jesper Skov <jskov@redhat.com> * ecos.db: ceb_v850 - include serial driver.
--- a/packages/NEWS +++ b/packages/NEWS @@ -1,3 +1,11 @@ +* Added a port to the Toshiba MIPS TX49 chip, with the REF4955 reference + platform. This includes serial device driver and wallclock device driver + support. +* PowerPC 40x variant support added. +* Added SH4 support. Split SH architecture HAL into variants in the process. +* Added SH4/CQ7750 platform support [still untested] +* Port to Intel SA1100 Multimedia evalulation board added, including FLASH + driver and RedBoot support * FLASH driver added for PowerPC/MBX * sigsetjmp() and siglongjmp() added * A choice of getcwd() implementations have been added
--- a/packages/compat/posix/current/ChangeLog +++ b/packages/compat/posix/current/ChangeLog @@ -1,3 +1,25 @@ +2000-11-02 Jonathan Larmour <jlarmour@redhat.com> + + * src/signal.cxx (sigtimedwait): return signal number on success, + not 0 + (SIGNAL_RETURN_VALUE): New macro for returning from functions with + valid non-zero returns + (sigwaitinfo): Pass on sigtimedwait result with SIGNAL_RETURN_VALUE + macro as it may return the signal number. + +2000-11-01 Jonathan Larmour <jlarmour@redhat.com> + + * src/signal.cxx (sigtimedwait): Check for SIGALRMs as a special + case when looping as it won't have been set pending if it was + masked. + (check_sigalarm): New function extracted from the posix signal ASR + (sigalrm_action): Unconditionally wake up threads waiting in sigwait + so that they can check for pending SIGALRMs even if they were + masked. + (cyg_deliver_signals): Handle SIG_DFL signals properly, and check + for bad signal handlers. + (cyg_posix_signal_start): Initialize default signal actions to SIG_DFL + 2000-10-27 Jesper Skov <jskov@redhat.com> * tests/signal2.c (cause_illegal_access): Don't loop forever.
--- a/packages/compat/posix/current/src/signal.cxx +++ b/packages/compat/posix/current/src/signal.cxx @@ -47,6 +47,7 @@ #include <pkgconf/hal.h> #include <pkgconf/kernel.h> #include <pkgconf/posix.h> +#include <pkgconf/isoinfra.h> #include <cyg/kernel/ktypes.h> // base kernel types #include <cyg/infra/cyg_trac.h> // tracing macros @@ -80,6 +81,13 @@ CYG_MACRO_START return __retval; \ CYG_MACRO_END +// Similarly for functions that have valid non-zero returns +#define SIGNAL_RETURN_VALUE(val) \ +CYG_MACRO_START \ + CYG_REPORT_RETVAL( val ); \ + return val; \ +CYG_MACRO_END + // Range check on a signal value. #define SIGNAL_VALID(_sig_) (((_sig_) > 0) && ((_sig_) < ((int)sizeof(sigset_t)*8))) @@ -149,6 +157,12 @@ externC void cyg_posix_signal_start() siginfo[i].next = siginfo_next; siginfo_next = &siginfo[i]; } + + // initialize all signal actions to SIG_DFL + for ( unsigned int i=0; i<(sizeof(sigstate)/sizeof(signal_state)); i++ ) + { + sigstate[i].sa.sa_handler = SIG_DFL; + } // Clear the pending signal set sigemptyset( &sig_pending ); @@ -283,8 +297,7 @@ cyg_bool cyg_deliver_signals() signal_state *ss = &sigstate[signo]; sigset_t sigbit = 1L<<signo; - if( ss->sa.sa_handler != SIG_DFL && - ss->sa.sa_handler != SIG_IGN ) + if( ss->sa.sa_handler != SIG_IGN ) { sigset_t oldmask = self->sigmask; siginfo_t lsi; @@ -348,12 +361,23 @@ cyg_bool cyg_deliver_signals() if( ss->sa.sa_flags & SA_SIGINFO ) { // A sigaction delivery - + CYG_CHECK_FUNC_PTR( ss->sa.sa_sigaction, + "Bad sa_sigaction signal handler" ); ss->sa.sa_sigaction( signo, &lsi, NULL ); } + if ( ss->sa.sa_handler == SIG_DFL ) + { + // FIXME: should do something better here +#if CYGINT_ISO_EXIT + _exit( -signo ); +#endif + CYG_FAIL("Unhandled POSIX signal"); + } else { // This is a standard signal delivery. + CYG_CHECK_FUNC_PTR( ss->sa.sa_handler, + "Bad sa_handler signal handler" ); ss->sa.sa_handler( signo ); } @@ -386,14 +410,18 @@ static void sigalrm_action( Cyg_Alarm *a sigalrm_pending = true; sigemptyset( &mask ); sigaddset( &mask, SIGALRM ); + // Wake up any threads in sigsuspend() and sigwait() in case they + // are waiting for an alarm, and would have SIGALRM masked + signal_sigwait.broadcast(); + cyg_posix_pthread_release_thread( &mask ); } // ------------------------------------------------------------------------- -// signal ASR function. This is called from the general POSIX ASR to -// deal with any signal related issues. +// Check for SIGALRMs. This is called from the ASR and sigtimedwait() +// as alarms need to be handled as a special case. -externC void cyg_posix_signal_asr(pthread_info *self) +static __inline__ void check_sigalarm(void) { // If there is a pending SIGALRM, generate it if( sigalrm_pending ) @@ -409,12 +437,20 @@ externC void cyg_posix_signal_asr(pthrea // generate the signal cyg_sigqueue( &sev, SI_USER ); } +} + +// ------------------------------------------------------------------------- +// signal ASR function. This is called from the general POSIX ASR to +// deal with any signal related issues. + +externC void cyg_posix_signal_asr(pthread_info *self) +{ + check_sigalarm(); // Now call cyg_deliver_signals() to see if we can // handle any signals now. cyg_deliver_signals(); - } //========================================================================== @@ -560,7 +596,7 @@ externC int sigaction (int sig, const s // ------------------------------------------------------------------------- // Queue signal to process with value. -externC int sigqueue (pid_t pid, int sig, const union sigval value) +externC int sigqueue (pid_t pid, int sig, const union sigval value) { SIGNAL_ENTRY(); @@ -715,7 +751,7 @@ externC int sigwaitinfo (const sigset_t int ret = sigtimedwait( set, info, NULL ); - SIGNAL_RETURN(ret); + SIGNAL_RETURN_VALUE(ret); } // ------------------------------------------------------------------------- @@ -757,6 +793,10 @@ externC int sigtimedwait (const sigset_ } } else signal_sigwait.wait(); + + // Special case check for SIGALRM since the fact SIGALRM is masked + // would have prevented it being set pending in the alarm handler. + check_sigalarm(); } if( err == 0 ) @@ -821,7 +861,10 @@ externC int sigtimedwait (const sigset_ signal_mutex.unlock(); - SIGNAL_RETURN(err); + if (err) + SIGNAL_RETURN(err); + else + SIGNAL_RETURN_VALUE( info->si_signo ); } //==========================================================================
--- a/packages/compat/uitron/current/ChangeLog +++ b/packages/compat/uitron/current/ChangeLog @@ -1,3 +1,8 @@ +2000-11-01 Jesper Skov <jskov@redhat.com> + + * include/uit_func.inl: CYG_SCHED_UNIQUE_PRIORITIES changed to + CYGINT_KERNEL_SCHEDULER_UNIQUE_PRIORITIES + 2000-09-13 Jonathan Larmour <jlarmour@redhat.com> * include/uit_objs.hxx (CYG_UITRON_OBJS_INIT_PRIORITY): Define
--- a/packages/compat/uitron/current/include/uit_func.inl +++ b/packages/compat/uitron/current/include/uit_func.inl @@ -463,7 +463,7 @@ ter_tsk ( ID tskid ) p->force_resume(); // let it run p->kill(); // and set prio high so it runs RIGHT NOW!! #ifdef CYGIMP_THREAD_PRIORITY -#if CYG_SCHED_UNIQUE_PRIORITIES != 0 +#if CYGINT_KERNEL_SCHEDULER_UNIQUE_PRIORITIES != 0 // see if we are already at prio 0: if ( 0 == cyg_uitron_dis_dsp_old_priority ) // then dispatch is enabled, we are not at prio 0 @@ -475,7 +475,7 @@ ter_tsk ( ID tskid ) } Cyg_Scheduler::unlock(); #ifdef CYGIMP_THREAD_PRIORITY -#if CYG_SCHED_UNIQUE_PRIORITIES == 0 +#if CYGINT_KERNEL_SCHEDULER_UNIQUE_PRIORITIES == 0 if ( (E_OK == ret) && (0 != cyg_uitron_dis_dsp_old_priority) ) { // then dispatching is disabled, so our prio is 0 too Cyg_Thread::yield(); // so let the dying thread run;
--- a/packages/cygmon/current/ChangeLog +++ b/packages/cygmon/current/ChangeLog @@ -1,3 +1,7 @@ +2000-11-03 Jonathan Larmour <jlarmour@redhat.com> + + * cdl/cygmon.cdl: Improve cygmon.elf make dependencies + 2000-10-17 Drew Moseley <dmoseley@redhat.com> * misc/utils.c: Fix a typo. Also make sure we are ignoring the
--- a/packages/cygmon/current/cdl/cygmon.cdl +++ b/packages/cygmon/current/cdl/cygmon.cdl @@ -96,7 +96,7 @@ cdl_package CYGPKG_CYGMON { This is handled by a rule in the target CDL." make -priority 320 { - <PREFIX>/bin/cygmon.elf : <PACKAGE>/misc/ecos_bsp.c <PACKAGE>/misc/ecos_dummy.c <PACKAGE>/misc/cpu-mon.c <PACKAGE>/misc/monitor.c <PACKAGE>/misc/monitor_cmd.c <PACKAGE>/misc/ledit.c <PACKAGE>/misc/breakpoints.c <PACKAGE>/misc/bplist-dynamic.c <PACKAGE>/misc/utils.c <PACKAGE>/misc/generic_fmt32.c <PACKAGE>/misc/generic_mem.c <PACKAGE>/misc/bsp/common/bsp.c <PACKAGE>/misc/bsp/common/bsp_if.c <PACKAGE>/misc/bsp/common/shared-data.c <PACKAGE>/misc/bsp/common/sysinfo.c <PACKAGE>/misc/bsp/common/console-io.c <PACKAGE>/misc/bsp/common/debug-io.c <PACKAGE>/misc/bsp/common/sprintf.c <PACKAGE>/misc/bsp/common/syscall.c <PACKAGE>/misc/bsp/common/printf.c <PACKAGE>/misc/bsp/common/vprintf.c <PACKAGE>/misc/bsp/common/breakpoint.c <PACKAGE>/misc/bsp/common/singlestep.c <PACKAGE>/misc/bsp/common/generic-mem.c <PACKAGE>/misc/bsp/common/bsp_cache.c <PACKAGE>/misc/bsp/common/gdb-cpu.c <PACKAGE>/misc/bsp/common/hex-utils.c + <PREFIX>/bin/cygmon.elf : $(PREFIX)/lib/target.ld $(PREFIX)/lib/vectors.o $(PREFIX)/lib/libtarget.a $(PREFIX)/lib/libextras.a <PACKAGE>/misc/ecos_bsp.c <PACKAGE>/misc/ecos_dummy.c <PACKAGE>/misc/cpu-mon.c <PACKAGE>/misc/monitor.c <PACKAGE>/misc/monitor_cmd.c <PACKAGE>/misc/ledit.c <PACKAGE>/misc/breakpoints.c <PACKAGE>/misc/bplist-dynamic.c <PACKAGE>/misc/utils.c <PACKAGE>/misc/generic_fmt32.c <PACKAGE>/misc/generic_mem.c <PACKAGE>/misc/bsp/common/bsp.c <PACKAGE>/misc/bsp/common/bsp_if.c <PACKAGE>/misc/bsp/common/shared-data.c <PACKAGE>/misc/bsp/common/sysinfo.c <PACKAGE>/misc/bsp/common/console-io.c <PACKAGE>/misc/bsp/common/debug-io.c <PACKAGE>/misc/bsp/common/sprintf.c <PACKAGE>/misc/bsp/common/syscall.c <PACKAGE>/misc/bsp/common/printf.c <PACKAGE>/misc/bsp/common/vprintf.c <PACKAGE>/misc/bsp/common/breakpoint.c <PACKAGE>/misc/bsp/common/singlestep.c <PACKAGE>/misc/bsp/common/generic-mem.c <PACKAGE>/misc/bsp/common/bsp_cache.c <PACKAGE>/misc/bsp/common/gdb-cpu.c <PACKAGE>/misc/bsp/common/hex-utils.c @sh -c "mkdir -p misc/bsp/common $(dir $@)" $(CC) -c -I$(REPOSITORY)/$(PACKAGE)/misc $(INCLUDE_PATH) $(CFLAGS) -DHAVE_BSP -D__ECOS__ -o misc/ecos_bsp.o $(REPOSITORY)/$(PACKAGE)/misc/ecos_bsp.c $(CC) -c -I$(REPOSITORY)/$(PACKAGE)/misc $(INCLUDE_PATH) $(CFLAGS) -DHAVE_BSP -D__ECOS__ -o misc/ecos_dummy.o $(REPOSITORY)/$(PACKAGE)/misc/ecos_dummy.c
new file mode 100644 --- /dev/null +++ b/packages/devs/flash/arm/sa1100mm/current/ChangeLog @@ -0,0 +1,36 @@ +2000-10-25 Drew Moseley <dmoseley@redhat.com> + + * src/sa1100mm_flash.c: New file. Support for SA1100 Multimedia + board. + * src/flash_query.c: Ditto. + * src/flash_program_buf.c: Ditto. + * src/flash_erase_block.c: Ditto. + * src/flash.h: Ditto. + * cdl/flash_sa1100mm.cdl: Ditto. + * ChangeLog: Ditto. + +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//===========================================================================
new file mode 100644 --- /dev/null +++ b/packages/devs/flash/arm/sa1100mm/current/cdl/flash_sa1100mm.cdl @@ -0,0 +1,82 @@ +# ==================================================================== +# +# flash_sa1100mm.cdl +# +# FLASH memory - Hardware support on StrongARM SA1100 Multimedia +# +# ==================================================================== +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): dmoseley +# Original data: gthomas +# Contributors: +# Date: 2000-10-25 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_DEVS_FLASH_SA1100MM { + display "StrongARM SA1100 Multimedia FLASH memory support" + + parent CYGPKG_IO_FLASH + active_if CYGPKG_IO_FLASH + requires CYGPKG_HAL_ARM_SA11X0 + + implements CYGHWR_IO_FLASH_DEVICE + + include_dir . + include_files ; # none _exported_ whatsoever + description "FLASH memory device support for StrongARM SA1100 Multimedia" + compile sa1100mm_flash.c + + make -priority 1 { + flash_erase_block.o: $(REPOSITORY)/$(PACKAGE)/src/flash_erase_block.c + $(CC) -S $(INCLUDE_PATH) $(CFLAGS) -g0 -fno-function-sections $(REPOSITORY)/$(PACKAGE)/src/flash_erase_block.c + echo " .globl flash_erase_block_end" >>flash_erase_block.s + echo "flash_erase_block_end:" >>flash_erase_block.s + $(CC) -c -o flash_erase_block.o flash_erase_block.s + $(AR) rcs $(PREFIX)/lib/libtarget.a flash_erase_block.o + } + make -priority 1 { + flash_program_buf.o: $(REPOSITORY)/$(PACKAGE)/src/flash_program_buf.c + $(CC) -S $(INCLUDE_PATH) $(CFLAGS) -g0 -fno-function-sections $(REPOSITORY)/$(PACKAGE)/src/flash_program_buf.c + echo " .globl flash_program_buf_end" >>flash_program_buf.s + echo "flash_program_buf_end:" >>flash_program_buf.s + $(CC) -c -o flash_program_buf.o flash_program_buf.s + $(AR) rcs $(PREFIX)/lib/libtarget.a flash_program_buf.o + } + make -priority 1 { + flash_query.o: $(REPOSITORY)/$(PACKAGE)/src/flash_query.c + $(CC) -S $(INCLUDE_PATH) $(CFLAGS) -g0 -fno-function-sections $(REPOSITORY)/$(PACKAGE)/src/flash_query.c + echo " .globl flash_query_end" >>flash_query.s + echo "flash_query_end:" >>flash_query.s + $(CC) -c -o flash_query.o flash_query.s + $(AR) rcs $(PREFIX)/lib/libtarget.a flash_query.o + } +} +
new file mode 100644 --- /dev/null +++ b/packages/devs/flash/arm/sa1100mm/current/src/flash.h @@ -0,0 +1,66 @@ +//========================================================================== +// +// flash.h +// +// Flash programming - device constants, etc. +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas, dmoseley +// Date: 2000-10-25 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#ifndef _FLASH_HWR_H_ +#define _FLASH_HWR_H_ + +// SA1100 Multimedia FLASH layout +// 2x 28F016SV +// each device is 16x1M organized as 32x128K blocks + +#define FLASH_Read_ID 0x00900090 +#define FLASH_Read_Status 0x00700070 +#define FLASH_Clear_Status 0x00500050 +#define FLASH_Status_Ready 0x00800080 +#define FLASH_Program 0x00100010 +#define FLASH_Block_Erase 0x00200020 +#define FLASH_Confirm 0x00D000D0 +#define FLASH_Reset 0xFFFFFFFF + +#define FLASH_BLOCK_SIZE 0x40000 + +#define FLASH_Intel_code 0x89 +#define FLASH_28F016SV_low 0xA0 +#define FLASH_28F016SV_hi 0x66 + +#endif // _FLASH_HWR_H_
new file mode 100644 --- /dev/null +++ b/packages/devs/flash/arm/sa1100mm/current/src/flash_erase_block.c @@ -0,0 +1,86 @@ +//========================================================================== +// +// flash_erase_block.c +// +// Flash programming +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas, dmoseley +// Date: 2000-07-14 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include "flash.h" + +#include <pkgconf/hal.h> +#include <cyg/hal/hal_arch.h> +#include <cyg/hal/hal_cache.h> + +// +// CAUTION! This code must be copied to RAM before execution. Therefore, +// it must not contain any code which might be position dependent! +// + +int +flash_erase_block(volatile unsigned long *block) +{ + unsigned long stat; + int timeout = 5000000; + int cache_on; + + HAL_DCACHE_IS_ENABLED(cache_on); + if (cache_on) { + HAL_DCACHE_SYNC(); + HAL_DCACHE_DISABLE(); + } + + // Clear any error conditions + *block = FLASH_Clear_Status; + + // Set to erase + *block = FLASH_Block_Erase; + *block = FLASH_Confirm; + while(((stat = *block) & FLASH_Status_Ready) != FLASH_Status_Ready) { + if (--timeout == 0) break; + } + + // Restore ROM to "normal" mode + *block = FLASH_Reset; + + if (cache_on) { + HAL_DCACHE_ENABLE(); + } + + return stat; +}
new file mode 100644 --- /dev/null +++ b/packages/devs/flash/arm/sa1100mm/current/src/flash_program_buf.c @@ -0,0 +1,94 @@ +//========================================================================== +// +// flash_program_buf.c +// +// Flash programming +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas, dmoseley +// Date: 2000-07-14 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include "flash.h" + +#include <pkgconf/hal.h> +#include <cyg/hal/hal_arch.h> +#include <cyg/hal/hal_cache.h> + +// +// CAUTION! This code must be copied to RAM before execution. Therefore, +// it must not contain any code which might be position dependent! +// + +int +flash_program_buf(volatile unsigned long *addr, unsigned long *data, int len) +{ + unsigned long stat = 0; + int timeout = 5000000; + int cache_on; + volatile unsigned long *orig_addr = addr; + + HAL_DCACHE_IS_ENABLED(cache_on); + if (cache_on) { + HAL_DCACHE_SYNC(); + HAL_DCACHE_DISABLE(); + } + + // Clear any error conditions + *addr = FLASH_Clear_Status; + + while (len > 0) { + *addr = FLASH_Program; + *addr = *data++; + timeout = 5000000; + while (((stat = *addr) & FLASH_Status_Ready) != FLASH_Status_Ready) { + if (--timeout == 0) { + goto bad; + } + } + addr++; + len -= sizeof(unsigned long); + } + + // Restore ROM to "normal" mode + bad: + *orig_addr = FLASH_Reset; + + if (cache_on) { + HAL_DCACHE_ENABLE(); + } + + return stat; +}
new file mode 100644 --- /dev/null +++ b/packages/devs/flash/arm/sa1100mm/current/src/flash_query.c @@ -0,0 +1,86 @@ +//========================================================================== +// +// flash_query.c +// +// Flash programming - query device +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas, dmoseley +// Date: 2000-07-26 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include "flash.h" + +#include <pkgconf/hal.h> +#include <cyg/hal/hal_arch.h> +#include <cyg/hal/hal_cache.h> + +// +// CAUTION! This code must be copied to RAM before execution. Therefore, +// it must not contain any code which might be position dependent! +// + +#define CNT 20*1000*10 // Approx 200ms + +int +flash_query(unsigned char *data) +{ + volatile unsigned long *lROM; + volatile unsigned char *cROM; + int i, cnt; + int cache_on; + + HAL_DCACHE_IS_ENABLED(cache_on); + if (cache_on) { + HAL_DCACHE_SYNC(); + HAL_DCACHE_DISABLE(); + } + + lROM = (unsigned long *)0x08000000; + cROM = (unsigned char *)0x08000000; + + lROM[0] = FLASH_Read_ID; + for (cnt = CNT; cnt > 0; cnt--) ; + for (i = 0; i < 8; i++) { + *data++ = cROM[i]; + } + lROM[0] = FLASH_Reset; + + if (cache_on) { + HAL_DCACHE_ENABLE(); + } + + return 0; +}
new file mode 100644 --- /dev/null +++ b/packages/devs/flash/arm/sa1100mm/current/src/sa1100mm_flash.c @@ -0,0 +1,117 @@ +//========================================================================== +// +// sa1100mm_flash.c +// +// Flash programming +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas, dmoseley +// Date: 2000-07-26 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <pkgconf/hal.h> +#include <cyg/hal/hal_arch.h> +#include <cyg/hal/hal_cache.h> + +#define _FLASH_PRIVATE_ +#include <cyg/io/flash.h> + +#include "flash.h" + +int +flash_hwr_init(void) +{ + unsigned char data[96]; + extern char flash_query, flash_query_end; + typedef int code_fun(unsigned char *); + code_fun *_flash_query; + int code_len, stat, num_regions, region_size; + + // Copy 'program' code to RAM for execution + code_len = (unsigned long)&flash_query_end - (unsigned long)&flash_query; + _flash_query = (code_fun *)flash_info.work_space; + memcpy(_flash_query, &flash_query, code_len); + HAL_DCACHE_SYNC(); // Should guarantee this code will run + HAL_ICACHE_DISABLE(); // is also required to avoid old contents + + stat = (*_flash_query)(data); + + HAL_ICACHE_ENABLE(); + + if ((data[0] == FLASH_Intel_code) && + (data[4] == FLASH_28F016SV_low) && + (data[5] == FLASH_28F016SV_hi)) { + num_regions = 32; + region_size = 0x20000; + flash_info.block_size = region_size; + flash_info.blocks = num_regions; + flash_info.start = (void *)0x08000000; + flash_info.end = (void *)(0x08000000+(num_regions*region_size)); + return FLASH_ERR_OK; + } else { + printf("Can't identify FLASH, sorry\n"); + diag_dump_buf(data, sizeof(data)); + return FLASH_ERR_HWR; + } +} + +// Map a hardware status to a package error +int +flash_hwr_map_error(int err) +{ + if (err & 0x7E) { + if (err & 0x10) { + return FLASH_ERR_PROGRAM; + } else + if (err & 0x20) { + return FLASH_ERR_ERASE; + } else + return FLASH_ERR_HWR; // FIXME + } else { + return FLASH_ERR_OK; + } +} + +// See if a range of FLASH addresses overlaps currently running code +bool +flash_code_overlaps(void *start, void *end) +{ + extern char _stext, _etext; + + return ((((unsigned long)&_stext >= (unsigned long)start) && + ((unsigned long)&_stext < (unsigned long)end)) || + (((unsigned long)&_etext >= (unsigned long)start) && + ((unsigned long)&_etext < (unsigned long)end))); +}
new file mode 100644 --- /dev/null +++ b/packages/devs/serial/mips/ref4955/current/ChangeLog @@ -0,0 +1,58 @@ +2000-09-18 Jesper Skov <jskov@redhat.com> + + * cdl/ser_mips_ref4955.cdl: Use CDL to specify testing parameters. + + * include/mips_tx49_ref4955_ser.inl: Follow type naming changes in + generic driver. + +2000-09-14 Jesper Skov <jskov@redhat.com> + + * include/mips_tx49_ref4955_ser.inl: Use with generic 16x5x serial + driver. + * src/ref4955_serial.c: Deleted. + * src/ref4955_serial.h: Deleted. + * cdl/ser_mips_ref4955.cdl: Changed accordingly. + +2000-08-01 Jonathan Larmour <jlarmour@redhat.co.uk> + + * src/ref4955_serial.c (pc_serial_set_config): Now use keys to make + more flexible. + +2000-06-22 Hugo Tyson <hmt@cygnus.co.uk> + + * cdl/<yournamehere>.cdl: Remove the comment on the empty + include_files directive; the tools now support this correctly. + This keeps internal include files internal. + +2000-05-25 Jesper Skov <jskov@redhat.com> + + * cdl/ser_mips_ref4955.cdl: + * src/ref4955_serial.h: + * src/ref4955_serial.c: + REF4955 serial driver. + +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//===========================================================================
new file mode 100644 --- /dev/null +++ b/packages/devs/serial/mips/ref4955/current/cdl/ser_mips_ref4955.cdl @@ -0,0 +1,175 @@ +# ==================================================================== +# +# ser_mips_ref4955.cdl +# +# eCos serial MIPS/REF4955 configuration data +# +# ==================================================================== +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): jskov +# Original data: gthomas +# Contributors: +# Date: 2000-05-24 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + + +cdl_package CYGPKG_IO_SERIAL_MIPS_REF4955 { + display "REF4955 serial device drivers" + + parent CYGPKG_IO_SERIAL_DEVICES + active_if CYGPKG_IO_SERIAL + active_if CYGPKG_HAL_MIPS_TX49_REF4955 + + requires CYGPKG_ERROR + include_dir cyg/io + + description " + This option enables the serial device drivers for the + REF4955." + doc redirect/ecos-device-drivers.html + + # FIXME: This really belongs in the GENERIC_16X5X package + cdl_interface CYGINT_IO_SERIAL_GENERIC_16X5X_REQUIRED { + display "Generic 16x5x serial driver required" + } + + define_proc { + puts $::cdl_system_header "/***** serial driver proc output start *****/" + puts $::cdl_system_header "#define CYGDAT_IO_SERIAL_GENERIC_16X5X_INL <cyg/io/mips_tx49_ref4955_ser.inl>" + puts $::cdl_system_header "#define CYGDAT_IO_SERIAL_GENERIC_16X5X_CFG <pkgconf/io_serial_mips_ref4955.h>" + puts $::cdl_system_header "/***** serial driver proc output end *****/" + } + + cdl_component CYGPKG_IO_SERIAL_MIPS_REF4955_SERIAL0 { + display "REF4955 serial port 0 driver" + flavor bool + default_value 1 + description " + This option includes the serial device driver for the + REF4955 port 0." + + implements CYGINT_IO_SERIAL_GENERIC_16X5X_REQUIRED +# implements CYGINT_IO_SERIAL_FLOW_CONTROL_HW +# implements CYGINT_IO_SERIAL_LINE_STATUS_HW + + cdl_option CYGDAT_IO_SERIAL_MIPS_REF4955_SERIAL0_NAME { + display "Device name for the REF4955 serial port 0 driver" + flavor data + default_value {"\"/dev/ser0\""} + description " + This option sets the name of the serial device for the + REF4955 port 0." + } + + cdl_option CYGNUM_IO_SERIAL_MIPS_REF4955_SERIAL0_BAUD { + display "Baud rate for the REF4955 serial port 0 driver" + flavor data + legal_values { 1200 2400 4800 9600 14400 19200 38400 57600 115200} + default_value 38400 + description " + This option specifies the default baud rate (speed) + for the REF4955 port 0." + } + + cdl_option CYGNUM_IO_SERIAL_MIPS_REF4955_SERIAL0_BUFSIZE { + display "Buffer size for the REF4955 serial port 0 driver" + flavor data + legal_values 0 to 8192 + default_value 128 + description " + This option specifies the size of the internal buffers + used for the REF4955 port 0." + } + } + + cdl_component CYGPKG_IO_SERIAL_MIPS_REF4955_SERIAL1 { + display "REF4955 serial port 1 driver" + flavor bool + default_value 1 + description " + This option includes the serial device driver for the + REF4955 port 1." + + implements CYGINT_IO_SERIAL_GENERIC_16X5X_REQUIRED +# implements CYGINT_IO_SERIAL_FLOW_CONTROL_HW +# implements CYGINT_IO_SERIAL_LINE_STATUS_HW + + cdl_option CYGDAT_IO_SERIAL_MIPS_REF4955_SERIAL1_NAME { + display "Device name for the REF4955 serial port 1 driver" + flavor data + default_value {"\"/dev/ser1\""} + description " + This option specifies the name of serial device for + the REF4955 port 1." + } + + cdl_option CYGNUM_IO_SERIAL_MIPS_REF4955_SERIAL1_BAUD { + display "Baud rate for the REF4955 serial port 1 driver" + flavor data + legal_values { 1200 2400 4800 9600 14400 19200 38400 57600 115200} + default_value 38400 + description " + This option specifies the default baud rate (speed) + for the REF4955 port 1." + } + + cdl_option CYGNUM_IO_SERIAL_MIPS_REF4955_SERIAL1_BUFSIZE { + display "Buffer size for the REF4955 serial port 1 driver" + flavor data + legal_values 0 to 8192 + default_value 128 + description " + This option specifies the size of the internal buffers + used for the REF4955 port 1." + } + } + + + cdl_component CYGPKG_IO_SERIAL_MIPS_REF4955_TESTING { + display "Testing parameters" + flavor bool + calculated 1 + active_if CYGPKG_IO_SERIAL_MIPS_REF4955_SERIAL0 + + cdl_option CYGPRI_SER_TEST_SER_DEV { + display "Serial device used for testing" + flavor data + default_value { CYGDAT_IO_SERIAL_MIPS_REF4955_SERIAL0_NAME } + } + + define_proc { + puts $::cdl_header "#define CYGPRI_SER_TEST_CRASH_ID \"ref4955\"" + puts $::cdl_header "#define CYGPRI_SER_TEST_TTY_DEV \"/dev/tty0\"" + } + } +} + +# EOF ser_mips_ref4955.cdl
new file mode 100644 --- /dev/null +++ b/packages/devs/serial/mips/ref4955/current/include/mips_tx49_ref4955_ser.inl @@ -0,0 +1,168 @@ +//========================================================================== +// +// devs/serial/mips/ref4955/src/mips_tx49_ref4955_ser.inl +// +// REF4955 Serial I/O definitions. +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:gthomas, jskov +// Date: 2000-05-24 +// Purpose: REF4955 Serial definitions +//####DESCRIPTIONEND#### +//========================================================================== + +#include <cyg/hal/hal_intr.h> + +//----------------------------------------------------------------------------- +// There are two serial ports. +#define CYG_DEVICE_SERIAL_SCC1 0xb40003f8 // port 1 +#define CYG_DEVICE_SERIAL_SCC2 0xb40002f8 // port 2 + +//----------------------------------------------------------------------------- +// The REF4955 board has a 14.318 MHz crystal, but the PC87338 part +// uses a 24MHz internal clock for baud rate calculation. +#define BAUD_DIVISOR(_x_) 24000000/13/16/(_x_) + +static unsigned short select_baud[] = { + 0, // Unused + 0, // 50 + 0, // 75 + 0, // 110 + 0, // 134.5 + 0, // 150 + 0, // 200 + 0, // 300 + 0, // 600 + BAUD_DIVISOR(1200), + 0, // 1800 + BAUD_DIVISOR(2400), + 0, // 3600 + BAUD_DIVISOR(4800), + 0 , // 7200 + BAUD_DIVISOR(9600), + BAUD_DIVISOR(14400), + BAUD_DIVISOR(19200), + BAUD_DIVISOR(38400), + BAUD_DIVISOR(57600), + BAUD_DIVISOR(115200), + 0, // 230400 +}; + +//----------------------------------------------------------------------------- +// Port 0 descriptors + +#ifdef CYGPKG_IO_SERIAL_MIPS_REF4955_SERIAL0 +static pc_serial_info pc_serial_info0 = {CYG_DEVICE_SERIAL_SCC1, + CYGNUM_HAL_INTERRUPT_DEBUG_UART}; +#if CYGNUM_IO_SERIAL_MIPS_REF4955_SERIAL0_BUFSIZE > 0 +static unsigned char pc_serial_out_buf0[CYGNUM_IO_SERIAL_MIPS_REF4955_SERIAL0_BUFSIZE]; +static unsigned char pc_serial_in_buf0[CYGNUM_IO_SERIAL_MIPS_REF4955_SERIAL0_BUFSIZE]; + +static SERIAL_CHANNEL_USING_INTERRUPTS(pc_serial_channel0, + pc_serial_funs, + pc_serial_info0, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_MIPS_REF4955_SERIAL0_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT, + &pc_serial_out_buf0[0], + sizeof(pc_serial_out_buf0), + &pc_serial_in_buf0[0], + sizeof(pc_serial_in_buf0) + ); +#else +static SERIAL_CHANNEL(pc_serial_channel0, + pc_serial_funs, + pc_serial_info0, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_MIPS_REF4955_SERIAL0_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT + ); +#endif + +DEVTAB_ENTRY(pc_serial_io0, + CYGDAT_IO_SERIAL_MIPS_REF4955_SERIAL0_NAME, + 0, // Does not depend on a lower level interface + &cyg_io_serial_devio, + pc_serial_init, + pc_serial_lookup, // Serial driver may need initializing + &pc_serial_channel0 + ); +#endif + +//----------------------------------------------------------------------------- +// Port 1 descriptors + +#ifdef CYGPKG_IO_SERIAL_MIPS_REF4955_SERIAL1 +static pc_serial_info pc_serial_info1 = {CYG_DEVICE_SERIAL_SCC2, + CYGNUM_HAL_INTERRUPT_USER_UART}; +#if CYGNUM_IO_SERIAL_MIPS_REF4955_SERIAL1_BUFSIZE > 0 +static unsigned char pc_serial_out_buf1[CYGNUM_IO_SERIAL_MIPS_REF4955_SERIAL1_BUFSIZE]; +static unsigned char pc_serial_in_buf1[CYGNUM_IO_SERIAL_MIPS_REF4955_SERIAL1_BUFSIZE]; + +static SERIAL_CHANNEL_USING_INTERRUPTS(pc_serial_channel1, + pc_serial_funs, + pc_serial_info1, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_MIPS_REF4955_SERIAL1_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT, + &pc_serial_out_buf1[0], + sizeof(pc_serial_out_buf1), + &pc_serial_in_buf1[0], + sizeof(pc_serial_in_buf1) + ); +#else +static SERIAL_CHANNEL(pc_serial_channel1, + pc_serial_funs, + pc_serial_info1, + CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_MIPS_REF4955_SERIAL1_BAUD), + CYG_SERIAL_STOP_DEFAULT, + CYG_SERIAL_PARITY_DEFAULT, + CYG_SERIAL_WORD_LENGTH_DEFAULT, + CYG_SERIAL_FLAGS_DEFAULT + ); +#endif + +DEVTAB_ENTRY(pc_serial_io1, + CYGDAT_IO_SERIAL_MIPS_REF4955_SERIAL1_NAME, + 0, // Does not depend on a lower level interface + &cyg_io_serial_devio, + pc_serial_init, + pc_serial_lookup, // Serial driver may need initializing + &pc_serial_channel1 + ); +#endif + +// EOF mips_tx49_ref4955_ser.inl
new file mode 100644 --- /dev/null +++ b/packages/devs/wallclock/mips/ref4955/current/ChangeLog @@ -0,0 +1,40 @@ +2000-05-26 Jesper Skov <jskov@redhat.com> + + * cdl/wallclock_ref4955.cdl: + * src/wallclock_ref4955.cxx: + * src/ds1742.inl: [deleted] + Added set-get mode. Moved Dallas driver to its own package. + +2000-05-25 Jesper Skov <jskov@redhat.com> + + * cdl/wallclock_ref4955.cdl: + * src/wallclock_ref4955.cxx: + * src/ds1742.inl: + Added wallclock driver REF4955 (Dallas 1742) + (set_ds_hwclock): Clear frequency test bit. + +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### + +
new file mode 100644 --- /dev/null +++ b/packages/devs/wallclock/mips/ref4955/current/cdl/wallclock_ref4955.cdl @@ -0,0 +1,93 @@ +# ==================================================================== +# +# wallclock_ref4955.cdl +# +# eCos wallclock for REF4955 driver configuration data +# +# ==================================================================== +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): jskov +# Contributors: jskov +# Date: 2000-05-25 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_DEVICES_WALLCLOCK_MIPS_REF4955 { + parent CYGPKG_IO_WALLCLOCK + active_if CYGPKG_IO_WALLCLOCK + display "REF4955 wallclock driver" + requires CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS1742 + requires CYGPKG_HAL_MIPS_TX49_REF4955 + hardware + compile wallclock_ref4955.cxx + implements CYGINT_WALLCLOCK_HW_IMPLEMENTATIONS + implements CYGINT_WALLCLOCK_SET_GET_MODE_SUPPORTED + active_if CYGIMP_WALLCLOCK_HARDWARE + + cdl_option CYGIMP_WALLCLOCK_HARDWARE { + parent CYGPKG_IO_WALLCLOCK_IMPLEMENTATION + display "Hardware wallclock" + default_value 1 + implements CYGINT_WALLCLOCK_IMPLEMENTATIONS + } + + cdl_component CYGPKG_DEVICES_WALLCLOCK_MIPS_REF4955_OPTIONS { + display "REF4955 wallclock build options" + flavor none + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + + cdl_option CYGPKG_DEVICES_WALLCLOCK_MIPS_REF4955_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the wallclock device. These flags are used in addition + to the set of global flags." + } + + cdl_option CYGPKG_DEVICES_WALLCLOCK_MIPS_REF4955_CFLAGS_REMOVE { + display "Suppressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the wallclock device. These flags are removed from + the set of global flags if present." + } + + } +}
new file mode 100644 --- /dev/null +++ b/packages/devs/wallclock/mips/ref4955/current/src/wallclock_ref4955.cxx @@ -0,0 +1,114 @@ +//========================================================================== +// +// devs/wallclock/mips/ref4955/ref4955.cxx +// +// Wallclock implementation +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors: jskov +// Date: 2000-05-25 +// Purpose: Wallclock driver for REF4955 +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <pkgconf/kernel.h> // Kernel config +#include <pkgconf/wallclock.h> // Wallclock device config + +#include <cyg/hal/hal_io.h> // IO macros +#include <cyg/infra/cyg_type.h> // Common type definitions and support + +#include <cyg/io/wallclock.hxx> // The WallClock API +#include <cyg/io/wallclock/wallclock.inl> // Helpers + +#include <cyg/infra/diag.h> // For debugging + +// REF4955 has a Dallas 1742W part. +#define DS_BASE 0xb5000000 +#include <cyg/io/wallclock/ds1742.inl> + +//----------------------------------------------------------------------------- +// Functions required for the hardware-driver API. + +// Returns the number of seconds elapsed since 1970-01-01 00:00:00. +cyg_uint32 +Cyg_WallClock::get_hw_seconds(void) +{ + cyg_uint32 year, month, mday, hour, minute, second; + + get_ds_hwclock(&year, &month, &mday, &hour, &minute, &second); + +#if 0 + // This will cause the test to eventually fail due to these printouts + // causing timer interrupts to be lost... + diag_printf("year %02d\n", year); + diag_printf("month %02d\n", month); + diag_printf("mday %02d\n", mday); + diag_printf("hour %02d\n", hour); + diag_printf("minute %02d\n", minute); + diag_printf("second %02d\n", second); +#endif + + cyg_uint32 now = _simple_mktime(year, month, mday, hour, minute, second); + return now; +} + +#ifdef CYGSEM_WALLCLOCK_SET_GET_MODE + +// Sets the clock. Argument is seconds elapsed since 1970-01-01 00:00:00. +void +Cyg_WallClock::set_hw_seconds( cyg_uint32 secs ) +{ + cyg_uint32 year, month, mday, hour, minute, second; + + _simple_mkdate(secs, &year, &month, &mday, &hour, &minute, &second); + + set_ds_hwclock(year, month, mday, hour, minute, second); +} + +#endif + +void +Cyg_WallClock::init_hw_seconds(void) +{ +#ifdef CYGSEM_WALLCLOCK_SET_GET_MODE + init_ds_hwclock(); +#else + // This is our base: 1970-01-01 00:00:00 + // Set the HW clock - if for nothing else, just to be sure it's in a + // legal range. Any arbitrary base could be used. + // After this the hardware clock is only read. + set_ds_hwclock(1970,1,1,0,0,0); +#endif +} + +//----------------------------------------------------------------------------- +// End of devs/wallclock/mips/ref4955/wallclock_ref4955.cxx
--- a/packages/ecos.db +++ b/packages/ecos.db @@ -124,6 +124,16 @@ package CYGPKG_DEVS_FLASH_EBSA285 { on the StrongARM EBSA-285 platform." } +package CYGPKG_DEVS_FLASH_SA1100MM { + alias { "FLASH memory support for StrongARM SA1100 Multimedia" flash_sa1100mm } + directory devs/flash/arm/sa1100mm + script flash_sa1100mm.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the StrongARM SA1100 Multimedia platform." +} + package CYGPKG_DEVS_FLASH_EDB7XXX { alias { "FLASH memory support for Cirrus Logic EDB7xxx" flash_edb7xxx } directory devs/flash/arm/edb7xxx @@ -250,6 +260,15 @@ package CYGPKG_IO_SERIAL_TX39_JMR3904 { } +package CYGPKG_IO_SERIAL_MIPS_REF4955 { + alias { "TX49 REF4955 serial device drivers" + devs_serial_mips_ref4955 ref4955_serial_driver } + hardware + directory devs/serial/mips/ref4955 + script ser_mips_ref4955.cdl + description "TX49 REF4955 serial device drivers" +} + package CYGPKG_IO_SERIAL_MIPS_VRC4373 { alias { "VRC4373 serial device drivers" devs_serial_mips_vrc4373 vrc4373_serial_driver } @@ -460,6 +479,15 @@ package CYGPKG_DEVICES_WALLCLOCK_DALLAS_ the Dallas 1742 wallclock." } +package CYGPKG_DEVICES_WALLCLOCK_MIPS_REF4955 { + alias { "Wallclock driver for REF4955 board" devices_wallclock_ref4955 device_wallclock_ref4955 } + directory devs/wallclock/mips/ref4955 + script wallclock_ref4955.cdl + hardware + description " + This package provides a wallclock driver implementation for the + Toshiba REF4955 board." +} package CYGPKG_DEVICES_WATCHDOG_ARM_AEB { @@ -768,6 +796,17 @@ package CYGPKG_HAL_ARM_SA11X0_BRUTUS { The BRUTUS HAL package provides the support needed to run eCos on a Intel StrongARM SA1110 evaulation board (brutus)." } + +package CYGPKG_HAL_ARM_SA11X0_SA1100MM { + alias { "Intel SA1100 Multimedia eval board" hal_arm_sa11x0_sa1100mm } + directory hal/arm/sa11x0/sa1100mm + script hal_arm_sa11x0_sa1100mm.cdl + hardware + description " + The MULTIMEDIA HAL package provides the support needed to run + eCos on a Intel StrongARM SA1110 Multimedia evaluation board." +} + package CYGPKG_HAL_ARM_EDB7XXX { alias { "Cirrus Logic development board" hal_arm_edb7xxx arm_edb7xxx_hal } directory hal/arm/edb7xxx @@ -798,17 +837,37 @@ package CYGPKG_HAL_SH { description " The SH (SuperH) architecture HAL package provides generic support for this processor architecture. It is also - necessary to select a specific target platform HAL - package." + necessary to select variant and target platform HAL + packages." +} + +package CYGPKG_HAL_SH_SH3 { + alias { "SH3 architecture" hal_sh_sh3 } + directory hal/sh/sh3 + script hal_sh_sh3.cdl + hardware + description " + The SH3 (SuperH 3) variant HAL package provides generic + support for SH3 variant CPUs." +} + +package CYGPKG_HAL_SH_SH4 { + alias { "SH4 architecture" hal_sh_sh4 } + directory hal/sh/sh4 + script hal_sh_sh4.cdl + hardware + description " + The SH4 (SuperH 4) variant HAL package provides generic + support for SH4 variant CPUs." } package CYGPKG_HAL_SH_EDK7708 { alias { "Hitachi SH7708 board" hal_sh_edk sh_edk_hal } - directory hal/sh/edk + directory hal/sh/edk7708 script hal_sh_edk7708.cdl hardware description " - The edk HAL package provides the support needed to run + This SH HAL package provides the support needed to run eCos on a Hitachi SH3 EDK7708 board." } package CYGPKG_HAL_SH_SH7708_CQ7708 { @@ -817,10 +876,19 @@ package CYGPKG_HAL_SH_SH7708_CQ7708 { script hal_sh_sh7708_cq7708.cdl hardware description " - The cq HAL package provides the support needed to run + This SH HAL package provides the support needed to run eCos on a CqREEK SH7708 board." } +package CYGPKG_HAL_SH_SH7750_CQ7750 { + alias { "CqREEK SH7750 board" hal_sh_cqsh4 sh_cqsh4_hal } + directory hal/sh/cq7750 + script hal_sh_sh7750_cq7750.cdl + hardware + description " + This SH HAL package provides the support needed to run + eCos on a CqREEK SH7750 board." +} # -------------------------------------------------------------------------- # i386 packages @@ -926,6 +994,17 @@ package CYGPKG_HAL_POWERPC_PPC60x { select a specific target platform HAL package." } +package CYGPKG_HAL_POWERPC_PPC40x { + alias { "PowerPC 40x variant HAL" hal_ppc40x ppc40x_hal ppc40x_arch_hal } + directory hal/powerpc/ppc40x/ + script hal_powerpc_ppc40x.cdl + hardware + description " + The PowerPC 40x variant HAL package provides generic support + for this processor variant. It is also necessary to + select a specific target platform HAL package." +} + package CYGPKG_HAL_POWERPC_COGENT { alias { "Cogent CMA286/287 board" hal_powerpc_cogent powerpc_cogent_hal } directory hal/powerpc/cogent @@ -1037,6 +1116,27 @@ package CYGPKG_HAL_MIPS_TX39_JMR3904 { } +package CYGPKG_HAL_MIPS_TX49 { + alias { "TX49 chip HAL" hal_tx49 tx49_hal tx49_arch_hal } + directory hal/mips/tx49/ + script hal_mips_tx49.cdl + hardware + description " + The TX49 architecture HAL package provides generic support + for this processor architecture. It is also necessary to + select a specific target platform HAL package." +} + +package CYGPKG_HAL_MIPS_TX49_REF4955 { + alias { "Toshiba TX4955 reference platform" hal_tx49_ref4955 tx49_ref4955_hal } + directory hal/mips/ref4955 + script hal_mips_tx49_ref4955.cdl + hardware + description " + The REF4955 HAL package should be used when targetting the + actual hardware." +} + package CYGPKG_HAL_MIPS_VR4300 { alias { "VR4300 chip HAL" hal_vr4300 vr4300_hal vr4300_arch_hal } @@ -1231,6 +1331,19 @@ target brutus { eCos on an Intel StrongARM SA1100 evaluation board." } +target sa1100mm { + alias { "Intel StrongARM SA1100 Multimedia board" sa1100mm } + packages { CYGPKG_HAL_ARM + CYGPKG_HAL_ARM_SA11X0 + CYGPKG_HAL_ARM_SA11X0_SA1100MM + CYGPKG_IO_SERIAL_ARM_SA11X0 + } + description " + The sa1100mm target provides the packages needed to run + eCos on an Intel StrongARM SA1100 Multimedia evaluation board." +} + + target edb7xxx { alias { "Cirrus Logic development board" edb7211 eb7xxx eb7211 } packages { CYGPKG_HAL_ARM @@ -1259,6 +1372,7 @@ CMA230 (ARM7TDMI) or CMA222 (ARM710T) bo target sh7708 { alias { "Hitachi EDK/SH7708 board" edk7708 } packages { CYGPKG_HAL_SH + CYGPKG_HAL_SH_SH3 CYGPKG_HAL_SH_EDK7708 CYGPKG_DEVICES_WALLCLOCK_SH3 CYGPKG_IO_SERIAL_SH_SCI @@ -1273,6 +1387,7 @@ target sh7708 { target cq7708 { alias { "CqREEK SH7708 board" cq7708 } packages { CYGPKG_HAL_SH + CYGPKG_HAL_SH_SH3 CYGPKG_HAL_SH_SH7708_CQ7708 CYGPKG_IO_SERIAL_SH_SCI CYGPKG_IO_SERIAL_SH_CQ7708 @@ -1282,6 +1397,17 @@ target cq7708 { eCos on a CqREEK SH7708 board." } +target cq7750 { + alias { "CqREEK SH7750 board" cqsh4 } + packages { CYGPKG_HAL_SH + CYGPKG_HAL_SH_SH4 + CYGPKG_HAL_SH_SH7750_CQ7750 + CYGPKG_IO_SERIAL_SH_SCIF } + description " + The sh7750 target provides the packages needed to run + eCos on a CqREEK SH7750 board." +} + # -------------------------------------------------------------------------- # i386 targets target linux { @@ -1414,6 +1540,21 @@ target tx39_sim { use any of the eCos device drivers when the simulator is running in this mode." } +target ref4955 { + alias { "Toshiba TX4955 reference platform" tx49 } + packages { CYGPKG_HAL_MIPS + CYGPKG_HAL_MIPS_TX49 + CYGPKG_HAL_MIPS_TX49_REF4955 + CYGPKG_IO_SERIAL_GENERIC_16X5X + CYGPKG_IO_SERIAL_MIPS_REF4955 + CYGPKG_DEVICES_WALLCLOCK_MIPS_REF4955 + CYGPKG_DEVICES_WALLCLOCK_DALLAS_DS1742 + } + description " + The ref4955 target provides the packages needed to run + eCos on a Toshiba TX4955 reference platform." +} + target vrc4373 { alias { "NEC VRC4373 board" } packages { CYGPKG_HAL_MIPS
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/sa11x0/sa1100mm/current/ChangeLog @@ -0,0 +1,41 @@ +2000-10-25 Drew Moseley <dmoseley@redhat.com> + + * src/sa1100mm_misc.c: New file. Support for SA1100 Multimedia + board. + * include/pkgconf/mlt_arm_sa11x0_sa1100mm_rom.mlt: Ditto. + * include/pkgconf/mlt_arm_sa11x0_sa1100mm_rom.ldi: Ditto. + * include/pkgconf/mlt_arm_sa11x0_sa1100mm_rom.h: Ditto. + * include/pkgconf/mlt_arm_sa11x0_sa1100mm_ram.mlt: Ditto. + * include/pkgconf/mlt_arm_sa11x0_sa1100mm_ram.ldi: Ditto. + * include/pkgconf/mlt_arm_sa11x0_sa1100mm_ram.h: Ditto. + * include/sa1100mm.h: Ditto. + * include/hal_platform_setup.h: Ditto. + * include/hal_platform_ints.h: Ditto. + * cdl/hal_arm_sa11x0_sa1100mm.cdl: Ditto. + * Changelog: Ditto. + +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//===========================================================================
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/sa11x0/sa1100mm/current/cdl/hal_arm_sa11x0_sa1100mm.cdl @@ -0,0 +1,329 @@ +# ==================================================================== +# +# hal_arm_sa11x0_sa1100mm.cdl +# +# ARM SA1100/Multimedia platform HAL package configuration data +# +# ==================================================================== +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): dmoseley +# Original data: gthomas +# Contributors: +# Date: 2000-10-25 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== +cdl_package CYGPKG_HAL_ARM_SA11X0_SA1100MM { + display "ARM SA1100/Multimedia evaluation board" + parent CYGPKG_HAL_ARM_SA11X0 + hardware + include_dir cyg/hal + define_header hal_arm_sa11x0_sa1100mm.h + description " + This HAL platform package provides generic + support for the Intel StrongARM SA1100 based evalation board, + known as 'SA1100 Multimedia'." + + compile sa1100mm_misc.c + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT_GUARANTEED + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H <pkgconf/hal_arm.h>" + puts $::cdl_system_header "#define CYGBLD_HAL_VARIANT_H <pkgconf/hal_arm_sa11x0.h>" + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H <pkgconf/hal_arm_sa11x0_sa1100mm.h>" + puts $::cdl_header "#define HAL_PLATFORM_CPU \"StrongARM 1100\"" + puts $::cdl_header "#define HAL_PLATFORM_BOARD \"Multimedia development system\"" + puts $::cdl_header "#define HAL_PLATFORM_EXTRA \"\"" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + default_value {"RAM"} + legal_values {"RAM" "ROM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the SA1100 Multimedia eval board it is possible to build + the system for either RAM bootstrap or ROM bootstrap(s). Select + 'ram' when building programs to load into RAM using eCos GDB + stubs. Select 'rom' when building a stand-alone application + which will be put into ROM, or for the special case of + building the eCos GDB stubs themselves." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD { + display "Diagnostic serial port baud rate" + flavor data + legal_values 9600 19200 38400 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL_BAUD { + display "GDB serial port baud rate" + flavor data + legal_values 9600 19200 38400 115200 + default_value 38400 + description " + This option selects the baud rate used for the diagnostic port. + Note: this should match the value chosen for the GDB port if the + diagnostic and GDB port are the same." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 2 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_DEFAULT { + display "Default console channel." + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + calculated 1 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 1 + description " + The multimedia board has two serial ports. This option + chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 1 + description " + The multimedia board has two serial ports. This option + chooses which port will be used for diagnostic output." + } + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + no_define + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + parent CYGPKG_NONE + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "arm-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { "-mcpu=strongarm1100 -Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions -fvtable-gc -finit-priority" } + description " + This option controls the global compiler flags which are used to + compile all packages by default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { "-Wl,--gc-sections -Wl,-static -g -O2 -nostdlib" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + binary data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + <PREFIX>/bin/gdb_module.bin : <PREFIX>/bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + } + + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "Generic" "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for different varieties of ROM monitor. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + Firstly there is \"Generic\" support which prevents the HAL + from overriding the hardware vectors that it does not use, to + instead allow an installed ROM monitor to handle them. This is + the most basic support which is likely to be common to most + implementations of ROM monitor. + \"GDB_stubs\" provides support when GDB stubs are included in + the ROM monitor or boot ROM." + } + + cdl_component CYGPKG_HAL_ARM_SA11X0_SA1100MM_OPTIONS { + display "StrongARM SA1100/Multimedia build options" + flavor none + no_define + description " + Package specific build options including control over + compiler flags used only in building this package, + and details of which tests are built." + + + cdl_option CYGPKG_HAL_ARM_SA11X0_SA1100MM_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the StrongARM SA1100 Multimedia HAL. These flags are used in addition + to the set of global flags." + } + + cdl_option CYGPKG_HAL_ARM_SA11X0_SA1100MM_CFLAGS_REMOVE { + display "Supressed compiler flags" + flavor data + no_define + default_value { "" } + description " + This option modifies the set of compiler flags for + building the StrongARM SA1100 Multimedia HAL. These flags are removed from + the set of global flags if present." + } + + cdl_option CYGPKG_HAL_ARM_SA11X0_SA1100MM_TESTS { + display "StrongARM SA1100/Multimedia tests" + flavor data + no_define +# calculated { "tests/dram-test" } + calculated { "" } + description " + This option specifies the set of tests for the StrongARM SA1100 Multimedia HAL." + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "arm_sa11x0_sa1100mm_ram" : \ + "arm_sa11x0_sa1100mm_rom" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "<pkgconf/mlt_arm_sa11x0_sa1100mm_ram.ldi>" : \ + "<pkgconf/mlt_arm_sa11x0_sa1100mm_rom.ldi>" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "<pkgconf/mlt_arm_sa11x0_sa1100mm_ram.h>" : \ + "<pkgconf/mlt_arm_sa11x0_sa1100mm_rom.h>" } + } + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 0 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } + + cdl_option CYGBLD_BUILD_REDBOOT_BIN { + display "Build Redboot ROM binary image" + active_if CYGBLD_BUILD_REDBOOT + default_value 1 + no_define + description "This option enables the conversion of the Redboot ELF + image to a binary image suitable for ROM programming." + + make -priority 325 { + <PREFIX>/bin/redboot.bin : <PREFIX>/bin/redboot.elf + $(OBJCOPY) --strip-debug $< $(@:.bin=.img) + $(OBJCOPY) -O srec $< $(@:.bin=.srec) + $(OBJCOPY) -O binary $< $@ + } + } +}
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/sa11x0/sa1100mm/current/include/hal_platform_ints.h @@ -0,0 +1,108 @@ +#ifndef CYGONCE_HAL_PLATFORM_INTS_H +#define CYGONCE_HAL_PLATFORM_INTS_H +//========================================================================== +// +// hal_platform_ints.h +// +// HAL Interrupt and clock support +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas, dmoseley +// Date: 2000-05-08 +// Purpose: Define Interrupt support +// Description: The interrupt details for the SA1100/Multimedia are defined here. +// Usage: +// #include <cyg/hal/hal_platform_ints.h> +// ... +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#define CYGNUM_HAL_INTERRUPT_GPIO0 0 +#define CYGNUM_HAL_INTERRUPT_GPIO1 1 +#define CYGNUM_HAL_INTERRUPT_GPIO2 2 +#define CYGNUM_HAL_INTERRUPT_GPIO3 3 +#define CYGNUM_HAL_INTERRUPT_GPIO4 4 +#define CYGNUM_HAL_INTERRUPT_GPIO5 5 +#define CYGNUM_HAL_INTERRUPT_GPIO6 6 +#define CYGNUM_HAL_INTERRUPT_GPIO7 7 +#define CYGNUM_HAL_INTERRUPT_GPIO8 8 +#define CYGNUM_HAL_INTERRUPT_GPIO9 9 +#define CYGNUM_HAL_INTERRUPT_GPIO10 10 +#define CYGNUM_HAL_INTERRUPT_GPIO 11 // Don't use directly +#define CYGNUM_HAL_INTERRUPT_LCD 12 +#define CYGNUM_HAL_INTERRUPT_UDC 13 +#define CYGNUM_HAL_INTERRUPT_UART1 15 +#define CYGNUM_HAL_INTERRUPT_UART2 16 +#define CYGNUM_HAL_INTERRUPT_UART3 17 +#define CYGNUM_HAL_INTERRUPT_MCP 18 +#define CYGNUM_HAL_INTERRUPT_SSP 19 +#define CYGNUM_HAL_INTERRUPT_TIMER0 26 +#define CYGNUM_HAL_INTERRUPT_TIMER1 27 +#define CYGNUM_HAL_INTERRUPT_TIMER2 28 +#define CYGNUM_HAL_INTERRUPT_TIMER3 29 +#define CYGNUM_HAL_INTERRUPT_HZ 30 +#define CYGNUM_HAL_INTERRUPT_ALARM 31 + +// GPIO bits 31..11 can generate interrupts as well, but they all +// end up clumped into interrupt signal #11. Using the symbols +// below allow for detection of these separately. + +#define CYGNUM_HAL_INTERRUPT_GPIO11 (32+11) +#define CYGNUM_HAL_INTERRUPT_GPIO12 (32+12) +#define CYGNUM_HAL_INTERRUPT_GPIO13 (32+13) +#define CYGNUM_HAL_INTERRUPT_GPIO14 (32+14) +#define CYGNUM_HAL_INTERRUPT_GPIO15 (32+15) +#define CYGNUM_HAL_INTERRUPT_GPIO16 (32+16) +#define CYGNUM_HAL_INTERRUPT_GPIO17 (32+17) +#define CYGNUM_HAL_INTERRUPT_GPIO18 (32+18) +#define CYGNUM_HAL_INTERRUPT_GPIO19 (32+19) +#define CYGNUM_HAL_INTERRUPT_GPIO20 (32+20) +#define CYGNUM_HAL_INTERRUPT_GPIO21 (32+21) +#define CYGNUM_HAL_INTERRUPT_GPIO22 (32+22) +#define CYGNUM_HAL_INTERRUPT_GPIO23 (32+23) +#define CYGNUM_HAL_INTERRUPT_GPIO24 (32+24) +#define CYGNUM_HAL_INTERRUPT_GPIO25 (32+25) +#define CYGNUM_HAL_INTERRUPT_GPIO26 (32+26) +#define CYGNUM_HAL_INTERRUPT_GPIO27 (32+27) + +#define CYGNUM_HAL_INTERRUPT_NONE -1 + +#define CYGNUM_HAL_ISR_MIN 0 +#define CYGNUM_HAL_ISR_MAX (27+32) + +#define CYGNUM_HAL_ISR_COUNT (CYGNUM_HAL_ISR_MAX+1) + +// The vector used by the Real time clock +#define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_INTERRUPT_TIMER0 + +#endif // CYGONCE_HAL_PLATFORM_INTS_H
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/sa11x0/sa1100mm/current/include/hal_platform_setup.h @@ -0,0 +1,370 @@ +#ifndef CYGONCE_HAL_PLATFORM_SETUP_H +#define CYGONCE_HAL_PLATFORM_SETUP_H + +/*============================================================================= +// +// hal_platform_setup.h +// +// Platform specific support for HAL (assembly code) +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas, dmoseley +// Travis C. Furrer <furrer@mit.edu> +// Date: 2000-05-08 +// Purpose: Intel SA1100 Multimedia platform specific support routines +// Description: +// Usage: #include <cyg/hal/hal_platform_setup.h> +// This file should only be used by "vectors.S" +// +//####DESCRIPTIONEND#### +// +//===========================================================================*/ + +#include <pkgconf/system.h> // System-wide configuration info +#include CYGBLD_HAL_PLATFORM_H // Platform specific configuration +#include <cyg/hal/hal_sa11x0.h> // Platform specific hardware definitions +#include <cyg/hal/hal_mmu.h> // MMU definitions + +#if defined(CYG_HAL_STARTUP_ROM) +#define PLATFORM_SETUP1 _platform_setup1 +#define CYGHWR_HAL_ARM_HAS_MMU + +#if (CYGHWR_HAL_ARM_SA11X0_PROCESSOR_CLOCK == 59000) +#define SA11X0_PLL_CLOCK 0x0 +#elif (CYGHWR_HAL_ARM_SA11X0_PROCESSOR_CLOCK == 73700) +#define SA11X0_PLL_CLOCK 0x1 +#elif (CYGHWR_HAL_ARM_SA11X0_PROCESSOR_CLOCK == 88500) +#define SA11X0_PLL_CLOCK 0x2 +#elif (CYGHWR_HAL_ARM_SA11X0_PROCESSOR_CLOCK == 103200) +#define SA11X0_PLL_CLOCK 0x3 +#elif (CYGHWR_HAL_ARM_SA11X0_PROCESSOR_CLOCK == 118000) +#define SA11X0_PLL_CLOCK 0x4 +#elif (CYGHWR_HAL_ARM_SA11X0_PROCESSOR_CLOCK == 132700) +#define SA11X0_PLL_CLOCK 0x5 +#elif (CYGHWR_HAL_ARM_SA11X0_PROCESSOR_CLOCK == 147500) +#define SA11X0_PLL_CLOCK 0x6 +#elif (CYGHWR_HAL_ARM_SA11X0_PROCESSOR_CLOCK == 162200) +#define SA11X0_PLL_CLOCK 0x7 +#elif (CYGHWR_HAL_ARM_SA11X0_PROCESSOR_CLOCK == 176900) +#define SA11X0_PLL_CLOCK 0x8 +#elif (CYGHWR_HAL_ARM_SA11X0_PROCESSOR_CLOCK == 191700) +#define SA11X0_PLL_CLOCK 0x9 +#elif (CYGHWR_HAL_ARM_SA11X0_PROCESSOR_CLOCK == 206400) +#define SA11X0_PLL_CLOCK 0xA +#elif (CYGHWR_HAL_ARM_SA11X0_PROCESSOR_CLOCK == 221200) +#define SA11X0_PLL_CLOCK 0xB +#else +#error Invalid processor clock speed +#endif + +// This function is called very early on by the boot ROM (or by any ROM +// based startup). It's job is to initialize the hardware to a known state +// so that eCos applications can execute properly. + +// This version of the code is patterned after the contribution from +// Travis Furer (@MIT) + + +// Define macro used to diddle the LEDs during early initialization. +// Can use r0+r1. Argument in \x. + +#define CYGHWR_LED_MACRO _set_LEDS \x + +// Initialize GPIOs +#define GPIO_GRER (SA11X0_GPIO_RISING_EDGE_DETECT-SA11X0_GPIO_PIN_LEVEL) +#define GPIO_GFER (SA11X0_GPIO_FALLING_EDGE_DETECT-SA11X0_GPIO_PIN_LEVEL) +#define GPIO_GAFR (SA11X0_GPIO_ALTERNATE_FUNCTION-SA11X0_GPIO_PIN_LEVEL) +#define GPIO_GEDR (SA11X0_GPIO_EDGE_DETECT_STATUS-SA11X0_GPIO_PIN_LEVEL) +#define GPIO_GPDR (SA11X0_GPIO_PIN_DIRECTION-SA11X0_GPIO_PIN_LEVEL) +#define GPIO_GPCR (SA11X0_GPIO_PIN_OUTPUT_CLEAR-SA11X0_GPIO_PIN_LEVEL) + .macro _init_GPIO + ldr r1,=SA11X0_GPIO_PIN_LEVEL + mov r0,#0 + str r0,[r1,#GPIO_GRER] // Disable rising edge detects + str r0,[r1,#GPIO_GFER] // Disable falling edge detects + str r0,[r1,#GPIO_GAFR] // No alt. funcs. during init + sub r0,r0,#1 + str r0,[r1,#GPIO_GPCR] // Force all outputs to low + str r0,[r1,#GPIO_GEDR] // Clear edge detect status + ldr r0,=0x00100300 + str r0,[r1,#GPIO_GPDR] // Only LEDs outputs (for now) + .endm + +#define DISCRETE_LED_REG_BASE 0x18800000 +#define KEYPAD_IO_O 0x4 +#define DISCRETE_LED_O 0x6 +#define HEX_LED_REG_BASE 0x18c00000 +#define HEX_LED_O 0x0 +#define HEX_DATA_MASK 0x0F +#define HEX_LED_0_STROBE 0x10 +#define HEX_LED_1_STROBE 0x20 +#define HEX_LED_BOTH_STROBES (HEX_LED_0_STROBE | HEX_LED_1_STROBE) + +// Display value on hex LED display + .macro _set_LEDS,val + ldr r1, =HEX_LED_REG_BASE + + ldr r2, =\val + and r2, r2, #0xf + orr r0, r2, #HEX_LED_0_STROBE + str r0, [r1, #HEX_LED_O] + + ldr r2, =\val + mov r2, r2, LSR #4 + orr r0, r2, #HEX_LED_1_STROBE + str r0, [r1, #HEX_LED_O] + + nop + .endm + +// Initialize HEX display. + .macro _init_HEX_DISPLAY + ldr r1, =DISCRETE_LED_REG_BASE + ldr r2, =~0 + str r2, [r1, #KEYPAD_IO_O] + str r2, [r1, #DISCRETE_LED_O] + _set_LEDS 0x23 + .endm + +// Setup pin directions: +// inputs: all serial receive pins +// outputs: all LCD pins, all serial transmit pins + .macro _init_PERIPHERAL_PINS + ldr r0,=0x00355FFF + ldr r1,=SA11X0_PPC_PIN_DIRECTION + str r0,[r1] + mov r0,#0 // Force initial state + ldr r1,=SA11X0_PPC_PIN_STATE + str r0,[r1] + ldr r1,=SA11X0_PPC_PIN_ASSIGNMENT // Disable any reassignments + str r0,[r1] + .endm + +// Set core frequency (this can take up to 150us) + .macro _set_CLOCK_FREQUENCY + mov r0,#SA11X0_PLL_CLOCK + ldr r1,=SA11X0_PWR_MGR_PLL_CONFIG + str r0,[r1] + .endm + +// Enable clock switching (must be done after setting core frequency) + .macro _enable_CLOCK_SWITCHING + mcr p15,0,r1,c15,c1,2 + .endm + +// Initialize memory interfaces. (ROM, SRAM, Flash, DRAM, etc) +// +// SA1100 Multimedia memory is as follows: +// ROM 128K (assuming 32 bit accesses) +// Flash 4M (assuming 32 bit accesses) +// RAM 8M +// +// From SA11X0 Manual, Section 10.7.1: +// +// The following flow should be followed when coming out of +// reset, whether for sleep or power-up: +// +// - Read boot ROM and write to memory configuration +// registers, but do not enable DRAM banks. +// +// - If necessary, finish any DRAM power-up wait period +// (usually about 100us). +// +// - If coming out of sleep, see Section 9.5, Power +// Manager on page 9-26 on how to release the nCAS and +// nRAS pins from their self-refresh state. +// +// - If coming out of sleep, wait the DRAM-specific +// post-self-refresh precharge period before issuing +// a new DRAM transaction. +// +// - If power-on reset, perform the number of +// initialization refreshes required by the specific +// DRAM part by reading disabled banks. A read from +// any disabled bank will refresh all four banks. +// +// - Enable DRAM banks by setting MDCNFG:DE3:0. +// +#define DRAM_CONFIG_VALUE (SA11X0_DRAM_REFRESH_INTERVAL(312) | \ + SA11X0_DATA_INPUT_LATCH_CAS_PLUS_THREE | \ + SA11X0_DRAM_CAS_BEFORE_RAS(5) | \ + SA11X0_DRAM_RAS_PRECHARGE(4) | \ + SA11X0_DRAM_CLOCK_CPU_CLOCK | \ + SA11X0_DRAM_ROW_ADDRESS_BITS_11 | \ + SA11X0_DRAM_BANK_0_ENABLED | \ + SA11X0_DRAM_BANK_1_DISABLED | \ + SA11X0_DRAM_BANK_2_DISABLED | \ + SA11X0_DRAM_BANK_3_DISABLED) + +#define DRAM_CAS0_WAVEFORM 0xF0F0F00F +#define DRAM_CAS1_WAVEFORM 0XF0F0F0F0 +#define DRAM_CAS2_WAVEFORM 0xFFFFFFF0 + +#define BANK_0_CONTROL_VALUE SA11X0_STATIC_ROM_TYPE_FLASH | \ + SA11X0_STATIC_ROM_BUS_WIDTH_16_BITS | \ + SA11X0_STATIC_ROM_DELAY_FIRST_ACCESS(0x1F) | \ + SA11X0_STATIC_ROM_DELAY_NEXT_ACCESS(0x1F) | \ + SA11X0_STATIC_ROM_RECOVERY(0x7) +#define BANK_1_CONTROL_VALUE SA11X0_STATIC_ROM_TYPE_FLASH | \ + SA11X0_STATIC_ROM_BUS_WIDTH_32_BITS | \ + SA11X0_STATIC_ROM_DELAY_FIRST_ACCESS(0x1F) | \ + SA11X0_STATIC_ROM_DELAY_NEXT_ACCESS(0x1F) | \ + SA11X0_STATIC_ROM_RECOVERY(0x7) +#define STATIC_CONTROL_0_VALUE (SA11X0_STATIC_ROM_BANK_0(BANK_0_CONTROL_VALUE) | \ + SA11X0_STATIC_ROM_BANK_1(BANK_1_CONTROL_VALUE)) + +#define BANK_2_CONTROL_VALUE SA11X0_STATIC_ROM_TYPE_FLASH | \ + SA11X0_STATIC_ROM_BUS_WIDTH_16_BITS | \ + SA11X0_STATIC_ROM_DELAY_FIRST_ACCESS(0x1F) | \ + SA11X0_STATIC_ROM_DELAY_NEXT_ACCESS(0x1F) | \ + SA11X0_STATIC_ROM_RECOVERY(0x7) +#define BANK_3_CONTROL_VALUE SA11X0_STATIC_ROM_TYPE_FLASH | \ + SA11X0_STATIC_ROM_BUS_WIDTH_32_BITS | \ + SA11X0_STATIC_ROM_DELAY_FIRST_ACCESS(0x1F) | \ + SA11X0_STATIC_ROM_DELAY_NEXT_ACCESS(0x1F) | \ + SA11X0_STATIC_ROM_RECOVERY(0x7) +#define STATIC_CONTROL_1_VALUE (SA11X0_STATIC_ROM_BANK_2(BANK_2_CONTROL_VALUE) | \ + SA11X0_STATIC_ROM_BANK_3(BANK_3_CONTROL_VALUE)) + + .macro _init_MEM_INTERFACES + /* + * Initialize the DRAM Controller + */ + ldr r0, =SA11X0_DRAM_CONFIGURATION + ldr r1, =DRAM_CONFIG_VALUE + str r1, [r0] + + ldr r0, =SA11X0_DRAM0_CAS_0 + ldr r1, =DRAM_CAS0_WAVEFORM + str r1, [r0] + + ldr r0, =SA11X0_DRAM0_CAS_1 + ldr r1, =DRAM_CAS1_WAVEFORM + str r1, [r0] + + ldr r0, =SA11X0_DRAM0_CAS_2 + ldr r1, =DRAM_CAS2_WAVEFORM + str r1, [r0] + + ldr r0, =SA11X0_STATIC_CONTROL_0 + + /* + * Get the reset ROM setup + */ + ldr r1, [r0] + + /* + * Get the 16/32 bit setting to merge into the appropriate + * register values later on. + */ + and r1, r1, #SA11X0_STATIC_ROM_BUS_WIDTH_MASK + + /* + * MSC0 - bank 0 ROM, bank 1 FLASH + */ + ldr r2, =STATIC_CONTROL_0_VALUE + orr r1, r1, r2 + + str r1, [r0] + + /* + * MSC1 - bank 2 SRAM, bank 3 REG + */ + ldr r0, =SA11X0_STATIC_CONTROL_1 + ldr r1, =STATIC_CONTROL_1_VALUE + str r1, [r0] + + /* + * Delay to let the DRAM warm up + */ + ldr r0, =0x200 +0: subs r0, r0, #1 + bne 0b + + .endm + + + .macro _platform_setup1 + nop + nop + nop + nop + nop + nop + nop + nop + nop + + _init_GPIO + _init_HEX_DISPLAY /* this is flaky sometimes */ + _init_HEX_DISPLAY /* so do it twice just in case */ + + _set_LEDS 0x15 + + _init_PERIPHERAL_PINS + _set_LEDS 0x13 + + _set_CLOCK_FREQUENCY + _enable_CLOCK_SWITCHING + _set_LEDS 0x12 + + _init_MEM_INTERFACES + _set_LEDS 0x11 + + // Set up a stack [for calling C code] + ldr r1,=__startup_stack + ldr r2,=SA11X0_RAM_BANK0_BASE + orr sp,r1,r2 + + // Create MMU tables + bl hal_mmu_init + + _set_LEDS 0x09 + // Enable MMU + ldr r2,=10f + ldr r1,=MMU_Control_Init|MMU_Control_M + mcr MMU_CP,0,r1,MMU_Control,c0 + mov pc,r2 /* Change address spaces */ + + nop + nop + nop +10: + _set_LEDS 0x08 + + .endm + +#else // STARTUP_ROM +#define PLATFORM_SETUP1 +#endif + +/*---------------------------------------------------------------------------*/ +/* end of hal_platform_setup.h */ +#endif /* CYGONCE_HAL_PLATFORM_SETUP_H */
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/sa11x0/sa1100mm/current/include/pkgconf/mlt_arm_sa11x0_sa1100mm_ram.h @@ -0,0 +1,10 @@ +// eCos memory layout - Tue Apr 04 20:19:06 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.h> +#include <stddef.h> + +#define CYGMEM_REGION_ram (0) +#define CYGMEM_REGION_ram_SIZE (0x800000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W)
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/sa11x0/sa1100mm/current/include/pkgconf/mlt_arm_sa11x0_sa1100mm_ram.ldi @@ -0,0 +1,24 @@ +// eCos memory layout - Tue Apr 04 20:19:06 2000 + +// This is a generated file - do not edit + +MEMORY +{ + ram : ORIGIN = 0, LENGTH = 0x800000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_fixed_vectors (ram, 0x20, LMA_EQ_VMA) + SECTION_rom_vectors (ram, 0x10000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTIONS_END +}
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/sa11x0/sa1100mm/current/include/pkgconf/mlt_arm_sa11x0_sa1100mm_ram.mlt @@ -0,0 +1,12 @@ +version 0 +region ram 0 800000 0 ! +section fixed_vectors 0 1 0 1 1 0 1 0 20 20 ! +section rom_vectors 0 1 0 1 1 1 1 1 10000 10000 text text ! +section text 0 4 0 1 0 1 0 1 fini fini ! +section fini 0 4 0 1 0 1 0 1 rodata rodata ! +section rodata 0 4 0 1 0 1 0 1 rodata1 rodata1 ! +section rodata1 0 4 0 1 0 1 0 1 fixup fixup ! +section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table ! +section gcc_except_table 0 4 0 1 0 1 0 1 data data ! +section data 0 4 0 1 0 1 0 1 bss bss ! +section bss 0 4 0 1 0 0 0 0 !
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/sa11x0/sa1100mm/current/include/pkgconf/mlt_arm_sa11x0_sa1100mm_rom.h @@ -0,0 +1,16 @@ +// eCos memory layout - Tue Apr 04 20:19:06 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.h> +#include <stddef.h> + +#define CYGMEM_REGION_ram (0) +#define CYGMEM_REGION_ram_SIZE (0x800000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x50000000) +#define CYGMEM_REGION_rom_SIZE (0x40000) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +extern char CYG_LABEL_NAME (_reserved) []; +#define CYGMEM_SECTION_reserved (CYG_LABEL_NAME (_reserved)) +#define CYGMEM_SECTION_reserved_SIZE (0x8000)
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/sa11x0/sa1100mm/current/include/pkgconf/mlt_arm_sa11x0_sa1100mm_rom.ldi @@ -0,0 +1,25 @@ +// eCos memory layout - Tue Apr 04 20:19:06 2000 + +// This is a generated file - do not edit + +MEMORY +{ + ram : ORIGIN = 0, LENGTH = 0x800000 + rom : ORIGIN = 0x50000000, LENGTH = 0x40000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (rom, 0x50000000, LMA_EQ_VMA) + SECTION_text (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fixed_vectors (ram, 0x20, LMA_EQ_VMA) + SECTION_data (ram, 0x8000, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTIONS_END +}
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/sa11x0/sa1100mm/current/include/pkgconf/mlt_arm_sa11x0_sa1100mm_rom.mlt @@ -0,0 +1,13 @@ +version 0 +region ram 0 800000 0 ! +region rom 50000000 40000 1 ! +section fixed_vectors 0 1 0 1 1 0 1 0 20 20 ! +section data 0 1 1 1 1 1 0 0 8000 bss ! +section bss 0 4 0 1 0 0 0 0 ! +section rom_vectors 0 1 0 1 1 1 1 1 50000000 50000000 text text ! +section text 0 4 0 1 0 1 0 1 fini fini ! +section fini 0 4 0 1 0 1 0 1 rodata rodata ! +section rodata 0 4 0 1 0 1 0 1 rodata1 rodata1 ! +section rodata1 0 4 0 1 0 1 0 1 fixup fixup ! +section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table ! +section gcc_except_table 0 4 0 1 0 0 0 1 data !
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/sa11x0/sa1100mm/current/include/sa1100mm.h @@ -0,0 +1,50 @@ +#ifndef CYGONCE_SA1100MM_H +#define CYGONCE_SA1100MM_H + +/*============================================================================= +// +// sa1100mm.h +// +// Platform specific support (registers, etc) +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): dmoseley +// Contributors: dmoseley +// Date: 2000-10-25 +// Purpose: Intel SA1110/Multimedia platform specific support routines +// Description: +// Usage: #include <cyg/hal/sa1100mm.h> +// +//####DESCRIPTIONEND#### +// +//===========================================================================*/ + +/*---------------------------------------------------------------------------*/ +/* end of sa1100mm.h */ +#endif /* CYGONCE_SA1100MM_H */
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/sa11x0/sa1100mm/current/src/sa1100mm_misc.c @@ -0,0 +1,227 @@ +//========================================================================== +// +// sa1100mm_misc.c +// +// HAL misc board support code for StrongARM SA1110/Multimedia +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: hmt, dmoseley +// Travis C. Furrer <furrer@mit.edu> +// Date: 2000-05-21 +// Purpose: HAL board support +// Description: Implementations of HAL board interfaces +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include <pkgconf/hal.h> +#include <pkgconf/system.h> +#include CYGBLD_HAL_PLATFORM_H + +#include <cyg/infra/cyg_type.h> // base types +#include <cyg/infra/cyg_trac.h> // tracing macros +#include <cyg/infra/cyg_ass.h> // assertion macros + +#include <cyg/hal/hal_io.h> // IO macros +#include <cyg/hal/hal_arch.h> // Register state info +#include <cyg/hal/hal_diag.h> +#include <cyg/hal/hal_intr.h> // Interrupt names +#include <cyg/hal/hal_cache.h> +#include <cyg/hal/hal_sa11x0.h> // Hardware definitions +#include <cyg/hal/sa1100mm.h> // Platform specifics + +#include <cyg/infra/diag.h> // diag_printf + +// ------------------------------------------------------------------------- +// MMU initialization: +// +// These structures are laid down in memory to define the translation +// table. +// + +/* + * SA-1100 Translation Table Base Bit Masks */ +#define ARM_TRANSLATION_TABLE_MASK 0xFFFFC000 + +/* + * SA-1100 Domain Access Control Bit Masks + */ +#define ARM_ACCESS_TYPE_NO_ACCESS(domain_num) (0x0 << (domain_num)*2) +#define ARM_ACCESS_TYPE_CLIENT(domain_num) (0x1 << (domain_num)*2) +#define ARM_ACCESS_TYPE_MANAGER(domain_num) (0x3 << (domain_num)*2) + +struct ARM_MMU_FIRST_LEVEL_FAULT { + int id : 2; + int sbz : 30; +}; +#define ARM_MMU_FIRST_LEVEL_FAULT_ID 0x0 + +struct ARM_MMU_FIRST_LEVEL_PAGE_TABLE { + int id : 2; + int imp : 2; + int domain : 4; + int sbz : 1; + int base_address : 23; +}; +#define ARM_MMU_FIRST_LEVEL_PAGE_TABLE_ID 0x1 + +struct ARM_MMU_FIRST_LEVEL_SECTION { + int id : 2; + int b : 1; + int c : 1; + int imp : 1; + int domain : 4; + int sbz0 : 1; + int ap : 2; + int sbz1 : 8; + int base_address : 12; +}; +#define ARM_MMU_FIRST_LEVEL_SECTION_ID 0x2 + +struct ARM_MMU_FIRST_LEVEL_RESERVED { + int id : 2; + int sbz : 30; +}; +#define ARM_MMU_FIRST_LEVEL_RESERVED_ID 0x3 + +#define ARM_MMU_FIRST_LEVEL_DESCRIPTOR_ADDRESS(ttb_base, table_index) \ + (unsigned long *)((unsigned long)(ttb_base) + ((table_index) << 2)) + +#define ARM_FIRST_LEVEL_PAGE_TABLE_SIZE 0x4000 + +#define ARM_MMU_SECTION(ttb_base, actual_base, virtual_base, \ + cacheable, bufferable, perm) \ + CYG_MACRO_START \ + register union ARM_MMU_FIRST_LEVEL_DESCRIPTOR desc; \ + \ + desc.word = 0; \ + desc.section.id = ARM_MMU_FIRST_LEVEL_SECTION_ID; \ + desc.section.domain = 0; \ + desc.section.c = (cacheable); \ + desc.section.b = (bufferable); \ + desc.section.ap = (perm); \ + desc.section.base_address = (actual_base); \ + *ARM_MMU_FIRST_LEVEL_DESCRIPTOR_ADDRESS(ttb_base, (virtual_base)) \ + = desc.word; \ + CYG_MACRO_END + +#define X_ARM_MMU_SECTION(abase,vbase,size,cache,buff,access) \ + { int i; int j = abase; int k = vbase; \ + for (i = size; i > 0 ; i--,j++,k++) \ + { \ + ARM_MMU_SECTION(ttb_base, j, k, cache, buff, access); \ + } \ + } + +union ARM_MMU_FIRST_LEVEL_DESCRIPTOR { + unsigned long word; + struct ARM_MMU_FIRST_LEVEL_FAULT fault; + struct ARM_MMU_FIRST_LEVEL_PAGE_TABLE page_table; + struct ARM_MMU_FIRST_LEVEL_SECTION section; + struct ARM_MMU_FIRST_LEVEL_RESERVED reserved; +}; + +#define ARM_UNCACHEABLE 0 +#define ARM_CACHEABLE 1 +#define ARM_UNBUFFERABLE 0 +#define ARM_BUFFERABLE 1 + +#define ARM_ACCESS_PERM_NONE_NONE 0 +#define ARM_ACCESS_PERM_RO_NONE 0 +#define ARM_ACCESS_PERM_RO_RO 0 +#define ARM_ACCESS_PERM_RW_NONE 1 +#define ARM_ACCESS_PERM_RW_RO 2 +#define ARM_ACCESS_PERM_RW_RW 3 + +void +hal_mmu_init(void) +{ + unsigned long ttb_base = SA11X0_RAM_BANK0_BASE + 0x4000; + unsigned long i; + + /* + * Set the TTB register + */ + asm volatile ("mcr p15,0,%0,c2,c0,0" : : "r"(ttb_base) /*:*/); + + /* + * Set the Domain Access Control Register + */ + i = ARM_ACCESS_TYPE_MANAGER(0) | + ARM_ACCESS_TYPE_NO_ACCESS(1) | + ARM_ACCESS_TYPE_NO_ACCESS(2) | + ARM_ACCESS_TYPE_NO_ACCESS(3) | + ARM_ACCESS_TYPE_NO_ACCESS(4) | + ARM_ACCESS_TYPE_NO_ACCESS(5) | + ARM_ACCESS_TYPE_NO_ACCESS(6) | + ARM_ACCESS_TYPE_NO_ACCESS(7) | + ARM_ACCESS_TYPE_NO_ACCESS(8) | + ARM_ACCESS_TYPE_NO_ACCESS(9) | + ARM_ACCESS_TYPE_NO_ACCESS(10) | + ARM_ACCESS_TYPE_NO_ACCESS(11) | + ARM_ACCESS_TYPE_NO_ACCESS(12) | + ARM_ACCESS_TYPE_NO_ACCESS(13) | + ARM_ACCESS_TYPE_NO_ACCESS(14) | + ARM_ACCESS_TYPE_NO_ACCESS(15); + asm volatile ("mcr p15,0,%0,c3,c0,0" : : "r"(i) /*:*/); + + /* + * First clear all TT entries - ie Set them to Faulting + */ + memset((void *)ttb_base, 0, ARM_FIRST_LEVEL_PAGE_TABLE_SIZE); + + /* Actual Virtual Size Attributes Function */ + /* Base Base MB cached? buffered? access permissions */ + /* xxx00000 xxx00000 */ + X_ARM_MMU_SECTION(0x000, 0x500, 1, ARM_CACHEABLE, ARM_BUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* Boot flash ROMspace */ + X_ARM_MMU_SECTION(0x080, 0x080, 4, ARM_CACHEABLE, ARM_BUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* Application flash ROM */ + X_ARM_MMU_SECTION(0x100, 0x100, 128, ARM_UNCACHEABLE, ARM_UNBUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* SA-1101 Development Board Registers */ + X_ARM_MMU_SECTION(0x180, 0x180, 1, ARM_UNCACHEABLE, ARM_UNBUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* Ct8020 DSP */ + X_ARM_MMU_SECTION(0x184, 0x184, 1, ARM_UNCACHEABLE, ARM_UNBUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* XBusReg */ + X_ARM_MMU_SECTION(0x188, 0x188, 1, ARM_UNCACHEABLE, ARM_UNBUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* SysRegA */ + X_ARM_MMU_SECTION(0x18C, 0x18C, 1, ARM_UNCACHEABLE, ARM_UNBUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* SysRegB */ + X_ARM_MMU_SECTION(0x190, 0x190, 4, ARM_UNCACHEABLE, ARM_UNBUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* CPLD A */ + X_ARM_MMU_SECTION(0x194, 0x194, 4, ARM_UNCACHEABLE, ARM_UNBUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* CPLD B */ + X_ARM_MMU_SECTION(0x200, 0x200, 512, ARM_UNCACHEABLE, ARM_UNBUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* PCMCIA Sockets */ + X_ARM_MMU_SECTION(0xC00, 0, 8, ARM_CACHEABLE, ARM_BUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* DRAM Bank 0 */ + X_ARM_MMU_SECTION(0xE00, 0xE00, 128, ARM_CACHEABLE, ARM_BUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* Zeros (Cache Clean) Bank */ + X_ARM_MMU_SECTION(0x800, 0x800, 1024, ARM_UNCACHEABLE, ARM_UNBUFFERABLE, ARM_ACCESS_PERM_RW_RW); /* StrongARM(R) Registers */ + +} + +// +// Platform specific initialization +// + +void +plf_hardware_init(void) +{ +}
--- a/packages/hal/i386/arch/current/ChangeLog +++ b/packages/hal/i386/arch/current/ChangeLog @@ -1,3 +1,9 @@ +2000-11-01 Jonathan Larmour <jlarmour@redhat.com> + + * src/vectors.S (hal_pc_irq): Use correct register for ISR return value + when calling interrupt_end() + Thanks to Phil Hinton for reporting. + 2000-10-20 Jonathan Larmour <jlarmour@redhat.com> * src/vectors.S (_start): call constructors after initializing
--- a/packages/hal/i386/arch/current/src/vectors.S +++ b/packages/hal/i386/arch/current/src/vectors.S @@ -232,7 +232,7 @@ hal_pc_irq: movl (%ebx, %ecx, 4), %edx # regs is left from the push of ebp above; pushl %edx - pushl %eax + pushl %esi # the old eax was saved in esi before hal_intc_ack call interrupt_end addl $8, %esp #endif /* CYGFUN_HAL_COMMON_KERNEL_SUPPORT */
--- a/packages/hal/i386/linux/current/ChangeLog +++ b/packages/hal/i386/linux/current/ChangeLog @@ -1,3 +1,10 @@ +2000-11-02 Jonathan Larmour <jlarmour@redhat.com> + + * src/entry.c (_linux_entry): Extend memory using brk() syscall to + match memory layout + + * src/syscall-i386-linux-1.0.S: Add brk syscall + 2000-10-20 Jonathan Larmour <jlarmour@redhat.com> * include/pkgconf/mlt_i386_linux_ram.mlt:
--- a/packages/hal/i386/linux/current/src/entry.c +++ b/packages/hal/i386/linux/current/src/entry.c @@ -32,7 +32,7 @@ //#####DESCRIPTIONBEGIN#### // // Author(s): proven -// Contributors:proven, jskov +// Contributors:proven, jskov, jlarmour // Date: 1999-01-06 // Purpose: Entry point for Linux synthetic target. // @@ -40,18 +40,29 @@ // //========================================================================= +#include <pkgconf/system.h> #include <cyg/infra/cyg_type.h> +#include <cyg/infra/cyg_ass.h> +#include CYGHWR_MEMORY_LAYOUT_H externC void cyg_hal_isr_init( void ); externC void cyg_hal_invoke_constructors( void ); externC void cyg_start( void ); externC void cyg_hal_hardware_init( void ); +externC void *cyg_hal_sys_brk(void *newbrk); void _linux_entry( void ) { + void *oldbrk=NULL; + void *newbrk=(void *)(CYGMEM_REGION_ram + CYGMEM_REGION_ram_SIZE); // Should get argc argv cyg_hal_hardware_init(); cyg_hal_isr_init(); + // unconditionally set memory regino to the size specified in the + // memory layout + oldbrk = cyg_hal_sys_brk(newbrk); + // should check + CYG_ASSERT( oldbrk>=newbrk, "brk() failed" ); cyg_hal_invoke_constructors(); cyg_start(); }
--- a/packages/hal/i386/linux/current/src/syscall-i386-linux-1.0.S +++ b/packages/hal/i386/linux/current/src/syscall-i386-linux-1.0.S @@ -583,3 +583,7 @@ SYSCALL5(_newselect) //========================================================================== // machdep_sys_fdatasync() SYSCALL1(fdatasync) + +//========================================================================== +// machdep_sys_brk() +SYSCALL1(brk)
--- a/packages/hal/i386/pc/current/ChangeLog +++ b/packages/hal/i386/pc/current/ChangeLog @@ -1,3 +1,8 @@ +2000-11-02 Fabrice Gautier <Fabrice_Gautier@sdesigns.com> + + * src/platform.inc (hal_cpu_init): Load image from floppy one + sector at a time to avoid "DMA access across 64k boundary" error. + 2000-10-20 Jonathan Larmour <jlarmour@redhat.com> * include/pkgconf/mlt_i386_pc_floppy.mlt:
--- a/packages/hal/i386/pc/current/include/platform.inc +++ b/packages/hal/i386/pc/current/include/platform.inc @@ -65,8 +65,7 @@ sectorsPerTrack = 18 bytesPerSector = 512 - bytesPerTrack = sectorsPerTrack * bytesPerSector - dptLength = 3 /* words. */ + esPerSector = 32 /* = 512/16 */ cld /* always count up. */ @@ -78,9 +77,9 @@ andl $0xF000, %eax movw %ax, %ss - /* Ask the BIOS for info about the amount of RAM available. We push these - onto the stack for later use. - */ + /* Ask the BIOS for info about the amount of RAM available. We push + * these onto the stack for later use. + */ xorl %eax, %eax movb $0x88, %ah /* Get the amount of extended memory. */ @@ -93,35 +92,63 @@ shl $10, %eax pushl %eax - - /* Read the rest of the image to _start. This code works by reading a track - at a time... + /* reset floppy */ + movb $0,%ah + movb $0,%dl + int $0x13 + jc _error + + /* Read the rest of the image to _start. This code works by reading + only one sector at a time to avoid "buffer cross 64k boundary" fatal + problem... This is slow but should work in almost all situations. + _start should be aligned on a 512 bytes boundary to be sure. */ - movl $_edata, %eax - movl $_start, %ebx /* Our destination address. */ - subl %ebx, %eax /* Number of bytes in the image. */ - movl $1, %ecx /* Track/sector to read from (starts at 1). */ + /* destination pointer es:bx */ + /* With correct alignement, bx should be 0 and es should be a multiple + * of 32. If not it may cause the "buffer cross 64k boundary" problem + * (cf above) + */ + movl $_start,%eax + movw %ax,%bx + andw $0xF,%bx + shrl $4,%eax + movw %ax, %es -0: - cmpl $0, %eax - jle 1f + /* initials head/track/sector */ + movw $0,%dx + movw $1,%cx + + xorl %edi,%edi + jmp _loadsector - pushl %eax /* Save the number of bytes we want. */ - pushl %ebx /* Save our current address. */ - pushl %ecx /* Save our disk location. */ +_nextsector: + addw $esPerSector, %di /* advance buffer pointer */ + shll $4,%edi + cmpl $_edata,%edi + jg _endload /* next sector ? */ + shrl $4,%edi + movw %di,%es + incb %cl + cmpb $sectorsPerTrack, %cl + jbe _loadsector /* next head ?*/ + movb $1, %cl + incb %dh + cmpb $1, %dh + je _loadsector /* next track ? */ + movb $0, %dh + incb %ch - /* Read in a track with head 0. */ - - movl %ebx, %eax /* Put our address into ES:BX. */ - shr $4, %eax - movw %ax, %es - andl $0xF, %ebx - movw $0, %dx /* Disk 0, head 0 */ - movb $0x02, %ah - movb $sectorsPerTrack, %al /* Read the entire track. */ - movb $1, %cl - int $0x13 /* CX points to our track/sector. */ +_loadsector: + + pushw %es + movw $0x0201, %ax + int $0x13 + popw %di + jc _error + + movw $(0x0E*256+'.'), %ax /* print a dot */ + int $0x10 /* So go ahead and resume execution at the real starting address. This only serves to move us quickly to the real starting location; and has @@ -129,52 +156,13 @@ 0: reading the first track, then we limit ourselves to reading images of 30k bytes max before overwriting ourselves at 0x7C00. */ - - ljmp $0, $2f - hlt - .align 4 -2: - - popl %ecx - popl %ebx - popl %eax - - /* Add our length to the address. */ - addl $bytesPerTrack, %ebx - subl $bytesPerTrack, %eax - - /* Maybe read in a track with head 1. */ - cmpl $0, %eax - jle 1f - - pushl %eax /* Save the number of bytes we want. */ - pushl %ebx /* Save our current address. */ - pushl %ecx + ljmp $0,$_nextsector - movl %ebx, %eax /* Put our address into ES:BX. */ - shr $4, %eax - movw %ax, %es - andl $0xF, %ebx - movw $0x0100, %dx /* Disk 0, head 1 */ - movb $0x02, %ah - movb $sectorsPerTrack, %al /* Read the entire track. */ - movb $1, %cl - int $0x13 /* CX points to our track/sector. */ - - popl %ecx - popl %ebx - popl %eax - - /* Add our length to the address. */ - addl $bytesPerTrack, %ebx - subl $bytesPerTrack, %eax - - /* Move to the next track. */ - addb $0x1, %ch - - jmp 0b - +_error: /* halt on error */ + cli + hlt + jmp _start /* Write the 0x55/0xAA signature at the end of the first block. Without this signature the BIOS won't consider this block to be bootable. @@ -184,10 +172,11 @@ 2: .byte 0x55 .byte 0xAA - +_endload: 1: - /* Lets be nice and wait for the diskette drive motor to go off before continuing. */ + /* Lets be nice and wait for the diskette drive motor to go off + * before continuing. */ movw $0x40, %ax movw %ax, %es @@ -250,7 +239,9 @@ gdtStart: .byte 0xCF .byte 0x00 - /* Selector 0x18 == shorter code: faults any code access 0xF0000000-0xFFFFFFFF. */ + /* Selector 0x18 == shorter code: faults any code + * access 0xF0000000-0xFFFFFFFF. + */ .word 0xFFFF .word 0x0000 .byte 0x00 @@ -292,8 +283,8 @@ 3: popfl /* Save the standard and extended memory lengths into some static variables... - I'm predicting that someone is going to break our way of passing a pointer - to this structure... may as well avoid that problem now. + I'm predicting that someone is going to break our way of passing a + pointer to this structure... may as well avoid that problem now. */ .data .align 4 @@ -312,7 +303,7 @@ pc_extended_memory_size: /* _pc_entry() takes a pointer to our startup array (which only has standard and extended memory sizes in it, on the stack). */ - movl %esp, %ebx /* They are the last parameters on the stack. */ + movl %esp, %ebx /* They are the last parameters on the stack. */ pushl %ebx #endif /* CYG_HAL_STARTUP_FLOPPY */ @@ -323,8 +314,9 @@ pc_extended_memory_size: vector 15. */ - /* Save the standard and extended memory lengths into some static variables... - */ + /* Save the standard and extended memory lengths into some static + * variables... + */ .data .align 4 .globl pc_standard_memory_size
--- a/packages/hal/mips/arch/current/ChangeLog +++ b/packages/hal/mips/arch/current/ChangeLog @@ -54,6 +54,7 @@ 2000-09-01 Jonathan Larmour <jlarmour@ * include/mips-stub.h: Change vr4300 register sizes to use 32-bit target_register_t, and tell the generic stub to use sign extension. + Ditto for tx49 * include/hal_cache.h (_HAL_ASM_SET_MIPS_ISA): Don't use pasting when it doesn't result in a preprocessing token. Just use string concatenation. @@ -144,6 +145,10 @@ 2000-05-15 Jesper Skov <jskov@redhat.c * src/vectors.S: Allow warm-start to be treated like cold-start if platform requires it. +2000-05-11 Jesper Skov <jskov@redhat.com> + + * include/mips-stub.h: Added register size for TX49. + 2000-05-10 Jesper Skov <jskov@redhat.com> * include/arch.inc: Force assembler into MIPS3 mode before using
--- a/packages/hal/mips/arch/current/include/mips-stub.h +++ b/packages/hal/mips/arch/current/include/mips-stub.h @@ -62,6 +62,13 @@ extern "C" { typedef unsigned long target_register_t; // We need to sign-extend the registers so GDB doesn't get confused. #define CYGARC_SIGN_EXTEND_REGISTERS +#elif defined(CYGPKG_HAL_MIPS_TX49) + // Even though we are only working with 32 bit registers, GDB expects 64 bits + #define REGSIZE(X) 8 + typedef unsigned long target_register_t; + + // We need to sign-extend the registers so GDB doesn't get confused. + #define CYGARC_SIGN_EXTEND_REGISTERS #else #define REGSIZE(X) 4 typedef unsigned long target_register_t;
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/ChangeLog @@ -0,0 +1,320 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_mips_tx49_ref4955_ram.mlt: + * include/pkgconf/mlt_mips_tx49_ref4955_rom.mlt: + Add heap1 section + + * include/pkgconf/mlt_mips_tx49_ref4955_ram.h: + * include/pkgconf/mlt_mips_tx49_ref4955_rom.h: + * include/pkgconf/mlt_mips_tx49_ref4955_ram.ldi: + * include/pkgconf/mlt_mips_tx49_ref4955_rom.ldi: + Regenerated + +2000-09-06 Jesper Skov <jskov@redhat.com> + + * include/platform.inc: Flush cache after copying vectors. + + * src/plf_misc.c (hal_platform_init): Removed cache-enabling + code. This is now done earlier in the variant init code. + +2000-07-21 Jesper Skov <jskov@redhat.com> + + * include/platform.inc: Moved vector copying code to + hal_mon_init so it comes after cache initialization. + +2000-06-30 Jesper Skov <jskov@redhat.com> + + * src/pc87338.c: calling i/f macro changes. + + * src/hal_diag.c: Fix warning. + + * cdl/hal_mips_tx49_ref4955.cdl: Endian options next to each + other. + + * include/platform.inc: Only define hal_memc_setup if it will have + a content - otherwise the assembler emits a (harmless) warning. + +2000-06-29 Jesper Skov <jskov@redhat.com> + + * src/hal_diag.c: Changed to match the below. + + * src/pc87338.c: Use per-channel data struct instead of crufty code. + +2000-06-28 Jesper Skov <jskov@redhat.com> + + * src/hal_diag.c: Cleanup. + +2000-06-26 Jesper Skov <jskov@redhat.com> + + * src/plf_misc.c: + * src/pc87338.c: + * include/plf_intr.h: + Moved Ctrl-c handling to driver file. Added timeout and proper + channel changing services. + + * cdl/hal_mips_tx49_ref4955.cdl: Removed ROM_DEBUG_CHANNEL option. + +2000-06-21 Jonathan Larmour <jlarmour@redhat.co.uk> + + * misc/slow_cat.tcl: Fix quoting when invoking TCL interpreter + * misc/swap4.tcl: Likewise + +2000-06-21 Jesper Skov <jskov@redhat.com> + + * src/plf_stub.c: + * src/pc87338.c: [added] + * src/pc87338.inl: [deleted] + * src/hal_diag.c: + * include/plf_stub.h: + * include/hal_diag.h: + * cdl/hal_mips_tx49_ref4955.cdl: + Whenever a serial driver is included, use it to service both ports + via the vector table, both for diag and stub use. Configurations + which rely on the vector table then do not need any serial driver, + regardless of which port is configured for use. + +2000-06-15 Jesper Skov <jskov@redhat.com> + + * include/hal_diag.h: Only define HAL_PLF_DIAG functions when + required. + + * src/plf_misc.c: Comment fix. + + * src/plf_stub.c: Config option renamed. + + * src/hal_diag.c: + * include/hal_diag.h: + Use common HAL console wrappers for virtual vector diag. + + * cdl/hal_mips_tx49_ref4955.cdl: Added final console/debug comm + config options. Cleaned up USE_ROM_MONITOR option. + +2000-06-13 Jesper Skov <jskov@redhat.com> + + * src/plf_misc.c (hal_ctrlc_isr): Only return handled when the irq + was indeed handled. + + * cdl/hal_mips_tx49_ref4955.cdl: Added some virtual vector config + variables. + +2000-06-09 Jesper Skov <jskov@redhat.com> + + * src/hal_diag.c: Only use table diag if so configured. + +2000-06-08 Jesper Skov <jskov@redhat.com> + + * src/plf_stub.c: init code moved to common HAL. + + * src/plf_misc.c: Moved some code and init responsibilities to + common HAL. + + * src/hal_diag.c: Allow use of ROM interface for diag IO. + + * include/plf_stub.h (HAL_STUB_PLATFORM_RESET_ENTRY): defined + (mostly for testing, as the board has reset). + + * include/hal_diag.h: Use diag_init to allow for configuration. + + * cdl/hal_mips_tx49_ref4955.cdl: Tweaks for + CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT. + +2000-06-06 Jonathan Larmour <jlarmour@redhat.co.uk> + + * misc/slow_cat.tcl: Use more correct runes to restart with tclsh + * misc/swap4.tcl: likewise + +2000-05-30 Jesper Skov <jskov@redhat.com> + + * include/plf_intr.h: + Handle V320USC sources in mask/unmask/ack macros. + + * src/plf_misc.c: + * include/plf_intr.h: + Set VSC320 interrupt controller as per spec. + + * include/plf_stub.h (HAL_STUB_PLATFORM_RESET): Memory access to + reset board. + + * src/platform.S: + * src/plf_mk_defs.c: + Mask request bits with enable bits on VSC320. + +2000-05-26 Jesper Skov <jskov@redhat.com> + + * include/pkgconf/mlt_mips_tx49_ref4955_rom.h: + * include/pkgconf/mlt_mips_tx49_ref4955_rom.ldi: + * include/pkgconf/mlt_mips_tx49_ref4955_rom.mlt: + * include/pkgconf/mlt_mips_tx49_ref4955_ram.h: + * include/pkgconf/mlt_mips_tx49_ref4955_ram.ldi: + * include/pkgconf/mlt_mips_tx49_ref4955_ram.mlt: + Updated MLT files. + +2000-05-25 Jesper Skov <jskov@redhat.com> + + * src/plf_misc.c: Set up thread debug ptr. + + * cdl/hal_mips_tx49_ref4955.cdl: Include thread support in stub. + +2000-05-24 Jesper Skov <jskov@redhat.com> + + * include/platform.inc: Don't use k0/k1 in init code (not a + problem per se, but for consistency). + +2000-05-23 Jesper Skov <jskov@redhat.com> + + * src/plf_mk_defs.c: + * src/platform.S: + * include/plf_intr.h: + * include/platform.inc (hal_intc_translate): Use vectors 0-5 even + when chaining is enabled. + + * misc/slow_cat.tcl: Removed the regexp magic. gets handles the + conversion. + +2000-05-22 Jesper Skov <jskov@redhat.com> + + * misc/slow_cat.tcl: Comments and minor tweaks. + + * src/platform.S: + * include/platform.inc: + * src/plf_mk_defs.c: + * cdl/hal_mips_tx49_ref4955.cdl: + Use mk_defs definitions instead of magic constants. + + * cdl/hal_mips_tx49_ref4955.cdl: Generate swapped srec file. + + * src/pc87338.inl: + * src/hal_diag.c: + Cleanup. + +2000-05-18 Jesper Skov <jskov@redhat.com> + + * include/plf_io.h: Define endian-safe IO macros. + + * src/plf_stub.c: + * src/hal_diag.c: + Use specified ports. + + * cdl/hal_mips_tx49_ref4955.cdl: Change default endianess to + big. Add options to control debug/diag ports. + + * src/platform.S: Set V320SC to big-endian mode when required. + +2000-05-17 Jesper Skov <jskov@redhat.com> + + * src/plf_stub.c: + * src/plf_misc.c: + * src/pc87338.inl: + Ctrl-c code uses local stub if available. + + * src/hal_diag.c: Fixed for running under stub. + + * include/plf_intr.h: Fix warnings. + + * include/pkgconf/mlt_mips_tx49_ref4955_ram.ldi: + * include/pkgconf/mlt_mips_tx49_ref4955_rom.ldi: + Leave gap for virtual table. + + * src/plf_misc.c: Support ctrl-c. + + * src/platform.S: Springboard code must use mask since sources are + set to interrupt when disabled. + + * src/pc87338.inl: Added interrupt definitions and interrupt init. + + * src/plf_stub.c: + * include/plf_stub.h: + Platform stub init of virtual vector table. + + * include/plf_intr.h: Added control macros. Only handles on-board + interrupt controller, not the V320USC one. + + * include/platform.inc: Use VSR/break springboard. + +2000-05-16 Jesper Skov <jskov@redhat.com> + + * include/platform.inc: + Use FPU in 32 bit mode. + +2000-05-15 Jesper Skov <jskov@redhat.com> + + * cdl/hal_mips_tx49_ref4955.cdl: Require warm-starts to be treated + like cold-starts. + + * src/plf_stub.c: + * include/plf_stub.h: + * include/plf_io.h: + * include/hal_diag.h: + Cleanup. + + * src/platform.S: Adjust springboard code for the three interrupt + controllers. + * include/plf_intr.h: Change vectors to match decoding. + * include/platform.inc: Cleanup. Enable FPU. + * cdl/hal_mips_tx49_ref4955.cdl: Cleanup. Fix incrementer rate. + +2000-05-12 Jesper Skov <jskov@redhat.com> + + * src/plf_misc.c (hal_platform_init): Initialize SuperIO chip. + + * src/platform.S: Added magic assembler operand. + + * src/hal_diag.c: Cleaned up. + + * include/platform.inc (hal_memc_init): Added configury. + + * cdl/hal_mips_tx49_ref4955.cdl: Default to GDB_stubs ROM monitor. + +2000-05-11 Jesper Skov <jskov@redhat.com> + + * include/pkgconf/mlt_mips_tx49_ref4955_rom.ldi: + * include/pkgconf/mlt_mips_tx49_ref4955_ram.ldi: + More space for vectors and VSR table [need to update .h&.ldi] + + * include/platform.inc: Move memory setup into a function. Fix + register typos. + + * include/platform.inc: Re-added the magic debug exception VSR + pointers. Copy VSRs to vector space [needs configury]. + + * include/pkgconf/mlt_mips_tx49_ref4955_ram.h: + * include/pkgconf/mlt_mips_tx49_ref4955_ram.ldi: + * include/pkgconf/mlt_mips_tx49_ref4955_ram.mlt: + * include/pkgconf/mlt_mips_tx49_ref4955_rom.h: + * include/pkgconf/mlt_mips_tx49_ref4955_rom.ldi: + * include/pkgconf/mlt_mips_tx49_ref4955_rom.mlt: + Updated for platform. + + * include/platform.inc: Some definitions added. + + * cdl/hal_mips_tx49_ref4955.cdl: don't move srec image. + +2000-05-10 Jesper Skov <jskov@redhat.com> + + * Cloned from jmr3904. Still stuff to clean out and stuff to add. + +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//===========================================================================
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/cdl/hal_mips_tx49_ref4955.cdl @@ -0,0 +1,296 @@ +# ==================================================================== +# +# hal_mips_tx49_ref4955.cdl +# +# TX49/REF4955 board HAL package configuration data +# +# ==================================================================== +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): jskov +# Original data: bartv +# Contributors: +# Date: 2000-05-15 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_HAL_MIPS_TX49_REF4955 { + display "REF4955 evaluation board" + parent CYGPKG_HAL_MIPS + requires CYGPKG_HAL_MIPS_TX49 + define_header hal_mips_tx49_ref4955.h + include_dir cyg/hal + description " + The REF4955 HAL package should be used when targetting the + actual hardware." + + compile hal_diag.c platform.S plf_misc.c plf_stub.c pc87338.c + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H <pkgconf/hal_mips_tx49.h>" + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H <pkgconf/hal_mips_tx49_ref4955.h>" + + puts $::cdl_header "#define CYGHWR_HAL_MIPS_WARMSTART_COLDSTART" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + legal_values {"RAM" "ROM"} + default_value {"RAM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the REF4955 board it is possible to build + the system for either RAM bootstrap or ROM bootstrap. RAM + bootstrap generally requires that the board + is equipped with ROMs containing a suitable ROM monitor or + equivalent software that allows GDB to download the eCos + application on to the board. The ROM bootstrap typically + requires that the eCos application be blown into EPROMs or + equivalent technology." + } + + cdl_option CYGHWR_HAL_MIPS_TX49_REF4955_ENDIAN { + display "Board endian mode" + flavor data + legal_values {"big" "little"} + default_value {"big"} + no_define + description " + The TX4955 Reference Platform can be used in either big or + little endian mode. This option select which. The board + will also need to be reconfigured if this option changes." + } + cdl_option CYGHWR_HAL_MIPS_TX49_REF4955_ENDIAN_SET { + display "Communicate endian setting to variant HAL" + active_if {CYGHWR_HAL_MIPS_TX49_REF4955_ENDIAN == "big"} + calculated 1 + implements CYGINT_HAL_MIPS_MSBFIRST + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 2 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The REF4955 board has two separate serial ports. This option + chooses which of these ports will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The REF4955 board has two separate serial ports. This option + chooses which of these ports will be used for diagnostic output." + } + + # The "-o file" is a workaround for CR100958 - without it the + # output file would end up in the source directory under CygWin. + # n.b. grep does not behave itself under win32 + make -priority 1 { + <PREFIX>/include/cyg/hal/plf_defs.inc : <PACKAGE>/src/plf_mk_defs.c + $(CC) $(CFLAGS) $(INCLUDE_PATH) -Wp,-MD,plf_defs.tmp -o plf_mk_defs.tmp -S $< + fgrep .equ plf_mk_defs.tmp | sed s/#// > $@ + @echo $@ ": \\" > $(notdir $@).deps + @tail +2 plf_defs.tmp >> $(notdir $@).deps + @echo >> $(notdir $@).deps + @rm plf_defs.tmp plf_mk_defs.tmp + } + + # Real-time clock/counter specifics + cdl_component CYGNUM_HAL_RTC_CONSTANTS { + display "Real-time clock constants." + flavor none + + cdl_option CYGNUM_HAL_RTC_NUMERATOR { + display "Real-time clock numerator" + flavor data + calculated 1000000000 + } + cdl_option CYGNUM_HAL_RTC_DENOMINATOR { + display "Real-time clock denominator" + flavor data + calculated 100 + } + cdl_option CYGNUM_HAL_RTC_PERIOD { + display "Real-time clock period" + flavor data + calculated { 660000 } + description " + The count and compare registers of the TX49 are used + to drive the eCos kernel RTC. The count register + increments at 66MHz on the REF4955." + } + } + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + parent CYGPKG_NONE + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "mips-tx49-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { CYGPKG_HAL_MIPS_MSBFIRST ? "-mips2 -EB -mabi=eabi -Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions -fvtable-gc -finit-priority" : "-mips2 -EL -mabi=eabi -Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions -fvtable-gc -finit-priority" } + description " + This option controls the global compiler flags which + are used to compile all packages by + default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { CYGPKG_HAL_MIPS_MSBFIRST ? "-g -mips2 -EB -mabi=eabi -nostdlib -Wl,--gc-sections -Wl,-static" : "-g -mips2 -EL -mabi=eabi -nostdlib -Wl,--gc-sections -Wl,-static" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires ! CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + SREC data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + <PREFIX>/bin/gdb_module.srec : <PREFIX>/bin/gdb_module.img + $(OBJCOPY) --strip-unneeded -O srec $< pre-swap.srec + $(OBJCOPY) --strip-unneeded --change-addresses 0x40400000 $< be-swap.img + $(OBJCOPY) -O binary be-swap.img be-swap.bin + $(REPOSITORY)/$(PACKAGE)/misc/swap4.tcl be-swap.bin be.bin + $(OBJCOPY) --change-address 0xbfc00000 -I binary -O srec be.bin $@ + } + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "mips_tx49_ref4955_ram" : \ + "mips_tx49_ref4955_rom" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "<pkgconf/mlt_mips_tx49_ref4955_ram.ldi>" : \ + "<pkgconf/mlt_mips_tx49_ref4955_rom.ldi>" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "<pkgconf/mlt_mips_tx49_ref4955_ram.h>" : \ + "<pkgconf/mlt_mips_tx49_ref4955_rom.h>" } + } + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "RAM" } + description " + Support can be enabled for GDB stubs. + This support changes various eCos semantics such as the encoding + of diagnostic output, or the overriding of hardware interrupt + vectors. + \"GDB_stubs\" provides support when GDB stubs are + included in the ROM monitor or boot ROM, allowing debugging + via GDB." + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 0 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } +}
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/include/hal_diag.h @@ -0,0 +1,83 @@ +#ifndef CYGONCE_HAL_HAL_DIAG_H +#define CYGONCE_HAL_HAL_DIAG_H + +//============================================================================= +// +// hal_diag.h +// +// HAL Support for Kernel Diagnostic Routines +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov, nickg +// Date: 2000-05-15 +// Purpose: HAL Support for Kernel Diagnostic Routines +// Description: Diagnostic routines for use during kernel development. +// Usage: #include <cyg/hal/hal_diag.h> +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> + +#include <cyg/infra/cyg_type.h> + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) + +#include <cyg/hal/hal_if.h> + +#define HAL_DIAG_INIT() hal_if_diag_init() +#define HAL_DIAG_WRITE_CHAR(_c_) hal_if_diag_write_char(_c_) +#define HAL_DIAG_READ_CHAR(_c_) hal_if_diag_read_char(&_c_) + +#else // everything by steam + +//----------------------------------------------------------------------------- +// functions implemented in hal_diag.c + +externC void hal_diag_init(void); + +externC void hal_diag_write_char(char c); + +externC void hal_diag_read_char(char *c); + +//----------------------------------------------------------------------------- + +#define HAL_DIAG_INIT() hal_diag_init() + +#define HAL_DIAG_WRITE_CHAR(_c_) hal_diag_write_char(_c_) + +#define HAL_DIAG_READ_CHAR(_c_) hal_diag_read_char(&_c_) + +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + +//----------------------------------------------------------------------------- +// end of hal_diag.h +#endif // CYGONCE_HAL_HAL_DIAG_H
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/include/pkgconf/mlt_mips_tx49_ref4955_ram.h @@ -0,0 +1,37 @@ +// eCos memory layout - Fri Oct 20 06:22:02 2000 + +// This is a generated file - do not edit + +#ifndef __ASSEMBLER__ +#include <cyg/infra/cyg_type.h> +#include <stddef.h> + +#endif +#define CYGMEM_REGION_ram (0x80000000) +#define CYGMEM_REGION_ram_SIZE (0x4000000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__reserved_vectors) []; +#endif +#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (__reserved_vectors)) +#define CYGMEM_SECTION_reserved_vectors_SIZE (0x200) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__reserved_vsr_table) []; +#endif +#define CYGMEM_SECTION_reserved_vsr_table (CYG_LABEL_NAME (__reserved_vsr_table)) +#define CYGMEM_SECTION_reserved_vsr_table_SIZE (0x100) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__reserved_virtual_table) []; +#endif +#define CYGMEM_SECTION_reserved_virtual_table (CYG_LABEL_NAME (__reserved_virtual_table)) +#define CYGMEM_SECTION_reserved_virtual_table_SIZE (0x100) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__reserved_for_rom) []; +#endif +#define CYGMEM_SECTION_reserved_for_rom (CYG_LABEL_NAME (__reserved_for_rom)) +#define CYGMEM_SECTION_reserved_for_rom_SIZE (0x7c00) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x84000000 - (size_t) CYG_LABEL_NAME (__heap1))
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/include/pkgconf/mlt_mips_tx49_ref4955_ram.ldi @@ -0,0 +1,43 @@ +// eCos memory layout - Fri Oct 20 06:22:02 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> + +MEMORY +{ + ram : ORIGIN = 0x80000000, LENGTH = 0x4000000 +} + +SECTIONS +{ + SECTIONS_BEGIN + CYG_LABEL_DEFN(__reserved_vectors) = 0x80000000; . = CYG_LABEL_DEFN(__reserved_vectors) + 0x200; + CYG_LABEL_DEFN(__reserved_vsr_table) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_vsr_table) + 0x100; + CYG_LABEL_DEFN(__reserved_virtual_table) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_virtual_table) + 0x100; + CYG_LABEL_DEFN(__reserved_for_rom) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_for_rom) + 0x7c00; + SECTION_rom_vectors (ram, ALIGN (0x10), LMA_EQ_VMA) + SECTION_ROMISC (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_RELOCS (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_init (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_data1 (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_eh_frame (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_ctors (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_dtors (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_devtab (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_got (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_dynamic (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_sdata (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_lit8 (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_lit4 (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_sbss (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +}
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/include/pkgconf/mlt_mips_tx49_ref4955_ram.mlt @@ -0,0 +1,29 @@ +version 0 +region ram 80000000 4000000 0 ! +section reserved_vectors 200 1 0 0 1 1 1 1 80000000 80000000 reserved_vsr_table reserved_vsr_table ! +section reserved_vsr_table 100 10 0 0 0 1 0 1 reserved_virtual_table reserved_virtual_table ! +section reserved_virtual_table 100 10 0 0 0 1 0 1 reserved_for_rom reserved_for_rom ! +section reserved_for_rom 7c00 10 0 0 0 1 0 1 rom_vectors rom_vectors ! +section rom_vectors 0 10 0 1 0 1 0 1 ROMISC ROMISC ! +section ROMISC 0 4 0 1 0 1 0 1 RELOCS RELOCS ! +section RELOCS 0 4 0 1 0 1 0 1 init init ! +section init 0 4 0 1 0 1 0 1 text text ! +section text 0 4 0 1 0 1 0 1 fini fini ! +section fini 0 4 0 1 0 1 0 1 rodata rodata ! +section rodata 0 8 0 1 0 1 0 1 rodata1 rodata1 ! +section rodata1 0 8 0 1 0 1 0 1 data data ! +section data 0 8 0 1 0 1 0 1 data1 data1 ! +section data1 0 8 0 1 0 1 0 1 eh_frame eh_frame ! +section eh_frame 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table ! +section gcc_except_table 0 4 0 1 0 1 0 1 ctors ctors ! +section ctors 0 4 0 1 0 1 0 1 dtors dtors ! +section dtors 0 4 0 1 0 1 0 1 devtab devtab ! +section devtab 0 4 0 1 0 1 0 1 got got ! +section got 0 4 0 1 0 1 0 1 dynamic dynamic ! +section dynamic 0 4 0 1 0 1 0 1 sdata sdata ! +section sdata 0 4 0 1 0 1 0 1 lit8 lit8 ! +section lit8 0 8 0 1 0 1 0 1 lit4 lit4 ! +section lit4 0 8 0 1 0 1 0 1 sbss sbss ! +section sbss 0 8 0 1 0 1 0 1 bss bss ! +section bss 0 8 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/include/pkgconf/mlt_mips_tx49_ref4955_rom.h @@ -0,0 +1,35 @@ +// eCos memory layout - Fri Oct 20 06:22:57 2000 + +// This is a generated file - do not edit + +#ifndef __ASSEMBLER__ +#include <cyg/infra/cyg_type.h> +#include <stddef.h> + +#endif +#define CYGMEM_REGION_ram (0x80000000) +#define CYGMEM_REGION_ram_SIZE (0x4000000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0xbfc00000) +#define CYGMEM_REGION_rom_SIZE (0x1000000) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__reserved_vectors) []; +#endif +#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (__reserved_vectors)) +#define CYGMEM_SECTION_reserved_vectors_SIZE (0x200) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__reserved_vsr_table) []; +#endif +#define CYGMEM_SECTION_reserved_vsr_table (CYG_LABEL_NAME (__reserved_vsr_table)) +#define CYGMEM_SECTION_reserved_vsr_table_SIZE (0x100) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__reserved_virtual_table) []; +#endif +#define CYGMEM_SECTION_reserved_virtual_table (CYG_LABEL_NAME (__reserved_virtual_table)) +#define CYGMEM_SECTION_reserved_virtual_table_SIZE (0x100) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x84000000 - (size_t) CYG_LABEL_NAME (__heap1))
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/include/pkgconf/mlt_mips_tx49_ref4955_rom.ldi @@ -0,0 +1,43 @@ +// eCos memory layout - Fri Oct 20 06:22:57 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> + +MEMORY +{ + ram : ORIGIN = 0x80000000, LENGTH = 0x4000000 + rom : ORIGIN = 0xbfc00000, LENGTH = 0x1000000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_rom_vectors (rom, 0xbfc00000, LMA_EQ_VMA) + SECTION_ROMISC (rom, ALIGN (0x8), LMA_EQ_VMA) + SECTION_RELOCS (rom, ALIGN (0x8), LMA_EQ_VMA) + SECTION_init (rom, ALIGN (0x8), LMA_EQ_VMA) + SECTION_text (rom, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__reserved_vectors) = 0x80000000; . = CYG_LABEL_DEFN(__reserved_vectors) + 0x200; + CYG_LABEL_DEFN(__reserved_vsr_table) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_vsr_table) + 0x100; + CYG_LABEL_DEFN(__reserved_virtual_table) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_virtual_table) + 0x100; + SECTION_data (ram, ALIGN (0x10), FOLLOWING (.rodata1)) + SECTION_data1 (ram, ALIGN (0x8), FOLLOWING (.data)) + SECTION_eh_frame (ram, ALIGN (0x8), FOLLOWING (.data1)) + SECTION_gcc_except_table (ram, ALIGN (0x8), FOLLOWING (.eh_frame)) + SECTION_ctors (ram, ALIGN (0x8), FOLLOWING (.gcc_except_table)) + SECTION_dtors (ram, ALIGN (0x8), FOLLOWING (.ctors)) + SECTION_devtab (ram, ALIGN (0x8), FOLLOWING (.dtors)) + SECTION_got (ram, ALIGN (0x8), FOLLOWING (.devtab)) + SECTION_dynamic (ram, ALIGN (0x8), FOLLOWING (.got)) + SECTION_sdata (ram, ALIGN (0x8), FOLLOWING (.dynamic)) + SECTION_lit8 (ram, ALIGN (0x8), FOLLOWING (.sdata)) + SECTION_lit4 (ram, ALIGN (0x8), FOLLOWING (.lit8)) + SECTION_sbss (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +}
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/include/pkgconf/mlt_mips_tx49_ref4955_rom.mlt @@ -0,0 +1,29 @@ +version 0 +region ram 80000000 4000000 0 ! +region rom bfc00000 1000000 1 ! +section reserved_vectors 200 1 0 0 1 1 1 1 80000000 80000000 reserved_vsr_table reserved_vsr_table ! +section reserved_vsr_table 100 10 0 0 0 1 0 1 reserved_virtual_table reserved_virtual_table ! +section reserved_virtual_table 100 10 0 0 0 1 0 0 data ! +section data 0 10 1 1 0 1 0 1 data1 data1 ! +section data1 0 8 1 1 0 1 0 1 eh_frame eh_frame ! +section eh_frame 0 8 1 1 0 1 0 1 gcc_except_table gcc_except_table ! +section gcc_except_table 0 8 1 1 0 1 0 1 ctors ctors ! +section ctors 0 8 1 1 0 1 0 1 dtors dtors ! +section dtors 0 8 1 1 0 1 0 1 devtab devtab ! +section devtab 0 8 1 1 0 1 0 1 got got ! +section got 0 8 1 1 0 1 0 1 dynamic dynamic ! +section dynamic 0 8 1 1 0 1 0 1 sdata sdata ! +section sdata 0 8 1 1 0 1 0 1 lit8 lit8 ! +section lit8 0 8 1 1 0 1 0 1 lit4 lit4 ! +section lit4 0 8 1 1 0 1 0 0 sbss ! +section sbss 0 8 0 1 0 1 0 1 bss bss ! +section bss 0 8 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 ! +section rom_vectors 0 1 0 1 1 1 1 1 bfc00000 bfc00000 ROMISC ROMISC ! +section ROMISC 0 8 0 1 0 1 0 1 RELOCS RELOCS ! +section RELOCS 0 8 0 1 0 1 0 1 init init ! +section init 0 8 0 1 0 1 0 1 text text ! +section text 0 8 0 1 0 1 0 1 fini fini ! +section fini 0 8 0 1 0 1 0 1 rodata rodata ! +section rodata 0 8 0 1 0 1 0 1 rodata1 rodata1 ! +section rodata1 0 8 0 1 0 0 0 1 data !
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/include/platform.inc @@ -0,0 +1,234 @@ +#ifndef CYGONCE_HAL_PLATFORM_INC +#define CYGONCE_HAL_PLATFORM_INC +##============================================================================= +## +## platform.inc +## +## REF4955/TX4955 board assembler header file +## +##============================================================================= +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +##============================================================================= +#######DESCRIPTIONBEGIN#### +## +## Author(s): nickg +## Contributors:nickg,jskov +## Date: 2000-05-15 +## Purpose: REF4955/TX4955 board definitions. +## Description: This file contains various definitions and macros that are +## useful for writing assembly code for the REF4955/TX4955 board. +## Usage: +## #include <cyg/hal/platform.inc> +## ... +## +## +######DESCRIPTIONEND#### +## +##============================================================================= + +#include <cyg/hal/mips.inc> +#include <cyg/hal/plf_defs.inc> + + +#------------------------------------------------------------------------------ +# Macro for copying vectors to RAM if necessary. +#if !defined(CYGSEM_HAL_USE_ROM_MONITOR) + + .macro hal_vectors_init + # If we don~t play nice with a ROM monitor, copy the required + # vectors into the proper location. + la t0,0x80000000 # dest addr + la t1,utlb_vector # source addr + la t3,utlb_vector_end # end dest addr +1: + lw v0,0(t1) # get word + addi t1,t1,4 + sw v0,0(t0) # write word + addi t0,t0,4 + bne t1,t3,1b + nop + + la t0,0x80000180 # dest addr + la t1,other_vector # source addr + la t3,other_vector_end # end dest addr +1: + lw v0,0(t1) # get word + addi t1,t1,4 + sw v0,0(t0) # write word + addi t0,t0,4 + bne t1,t3,1b + nop + + .set mips3 # Set ISA to MIPS 3 to allow cache insns + # Now clear the region in the caches + la t0,0x80000000 # dest addr + ori t1,t0,0x200 # source addr +1: cache 0x01,0(t0) # Flush word from data cache + cache 0x01,1(t0) + cache 0x01,2(t0) + cache 0x01,3(t0) + nop + cache 0x00,0(t0) # Invalidate icache for word + cache 0x00,1(t0) + cache 0x00,2(t0) + cache 0x00,3(t0) + nop + addi t0,t0,0x20 + bne t0,t1,1b + nop + .set mips0 # reset ISA to default + + .endm + +#else + + .macro hal_vectors_init + .endm + +#endif + +#------------------------------------------------------------------------------ +# Monitor initialization. + +#ifndef CYGPKG_HAL_MIPS_MON_DEFINED + +#if defined(CYG_HAL_STARTUP_ROM) || \ + ( defined(CYG_HAL_STARTUP_RAM) && \ + !defined(CYGSEM_HAL_USE_ROM_MONITOR)) + + # If we are starting up from ROM, or we are starting in + # RAM and NOT using a ROM monitor, initialize the VSR table. + + .macro hal_mon_init + hal_vectors_init + # Set default exception VSR for all vectors + ori a0,zero,CYGNUM_HAL_VSR_COUNT + la a1,__default_exception_vsr + la a2,hal_vsr_table +1: sw a1,0(a2) + addi a2,a2,4 + addi a0,a0,-1 + bne a0,zero,1b + nop + + # Now set special VSRs + la a0,hal_vsr_table + # Set interrupt VSR + la a1,__default_interrupt_vsr + sw a1,CYGNUM_HAL_VECTOR_INTERRUPT*4(a0) + # Add special handler on breakpoint vector to allow GDB and + # GCC to both use 'break' without conflicts. + la a1,__break_vsr_springboard + sw a1,CYGNUM_HAL_VECTOR_BREAKPOINT*4(a0) + # Set exception handler on special vectors + # FIXME: Should use proper definitions + la a1,__default_exception_vsr + sw a1,32*4(a0) # debug + sw a1,33*4(a0) # utlb + sw a1,34*4(a0) # nmi + .endm + +#elif defined(CYG_HAL_STARTUP_RAM) && defined(CYGSEM_HAL_USE_ROM_MONITOR) + + # Initialize the VSR table entries + # We only take control of the interrupt vector, + # the rest are left to the ROM for now... + + .macro hal_mon_init + hal_vectors_init + # Set interrupt VSR + la a0,hal_vsr_table + la a1,__default_interrupt_vsr + sw a1,CYGNUM_HAL_VECTOR_INTERRUPT*4(a0) + .endm + +#else + + .macro hal_mon_init + hal_vectors_init + .endm + +#endif + +#define CYGPKG_HAL_MIPS_MON_DEFINED +#endif + +#------------------------------------------------------------------------------ + +#if !defined(CYG_HAL_STARTUP_RAM) + .macro hal_memc_init + // Only initialize the SDRAM controller when running in ROM + .extern hal_memc_setup + lar t0,hal_memc_setup + jalr t0 + nop + .endm +#define CYGPKG_HAL_MIPS_MEMC_DEFINED +#endif + +#------------------------------------------------------------------------------ +# Decide whether the VSR table is defined externally, or is to be defined +# here. + +## ISR tables are defined in platform.S +#define CYG_HAL_MIPS_ISR_TABLES_DEFINED + +## VSR table is at a fixed RAM address defined by the linker script +#define CYG_HAL_MIPS_VSR_TABLE_DEFINED + +##----------------------------------------------------------------------------- +## For chaining, use the calculated cause vector number. + +#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN + .macro hal_intc_translate inum,vnum + move \vnum,\inum # Vector == interrupt number + .endm +#define CYGPKG_HAL_MIPS_INTC_TRANSLATE_DEFINED +#endif + +##----------------------------------------------------------------------------- +#ifdef CYG_STARTUP_ROM + +## Initial SR value for use in ROM: +## CP0 usable +## Vectors in RAM +## FP registers are 32 bit +## All hw ints disabled +#define INITIAL_SR 0x30000000 + +#else + +## Initial SR value for use standalone: +## CP0 usable +## Vectors to RAM +## FP registers are 32 bit +## All hw ints disabled +#define INITIAL_SR 0x30000000 + +#endif + +#------------------------------------------------------------------------------ +#endif // ifndef CYGONCE_HAL_PLATFORM_INC +# end of platform.inc
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/include/plf_cache.h @@ -0,0 +1,59 @@ +#ifndef CYGONCE_PLF_CACHE_H +#define CYGONCE_PLF_CACHE_H + +//============================================================================= +// +// plf_cache.h +// +// HAL cache control API +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributors: nickg +// Date: 1998-02-17 +// Purpose: Cache control API +// Description: The macros defined here provide the HAL APIs for handling +// cache control operations. +// Usage: +// #include <cyg/hal/plf_cache.h> +// ... +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//============================================================================= + +// Nothing here at present. + +//----------------------------------------------------------------------------- +#endif // ifndef CYGONCE_PLF_CACHE_H +// End of plf_cache.h +
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/include/plf_intr.h @@ -0,0 +1,302 @@ +#ifndef CYGONCE_HAL_PLF_INTR_H +#define CYGONCE_HAL_PLF_INTR_H + +//========================================================================== +// +// plf_intr.h +// +// REF4955 Interrupt and clock support +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors: jskov, nickg +// Date: 2000-05-09 +// Purpose: Define Interrupt support +// Description: The macros defined here provide the HAL APIs for handling +// interrupts and the clock for the REF4955 board. +// +// Usage: +// #include <cyg/hal/plf_intr.h> +// ... +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <pkgconf/hal.h> + +#include <cyg/infra/cyg_type.h> + +//-------------------------------------------------------------------------- +// Interrupt vectors. + +#ifndef CYGHWR_HAL_INTERRUPT_VECTORS_DEFINED + + +// The first 6 correspond to the interrupt lines in the status/cause regs +#define CYGNUM_HAL_INTERRUPT_V320USC_INT0 0 +#define CYGNUM_HAL_INTERRUPT_V320USC_INT1 1 +#define CYGNUM_HAL_INTERRUPT_EXT 2 +#define CYGNUM_HAL_INTERRUPT_LAN 3 +#define CYGNUM_HAL_INTERRUPT_IO 4 +#define CYGNUM_HAL_INTERRUPT_COMPARE 5 + + +#if defined(CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN) + +// This overlaps with LB_MBI below but it doesn't matter. It's only used +// by the HAL to access the special chaining entry in the ISR tables. +// All other attempted access to the ISR table will be redirected to this +// entry (curtsey of HAL_TRANSLATE_VECTOR). The other vector definitions +// are still valid, but only for enable/disable/config etc. (i.e., in +// chaining mode they have associated entries in the ISR tables). +#define CYGNUM_HAL_INTERRUPT_CHAINING 6 + +#define HAL_TRANSLATE_VECTOR(_vector_,_index_) \ + (_index_) = CYGNUM_HAL_INTERRUPT_CHAINING + +#endif + + +// The next 32 correspond to the interrupt lines in the V320USC's interrupt +// controller. These are decoded from the controller when an interrupt +// enters via CYGNUM_HAL_INTERRUPT_V320USC_INT0. +#define CYGNUM_HAL_INTERRUPT_INTC_V320USC_base 6 +#define CYGNUM_HAL_INTERRUPT_LB_MBI 6 +#define CYGNUM_HAL_INTERRUPT_PCI_MBI 7 +#define CYGNUM_HAL_INTERRUPT_RESERVED_2 8 +#define CYGNUM_HAL_INTERRUPT_I2O_OP_NE 9 +#define CYGNUM_HAL_INTERRUPT_I2O_IF_NF 10 +#define CYGNUM_HAL_INTERRUPT_I2O_IP_NE 11 +#define CYGNUM_HAL_INTERRUPT_I2O_OP_NF 12 +#define CYGNUM_HAL_INTERRUPT_I2O_OF_NE 13 +#define CYGNUM_HAL_INTERRUPT_RESERVED_8 14 +#define CYGNUM_HAL_INTERRUPT_RESERVED_9 15 +#define CYGNUM_HAL_INTERRUPT_RESERVED_10 16 +#define CYGNUM_HAL_INTERRUPT_RESERVED_11 17 +#define CYGNUM_HAL_INTERRUPT_TIMER0 18 +#define CYGNUM_HAL_INTERRUPT_TIMER1 19 +#define CYGNUM_HAL_INTERRUPT_RESERVED_14 20 +#define CYGNUM_HAL_INTERRUPT_ENUM 21 +#define CYGNUM_HAL_INTERRUPT_DMA0 22 +#define CYGNUM_HAL_INTERRUPT_DMA1 23 +#define CYGNUM_HAL_INTERRUPT_RESERVED_18 24 +#define CYGNUM_HAL_INTERRUPT_RESERVED_19 25 +#define CYGNUM_HAL_INTERRUPT_PWR_STATE 26 +#define CYGNUM_HAL_INTERRUPT_HBI 27 +#define CYGNUM_HAL_INTERRUPT_WDI 28 +#define CYGNUM_HAL_INTERRUPT_BWI 29 +#define CYGNUM_HAL_INTERRUPT_PSLAVE_PI 30 +#define CYGNUM_HAL_INTERRUPT_PMASTER_PI 31 +#define CYGNUM_HAL_INTERRUPT_PCI_T_ABORT 32 +#define CYGNUM_HAL_INTERRUPT_PCI_M_ABORT 33 +#define CYGNUM_HAL_INTERRUPT_DRAM_PI 34 +#define CYGNUM_HAL_INTERRUPT_RESERVED_29 35 +#define CYGNUM_HAL_INTERRUPT_DI0 36 +#define CYGNUM_HAL_INTERRUPT_DI1 37 + +// The next 6 correspond to the interrupt lines specific to the PCI +// connector (decoded from CYGNUM_HAL_INTERRUPT_V320USC_INT1) +#define CYGNUM_HAL_INTERRUPT_INTC_PCI_base 38 +#define CYGNUM_HAL_INTERRUPT_SERR 38 +#define CYGNUM_HAL_INTERRUPT_PERR 39 +#define CYGNUM_HAL_INTERRUPT_INTD 40 +#define CYGNUM_HAL_INTERRUPT_INTC 41 +#define CYGNUM_HAL_INTERRUPT_INTB 42 +#define CYGNUM_HAL_INTERRUPT_INTA 43 + +// The next 5 correspond to the interrupt lines specific to the REF4955 +// board (decoded from CYGNUM_HAL_INTERRUPT_IO) +#define CYGNUM_HAL_INTERRUPT_INTC_IO_base 44 +#define CYGNUM_HAL_INTERRUPT_SOFTWARE 44 +#define CYGNUM_HAL_INTERRUPT_INT_SWITCH 45 +#define CYGNUM_HAL_INTERRUPT_PARALLEL 46 +#define CYGNUM_HAL_INTERRUPT_DEBUG_UART 47 +#define CYGNUM_HAL_INTERRUPT_USER_UART 48 + + +// Min/Max ISR numbers and how many there are +#define CYGNUM_HAL_ISR_MIN CYGNUM_HAL_INTERRUPT_V320USC_INT0 +#define CYGNUM_HAL_ISR_MAX CYGNUM_HAL_INTERRUPT_USER_UART +#define CYGNUM_HAL_ISR_COUNT (CYGNUM_HAL_ISR_MAX - CYGNUM_HAL_ISR_MIN + 1) + +// The vector used by the Real time clock +#define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_INTERRUPT_COMPARE + +#define CYGHWR_HAL_INTERRUPT_VECTORS_DEFINED + +#endif + +//-------------------------------------------------------------------------- +// Interrupt controler information + +// V320USC +#define CYGARC_REG_INT_STAT 0xb80000ec + +#define CYGARC_REG_INT_CFG0 0xb80000e0 +#define CYGARC_REG_INT_CFG1 0xb80000e4 +#define CYGARC_REG_INT_CFG2 0xb80000e8 +#define CYGARC_REG_INT_CFG3 0xb8000158 + +#define CYGARC_REG_INT_CFG_INT0 0x00000100 +#define CYGARC_REG_INT_CFG_INT1 0x00000200 +#define CYGARC_REG_INT_CFG_INT2 0x00000400 +#define CYGARC_REG_INT_CFG_INT3 0x00000800 + + +// FPGA +#define CYGARC_REG_PCI_STAT 0xb5300000 +#define CYGARC_REG_PCI_MASK 0xb5300030 + +#define CYGARC_REG_IO_STAT 0xb5300010 +#define CYGARC_REG_IO_MASK 0xb5300040 + + +#define HAL_INTERRUPT_MASK( _vector_ ) \ + CYG_MACRO_START \ + if( (_vector_) <= CYGNUM_HAL_INTERRUPT_COMPARE ) \ + { \ + asm volatile ( \ + "mfc0 $3,$12\n" \ + "la $2,0x00000400\n" \ + "sllv $2,$2,%0\n" \ + "nor $2,$2,$0\n" \ + "and $3,$3,$2\n" \ + "mtc0 $3,$12\n" \ + "nop; nop; nop\n" \ + : \ + : "r"(_vector_) \ + : "$2", "$3" \ + ); \ + } \ + else if ((_vector_) >= CYGNUM_HAL_INTERRUPT_INTC_IO_base) \ + { \ + cyg_uint8 _mask_; \ + cyg_uint32 _shift_ = (_vector_)-CYGNUM_HAL_INTERRUPT_INTC_IO_base; \ + HAL_READ_UINT8(CYGARC_REG_IO_MASK, _mask_ ); \ + _mask_ &= ~(1<<_shift_); \ + HAL_WRITE_UINT8(CYGARC_REG_IO_MASK, _mask_ ); \ + } \ + else if (_vector_ >= CYGNUM_HAL_INTERRUPT_INTC_PCI_base) \ + { \ + cyg_uint8 _mask_; \ + cyg_uint32 _shift_ = (_vector_)-CYGNUM_HAL_INTERRUPT_INTC_PCI_base; \ + HAL_READ_UINT8(CYGARC_REG_PCI_MASK, _mask_ ); \ + _mask_ &= ~(1<<_shift_); \ + HAL_WRITE_UINT8(CYGARC_REG_PCI_MASK, _mask_ ); \ + } else { /* V320USC */ \ + cyg_uint32 _mask_; \ + cyg_uint32 _shift_ = \ + (_vector_)-CYGNUM_HAL_INTERRUPT_INTC_V320USC_base; \ + HAL_READ_UINT32(CYGARC_REG_INT_CFG0, _mask_ ); \ + _mask_ &= !(1<<_shift_); \ + HAL_WRITE_UINT32(CYGARC_REG_INT_CFG0, _mask_ ); \ + } \ + CYG_MACRO_END + +#define HAL_INTERRUPT_UNMASK( _vector_ ) \ + CYG_MACRO_START \ + if( (_vector_) <= CYGNUM_HAL_INTERRUPT_COMPARE ) \ + { \ + asm volatile ( \ + "mfc0 $3,$12\n" \ + "la $2,0x00000400\n" \ + "sllv $2,$2,%0\n" \ + "or $3,$3,$2\n" \ + "mtc0 $3,$12\n" \ + "nop; nop; nop\n" \ + : \ + : "r"(_vector_) \ + : "$2", "$3" \ + ); \ + } \ + else if ((_vector_) >= CYGNUM_HAL_INTERRUPT_INTC_IO_base) \ + { \ + cyg_uint8 _mask_; \ + cyg_uint32 _shift_ = (_vector_)-CYGNUM_HAL_INTERRUPT_INTC_IO_base; \ + HAL_READ_UINT8(CYGARC_REG_IO_MASK, _mask_ ); \ + _mask_ |= (1<<_shift_); \ + HAL_WRITE_UINT8(CYGARC_REG_IO_MASK, _mask_ ); \ + } \ + else if (_vector_ >= CYGNUM_HAL_INTERRUPT_INTC_PCI_base) \ + { \ + cyg_uint8 _mask_; \ + cyg_uint32 _shift_ = (_vector_)-CYGNUM_HAL_INTERRUPT_INTC_PCI_base; \ + HAL_READ_UINT8(CYGARC_REG_PCI_MASK, _mask_ ); \ + _mask_ |= (1<<_shift_); \ + HAL_WRITE_UINT8(CYGARC_REG_PCI_MASK, _mask_ ); \ + } else { /* V320USC */ \ + cyg_uint32 _mask_; \ + cyg_uint32 _shift_ = \ + (_vector_)-CYGNUM_HAL_INTERRUPT_INTC_V320USC_base; \ + HAL_READ_UINT32(CYGARC_REG_INT_CFG0, _mask_ ); \ + _mask_ |= (1<<_shift_); \ + HAL_WRITE_UINT32(CYGARC_REG_INT_CFG0, _mask_ ); \ + } \ + CYG_MACRO_END + +#define HAL_INTERRUPT_ACKNOWLEDGE( _vector_ ) \ + CYG_MACRO_START \ + cyg_uint32 _srvector_ = _vector_; \ + if ((_vector_) >= CYGNUM_HAL_INTERRUPT_INTC_IO_base) { \ + _srvector_ = CYGNUM_HAL_INTERRUPT_IO; \ + } else if (_vector_ >= CYGNUM_HAL_INTERRUPT_INTC_PCI_base) { \ + _srvector_ = CYGNUM_HAL_INTERRUPT_V320USC_INT1; \ + } else if (_vector_ >= CYGNUM_HAL_INTERRUPT_INTC_V320USC_base) { \ + cyg_uint32 _mask_; \ + cyg_uint32 _shift_ = \ + (_vector_)-CYGNUM_HAL_INTERRUPT_INTC_V320USC_base; \ + _mask_ = (1<<_shift_); \ + HAL_WRITE_UINT32(CYGARC_REG_INT_STAT, _mask_ ); \ + _srvector_ = CYGNUM_HAL_INTERRUPT_V320USC_INT0; \ + } \ + asm volatile ( \ + "mfc0 $3,$13\n" \ + "la $2,0x00000400\n" \ + "sllv $2,$2,%0\n" \ + "nor $2,$2,$0\n" \ + "and $3,$3,$2\n" \ + "mtc0 $3,$13\n" \ + "nop; nop; nop\n" \ + : \ + : "r"(_srvector_) \ + : "$2", "$3" \ + ); \ + CYG_MACRO_END + +#define HAL_INTERRUPT_CONFIGURE( _vector_, _level_, _up_ ) + +#define HAL_INTERRUPT_SET_LEVEL( _vector_, _level_ ) + +#define CYGHWR_HAL_INTERRUPT_CONTROLLER_ACCESS_DEFINED + +//-------------------------------------------------------------------------- +#endif // ifndef CYGONCE_HAL_PLF_INTR_H +// End of plf_intr.h
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/include/plf_io.h @@ -0,0 +1,191 @@ +#ifndef CYGONCE_PLF_IO_H +#define CYGONCE_PLF_IO_H + +//============================================================================= +// +// plf_io.h +// +// HAL platform device IO register support. +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributors:nickg, jskov +// Date: 2000-05-18 +// Purpose: Define IO register support +// Description: The macros defined here provide the HAL APIs for handling +// device IO control registers. +// +// Usage: +// #include <cyg/hal/plf_io.h> +// ... +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> + +//----------------------------------------------------------------------------- +// BYTE Register access. +// Individual and vectorized access to 8 bit registers. + +// Little-endian version +#if (CYG_BYTEORDER == CYG_LSBFIRST) + +#define HAL_READ_UINT8( _register_, _value_ ) \ + ((_value_) = *((volatile CYG_BYTE *)(_register_))) + +#define HAL_WRITE_UINT8( _register_, _value_ ) \ + (*((volatile CYG_BYTE *)(_register_)) = (_value_)) + +#define HAL_READ_UINT8_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + (_buf_)[_i_] = ((volatile CYG_BYTE *)(_register_))[_j_]; \ + CYG_MACRO_END + +#define HAL_WRITE_UINT8_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + ((volatile CYG_BYTE *)(_register_))[_j_] = (_buf_)[_i_]; \ + CYG_MACRO_END + +#else // Big-endian version + +#define HAL_READ_UINT8( _register_, _value_ ) \ + ((_value_) = *((volatile CYG_BYTE *)((CYG_ADDRWORD)(_register_)^3))) + +#define HAL_WRITE_UINT8( _register_, _value_ ) \ + (*((volatile CYG_BYTE *)((CYG_ADDRWORD)(_register_)^3)) = (_value_)) + +#define HAL_READ_UINT8_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + volatile CYG_BYTE* _r_ = ((CYG_ADDRWORD)(_register_)^3); \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + (_buf_)[_i_] = _r_[_j_]; \ + CYG_MACRO_END + +#define HAL_WRITE_UINT8_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + volatile CYG_BYTE* _r_ = ((CYG_ADDRWORD)(_register_)^3); \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + _r_[_j_] = (_buf_)[_i_]; \ + CYG_MACRO_END + +#endif // Big-endian + +//----------------------------------------------------------------------------- +// 16 bit access. +// Individual and vectorized access to 16 bit registers. + +// Little-endian version +#if (CYG_BYTEORDER == CYG_LSBFIRST) + +#define HAL_READ_UINT16( _register_, _value_ ) \ + ((_value_) = *((volatile CYG_WORD16 *)(_register_))) + +#define HAL_WRITE_UINT16( _register_, _value_ ) \ + (*((volatile CYG_WORD16 *)(_register_)) = (_value_)) + +#define HAL_READ_UINT16_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + (_buf_)[_i_] = ((volatile CYG_WORD16 *)(_register_))[_j_]; \ + CYG_MACRO_END + +#define HAL_WRITE_UINT16_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + ((volatile CYG_WORD16 *)(_register_))[_j_] = (_buf_)[_i_]; \ + CYG_MACRO_END + +#else // Big-endian version + +#define HAL_READ_UINT16( _register_, _value_ ) \ + ((_value_) = *((volatile CYG_WORD16 *)((CYG_ADDRWORD)(_register_)^3))) + +#define HAL_WRITE_UINT16( _register_, _value_ ) \ + (*((volatile CYG_WORD16 *)((CYG_ADDRWORD)(_register_)^3)) = (_value_)) + +#define HAL_READ_UINT16_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + volatile CYG_WORD16* _r_ = ((CYG_ADDRWORD)(_register_)^3); \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + (_buf_)[_i_] = _r_[_j_]; \ + CYG_MACRO_END + +#define HAL_WRITE_UINT16_VECTOR( _register_, _buf_, _count_, _step_ ) \ + CYG_MACRO_START \ + cyg_count32 _i_,_j_; \ + volatile CYG_WORD16* _r_ = ((CYG_ADDRWORD)(_register_)^3); \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + _r_[_j_] = (_buf_)[_i_]; \ + CYG_MACRO_END + +#endif // Big-endian + +//----------------------------------------------------------------------------- +// 32 bit access. +// Individual and vectorized access to 32 bit registers. + +// Note: same macros for little- and big-endian systems. + +#define HAL_READ_UINT32( _register_, _value_ ) \ + ((_value_) = *((volatile CYG_WORD32 *)(_register_))) + +#define HAL_WRITE_UINT32( _register_, _value_ ) \ + (*((volatile CYG_WORD32 *)(_register_)) = (_value_)) + +#define HAL_READ_UINT32_VECTOR( _register_, _buf_, _count_, _step_ ) \ +{ \ + cyg_count32 _i_,_j_; \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + (_buf_)[_i_] = ((volatile CYG_WORD32 *)(_register_))[_j_]; \ +} + +#define HAL_WRITE_UINT32_VECTOR( _register_, _buf_, _count_, _step_ ) \ +{ \ + cyg_count32 _i_,_j_; \ + for( _i_ = 0, _j_ = 0; _i_ < (_count_); _i_++, _j_ += (_step_)) \ + ((volatile CYG_WORD32 *)(_register_))[_j_] = (_buf_)[_i_]; \ +} + +#define HAL_IO_MACROS_DEFINED + +//----------------------------------------------------------------------------- +#endif // ifndef CYGONCE_HAL_PLF_IO_H +// End of plf_io.h
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/include/plf_stub.h @@ -0,0 +1,85 @@ +#ifndef CYGONCE_HAL_PLF_STUB_H +#define CYGONCE_HAL_PLF_STUB_H + +//============================================================================= +// +// plf_stub.h +// +// Platform header for GDB stub support. +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-05-15 +// Purpose: Platform HAL stub support for MIPS/REF4955 boards. +// Usage: #include <cyg/hal/plf_stub.h> +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include <cyg/infra/cyg_type.h> // CYG_UNUSED_PARAM + +#include <cyg/hal/mips-stub.h> // architecture stub support + +//---------------------------------------------------------------------------- +// Define some platform specific communication details. This is mostly +// handled by hal_if now, but we need to make sure the comms tables are +// properly initialized. + +externC void cyg_hal_plf_comms_init(void); + +#define HAL_STUB_PLATFORM_INIT_SERIAL() cyg_hal_plf_comms_init() + +#define HAL_STUB_PLATFORM_SET_BAUD_RATE(baud) CYG_UNUSED_PARAM(int, (baud)) +#define HAL_STUB_PLATFORM_INTERRUPTIBLE 0 +#define HAL_STUB_PLATFORM_INIT_BREAK_IRQ() CYG_EMPTY_STATEMENT + +//---------------------------------------------------------------------------- +// Stub initializer. +extern void hal_plf_stub_init( void ); +#define HAL_STUB_PLATFORM_INIT() hal_plf_stub_init(); + +//---------------------------------------------------------------------------- +// Reset. +#define CYGARC_REG_BOARD_RESET 0xb5400000 + +#define HAL_STUB_PLATFORM_RESET() HAL_WRITE_UINT8(CYGARC_REG_BOARD_RESET,0) + +#define HAL_STUB_PLATFORM_RESET_ENTRY 0xbfc00000 + +#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_PLF_STUB_H +// End of plf_stub.h
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/misc/slow_cat.tcl @@ -0,0 +1,25 @@ +#!/bin/sh +# these lines restart using the tcl shell \ + exec sh -c "if ( echo | tclsh ) 2>/dev/null ; then \ + exec tclsh \"${0}\" ${1+${*}} ; \ + elif ( echo | cygtclsh80 ) 2>/dev/null ; then \ + exec cygtclsh80 \"${0}\" ${1+${*}} ; \ + else \ + echo Could not find TCL interpreter ; \ + exit 1 ; \ + fi" + +# Can be used like this: +# Get flash ready for programming using Minicom or similar +# [o (Option menu), a (flAsh menu), b (Boot write)] +# Then execute the following +# slow_cat.tcl < install/bin/gdb_module.srec >/dev/ttyS0 + +# Delay lines by 1/10 of a second to allow the flash to recover The +# gets also strips off the broken (DOS) new-lines that objcopy is +# generating. The puts replace them with 0x0a which the firmware +# requires. +while { 0 <= [gets stdin line] } { + puts $line + after 100 +}
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/misc/swap4.tcl @@ -0,0 +1,30 @@ +#!/bin/sh +# these lines restart using the tcl shell \ + exec sh -c "if ( echo | tclsh ) 2>/dev/null ; then \ + exec tclsh \"${0}\" ${1+${*}} ; \ + elif ( echo | cygtclsh80 ) 2>/dev/null ; then \ + exec cygtclsh80 \"${0}\" ${1+${*}} ; \ + else \ + echo Could not find TCL interpreter ; \ + exit 1 ; \ + fi" + +proc filter { input_file output_file } { + set input_fd [open $input_file "r"] + set output_fd [open $output_file "w"] + + fconfigure $input_fd -translation binary + fconfigure $output_fd -translation binary + while { 1 } { + set data [read $input_fd 4] + if { [eof $input_fd] } { + break + } + binary scan $data "i" var + puts -nonewline $output_fd [binary format "I" $var] + } + close $input_fd + close $output_fd +} + +filter [lindex $argv 0] [lindex $argv 1]
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/src/hal_diag.c @@ -0,0 +1,209 @@ +//============================================================================= +// +// hal_diag.c +// +// HAL diagnostic output code +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:nickg, jskov +// Date: 2000-05-10 +// Purpose: HAL diagnostic output +// Description: Implementations of HAL diagnostic output support. +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> + +#if !defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) + +#include <cyg/infra/cyg_type.h> // base types +#include <cyg/infra/cyg_trac.h> // tracing macros +#include <cyg/infra/cyg_ass.h> // assertion macros + +#include <cyg/hal/hal_arch.h> +#include <cyg/hal/hal_diag.h> + +#include <cyg/hal/hal_intr.h> +#include <cyg/hal/hal_misc.h> // Helper functions + +#include <cyg/hal/hal_io.h> + +#include <cyg/hal/hal_if.h> // ROM calling interface + +#if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) +#include <cyg/hal/hal_stub.h> // CYG_HAL_GDB_x_CRITICAL_IO_REGION +#endif + +externC void cyg_hal_plf_serial_init_channel(void* __ch_data); +externC void cyg_hal_plf_serial_putc(void* __ch_data, cyg_uint8 __ch); +externC cyg_uint8 cyg_hal_plf_serial_getc(void* __ch_data); + +//----------------------------------------------------------------------------- +// Hit the hardware directly. Either wrap in GDB O-packets, or write +// data raw to device. + +// Decide when to wrap text output as GDB O-packets +#if (CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL \ + == CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL) + +#if defined(CYGSEM_HAL_USE_ROM_MONITOR_GDB_stubs) \ + || defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) + +#define CYG_DIAG_GDB + +#endif + +#endif + +//----------------------------------------------------------------------------- +// There are two serial ports. Hardwire to use one of them. +#define CYG_DEVICE_SERIAL_SCC1 0xb40003f8 // port 1 +#define CYG_DEVICE_SERIAL_SCC2 0xb40002f8 // port 2 + +typedef struct { + cyg_uint8* base; + cyg_int32 msec_timeout; + int isr_vector; +} channel_data_t; + +#if (CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL == 0) +#define BASE ((cyg_uint8*)CYG_DEVICE_SERIAL_SCC1) +#else +#define BASE ((cyg_uint8*)CYG_DEVICE_SERIAL_SCC2) +#endif + +static channel_data_t channel = { BASE, 0, 0}; + +#ifdef CYG_DIAG_GDB + +void +hal_diag_write_char(char c) +{ + static char line[100]; + static int pos = 0; + + // No need to send CRs + if( c == '\r' ) return; + + line[pos++] = c; + + if( c == '\n' || pos == sizeof(line) ) + { + CYG_INTERRUPT_STATE old; + + // Disable interrupts. This prevents GDB trying to interrupt us + // while we are in the middle of sending a packet. The serial + // receive interrupt will be seen when we re-enable interrupts + // later. +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION(old); +#else + HAL_DISABLE_INTERRUPTS(old); +#endif + + while(1) + { + static char hex[] = "0123456789ABCDEF"; + cyg_uint8 csum = 0; + int i; + char c1; + + cyg_hal_plf_serial_putc(&channel, '$'); + cyg_hal_plf_serial_putc(&channel, 'O'); + csum += 'O'; + for( i = 0; i < pos; i++ ) + { + char ch = line[i]; + char h = hex[(ch>>4)&0xF]; + char l = hex[ch&0xF]; + cyg_hal_plf_serial_putc(&channel, h); + cyg_hal_plf_serial_putc(&channel, l); + csum += h; + csum += l; + } + cyg_hal_plf_serial_putc(&channel, '#'); + cyg_hal_plf_serial_putc(&channel, hex[(csum>>4)&0xF]); + cyg_hal_plf_serial_putc(&channel, hex[csum&0xF]); + + c1 = cyg_hal_plf_serial_getc(&channel); + + if( c1 == '+' ) break; + } + + pos = 0; + // And re-enable interrupts +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + CYG_HAL_GDB_LEAVE_CRITICAL_IO_REGION(old); +#else + HAL_RESTORE_INTERRUPTS(old); +#endif + } +} + +void +hal_diag_read_char(char *c) +{ + *c = cyg_hal_plf_serial_getc(&channel); +} + +#else // CYG_DIAG_GDB + +// Hit the hardware directly, no GDB translation + +void +hal_diag_read_char(char *c) +{ + *c = cyg_hal_plf_serial_getc(&channel); +} + +void +hal_diag_write_char(char c) +{ + cyg_hal_plf_serial_putc(&channel, c); +} + + +#endif + +// Reagardless whether encoding or not we alway initialize the device. + +void +hal_diag_init(void) +{ + // Init serial device + cyg_hal_plf_serial_init_channel((void*)&channel); +} + +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + +//----------------------------------------------------------------------------- +// End of hal_diag.c
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/src/pc87338.c @@ -0,0 +1,413 @@ +#ifndef CYGONCE_HAL_PC_SER_H +#define CYGONCE_HAL_PC_SER_H +//============================================================================= +// +// pc87338.c +// +// Simple driver for the serial controllers in the PC87338 SuperIO chip +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-06-20 +// Description: Simple driver for the PC87338 serial controllers +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> + +#include <cyg/hal/hal_arch.h> // SAVE/RESTORE GP macros +#include <cyg/hal/hal_io.h> // IO macros +#include <cyg/hal/hal_if.h> // interface API +#include <cyg/hal/hal_intr.h> // HAL_ENABLE/MASK/UNMASK_INTERRUPTS +#include <cyg/hal/hal_misc.h> // Helper functions +#include <cyg/hal/drv_api.h> // CYG_ISR_HANDLED + +//----------------------------------------------------------------------------- +// Controller definitions. + +//----------------------------------------------------------------------------- +// There are two serial ports. +#define CYG_DEVICE_SERIAL_SCC1 0xb40003f8 // port 1 +#define CYG_DEVICE_SERIAL_SCC2 0xb40002f8 // port 2 + +//----------------------------------------------------------------------------- +// Serial registers (shared by all banks) +#define CYG_DEVICE_BSR (0x03) +#define CYG_DEVICE_LCR (0x03) + +#define CYG_DEVICE_BSR_BANK0 0x00 +#define CYG_DEVICE_BSR_BANK2 0xe0 + +#define CYG_DEVICE_LCR_LEN_5BIT 0x00 +#define CYG_DEVICE_LCR_LEN_6BIT 0x01 +#define CYG_DEVICE_LCR_LEN_7BIT 0x02 +#define CYG_DEVICE_LCR_LEN_8BIT 0x03 +#define CYG_DEVICE_LCR_STOP_1 0x00 +#define CYG_DEVICE_LCR_STOP_2 0x04 +#define CYG_DEVICE_LCR_PARITY_NONE 0x00 +#define CYG_DEVICE_LCR_PARITY_ODD 0x08 +#define CYG_DEVICE_LCR_PARITY_EVEN 0x18 +#define CYG_DEVICE_LCR_PARITY_LOGIC1 0x28 +#define CYG_DEVICE_LCR_PARITY_LOGIC0 0x38 +#define CYG_DEVICE_LCR_SBRK 0x40 + +// Bank 0 (control/status) +#define CYG_DEVICE_BK0_TXD (0x00) +#define CYG_DEVICE_BK0_RXD (0x00) +#define CYG_DEVICE_BK0_IER (0x01) +#define CYG_DEVICE_BK0_EIR (0x02) +#define CYG_DEVICE_BK0_FCR (0x02) +#define CYG_DEVICE_BK0_MCR (0x04) +#define CYG_DEVICE_BK0_LSR (0x05) +#define CYG_DEVICE_BK0_MSR (0x06) +#define CYG_DEVICE_BK0_SPR (0x07) +#define CYG_DEVICE_BK0_ASCR (0x07) + +#define CYG_DEVICE_BK0_LSR_RXDA 0x01 +#define CYG_DEVICE_BK0_LSR_OE 0x02 +#define CYG_DEVICE_BK0_LSR_PE 0x04 +#define CYG_DEVICE_BK0_LSR_FE 0x08 +#define CYG_DEVICE_BK0_LSR_BRK 0x10 +#define CYG_DEVICE_BK0_LSR_TXRDY 0x20 +#define CYG_DEVICE_BK0_LSR_TXEMP 0x40 +#define CYG_DEVICE_BK0_LSR_ER_INF 0x80 + +#define CYG_DEVICE_BK0_IER_TMR_IE 0x80 +#define CYG_DEVICE_BK0_IER_SFIF_IE 0x40 +#define CYG_DEVICE_BK0_IER_TXEMP_IE 0x20 +#define CYG_DEVICE_BK0_IER_DMA_IE 0x10 +#define CYG_DEVICE_BK0_IER_MS_IE 0x08 +#define CYG_DEVICE_BK0_IER_LS_IE 0x04 +#define CYG_DEVICE_BK0_IER_TXLDL_IE 0x02 +#define CYG_DEVICE_BK0_IER_RXHDL_IE 0x01 + +#define CYG_DEVICE_BK0_EIR_FEN1 0x80 +#define CYG_DEVICE_BK0_EIR_FEN0 0x40 +#define CYG_DEVICE_BK0_EIR_RXFT 0x08 +#define CYG_DEVICE_BK0_EIR_IPR1 0x04 +#define CYG_DEVICE_BK0_EIR_IPR0 0x02 +#define CYG_DEVICE_BK0_EIR_IPF 0x01 + +#define CYG_DEVICE_BK0_EIR_mask 0x07 +#define CYG_DEVICE_BK0_EIR_IRQ_ERR 0x06 +#define CYG_DEVICE_BK0_EIR_IRQ_RX 0x04 +#define CYG_DEVICE_BK0_EIR_IRQ_TX 0x02 + +#define CYG_DEVICE_BK0_MCR_ISEN 0x08 // interrupt signal enable + + +// Bank 2 (baud generator) +#define CYG_DEVICE_BK2_BGDL (0x00) +#define CYG_DEVICE_BK2_BGDH (0x01) +#define CYG_DEVICE_BK2_EXCR1 (0x02) +#define CYG_DEVICE_BK2_EXCR2 (0x04) +#define CYG_DEVICE_BK2_TXFLV (0x06) +#define CYG_DEVICE_BK2_RXFLV (0x07) + + +//----------------------------------------------------------------------------- +typedef struct { + cyg_uint8* base; + cyg_int32 msec_timeout; + int isr_vector; +} channel_data_t; + +//----------------------------------------------------------------------------- +// The minimal init, get and put functions. All by polling. + +void +cyg_hal_plf_serial_init_channel(void* __ch_data) +{ + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + cyg_uint8 lcr; + + HAL_WRITE_UINT8(base+CYG_DEVICE_BSR, CYG_DEVICE_BSR_BANK0); + HAL_WRITE_UINT8(base+CYG_DEVICE_BK0_IER, 0); + HAL_WRITE_UINT8(base+CYG_DEVICE_BK0_MCR, CYG_DEVICE_BK0_MCR_ISEN); + + // Disable FIFOs + HAL_WRITE_UINT8(base+CYG_DEVICE_BK0_FCR, 0); + + // 8-1-no parity. + HAL_WRITE_UINT8(base+CYG_DEVICE_LCR, + CYG_DEVICE_LCR_LEN_8BIT | CYG_DEVICE_LCR_STOP_1 | CYG_DEVICE_LCR_PARITY_NONE); + + // Set speed to 38400 (switch bank, remember old LCR setting) + HAL_READ_UINT8(base+CYG_DEVICE_LCR, lcr); + HAL_WRITE_UINT8(base+CYG_DEVICE_BSR, CYG_DEVICE_BSR_BANK2); + HAL_WRITE_UINT8(base+CYG_DEVICE_BK2_BGDL, 3); + HAL_WRITE_UINT8(base+CYG_DEVICE_BK2_BGDH, 0); + HAL_WRITE_UINT8(base+CYG_DEVICE_LCR, lcr); +} + +void +cyg_hal_plf_serial_putc(void* __ch_data, cyg_uint8 __ch) +{ + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + cyg_uint8 lsr; + CYGARC_HAL_SAVE_GP(); + + do { + HAL_READ_UINT8(base+CYG_DEVICE_BK0_LSR, lsr); + } while ((lsr & CYG_DEVICE_BK0_LSR_TXRDY) == 0); + + HAL_WRITE_UINT8(base+CYG_DEVICE_BK0_TXD, __ch); + + // Hang around until the character has been safely sent. + do { + HAL_READ_UINT8(base+CYG_DEVICE_BK0_LSR, lsr); + } while ((lsr & CYG_DEVICE_BK0_LSR_TXRDY) == 0); + + CYGARC_HAL_RESTORE_GP(); +} + +static cyg_bool +cyg_hal_plf_serial_getc_nonblock(void* __ch_data, cyg_uint8* ch) +{ + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + cyg_uint8 lsr; + + HAL_READ_UINT8(base+CYG_DEVICE_BK0_LSR, lsr); + if ((lsr & CYG_DEVICE_BK0_LSR_RXDA) == 0) + return false; + + HAL_READ_UINT8 (base+CYG_DEVICE_BK0_RXD, *ch); + + return true; +} + +cyg_uint8 +cyg_hal_plf_serial_getc(void* __ch_data) +{ + cyg_uint8 ch; + CYGARC_HAL_SAVE_GP(); + + while(!cyg_hal_plf_serial_getc_nonblock(__ch_data, &ch)); + + CYGARC_HAL_RESTORE_GP(); + return ch; +} + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \ + || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES) + +static const channel_data_t channels[2] = { + { (cyg_uint8*)CYG_DEVICE_SERIAL_SCC1, 1000, CYGNUM_HAL_INTERRUPT_DEBUG_UART}, + { (cyg_uint8*)CYG_DEVICE_SERIAL_SCC2, 1000, CYGNUM_HAL_INTERRUPT_USER_UART} +}; + +static void +cyg_hal_plf_serial_write(void* __ch_data, const cyg_uint8* __buf, + cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while(__len-- > 0) + cyg_hal_plf_serial_putc(__ch_data, *__buf++); + + CYGARC_HAL_RESTORE_GP(); +} + +static void +cyg_hal_plf_serial_read(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while(__len-- > 0) + *__buf++ = cyg_hal_plf_serial_getc(__ch_data); + + CYGARC_HAL_RESTORE_GP(); +} + + +cyg_bool +cyg_hal_plf_serial_getc_timeout(void* __ch_data, cyg_uint8* ch) +{ + int delay_count; + channel_data_t* chan = (channel_data_t*)__ch_data; + cyg_bool res; + CYGARC_HAL_SAVE_GP(); + + delay_count = chan->msec_timeout * 10; // delay in .1 ms steps + + for(;;) { + res = cyg_hal_plf_serial_getc_nonblock(__ch_data, ch); + if (res || 0 == delay_count--) + break; + + CYGACC_CALL_IF_DELAY_US(100); + } + + CYGARC_HAL_RESTORE_GP(); + return res; +} + +static int +cyg_hal_plf_serial_control(void *__ch_data, __comm_control_cmd_t __func, ...) +{ + static int irq_state = 0; + channel_data_t* chan = (channel_data_t*)__ch_data; + cyg_uint8 ier; + int ret = 0; + CYGARC_HAL_SAVE_GP(); + + switch (__func) { + case __COMMCTL_IRQ_ENABLE: + irq_state = 1; + + HAL_READ_UINT8(chan->base+CYG_DEVICE_BK0_IER, ier); + ier |= CYG_DEVICE_BK0_IER_RXHDL_IE; + HAL_WRITE_UINT8(chan->base+CYG_DEVICE_BK0_IER, ier); + + HAL_INTERRUPT_SET_LEVEL(chan->isr_vector, 1); + HAL_INTERRUPT_UNMASK(chan->isr_vector); + break; + case __COMMCTL_IRQ_DISABLE: + ret = irq_state; + irq_state = 0; + + HAL_READ_UINT8(chan->base+CYG_DEVICE_BK0_IER, ier); + ier &= ~CYG_DEVICE_BK0_IER_RXHDL_IE; + HAL_WRITE_UINT8(chan->base+CYG_DEVICE_BK0_IER, ier); + + HAL_INTERRUPT_MASK(chan->isr_vector); + break; + case __COMMCTL_DBG_ISR_VECTOR: + ret = chan->isr_vector; + break; + case __COMMCTL_SET_TIMEOUT: + { + va_list ap; + + va_start(ap, __func); + + ret = chan->msec_timeout; + chan->msec_timeout = va_arg(ap, cyg_uint32); + + va_end(ap); + } + default: + break; + } + CYGARC_HAL_RESTORE_GP(); + return ret; +} + +static int +cyg_hal_plf_serial_isr(void *__ch_data, int* __ctrlc, + CYG_ADDRWORD __vector, CYG_ADDRWORD __data) +{ + int res = 0; + cyg_uint8 eir, c; + channel_data_t* chan = (channel_data_t*)__ch_data; + CYGARC_HAL_SAVE_GP(); + + HAL_INTERRUPT_ACKNOWLEDGE(chan->isr_vector); + + HAL_READ_UINT8(chan->base+CYG_DEVICE_BK0_EIR, eir); + + *__ctrlc = 0; + if( (eir & CYG_DEVICE_BK0_EIR_mask) == CYG_DEVICE_BK0_EIR_IRQ_RX ) { + + HAL_READ_UINT8(chan->base+CYG_DEVICE_BK0_RXD, c); + + if( cyg_hal_is_break( &c , 1 ) ) + *__ctrlc = 1; + + res = CYG_ISR_HANDLED; + } + + CYGARC_HAL_RESTORE_GP(); + return res; +} + +static void +cyg_hal_plf_serial_init(void) +{ + hal_virtual_comm_table_t* comm; + int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT); + + // Disable interrupts. + HAL_INTERRUPT_MASK(channels[0].isr_vector); + HAL_INTERRUPT_MASK(channels[1].isr_vector); + + // Init channels + cyg_hal_plf_serial_init_channel((void*)&channels[0]); + cyg_hal_plf_serial_init_channel((void*)&channels[1]); + + // Setup procs in the vector table + + // Set channel 0 + CYGACC_CALL_IF_SET_CONSOLE_COMM(0); + comm = CYGACC_CALL_IF_CONSOLE_PROCS(); + CYGACC_COMM_IF_CH_DATA_SET(*comm, &channels[0]); + CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_plf_serial_write); + CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_plf_serial_read); + CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_plf_serial_putc); + CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_plf_serial_getc); + CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_plf_serial_control); + CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_serial_isr); + CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_plf_serial_getc_timeout); + + // Set channel 1 + CYGACC_CALL_IF_SET_CONSOLE_COMM(1); + comm = CYGACC_CALL_IF_CONSOLE_PROCS(); + CYGACC_COMM_IF_CH_DATA_SET(*comm, &channels[1]); + CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_plf_serial_write); + CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_plf_serial_read); + CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_plf_serial_putc); + CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_plf_serial_getc); + CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_plf_serial_control); + CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_serial_isr); + CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_plf_serial_getc_timeout); + + // Restore original console + CYGACC_CALL_IF_SET_CONSOLE_COMM(cur); +} + +void +cyg_hal_plf_comms_init(void) +{ + static int initialized = 0; + + if (initialized) + return; + + initialized = 1; + + cyg_hal_plf_serial_init(); +} +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES + +//----------------------------------------------------------------------------- +// end of pc87338.c +#endif // CYGONCE_HAL_PC_SER_INL
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/src/platform.S @@ -0,0 +1,338 @@ +##============================================================================= +## +## platform.S +## +## MIPS REF4955-TX4955 platform code +## +##============================================================================= +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +##============================================================================= +#######DESCRIPTIONBEGIN#### +## +## Author(s): nickg +## Contributors:nickg, jskov +## Date: 2000-05-09 +## Purpose: MIPS REF4955-TX4955 platform code +## Description: Platform specific code for REF4955-TX4955 board. +## +######DESCRIPTIONEND#### +## +##============================================================================= + + .set noreorder + +#include <pkgconf/system.h> +#include <pkgconf/hal.h> + +#ifdef CYGPKG_KERNEL +# include <pkgconf/kernel.h> +#endif + +#include <cyg/hal/arch.inc> +#include <cyg/hal/plf_defs.inc> + +##----------------------------------------------------------------------------- +## ISR springboard. +## This routine decodes the interrupt from the various interrupt controllers +## and vectors to it. + + # On entry: + # a0 = MIPS status register interrupt number (1,2 or 3) + # a1 = ISR data value (= interrupt controller reg address) + # a2 = saved reg dump ptr + # s0 = saved reg dump ptr + # s1 = vector table offset + # s2 = interrupt number + # a3,v0,v1 etc available for use + + .text + +FUNC_START(hal_isr_springboard_pci) + lbu v0,0(a1) + nor v0,v0,v0 + la a1,CYGARC_REG_PCI_MASK + lbu a2,0(a1) + and v0,v0,a2 + addi a2,$0,CYGNUM_HAL_INTERRUPT_INTC_PCI_base + b hal_isr_springboard + nop +FUNC_END(hal_isr_springboard_pci) + +FUNC_START(hal_isr_springboard_io) + lbu v0,0(a1) + nor v0,v0,v0 + la a1,CYGARC_REG_IO_MASK + lbu a2,0(a1) + and v0,v0,a2 + addi a2,$0,CYGNUM_HAL_INTERRUPT_INTC_IO_base + b hal_isr_springboard + nop +FUNC_END(hal_isr_springboard_io) + +hal_isr_springboard_v320usc: + lw v0,0(a1) + la a1,CYGARC_REG_INT_CFG0 + lw v1,0(a1) + lw a2,4(a1) # CFG1 + or v1,v1,a2 + lw a2,8(a1) # CFG2 + or v1,v1,a2 + la a1,CYGARC_REG_INT_CFG3 + lw a2,0(a1) + or v1,v1,a2 + and v0,v0,v1 + addi a2,$0,CYGNUM_HAL_INTERRUPT_INTC_V320USC_base + +FUNC_START(hal_isr_springboard) + + # The following code implements an ls bit index algorithm similar + # to that in hal_lsbit_index() in hal_misc.c. + negu v1,v0 # v1 = -v0 + and v1,v1,v0 # v1 &= v0 [isolate ls bit] + sll v0,v1,16 # v0 = v1<<16 + subu v1,v0,v1 # v1 = v0 - v1 + sll a0,v1,6 # a0 = v1<<6 + addu v1,v1,a0 # v1 += a0 + sll a1,v1,4 # a1 = v1<<4 + addu v1,v1,a1 # v1 += a1 + la v0,hal_isr_springboard_table # v0 = table address + srl v1,v1,26 # v1 = v1>>26 + addu v1,v1,v0 # v1 = table entry address + lb a0,0(v1) # a0 = intc isr number + + add s2,a0,a2 # s2 = eCos isr number +#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN +hal_isr_springboard_chaining: + # This serves as the __default_interrupt_isr entry-point in + # chaning mode, thus ensuring that all interrupts from + # vectors 0-5 eventually end up on the special CHAINING vector. + # (See the hal_interrupt_handlers table) + ori s1,zero,CYGNUM_HAL_INTERRUPT_CHAINING*4 # s1 = chaining isr ix +#else + sll s1,s2,2 # s1 = isr table index +#endif + + la v1,hal_interrupt_handlers + add v1,v1,s1 # v1 = isr handler address + lw v1,0(v1) # v1 = isr handler + + la a1,hal_interrupt_data + add a1,a1,s1 # a1 = address of data ptr + lw a1,0(a1) # a1 = data pointer + + move a0,s2 # pass interrupt number + + jr v1 # jump to handler, return is to + # default vsr already in ra + nop + +FUNC_END(hal_isr_springboard) + + +hal_isr_springboard_table: + .byte -1, 0, 1, 12, 2, 6, 0, 13 + .byte 3, 0, 7, 0, 0, 0, 0, 14 + .byte 10, 4, 0, 0, 8, 0, 0, 25 + .byte 0, 0, 0, 0, 0, 21, 27, 15 + .byte 31, 11, 5, 0, 0, 0, 0, 0 + .byte 9, 0, 0, 24, 0, 0, 20, 26 + .byte 30, 0, 0, 0, 0, 23, 0, 19 + .byte 29, 0, 22, 18, 28, 17, 16, 0 + + +##----------------------------------------------------------------------------- +## MEMC initialization. +## This also initializes the PCI bus and ISA bus bridge, so at the end of this +## we should have full access to all the memory and devices we need. +## This code is table driven, which is somewhat more compact that coding it all. +## Table entries consist of an address and a value to store in that address. +## A zero address terminates the table. Two special address values modify the +## behaviour: +## DELAY_LOOP loops for the number of iterations in the value field. +## WRITE16 treats the next 2 words as an address and value to be written +## with a 16 bit write cycle. + +#if !defined(CYG_HAL_STARTUP_RAM) + +#define DELAY_LOOP 1 +#define WRITE16 2 + +FUNC_START(hal_memc_setup) + + lar t0,hal_memc_setup_table + la t1,0xbfc00000 + la t2,DELAY_LOOP + la t3,WRITE16 +1: + lw a0,0(t0) # next table entry + lw a1,4(t0) # value to write + addiu t0,8 # go to next entry + beq a0,t2,2f # Check for delay + nop + beq a0,t3,3f # Check for 16 bit write + nop + beqz a0,9f # zero terminates loop + nop + sw a1,0(a0) # write it + lw zero,0(t1) # uncached read to flush write buffer + b 1b + nop +2: + lw zero,0(t1) # uncached read to flush write buffer + bnez a1,2b # count down by value in a1 + addiu a1,-1 # decrement in delay slot + b 1b # go back to loop + nop +3: + lw a3,0(t0) # get next word + addiu t0,4 # skip it + sh a3,0(a1) # store halfword + lw zero,0(t1) # uncached read to flush write buffer + b 1b + nop +9: + jr ra + nop + +FUNC_END(hal_memc_setup) + + +##----------------------------------------------------------------------------- +## The initialization table + +#define USC_LB_BUS_CFG 0xb800007c +#define USC_SDRAM_MA_CMD 0xb8000088 + +hal_memc_setup_table: + + .long DELAY_LOOP, 10000 # Wait for HW to settle + +#ifdef CYGPKG_HAL_MIPS_MSBFIRST + # V320SC : big-endian, max bus watch timer + .long USC_LB_BUS_CFG, 0x04010ff0 +#else + .long USC_LB_BUS_CFG, 0x04000ff0 +#endif + .long USC_SDRAM_MA_CMD, 0x00a70000 + .long USC_SDRAM_MA_CMD, 0x00e70220 + + .long 0, 0 + +#endif // !CYG_HAL_STARTUP_RAM + +##----------------------------------------------------------------------------- +## ISR tables. + + .extern hal_default_isr + + .data + +#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN + .globl hal_interrupt_handlers +hal_interrupt_handlers: + # These first 6 vectors all go through a springboard for further + # interrupt controller vector decoding before ending up on the + # special chaining vector below. + .long hal_isr_springboard_v320usc + .long hal_isr_springboard_pci + .long hal_isr_springboard_chaining + .long hal_isr_springboard_chaining + .long hal_isr_springboard_io + .long hal_isr_springboard_chaining + + .long hal_default_isr # chaining vector + + .globl hal_interrupt_data +hal_interrupt_data: + .long CYGARC_REG_INT_STAT + .long CYGARC_REG_PCI_STAT + .long 0 + .long 0 + .long CYGARC_REG_IO_STAT + .long 0 + + .long 0 # chaining vector data + + .globl hal_interrupt_objects +hal_interrupt_objects: + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + .long 0 + + .long 0 # chaining vector object + + .globl cyg_hal_interrupt_level +cyg_hal_interrupt_level: + .rept CYGNUM_HAL_ISR_COUNT + .byte 0 + .endr + +#else // CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN + + .globl hal_interrupt_handlers +hal_interrupt_handlers: + .long hal_isr_springboard_v320usc + .long hal_isr_springboard_pci + .long hal_default_isr + .long hal_default_isr + .long hal_isr_springboard_io + .long hal_default_isr + + .rept CYGNUM_HAL_ISR_COUNT-6 + .long hal_default_isr + .endr + + .globl hal_interrupt_data +hal_interrupt_data: + .long CYGARC_REG_INT_STAT + .long CYGARC_REG_PCI_STAT + .long 0 + .long 0 + .long CYGARC_REG_IO_STAT + .long 0 + + .rept CYGNUM_HAL_ISR_COUNT-6 + .long 0 + .endr + + .globl hal_interrupt_objects +hal_interrupt_objects: + .rept CYGNUM_HAL_ISR_COUNT + .long 0 + .endr + + .globl cyg_hal_interrupt_level +cyg_hal_interrupt_level: + .rept CYGNUM_HAL_ISR_COUNT + .byte 0 + .endr + +#endif // CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN + +##----------------------------------------------------------------------------- +## end of platform.S
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/src/plf_misc.c @@ -0,0 +1,114 @@ +//========================================================================== +// +// plf_misc.c +// +// HAL platform miscellaneous functions +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributors: nickg, jlarmour, jskov +// Date: 2000-05-15 +// Purpose: HAL miscellaneous functions +// Description: This file contains miscellaneous functions provided by the +// HAL. +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <pkgconf/hal.h> + +#include <cyg/infra/cyg_type.h> // Base types +#include <cyg/infra/cyg_trac.h> // tracing macros +#include <cyg/infra/cyg_ass.h> // assertion macros + +#include <cyg/hal/hal_arch.h> // architectural definitions + +#include <cyg/hal/hal_intr.h> // Interrupt handling + +#include <cyg/hal/hal_cache.h> // Cache handling +#include <cyg/hal/drv_api.h> // CYG_ISR_HANDLED + +#include <cyg/hal/hal_if.h> // Calling interface definitions +#include <cyg/hal/hal_misc.h> // Helper functions + +//-------------------------------------------------------------------------- + +#define CYGARC_REG_SUPERIO_IREG 0xb4000398 +#define CYGARC_REG_SUPERIO_DREG 0xb4000399 + +#define CYGARC_REG_SUPERIO_FER 0x00 // function enable +#define CYGARC_REG_SUPERIO_FAR 0x01 // function address +#define CYGARC_REG_SUPERIO_PTR 0x02 // power and test +#define CYGARC_REG_SUPERIO_CLK 0x51 // clock controller + + +#define CYGARC_REG_SUPERIO_FER_PAR 0x01 +#define CYGARC_REG_SUPERIO_FER_SCC1 0x02 +#define CYGARC_REG_SUPERIO_FER_SCC2 0x04 + +#define CYGARC_REG_SUPERIO_CLK_14M 0x00 // 14MHz source +#define CYGARC_REG_SUPERIO_CLK_CME 0x04 // clock multiplier enabled + +#define CYGARC_REG_SUPERIO_PTR_PPEXT 0x80 // extended + + + + +static void write_super_io(cyg_uint8 offset, cyg_uint8 data) +{ + HAL_WRITE_UINT8(CYGARC_REG_SUPERIO_IREG, offset); + HAL_WRITE_UINT8(CYGARC_REG_SUPERIO_DREG, data); + HAL_WRITE_UINT8(CYGARC_REG_SUPERIO_DREG, data); +} + +void hal_platform_init(void) +{ + hal_if_init(); + + // Configure the SuperIO chip + write_super_io(CYGARC_REG_SUPERIO_FER, + CYGARC_REG_SUPERIO_FER_SCC1|CYGARC_REG_SUPERIO_FER_SCC2); + write_super_io(CYGARC_REG_SUPERIO_FAR, 0x10); + write_super_io(CYGARC_REG_SUPERIO_CLK, + CYGARC_REG_SUPERIO_CLK_14M|CYGARC_REG_SUPERIO_CLK_CME); + + // Set up VSC320 interrupt controller. INT1 must merge INT2 and + // INT3 according to the platform specification. + HAL_WRITE_UINT32(CYGARC_REG_INT_CFG1, + CYGARC_REG_INT_CFG_INT2|CYGARC_REG_INT_CFG_INT3); + + // Unmask vectors which are entry points for interrupt controllers + HAL_INTERRUPT_UNMASK(CYGNUM_HAL_INTERRUPT_V320USC_INT0); + HAL_INTERRUPT_UNMASK(CYGNUM_HAL_INTERRUPT_V320USC_INT1); + HAL_INTERRUPT_UNMASK(CYGNUM_HAL_INTERRUPT_IO); +} + +//-------------------------------------------------------------------------- +// End of plf_misc.c
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/src/plf_mk_defs.c @@ -0,0 +1,97 @@ +//========================================================================== +// +// plf_mk_defs.c +// +// HAL (platform) "make defs" program +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas, jskov +// Date: 2000-05-11 +// Purpose: Platform dependent definition generator +// Description: This file contains code that can be compiled by the target +// compiler and used to generate machine specific definitions +// suitable for use in assembly code. +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <pkgconf/hal.h> + +#include <cyg/hal/hal_arch.h> // HAL header +#include <cyg/hal/hal_intr.h> // HAL header +#include <cyg/hal/hal_cache.h> // HAL header +#ifdef CYGPKG_KERNEL +# include <pkgconf/kernel.h> +# include <cyg/kernel/instrmnt.h> +#endif + +/* + * This program is used to generate definitions needed by + * assembly language modules. + * + * This technique was first used in the OSF Mach kernel code: + * generate asm statements containing #defines, + * compile this file to assembler, and then extract the + * #defines from the assembly-language output. + */ + +#define DEFINE(sym, val) \ + asm volatile("\n\t.equ\t" #sym ",%0" : : "i" (val)) + +int +main(void) +{ + // Some other exception related definitions + DEFINE(CYGNUM_HAL_ISR_COUNT, CYGNUM_HAL_ISR_COUNT); + DEFINE(CYGNUM_HAL_VSR_COUNT, CYGNUM_HAL_VSR_COUNT); + DEFINE(CYGNUM_HAL_VECTOR_INTERRUPT, CYGNUM_HAL_VECTOR_INTERRUPT); + DEFINE(CYGNUM_HAL_VECTOR_BREAKPOINT, CYGNUM_HAL_VECTOR_BREAKPOINT); + + // Interrupt details + DEFINE(CYGNUM_HAL_INTERRUPT_INTC_V320USC_base, CYGNUM_HAL_INTERRUPT_INTC_V320USC_base); + DEFINE(CYGNUM_HAL_INTERRUPT_INTC_PCI_base, CYGNUM_HAL_INTERRUPT_INTC_PCI_base); + DEFINE(CYGNUM_HAL_INTERRUPT_INTC_IO_base, CYGNUM_HAL_INTERRUPT_INTC_IO_base); + DEFINE(CYGARC_REG_INT_STAT, CYGARC_REG_INT_STAT); + DEFINE(CYGARC_REG_PCI_STAT, CYGARC_REG_PCI_STAT); + DEFINE(CYGARC_REG_IO_STAT, CYGARC_REG_IO_STAT); + DEFINE(CYGARC_REG_PCI_MASK, CYGARC_REG_PCI_MASK); + DEFINE(CYGARC_REG_IO_MASK, CYGARC_REG_IO_MASK); + DEFINE(CYGARC_REG_INT_CFG0, CYGARC_REG_INT_CFG0); + DEFINE(CYGARC_REG_INT_CFG3, CYGARC_REG_INT_CFG3); +#if defined(CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN) + DEFINE(CYGNUM_HAL_INTERRUPT_CHAINING, CYGNUM_HAL_INTERRUPT_CHAINING); +#endif + + return 0; +} + +//-------------------------------------------------------------------------- +// EOF plf_mk_defs.c
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/ref4955/current/src/plf_stub.c @@ -0,0 +1,61 @@ +//============================================================================= +// +// plf_stub.c +// +// Platform specific code for GDB stub support. +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-05-15 +// Purpose: Platform specific code for GDB stub support. +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include <cyg/hal/hal_stub.h> + +#include <cyg/hal/hal_io.h> // HAL IO macros + +//----------------------------------------------------------------------------- +// Stub init + +void +hal_plf_stub_init(void) +{ +} + +#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS +//----------------------------------------------------------------------------- +// End of plf_stub.c
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/tx49/current/ChangeLog @@ -0,0 +1,117 @@ +2000-09-12 Jesper Skov <jskov@redhat.com> + + * include/variant.inc: Enable div-by-zero FPU exceptions. + +2000-09-06 Jesper Skov <jskov@redhat.com> + + * include/variant.inc: Enable the cache after clearing it. + +2000-09-01 Jonathan Larmour <jlarmour@redhat.com> + + * include/var_arch.h: tx49 GDB stubs now use 32-bits internally to + represent registers + +2000-08-31 Jonathan Larmour <jlarmour@redhat.com> + + * src/mips_tx49.ld: Use HAL table sections instead of devtab sections + +2000-06-06 Jesper Skov <jskov@redhat.com> + + * include/var_cache.h: Define HAL_ICACHE_INVALIDATE_ALL which + disables cache during operation. + +2000-05-25 Jesper Skov <jskov@redhat.com> + + * cdl/hal_mips_tx49.cdl: Use FPU double-LE layout in 32bit mode. + +2000-05-24 Jesper Skov <jskov@redhat.com> + + * src/mips_tx49.ld: Application contructors run after eCos + constructors. + +2000-05-22 Jesper Skov <jskov@redhat.com> + + * include/variant.inc: Flush all ways of cache on startup. + + * include/var_cache.h: + * cdl/hal_mips_tx49.cdl: Comment cleanups. + + * include/var_cache.h: Cleaned up. Use arch macros. + +2000-05-18 Jesper Skov <jskov@redhat.com> + + * src/mips_tx49.ld: Exclude libgcc constructors from CTOR list. + + * cdl/hal_mips_tx49.cdl: Set cache size to 32kB. + +2000-05-17 Jesper Skov <jskov@redhat.com> + + * src/mips_tx49.ld (hal_virtual_vector_table): Added. + +2000-05-16 Jesper Skov <jskov@redhat.com> + + * cdl/hal_mips_tx49.cdl: Platform can select FPU mode. + +2000-05-15 Jesper Skov <jskov@redhat.com> + + * include/variant.inc: + * include/var_cache.h: + The cache-enable bits must be 0 to enable. Enable + caching/writeback for kseg0. + + * src/variant.S: + * include/var_arch.h: + Cleanup. + + * include/variant.inc: Copied in various stuff from VR4300 file. + + * include/var_cache.h: Cleanup. Added enabled macros. + + * cdl/hal_mips_tx49.cdl: Cleanup. Enable FPU. + +2000-05-11 Jesper Skov <jskov@redhat.com> + + * src/mips_tx49.ld: Workaround minor tool problem. + + * src/variant.S: Emptied. + + * src/mips_tx49.ld: Move vsr to avoid conflict with 'other' + exception entry having vectors in RAM. + + * include/var_arch.h: GDB expects 64 bit registers. + + * cdl/hal_mips_tx49.cdl: Add (disabled) 64 bit related options. + + * src/mips_tx49.ld: Workaround for linker buglet. + + * include/var_cache.h: Minor tweaks. + +2000-05-09 Jesper Skov <jskov@redhat.com> + + * Cloned from hal/mips/tx39 + +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//===========================================================================
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/tx49/current/cdl/hal_mips_tx49.cdl @@ -0,0 +1,142 @@ +# ==================================================================== +# +# hal_mips_tx49.cdl +# +# MIPS/TX49 variant architectural HAL package configuration data +# +# ==================================================================== +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): jskov +# Original data: bartv, nickg +# Contributors: +# Date: 2000-05-15 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_HAL_MIPS_TX49 { + display "TX49 variant" + parent CYGPKG_HAL_MIPS + hardware + include_dir cyg/hal + define_header hal_mips_tx49.h + description " + The TX49 architecture HAL package provides generic support + for this processor architecture. It is also necessary to + select a specific target platform HAL package." + + cdl_component CYGPKG_HAL_MIPS_TX4955 { + display "TX4955 microprocessor" + default_value 1 + implements CYGINT_HAL_MIPS_VARIANT + description " + The TMPR4955F microprocessor. This is an embedded part that in + addition to the TX49 processor core has built in peripherals + such as memory controllers, DMA controllers, serial ports and + timers/counters." + + define_proc { + # Sizes are configurable (on the core). Should be configurable. + puts $::cdl_header "#define CYGHWR_HAL_DCACHE_SIZE 32768" + puts $::cdl_header "#define CYGHWR_HAL_ICACHE_SIZE 32768" + } + + cdl_option CYGHWR_HAL_MIPS_64BIT { + display "Variant 64 bit architecture support" + description " + While the TX49 is a 64bit CPU, only its 32bit mode is + currently supported in eCos." + calculated 0 + } + + # This is optional (on the core). Should be configurable. + cdl_option CYGHWR_HAL_MIPS_FPU { + display "Variant FPU support" + calculated 1 + } + + cdl_interface CYGINT_HAL_MIPS_FPU_64BIT { + display "Variant 64 bit FPU support interface" + } + + cdl_option CYGHWR_HAL_MIPS_FPU_64BIT { + display "Variant 64 bit FPU support" + calculated { CYGINT_HAL_MIPS_FPU_64BIT == 1 ? 1 : 0 } + } + + cdl_option CYGHWR_HAL_MIPS_FPU_32BIT { + display "Variant 32 bit FPU support" + calculated { CYGINT_HAL_MIPS_FPU_64BIT == 0 ? 1 : 0 } + } + + # FGRn+1 is most significant part of the FGRn&FGRn+1 pair of FPRn/2 + # This is true for BE mips2 mode at least. Not sure about fp64 mode + cdl_option CYGPKG_HAL_MIPS_DOUBLE_LSBFIRST { + active_if CYGHWR_HAL_MIPS_FPU_32BIT + calculated 1 + } + + cdl_interface CYGINT_HAL_MIPS_MSBFIRST { + no_define + display "CPU Variant big-endian interface" + } + + cdl_option CYGPKG_HAL_MIPS_MSBFIRST { + display "CPU Variant big-endian" + calculated { CYGINT_HAL_MIPS_MSBFIRST == 0 ? 0 : 1 } + } + + cdl_option CYGPKG_HAL_MIPS_LSBFIRST { + display "CPU Variant little-endian" + calculated { CYGINT_HAL_MIPS_MSBFIRST != 0 ? 0 : 1 } + } + } + + define_proc { + puts $::cdl_header "#include <pkgconf/hal_mips.h>" + } + + compile var_misc.c variant.S + + make { + <PREFIX>/lib/target.ld: <PACKAGE>/src/mips_tx49.ld + $(CC) -E -P -Wp,-MD,target.tmp -DEXTRAS=1 -xc $(INCLUDE_PATH) $(CFLAGS) -o $@ $< + @echo $@ ": \\" > $(notdir $@).deps + @tail +2 target.tmp >> $(notdir $@).deps + @echo >> $(notdir $@).deps + @rm target.tmp + } + + cdl_option CYGBLD_LINKER_SCRIPT { + display "Linker script" + flavor data + no_define + calculated { "src/mips_tx49.ld" } + } +}
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/tx49/current/include/var_arch.h @@ -0,0 +1,62 @@ +#ifndef CYGONCE_HAL_VAR_ARCH_H +#define CYGONCE_HAL_VAR_ARCH_H + +//========================================================================== +// +// var_arch.h +// +// Architecture specific abstractions +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributors: nickg, jskov +// Date: 2000-05-15 +// Purpose: Define architecture abstractions +// Description: This file contains any extra or modified definitions for +// this variant of the architecture. +// Usage: #include <cyg/hal/var_arch.h> +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <pkgconf/hal.h> +#include <cyg/infra/cyg_type.h> + +// ------------------------------------------------------------------------- +// Although the TX49 is really a 64 bit CPU, we have defined +// target_register_t elsewhere to be 32-bits because we only support +// 32-bit mode. Registers will still be sent to GDB as 64-bit, but that's +// not relevant for CYG_HAL_GDB_REG. + +#define CYG_HAL_GDB_REG CYG_WORD32 + +//-------------------------------------------------------------------------- +#endif // CYGONCE_HAL_VAR_ARCH_H +// End of var_arch.h
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/tx49/current/include/var_cache.h @@ -0,0 +1,202 @@ +#ifndef CYGONCE_VAR_CACHE_H +#define CYGONCE_VAR_CACHE_H + +//============================================================================= +// +// var_cache.h +// +// HAL cache control API +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributors:nickg, jskov +// Date: 2000-05-09 +// Purpose: Cache control API +// Description: The macros defined here provide the HAL APIs for handling +// cache control operations. +// Usage: +// #include <cyg/hal/imp_cache.h> +// ... +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> +#include <cyg/infra/cyg_type.h> + +#include <cyg/hal/mips-regs.h> + +#include <cyg/hal/plf_cache.h> + +//============================================================================= +// Toshiba TX4955 + +#ifdef CYGPKG_HAL_MIPS_TX4955 + +//----------------------------------------------------------------------------- +// Cache dimensions + +// Data cache +#define HAL_DCACHE_SIZE CYGHWR_HAL_DCACHE_SIZE // size in bytes +#define HAL_DCACHE_LINE_SIZE 32 // Size of a data cache line +#define HAL_DCACHE_WAYS 4 // Associativity of the cache + +// Instruction cache +#define HAL_ICACHE_SIZE CYGHWR_HAL_ICACHE_SIZE // size in bytes +#define HAL_ICACHE_LINE_SIZE 32 // Size of a cache line +#define HAL_ICACHE_WAYS 4 // Associativity of the cache + +#define HAL_DCACHE_SETS (HAL_DCACHE_SIZE/(HAL_DCACHE_LINE_SIZE*HAL_DCACHE_WAYS)) +#define HAL_ICACHE_SETS (HAL_ICACHE_SIZE/(HAL_ICACHE_LINE_SIZE*HAL_ICACHE_WAYS)) + +//----------------------------------------------------------------------------- +// Cache controls + +// Register $16 is Config register (controls cache state) + +// Config Register fields +#define CYGARC_REG_CONFIG_ICE 0x00020000 // Instruction cache enable +#define CYGARC_REG_CONFIG_DCE 0x00010000 // Data cache enable + + +//----------------------------------------------------------------------------- +// Global control of data cache + +// Enable the data cache +// This uses a bit in the config register, which is TX49 specific. +#define HAL_DCACHE_ENABLE_DEFINED +#define HAL_DCACHE_ENABLE() \ + CYG_MACRO_START \ + cyg_uint32 tmp; \ + asm volatile ("mfc0 %0,$16;" \ + "and %0,%0,%1;" \ + "mtc0 %0,$16;" \ + : "=&r" (tmp) \ + : "r" (~CYGARC_REG_CONFIG_DCE) \ + ); \ + CYG_MACRO_END + +// Disable the data cache +#define HAL_DCACHE_DISABLE_DEFINED +#define HAL_DCACHE_DISABLE() \ + CYG_MACRO_START \ + cyg_uint32 tmp; \ + asm volatile ("mfc0 %0,$16;" \ + "or %0,%0,%1;" \ + "mtc0 %0,$16;" \ + : "=&r" (tmp) \ + : "r" (CYGARC_REG_CONFIG_DCE) \ + ); \ + CYG_MACRO_END + +#define HAL_DCACHE_IS_ENABLED_DEFINED +#define HAL_DCACHE_IS_ENABLED(_state_) \ + CYG_MACRO_START \ + cyg_uint32 _cstate_; \ + asm volatile ( "mfc0 %0,$16\n" \ + : "=r"(_cstate_) \ + ); \ + if( _cstate_ & CYGARC_REG_CONFIG_DCE) \ + _state_ = 0; \ + else \ + _state_ = 1; \ + CYG_MACRO_END + +// Architecture HAL defines other operations + + +//----------------------------------------------------------------------------- +// Global control of Instruction cache + +// Enable the instruction cache +#define HAL_ICACHE_ENABLE_DEFINED +#define HAL_ICACHE_ENABLE() \ + CYG_MACRO_START \ + cyg_uint32 tmp; \ + asm volatile ("mfc0 %0,$16;" \ + "and %0,%0,%1;" \ + "mtc0 %0,$16;" \ + : "=&r" (tmp) \ + : "r" (~CYGARC_REG_CONFIG_ICE) \ + ); \ + CYG_MACRO_END + +// Disable the instruction cache +#define HAL_ICACHE_DISABLE_DEFINED +#define HAL_ICACHE_DISABLE() \ + CYG_MACRO_START \ + cyg_uint32 tmp; \ + asm volatile ("mfc0 %0,$16;" \ + "or %0,%0,%1;" \ + "mtc0 %0,$16;" \ + : "=&r" (tmp) \ + : "r" (CYGARC_REG_CONFIG_ICE) \ + ); \ + CYG_MACRO_END + +#define HAL_ICACHE_IS_ENABLED_DEFINED +#define HAL_ICACHE_IS_ENABLED(_state_) \ + CYG_MACRO_START \ + cyg_uint32 _cstate_; \ + asm volatile ( "mfc0 %0,$16\n" \ + : "=r"(_cstate_) \ + ); \ + if( _cstate_ & CYGARC_REG_CONFIG_ICE) \ + _state_ = 0; \ + else \ + _state_ = 1; \ + CYG_MACRO_END + +// TX49 cache instruction must not affect the line it executes out of, +// so disable instruction cache before invalidating it. +#define HAL_ICACHE_INVALIDATE_ALL_DEFINED +#define HAL_ICACHE_INVALIDATE_ALL() \ + CYG_MACRO_START \ + register CYG_ADDRESS _baddr_ = 0x80000000; \ + register CYG_ADDRESS _addr_ = 0x80000000; \ + register CYG_WORD _state_; \ + _HAL_ASM_SET_MIPS_ISA(3); \ + HAL_ICACHE_IS_ENABLED( _state_ ); \ + HAL_ICACHE_DISABLE(); \ + for( ; _addr_ < _baddr_+HAL_ICACHE_SIZE; _addr_ += HAL_ICACHE_LINE_SIZE ) \ + { _HAL_ASM_ICACHE_ALL_WAYS(0x00, _addr_); } \ + if( _state_ ) HAL_ICACHE_ENABLE(); \ + _HAL_ASM_SET_MIPS_ISA(0); \ + CYG_MACRO_END + +// Architecture HAL defines other operations + +#endif // CYGPKG_HAL_MIPS_TX4955 + + +//----------------------------------------------------------------------------- +#endif // ifndef CYGONCE_VAR_CACHE_H +// End of var_cache.h
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/tx49/current/include/var_intr.h @@ -0,0 +1,72 @@ +#ifndef CYGONCE_HAL_VAR_INTR_H +#define CYGONCE_HAL_VAR_INTR_H + +//========================================================================== +// +// imp_intr.h +// +// TX49 Interrupt and clock support +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors: jskov +// Date: 2000-05-09 +// Purpose: TX49 Interrupt support +// Description: The macros defined here provide the HAL APIs for handling +// interrupts and the clock for variants of the TX49 MIPS +// architecture. +// +// Usage: +// #include <cyg/hal/var_intr.h> +// ... +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <pkgconf/hal.h> + +#include <cyg/hal/plf_intr.h> + + +//-------------------------------------------------------------------------- +// Interrupt vectors. + +// Vectors and handling of these are defined in platform HALs since the +// CPU itself does not have a builtin interrupt controller. + +//-------------------------------------------------------------------------- +// Clock control + +// This is handled by the default code + +//-------------------------------------------------------------------------- +#endif // ifndef CYGONCE_HAL_VAR_INTR_H +// End of var_intr.h
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/tx49/current/include/variant.inc @@ -0,0 +1,160 @@ +#ifndef CYGONCE_HAL_VARIANT_INC +#define CYGONCE_HAL_VARIANT_INC +##============================================================================= +## +## variant.inc +## +## TX49 family assembler header file +## +##============================================================================= +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +##============================================================================= +#######DESCRIPTIONBEGIN#### +## +## Author(s): nickg +## Contributors:nickg, jskov +## Date: 2000-05-10 +## Purpose: TX49 family definitions. +## Description: This file contains various definitions and macros that are +## useful for writing assembly code for the TX49 CPU family. +## Usage: +## #include <cyg/hal/variant.inc> +## ... +## +## +######DESCRIPTIONEND#### +## +##============================================================================= + +#include <pkgconf/hal.h> + +#include <cyg/hal/platform.inc> + +##----------------------------------------------------------------------------- +## Define CPU variant for architecture HAL. + +#define CYG_HAL_MIPS_R4900 + +#------------------------------------------------------------------------------ +# Set up initial value for config register. Sets endian mode and +# enable the cache on kseg0. + +#if defined(CYGPKG_HAL_MIPS_MSBFIRST) +# define INITIAL_CONFIG0 0x00008000 +#elif defined(CYGPKG_HAL_MIPS_LSBFIRST) +# define INITIAL_CONFIG0 0x00000000 +#else +# error MIPS endianness not set by configuration +#endif + +#------------------------------------------------------------------------------ +# Set up initial value for FPU FCR31 register. We set the FS bit to flush +# denormalized results to zero and enable div-by-zero exceptions. + +#ifndef CYG_HAL_MIPS_FCSR_INIT +#define CYG_HAL_MIPS_FCSR_INIT 0x01000400 +#endif + +#------------------------------------------------------------------------------ +# Cache macros. + +#ifndef CYGPKG_HAL_MIPS_CACHE_DEFINED + + .macro hal_cache_init + + mfc0 v0,config0 # disable caches, but allow caching + nop # on kseg0 so cache macros can just + nop # fiddle ICE/IDE later on. + la v1,0xfffffff8 + and v0,v0,v1 + ori v0,v0,3 # kseg0 is writeback cache enabled + lui v1,3 + or v0,v0,v1 # set ICE&IDE (disables caches) + mtc0 v0,config0 + nop + nop + nop + + .set mips3 # Set ISA to MIPS 3 to allow cache insns + + # Now ensure the caches are invalidated. The caches are NOT cleared or + # invalidated on non-power-up resets and may come up in a random state + # on power-up. Hence they may contain stale or randomly bogus data. + # Here we use the index-store-tag cache operation to clear all the + # cache tags and states to zero. This will render them all invalid on + # the TX49. + + # D-cache: + la t0,0x80000000 + ori t1,t0,0x8000 +1: + mtc0 zero,$28 + mtc0 zero,$29 + cache 0x09,0(t0) + cache 0x09,1(t0) + cache 0x09,2(t0) + cache 0x09,3(t0) + addi t0,t0,0x20 + sub v0,t1,t0 + bgez v0,1b + nop # delay slot + + # I-cache: + la a0,0x80000000 + ori a1,a0,0x8000 +1: + mtc0 zero,$28 + mtc0 zero,$29 + cache 0x08,0(a0) + cache 0x08,1(a0) + cache 0x08,2(a0) + cache 0x08,3(a0) + addi a0,a0,0x20 + sub v0,a1,a0 + bgez v0,1b + nop # delay slot + + .set mips0 # reset ISA to default + + # Now enable caches + mfc0 v0,config0 + nop + nop + la v1,0xfffcffff # clear ICE&IDE (enables caches) + and v0,v0,v1 + mtc0 v0,config0 + nop + nop + nop + + .endm + +#define CYGPKG_HAL_MIPS_CACHE_DEFINED + +#endif + +#------------------------------------------------------------------------------ +#endif // ifndef CYGONCE_HAL_VARIANT_INC +# end of variant.inc
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/tx49/current/src/mips_tx49.ld @@ -0,0 +1,359 @@ +//=========================================================================== +// +// MLT linker script for MIPS TX49 +// +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//=========================================================================== + +#include <pkgconf/system.h> + +OUTPUT_FORMAT("elf32-bigmips", "elf32-bigmips", + "elf32-littlemips") +/* The preprocessor defines mips, but we know we're mips :-) */ +#undef mips +OUTPUT_ARCH(mips:4900) + +STARTUP(vectors.o) +ENTRY(reset_vector) +#if defined(EXTRAS) && defined(CYGPKG_IO) +INPUT(extras.o) +#endif +GROUP(libtarget.a libgcc.a) + +/* FIXME: The MLT should pass in the required alignment since it must be + * the same as the VMA's alignment. As a result of this bug, all the REF4955 + * ROM mlt files have alignment 8, when some should have alignment 4 + * (902557-CR) + */ +#define ALIGN_LMA 8 +#define FOLLOWING(_section_) AT ((LOADADDR (_section_) + SIZEOF (_section_) + ALIGN_LMA - 1) & ~ (ALIGN_LMA - 1)) +#define LMA_EQ_VMA +#define FORCE_OUTPUT . = . + +#define SECTIONS_BEGIN + +#if defined(CYG_HAL_STARTUP_RAM) + +/* this version for RAM startup */ +#define SECTION_rom_vectors(_region_, _vma_, _lma_) \ + .rom_vectors _vma_ : _lma_ \ + { KEEP (*(.utlb_vector)) \ + . = ALIGN(0x80); KEEP(*(.other_vector)) \ + /* debug and reset vector not used in RAM version */ \ + KEEP(*(.debug_vector)) \ + KEEP (*(.reset_vector)) } \ + > _region_ + +#elif defined(CYG_HAL_STARTUP_ROM) + +/* this version for ROM startup */ +#define SECTION_rom_vectors(_region_, _vma_, _lma_) \ + .rom_vectors _vma_ : _lma_ \ + { KEEP (*(.reset_vector)) \ + . = ALIGN(0x100); KEEP (*(.utlb_vector)) \ + . = ALIGN(0x80); KEEP(*(.other_vector)) \ + . = ALIGN(0x100); KEEP(*(.debug_vector)) } \ + > _region_ + +#endif /* ROM startup version of ROM vectors */ + +#define SECTION_ROMISC(_region_, _vma_, _lma_) \ + .interp _vma_ : _lma_ { *(.interp) } > _region_ \ + .hash : FOLLOWING(.interp) { *(.hash) } > _region_ \ + .dynsym : FOLLOWING(.hash) { *(.dynsym) } > _region_ \ + .dynstr : FOLLOWING(.dynsym) { *(.dynstr) } > _region_ \ + .gnu.version : FOLLOWING(.dynstr) { *(.gnu.version) } > _region_ \ + .gnu.version_d : FOLLOWING(.gnu.version) { *(.gnu.version_d) } > _region_ \ + .gnu.version_r : FOLLOWING(.gnu.version_d) { *(.gnu.version_r) } > _region_ \ + .plt : FOLLOWING(.gnu.version_r) { *(.plt) } > _region_ + +#define SECTION_RELOCS(_region_, _vma_, _lma_) \ + .rel.text : \ + { \ + *(.rel.text) \ + *(.rel.text.*) \ + *(.rel.gnu.linkonce.t*) \ + } > _region_ \ + .rela.text : \ + { \ + *(.rela.text) \ + *(.rela.text.*) \ + *(.rela.gnu.linkonce.t*) \ + } > _region_ \ + .rel.data : \ + { \ + *(.rel.data) \ + *(.rel.data.*) \ + *(.rel.gnu.linkonce.d*) \ + } > _region_ \ + .rela.data : \ + { \ + *(.rela.data) \ + *(.rela.data.*) \ + *(.rela.gnu.linkonce.d*) \ + } > _region_ \ + .rel.rodata : \ + { \ + *(.rel.rodata) \ + *(.rel.rodata.*) \ + *(.rel.gnu.linkonce.r*) \ + } > _region_ \ + .rela.rodata : \ + { \ + *(.rela.rodata) \ + *(.rela.rodata.*) \ + *(.rela.gnu.linkonce.r*) \ + } > _region_ \ + .rel.got : { *(.rel.got) } > _region_ \ + .rela.got : { *(.rela.got) } > _region_ \ + .rel.ctors : { *(.rel.ctors) } > _region_ \ + .rela.ctors : { *(.rela.ctors) } > _region_ \ + .rel.dtors : { *(.rel.dtors) } > _region_ \ + .rela.dtors : { *(.rela.dtors) } > _region_ \ + .rel.init : { *(.rel.init) } > _region_ \ + .rela.init : { *(.rela.init) } > _region_ \ + .rel.fini : { *(.rel.fini) } > _region_ \ + .rela.fini : { *(.rela.fini) } > _region_ \ + .rel.bss : { *(.rel.bss) } > _region_ \ + .rela.bss : { *(.rela.bss) } > _region_ \ + .rel.plt : { *(.rel.plt) } > _region_ \ + .rela.plt : { *(.rela.plt) } > _region_ \ + .rel.dyn : { *(.rel.dyn) } > _region_ + +#define SECTION_init(_region_, _vma_, _lma_) \ + .init _vma_ : _lma_ \ + { \ + FORCE_OUTPUT; KEEP (*(.init)) \ + } > _region_ =0 + +#define SECTION_text(_region_, _vma_, _lma_) \ + .text _vma_ : _lma_ \ + { \ + _stext = .; _ftext = . ; \ + *(.text) \ + *(.text.*) \ + *(.stub) \ + *(.gnu.warning) \ + *(.gnu.linkonce.t*) \ + *(.mips16.fn.*) *(.mips16.call.*) \ + } > _region_ =0 \ + _etext = .; PROVIDE (etext = .); + +#define SECTION_fini(_region_, _vma_, _lma_) \ + .fini _vma_ : _lma_ \ + { \ + FORCE_OUTPUT; KEEP (*(.fini)) \ + } > _region_ =0 + +#define SECTION_rodata(_region_, _vma_, _lma_) \ + .rodata _vma_ : _lma_ \ + { \ + FORCE_OUTPUT; *(.rodata) *(.rodata.*) *(.gnu.linkonce.r*) \ + } > _region_ + +#define SECTION_rodata1(_region_, _vma_, _lma_) \ + .rodata1 _vma_ : _lma_ \ + { \ + FORCE_OUTPUT; *(.rodata1) *(.rodata1.*) \ + } > _region_ + +#define SECTION_vsr_table(_region_, _vma_, _lma_) \ + .vsr_table _vma_ : _lma_ \ + { \ + FORCE_OUTPUT; *(.vsr_table) \ + } > _region_ + +#define SECTION_data(_region_, _vma_, _lma_) \ + .data _vma_ : _lma_ \ + { \ + __ram_data_start = ABSOLUTE (.); _fdata = . ; \ + *(.data) *(.data.*) *(.gnu.linkonce.d*) \ + . = ALIGN (8); \ + SORT(CONSTRUCTORS) \ + } > _region_ \ + __rom_data_start = LOADADDR(.data); + +#define SECTION_data1(_region_, _vma_, _lma_) \ + .data1 _vma_ : _lma_ \ + { \ + FORCE_OUTPUT; *(.data1) *(.data1.*) \ + } > _region_ + +#define SECTION_eh_frame(_region_, _vma_, _lma_) \ + .eh_frame _vma_ : _lma_ \ + { \ + FORCE_OUTPUT; *(.eh_frame) \ + } > _region_ + +#define SECTION_gcc_except_table(_region_, _vma_, _lma_) \ + .gcc_except_table _vma_ : _lma_ \ + { \ + FORCE_OUTPUT; *(.gcc_except_table) \ + } > _region_ + + +/* FIXME: We shouldn't need to define __CTOR_LIST__/__CTOR_END__ + and __DTOR_LIST__/__DTOR_END__ except by the PROVIDE lines. + However this doesn't work for old (99r1-era) toolchains, so + leave it for now. */ + +/* The KEEP(*_ctors.o(.ctors)) rule is included to prevent + constructors from libgcc.a from turning up in the image. + They are NULL anyway. */ + +#define SECTION_ctors(_region_, _vma_, _lma_) \ + .ctors _vma_ : _lma_ \ + { \ + FORCE_OUTPUT; \ + KEEP (*crtbegin.o(.ctors)) \ + KEEP (*_ctors.o(.ctors)) \ + __CTOR_LIST__ = .; \ + PROVIDE (__CTOR_LIST__ = .); \ + KEEP (*(.ctors)); \ + KEEP (*(SORT(.ctors.*))) \ + __CTOR_END__ = .; \ + PROVIDE (__CTOR_END__ = .); \ + } > _region_ + +#define SECTION_dtors(_region_, _vma_, _lma_) \ + .dtors _vma_ : _lma_ \ + { \ + FORCE_OUTPUT; \ + KEEP (*crtbegin.o(.dtors)) \ + __DTOR_LIST__ = .; \ + PROVIDE (__DTOR_LIST__ = .); \ + KEEP (*(SORT(.dtors.*))) \ + __DTOR_END__ = .; \ + KEEP (*(.dtors)); \ + PROVIDE (__DTOR_END__ = .); \ + } > _region_ + +#define SECTION_devtab(_region_, _vma_, _lma_) \ + .devtab _vma_ : _lma_ \ + { \ + FORCE_OUTPUT; \ + KEEP(*( SORT (.ecos.table.*))) ; \ + } > _region_ + +#define SECTION_got(_region_, _vma_, _lma_) \ + _gp = ALIGN(16) + 0x7ff0; \ + .got _vma_ : _lma_ \ + { \ + FORCE_OUTPUT; *(.got.plt) *(.got) \ + } > _region_ + +#define SECTION_dynamic(_region_, _vma_, _lma_) \ + .dynamic _vma_ : _lma_ \ + { \ + FORCE_OUTPUT; *(.dynamic) \ + } > _region_ + + /* We want the small data sections together, so single-instruction offsets + can access them all, and initialized data all before uninitialized, so + we can shorten the on-disk segment size. */ + +#define SECTION_sdata(_region_, _vma_, _lma_) \ + .sdata _vma_ : _lma_ \ + { \ + FORCE_OUTPUT; *(.sdata) *(.sdata.*) *(.gnulinkonce.s*) \ + } > _region_ + +#define SECTION_lit8(_region_, _vma_, _lma_) \ + .lit8 _vma_ : _lma_ \ + { \ + FORCE_OUTPUT; *(.lit8) \ + } > _region_ + +#define SECTION_lit4(_region_, _vma_, _lma_) \ + .lit4 : FOLLOWING(.lit8) \ + { \ + FORCE_OUTPUT; *(.lit4) \ + } > _region_ \ + __ram_data_end = .; _edata = . ; \ + PROVIDE (edata = .); + +#define SECTION_sbss(_region_, _vma_, _lma_) \ + __bss_start = .; _fbss = .; \ + .sbss _vma_ : _lma_ \ + { \ + FORCE_OUTPUT; *(.dynsbss) *(.sbss) *(.sbss.*) *(.scommon) \ + } > _region_ + +#define SECTION_bss(_region_, _vma_, _lma_) \ + .bss _vma_ : _lma_ \ + { \ + *(.dynbss) *(.bss) *(.bss.*) *(COMMON) \ + } > _region_ \ + __bss_end = .; + +/* The /DISCARD/ section ensures that the output will not contain a + * .mdebug section as it confuses GDB. This is a workaround for CR 100804. + */ + +#define SECTIONS_END . = ALIGN(4); _end = .; PROVIDE (end = .); \ + /* Stabs debugging sections. */ \ + .stab 0 : { *(.stab) } \ + .stabstr 0 : { *(.stabstr) } \ + .stab.excl 0 : { *(.stab.excl) } \ + .stab.exclstr 0 : { *(.stab.exclstr) } \ + .stab.index 0 : { *(.stab.index) } \ + .stab.indexstr 0 : { *(.stab.indexstr) } \ + .comment 0 : { *(.comment) } \ + /* DWARF debug sections. \ + Symbols in the DWARF debugging sections are relative to \ + the beginning of the section so we begin them at 0. */ \ + /* DWARF 1 */ \ + .debug 0 : { *(.debug) } \ + .line 0 : { *(.line) } \ + /* GNU DWARF 1 extensions */ \ + .debug_srcinfo 0 : { *(.debug_srcinfo) } \ + .debug_sfnames 0 : { *(.debug_sfnames) } \ + /* DWARF 1.1 and DWARF 2 */ \ + .debug_aranges 0 : { *(.debug_aranges) } \ + .debug_pubnames 0 : { *(.debug_pubnames) } \ + /* DWARF 2 */ \ + .debug_info 0 : { *(.debug_info) } \ + .debug_abbrev 0 : { *(.debug_abbrev) } \ + .debug_line 0 : { *(.debug_line) } \ + .debug_frame 0 : { *(.debug_frame) } \ + .debug_str 0 : { *(.debug_str) } \ + .debug_loc 0 : { *(.debug_loc) } \ + .debug_macinfo 0 : { *(.debug_macinfo) } \ + /* SGI/MIPS DWARF 2 extensions */ \ + .debug_weaknames 0 : { *(.debug_weaknames) } \ + .debug_funcnames 0 : { *(.debug_funcnames) } \ + .debug_typenames 0 : { *(.debug_typenames) } \ + .debug_varnames 0 : { *(.debug_varnames) } \ + /* These must appear regardless of . */ \ + .gptab.sdata : { *(.gptab.data) *(.gptab.sdata) } \ + .gptab.sbss : { *(.gptab.bss) *(.gptab.sbss) } \ + /DISCARD/ 0 : { *(.mdebug) } + +#include CYGHWR_MEMORY_LAYOUT_LDI + +// 0-0x200 reserved for vectors +hal_vsr_table = 0x80000200; +hal_virtual_vector_table = 0x80000300;
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/tx49/current/src/var_misc.c @@ -0,0 +1,66 @@ +//========================================================================== +// +// var_misc.c +// +// HAL implementation miscellaneous functions +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributors: nickg, jlarmour +// Date: 1999-01-21 +// Purpose: HAL miscellaneous functions +// Description: This file contains miscellaneous functions provided by the +// HAL. +// +//####DESCRIPTIONEND#### +// +//========================================================================*/ + +#include <pkgconf/hal.h> + +#include <cyg/infra/cyg_type.h> // Base types +#include <cyg/infra/cyg_trac.h> // tracing macros +#include <cyg/infra/cyg_ass.h> // assertion macros + +#include <cyg/hal/hal_intr.h> + +/*------------------------------------------------------------------------*/ +// Array which stores the configured priority levels for the configured +// interrupts. + +volatile CYG_BYTE hal_interrupt_level[CYGNUM_HAL_ISR_COUNT]; + +/*------------------------------------------------------------------------*/ + +void hal_variant_init(void) +{ +} + +/*------------------------------------------------------------------------*/ +/* End of var_misc.c */
new file mode 100644 --- /dev/null +++ b/packages/hal/mips/tx49/current/src/variant.S @@ -0,0 +1,48 @@ +##============================================================================= +## +## variant.S +## +## MIPS REF4955/TX4955 variant code +## +##============================================================================= +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +##============================================================================= +#######DESCRIPTIONBEGIN#### +## +## Author(s): nickg +## Contributors:nickg +## Date: 2000-05-15 +## Purpose: MIPS REF4955/TX4955 variant code +## Description: Variant specific code for REF4955 board. +## +######DESCRIPTIONEND#### +## +##============================================================================= + +# Nothing at the moment. + +##----------------------------------------------------------------------------- +## end of variant.S +
--- a/packages/hal/powerpc/arch/current/ChangeLog +++ b/packages/hal/powerpc/arch/current/ChangeLog @@ -1,3 +1,9 @@ +2000-10-31 Jonathan Larmour <jlarmour@redhat.com> + + * src/powerpc.ld: Use .sdata.* rather than .sdata* so that .sdata2 + doesn't get matched so that the linker script symbols are still valid. + Ditto for .sbss*. + 2000-10-24 Jonathan Larmour <jlarmour@redhat.com> * src/powerpc.ld: Match multiple sections where relevant (.bss*,
--- a/packages/hal/powerpc/arch/current/src/powerpc.ld +++ b/packages/hal/powerpc/arch/current/src/powerpc.ld @@ -111,7 +111,7 @@ GROUP(libtarget.a libgcc.a) /* We want the small data sections together, so single-instruction */ \ /* offsets can access them all, and initialized data all before */ \ /* uninitialized, so we can shorten the on-disk segment size. */ \ - __SDATA_START__ = ABSOLUTE(.); *(.sdata*) \ + __SDATA_START__ = ABSOLUTE(.); *(.sdata.*) \ __SDATA2_START__ = ABSOLUTE(.); *(.sdata2*) } \ > _region_ \ __rom_data_start = LOADADDR(.data); \ @@ -121,7 +121,7 @@ GROUP(libtarget.a libgcc.a) #define SECTION_sbss(_region_, _vma_, _lma_) \ .sbss _vma_ : _lma_ \ { __sbss_start = ABSOLUTE (.); \ - __SBSS_START__ = ABSOLUTE(.); *(.sbss*) __SBSS_END__ = ABSOLUTE(.); \ + __SBSS_START__ = ABSOLUTE(.); *(.sbss.*) __SBSS_END__ = ABSOLUTE(.); \ __SBSS2_START__ = ABSOLUTE(.); *(.sbss2*) __SBSS2_END__ = ABSOLUTE(.);\ *(.scommon*) \ __sbss_end = ABSOLUTE (.); } \
index 9463a5c92321e18b78aa1c8fa38f51581ae69523..0e60bac1b9919d448f90b7164af93297bb4c5c59 GIT binary patch literal 83808 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 E0{cLEG5`Po
index a1dae2045a17c44ca38c7e3377c053edf9b02eeb..48a7a4361f8d144fe6dc5392af6d4502f0fe4a9a GIT binary patch literal 186135 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
--- a/packages/hal/powerpc/mbx/current/images/redboot_RAM.srec +++ b/packages/hal/powerpc/mbx/current/images/redboot_RAM.srec @@ -396,22 +396,22 @@ S21902202A00004C00012C7C708BA64C00012C7C S21902203F007C70C3A67C78C2A6646320007C78C3A63C600000F4 S219022054606330027C0004AC7C6001247C0004AC3C6000016025 S21902206963FFFC3C80FFFF6084FFFC3CA0000260A51F308403AB -S21902207E0004940400047C0328404082FFF43C4000036042B732 -S219022093D87C631A787C7C43A67C8422787C9D43A64800467D60 -S2190220A83C200003602148F07C3043A63C600002606300003CD2 +S21902207E0004940400047C0328404082FFF43C4000036042C722 +S219022093507C631A787C7C43A67C8422787C9D43A6480049352D +S2190220A83C200003602158607C3043A63C600002606300003C52 S2190220BD800000608400003CA0000260A51F347C0328404182C3 S2190220D200203863FFFC3884FFFC38A5FFFC840300049404008A S2190220E7047C0328404180FFF43C600002606321D43C8000002C S2190220FC608430003884FFFC38A000209464000438A5FFFF2C02 S2190221110500004082FFF43C600002606322DC3C8000006084F9 -S219022126300090640014906400243C600003606338F03C800007 -S21902213B0460841DF0380000007C032040418200149003000012 -S219022150386300047C0320404180FFF43C600003606337E83C84 -S219022165800003608438E47C03204041820014900300003863F7 +S219022126300090640014906400243C600003606348603C800087 +S21902213B046084317C380000007C032040418200149003000072 +S219022150386300047C0320404180FFF43C600003606347603CFC +S2190221658000036084485C7C032040418200149003000038636F S21902217A00047C0320404180FFF43821FFF4380000009001009D -S21902218F00900100089421FFC8480041114800456548003C55BA +S21902218F00900100089421FFC8480043C94800481D48003F0D8A S2190221A43C600000606330327C0004AC7C6001247C0004AC48BD -S2190221B9003CA948003B7948003CA548005E75480079BD48001F +S2190221B9003F6148003E2D48003F5D4800612D48007C69480088 S2190221CE0405480000003821FF64906100989081008090A1009D S2190221E3883C600000606330327C0004AC7C6001247C0004AC3E S2190221F87C7142A69061000C7C9242A6908100107CB342A6903B @@ -424,7 +424,7 @@ S21902227600689361006C9381007093A1007493 S21902228B7C91C1003891E1003C7C6102A67C8902A67CBA02A673 S2190222A07CDB02A6906100849081008C90A1009490C100907CEF S2190222B5230B783821FFC8380000009001000090010008942130 -S2190222CAFFC83CA0000260A5246C7CA803A648003ABC3821FF5B +S2190222CAFFC83CA0000260A5246C7CA803A648003D703821FFA4 S2190222DF64906100989081008090A100883C60000060633032EB S2190222F47C0004AC7C6001247C0004AC7C7142A69061000C7C27 S2190223099242A6908100107CB342A690A100149001000090415F @@ -436,13 +436,13 @@ S219022372005C93010060932100649341006893 S2190223877093A1007493C1007893E1007C91C1003891E1003C2E S21902239C7C6102A67C8902A67CBA02A67CDB02A6906100849011 S2190223B181008C90A1009490C100907C2E0B783C6000036063CE -S2190223C648F03C800003608438F07CA408514180000C7CA1187D +S2190223C658603C800003608448607CA408514180000C7CA1187D S2190223DB51418100087C611B7895C1FFFC3821FFC838000000B2 S2190223F090010000900100089421FFC881EE009855EFB7FF41E9 S2190224058200183DE0FF0061EF001C89EF000055EFF0BE39EF07 -S21902241A000191EE009855EF103A3C6000036063387091C300A2 -S21902242F00806E00983CC0000360C632407CC6782E3C800003CD -S2190224446084332C7C84782E7CC903A64E800421802100703869 +S21902241A000191EE009855EF103A3C600003606347E891C3001B +S21902242F00806E00983CC0000360C63FB87CC6782E3C80000348 +S219022444608440A47C84782E7CC903A64E8004218021007038E4 S21902245921FFC83800000090010000900100089421FFC8382148 S21902246E0070806100848081008880A1008C7C6103A67C8803BA S219022483A67CA903A681C1003881E1003C80C1001880E1001CDB @@ -455,10 +455,10 @@ S2190225016004207C0004AC7C0001247C0004AC S2190225160008806100808081009480A100907C6FF1207C9A03E5 S21902252BA67CBB03A68061000C8081001080A100148021000436 S2190225407C0004AC4C00012C4C0000647C230B783C80000360E9 -S2190225558448F03884FFE87C8123789061000C7C6000A6906103 +S2190225558458603884FFE87C8123789061000C7C6000A6906183 S21902256A00107C6802A69061001438000000900100009001005A S21902257F087C0000A660638000506004207C0004AC7C00012432 -S2190225947C0004AC9421FFC848006C8138210038806100147C4C +S2190225947C0004AC9421FFC848006F2D38210038806100147C9D S2190225A96803A680A1000C806100107C0000A6506004207C0075 S2190225BE04AC7C0001247C0004AC7CA12B784E8000209421FE23 S2190225D3D87C0802A69321010C9341011093610114938101180C @@ -467,3341 +467,3530 @@ S2190225FDBD3200813D00343860FFFF7D2803A6 S21902261200013F4000034E800021813D00347C7E1B7838600023 S219022627007D2803A63F6000033F2000004E800021801D004874 S21902263C3C60000360630D407C0803A63D2000033D6000039313 -S2190226518937E893EB38084E8000213C0000403C6000033C8041 -S21902266600033CA00003901B37EC38630C9438840CC438A50CF8 -S21902267BD0939A3804480080353C6000033C8000033CA00003D0 -S2190226903CC0000338C60D1038630CDC38840CF438A50D04489F -S2190226A50080113C60000338630D1448008005809A380480BBCF -S2190226BA37EC3C60000338630D3848007FF13D2000033D6000AD -S2190226CF03380937C83BAB37B87C1D00003D200003938937FC8F -S2190226E4418200207C1C0378813D00003BBD00087D2803A64E8A -S2190226F98000217C1DE0004082FFEC3F800003837C38102C1BAE -S21902270E00004182004C3FA00003809D37F03C60000338630D33 -S2190227234448007F9180BD37F03D2000033BA000001CA503E8B3 -S21902273893A938103861000838800100480085E12C03FFFE408D -S21902274D82000C93BC381048000008937C38107FFDFB787F3CFA -S219022762CB787FDBF3782C1D0000418200143C60000338630DEC -S2190227778048007F3D3BA00000386100083880010038A000FABB -S21902278C480085992C0300004080001C3D200003800938142C5F -S2190227A10000004182FFC44800A3414BFFFFBC40820020393C0E -S2190227B63200800900347F63DB787C0803A64E80002148006619 -S2190227CB014BFFFF9C3861000848007F9D2C0300004081004CCB -S2190227E03FA000033F40000438610008389D380038BA18D048A8 -S2190227F5008A957C631B794182001C8003000C807D3800389AC1 -S21902280A18D07C0803A64E800021480000143C60000338630D0B -S21902281F8C3881000848007E913BA000014BFFFF3C9421FFF0F4 -S2190228347C0802A693E1000C900100142C0300027C9F23784010 -S219022849820144807F00043C80000338840DAC48007FA92C03D6 -S21902285E0000408200447D6000A67D605B783920000051200457 -S219022873207C0001243C0002004C00012C7C108BA64C00012C9B -S2190228883D4002007C0004AC7D588BA67C0000A6516004207C10 -S21902289D000124480000F8807F00043C80000338840DB0480037 -S2190228B27F512C030000408200C07D6000A67D605B78392000FD -S2190228C700512004207C00012439200000380000807C0903A680 -S2190228DC612010003D400E007C0004AC7D398BA67D588BA67C2F -S2190228F1198BA67D588BA6392900104200FFE03C0004004C005C -S219022906012C7C108BA64C00012C3D4004007C0004AC7D588B45 -S21902291BA639200000380000807C0903A6612010003D400E009F -S2190229307C0004AC7D398BA67D588BA67C198BA67D588BA6396D -S2190229452900104200FFE03C000C004C00012C7C108BA64C0052 -S21902295A012C3D400C007C0004AC7D588BA67C0000A6516004A2 -S21902296F207C000124480000243C600003809F000438630DB401 -S21902298448007D31480000103C60000338630DCC48007D218070 -S2190229990100147C0803A683E1000C382100104E800020942164 -S2190229AEFFE87C0802A693A1000C93C1001093E100149001003D -S2190229C31C3D6000033D200003392936F83BEB36887C1F480085 -S2190229D84182002C7D3D4B783FC00003809F000480BF00008093 -S2190229EDDF0008387E0DD848007CC13BFF00107C1FE800408238 -S219022A02FFE48001001C7C0803A683A1000C83C1001083E10023 -S219022A1714382100184E8000209421FFA87C0802A6938100484C -S219022A2C93A1004C93C1005093E100549001005C7C7D1B787CAD -S219022A419C23783D20000339290DE8386100083880006238A0F8 -S219022A56000138C0000038E100383901003C48008B4D3D200027 -S219022A6B0339290DF8386100203880006C38A0000138C0000037 -S219022A8038E100403901004448008B293D4000037FA3EB787FE3 -S219022A9584E378394A0D1038A0000138C1000838E00002390079 -S219022AAA00003920000048008B1D2C0300004182004080010014 -S219022ABF3C2C000000408200143C60000338630E0048007BE5CD -S219022AD448000024800100442C0000004082000C3800002090D3 -S219022AE90100408061003880810040480086998001005C7C086E -S219022AFE03A68381004883A1004C83C1005083E10054382100B2 -S219022B13584E8000209421FFB87C0802A69381003893A1003C0C -S219022B2893C1004093E100449001004C3D2000038009380C7CBF -S219022B3D7D1B787C9C23783D2000039001002839290E1838617F -S219022B5200083880007738A0000138C0000038E10020390100EC -S219022B672448008A493D4000037FA3EB787F84E378394A0E28F7 -S219022B7C38A0000138C1000838E0000139010028392000004847 -S219022B91008A3D2C030000418200F8800100242C0000004182E3 -S219022BA600343C6000038081002880A1002038630E3C48007A2F -S219022BBBFD80A10020386100301CA503E8388000084800815969 -S219022BD02C03FFFE418200BC814100287D6000A67D605B7839E8 -S219022BE5200000512004207C00012439200000380000807C09E8 -S219022BFA03A6612010003D600E007C0004AC7D398BA67D788B47 -S219022C0FA67C198BA67D788BA6392900104200FFE03C00040044 -S219022C244C00012C7C108BA64C00012C3D6004007C0004AC7D9B -S219022C39788BA639200000380000807C0903A6612010003D6069 -S219022C4E0E007C0004AC7D398BA67D788BA67C198BA67D788BDD -S219022C63A6392900104200FFE03C000C004C00012C7C108BA69E -S219022C784C00012C3D600C007C0004AC7D788BA67D4803A64E10 -S219022C8D8000218001004C7C0803A68381003883A1003C83C1B0 -S219022CA2004083E10044382100484E8000209421FFE07C080285 -S219022CB7A693A1001493C1001893E1001C90010024380000002A -S219022CCC3D2000033FC000033BA9381090093810901E37FC4854 -S219022CE1000A992C030000418200EC3D200003808938243D60F4 -S219022CF60003800B38203D2000033BE978E47C8422147C8400C6 -S219022D0B507FE3FB7838A004004800719D7FE3FB78388003FCC9 -S219022D20480004F9801F03FC7C030000408200303D2000038162 -S219022D356978E43C000BAD6000FACE7C0B000040820018813F80 -S219022D4A03F83C00DEAD6000DEAD7C090000418200283C6000B4 -S219022D5F0338631CF0480079513C600003386378E4388000004E -S219022D7438A0040048007211480000583C60000338631AD83898 -S219022D8981000838A0000148000061800100082C0000004182AB -S219022D9E00303C60000338631AF07FA4EB7838A00004480000FB -S219022DB3413C6000033C80000338631B18388437F038A00002DA -S219022DC84800002938000001901E37FC800100247C0803A6830F -S219022DDDA1001483C1001883E1001C382100204E80002094212D -S219022DF2FFD87C0802A69321000C934100109361001493810002 -S219022E071893A1001C93C1002093E100249001002C3D2000031E -S219022E1C3D6000033B4937B87C7B1B787C9D23787CB92B783B36 -S219022E31CB36F8480009452C0300003B800004418200CC7C1EDF -S219022E46D000418200B43D200003392978E4807E00007FFC4A48 -S219022E5B147F64DB78480079392C0300004082007C807E00109C -S219022E707C03C8004082005C3803FFFF280000054181008C3DF0 -S219022E85600003396B1CD85400103A7D4B002E3D2000033929E0 -S219022E9A1CD87D4A4A147D4903A64E800420801F0000901D0056 -S219022EAF004800005CA01F0004813F0000B01D0004913D000041 -S219022EC44800004893FD0000480000403C60000338631C887FED -S219022ED964DB78480077D94800002C807E00103BDE0018480093 -S219022EEE02DD7C1ED0007F9C1A144082FF543C60000338631CCB -S219022F03B47F64DB78480077AD8001002C7C0803A68321000CD2 -S219022F1883410010836100148381001883A1001C83C10020838E -S219022F2DE10024382100284E8000209421FBB87C0802A69301EC -S219022F4204289321042C93410430936104349381043893A104A7 -S219022F573C93C1044093E104449001044C3D2000033D600003ED -S219022F6C3B0936F83B2B37B87C7C1B787C9B2378480007FD2CCD -S219022F810300003B4000007F1FC3783BC00004418202083C8055 -S219022F960003388478E43861000838A0040048006F0D3BA104E3 -S219022FAB083D6000033D200003934B381039291BE87FA3EB78F2 -S219022FC03880006C38A0000038C0000238E10420390000004841 -S219022FD50085DD3D4000037F83E3787F64DB787FA6EB78394A60 -S219022FEA131838A0000138E0000139000000392000004800854F -S219022FFFD12C030000418201947C1FC800418200A480A104204F -S2190230147FE3FB787FC4F37848000265380300012800000541C4 -S21902302981FFE03D600003396B1C705400103A7D4B002E3D206A -S21902303E000339291C707D4A4A147D4903A64E8004203C600063 -S21902305303386378E43881000838A0040048006E514800013446 -S2190230683B400001807F00103BFF0018480001557FDE1A144BFB -S21902307DFFFF8C7FE9C2783129FFFF7D294910381FFFE87C00FA -S21902309248787FE948387D3F03784BFFFF6C3C60000338631C38 -S2190230A7004800760D4BFFFF5C2C1A0000418200E43C000BADBC -S2190230BC3D6000036000FACE3D20DEAD3B8B78E46129DEAD9081 -S2190230D10B78E4913C03F87F83E378388003FC480001393D20C1 -S2190230E600033FE00003801F382481693820907C03FC7C0002E3 -S2190230FB143C6000037FC0585038631C14480080A92C030000B4 -S21902311041820088809F38243BA104247FC3F3787FA5EB78485D -S21902312500A6897C7F1B794182002C83A104247FE3FB78480078 -S21902313AA9917C661B783C600003386315947FA4EB787FE5FB02 -S21902314F7848007565480000447FC3F3787F84E3787FA6EB78AB -S21902316438A004004800A7B57C7F1B794182002883A104247F8A -S219023179E3FB784800A94D7C661B783C60000338631C407FA478 -S21902318EEB787FE5FB78480075218001044C7C0803A683010487 -S2190231A3288321042C83410430836104348381043883A1043C5C -S2190231B883C1044083E10444382104484E8000203803FFFF28D3 -S2190231CD0000054D8100203D600003396B1BD05400103A7D4B5E -S2190231E2002E3D20000339291BD07D4A4A147D4903A64E800490 -S2190231F720386000044E800020386000084E80002038600000EC -S21902320C4E800020386002004E800020388400035484F0BE7C6F -S2190232218023782C00000038C0000038E000003884FFFF4081BF -S2190232360044816300007C8A23787D68383038E7000168E900F5 -S21902324B102C0A00007D2AFE707D404A787C0050507D6B4378CE -S2190232607C00FE707CC65A78386300047CE700383884FFFF411F -S21902327581FFC47CC333784E8000209421FF707C0802A693013D -S21902328A007093210074934100789361007C9381008093A1000C -S21902329F8493C1008893E1008C900100947C7B1B78807B000801 -S2190232B47C9F23782C0300007CB82B78418200383881006038F6 -S2190232C9A000014BFFFB25801B000C2C000000418200148001B3 -S2190232DE00602C0000004182019848000010800100602C000087 -S2190232F300408201883D200003392978E43C600003809B000498 -S2190233087FBF4A1438631B2C480073A5813B00103809FFFF2898 -S21902331D000005418101483D600003396B1BA05400103A7D4B1F -S219023332002E3D20000339291BA07D4A4A147D4903A64E80046E -S21902334720801D00002C000000418200103D20000338891B383A -S21902335C480000303D20000338891B40480000243C60000380D6 -S2190233719D000038631B484800733D480000EC7FA3EB784800AC -S2190233869B6D7C641B783C60000338631B344800732148000003 -S21902339BD07FBEEB783BE000003F8000033FA000037C9EF8AE27 -S2190233B0387C1B4C48007301281F00044181000C387D1B5448A5 -S2190233C50072F13BFF0001281F00054081FFDC3C6000037FDD6B -S2190233DAF37838631B58480072D5480000843C60000338631BAE -S2190233EF5C480000883C60000338631B60480072B9881D0000C9 -S2190234047FBEEB782C0000007FBFEB78418200583F2000033B87 -S2190234194000003B80000A881E00002C00000A418200187FEB71 -S21902342EFB788C0B00012C00000A4082FFF87D7F5B787FC4F383 -S219023443789B5F000038791B64480072693BDF00019B9F000053 -S219023458881E00007FDFF3782C0000004082FFBC2C18000041BB -S21902346D8200183C60000338631B604800723D3860000248001B -S219023482022C801B00102C0000044182005438610008388000B5 -S2190234975038A00000480078892C0300003860FFFF418002041C -S2190234AC38610008480072C12C0300004182FFC4880100082C76 -S2190234C100002E4082000C38600000480001E02C00005E4082E6 -S2190234D6000C38600003480001D0813B00103809FFFF280000E7 -S2190234EB05418101BC3D600003396B1BB85400103A7D4B002E96 -S2190235003D20000339291BB87D4A4A147D4903A64E8004208311 -S219023515FD0000386100087FA4EB78480085754800003083FD3C -S21902352A0000386100087FA4EB7838A0000038C00000480083C3 -S21902353FE94800001483FD0000386100087FA4EB78480098396B -S2190235542C0300004182013C801D00007FE002787C09FE707D46 -S2190235692302787C6348507C63FE707C6018F8546307FE5400E9 -S21902357E07BC7C63037848000128801D0000A17D000490010053 -S2190235935839210058B1690004380100087D3A4B789001006840 -S2190235A83BC000003F6000033BE100643B810068806100687FFE -S2190235BDE4FB787F85E37838DB1B544800835D2C0300004182A0 -S2190235D200B4881F00037C1DF1AE3BDE0001281E00054081FF22 -S2190235E7D4480000C03C6000037FBEEB7838631B6C480070BD16 -S2190235FC48000044880100083BE100082C000000418200287FDC -S219023611C4F3787FEBFB78880B0000980400008D2B00013884ED -S21902362600012C0900004082FFEC7C9E23783800000A981E00F8 -S21902363B003BDE0001380000003C600003981E000038631B987E -S21902365048007065386100083880005038A00000480076C52C11 -S2190236650300003860FFFF4180004038610008480070FD2C032A -S21902367A00004082FF8448000028A01A000481210058B01D00FA -S21902368F04913D000038600004480000143C60000338631B5CA4 -S2190236A44800701138600001800100947C0803A68301007083EF -S2190236B9210074834100788361007C8381008083A1008483C154 -S2190236CE008883E1008C382100904E8000209421FFF07C080267 -S2190236E3A693C1000893E1000C900100147C7E1B782C1E0001CC -S2190236F87C9F2378418100143C60000338631A98480012B548E7 -S21902370D000054480000692C030000418200483C6000033C8006 -S219023722000380BF0004386336183884368848007CBD7C631B67 -S219023737794182001C8003000C7FC3F3787FE4FB787C0803A6DF -S21902374C4E800021480000103C60000338631AAC4800126180DF -S2190237610100147C0803A683C1000883E1000C382100104E8017 -S21902377600209421FFE07C0802A6934100089361000C93810067 -S21902378B1093A1001493C1001893E1001C900100243D200003B9 -S2190237A0800931E82C0000004082009C3FE00003807F37EC3865 -S2190237B5000001900931E83C63FFFF3C80000148009ED57C6450 -S2190237CA1B79418200183C60000338631A4448006EDD386000B1 -S2190237DF00480000683F6000033F40000338600000389B381C3B -S2190237F438BA382048009F493FA000033F800003387D38243852 -S2190238099C382848009F69809B381C80BA382080DC38283C60FE -S21902381E000380FD382438631A6C48006E8D813D3824801F375E -S219023833EC3D2900017C0900503D600003900B382C3860000119 -S219023848800100247C0803A6834100088361000C83810010833F -S21902385DA1001483C1001883E1001C382100204E8000209421A2 -S219023872FFE07C0802A693A1001493C1001893E1001C9001005A -S219023887243D400003394A19F438A0000238C0000038E0000007 -S21902389C390100083920000148007D292C030000408200143C45 -S2190238B16000033863178C48001105480000E03D6000033D20D7 -S2190238C6000380A93824808B38203FA00003807D382C7C852097 -S2190238DB50480065D583BD382C3BC000003BE000004800000CF1 -S2190238F03BFF00013BBD01003D200003800938245400C23E7C73 -S2190239051F004040800028881D00002C0000FF4182FFDC806110 -S21902391A00087FA4EB7848006E792C0300004082FFC83BC00021 -S21902392F012C1E0000408200183C6000038081000838631A14E6 -S21902394448006D71480000543D20000380093804807D00147CF3 -S2190239590300404180001C80BD00183D200003816937EC7C03F1 -S21902396E2A147C005840418000143C60000338631A2C48006DE1 -S2190239833548000018809D001048006525801D001C3D2000037B -S2190239989009380C800100247C0803A683A1001483C10018834D -S2190239ADE1001C382100204E8000209421FFD87C0802A693410E -S2190239C20010936100149381001893A1001C93C1002093E1006D -S2190239D7249001002C3D400003394A19F438A0000238C0000011 -S2190239EC38E00000390100083920000148007BD52C0300004004 -S219023A018200143C6000033863178C48000FB1480001843D60C4 -S219023A1600033D20000380A93824800B38203FA000037F650003 -S219023A2B50807D382C7F64DB784800647D83DD382C3BA00000D0 -S219023A403BDE02003BE000024800000C3BFF00013BDE01003F4A -S219023A55400003801A38245400C23E7C1F004040800040881E47 -S219023A6A00002C0000FF4182FFDC806100087FC4F37848006D2B -S219023A7F1D2C0300004082FFC83C6000038081000838631A00F9 -S219023A944800771D2C030000418200F83BA000012C1D000040EB -S219023AA98200183C6000038081000838631A1448006BFD4800FE -S219023ABE00D83B81000C807E0010809E00187F85E37848009CC5 -S219023AD3DD7C7F1B794182002883A1000C7FE3FB7848009FE5AF -S219023AE87C661B783C600003386319947FA4EB787FE5FB7848C1 -S219023AFD006BB97FC3F378388000FF38A001004800647D809A09 -S219023B1238247F63DB787F85E37848009C917C7F1B79418200E0 -S219023B272C83A1000C7FE3FB7848009F997C661B783C600003BD -S219023B3C386319947FA4EB787FE5FB7848006B6D480000483DDB -S219023B512000038089382C80BA38247F63DB787F86E378480055 -S219023B669DB97C7F1B794182002883A1000C7FE3FB7848009F87 -S219023B7B517C661B783C600003386319B47FA4EB787FE5FB7804 -S219023B9048006B258001002C7C0803A683410010836100148318 -S219023BA581001883A1001C83C1002083E10024382100284E80F0 -S219023BBA00209421FFA07C0802A69381005093A1005493C1000F -S219023BCF5893E1005C90010064380000007C7D1B787C9C237846 -S219023BE43D20000390010044392917309001003C386100083841 -S219023BF980006638A0000138C0000038E100383901003C4800EA -S219023C0E79A53D200003392919D8386100203880006C38A00014 -S219023C230138C0000038E1004039010044480079813D400003F3 -S219023C387FA3EB787F84E378394A131838A0000238C1000838CC -S219023C4DE000023900000039200000480079752C0300004082C0 -S219023C6200143C6000033863178C48000D5148000104800100E1 -S219023C773C2C00000041820010800100442C000000408200142F -S219023C8C3C600003386319E048000D29480000DC8061003848E6 -S219023CA1009A5D7C7C1B794082002080610038800100407C63E9 -S219023CB602143863FFFF48009A417C7C1B794182004483A10069 -S219023CCB387F83E37848009DF97C651B783C600003386317E8BD -S219023CE07FA4EB78480069D13D2000033D6000033C60000380A1 -S219023CF589381C80AB382038631808480069B548000070808179 -S219023D0A0038800100407C8323787C8402143884FFFF48009F53 -S219023D1F912C030000418200143C600003386319184800698550 -S219023D3448000040806100388081004038A1004848009A697CA9 -S219023D497C1B794182002883A100487F83E37848009D717C6662 -S219023D5E1B783C600003386319947FA4EB787F85E37848006939 -S219023D7345800100647C0803A68381005083A1005483C1005875 -S219023D8883E1005C382100604E8000209421FF187C0802A6932D -S219023D9D4100D0936100D4938100D893A100DC93C100E093E18D -S219023DB200E4900100EC380000007C7D1B787C9C23783D2000C0 -S219023DC703900100C4392916F49001009C900100A4900100AC7D -S219023DDC900100B4900100BC386100083880006238A00001386D -S219023DF1C0000038E100983901009C480077B53D200003392939 -S219023E061708386100203880007238A0000138C0000038E100B4 -S219023E1BA0390100A4480077913D2000033929171C38610038F7 -S219023E303880006538A0000138C0000038E100A8390100AC4899 -S219023E4500776D38E100B03D2000037CFE3B78392917303861E5 -S219023E5A00503880006638A0000138C00000390100B448007760 -S219023E6F453D2000033929174C386100683880006C38A00001CF -S219023E8438C0000038E100B8390100BC480077213D20000339EA -S219023E99291764386100803880007338A0000138C0000038E13B -S219023EAE00C0390100C4480076FD3D4000037FA3EB787F84E394 -S219023EC378394A178038A0000238C1000838E00006390100C856 -S219023ED839200001480076F12C030000408200143C60000338E9 -S219023EED63178C48000ACD480004988001009C2C0000004182A4 -S219023F02001C800100BC2C00000041820010800100C82C0000D6 -S219023F1700408200143C600003386317A048000A99480004642C -S219023F2C800100C4814100B82C00000040820008914100C03DF5 -S219023F4120000380093824816100C07D2A02143929FFFF7D29F7 -S219023F5603963F4000037D2901D67C095840912100B840800070 -S219023F6B143C600003386317BC4800674148000414800100B494 -S219023F802C00000041820070806100B0480097717C7C1B794019 -S219023F95820020806100B0800100C07C6302143863FFFF4800C6 -S219023FAA97557C7C1B794182004483A100B07F83E37848009B68 -S219023FBF0D7C651B783C600003386317E87FA4EB78480066E513 -S219023FD43D2000033D6000033C6000038089381C80AB3820381A -S219023FE9631808480066C94800039C3FE0000380810098801F81 -S219023FFE38047C0400404180001C800100C03D2000038169370C -S219024013EC7C0402147C005840418000283C600003386318249C -S2190240284800668D3D2000033C600003809F380480A937EC3863 -S21902403D63180848006675806100C8480067292803000F408145 -S21902405200183C60000338631850388000104800665548000382 -S21902406728800100B42C0000004082002C808100B87FC3F37860 -S21902407C480003392C030000408200183C600003808100B8380B -S21902409163188048006621480002F43F8000033D20000380BCAD -S2190240A63824800938203FA000037F650050807D382C7F64DB8C -S2190240BB7848005DF5801C382483FD382C5409C23F3BA00000C2 -S2190240D03B800000418200883FC00003881F00002C0000FF41B9 -S2190240E5820060806100C87FE4FB78480066A92C030000408216 -S2190240FA004C800100B42C00000041820014813F0010800100D5 -S21902410FB07C09000040820214813F0018800100B87C090000F1 -S21902412440820214808100C8387E18FC480070812C030000416B -S2190241398202543B8000014800001C801A38243BBD000154002F -S21902414EC23E7C1D00403BFF01004180FF842C1C0000814100F3 -S219024163C0806100B04082004C3D200003800938243D600003FC -S2190241785400C23E7C1C004083EB382C3BA000004800001C3DB1 -S21902418D200003800938243BBD00015400C23E7C1D00403BFFAE -S2190241A2010040800010881F00002C0000FF4082FFDC7C835270 -S2190241B7143884FFFF48009AF12C030000418200143C600003A6 -S2190241CC38631918480064E5480001B838A100CC806100B080C3 -S2190241E18100B87CBE2B78480095C57C7C1B793BA000014182DF -S2190241F6002C83A100CC7F83E378480098C97C661B783C60007A -S21902420B037FA4EB783863194C7F85E3784800649D3BA000008B -S2190242202C1D000041820044806100B08081009880A100C07FA8 -S219024235C6F378480096E57C7C1B794182002883A100CC7F8310 -S21902424AE3784800987D7C661B783C600003386319707FA4EB5A -S21902425F787F85E378480064517FE3FB783880000038A0010009 -S21902427448005D15808100C87FE3FB784800654D800100A48136 -S2190242892100B02C000000913F001040820020800100B42C00F9 -S21902429E00004182000C812100B0480000108121009848000009 -S2190242B308812100A0800100AC913F00142C0000004082001096 -S2190242C83D2000038009380C48000008800100A8901F001C80E9 -S2190242DD0100B83D20000380893824901F00187F63DB787FC507 -S2190242F2F378480094B97C7C1B794182004C83A100CC7F83E340 -S21902430778480097C17C661B783C600003386319947FA4EB78A0 -S21902431C7F85E37848006395480000683C600003386318A848F4 -S219024331006385480000583C600003386318D44800637548005A -S21902434600483D2000038089382C80BA38247F63DB787FC6F343 -S21902435B78480095C17C7C1B794182002883A100CC7F83E3786C -S219024370480097597C661B783C600003386319B47FA4EB787F78 -S21902438585E3784800632D800100EC7C0803A6834100D0836152 -S21902439A00D4838100D883A100DC83C100E083E100E438210092 -S2190243AFE84E8000203D20000380E938243D600003814B381C37 -S2190243C43D2000037C073A14810938207D4A02147D4953787CE0 -S2190243D90940404080007054E0F0BE7C0603785407103A800A01 -S2190243EE00002C00FFFF4182004C7C095000418200147C0950F9 -S219024403507C0016707C002040408000587D4953787C094040C1 -S2190244184080002054CB103A7D295A147C0940404080001080D6 -S21902442D0900002C00FFFF4082FFEC7D2A4B78480000087D4A12 -S2190244423A147C0A40404180FFA47C095000418200207C095019 -S219024457507C0016707C002040418000109123000038600001FD -S21902446C4E800020386000004E8000209421FFE07C0802A6936D -S21902448161000C9381001093A1001493C1001893E1001C9001B9 -S21902449600243D200003800938243D600003814B381C3D200084 -S2190244AB0383C938207C0002147FEA02147C1FF0407FE4FB789C -S2190244C03F600003408000883F8000033FA00003801F00002C87 -S2190244D500FFFF4182005C7C04F80041820010387C16DC7FE559 -S2190244EAFB78480061C97C1FF0407FE4FB7840800034801F009D -S2190244FF002C00FFFF41820028801D38245400F0BE5409103AEA -S2190245147C844A147C04F04040800010800400002C00FFFF40BF -S21902452982FFEC7C9F237848000014801B38245400F0BE5400AA -S21902453E103A7FFF02147C1FF0404180FF887C04F80041820035 -S219024553143C600003386316DC7FE5FB78480061558001002492 -S2190245687C0803A68361000C8381001083A1001483C1001883EF -S21902457DE1001C382100204E8000209421FFE87C0802A69381E2 -S219024592000893A1000C93C1001093E100149001001C3FA0004D -S2190245A7033D20000381693820801D38243C6000037FE05850B4 -S2190245BC3863166C480060F5801D38243BC000005409C23F3F98 -S2190245D1800003418200547FFDFB787FDFF3787F9EE3783F8045 -S2190245E60003881D00002C0000FF4182002080BD001080DD0059 -S2190245FB1480FD0018811D001C387C16B07FA4EB78480060A9F0 -S219024610801E38243BFF00015400C23E7C1F00403BBD010041F0 -S21902462580FFC48001001C7C0803A68381000883A1000C83C1EC -S21902463A001083E10014382100184E8000209421FFB87C08028B -S21902464FA69321002C93410030936100349381003893A1003CE1 -S21902466493C1004093E100449001004C7C7D1B787C9C23783B97 -S219024679E000003D2000033929150893E1002038610008388079 -S21902468E006638A0000038C0000238E100203900000048006FAF -S2190246A3113D4000037FA3EB787F84E378394A131838A00002FF -S2190246B838C1000838E00001390000003920000048006F052C52 -S2190246CD030000418202C03C6000033863153448006AD52C0310 -S2190246E20000408200143C6000033863156448005FC54800027D -S2190246F79C3C6000033863157048005FB5800100202C00000023 -S21902470C4182006C3D200003808938283D600003800B38243DD5 -S2190247212000033884FFFC8069381C7C8401D63BA100247C0012 -S21902473602147C6302147FA5EB784800906D7C7C1B797FBEEBDC -S21902474B784182003C83A100247F83E378480093717C661B7875 -S2190247603C600003386315947FA4EB787F85E37848005F454841 -S2190247750000143C600003386315BC48005F353BC100243F408E -S21902478A0003839A38243C0000027F9C00003F20000383B93868 -S21902479F2C4FFEEB827C000026540007FE7C0000D07C0900F854 -S2190247B47F9C00385529039C7F9C4B787FA3EB78388000003826 -S2190247C9A00100480057BD3D2000033F60000339691604801B7E -S2190247DE381C81491604810B0004939D0018915D0000911D0013 -S2190247F304901D0014901D00103BBD01007FA3EB7838800000F2 -S21902480838A001004800577D3D600003801B381C810B160C3929 -S21902481D2B160C80E9000C81690004814900087C00E214939D5B -S2190248320018911D0000917D0004915D000890FD000C901D0056 -S21902484714901D00103BBD01007FA3EB783880000038A0010075 -S21902485C4800572D3D2000038009161C3969161C812B00088150 -S2190248714B0004A10B000C913D0008901D0000915D0004B11DE1 -S219024886000C880B000E3F800003981D000E817A3824801C38B9 -S21902489B207D2B5A147C090050901D0014917D0018901D001052 -S2190248B03BBD01007FA3EB783880000038A00100480056C980F6 -S2190248C51C3820809A38243D600003814B162C7F640050392BA8 -S2190248DA162CA109000C8009000481690008915D0000901D00B0 -S2190248EF04917D0008B11D000C909D0018937D0010937D001430 -S2190249047F63DB787FC5F37848008EA13BFF00013BFF00017C4A -S2190249197C1B793BFF00013BFF00014182002C83A100247F83C3 -S21902492EE378480091997C661B783C600003386315947FA4EB3A -S219024943787F85E37848005D6D480000448099382C7F63DB7831 -S21902495857E5402E7FC6F37848008FBD7C7C1B7941820028835B -S21902496DA100247F83E378480091557C661B783C60000338632F -S219024982163C7FA4EB787F85E37848005D298001004C7C0803C0 -S219024997A68321002C83410030836100348381003883A1003CE6 -S2190249AC83C1004083E10044382100484E8000209421FFF87C0C -S2190249C10802A69001000C7C641B783C600003386314E04800A4 -S2190249D65CE13C6000033C8000033CA000033863361838843670 -S2190249EB8838A5150048006B3D8001000C7C0803A6382100082B -S219024A004E8000203860001C4E8000209421FFE87C0802A693AF -S219024A15A1000C93C1001093E100149001001C7C7D1B78813DF5 -S219024A2A000483C900044800002C73E00012418200107FA3EB63 -S219024A3F787FE4FB784800004973E000084182000C7FA3EB78CD -S219024A54480001A9B3FE0010A01E00107000001A541F043E2C5A -S219024A691F00004082FFC88001001C7C0803A683A1000C83C14B -S219024A7E001083E10014382100184E8000209421FFE87C080213 -S219024A93A69381000893A1000C93C1001093E100149001001C6C -S219024AA87C7D1B7883DD000483FE0018A01F0000700090002C7E -S219024ABD001000408200683B9E0028813D0000801E001081694C -S219024AD200247C00F850816B00085400F87AA13F00007C9C002E -S219024AE72E7FA3EB7838A000007D6803A67129EFFFB13F000022 -S219024AFC4E800021A01F0000700920004182000C83FE001048AF -S219024B110000083BFF0008A01F0000700090002C001000418280 -S219024B26FFA493FE00188001001C7C0803A68381000883A1002D -S219024B3B0C83C1001083E10014382100184E8000209421FFE88B -S219024B507C0802A693A1000C93C1001093E100149001001C81C3 -S219024B652300048169000C83EB00047C188AA654000FFE2C0054 -S219024B7A000041820028812B0004A00B00022C000000408100EA -S219024B8F187C004BAC7C0004AC3400FFF0392900104181FFF00D -S219024BA42C050000408100387C9E23787CBD2B78807E00002C10 -S219024BB90300004182001880BE00047FE4FB78480052E9801EC9 -S219024BCE00047FFF021437BDFFFF3BDE00084082FFD880010006 -S219024BE31C7C0803A683A1000C83C1001083E100143821001800 -S219024BF84E8000209421FFE87C0802A693A1000C93C1001093B4 -S219024C0DE100149001001C7C7D1B7883DD000483FE001C480014 -S219024C220048813D000093FE000C816900247FA3EB78800B00B5 -S219024C3704A09F00027C0803A64E800021A01F00006000800061 -S219024C4CB01F0000A13F0000712020004182000C83FE00144840 -S219024C610000083BFF0008A01F0000700090002C00100041822F -S219024C76FFB093FE001C8001001C7C0803A683A1000C83C10088 -S219024C8B1083E10014382100184E8000209421FFD87C0802A66E -S219024CA0930100089321000C93410010936100149381001893F1 -S219024CB5A1001C93C1002093E100249001002C83C300047C98FF -S219024CCA237883BE00087CBB2B78A01D00007CD933787009805A -S219024CDF007CFA3B78418200447FBFEB783F800003A01F000067 -S219024CF4700920004182000C83FE0010480000083BFF00087C9D -S219024D091FE8004082000C387C125C480059A1A01F000070091D -S219024D1E80004082FFD07FFDFB78A01D00007009200041820060 -S219024D3310801E00107C0903784800000C381D0008813E001026 -S219024D48901E00087C09E8502C1B00005400F87A393E0028B37D -S219024D5D3D00027F49012E83FD0004408100307F1EC3787F7CBC -S219024D72DB78809E000080BE00047FE3FB7848005131801E0035 -S219024D8704379CFFFF3BDE00087FFF02144082FFE07C188AA621 -S219024D9C54000FFE2C00000041820028813D0004A01D00022CD6 -S219024DB1000000408100187C004BAC7C0004AC3400FFF03929E9 -S219024DC600104181FFF0A01D00006000DC00B01D0000800100C9 -S219024DDB2C7C0803A6830100088321000C83410010836100145B -S219024DF08381001883A1001C83C1002083E10024382100284E90 -S219024E058000208123000481690008A06B000054638BFE686341 -S219024E1A00014E800020688401003004FFFF7C6021104E800093 -S219024E2F208123000481690004800B000060000030900B0000FB -S219024E444E8000208123000481690004800B0000540007329026 -S219024E590B00004E8000209421FFD87C0802A69321000C9341F8 -S219024E6E0010936100149381001893A1001C93C1002093E100AC -S219024E83249001002C83230008839900047FDE9AA677DEFFFF74 -S219024E983C800003388432303860000838A000064800177D7F48 -S219024EAD788AA6577B0FFE39200000380000807C0903A66120A2 -S219024EC210003CC00E007C0004AC7D398BA67CD88BA67C198B02 -S219024ED7A67CD88BA6392900104200FFE03D2004007C0004AC74 -S219024EEC7D388BA63FA000033CC000023CE000033D200003382D -S219024F01C6527438E7D66C391D3818392978C83860001C3880F3 -S219024F1600007F25CB7848004321807D38183BFE3C004800439F -S219024F2B3D3860001C480047493860001C480045F1801E0A00C7 -S219024F403B5E0A005400073293FC0000901E0A00935C00047F6C -S219024F55E3FB783880000038A000A44800502938C000047CC9B4 -S219024F6A03A62F9B0000391E2C00395E2C203D2000033D600055 -S219024F7F0338E0000038009000915C001C39294910396B60D09B -S219024F94911C0010911C0008911C0018915C0014915C000CB020 -S219024FA9EA0002912A0004B00A0000392905F0394A0008420063 -S219024FBEFFECA40AFFF87D09437860002000B00A000039400053 -S219024FD3047D4903A6399F007238000000B00900029169000414 -S219024FE8B0090000396B05F0392900084200FFEC7D284B78A4B8 -S219024FFD08FFF83B60000160002000B0080000A13E09523BA0B0 -S219025012001061290003B13E0952A01E0950390005F0540004FE -S2190250273AB01E0950A13E09543B80FFFF7129FFFDB13E095435 -S21902503CA01E09623D40DEBB7000FFCFB01E0962A13E096061F9 -S2190250514A20E37129FFCFB13E0960A01E096439600000600012 -S2190250660030B01E0964A13E09523860888861290A00B13E0955 -S21902507B52A01E09503880000F7000F5FFB01E0950813E0AECA9 -S21902509038C005EE5529002E913E0AEC801E0AEC38E00040605C -S2190250A500003D901E0AEC813E0AEC38002C20552906B0913ED2 -S2190250BA0AEC937E0030B01F000039202C00B13F00029BBF0003 -S2190250CF049BBF0005B11F0006939F0030915F0034917F0038BE -S2190250E4917F003C917F0040B07F0044B17F0044B09F0046B1E7 -S2190250F97F0048B0DF004AB0FF004CB11F004EB11F005038008A -S21902510E0006B17F00587C0903A6B17F005A3CA00003B17F0030 -S2190251235CB17F005E38A532367D8963788C05FFFF9809000030 -S219025138392900014200FFF438000000B01F0078B01F0094B031 -S21902514D1F0096B01F0098B01F009AB01F009EB01F00A0B01F16 -S21902516200A239200001B13E09C0A01E09C070060001418200BC -S219025177187FC9F378A00909C0700A00014082FFF87D3E4B782D -S21902518C3800FFFFB01A00103920001AB13A0014396000003CB0 -S2190251A1001088917A00046000000C901A00003920D555B13AC7 -S2190251B6000E3800280AB01A0008392000903D60FA10992B003F -S2190251CB00A01E096260000001B01E0962A13E09605529043CFF -S2190251E0B13E0960419E00103D6002007C0004AC7D788BA681FA -S2190251F53900003C800003816900247F23CB78800B000038846C -S21902520A32307C0803A64E800021386000018001002C7C08033D -S21902521FA68321000C83410010836100148381001883A1001CF5 -S21902523483C1002083E10024382100284E8000209421FFF87CDB -S2190252490802A69001000C4BFFF7BD3860001C48004421386005 -S21902525E001C480042C98001000C7C0803A6382100084E8000DC -S219025273209421FFF87C0802A69001000C3860001C480041410C -S219025288386000038001000C7C0803A6382100084E80002094D2 -S21902529D21FF207C0802A67D800026934100C8936100CC9381F6 -S2190252B200D093A100D493C100D893E100DC900100E491810005 -S2190252C7C43BA000007C7B1B787C9A23783D2000033BC910403D -S2190252DC93A1009893A100B0386100083880000038A0000C4881 -S2190252F1004C993D200004814919643B8100183800000C396063 -S21902530600013D200003B0010010B161000E91410008B3A1001B -S21902531B0C392910987F83E3783880007638A0000038C0000203 -S21902533038E1009039000000480062793D200003392910A038B2 -S2190253456100303880007238A0000038C0000238E100943900D9 -S21902535A0000480062553D200003392910B0386100483880001D -S21902536F6238A0000138C0000038E100983901009C480062318D -S2190253843D200003392910C0386100603880006D38A00001384C -S219025399C0000138E100A0390100A44800620D3D200003392927 -S2190253AE10E0386100783880006838A0000138C0000138E100D7 -S2190253C3A8390100AC480061E93D4000037F63DB787F44D378EB -S2190253D87F86E378394A10F838A0000138E00005390100B039B5 -S2190253ED200001480061DD2C0300003BE00000418202888001E5 -S21902540200AC2C0000004182002C806100A838810008480079BC -S219025417752C030000408200183C600003808100A83863110403 -S21902542C4800528948000254800100A42C00000041820074809B -S2190254416100A03C8000033884111C480053B52C030000408265 -S219025456000C3BE0000148000054806100A03C80000338841169 -S21902546B24480053952C030000408200283D2000038009381483 -S2190254803BE000002C000000408200283C6000033863112C4820 -S219025495005221480001EC3C600003808100A0386311544800CB -S2190254AA520D480001D82E1F0000409200DC806100B02C0300AB -S2190254BF004082001C3C60000338631168480051E97FC3F37811 -S2190254D4480051E1480001AC38C100B47CDE33783881000838A2 -S2190254E9A00001480066257C7C1B7940800028806100B483A106 -S2190254FE00B0480069BD7C651B783C6000033863117C7FA4EB2B -S21902551378480051A14800016C3C600003808100903863BCB8D6 -S219025528480001A93D2000043B491A7C3BA000003B6100B84883 -S21902553D00000C7F9DD9AE3BBD0001281D000341810018480040 -S21902555201A97C7C1B794080FFE8801A0110900100B42C1C0028 -S2190255670040800028806100B44800694D7C641B783C6000039B -S21902557C38631194480051357FC3F3784800671D480000F82C20 -S2190255911F0001408200143C600003386311B84800511548000F -S2190255A600E04800010D800100942C00000041820054800100DA -S2190255BB9C2C000000408200143C600003386311E4480050E986 -S2190255D0480000A883A100984800000C987D00003BBD00014869 -S2190255E50001157C631B794080FFF03C6000038081009838639F -S2190255FA12087FA5EB78480050B5480000743C8000033884125E -S21902560F20386100B938A00003480052492C0300003BA100B88C -S219025624408200143C600002386356F8480006DD4800004488CE -S2190256390100B82C00005340820028893D00013929FFD028090A -S21902564E0009418100183C60000280810098386356F8480001F4 -S219025663C9480000143C600003808100B8386312244800504104 -S2190256784092000C386100B448006625800100E4818100C47C71 -S21902568D0803A6834100C8836100CC838100D083A100D483C104 -S2190256A200D883E100DC7D808120382100E04E8000203D2000B2 -S2190256B70439291A7C8009010C396900049009010891690104FE -S2190256CC4E8000203D600004392B1A7C394000003800010090F7 -S2190256E16B1A7C914901189009010C90890114914901084E8034 -S2190256F600209421FFF07C0802A693C1000893E1000C9001003B -S21902570B143D2000043BE91A7C83DF01082C1E00004080000CD2 -S2190257203860FFFF480000EC408200C4801F01142C00000041FC -S219025735820038817F01183D200003392932387C8958AE396BAA -S21902574A00013C600003917F01183863103848004F5D801F0103 -S21902575F18280000064081000893DF01183D2000043BE91A7C79 -S219025774801F010C2C0000FF41810020801F01142C000000413F -S21902578982FF983C6000033863103C48004F214BFFFF883D207F -S21902579E000481291A7C381F00047C0303783880010038BF01A5 -S2190257B3107D2803A6901F01044E8000212C030000907F010C8E -S2190257C8907F010841810020801F01142C0000004182FF483CA5 -S2190257DD6000033863103C48004ED14BFFFF383D400004394A7A -S2190257F21A7C812A0108816A01043929FFFF912A0108886B004A -S21902580700396B0001916A0104800100147C0803A683C10008D2 -S21902581C83E1000C382100104E8000209421FF707C0802A692C7 -S21902583181006092A1006492C1006892E1006C93010070932191 -S2190258460074934100789361007C9381008093A1008493C10076 -S21902585B8893E1008C900100947C7D1B787C9523783B600000B1 -S2190258703A8000013B2000003AC000003AE0FFFF480002602C1E -S219025885050053418200183C60000338630ED87F64DB78480036 -S21902589A4E1D480002547FA803A63B7B00024E80002138A10099 -S2190258AF5838000000547C063E7CBA2B78900100587FA3EB78F2 -S2190258C438800001480002697C7F1B79408000183C600003381E -S2190258D9630F047F64DB7848004DD54800020C381CFFD02800FC -S2190258EE00093B7B0001418101AC3D600003396B1010540010A7 -S2190259033A7D4B002E3D200003392910107D4A4A147D4903A6E2 -S2190259184E8004207FA3EB78389CFFD17F45D378480002092CCA -S21902592D1400007C7E1B78381BFFD17FD8F3787F60E214418240 -S219025942002C2C1500004182001C7F3EA8503C60000338630FFF -S219025957287F24CB7848004D59480000083B2000003A800000D3 -S21902596C3D200003816938047FDECA147D39F0507C1748107C01 -S2190259810001107C0003B87D2900787C1E58407EE000387C1749 -S2190259964B78418000143D200003800937EC7C1E0040408100B6 -S2190259AB183C60000338630F407FC4F37848004CFD4800013483 -S2190259C0381F002E7FFC00507FE9FB782C0900007F7BFA143B28 -S2190259D5FFFFFF408100307F5CD3787FA3EB78388000017F8560 -S2190259EAE378480001457FE0FB782C000000987E00003BDE008B -S2190259FF013BFFFFFF4181FFDC7FA3EB783880000138A00000A0 -S219025A144800011D88A1005B7C6318F85466063E7C0628003BBA -S219025A297B000190A10058418200183C60000338630F7C7F0439 -S219025A3EC37848004C75480000AC7D39F0507C09B0107C00015C -S219025A53107C0003B87D2900787EC000387C164B78480000546B -S219025A687FA3EB78209C003B7F45D378480000BD7C7E1B783DC8 -S219025A7D2000033C60000393C9380C38630FB87FC4F3787EE538 -S219025A92BB787EC6B37848004C1D480000543C60000338630FC0 -S219025AA7E07F64DB787F85E37848004C054800003C7F7FDB7800 -S219025ABC7FBEEB78480000083BFF00017FC803A64E8000212C98 -S219025AD103000A4082FFF07FDDF3787FFBFB787FA803A64E80A9 -S219025AE600217C651B794181FD98800100947C0803A682810072 -S219025AFB6082A1006482C1006882E1006C830100708321007422 -S219025B10834100788361007C8381008083A1008483C100888362 -S219025B25E1008C382100904E8000209421FFE07C0802A693616C -S219025B3A000C9381001093A1001493C1001893E1001C9001004A -S219025B4F247C9E23787FC0F3782C0000007C7B1B787CBC2B7826 -S219025B643BA000003BDEFFFF408101787F6803A64E8000217FFB -S219025B796803A6547F063E4E800021393FFFD0381FFFBF212953 -S219025B8E0009392000007D29491420000005380000007C0001BC -S219025BA3147D270379546B063E3920000040820010381FFF9F8F -S219025BB82800000541810008392000012C09000041820104394A -S219025BCD2BFFD0380BFFBF7D2A4B787C0803785529063E540042 -S219025BE2063E21290009392000007D2949142000000538000057 -S219025BF7007C0001147D2703793920000040820010380BFF9FD5 -S219025C0C2800000541810008392000012C090000418200B0394A -S219025C213FFFD05520063E2800000957BD402E4181000C7D237F -S219025C364B7848000030381FFF9F280000054181000C387FFF71 -S219025C4BA94800001C381FFFBF393FFFC9200000057C00011029 -S219025C607C0003B87C0348385540063E280000094181000C7D9D -S219025C7549537848000030380BFF9F280000054181000C392B47 -S219025C8AFFA94800001C5500063E392BFFC9200000057C00018B -S219025C9F107C0003B87C094838546020362C1C00007C034B7809 -S219025CB47FBD1B784182001C801C00007C001A14901C000048EC -S219025CC900000C3860FFFF480000187FC0F3782C0000003BDECE -S219025CDEFFFF4181FE907FA3EB78800100247C0803A683610021 -S219025CF30C8381001083A1001483C1001883E1001C38210020E8 -S219025D084E8000209421FFF87C0802A69001000C3C6000033845 -S219025D1D630EBC480049958001000C7C0803A6382100084E802E -S219025D3200209421FFF07C0802A693C1000893E1000C900100F8 -S219025D47143D6000033D200003392936183BEB36147C1F4840E9 -S219025D5C418000207D3E4B78813F00003BFFFFFC7D2803A64E3B -S219025D718000217C1FF0404080FFEC800100147C0803A683C1F9 -S219025D86000883E1000C382100104E8000209421FFF87C080200 -S219025D9BA69001000C3D200003800935942C0000004182000CFC -S219025DB090030094480000243D2000039069385C480015417C3D -S219025DC51602A628007A124081000C38007A127C1603A6800103 -S219025DDA000C7C0803A6382100084E8000204E8000203860009F -S219025DEF004E8000209421FFF07C0802A693E1000C90010014B5 -S219025E04480005AD3D20000338893504800400083BE000002C5B -S219025E19000000418200307FE3FB787C9F2378809F000080BF91 -S219025E2E000480DF000888FF000C3BFF00104800047D801F00A8 -S219025E43082C0000004082FFE0800100147C0803A683E1000C3C -S219025E58382100104E8000204E8000209421FFF87C0802A69081 -S219025E6D01000C480000ED38007A127C1603A68001000C7C08C7 -S219025E8203A6382100084E8000203D20002F6129AF087C634917 -S219025E97D63C00431B6000DE837C0300967C63FE707C009670DA -S219025EAC7D6300507D3602A67D605B782C000000396BFFFF4C85 -S219025EC1810020394BFFFF7C1602A67C0900004182FFF87C09A4 -S219025ED603787D605B782C0000007D4B53784181FFE04E800057 -S219025EEB209421FFF87C0802A69001000C3D20FF0061290930E7 -S219025F0038000001B00900007C0006ACA00900007C0006AC543A -S219025F1500AAFF38600000418200302060003A3D60000354602E -S219025F2A103A396B32407D6B002E3D2000033929332C7C8900BF -S219025F3F2E7D6803A64E800021546307FA8001000C7C0803A629 -S219025F54382100084E8000203D20000339493240390000407C99 -S219025F690A402E3D20000239295DEC7C00480041820018800A71 -S219025F7E00403D20000339299E087C004800408200343D200048 -S219025F930239295EEC3D600003380000007D2A412E6000DEAD6B -S219025FA8396B332C7C0B412E3D20000339293418380000007C22 -S219025FBD09412E3D600003800B1D643D20000339291D287D29F7 -S219025FD202147D2903A64E8004203D20FF0061290014800900D9 -S219025FE7007C0006AC64000001900900007C0006AC480000E814 -S219025FFC3D20FF0061290200A00900007C0006AC60000008B0B2 -S2190260110900007C0006AC480000C83D20FF0061290200A0099B -S21902602600007C0006AC60000004B00900007C0006AC4800009D -S21902603BA83D20FF0061290240A00900007C0006AC600000043E -S219026050B00900007C0006AC480000883D20FF0061290220A0D5 -S2190260650900007C0006AC60000008B00900007C0006AC480051 -S21902607A00683D20FF0061290220A00900007C0006AC60000063 -S21902608F04B00900007C0006AC480000483D20FF00612909404B -S2190260A4800900007C0006AC60000080900900007C0006AC483A -S2190260B90000283D20FF0061290948816900007C0006AC3C0018 -S2190260CE800054005D7E7D6B0378916900007C0006AC3D6000DF -S2190260E303800B1E743D20000339291E107D2902147D2903A686 -S2190260F84E8004203D20FF0061290200A00900007C0006AC5487 -S21902610D00063E60000100B00900007C0006AC480000683D20DD -S219026122FF0061290240A00900007C0006AC5400063E600001C6 -S21902613700B00900007C0006AC480000443D20FF0061290220D1 -S21902614CA00900007C0006AC5400063E60000100B00900007C32 -S2190261610006AC480000203D20FF0061290940800900007C00D4 -S21902617606AC6000E000900900007C0006AC3D600003800B1F0A -S21902618B5C3D20000339291EF87D2902147D2903A64E800420C7 -S2190261A03D20FF0061290014800900007C0006AC600000409002 -S2190261B50900007C0006AC4E8000203D20FF0061290200A00918 -S2190261CA00007C0006AC60000008B00900007C0006AC4E80006E -S2190261DF203D20FF0061290200A00900007C0006AC6000000461 -S2190261F4B00900007C0006AC4E8000203D20FF0061290240A0F2 -S2190262090900007C0006AC60000004B00900007C0006AC4E8029 -S21902621E00203D20FF0061290220A00900007C0006AC60000005 -S21902623308B00900007C0006AC4E8000203D20FF00612902206A -S219026248A00900007C0006AC60000004B00900007C0006AC4ECA -S21902625D8000203D20FF0061290940800900007C0006AC60003F -S2190262720080900900007C0006AC4E8000203D20FF00612909EC -S21902628748816900007C0006AC3C00800054000FFE7D6B03781B -S21902629C916900007C0006AC4E8000207C1E22A6600000077C8B -S2190262B11E23A64E8000209421FFF093E1000C54E0FFFE70FF38 -S2190262C600012F0000002F8300207CC0FE707D600026556B1F2E -S2190262DBFE54A500267D400026554ADFFE7C0600507D4A00D0C2 -S2190262F07CE0002654E7EFFE7D6B00D060A808FF54000FFE7D43 -S2190263050858787D4950F860A508FD7CFF00387CAB5838714A67 -S21902631A000D2F9F00007D654378548400267129001D7D4A4B28 -S21902632F78608402003960000039000020419E005C546B402E9A -S2190263447D55C3A67D70C3A67C93C3A67CB6C3A660A001007D1B -S2190263595DC3A67D78C3A67C9BC3A67C1EC3A6386300013CC6E3 -S21902636EFF807F8340007CC0FE707C0600507D2000265529EFA6 -S219026383FE54000FFE7D2700393C8400803CA500804082FFACB4 -S219026398656020007C10C3A67C18C3A683E1000C382100104EEB -S2190263AD800020380000007C19C3A6380000207C0903A639201F -S2190263C20000380000007C15C3A67D30C3A67C13C3A67C16C32A -S2190263D7A67C1DC3A67D38C3A67C1BC3A67C1EC3A6392901007E -S2190263EC4200FFD83C00200060001F007C10C3A67C18C3A64E61 -S2190264018000209421FDE87CDE9AA674C6FFFF3D600003812B27 -S21902641635542C0900004082020039400030380000017D49033D -S21902642BA6900B3554B12609C43800000039263C807D284B782C -S2190264409806086038E62E0838A1000838862E0038610009393E -S21902645581021198090000392900014200FFF839202E00B128FA -S21902646A0002396000103940020938002E089968000599680072 -S21902647F04B0080000B14800063920A800B1262E0838000101FE -S219026494B007000290A700047C8B2378B14B0002380000A598E3 -S2190264A901000890AB0004B1262E0038000000980608643920EF -S2190264BE005099260868380000019806086039200111B12609B9 -S2190264D3C0A00609C070090001418200187CC93378A00909C0C7 -S2190264E8700A00014082FFF87D264B7838000211B00609C0A193 -S2190264FD2609C071200001418200187CC93378A00909C0700A4B -S21902651200014082FFF87D264B78392000007D2903A63800006D -S219026527819806086C7D4902A6614AC3517D4903A6A00B00007E -S21902653C70098000418200084200FFF4394001007D4903A63D24 -S21902655120000339297CE439600000380000FF7C0959AE396B49 -S21902656600014200FFF87D8763787C6B1B787C0B380041820004 -S21902657B9C3CA00003880B00002C00004D40820080880B0001A7 -S2190265902C00004F40820074880B00022C000054408200688C73 -S2190265A50B000839400000892B00015400402E7C084B787C0A0A -S2190265BA4000396B00024080005438857CE47C651B78880B00A7 -S2190265CF00396B00017D693A787D23FE707C0451AE7C604A7848 -S2190265E47C0018507C00FE70394A00017CA900787C0A40007D69 -S2190265F96000387C0B4B784180FFCC48000010396B00017C0B94 -S21902660E38004082FF703800000098060860382102184E800088 -S219026623209421FFE87C0802A693A1000C93C1001093E1001447 -S2190266389001001C7C7D1B787C9F23787CBE2B784BFFFDBD3D39 -S21902664D20000339697CE4394B01007C0B50404080008457A82D -S219026662063E880B00007C00400040820054886B0001396B00DB -S219026677027F83F0004FFEE3827C000026540007FE7C0000D01A -S21902668C7FC900787C6000387C034B794081004C7C6903A67DC3 -S2190266A1695B787FE4FB7888090000392900019804000038847F -S2190266B600014200FFF048000028886B0001380300027D2B004D -S2190266CBEE5529063E2C0900FF4182000C7C0B50404180FF88A1 -S2190266E0386000008001001C7C0803A683A1000C83C100108335 -S2190266F5E10014382100184E8000209421FFF87C0802A69001CC -S21902670A000C480035418001000C7C0803A6382100084E8000C0 -S21902671F203C80FF00608400007C9E9BA63CA0FA1060A5000158 -S2190267343C60000060630000986500007C788AA63C600A007CA7 -S2190267490004AC7C788BA63C600C007C0004AC7C788BA63C60CA -S21902675E04007C0004AC7C788BA63C6001007C0004AC7C788B82 -S219026773A63C6007007C0004AC7C788BA67C708AA63C600A00AE -S2190267887C708BA64C00012C3C600C007C708BA64C00012C3CE5 -S21902679D6004007C708BA64C00012C7C0004AC3C6000606063FB -S2190267B22400906400003C60FFFF6063FF88906400043C60003B -S2190267C700606300C2B06402003C6055CC6063AA3390640320A7 -S2190267DC90640324906403289064032C386000C3B0640220387B -S2190267F1600083B064024038600200B064017A3C601880606333 -S2190268061000906401703C60FE00606304013CA0FF8060A50936 -S21902681B609064010090A401043C600000606300813CA0FFC058 -S21902683060A504009064010890A4010C3C600000606300803CEA -S219026845A0000060A504009064011090A401143C6000006063E1 -S21902685A00803CA0000060A504009064011890A4011C3C60FAC9 -S21902686F00606304013CA0FFE060A509309064012090A40124DE -S2190268843C608000606300013CA0A00060A501089064012890E1 -S219026899A4012C3C60FA21606300013CA0FFFF60A501089064BB -S2190268AE013090A401343C60FC00606300013CA0FF8060A5096F -S2190268C3409064013890A4013C3C600200606300009064028004 -S2190268D8806402845463653E2C030000418200103C605F506033 -S2190268ED63D0004800000C3C6000006063D000906402843C40E3 -S21902690200003C60FF0060630014904300003C40000060420016 -S219026917007C4210F87C5603A6384000013C60FF00606302004A -S21902692CB04300003CA0FA1060A500013C600000606300089871 -S2190269416500004E8000207063000E3C80FA106084000198645F -S21902695600004E8000203C80FA106084000138A0000A98A4006E -S21902696B003CA0000A7CA903A64200000038A0000C98A40000FA -S2190269803CA0000A7CA903A6420000003863FFFF2C03000040FD -S21902699580FFD038A0000698A400003CA000147CA903A642007D -S2190269AA00004E8000203D20000339291FE05463073E7C691829 -S2190269BFAE4E8000209421FFF87C0802A69001000C3D2000034B -S2190269D4806935702C0300004181000C48001B454800000C38E8 -S2190269E900FFFF900935708001000C7C0803A6382100084E806D -S2190269FE00203803FF9F280000054181000C3863FFA94E800078 -S219026A13203923FFD05520063E280000094181000C7D234B7801 -S219026A284E8000203803FFBF280000054081000C3860FFFF4E8D -S219026A3D8000203863FFC94E8000209421FFE07C0802A69001FB -S219026A5200243800000098010018906100104BFFFF65546306AF -S219026A673E388100084800001D2C0300014082FFEC800100242D -S219026A7C7C0803A6382100204E8000209421FFF07C0802A69307 -S219026A91C1000893E1000C900100147C9F2378897F00102C0BF6 -S219026AA60000408200282C03002440820098392000013800FFAC -S219026ABBFF901F0004993F0010917F0000917F000C4800007C35 -S219026AD02C0B0001408200542C03002340820020815F000881BF -S219026AE57F000C380000007C0A59AE39200002993F00104800BA -S219026AFA0050817F000C2C0B0800418200E8801F0000813F00DB -S219026B0F087C001A14901F00007C6959AE380B0001901F000C1E -S219026B24480000242C0B0002408200245463063E4BFFFECD5466 -S219026B3963203638000003907F0004981F001038600000480092 -S219026B4E00AC2C0B0003408200985463063E4BFFFEA5801F0064 -S219026B6304893F00037C001B787C090000901F0004418200102D -S219026B783860002D4800196D4800006C3860002B4800196181B4 -S219026B8D3F0008880900022C00003A4082004C8869000083DF4B -S219026BA2000C48001945813F0008886900014800193939600038 -S219026BB7037C0BF040418100287FCAF3787FE4FB7881240008E7 -S219026BCC7C0958AE7D2B4A14396B00017C0B50409809FFFD4083 -S219026BE181FFE8386000014800001038000000981F00103860A8 -S219026BF6FFFF800100147C0803A683C1000883E1000C382100AE -S219026C0B104E8000209421FFE07C0802A69361000C938100108B -S219026C2093A1001493C1001893E1001C900100243D2000033BC4 -S219026C35691FE07C7C1B7838600024480018A98BFC00003BC009 -S219026C4A00002C1F00003BA00000418200247FE3FB78480018EC -S219026C5F8D7C1DFA143BDE00017FFCF0AE541D063E2C1F0000B2 -S219026C744082FFE4386000234800186D57A0E13E7C7B00AE48D4 -S219026C8900186157A0073E7C7B00AE480018554BFFFD2D5463B5 -S219026C9E067E2C03002B4082FF98800100247C0803A6836100ED -S219026CB30C8381001083A1001483C1001883E1001C3821002018 -S219026CC84E8000209421FFD87C0802A693610014938100189343 -S219026CDDA1001C93C1002093E100249001002C3D2000038169CB -S219026CF238303D4000032C0B000038000000900A35743F60004D -S219026D07033F800003408101383FC000033FA000033D2000036D -S219026D1C8009383C2C0000004182006C801C38303D6000032837 -S219026D3100000340810018801E3834700900034082000C3BE0FB -S219026D46000448000034801C38303BE0000128000001408100A7 -S219026D5B24800B3834540007FE7C0000D07C00FE707C0900F8F5 -S219026D70540007FE552907BC7C1F4B78808B3834386100087F78 -S219026D85E5FB784800233148000014813E38343BE000018809CA -S219026D9A0000980100083D200003800935742C000000408200BC -S219026DAF98390000007C08F8004080006C3D20000338C91FE0EF -S219026DC438A100083CE000033C8000037D6828AE8147383855AC -S219026DD960E13E7D2600AE992A000080043574394A00012C002E -S219026DEE000091473838408200505560073E7D2600AE396A0041 -S219026E0301992A0000801B3574916738382C00000040820030E5 -S219026E18390800017C08F8004180FFB0813D3830801E38347D83 -S219026E2D3F48502C0900007C00FA14901E3834913D38304181A1 -S219026E42FED88001002C7C0803A6836100148381001883A1004C -S219026E571C83C1002083E10024382100284E8000209421FFE80C -S219026E6C7C0802A693A1000C93C1001093E100149001001C2CD9 -S219026E810600003D2000033D6000033D4000033D000003908916 -S219026E963838906B383490AA383090C8383C418200303FA000C9 -S219026EAB0338000000901D3574813D35744BFFFE15813D35740F -S219026EC0801D35742C00000041820010386000004800001C4B2A -S219026ED5FFFDF93D600003812B38383800000098090000806B2C -S219026EEA38388001001C7C0803A683A1000C83C1001083E1006A -S219026EFF14382100184E8000209421FFC07C0802A69281001041 -S219026F1492A1001492C1001892E1001C93010020932100249301 -S219026F294100289361002C9381003093A1003493C1003893E117 -S219026F3E003C900100443D200003800938303B6000002C00000E -S219026F53003D200003936935743E8000033EA000034081017049 -S219026F683D200003816938343F000003880B00002C0000004115 -S219026F7D8201583EC000033F4000033EE000038016383C2C0043 -S219026F92000041820058801538302800000340810018801A38F5 -S219026FA738700900034082000C3BC000044800003C80153830CC -S219026FBC3BC00001280000014081002C801A3838540007FE7CC8 -S219026FD10000D07C00FE707C0900F8540007FE552907BC7C1E39 -S219026FE64B78480000083BC000013BE000007C1FF0004080001A -S219026FFB743FA000033F2000033B810008813D383488690000E3 -S21902701039290001913D38345463063E4BFFF9E580193574540E -S2190270257B26362C000000408200A8813838348869000039296A -S21902703A0001913838345463063E4BFFF9BD801435747F631BCF -S21902704F782C000000547B063E4082007C7F7FE1AE3BFF000168 -S2190270647C1FF0004180FFA08016383C2C000000418200188094 -S2190270799A3838386100087FC5F378480020954800000C813A95 -S21902708E38389B6900003D200003800935742C000000408200F2 -S2190270A33481373830801A38387D3E48502C0900007C00F21469 -S2190270B8901A3838913738304081001481383834880900002CBB -S2190270CD0000004082FEBC800100447C0803A68281001082A103 -S2190270E2001482C1001882E1001C830100208321002483410074 -S2190270F7288361002C8381003083A1003483C1003883E1003C9D -S21902710C382100404E8000209421FFE87C0802A693A1000C9345 -S219027121C1001093E100149001001C2C0600003D2000033D601D -S21902713600033D4000033D00000390693834908B383890AA3818 -S21902714B3090C8383C418200303FA0000338000000901D3574C9 -S219027160813D35744BFFFDA5813D3574801D35742C00000041A6 -S21902717582001038600000480000104BFFFD893D200003806963 -S21902718A38388001001C7C0803A683A1000C83C1001083E100C7 -S21902719F14382100184E8000209421FFF87C0802A69001000CEC -S2190271B448001AA53D20000338000001900935588001000C7CF0 -S2190271C90803A6382100084E8000209421FFE87C0802A693A1AE -S2190271DE000C93C1001093E100149001001C7C9E23783BA00060 -S2190271F3007C7F1B7893BE000048000024801E0000813F0000D7 -S219027208540020367C001B7839290001901E0000913F00003B95 -S21902721DBD0001813F0000886900002C030000418200104BFF9A -S219027232F7D17C631B794080FFC87FA3EB788001001C7C0803D5 -S219027247A683A1000C83C1001083E10014382100184E8000202A -S21902725C7C84237939400000408200183800003098030001988B -S219027271030000386000024E800020392500077D20FE705400B2 -S2190272861F7E7D2902147D251E71418200603D20000338C91FBF -S21902729BE038E5FFFF54E018387C88043068A9000120090000E5 -S2190272B07D2049143168FFFF7C0B41107C0B4B794182002855CE -S2190272C508063E5500E13E7D6600AE5509073E7C0648AE996345 -S2190272DA00009C03000138630001394A00027CE53B794082FF01 -S2190272EFB07D4353784E8000204E8000204E8000209421FFF0DA -S2190273047C0802A693C1000893E1000C900100143D20000380E0 -S21902731909356C2C000000418200108009356C7C0803A64E808A -S21902732E00213D200003800938602C0000004182001438000066 -S21902734300900938603BE000024800001048006D7148006CA509 -S2190273587C7F1B7848006E2D2C0300004182000848006E594857 -S21902736D006E194BFFFF8D48006DC93860000348001BD13860C2 -S219027382000348001B612C1F0000418200203FC00003813E3504 -S2190273975C7FE3FB787D2803A64E8000212C0300004082FFEC90 -S2190273AC48006DD53D200003800935682C000000418200108036 -S2190273C10935687C0803A64E800021800100147C0803A683C1E8 -S2190273D6000883E1000C382100104E8000209421FFB87C0802DA -S2190273EBA6936100349381003893A1003C93C1004093E10044B0 -S2190274009001004C7C7E1B783BE000003F6000033B81002880E5 -S2190274151B384C3BA000012C0000004182001C7FE3FB787F84FD -S21902742AE3787C0803A64E8000217C7D1B78480000107FE3FB8E -S21902743F784800108190610028381FFFE02800001F7C0A037849 -S2190274542F9D00003BFF00017F83E3784181004C390000047DF0 -S2190274690903A6386100087C6B1B7838000000392000007C0B22 -S21902747E49AE392900014200FFF8380000047C0903A67C6943CD -S219027493787F8BE378880B0000396B00019809000039290001C4 -S2190274A84200FFF0419E0030200A001F7C0001107C0500F854E5 -S2190274BD00077A54A507387FC4F3787C052B7838C000004BFFE6 -S2190274D2F9997C7E1B7848000058212A001F7D2949107D204891 -S2190274E7F8540006F6552907387D2903782C0900007FCBF37879 -S2190274FC380000783929FFFF418200182C090000980B00003978 -S2190275116B00013929FFFF4082FFF0280A001F4181000C3BDEA9 -S2190275260010480000083BDE00082C1F00464081FEE080010017 -S21902753B4C7C0803A6836100348381003883A1003C83C1004083 -S21902755083E10044382100484E8000209421FFD07C0802A67DBB -S2190275658000269381002093A1002493C1002893E1002C90012B -S21902757A00349181001C88030000386300012C0000507C9D23B4 -S21902758F7890610008392000003BC00047408200703861000801 -S2190275A43881000C4BFFFC2D2C03000041820028812100088847 -S2190275B9090000392900012C00003D91210008408200108121B3 -S2190275CE000C3BC90001480000383D20000388091FF87FA4EBFA -S2190275E3782C00000039691FF8418200D8880B00009804000065 -S2190275F88D2B0001388400012C0900004082FFEC480000BC7D9E -S21902760D3F4B787C1FF000408000803B800000397FFFE020AB77 -S219027622001F7CA52910392100103881000C7CA028F87C842840 -S219027637787CA9483854A5077A54000738806100082A0B001FD0 -S21902764C7CA503787D2423789381001038C000004BFFFAB980B1 -S2190276618100107FE3FB7848000E6D41910010812100083929F6 -S21902767600104800000C8121000839290008912100083BFF008C -S21902768B017C1FF0004180FF8C3D20000388091FFC7FA4EB7879 -S2190276A02C00000039691FFC4182001C880B0000980400008D4A -S2190276B52B0001388400012C0900004082FFEC3800000098041A -S2190276CA0000800100348181001C7C0803A68381002083A1005C -S2190276DF2483C1002883E1002C7D808120382100304E8000205A -S2190276F49421FF287C0802A693A100CC93C100D093E100D49076 -S2190277090100DC3BA000003D6000047C7E1B789BAB8774893E76 -S21902771E00003809FFC128000034418108283D600003396B209C -S219027733105400103A7D4B002E3D200003392920107D4A4A147F -S2190277487D4903A64E80042048006971480068A53D20000339B4 -S21902775D291FE05460E73E7D0900AE5463073E7CE918AE3D4037 -S219027772000438000053392A8774980A877439600000996900D6 -S219027787039909000198E90002480007D4387E000148000B6D23 -S21902779C480007C8387E000148000CE5480007BC3C60000438E7 -S2190277B16387744BFFFC31480007AC881E00012C000000408257 -S2190277C60040480009013D20000388091FFC3D6000042C00003C -S2190277DB00396B877439491FFC41820748880A00008D2A0001FA -S2190277F0980B00002C090000396B00014082FFEC4800072C38A0 -S2190278051E0001900100883BC1008C3BE100887FE3FB787FC4EB -S21902781AF3784BFFF9B92C030000418200A4812100888809009A -S21902782F00392900012C00002C912100884082008C7FE3FB7825 -S219027844388100904BFFF98D2C030000418200788121008888F3 -S219027859090000392900012C00002C91210088408200608081F2 -S21902786E008C2C04000041820038806100904800088D7C641BFE -S21902788379418200148061008880A1008C38C000004BFFF881C8 -S2190278988001008C812100887C0002147D290214912100888194 -S2190278AD210088880900002C00002C4082001038090001900188 -S2190278C200884BFFFF5081210088880900002C000000408200E0 -S2190278D73C3D20000388091FFC3D6000042C000000396B8774E1 -S2190278EC39491FFC4182063C880A00008D2A0001980B00002CC5 -S219027901090000396B00014082FFEC480006203D2000038809B0 -S21902791620003D6000042C000000396B8774394920004182065E -S21902792B04880A00008D2A0001980B00002C090000396B000175 -S2190279404082FFEC480005E83C8000047FC3F378388487744BDA -S219027955FFFC094800060C381E00013BE10094900100947FE32A -S21902796AFB78388100984BFFF8652C0300004182009081210072 -S21902797F9488090000392900012C00002C91210094408200788C -S2190279947FE3FB783881009C4BFFF8392C03000041820064805C -S2190279A96100983C80000480A1009C3884877438C000014BFF52 -S2190279BEF4AD2C030000408205A03D600003880B20043D2000C2 -S2190279D3042C00000039498774396B20044182001C880B0000B1 -S2190279E88D2B0001980A00002C090000394A00014082FFEC388A -S2190279FD000000980A0000480005603D200003880920003D6071 -S219027A1200042C000000396B8774394920004182050C880A0081 -S219027A27008D2A0001980B00002C090000396B00014082FFEC61 -S219027A3C480004F03BA00001381E00013BE100A0900100A07F53 -S219027A51E3FB78388100A44BFFF77D2C030000418201F881211B -S219027A6600A088090000392900012C00002C912100A040820103 -S219027A7BE07FE3FB78388100A84BFFF7512C030000418201CC88 -S219027A90806100A088030000386300012C00003A906100A040FB -S219027AA58201B42C1D000041820124800100A82C000000418245 -S219027ABA00A8800100A83BE000007C1F0040408000543941005B -S219027ACF08816100A0892B0000396B00017D204B782C00007DAF -S219027AE47D2AF9AE916100A040820018880B0000392B00016074 -S219027AF90000207C0AF9AE912100A03BFF0001281F007F41810F -S219027B0E0010800100A87C1F00404180FFB8808100A438610091 -S219027B23087FE5FB78480015F17C03F80040820024812100A872 -S219027B38800100A47D3F48502C0900007C00FA14900100A49133 -S219027B4D2100A84082FF6C800100A82C0000004082003C3D2076 -S219027B62000388091FFC3D6000042C000000396B877439491F4B -S219027B77FC418203B4880A00008D2A0001980B00002C0900005A -S219027B8C396B00014082FFEC480003983D200003880920043D56 -S219027BA16000042C000000396B8774394920044182037C880A1F -S219027BB600008D2A0001980B00002C090000396B00014082FFBD -S219027BCBEC48000360808100A480A100A838C000014BFFF53928 -S219027BE02C0300004182003C3D20000388091FFC3D6000042C82 -S219027BF5000000396B877439491FFC4182032C880A00008D2AFD -S219027C0A0001980B00002C090000396B00014082FFEC480003E8 -S219027C1F103D200003880920043D6000042C000000396B8774B8 -S219027C3439492004418202F4880A00008D2A0001980B00002CBC -S219027C49090000396B00014082FFEC480002D83D2000038809B1 -S219027C5E20083D6000042C000000396B87743949200841820207 -S219027C73BC880A00008D2A0001980B00002C090000396B000172 -S219027C884082FFEC480002A0881E0000395E0001680900532126 -S219027C9D6900007D2B491468000043216000007C0B01147C0B0E -S219027CB24B7939600000914100AC916100B03BE100AC418200AE -S219027CC7287FE3FB78388100B04BFFF505812100AC8809000018 -S219027CDC2C00003B4082000C38090001900100AC7FE3FB7838CB -S219027CF18100B44BFFF4E12C0300004182000C806100B4480048 -S219027D0663D1386000034800124138600003480011D180610051 -S219027D1BB02C0300004182004C3D200003800935642C000000B0 -S219027D304182001C800935647C0803A64E8000217C631B794067 -S219027D45820008906100B0800100B02C00000041820018380087 -S219027D5A0009900100B0386000094800030D4800020848000927 -S219027D6F4D2C0300004182001838000063981E00003D200003F0 -S219027D843800000190093584881E000068090053216900007DE7 -S219027D992B491468000073216000007C0B01147C0B4B79418240 -S219027DAE0024386000004BFFF5453D20000439291B983D600066 -S219027DC303912B3580480063354800000C386000014BFFF525FF -S219027DD8386000034800117138600003480011013860FFFF4857 -S219027DED0001883D200003800935607C0803A64E8000213860BF -S219027E0200014800017048000F8948000158381E000190010041 -S219027E17B8386100B8388100BC4BFFF3B52C0300004182007C71 -S219027E2C812100B888090000392900012C00002C912100B840EA -S219027E4182006488090000392900012C000043912100B84082B0 -S219027E560010806100BC48001ADD4800000C806100BC48001AD1 -S219027E6BC93D20000388091FFC3D6000042C000000396B8774BA -S219027E8039491FFC418200A8880A00008D2A0001980B00002CC5 -S219027E95090000396B00014082FFEC4800008C3D2000038809B1 -S219027EAA20003D6000042C000000396B877439492000418200CB -S219027EBF70880A00008D2A0001980B00002C090000396B000170 -S219027ED44082FFEC48000054381E0001900100C0386100C03810 -S219027EE98100C44BFFF2E92C030000408200443D2000038809ED -S219027EFE200C3D6000042C000000396B87743949200C4182005F -S219027F131C880A00008D2A0001980B00002C090000396B00016F -S219027F284082FFEC38000000980B0000480000303C6000033866 -S219027F3D631FFC4BFFECD1806100C448000615480000183C807F -S219027F5200047FC3F3783884877438A0012C4800121D3C600093 -S219027F6704386387744BFFECA538600000800100DC7C0803A667 -S219027F7C83A100CC83C100D083E100D4382100D84E80002094FA -S219027F9121FFE87C0802A693A1000C93C1001093E100149001E3 -S219027FA6001C3FA00004389D877448000E21387D87744BFFEC93 -S219027FBB598001001C7C0803A683A1000C83C1001083E100148B -S219027FD0382100184E8000209421FFF07C0802A693E1000C9056 -S219027FE50100143D200003800935702C000000408000084BFF9F -S219027FFAFF993FE00003387F7F744BFFEA45387F7F744BFFF6A4 -S21902800FE97C631B794182FFEC7C6318F854630FFE8001001403 -S2190280247C0803A683E1000C382100104E8000204E80002094CA -S21902803921FFF87C0802A69001000C4BFFF16548000C55386069 -S21902804E002B480004998001000C7C0803A6382100084E80001D -S219028063203D200003906935704E8000209421FFF87C0802A61D -S2190280789001000C3D20000339291FE05460E73E7D4900AE54ED -S21902808D63073E7D0918AE3D60000438000058386B8774980B71 -S2190280A28774392000009943000199030002992300034BFFEBFF -S2190280B75D8001000C7C0803A6382100084E8000203D200004E6 -S2190280CC38A0000039298FC43CC0000338E0FFFF3C8000033DFA -S2190280E16000043D4000033D0000033800000190E6384490ABF9 -S2190280F68F74912A38489008357890A438404E8000209421FF9D -S21902810BF07C0802A693C1000893E1000C900100143D2000035B -S219028120800935787C7F1B782C0000007C9E2378408200084B89 -S219028135FFFF952C1F0012418100243D600003800B38483D2050 -S21902814A000439298FC47C0900507C00F21428000080408100A0 -S21902815F0C386000004800006C3CE00003800738447C1F0000EF -S2190281744182004C3D000003800838407C1F00004180002039EB -S2190281895F00013D20000439298F74554B103A380000007C090D -S21902819E592E914838403D600003814B38483D20000439298FAF -S2190281B37457E0103A7D49012E93E738443D2000038069384807 -S2190281C87C03F21490093848800100147C0803A683C10008836C -S2190281DDE1000C382100104E8000209421FFD87C0802A6936196 -S2190281F200149381001893A1001C93C1002093E1002490010044 -S2190282072C3D600003800B357C7C7D1B782C0000007C9E2378E6 -S21902821C7CBF2B7840820058380000013D2000043929904490EE -S2190282310B357C39400000380000087C0903A6390A0001554BAA -S219028246C00E5547103A2C0B00005560083C4080000C6C0004FC -S21902825BC168001DB77C0B03784200FFE87D0A4378280A00FF6C -S2190282707C09392E4081FFC43D600003380000003D2000043B0E -S219028285699044900B35743F800003480000248921000857E045 -S21902829A463E7C004A785400103A7D7B002E57E9402E7D3F5A7E -S2190282AF783BBD00012C1E00003BDEFFFF41820020386100085D -S2190282C47FA4EB7838A0000148000DED801C35742C000000414B -S2190282D982FFBC7FE3FB788001002C7C0803A6836100148381A1 -S2190282EE001883A1001C83C1002083E10024382100284E8000E1 -S219028303209421FFD87C0802A693A1001C93C1002093E100242A -S2190283189001002C3D20000438000000980987743BA987747CFC -S21902832D691B7890610008880900002C000043408200F48809F8 -S21902834200012C000052408200E88BC900022C1E004340820051 -S219028357DC880900032C00003A408200D0380900043BE1000839 -S21902836C900100087FE3FB783881000C4BFFEE5D2C03000041BD -S2190283818200EC8121000888090000392900012C00002C9121CA -S2190283960008408200D47FE3FB78388100104BFFEE312C0300F7 -S2190283AB00418200C08061000C8081001038A0FFFF4BFFFE2DEA -S2190283C03D20000383E935742C1F0000418200403D20000388F6 -S2190283D50920007FA3EB782C000000396920004182001C880B7E -S2190283EA00008D2B0001980300002C090000386300014082FF91 -S2190283FFEC3800000098030000480000647C641B78387D0001CE -S21902841438A000204BFFEE453D2000049BC98774386300017FFC -S219028429FD19AE4800004081210008880900007D234B782C0021 -S21902843E004C7C090378418200284181000C2C00004348000066 -S219028453082C090050418200143C8000043884877438A0012C2D -S21902846848000D058001002C7C0803A683A1001C83C10020839D -S21902847DE10024382100284E8000209421FFF87C0802A6900106 -S219028492000C880300002C000070418200143C800004388487C1 -S2190284A77438A0012C48000CC98001000C7C0803A63821000808 -S2190284BC4E8000203D200003816935805463103A7C63582E4E03 -S2190284D18000203D200003816935805463103A7C83592E4E809B -S2190284E600209421FFF87C0802A69001000C3D200000392932F4 -S2190284FB00816900185464063E806B0000800B000C7C0803A6B8 -S2190285104E8000218001000C7C0803A6382100084E80002094C3 -S21902852521FFF87C0802A69001000C3D2000003929320081697E -S21902853A0018806B0000800B00107C0803A64E800021800100EA -S21902854F0C7C0803A6382100084E8000209421FFF87C0802A6B0 -S2190285649001000C3D20000039293200816900187C651B788077 -S2190285796B0000800B0014388000007C0803A64E800021800187 -S21902858E000C7C0803A6382100084E8000209421FFF87C080217 -S2190285A3A69001000C480000158001000C7C0803A63821000801 -S2190285B84E8000209421FFE87C0802A693A1000C93C1001093BA -S2190285CDE100149001001C3FC00003817E38503D2000032C0BD0 -S2190285E20000380000003BBE3850900935847C7F1B7841820021 -S2190285F7187D635B7848000055801E38502C0000004082002CC0 -S21902860C813F00003C007D82913D000460001008901F000093CB -S219028621FE3850386000034800092538600003480008B5800185 -S219028636001C7C0803A683A1000C83C1001083E100143821008A -S21902864B184E8000209421FFF87C0802A69001000C3D20000338 -S219028660816935842C0B0000408200183D2000038009385039A0 -S2190286754938507C0300004182000C3860000048000024800A3C -S21902868A0004916938509003000038600003480008B538600083 -S21902869F0348000845386000018001000C7C0803A63821000873 -S2190286B44E8000203D200003800938503120FFFF7C6901104EB8 -S2190286C98000209421FFF87C0802A69001000C2C03000041828E -S2190286DE00483D400003812A35883929FFFF2C090000912A35CB -S2190286F388418100683D2000003929320081690018380000008E -S219028708900A3588806B0000800B0014388000057C0803A64E3C -S21902871D8000214800003C3D600003812B3588392900012C097A -S2190287320001912B3588408200243D20000039293200816900F0 -S2190287471838800004806B0000800B00147C0803A64E8000219C -S21902875C8001000C7C0803A6382100084E8000209421FFF87CD0 -S2190287710802A69001000C3D2000003929320081690018806BC1 -S2190287860000800B00107C0803A64E8000218001000C7C08030C -S21902879BA6382100084E8000209421FFC87C0802A692C10010C2 -S2190287B092E10014930100189321001C9341002093610024930B -S2190287C581002893A1002C93C1003093E100349001003C2C0466 -S2190287DA000D418201CC3D600003814B358C3D20000439299462 -S2190287EF447C8951AE2C04000A394A0001914B358C3F40000349 -S2190288044182000C2C0A00644082019C3D20000039293200831C -S219028819C900187EE000A67EE0BB7839200000512004207C0063 -S21902882E01243C600003386389A84BFFFD653D2000033AC9206F -S219028843E8807E0000813E000C388000247D2803A63B600000A3 -S2190288583BE0004F4E800021807E0000813E000C3880004F7D5E -S21902886D2803A64E800021801A358C7C1B0000408000703D20B0 -S21902888200043D6000033B0994443B2B20E87D38D8AE807E0073 -S219028897005520E13E7F9900AE817E000C7F84E3787D6803A674 -S2190288AC5529073E7FB948AE3B7B00014E800021807E0000819A -S2190288C13E000C7FA4EB787D2803A64E800021801A358C7F9F15 -S2190288D6E214579F063E7C1B00007FBFEA1457BF063E4180FF69 -S2190288EBA8807E0000813E000C388000237D2803A64E800021E8 -S219028900807E0000813E000C57E0E13E7C9600AE7D2803A64EE0 -S219028915800021807E0000813E000C57E0073E7C9600AE7D28FB -S21902892A03A64E800021807E0000813E00107D2803A64E8000B0 -S21902893F215460063E2C00002B9861000841820038386100080F -S21902895438800001480014392C03000040820014880100082CF7 -S21902896900002D4082FFC44BFFFED43D200000392932003800FB -S21902897E0001900900443D200003380000009009358C3C600071 -S21902899303386389A84BFFFCB97C0000A652E004207C000124E1 -S2190289A88001003C7C0803A682C1001082E100148301001883E0 -S2190289BD21001C83410020836100248381002883A1002C83C1B5 -S2190289D2003083E10034382100384E8000209421FFE87C080220 -S2190289E7A693A1000C93C1001093E100149001001C7CBF2B7817 -S2190289FC7FE0FB782C0000007C7D1B787C9E23783BFFFFFF41A7 -S219028A11820024889E00007FA3EB784BFFFD897FE0FB782C002A -S219028A2600003BDE00013BFFFFFF4082FFE48001001C7C080319 -S219028A3BA683A1000C83C1001083E10014382100184E8000201E -S219028A509421FFE87C0802A693A1000C93C1001093E100149086 -S219028A6501001C7CBF2B787FE0FB782C0000007C7D1B787C9E56 -S219028A7A23783BFFFFFF418200247FA3EB784BFFFCE57FE0FB1C -S219028A8F782C000000987E00003BDE00013BFFFFFF4082FFE41A -S219028AA48001001C7C0803A683A1000C83C1001083E1001438B8 -S219028AB92100184E8000209421FF909081000C90A1001090C187 -S219028ACE001490E100189101001C9121002091410024386000E1 -S219028AE300382100704E8000209421FFF87C0802A69001000C4B -S219028AF8386000004BFFFBD13D600004380000207C0903A63D50 -S219028B0D2000038149385C396B1B983D000003392000007C0956 -S219028B22502E7C09592E392900044200FFF47D6A5B783D2000FB -S219028B37038169385C800B0094900A0100812B0090912A0104EB -S219028B4C800B0080900A0108812B0088912A010C800B008C90BC -S219028B610A0110812B0084912A01143D4000033D600003800B32 -S219028B7635843D2000042C00000039291B98912A358041820055 -S219028B8B183800000090083584386000404BFFF9294BFFFAB5F0 -S219028BA0386000404BFFF91D4BFFFAA93D200003906938608023 -S219028BB501000C7C0803A6382100084E8000209421FFF87C08EB -S219028BCA02A69001000C380000207C0903A63D20000381493862 -S219028BDF5C3D600004396B1B98392000007C09582E7C09512EBE -S219028BF4392900044200FFF47D6A5B783D2000038169385C80B2 -S219028C090A0100900B0094812A0104912B0090800A0108900BEB -S219028C1E0080812A010C912B0088800A0110900B008C812A0150 -S219028C3314912B0084386000014BFFFA918001000C7C0803A6A9 -S219028C48382100084E800020386000004E8000203D20000339A2 -S219028C5D298C503D400003912A35643D600003396B8D903D2064 -S219028C720003916935603D4000033D600003394A8AEC914B352A -S219028C876C3D20000339298BC43D600003912B35684E8000206D -S219028C9C9421FFF07C0802A693C1000893E1000C900100143D2E -S219028CB1200003800935902C000000408200BC380000019009BA -S219028CC63590480055293D2000003BC93200813E00343860FFEA -S219028CDBFF7D2803A64E800021813E00347C7F1B783860FFFD2C -S219028CF07D2803A64E800021815E00143D200003392989E0917C -S219028D052A00043D6000036FE0FFFF396B8A506800FFFE3D20F7 -S219028D1A0003916A0008392987A43100FFFF7CE80110912A004B -S219028D2F0C3D600003301FFFFF7D00F910396B876C3D200003B2 -S219028D447CE04039916A001039298AC0912A0014418200148160 -S219028D593E00347FE3FB787D2803A64E800021801E0030386014 -S219028D6E00007C0803A64E800021800100147C0803A683C100C7 -S219028D830883E1000C382100104E8000209421FFF87C0802A62D -S219028D989001000C3D20000039293200800900402C00000041FB -S219028DAD82000C7C0803A64E8000218001000C7C0803A63821ED -S219028DC200084E8000207FE000084E8000209421FFD87C080238 -S219028DD7A6936100149381001893A1001C93C1002093E100244A -S219028DEC9001002C7C9D23787C7C1B7838000054981D00007FAF -S219028E018326704BFFDBAD9C7D00017F83E3784BFFDBA17FBFEF -S219028E16EB789C7F0001386000044BFFDB919C7F0001386000BB -S219028E2B404BFFDB859C7F00013BA0003A9FBF000138600040D9 -S219028E404BFFF6813B810008906100083BFF00017FE4FB787F08 -S219028E5583E37838A0000438C000004BFFE0097C7F1B783B60F3 -S219028E6A003B9B7F0000386000004BFFDB3D9C7F0001386000E9 -S219028E7F014BFFDB319C7F00019FBF0001386000014BFFF631FB -S219028E94906100083BFF00017FE4FB787F83E37838A000043847 -S219028EA9C000004BFFDFBD7C7F1B7838000000981F00019B7F6F -S219028EBE00008001002C7C0803A6836100148381001883A10086 -S219028ED31C83C1002083E10024382100284E8000202C030001DC -S219028EE84182002028030001418000502C030002418200242C0A -S219028EFD030003418200304800003C3C0002004C00012C7C1099 -S219028F128BA64C00012C480000283C0004004C00012C7C108B59 -S219028F27A64C00012C480000143C000C004C00012C7C108BA635 -S219028F3C4C00012C7C708AA654630FFE4E8000202C0300014161 -S219028F5182002028030001418000682C030002418200202C03CA -S219028F66000341820028480000543C0002007C0004AC7C188BDC -S219028F7BA6480000443D6004007C0004AC7D788BA64800003439 -S219028F90380000807C0903A639200000612010003D600E007CCE -S219028FA50004AC7D398BA67D788BA67C198BA67D788BA63929A5 -S219028FBA00104200FFE07C788AA654630FFE4E8000203D6000F7 -S219028FCF0338000001900B35743D200003800938583D600003ED -S219028FE42C000000396B90A83D20000391693594418200A83D9E -S219028FF9400003800A385828000003408100307080000340822E -S21902900E002870600003408200208003000038630004900400B3 -S21902902300812A3858388400043929FFFC4800005C3D60000395 -S219029038800B38582800000140810034708000014082002C7094 -S21902904D60000140820024A003000038630002B0040000812B20 -S2190290623858388400023929FFFE912B38584800002088030006 -S219029077003863000198040000812A3858388400013929FFFF4D -S21902908C912A3858800A38582C0000004082FF643D200003387A -S2190290A1000000900935743D20000338000000900935944E80A9 -S2190290B600209421FFE87C0802A69381000893A1000C93C10006 -S2190290CB1093E100149001001C7C601B787CBC2B787C83237860 -S2190290E03FA000037C040378939D38584BFFFEE1807D38587CA5 -S2190290F563E0508001001C7C0803A68381000883A1000C83C182 -S21902910A001083E10014382100184E8000209421FFE87C080240 -S21902911FA69381000893A1000C93C1001093E100149001001C99 -S2190291347CBC2B783FA00003939D38584BFFFE8D807D38587CC4 -S21902914963E0508001001C7C0803A68381000883A1000C83C12D -S21902915E001083E10014382100184E800020386000004E8000A8 -S21902917320386000004E800020386000004E8000209421FFF010 -S2190291887C0802A693C1000893E1000C900100143D200003803E -S21902919D0938682C000000418200603FE000033BC000007D40E4 -S2190291B200A67D40537839200000512004207C000124817F38AC -S2190291C768800B0014808B0018901F386893CB00187C0000A67B -S2190291DC514004207C000124812B000C80AB0010806B00007DC6 -S2190291F12803A64E800021801F38682C0000004082FFB0800145 -S21902920600147C0803A683C1000883E1000C382100104E800018 -S21902921B209421FFF87C0802A69001000C4BFFFF5D8001000C6F -S2190292307C0803A6382100084E800020906900003800000090E5 -S21902924589000490A90010900900189128000090C9000890E9F3 -S21902925A000C900900144E800020812300002C090000418200B5 -S21902926FF8810300043809FFFF28000039418100E83D60000379 -S219029284396B21005400103A7D4B002E3D200003392921007D15 -S2190292994A4A147D4903A64E8004203D20FF0061290200A169BE -S2190292AE00007C0006AC556B063E38000000600080007C004698 -S2190292C3307D600378540B043EB16900007C0006AC4800009046 -S2190292D83D20FF0061290240A16900007C0006AC556B063E38DE -S2190292ED000000600080007C0046307D600378540B043EB16980 -S21902930200007C0006AC4800005C3D20FF0061290220A169006B -S219029317007C0006AC556B063E38000000600080007C004630FE -S21902932C7D600378540B043EB16900007C0006AC480000283D37 -S21902934120FF0061290940800900007C0006AC540004DE550BD1 -S21902935668247C005B78900900007C0006AC800300003D200079 -S21902936B03394932405408103A7C0A402E3D20000239295DEC4B -S2190293807C004800418200187C0A402E3D20000339299E087C5A -S2190293950048004C820020800300083D6000037C0A412E8143A2 -S2190293AA0010396B332C3D2000037D4B412E392934187C694129 -S2190293BF2E4E8000207C631B794D8200203803FFFF280000397A -S2190293D47C0803784D8100203D600003396B21E85500103A7D27 -S2190293E94B002E3D200003392921E87D4A4A147D4903A64E80C2 -S2190293FE04203D20FF0061290014816900007C0006AC3C008061 -S219029413007C0044307D6B0078916900007C0006AC4E800020D7 -S2190294283D20FF0061290200A00900007C0006AC7000FFF754AF -S21902943D00043EB00900007C0006AC4E8000203D20FF00612916 -S2190294520200A00900007C0006AC7000FFFB5400043EB009006C -S219029467007C0006AC4E8000203D20FF0061290240A0090000FC -S21902947C7C0006AC7000FFFB5400043EB00900007C0006AC4E71 -S2190294918000203D20FF0061290220A00900007C0006AC7000D0 -S2190294A6FFF75400043EB00900007C0006AC4E8000203D20FFED -S2190294BB0061290220A00900007C0006AC7000FFFB5400043E12 -S2190294D0B00900007C0006AC4E8000203D20FF006129094080FC -S2190294E50900007C0006AC5400066E900900007C0006AC4E80D7 -S2190294FA00203D20FF0061290948816900007C0006AC3943FF6C -S21902950FE53C0080007C0054307D6B0078916900007C0006AC17 -S2190295244E8000207C631B794D8200203803FFFF280000397CC5 -S2190295390803784D8100203D600003396B22D05500103A7D4B08 -S21902954E002E3D200003392922D07D4A4A147D4903A64E8004B9 -S219029563203D20FF0061290014816900007C0006AC3C008000FE -S2190295787C0044307D6B0378916900007C0006AC4E8000203D31 -S21902958D20FF0061290200A00900007C0006AC60000008B0091F -S2190295A200007C0006AC4E8000203D20FF0061290200A0090000 -S2190295B7007C0006AC60000004B00900007C0006AC4E80002031 -S2190295CC3D20FF0061290240A00900007C0006AC60000004B070 -S2190295E10900007C0006AC4E8000203D20FF0061290220A00998 -S2190295F600007C0006AC60000008B00900007C0006AC4E80000E -S21902960B203D20FF0061290220A00900007C0006AC60000004E0 -S219029620B00900007C0006AC4E8000203D20FF006129094080AA -S2190296350900007C0006AC60000080900900007C0006AC4E806D -S21902964A00203D20FF0061290948816900007C0006AC3943FF1A -S21902965FE53C0080007C0054307D6B0378916900007C0006ACC3 -S2190296744E8000207C631B794D8200203803FFFF280000397C74 -S2190296890803784D8100203D600003396B23B85500103A7D4BCE -S21902969E002E3D200003392923B87D4A4A147D4903A64E80047F -S2190296B3203D20FF0061290010816900007C0006AC3C008000B1 -S2190296C87C0044307D6B0378916900007C0006AC4E8000203DE0 -S2190296DD20FF0061290200A00900007C0006AC60000080B00956 -S2190296F200007C0006AC4E8000203D20FF0061290200A00900AF -S219029707007C0006AC60000040B00900007C0006AC4E800020A3 -S21902971C3D20FF0061290240A00900007C0006AC60000080B0A2 -S2190297310900007C0006AC4E8000203D20FF0061290220A00946 -S21902974600007C0006AC60000080B00900007C0006AC4E800044 -S21902975B203D20FF0061290220A00900007C0006AC6000004053 -S219029770B00900007C0006AC4E8000203D20FF006129094C814C -S2190297856900007C0006AC3943FFE53C0080007C0054307D6B2D -S21902979A0378916900007C0006AC4E8000207C8723787C631B8A -S2190297AF794D8200203803FFFF280000397C0803784D810020AF -S2190297C43D600003396B24A05500103A7D4B002E3D2000033953 -S2190297D92924A07D4A4A147D4903A64E8004203C0080007C00C9 -S2190297EE44303D60FF00616B0018808B00007C0006AC7C840032 -S219029803787CEAFE707D493A787D2950507D29FE707C800378B4 -S2190298187C0048787C8948387D240378908B00007C0006AC4EC0 -S21902982D8000207C8823787C631B794D8200203803FFFF28001D -S21902984200394D8100203D600003396B25885400103A7D4B008C -S2190298572E3D200003392925887D4A4A147D4903A64E800420D2 -S21902986C3D20FF0061290200A08900007C0006AC5484063E384D -S219029881000000600080007C0046307C8003785404043EB089AF -S21902989600007C0006AC4E8000203D20FF0061290240A0890049 -S2190298AB007C0006AC5484063E38000000600080007C0046304D -S2190298C07C8003785404043EB08900007C0006AC4E8000203DE9 -S2190298D520FF0061290220A08900007C0006AC5484063E380001 -S2190298EA0000600080007C0046307C8003785404043EB0890046 -S2190298FF007C0006AC4E8000203D20FF00612909408009000079 -S2190299147C0006AC540004DE550B68247C005B78900900007C83 -S2190299290006AC4E800020386000014E800020386000014E8094 -S21902993E00209421FFF87C0802A69001000C4BFFC541800100A7 -S2190299530C7C0803A6382100084E8000203C00FE0060000100D5 -S2190299687C0903A64E8004209421FFF87C0802A69001000C4B03 -S21902997DFFFFE5386000008001000C7C0803A6382100084E806A -S2190299920020386000004E8000209421FFE87C0802A693A10017 -S2190299A70C93C1001093E100149001001C7C7F1B7838600000D9 -S2190299BC3BA00001380000002C1FFFFE41820040418100102C32 -S2190299D11FFFFD4182004C480000502C1FFFFF408200483D2008 -S2190299E60003812935982C0900003BA9FFFF4181003C7D3D4BD1 -S2190299FB78408200343BA0FFFD4800002C3D20000039293200A6 -S219029A103D6000039069001893EB3598480000143BE00000487F -S219029A250000083BFF0001380000012C000000418200803D20DD -S219029A3A00003BC93200813E00182C090000418200188069000A -S219029A4F0080090014388000047C0803A64E8000213D20000425 -S219029A64392994A857E028347C004A143D2000032C03000090BC -S219029A791E001893E93598813E00184182001C8069000080092A -S219029A8E0014388000057C0803A64E8000214800001880690086 -S219029AA30080090014388000047C0803A64E8000217FA3EB78AD -S219029AB88001001C7C0803A683A1000C83C1001083E100143894 -S219029ACD2100184E80002039400001380000002C03FFFE4182B5 -S219029AE20040418100102C03FFFD4182004C480000502C03FF56 -S219029AF7FF408200483D2000038129359C2C0900003949FFFFBA -S219029B0C4181003C7D2A4B78408200343940FFFD4800002C3DB9 -S219029B21200000392932003D60000390090014906B359C480013 -S219029B360014386000004800000838630001380000012C000016 -S219029B4B00418200283D200004392994A8546028343D60000067 -S219029B607C004A14396B32003D200003900B00149069359C7DE3 -S219029B754353784E8000204E8000204E8000209421FFF87C08CC -S219029B8A02A69001000C3D600000392B320081290018800B32C8 -S219029B9F002C0000134082002038000014900B32008069000087 -S219029BB480090014388000057C0803A64E8000218001000C7C16 -S219029BC90803A6382100084E8000209421FFE87C0802A693E144 -S219029BDE00149001001C3D20000039293200816900183800007F -S219029BF30090010008812B0000800B00187C651B787C8623785D -S219029C087D234B78388100087C0803A64E800021800100087CFB -S219029C1D7F1B782C000000418200103D200003806938704800E1 -S219029C3201917FE3FB788001001C7C0803A683E1001438210014 -S219029C47184E8000209421FFE87C0802A693A1000C93C100108F -S219029C5C93E100149001001C380000407C0903A63D2000003D77 -S219029C7160000339293200396B9994394000007D69512E394AAE -S219029C8600044200FFF83D2000043D600003392994A8396B99A9 -S219029C9B9439000000550A283438080001390000087D0903A674 -S219029CB07D69512E394A00044200FFF87C0803782C08000240FE -S219029CC581FFDC3FA0000038000013901D32003D6000033BBD86 -S219029CDA3200396B3240917D00043D200000392930003D600088 -S219029CEF03913D0008396B9960917D00403D20000339299970CA -S219029D043D600003913D0010396B9940917D00483D2000033959 -S219029D1929999C3D600003913D0030396B9AD43D400003917D92 -S219029D2E0034394A9B7C3D200003915D002039299B80913D0092 -S219029D431C3860FFFE4BFFFC553860FFFE4BFFFD85380000001F -S219029D58901D0024901D0028901D004C3D200003901D004439C6 -S219029D6D2985BC913D008C8001001C7C0803A683A1000C83C1D8 -S219029D82001083E10014382100184E8000207C8423794182007F -S219029D97243884FFFF7C0320AE2C0000034082000C38600001EF -S219029DAC4E8000202C0400004082FFE4386000004E80002094BE -S219029DC121FFF87C0802A69001000C7C631B793D200003380991 -S219029DD69DF841820008800300943D200000392932008129005F -S219029DEB8C7C0303787D2803A64E8000218001000C7C0803A6DF -S219029E00382100084E8000209421FFF07C0802A693C100089338 -S219029E15E1000C900100143D200000800932007C7F1B782C00CD -S219029E2A0014396932007C9E23783860FFFF4082001C812B005F -S219029E3F183880000680690000800900147C0803A64E8000218F -S219029E547C1F18004082001C7FE3FB787FC4F3784BFFFD717CAA -S219029E69601B797C030378408200287FE3FB787FC4F3784BFF38 -S219029E7EBF6D7C601B787C09FE707D2302787C6348507C63FECC -S219029E93707C031838800100147C0803A683C1000883E1000CF6 -S219029EA8382100104E800020280500037C691B78408100107C52 -S219029EBD801B78700B0003418200302C05000038A5FFFF4D822A -S219029ED20020880400002C0500009809000038840001392900D7 -S219029EE70138A5FFFF4082FFE84E8000202805000F7C6B1B7836 -S219029EFC408100388004000038A5FFF0900B0000852400042891 -S219029F1105000F952B000484040004940B000485240004952BC0 -S219029F26000438840004396B00044181FFD02805000340810031 -S219029F3B208004000038A5FFFC28050003900B00003884000403 -S219029F50396B00044181FFE82C0500007D695B7838A5FFFF4D92 -S219029F65820020880400002C05000098090000388400013929C1 -S219029F7A000138A5FFFF4082FFE84E800020280500037C691B28 -S219029F8F784081000C70600003418200282C05000038A5FFFFA7 -S219029FA44D8200202C050000988900003929000138A5FFFF40E2 -S219029FB982FFF04E8000205484063E5480402E7C00237854095B -S219029FCE801E7C004B787C6B1B782805000F40810024900B0064 -S219029FE300940B000438A5FFF0940B00042805000F940B000471 -S219029FF8396B00044181FFE4280500034081001838A5FFFC28F7 -S21902A00D050003900B0000396B00044181FFF02C0500007D6924 -S21902A0225B784D8200207CA903A698890000392900014200FFCD -S21902A037F84E8000209421FFA87C631B79394100087D47537847 -S21902A04C39000000408200143800003098010008394100094815 -S21902A0610000247C032B967D2029D67D2918507D6648AE7C037D -S21902A0760379996A0000394A00014082FFE47C0A3800418200A5 -S21902A08B287D0343787CE93B788C0AFFFF386300017C0A480040 -S21902A0A098040000388400014082FFEC7C681B78380000009857 -S21902A0B50400007D034378382100584E8000209421FF987C08E1 -S21902A0CA02A67D80002692410030926100349281003892A10007 -S21902A0DF3C92C1004092E10044930100489321004C93410050DF -S21902A0F4936100549381005893A1005C93C1006093E1006490F0 -S21902A10901006C9181002C7C9923788BB900003AE100082C1D2F -S21902A11E00007EF2BB787C7B1B787CB82B783BC000003AA0004C -S21902A133003B390001418204802C1D00254082043C8BB90000A0 -S21902A1483B3900012C1D002D3AC000003BE00000408200108B9E -S21902A15DB900003B3900013AC000012C1D0030408200148BB92A -S21902A17200003B8000013B390001480000083B800000381DFF41 -S21902A187D0280000094181003C7FA3EB787F24CB787FE9FB7877 -S21902A19C1D29000A3929FFD07D291A1488640000388400013871 -S21902A1B103FFD0280000094081FFE47D3F4B787C9923787C7DC3 -S21902A1C61B782C1D002E4082003C8BB900003B390001381DFF68 -S21902A1DBD0280000093B9C0001418100247F24CB7888640000D7 -S21902A1F0388400013803FFD0280000094081FFF07C7D1B787CA3 -S21902A2059923782C1D006C3A8000004082000C8BB900003B3914 -S21902A21A0001381DFFA8280000203A790001418101F83D6000D7 -S21902A22F03396B26A85400103A7D4B002E3D200003392926A87A -S21902A2447D4A4A147D4903A64E800420386000307F6803A63BE5 -S21902A2598000013BE000084E800021386000787F6803A64E80E8 -S21902A26E0021897800005569063E38090001280000084181007C -S21902A2831C801800085529103A396B00017C604A14997800004B -S21902A29848000030280900074181001C807800043800000839A7 -S21902A2AD23000498180000913800044800001080780004380362 -S21902A2C20004901800042C1D0064806300004182002841810093 -S21902A2D7102C1D00584182004C480000602C1D00704182003453 -S21902A2EC2C1D00784182002C4800004C2C0300004080000C3ADD -S21902A30180002D7C6300D03CC0000338C626703881000838A0B8 -S21902A316000A480000203CC0000338C6267C4800000C3CC000CA -S21902A32B0338C626903881000838A000104BFFFD057C751B78E6 -S21902A3407E579378480000EC897800005569063E380900012880 -S21902A3550000084181001C801800085529103A396B00017C601D -S21902A36A4A149978000048000030280900074181001C807800E2 -S21902A37F04380000083923000498180000913800044800001049 -S21902A39480780004380300049018000482E300007EE3BB784885 -S21902A3A90003C97C751B7848000080897800005569063E38093C -S21902A3BE0001280000084181001C801800085529103A396B0068 -S21902A3D3017D404A149978000048000030280900074181001CB3 -S21902A3E88158000438000008392A000498180000913800044810 -S21902A3FD00001081580004380A000490180004886A00037F6889 -S21902A41203A63BDE00014E8000214800018C3860003F7F6803E6 -S21902A427A63BDE00014E8000217F55F8503134FFFF7D294910EC -S21902A43C381AFFFF7C0048782F9C00007F4948387D3A03782C07 -S21902A451140000419E00243BA00030418200207E83A3787F68E7 -S21902A46603A63BDE00013A8000004E800021480000083BA00043 -S21902A47B202C1400002E1600003AD5FFFF7F8000264092003CE1 -S21902A4907F40D3782C0000003B5AFFFF4081002C7F5FD3787F52 -S21902A4A5A3EB787F6803A63BDE00014E8000217FE0FB782C00FE -S21902A4BA00003BFFFFFF4181FFE47FFAFB787F880120418200D2 -S21902A4CF147E83A3787F6803A63BDE00014E8000217EA0AB7867 -S21902A4E42C0000007ED5B378408100547EBDAB787EFCBB788B07 -S21902A4F9FC00007F6803A67FE3FB783B9C00013BDE00014E8026 -S21902A50E00212C1F000A408200143860000D7F6803A63BDE0097 -S21902A523014E8000217FA0EB782C0000003BBDFFFF4181FFC403 -S21902A5387F97E3787FB5EB78419200687F40D3782C0000003B53 -S21902A54D5AFFFF408100587F5FD378386000207F6803A63BDEF7 -S21902A56200014E8000217FE0FB782C0000003BFFFFFF4181FFF6 -S21902A577E4480000307FA3EB787F6803A63BDE00013A79000189 -S21902A58C4E8000212C1D000A408200143860000D7F6803A63B2B -S21902A5A1DE00014E8000218BB900007E799B782C1D0000408277 -S21902A5B6FB887FC3F3788001006C8181002C7C0803A68241004E -S21902A5CB30826100348281003882A1003C82C1004082E1004469 -S21902A5E0830100488321004C8341005083610054838100588378 -S21902A5F5A1005C83C1006083E100647D808120382100684E80B4 -S21902A60A00203D2000038169387438000000986B0000396B003F -S21902A61F0191693874980B00004E8000209421FF707C0802A697 -S21902A63493A1008493C1008893E1008C900100943D6000039021 -S21902A649A10010906B387438A100083BA1009838000002396075 -S21902A65E00003C60000390A100789081000C90C1001490E100A5 -S21902A673189101001C91210020914100249801007099610071C9 -S21902A68893A100743863A60C38A100704BFFFA31800100947C72 -S21902A69D0803A683A1008483C1008883E1008C382100904E80D5 -S21902A6B200209421FF707C0802A693A1008493C1008893E10014 -S21902A6C78C9001009490A100109081000C7C641B7890610008FC -S21902A6DC38A100083BA1009838000001396000003C600003900C -S21902A6F1A1007890C1001490E100189101001C912100209141F4 -S21902A7060024980100709961007193A100743863A96838A10072 -S21902A71B704BFFF9A9800100947C0803A683A1008483C1008810 -S21902A73083E1008C382100904E8000209421FFF87C0802A690DE -S21902A74501000C7C601B787C8523783C6000033863A9687C0415 -S21902A75A03784BFFF9698001000C7C0803A6382100084E8000D3 -S21902A76F2088030000392000004800000C880300003929000188 -S21902A7842C000000386300014082FFF07D234B784E8000207C73 -S21902A799691B78480000102C030000386000004D8200208869A9 -S21902A7AE000088040000388400017C030000392900014182FFA2 -S21902A7C3E07C6018504E800020880400007C691B78480000100C -S21902A7D89803000088040000386300012C000000388400014079 -S21902A7ED82FFEC38000000980300007D234B784E8000207C6BD8 -S21902A8021B78480000102C030000386000004D820020886B00A6 -S21902A81700396B00013803FFBF280000194181000C380300201D -S21902A82C5403063E89240000388400013809FFBF28000019418A -S21902A84181000C380900205409063E7D204B787C0300004182CA -S21902A856FFB47C6018504E8000207CA02B797C691B787C090341 -S21902A86BA640820014386000004E8000207C6018504E8000209D -S21902A8808869000088040000388400017C030000392900014060 -S21902A89582FFE42C030000418200084200FFE0386000004E80C1 -S21902A8AA00207CA02B797C6B1B787C0903A64082001838600098 -S21902A8BF004E8000207C6018504E80002042400050886B000098 -S21902A8D4396B00013803FFBF280000194181000C38030020540C -S21902A8E903063E89240000388400013809FFBF280000194181A0 -S21902A8FE000C380900205409063E7D204B787C0300004082FF90 -S21902A913B42C0300004082FFB4386000004E8000204800002CD6 -S21902A9288923000088040000388400017C0900003863000141BC -S21902A93D8200148803FFFF8864FFFF7C6300504E8000207CA0BC -S21902A9522B782C00000038A5FFFF4082FFCC386000004E80004C -S21902A967209421FFE87C0802A69381000893A1000C93C100102C -S21902A97C93E100149001001C3D200003800937E87C7D1B782CCA -S21902A991000000408200743D200000392932008009003438602E -S21902A9A6FFFF7C0803A67D3E4B783BE000004E8000217C7C1BCF -S21902A9BB78813E00347FE3FB787D2803A64E800021813E001430 -S21902A9D07FA4EB78806900008009000C7C0803A64E8000213714 -S21902A9E5FF00014081FFD43D20000039293200800900347F8312 -S21902A9FAE3787C0803A64E800021480000483D20000039293249 -S21902AA0F00816900142C0B00004182001C806B0000800B000C95 -S21902AA247FA4EB787C0803A64E8000214800001C816900187F8F -S21902AA39A4EB78806B0000800B000C7C0803A64E8000218001DB -S21902AA4E001C7C0803A68381000883A1000C83C1001083E100AF -S21902AA6314382100184E8000209421FFF07C0802A693E1000C14 -S21902AA78900100143D20000039293200816900147C7F1B782C74 -S21902AA8D0B00004082000881690018806B0000800B00107C08CC -S21902AAA203A64E800021987F0000800100147C0803A683E100C3 -S21902AAB70C382100104E8000209421FFE07C0802A69361000C60 -S21902AACC9381001093A1001493C1001893E1001C900100243D14 -S21902AAE1200003800937E87C7D1B782C000000408200883D202F -S21902AAF6000039293200800900343860FFFF7C0803A67D3C4B2C -S21902AB0B783BE000004E8000217C7B1B78813C00347FE3FB785C -S21902AB207D2803A64E800021817C00147FA4EB78806B000080DA -S21902AB350B001C7C0803A64E8000217C7E1B7941820010881DBB -S21902AB4A00002C0000004082004C37FF00014081FFC03D2000A1 -S21902AB5F0039293200800900347F63DB787C0803A64E80002138 -S21902AB74480000643D20000039293200816900142C0B000041B2 -S21902AB89820034806B0000800B001C7FA4EB7848000034817C69 -S21902AB9E00307FE3FB787D6803A63D200003380000019009379F -S21902ABB3E84E80002148000020816900187FA4EB78806B0000D4 -S21902ABC8800B001C7C0803A64E8000217C7E1B787FC3F37880F4 -S21902ABDD0100247C0803A68361000C8381001083A1001483C18A -S21902ABF2001883E1001C382100204E8000209421FFE87C080226 -S21902AC07A69381000893A1000C93C1001093E100149001001C96 -S21902AC1C3D200003800937E87C7D1B782C000000408200803DDD -S21902AC3120000039293200800900343860FFFF7C0803A67D3E18 -S21902AC464B783BE000004E8000217C7C1B78813E00347FE3FB4A -S21902AC5B787D2803A64E800021813E00142C0900004182001C41 -S21902AC708069000080090014388000077FA5EB787C0803A64E81 -S21902AC8580002137FF00014081FFC83D200000392932008009D9 -S21902AC9A00347F83E3787C0803A64E800021480000303D20001C -S21902ACAF0039293200812900142C0900004182001C806900003A -S21902ACC480090014388000077FA5EB787C0803A64E8000213D38 -S21902ACD920000039293200812900182C0900004182001C8069EC -S21902ACEE0000800900147FA5EB78388000077C0803A64E80006C -S21902AD03218001001C7C0803A68381000883A1000C83C10010B9 -S21902AD1883E10014382100184E8000209421FFD07C0802A69305 -S21902AD2D01001093210014934100189361001C9381002093A1CD -S21902AD42002493C1002893E1002C900100347C7D1B787CBE2BFF -S21902AD57787FBFEB783B6000003F2000033F8000033B4000008D -S21902AD6C813938102C09000041820020896900002C0B00004147 -S21902AD81820014380900019961000890193810480000647FC000 -S21902AD96FE707C1E005054000FFE7FE9EA78216900007D2B49A3 -S21902ADAB147C0B48394182003C386000324BFFFE4948000008C6 -S21902ADC03BDEFFCE2C1E000040810014386100084BFFFCF17C1E -S21902ADD57B1B794182FFE82C1B0000408200143860FFFF4800AE -S21902ADEA0180386100084BFFFC7D880100089B5F00007C03035B -S21902ADFF785400063E2C00000D4182007C418100282C00000892 -S21902AE14418200D4418100102C00000341820038480001142C06 -S21902AE2900000A41820058480001082C00002B418200E84181D3 -S21902AE3E00102C000024418200DC480000F02C00007F41820053 -S21902AE5398480000E47C1FE800408200183C6000033863273031 -S21902AE684BFFF84D3860FFFE480000F8987F00003BFF00013FD9 -S21902AE7D000003480000DC892100083F0000032C09000A40829D -S21902AE920010881835A02C00000D418200182C09000D40820007 -S21902AEA718881835A02C00000A4082000C9B410008480000A42E -S21902AEBC801C38082C000000418200143860000D4BFFFA9D38DD -S21902AED160000A4BFFFA958801000838600001981835A048002B -S21902AEE600847C1FE8003F0000034182006C801C38082C0000D0 -S21902AEFB004182001C386000084BFFFA65386000204BFFFA5DBA -S21902AF10386000084BFFFA553BFFFFFF480000407C1FE8004069 -S21902AF258200145463063E4BFFD1393860000048000034801C7B -S21902AF3A38082C0000004182000C886100084BFFFA21880100E1 -S21902AF4F083F000003981F00003BFF000188010008981835A094 -S21902AF644BFFFE08800100347C0803A6830100108321001483D0 -S21902AF794100188361001C8381002083A1002483C1002883E127 -S21902AF8E002C382100304E8000209421FFC07C0802A692410091 -S21902AFA3089261000C9281001092A1001492C1001892E1001C27 -S21902AFB89301002093210024934100289361002C9381003093FE -S21902AFCDA1003493C1003893E1003C900100447C9D23787C7CD6 -S21902AFE21B787D3DE0107D2949107D294BB87C1CE8507C0048DA -S21902AFF7787FA948387D3D03797CB62B78408101403E40000390 -S21902B00C2C16000041820014387227347C96E0504BFFF69948A7 -S21902B021000010387227347F84E3784BFFF6897FBEEB787F9D1B -S21902B036E3783BE000003E8000033EA000033E6000033B5EFFAD -S21902B04BF03AFD00103F0000033F6000033F2000037C1FF000E1 -S21902B060408000147C9DF8AE387827404BFFF6494800000C3815 -S21902B0757927484BFFF63D7FFCFE707C1CF8507C000E707C001B -S21902B08A02147C00F8502C0000014082000C387B274C4BFFF66F -S21902B09F1957801F7E7C1F02147C001E70540018387C00F850E5 -S21902B0B42C0000074082000C387B274C4BFFF5F53BFF00012CBE -S21902B0C91F000F4081FF907FBCEB787FDDF378387427504BFF1B -S21902B0DEF5D97EBEAB783BE000007C1FE8004080002C7C9CF88F -S21902B0F3AE3804FFE02000005E7C0001107C0003B87C0900F8B9 -S21902B1087C8000387129002E7C044B784800000838800020388C -S21902B11D7E27544BFFF5953BFF00012C1F000F4081FFBC38738D -S21902B13227584BFFF5817F5DD3797EFCBB784181FECC800100E0 -S21902B147447C0803A6824100088261000C8281001082A1001477 -S21902B15C82C1001882E1001C8301002083210024834100288322 -S21902B17161002C8381003083A1003483C1003883E1003C382134 -S21902B18600404E8000209421FFF87C0802A69001000C38A00032 -S21902B19B004BFFFDFD8001000C7C0803A6382100084E8000204B -S21902B1B09421FF607C0802A69361008C9381009093A1009493C4 -S21902B1C5C1009893E1009C900100A49081000C388100A83FA073 -S21902B1DA00033B800000380000013961000890810074837D3803 -S21902B1EF109061000890A1001090C1001490E100189101001C5E -S21902B204912100209141002498010070916100789B810071382E -S21902B2198100704BFFF5213C6000033863275C4BFFF48D939D10 -S21902B22E3810386100803880000838A000004BFFFAE9886100F5 -S21902B24380937D381068600059212000007C09011468630079D7 -S21902B258212300007C6919147C630378800100A47C0803A68355 -S21902B26D61008C8381009083A1009483C1009883E1009C382157 -S21902B28200A04E8000209421FFE87C0802A69381000893A1000A -S21902B2970C93C1001093E100149001001C7C9C23787CBD2B7867 -S21902B2AC7C7F1B783BC00000480000C857C0103A7FFD012E8859 -S21902B2C11F00003BDE000148000098881F00002C0000224082A1 -S21902B2D6008457C0103A7D60EA14812BFFFC7C09F800408200B6 -S21902B2EB0C3BFF000193EBFFFC893F0000692000227C0000D0C8 -S21902B3007D2900D055290FFE54000FFE7D2B00394182002C7F80 -S21902B315E3FB788D230001692000227C0000D07D2900D055292A -S21902B32A0FFE54000FFE7D2B00394082FFE47C7F1B78881F00DE -S21902B33F002C0000004082002C3C600003386327744BFFF36561 -S21902B354480000083BFF0001881F00002C0000004182004C2C44 -S21902B3690000204082FF6038000000981F00003BFF0001881FB6 -S21902B37E00002C0000004182002C2C000020408200187FE3FB15 -S21902B393788C0300012C0000204182FFF87C7F1B78881F00005B -S21902B3A82C0000004082FF0C3C6000033C80000380BD00009362 -S21902B3BDDC000038633688388436F8480000258001001C7C08C7 -S21902B3D203A68381000883A1000C83C1001083E1001438210055 -S21902B3E7184E8000209421FFD87C0802A6930100089321000C30 -S21902B3FC93410010936100149381001893A1001C93C1002093C6 -S21902B411E100249001002C7C7F1B787CBC2B787C9A23787F8341 -S21902B426E3784BFFF3497FFDFB787C1DD0007C7B1B7841820084 -S21902B43BC0809D00007F83E3787F65DB784BFFF4652C030000B2 -S21902B4504082009C807D00004BFFF3197C03D800408100847C17 -S21902B4651FD0003BC00001418200603F0000033F2000037C1D80 -S21902B47AF80041820044809F00007F83E3787F65DB784BFFF4C6 -S21902B48F212C0300004082002C2C1E00004182001880BD000001 -S21902B4A4387827887F84E3784BFFF2093BC00000809F00003838 -S21902B4B97927B04BFFF1F93BFF00107C1FD0004082FFB02C1E83 -S21902B4CE0000408200143C600003386327B44BFFF1D94800001B -S21902B4E3187FA3EB78480000143BBD00107C1DD0004082FF48DA -S21902B4F8386000008001002C7C0803A6830100088321000C8307 -S21902B50D410010836100148381001883A1001C83C1002083E1B5 -S21902B5220024382100284E8000209421FFE87C0802A69381009E -S21902B5370893A1000C93C1001093E100149001001C7C601B78A8 -S21902B54C3C6000037C9D23787C1F03787CBE2B78386327B84BD8 -S21902B561FFF1557C1FE800418200283F80000380BF000080DFBB -S21902B5760008387C27C07FC4F3784BFFF1353BFF00107C1FE82B -S21902B58B004082FFE48001001C7C0803A68381000883A1000CF9 -S21902B5A083C1001083E10014382100184E800020912300149804 -S21902B5B583000090A3000490C3000890E3000C910300104E8074 -S21902B5CA00209421FFB07C0802A691C1000891E1000C9201004A -S21902B5DF1092210014924100189261001C9281002092A10024F5 -S21902B5F492C1002892E1002C93010030932100349341003893D6 -S21902B60961003C9381004093A1004493C1004893E1004C9001CF -S21902B61E00547D344B787D1643783016FFFF7D20B1106A80006E -S21902B63301216000007C0B01147D2B00397C701B787C982378CE -S21902B6487CD133787CF53B787D5353783B4000013A40000041F8 -S21902B65D820008925600007C12A8007E3F8B78408000507EA932 -S21902B67203A67FEBFB7839000000812B00102C09000041820049 -S21902B6870891090000814B00042C0A000040820020800B00088A -S21902B69C2C0000004182000C2C0000024082000C812B000C9152 -S21902B6B1490000396B00184200FFC47CBD2B787C1D80004080BE -S21902B6C602043DC000033DE0000357BE103A7C9EC02E8804004F -S21902B6DB002C00002D4082014C396000007C0BA8008AE40001B4 -S21902B6F07E3F8B78392000003B7D0001408001147F9EC2143B69 -S21902B705200001881F00007C170000408200F0813F00102C0916 -S21902B71A000041820020800900002C00000041820014809F0085 -S21902B72F14386E27CC4BFFEF813B400000801F00042C0000004D -S21902B74441820080813C0000880900023BC900032C00003D41A5 -S21902B75982000C83DC00043BBD0001801F00082C000000418254 -S21902B76E00102C0000014182003C48000040809F000C7FC3F39B -S21902B7837838A0000038C00000480001992C030000408200246B -S21902B79880BF00147FC4F378386F27EC4BFFEF113B40000048CD -S21902B7AD00000C813F000C93C90000813F00103B7D000148007B -S21902B7C20034801F00082C000000418200102C000002418200A0 -S21902B7D71C48000020817F000C812B000039290001912B0000FB -S21902B7EC4800000C813F000C9329000039600001480000143936 -S21902B8012900017C09A8003BFF00184180FEFC2C0B00004082CE -S21902B81600A83C600003386328147EE4BB784BFFEE9148000052 -S21902B82B902C160000418200782C12000041820014386E27CC46 -S21902B8407E649B784BFFEE713B4000002C140000418200102C94 -S21902B8551400014182003C480000407C7EC02E7EC4B37838A00E -S21902B86A000038C00000480000B52C030000408200247C9EC0DE -S21902B87F2E386F27EC7E659B784BFFEE2D3B4000004800000C9B -S21902B8947C1EC02E901600003B7D00013A400001480000183C9A -S21902B8A9600003386328343B7D00014BFFEE013B4000007F7DC0 -S21902B8BEDB787C1D80004180FE0C7F43D378800100547C0803CE -S21902B8D3A681C1000881E1000C820100108221001482410018D6 -S21902B8E88261001C8281002082A1002482C1002882E1002C835E -S21902B8FD01003083210034834100388361003C8381004083A1A2 -S21902B912004483C1004883E1004C382100504E80002088030077 -S21902B9270038E000012C0000203900000A3980000040820010D1 -S21902B93C8C0300012C0000204182FFF8880300002C0000004161 -S21902B95182012C2C07000041820038880300002C000030408254 -S21902B966002C892300013809FFBF280000194181000C3809009D -S21902B97B205409063E2C0900784082000C39000010386300028E -S21902B9908943000038E00000392AFFD0380AFFBF2129000939F9 -S21902B9A52000007D29491420000005380000007C0001147D2BCD -S21902B9BA0379386300013920000040820010380AFF9F28000026 -S21902B9CF0541810008392000012C09000041820068392AFFD0A1 -S21902B9E45520063E280000094181000C7D2B4B78480000303874 -S21902B9F90AFF9F280000054181000C396AFFA94800001C380A9E -S21902BA0EFFBF200000057C0001107C0003B8392AFFC97C0B487B -S21902BA23387C0B40004080001C880300007D2C41D62C000000B5 -S21902BA387D895A144082FF184800003C2C0600004182002C8878 -S21902BA4D060000480000088C0600012C000000418200187C0A67 -S21902BA6200004082FFF0880600002C0000004082000C386000F7 -S21902BA77004E8000202C050000918400004182000890650000BF -S21902BA8C386000014E800020880300002C000020408200108CE2 -S21902BAA10300012C0000204182FFF88863000068690074200926 -S21902BAB600007D20491468600054214000007C0A01147D2B03B7 -S21902BACB794182001038000001900400004800003068690046B7 -S21902BAE0200900007D20491468600066214000007C0A01147C81 -S21902BAF50A4B794082000C386000004E80002091640000386086 -S21902BB0A00014E8000209421FFE07C0802A69361000C9381005C -S21902BB1F1093A1001493C1001893E1001C900100243D200004A0 -S21902BB3439699534800BFFD47C9C23782C0000007CDB3378410A -S21902BB4982000C3800000A4800012838000001B0099534880359 -S21902BB5E0000396B00022C0000002F85000041820018980B00C7 -S21902BB73008C030001396B00012C0000004082FFF0380000006C -S21902BB88980B0000396B0001409E00103D200003386928684892 -S21902BB9D00001C2C0500014182000C3800000A480000CC3D20BC -S21902BBB2000338692874880300002C00000041820018980B0002 -S21902BBC7008C030001396B00012C0000004082FFF03D200004EF -S21902BBDC3BA9951C38000000980B00007FA3EB78388000003868 -S21902BBF1A0000C4BFFE3953D600003812B35A83BFDFFEC380046 -S21902BC060001B13F0018B01F001AA01C0004392900012C0000E1 -S21902BC1B003BC00000912B35A893DF00144082000C38000045A8 -S21902BC30B01C00047F85E378387D0018388002057FA6EB78486D -S21902BC450033A92C0300004180002838000001901DFFEC3920C5 -S21902BC5AFFFF93DF0004913F001093DF000C93DF0008386000EA -S21902BC6F004800001038000009901B00003860FFFF800100243A -S21902BC847C0803A68361000C8381001083A1001483C10018835C -S21902BC99E1001C382100204E8000203D200004380000009009F9 -S21902BCAE9508386000004E8000209421FFC87C0802A692C1005C -S21902BCC31092E10014930100189321001C934100209361002446 -S21902BCD89381002893A1002C93C1003093E100349001003C7C3F -S21902BCED9923783B6000007C1BC8003D2000043BC995347C7AE9 -S21902BD021B787CBC2B78408001783BFEFFD43B0100083AE00014 -S21902BD17043AC00009813F000C2C0900004081005C7C1BC8503C -S21902BD2C7F890000809F02347F43D3784FFEE3827FA000265743 -S21902BD41BD07FE7FBD00D07C00E8787D3DE8387FBD03787FA587 -S21902BD56EB784BFFE159801F0234813F000C7C00EA147D3D48CD -S21902BD6B50901F0234913F000C7F7BEA147F5AEA14480000FC98 -S21902BD80801F0010280001FF408100F83800000190010008390C -S21902BD9520000091380004387F002C3880020538BF002038DFD5 -S21902BDAA00147F07C378480033697C631B794080002C813F00A5 -S21902BDBF04392900012C09000F913F000441810010801F000870 -S21902BDD42C00000040820044380000084800008CA81E00002C1B -S21902BDE900000340820064813F0008A97E0002392900017C0B3A -S21902BDFE48004082001C3863FFFC381E0004907F000C901F0247 -S21902BE1334917F0008907F0010A01F000AB2FE0000B01E00025F -S21902BE28387F002C3880000438BF002038DF0014480031B52CC3 -S21902BE3D0300004080003892DC00003860FFFF480000382C003E -S21902BE52000540820014A81E00023860FFFF901C0000480000A7 -S21902BE67203800000B901C00003860FFFF480000107C1BC80063 -S21902BE7C4180FEA07F63DB788001003C7C0803A682C100108257 -S21902BE91E10014830100188321001C8341002083610024838154 -S21902BEA6002883A1002C83C1003083E10034382100384E80009D -S21902BEBB203803FFFF2800000B3D2000033869287C4D8100204C -S21902BED03D600003396B29985400103A7D4B002E3D2000033924 -S21902BEE52929987D4A4A147D4903A64E8004203C600003386397 -S21902BEFA288C4E8000203C6000033863289C4E8000203C600002 -S21902BF0F03386328B04E8000203C600003386328D44E8000208E -S21902BF243C600003386328EC4E8000203C600003386329004E14 -S21902BF398000203C600003386329144E8000203C6000033863AD -S21902BF4E29244E8000203C600003386329384E8000203C600077 -S21902BF6303386329544E8000203C600003386329684E80002000 -S21902BF783C6000033863297C4E8000209421FFE87C0802A69385 -S21902BF8DA1000C93C1001093E100149001001C3D200003800969 -S21902BFA235B07C9F23782C0000004082007C480043113D200085 -S21902BFB70438699740800300042C00000540820018A0030016A7 -S21902BFCC2C00000040820050480043E5480000482C00000040AF -S21902BFE1820014480008D93800000A981F0000480000603FA005 -S21902BFF60004389D9D8438A000804800444D2C0300003BBD9D40 -S21902C00B843D2000033D60000393A93890906B35B04082000CE3 -S21902C02038600000480000303D400003816A38903D00000388F9 -S21902C0350B0000396B0001981F0000812835B0916A38903929D5 -S21902C04AFFFF912835B0386000018001001C7C0803A683A100B7 -S21902C05F0C83C1001083E10014382100184E8000209421FFE0FA -S21902C0747C0802A693A1001493C1001893E1001C900100243D4E -S21902C0892000003BA932007C7E1B783BE000644800002837FFB3 -S21902C09EFFFF40820010480000513BE0006448000014813D0084 -S21902C0B348386000647D2803A64E8000217FC3F3783881000882 -S21902C0C84BFFFEBD2C0300004182FFCC88610008800100247C88 -S21902C0DD0803A683A1001483C1001883E1001C382100204E803B -S21902C0F200209421FFE87C0802A693A1000C93C1001093E10032 -S21902C107149001001C3D2000043BA99E044800003080BE35B4D5 -S21902C11C7FE3FB787FA4EB784800443D7C631B7940810014801B -S21902C1311E35B47FBD1A147C030050901E35B4480041813FC012 -S21902C1460003801E35B42C000000418200303D2000043BE99718 -S21902C15B40801F00042C0000054082000C7FE3FB784800424D3A -S21902C170801F00042C0000004082FFA0480007413D2000003B5B -S21902C185C93200801E00443D2000042C00000039299E043D6093 -S21902C19A00033D4000033BE00000912B389493EA35B44182003A -S21902C1AF10386000004BFFDC0D93FE00448001001C7C0803A6FA -S21902C1C483A1000C83C1001083E10014382100184E8000209470 -S21902C1D921FFF07C0802A693E1000C900100143D600003812B9D -S21902C1EE38942C0400249889000039290001912B389440820047 -S21902C20310380000013D200003900938783FE00003801F3878BC -S21902C218688B0023212B00007D6959143140FFFF7D2A01107DB1 -S21902C22D2058394182001C3D400003392000013D6000033800B3 -S21902C2420000912A387C900B38803D600003812B35B439290087 -S21902C257012C090100912B35B44182002C3D2000038009387C63 -S21902C26C2C000000418200283D600003812B3880392900012C0C -S21902C281090003912B3880408200104BFFFE6938000000901FB7 -S21902C2963878800100147C0803A683E1000C382100104E800073 -S21902C2AB209421FFE87C0802A693A1000C93C1001093E1001463 -S21902C2C09001001C4800055D7C7D1B783C6000033C80000338E9 -S21902C2D5A000EC38842A9038632A884BFFE3D57FA3EB7848002F -S21902C2EA05A58001001C7C0803A683A1000C83C1001083E100DC -S21902C2FF14382100184E8000209421FFE87C0802A693A1000CA8 -S21902C31493C1001093E100149001001C480005017C7D1B783C5E -S21902C3296000033C80000338A000FE38842AA038632A884BFFE3 -S21902C33EE3797FA3EB78480005498001001C7C0803A683A1007E -S21902C3530C83C1001083E10014382100184E8000209421FFE8FB -S21902C3687C0802A69381000893A1000C93C1001093E1001490B5 -S21902C37D01001C7C7D1B787C9E23784BFFFD6D3D2000038009A9 -S21902C39235AC3D6000001FE0000A3B8B320048000014813C00F7 -S21902C3A748386000647D2803A64E8000217FA3EB787FC4F378C6 -S21902C3BC4BFFFBC97C631B79408200102C1F00003BFFFFFF404F -S21902C3D182FFD48001001C7C0803A68381000883A1000C83C1B1 -S21902C3E6001083E10014382100184E8000209421FF787C0802A2 -S21902C3FBA693C1008093E100849001008C7C8023782C000005CF -S21902C41090A1001090C1001490E100189101001C9121002091D0 -S21902C4254100249081000C3BC000004182002C280000054181A0 -S21902C43A00102C00000441820194480003482C000006418203C3 -S21902C44F082C0000074182030C480003343FE00003801F35B897 -S21902C4643D6000032C00000039200001912B35BC4082001448CB -S21902C4790011C1907F35B82C03000041820308811F35B838080F -S21902C48EFFFF28000039418102F83D600003396B2AB0540010F5 -S21902C4A33A7D4B002E3D20000339292AB07D4A4A147D4903A61D -S21902C4B84E8004203D20FF0061290014816900007C0006AC392B -S21902C4CD48FFFF3C0080007C0054307D6B0378916900007C0078 -S21902C4E206AC480002A83D20FF0061290200A00900007C000687 -S21902C4F7AC60000008B00900007C0006AC480002883D20FF0000 -S21902C50C61290200A00900007C0006AC60000004B00900007C17 -S21902C5210006AC480002683D20FF0061290240A00900007C004D -S21902C53606AC60000004B00900007C0006AC480002483D20FFFE -S21902C54B0061290220A00900007C0006AC60000008B009000030 -S21902C5607C0006AC480002283D20FF0061290220A00900007CF2 -S21902C5750006AC60000004B00900007C0006AC480002083D20FE -S21902C58AFF0061290940800900007C0006AC6000008090090093 -S21902C59F007C0006AC480001E83D20FF00612909488169000000 -S21902C5B47C0006AC3948FFE53C0080007C0054307D6B03789128 -S21902C5C96900007C0006AC480001BC3D60000383CB35BC3800A3 -S21902C5DE0000900B35BC3D200003814935B82C0A0000418201A4 -S21902C5F39C7D4853783808FFFF280000394181018C3D60000372 -S21902C608396B2B985400103A7D4B002E3D20000339292B987D19 -S21902C61D4A4A147D4903A64E8004203D20FF0061290014816914 -S21902C63200007C0006AC3948FFFF3C0080007C0054307D6B009B -S21902C64778916900007C0006AC4800013C3D20FF0061290200CA -S21902C65CA00900007C0006AC7000FFF75400043EB00900007CBA -S21902C6710006AC480001183D20FF0061290200A00900007C008D -S21902C68606AC7000FFFB5400043EB00900007C0006AC480000B7 -S21902C69BF43D20FF0061290240A00900007C0006AC7000FFFB26 -S21902C6B05400043EB00900007C0006AC480000D03D20FF00611C -S21902C6C5290220A00900007C0006AC7000FFF75400043EB00982 -S21902C6DA00007C0006AC480000AC3D20FF0061290220A0090071 -S21902C6EF007C0006AC7000FFFB5400043EB00900007C0006AC1A -S21902C704480000883D20FF0061290940800900007C0006AC540F -S21902C71900066E900900007C0006AC480000683D20FF00612933 -S21902C72E0948816900007C0006AC3948FFE53C0080007C005495 -S21902C743307D6B0078916900007C0006AC4800003C3D2000033E -S21902C75883C935B8480000303961000838010090392000039BB2 -S21902C76DC100719921007090010074916100783D200003800BFA -S21902C782000883C935AC900935AC7FC3F3788001008C7C0803AB -S21902C797A683C1008083E10084382100884E8000209421FFE0D1 -S21902C7AC7C0802A693A1001493C1001893E1001C900100247CD0 -S21902C7C17D1B787C9F23787CA32B784BFFCEAD38000000901F28 -S21902C7D600007FA3EB78388100084BFFF7A52C03000041820029 -S21902C7EB18880100082C0000034082000C38000001901F0000A4 -S21902C80038600001800100247C0803A683A1001483C10018839A -S21902C815E1001C382100204E8000209421FFE87C0802A69381C7 -S21902C82A000893A1000C93C1001093E100149001001C3FA00032 -S21902C83F003BBD3200813D00343860FFFF7D2803A64E800021EE -S21902C854801D00347C7C1B78386000007C0803A64E8000217F39 -S21902C86983E3788001001C7C0803A68381000883A1000C83C18B -S21902C87E001083E10014382100184E8000209421FFF87C080285 -S21902C893A69001000C3D20000039293200800900347C0803A66B -S21902C8A84E8000218001000C7C0803A6382100084E80002094E8 -S21902C8BD21FFE87C0802A693A1000C93C1001093E1001490016E -S21902C8D2001C3FA000003BBD3200817D00343D20000380693872 -S21902C8E7887D6803A63D20000338000000900937E84E800021E0 -S21902C8FC801D00303D2000038069388C7C0803A64E8000213DED -S21902C91120000338000001900938088001001C7C0803A683A1E7 -S21902C926000C83C1001083E10014382100184E8000209421FF0A -S21902C93BE87C0802A693A1000C93C1001093E100149001001CF3 -S21902C9503FA000003BBD3200811D00343860FFFF7D0803A63DEF -S21902C965400003392000013D60000338000000912A37E8900BCC -S21902C97A38084E8000213D20000390693888813D0034386000CF -S21902C98F017D2803A64E800021813D00303860FFFF7D2803A67C -S21902C9A44E8000213D200003801D00309069388C386000017C89 -S21902C9B90803A64E8000218001001C7C0803A683A1000C83C184 -S21902C9CE001083E10014382100184E8000209421FFE87C080244 -S21902C9E3A69381000893A1000C93C1001093E100149001001C9D -S21902C9F83FE00003801F35C02C000000408200A03FA000003BC5 -S21902CA0DBD3200813D00343860FFFF7D2803A64E800021813D9B -S21902CA2200347C7C1B78386000017D2803A64E800021815D0085 -S21902CA37143D2000033929C2AC912A00043D600003396BC308D1 -S21902CA4C3D200003916A00083929C1D8912A000C3D60000339D0 -S21902CA616BC0703D200003916A00103929C3F4912A00143D602E -S21902CA760003396BC7A83D200003916A00183929C364912A00D7 -S21902CA8B1C801D00347F83E3787C0803A64E80002138000001F0 -S21902CAA0901F35C03D2000033FA00004A08937FA387D97404865 -S21902CAB50038313BBD9740801D00043D20000390093884800156 -S21902CACA001C7C0803A68381000883A1000C83C1001083E10013 -S21902CADF14382100184E8000209421FFF07C0802A693E1000C78 -S21902CAF490010014480037C93D2000043BE997403D20000381FC -S21902CB097F0004800938847C005800418200602C0B0004408254 -S21902CB1E00484BFFFE193C6000043D20000439299E043C800091 -S21902CB330338C39D843CA00003396000013940000D3D00000388 -S21902CB483CE000033800000090C43890916535B099439D8491F5 -S21902CB5D283894900735B4801F00042C000000408200084BFF65 -S21902CB72FE6D3D200004800997443D600003900B3884800100FF -S21902CB87147C0803A683E1000C382100104E8000209421FFE8EE -S21902CB9C7C0802A693A1000C93C1001093E100149001001C3D3B -S21902CBB120000380E937FC2C070000408200283D0000033920F3 -S21902CBC600013D6000033D40000338002328912837F490EB3818 -S21902CBDBB8900A37F84800007C3C6000033C80000338632A04D2 -S21902CBF0388438B838A000014BFF61F93C6000033C800003386A -S21902CC056329DC388437F838A000024BFF61E13C6000033C80FF -S21902CC1A000338632A34388437F438A000014BFF61C93C600032 -S21902CC2F033C80000338632A50388435E838A000054BFF61B100 -S21902CC443C6000033C80000438632A783884196438A000054BD7 -S21902CC59FF61993D20000338000000900938144800034D480069 -S21902CC6E287D3D6000033D200003392937D83BEB37C87C1F488C -S21902CC83004182003C7D3D4B783BC00001813F00047FE3FB7884 -S21902CC987D2803A64E8000217C631B794182000C93DF000C483B -S21902CCAD000008907F000C3BFF00107C1FE8004082FFD43D2089 -S21902CCC20003800938BC2C000000408200143C60000338632C6E -S21902CCD7804BFFD9DD480000903D200003800937F42C000000A9 -S21902CCEC418200283C6000043863195048001E8D2C030000413A -S21902CD018200143C60000338632CA04BFFD9A9480000103D20F9 -S21902CD16000338000001900938143D200003800938142C00007F -S21902CD2B00418200403C600003386335E8480001B97C641B781D -S21902CD403C60000338632CCC4BFFD96D3C600004386319644815 -S21902CD5500019D7C641B783C60000338632CD44BFFD9514BFFB9 -S21902CD6AFC758001001C7C0803A683A1000C83C1001083E1008A -S21902CD7F14382100184E8000209421FFF093E1000C38000004C5 -S21902CD947C0903A67C9F237838800000398000188963000038F2 -S21902CDA9E000012C0B000038A0000038C0000A3863000141821D -S21902CDBE011069600030212000007C0901147CE9003941820013 -S21902CDD330892300003809FFBF280000194181000C38090020F9 -S21902CDE85409063E2C090078408200108D63000138C0001038DE -S21902CDFD630001392BFFD0380BFFBF7D2A4B787C08037855299B -S21902CE12063E5400063E21290009392000007D29491420000059 -S21902CE2705380000007C0001147D27037938E000003920000090 -S21902CE3C40820010380BFF9F2800000541810008392000012CAA -S21902CE51090000418200685540063E280000094181000C7D49F3 -S21902CE66537848000030380BFF9F280000054181000C392BFF2E -S21902CE7BA94800001C5500063E200000057C0001107C0003B80C -S21902CE90392BFFC97C0948387C09300040800020896300007C58 -S21902CEA50531D62C0B00007CA04A14386300014082FF0C480003 -S21902CEBA00142C0B002E4182000C386000004800001C7CA0609C -S21902CECF307C840378398CFFF84200FECC909F0000386000010C -S21902CEE483E1000C382100104E8000209421FFE87C0802A69310 -S21902CEF9A1000C93C1001093E100149001001C890300033FA069 -S21902CF0E000488A3000088C3000188E300023C80000338842C78 -S21902CF23F0387D9F044BFFD705387D9F048001001C7C0803A662 -S21902CF3883A1000C83C1001083E10014382100184E8000208101 -S21902CF4D2300007C0918004182002081230004908900008003E1 -S21902CF6200049064000090040004908300044E80002090890005 -S21902CF77049089000091240000912400044E8000207C6B1B78AB -S21902CF8C806B00007C0358004182001880030000900B0000814D -S21902CFA1230000916900044E800020386000004E80002094212A -S21902CFB6FFE87C0802A693A1000C93C1001093E100149001008F -S21902CFCB1C3D0000033CE00003392838A039673898912838A095 -S21902CFE0916738983D400004912900043BCA9F24916B00043F27 -S21902CFF5A000033BE000107FC4F378387D38984BFFFF4937FF57 -S21902D00AFFFF3BDE06104082FFEC8001001C7C0803A683A10042 -S21902D01F0C83C1001083E10014382100184E8000209421FFF812 -S21902D0347C0802A69001000C80040000A124000490030010B176 -S21902D04923001480040000A10400043D200003396938B09009E4 -S21902D05E38B03D400003B10B0004906A38BC48000015800100C2 -S21902D0730C7C0803A6382100084E8000209421FFF87C0802A641 -S21902D0889001000C81230000388300108009000038A000007CA3 -S21902D09D0803A64E8000218001000C7C0803A6382100084E80EE -S21902D0B200209421FF587C0802A67D800026934100909361008F -S21902D0C7949381009893A1009C93C100A093E100A4900100ACF4 -S21902D0DC9181008C3D2000003929320083A9004C3D6000032C65 -S21902D0F11D00007C7B1B787C9A23787CBC2B7883EB38BC3BC093 -S21902D1060005418200547FBFEB78815F0000801F000C816A00DA -S21902D11B243D2000032C000000392935C4916A0028912A0024EB -S21902D1304082002C800A00003C800003388438B07FE3FB7838FB -S21902D145A000007C0803A64E800021801F000C60000001901F57 -S21902D15A000C2E1D00004800003C813F00007FE3FB78800900C0 -S21902D16F1C7C0803A64E8000213D2000003929320080090048AA -S21902D1843C60000360630D407C0803A64E80002137DEFFFF4071 -S21902D1998100E4813F00007FE3FB788009000C7C0803A64E80F0 -S21902D1AE00212C0300004182FFB0813F00003D60000381490079 -S21902D1C31038A0000238EB38A89361000893410010938100145B -S21902D1D87FE3FB783881000838DC000E7D4803A63800000E3996 -S21902D1ED2000009001000C912B38A84E8000213D2000038009F5 -S21902D20238B83FC000032C000000418200384BFFF6117C7D1B92 -S21902D217783C60000338632CFC4BFFD4957F63DB783880000E73 -S21902D22C4BFFDF617F43D3787F84E3784BFFDF557FA3EB784BA3 -S21902D241FFF64D801E38A82C000000408200307FFDFB787FDFA6 -S21902D256F378813D00007FA3EB788009001C7C0803A64E80006E -S21902D26B21801F38A82C0000004182FFE47FBFEB7841920018A9 -S21902D280813F0000380000008169002890090028916900248029 -S21902D2950100AC8181008C7C0803A68341009083610094838145 -S21902D2AA009883A1009C83C100A083E100A47D8081203821002D -S21902D2BFA84E8000209421FFF87C0802A69001000C3D200003E8 -S21902D2D4380938A87C0400004082001038000001900938A848D1 -S21902D2E90000188123000081690028800B00087C0803A64E80CD -S21902D2FE00218001000C7C0803A6382100084E8000209421FF36 -S21902D313E07C0802A69361000C9381001093A1001493C100181A -S21902D32893E1001C900100243D200000392932008389004C3D1E -S21902D33D6000032C1C00007C7D1B787C9B237883CB38BC4182E6 -S21902D35200547F9EE378815E0000801E000C816A00243D2000FE -S21902D367032C000000392935C4916A0028912A00244082002C30 -S21902D37C800A00003C800003388438B07FC3F37838A000007CA7 -S21902D3910803A64E800021801E000C60000001901E000C813E5C -S21902D3A600007FC3F3788009001C7C0803A64E8000213C600061 -S21902D3BB03386338A04BFFFBC97C7F1B7941820054393F000CA8 -S21902D3D0A009000C817F000C8149000481090008B01D000C91B6 -S21902D3E57D0000915D0004911D000880BF00087F63DB7838A5AE -S21902D3FAFFF2389F001A4BFFCAB13C600003386338987FE4FB08 -S21902D40F784BFFFB3D807F000848000008386000002C1C0000D0 -S21902D42441820018813E000038000000816900289009002891B6 -S21902D439690024800100247C0803A68361000C8381001083A150 -S21902D44E001483C1001883E1001C382100204E8000209421FFB7 -S21902D463E87C0802A693A1000C93C1001093E100149001001CC0 -S21902D4787CA02B797C0903A64081003C7C9F23787FC902A63FC8 -S21902D48DA00003807F000080BF0004809D38AC4BFFCA15801DD7 -S21902D4A238AC813F000437DEFFFF7C004A143BFF0008901D38B2 -S21902D4B7AC4082FFD88001001C7C0803A683A1000C83C10010C6 -S21902D4CC83E10014382100184E8000209421FF607C0802A6939A -S21902D4E161008C9381009093A1009493C1009893E1009C900149 -S21902D4F600A47C7E1B783C6000037C9B2378386338984BFFFAE9 -S21902D50B817C7C1B787F89FE707D20E2787C004850817E000078 -S21902D5207C00FE70393C000C7D3F0038800B001493E1000893E2 -S21902D53561000C7FC3F3783881000838A000017C0803A64E802B -S21902D54A00213D200003800938B82C000000418200384BFFF268 -S21902D55FC57C7D1B783C60000338632D0C4BFFD1497FE3FB78B3 -S21902D5743880000E4BFFDC15387F000E389BFFF24BFFDC097F63 -S21902D589A3EB784BFFF301813E0000800900282C0000004182E3 -S21902D59E005C3C600003386335E8389F001E38A000044BFFD3D0 -S21902D5B3752C03000041820040815E00007FC3F378812A002856 -S21902D5C87F64DB78800900043D6000037C0803A683AA0014393D -S21902D5DD6BD4603D20000393E938AC916A00144E800021813E16 -S21902D5F2000093A900142C1C0000418200183C600003937C00FC -S21902D60708386338A07F84E3784BFFF93D800100A47C0803A65C -S21902D61C8361008C8381009083A1009483C1009883E1009C3822 -S21902D6312100A04E8000209421FFF87C0802A69001000C3D205C -S21902D6460003806938BC81630000800B00207C0803A64E80005E -S21902D65B218001000C7C0803A6382100084E8000209421FFF8DD -S21902D6707C0802A69001000C7C641B783C60000338632D1C4B94 -S21902D685FFD0318001000C7C0803A6382100084E8000209421CB -S21902D69AFFF07C0802A693E1000C900100143D2000043BE91D92 -S21902D6AFD0801F001C2C0000004082002C90691DD0909F0004A1 -S21902D6C44800049D7C631B794082001C801F0008392000017C93 -S21902D6D90000D0913F001C901F001038600000800100147C0809 -S21902D6EE03A683E1000C382100104E8000203D20000439291DD0 -S21902D703D08009001C7C6B1B782C0000004082000C3860000782 -S21902D7184E800020800900147C0B0040418000148009001838F5 -S21902D72D6000007C0B00404D800020386000014E8000203D20E8 -S21902D742000439691DD0800B001C2C0000004182001C812B00DA -S21902D757143860000091240000800B0018900500004E8000202F -S21902D76C386000074E8000203D20000439691DD0800B001C7C01 -S21902D7816A1B782C0000004182001C812B000838600000912A7D -S21902D7960000800B000C900400004E800020386000074E8000F1 -S21902D7AB209421FFD87C0802A69321000C9341001093610014DE -S21902D7C09381001893A1001C93C1002093E100249001002C3DCB -S21902D7D520000480091DEC7C7F1B782C0000007C9E23787CBADD -S21902D7EA2B783B8000004082000C38600007480000F83D2000BB -S21902D7FF0483A91DD03C8000033CA000033884DCF038A5DE18F8 -S21902D8147CA428507FA3EB784BFFC6957CBFF214380000807CC1 -S21902D8290903A639200000612010003D600E007C0004AC7D39BA -S21902D83E8BA67D788BA67C198BA67D788BA6392900104200FFD8 -S21902D853E03C0004004C00012C7C108BA64C00012C3D20000489 -S21902D86839291DD0800900107CBE2B783C6000037FFF00383F4B -S21902D87D2000037D3B4B7838632D587FE4FB784BFFCE29480072 -S21902D892001C801B000838792D705400F87E7C0002147FFF0291 -S21902D8A7144BFFCE0D7C1FF040408000207FE3FB787FA803A6DC -S21902D8BC4E800021480003657C7C1B794182FFCC93FA00003CCE -S21902D8D10002004C00012C7C108BA64C00012C3C600003386350 -S21902D8E62D744BFFCDCD7F83E3788001002C7C0803A6832100C6 -S21902D8FB0C83410010836100148381001883A1001C83C1002079 -S21902D91083E10024382100284E8000209421FFD07C0802A692C2 -S21902D925E1000C9301001093210014934100189361001C93817D -S21902D93A002093A1002493C1002893E1002C900100343D6000DB -S21902D94F04392B1DD08009001C7CBE2B782C0000007CD83378BA -S21902D9647C7C1B787C9D23783B4000004082000C386000074838 -S21902D97900011C836B1DD03C8000033CA000033884DE1838A56D -S21902D98EDF5C7CA428507F63DB784BFFC5197CBDF214380000D6 -S21902D9A3807C0903A639200000612010003D600E007C0004ACF9 -S21902D9B87D398BA67D788BA67C198BA67D788BA63929001042A6 -S21902D9CD00FFE03C0004004C00012C7C108BA64C00012C3C60D4 -S21902D9E2000338632D787FA4EB787F86E3784BFFCCC53D2000C8 -S21902D9F7043EE000033B291DD04800002038772D704BFFCCAD27 -S21902DA0C57E0F87E7C0002147FBD02147FDFF0507F9C02142C72 -S21902DA211E000040810050801900087FC5F3787F8500007F8364 -S21902DA36E3787FA4EB784FFEE3827D200026552907FE7D290055 -S21902DA4BD07C0048787CA948387D2503787F6803A67CBF2B7883 -S21902DA604E800021480001C17C7A1B794182FF98939800003C66 -S21902DA750002004C00012C7C108BA64C00012C3C6000033863AA -S21902DA8A2D744BFFCC297F43D378800100347C0803A682E1004E -S21902DA9F0C8301001083210014834100188361001C8381002013 -S21902DAB483A1002483C1002883E1002C382100304E8000202873 -S21902DAC9030007418100883D600003396B2E885460103A7D4B2D -S21902DADE002E3D20000339292E887D4A4A147D4903A64E800420 -S21902DAF3203C60000338632D984E8000203C60000338632DB8EB -S21902DB084E8000203C60000338632DD04E8000203C6000033817 -S21902DB1D632DE84E8000203C60000338632E044E8000203C6090 -S21902DB32000338632E1C4E8000203C60000338632E2C4E80009F -S21902DB47203C60000338632E504E8000203C60000338632E7420 -S21902DB5C4E8000209421FFE07C0802A693A1001493C1001893B8 -S21902DB71E1001C900100243D20000483E91DD03C8000033CA091 -S21902DB8600033884DF5C38A5DFF87CA428507FE3FB784BFFC35B -S21902DB9B193FC000013BA0000838610008380000807C0903A6EB -S21902DBB039200000612010003D600E007C0004AC7D398BA67D34 -S21902DBC5788BA67C198BA67D788BA6392900104200FFE07FE8B5 -S21902DBDA03A64E8000217D3DF1D63D600004396B1DD03D29FE80 -S21902DBEF003C00FE00912B0018900B001493CB000893AB000CAD -S21902DC0438600000800100247C0803A683A1001483C100188383 -S21902DC19E1001C382100204E8000209421FFF07C0802A693E147 -S21902DC2E000C900100143C00007E7C7F1B786000007E7FE9009B -S21902DC4339418200503C60000338632EA87FE4FB784BFFCA611E -S21902DC583C000010600000107FE9003938600004408200303C89 -S21902DC6D600020606300207FE318387C6300D07C63FE707C60AE -S21902DC8218F8546307BC540007387C6303784800000838600027 -S21902DC9700800100147C0803A683E1000C382100104E800020E8 -S21902DCAC3D200002392920007C0348407C802378396000004103 -S21902DCC181000C7C0048404181001C3D20000338890BBC7C0371 -S21902DCD62040418100107C00204040810008396000017D635B86 -S21902DCEB784E8000207C6A1B787CF88AA654E70FFE2C0700001F -S21902DD0041820040380000807C0903A639200000612010003DF7 -S21902DD15600E007C0004AC7D398BA67D788BA67C198BA67D7890 -S21902DD2A8BA6392900104200FFE03C0004007C0004AC7C188B8E -S21902DD3FA655480010396000AA9968055539200055992802AABC -S21902DD54380000809808055599680555992802AA392000327D31 -S21902DD692903A62F87000038000030980A0000396A0001420026 -S21902DD7E00003D20004C7D2903A6880A00005400067261294B5E -S21902DD93407D2903A65400063E886A0000546906727C090000A1 -S21902DDA841820014706000207D204B78408200084200FFE43811 -S21902DDBD0000FF98080000892A00007D6A5B782C0900FF3D20AD -S21902DDD200014082001C3529FFFF40810014880A0000394A0010 -S21902DDE7012C0000FF4182FFEC7D2BFE707D604A787C0058506D -S21902DDFC7C00FE707C6300384D9E00203C0002007C0004AC7C19 -S21902DE11188BA64E8000209421FFF093C1000893E1000C7D5869 -S21902DE268AA6554A0FFE2C0A000041820040380000807C09038B -S21902DE3BA639200000612010003D000E007C0004AC7D398BA6DD -S21902DE507D188BA67C198BA67D188BA6392900104200FFE03D94 -S21902DE652004007C0004AC7D388BA62C0500002F8A0000546AC3 -S21902DE7A0010408100A03BC000AA3BE00055398000A038C000B5 -S21902DE8FFF9BCA05559BEA02AA998A05558804000039200031F5 -S21902DEA498030000380000327C0903A63904000138E30001399C -S21902DEB929FFFF4200FFFC880300007D2903A6540006725400EF -S21902DECE063E89630000556906727C09000041820014716000A5 -S21902DEE3207D204B78408200084200FFE498CA000089230000A6 -S21902DEF8880400007D0443787C0900007CE33B784182000C39A7 -S21902DF0D6000FF4800000C34A5FFFF4181FF787CA8FE707D0026 -S21902DF222A787C0040507C00FE70392000FF992A00007D6B0048 -S21902DF3738419E00103D2002007C0004AC7D388BA67D635B7883 -S21902DF4C83C1000883E1000C382100104E8000207D588AA6554C -S21902DF614A0FFE2C0A000041820040380000807C0903A63920D5 -S21902DF760000612010003D600E007C0004AC7D398BA67D788BC0 -S21902DF8BA67C198BA67D788BA6392900104200FFE03C00040015 -S21902DFA07C0004AC7C188BA63D60FE00380000AA980B055539C1 -S21902DFB5200055992B02AA38000090980B0555892B00002C0ABC -S21902DFCA000099230000880B0001392000FF98030001992B0033 -S21902DFDF00418200103D6002007C0004AC7D788BA638600000CA -S21902DFF44E8000209421FFF87C0802A69001000C3803FFFE284E -S21902E00900001D418100A03D600003396B2EB85400103A7D4BEC -S21902E01E002E3D20000339292EB87D4A4A147D4903A64E8004AA -S21902E033203860000248000078386000414BFFA48154637F3E9B -S21902E0482C0300024182004028030002418100102C0300014118 -S21902E05D8200384800004C2C030004418200242C030008408246 -S21902E072003C38600008480000383860000E4800003038600080 -S21902E0870C480000283860000448000020386000054800001800 -S21902E09C3860000A480000103860000B480000083860000F8054 -S21902E0B101000C7C0803A6382100084E8000203D200003816980 -S21902E0C6385C806B00985463C23E4E8000209421FFF87C080250 -S21902E0DBA69001000C7C641B78386000404BFFA3ED8001000C34 -S21902E0F07C0803A6382100084E8000209421FFF87C0802A69030 -S21902E10501000C386000414BFFA3B560640600548004203D2057 -S21902E11A00035484045E900935D0386000414BFFA3AD8001001A -S21902E12F0C7C0803A6382100084E8000209421FFF87C0802A674 -S21902E1449001000C386000414BFFA3753D200003808935D05425 -S21902E1596305E8380000007C642378900935D0386000414BFFE6 -S21902E16EA3698001000C7C0803A6382100084E8000204E8000B2 -S21902E183204E8000209421FFF87C0802A69001000C3860004025 -S21902E1984BFFA3293D20000339298DC87C634A78200300007CFE -S21902E1AD6019148001000C7C0803A6382100084E80002094210B -S21902E1C2FFF87C0802A69001000C386000404BFFA2F138830011 -S21902E1D704386000404BFFA2F98001000C7C0803A63821000850 -S21902E1EC4E8000209421FFF87C0802A69001000C3D20000380D4 -S21902E2010935D42C0000004082001038000001900935D44800CE -S21902E21608118001000C7C0803A6382100084E8000203D20006D -S21902E22B03800935D82C0000004C82002038000001900935D845 -S21902E2407D1E9AA67508FFFF3D2000017D2903A638008001B056 -S21902E2550809C07C0902A6600086A07C0903A642000000800831 -S21902E26A0ABC3D600001600000C090080ABC81280AB8616B007F -S21902E27FA2552906AE91280AB8916809F07CE902A690E80AE0D3 -S21902E29438002800B0083E8039683E8038002808B00B000239DB -S21902E2A9200091B12809C0394000019148003038000018980B90 -S21902E2BE0004980B0005B14B0006B0EB0028B0EB002CB0EB0071 -S21902E2D32EB14B003039282800B0E900023800B000B0082800E9 -S21902E2E838082810900900043968280838082820B14B0002901E -S21902E2FD0B000439202000B1282808380000FF98080A863920B4 -S21902E312000599280A8A38004820B0080A8239204823B1280A0A -S21902E327824E80002039233E80A00900207D4302147D4B53781E -S21902E33CA00A00007008800041820028A00A00007008200041B5 -S21902E351820010A00900027D43021448000008394A00087C0A3C -S21902E36658004082FFD47D495378A0090000700080004082FFC3 -S21902E37BF87D2A4B787C090378A00A0000700B10004182001418 -S21902E390A00A00007000EFFFB00A0000B12A0002A12A000239CC -S21902E3A500000038090001B00A0002816A00045529043E7C8BA8 -S21902E3BA49AEA00A000060008000B00A0000A12A000071208030 -S21902E3CF00418200647D4B53787D0A43783D0000076108FFFF8B -S21902E3E4394A00017C0A400040820038A1230A8239400000719F -S21902E3F929FFFDB1230A82A00B00005400047EB00B0000A12383 -S21902E40E0A8261290002B1230A82A00B000060008000B00B0034 -S21902E42300A00B0000700980004082FFB87D6A5B787D49537875 -S21902E438A0090000700080004082FFF87D2A4B78B00A00024E02 -S21902E44D80002038E33E80A10700107C03422E7D434214700607 -S21902E46280004182000C386000004E800020812A000439600081 -S21902E477008809000098040000B0CA0002812A0004996900002F -S21902E48C7C03422E600080007C03432E7D388AA655290FFE2C19 -S21902E4A109000041820028812A0004A00700062C000000408122 -S21902E4B600187C004BAC7C0004AC3400FFF0392900104181FF3D -S21902E4CBF0386000014E8000209421FFE87C0802A693E100146E -S21902E4E09001001C7C7F1B787FE3FB78388100084BFFFF612C79 -S21902E4F50300004182FFF0886100088001001C7C0803A683E137 -S21902E50A0014382100184E8000209421FFE87C0802A693A10086 -S21902E51F0C93C1001093E100149001001C7CBF2B787FE0FB788B -S21902E5342C0000007C7D1B787C9E23783BFFFFFF4182002488B7 -S21902E5499E00007FA3EB784BFFFDDD7FE0FB782C0000003BDE58 -S21902E55E00013BFFFFFF4082FFE48001001C7C0803A683A100D5 -S21902E5730C83C1001083E10014382100184E8000209421FFE8B9 -S21902E5887C0802A693A1000C93C1001093E100149001001C7CF6 -S21902E59DBF2B787FE0FB782C0000007C7D1B787C9E23783BFF87 -S21902E5B2FFFF418200247FA3EB784BFFFF197FE0FB782C000083 -S21902E5C700987E00003BDE00013BFFFFFF4082FFE48001001C8E -S21902E5DC7C0803A683A1000C83C1001083E10014382100184E3B -S21902E5F18000209421FFE87C0802A69381000893A1000C93C1F6 -S21902E606001093E100149001001C3D200003800935DC3D60001C -S21902E61B001FE0000A3B8B32007C7D1B787C9E23784800001445 -S21902E630813C0048386000647D2803A64E8000217FA3EB787F8C -S21902E645C4F3784BFFFE097C631B79408200102C1F00003BFF6F -S21902E65AFFFF4082FFD48001001C7C0803A68381000883A10017 -S21902E66F0C83C1001083E10014382100184E8000209421FF8024 -S21902E6847C8023782C00000590A1001090C1001490E1001891F2 -S21902E69901001C91210020914100249081000C38600000418208 -S21902E6AE002C28000005418100102C00000441820144480002A3 -S21902E6C3B42C000006418202782C00000741820278480002A0BE -S21902E6D83D600003800B30043D20000339292F307D2902147D6D -S21902E6ED2903A64E8004203D20FF0061290014800900007C004E -S21902E70206AC60000400900900007C0006AC480000E03D20FF9A -S21902E7170061290200A00900007C0006AC60000008B009000062 -S21902E72C7C0006AC480000C03D20FF0061290200A00900007C8E -S21902E7410006AC60000004B00900007C0006AC480000A03D207A -S21902E756FF0061290240A00900007C0006AC60000004B00900E8 -S21902E76B007C0006AC480000803D20FF0061290220A0090000EB -S21902E7807C0006AC60000008B00900007C0006AC480000603D1B -S21902E79520FF0061290220A00900007C0006AC60000004B009A9 -S21902E7AA00007C0006AC480000403D20FF0061290940800900E5 -S21902E7BF007C0006AC60000080900900007C0006AC4800002001 -S21902E7D43D20FF0061290948800900007C0006AC60000010903B -S21902E7E90900007C0006AC3D20000338000001900935E048004E -S21902E7FE01783D200003806935E038000000900935E03D6000A5 -S21902E81303800B30EC3D200003392930187D2902147D2903A62A -S21902E8284E8004203D20FF0061290014800900007C0006AC54DD -S21902E83D0005A8900900007C0006AC4800012C3D20FF006129F0 -S21902E8520200A00900007C0006AC7000FFF75400043EB009001C -S21902E867007C0006AC480001083D20FF0061290200A009000085 -S21902E87C7C0006AC7000FFFB5400043EB00900007C0006AC4823 -S21902E8910000E43D20FF0061290240A00900007C0006AC700018 -S21902E8A6FFFB5400043EB00900007C0006AC480000C03D20FF7B -S21902E8BB0061290220A00900007C0006AC7000FFF75400043EC2 -S21902E8D0B00900007C0006AC4800009C3D20FF0061290220A0B9 -S21902E8E50900007C0006AC7000FFFB5400043EB00900007C00AB -S21902E8FA06AC480000783D20FF0061290940800900007C000656 -S21902E90FAC5400066E900900007C0006AC480000583D20FF00B5 -S21902E92461290948800900007C0006AC54000734900900007CA1 -S21902E9390006AC4800003838600036480000303961000838016F -S21902E94E0088392000039861007199210070900100749161003E -S21902E963783D200003800B0008806935DC900935DC38210080B0 -S21902E9784E8000209421FFE87C0802A693C1001093E100149051 -S21902E98D01001C7C9E2378392000007C7F1B78913E0000881F3F -S21902E9A20A86700B00014182006038000001981F0A86A13F28A2 -S21902E9B700391F2800712080004082003C81280004394000018E -S21902E9CC880900003960B00098010008B1480002B17F28003829 -S21902E9E1610008388000014BFFB3A92C0300004182000C38001C -S21902E9F60001901E000038000010901F094C392000017D234BC5 -S21902EA0B788001001C7C0803A683C1001083E100143821001870 -S21902EA204E8000209421FFF07C0802A693C1000893E1000C90B0 -S21902EA350100143D2000003BE93200813F00343860FFFF7D28CE -S21902EA4A03A64E8000217C7E1B787C1E9AA67400FFFF3D2000E2 -S21902EA5F03800935E42C0000004082009438000001900935E489 -S21902EA744BFFF7B5813F0034386000007D2803A64E8000218146 -S21902EA895F00147C1E9AA67400FFFF3D200003900A0000392956 -S21902EA9EE514912A00043D600003396BE5843D200003916A009C -S21902EAB3083929E32C912A000C3D600003396BE4D43D200003AB -S21902EAC8916A00103929E680912A00143D600003396BE97C3DAA -S21902EADD200003916A00183929E5F4912A001C801F00347FC3C0 -S21902EAF2F3787C0803A64E800021800100147C0803A683C1007B -S21902EB070883E1000C382100104E8000209421FFF07C0802A653 -S21902EB1C93E1000C900100143D200003806938C07C9F23782C95 -S21902EB31030000418200084BFFB379881F00002C0000024082ED -S21902EB46002C3C800003388438B0387F001C38A000064BFFBD6C -S21902EB5BCD2C03000040820010801F00103D200003900935E80B -S21902EB70800100147C0803A683E1000C382100104E800020946C -S21902EB8521FE887C0802A69321015C93410160936101649381EE -S21902EB9A016893A1016C93C1017093E101749001017C3D20003C -S21902EBAF03906938C0386100187C791B783880000038A0012C60 -S21902EBC44BFFB3C53D200003808938B0396938B0A06B00043D4C -S21902EBD9201234394000003CE0000338C000016129555539605C -S21902EBEE0006390735E898C100199961001A9121001C9947353F -S21902EC03E899480003380000FF90810034B06100389801015179 -S21902EC1898C1001899480001994800023CA000037D1D4378383E -S21902EC2DA5EB1498010148980101499801014A9801014B980100 -S21902EC42014C9801014D9801014E9801014F980101503861002E -S21902EC570838800044480000D53B8000023B4101483F6000035C -S21902EC6C48001F0D7C7E1B787F23CB783880012C7F45D378387A -S21902EC81C0004338E000444800024948000AA1881B35E82C00A6 -S21902EC96000040820028881D00012C0000004082001C881D0023 -S21902ECAB022C000000408200108BFD00032C1F000041820014A0 -S21902ECC038600044480000BD386000004800003848001EA97CB4 -S21902ECD57E1850280307CF4081FFB07F80E3782C0000003B9C6F -S21902ECEAFFFF4181FF80386000444800008D3D20000393E9380A -S21902ECFFB83860FFFF8001017C7C0803A68321015C834101605A -S21902ED14836101648381016883A1016C83C1017083E1017438D6 -S21902ED292101784E8000203D200003812938C42C090000418248 -S21902ED3E0024A00900047C0020004082000C3860FFFF4E80001A -S21902ED5320812900002C0900004082FFE43D200003800938C41B -S21902ED68906938C4B083000490A3000890030000386000004EAF -S21902ED7D8000203D200003812938C4396000002C0900004D8237 -S21902ED9200207D2A4B78A00900047C0018004082001C2C0B0085 -S21902EDA7004182001080090000900B000048000008814900003F -S21902EDBC7D2B4B78812900002C0900004082FFD03D200003916F -S21902EDD14938C44E8000209421FFE87C0802A69381000893A1DB -S21902EDE6000C93C1001093E100149001001C7C7E1B7883FE005E -S21902EDFB0838000000A13F00066000FFFF7C090000817E0004F0 -S21902EE107C9C23784082000C38000000B01F0006A01F00047D18 -S21902EE25635B78B00B0002A3BF0004480008CD7C651B787FA4C4 -S21902EE3AEB787FE3FB78480008512C030000408200603D200035 -S21902EE4F03816938C42C0B000041820050A12B0004A01F0002E3 -S21902EE647C09000040820034A0BF0004800B00087D635B783836 -S21902EE79A5FFF87F86E378A0FF0000389F00087C0803A64E8008 -S21902EE8E00217FC3F378480007D948000018816B00002C0B00EF -S21902EEA3004082FFB87FC3F378480007C18001001C7C0803A653 -S21902EEB88381000883A1000C83C1001083E10014382100184E77 -S21902EECD8000209421FFD87C0802A6930100089321000C9341A1 -S21902EEE20010936100149381001893A1001C93C1002093E10098 -S21902EEF7249001002C7C9C2378281C05C07C791B787CB82B7803 -S21902EF0C7CDA33787CFE3B78418100A8386005EA480006ED7C13 -S21902EF217F1B794182009883BF0008381C0008837F0004B01FEB -S21902EF36000CB3DD0000B35D0002A01F000C392000007F85E306 -S21902EF4B78B01D0004B13D00067F24CB78387D00084BFFAF557C -S21902EF603D200003800935E839600011901B000C8138000099DC -S21902EF757B0009913B0010A01D00047F63DB78B01B0002A39F1B -S21902EF8A000C480007717C651B787F84E3787FA3EB78480006FA -S21902EF9FF5B07D00067F05C3787FE3FB78388000114800044540 -S21902EFB47FE3FB78480006B58001002C7C0803A6830100088380 -S21902EFC921000C83410010836100148381001883A1001C83C193 -S21902EFDE002083E10024382100284E8000209421FFD87C0802EE -S21902EFF3A69381001893A1001C93C1002093E100249001002C17 -S21902F0087CBF2B787C7D1B787C9C23787CDE33787FE3FB7838BD -S21902F01D81000848001A252C03000041800024A0DF0004A0FE92 -S21902F03200047FA3EB787F84E37838A100084BFFFE9138600089 -S21902F047004800001C3C6000033C80000338633100388431240E -S21902F05C4BFFB6593860FFFF8001002C7C0803A6838100188330 -S21902F071A1001C83C1002083E10024382100284E8000209421B6 -S21902F086FFE87C0802A69381000893A1000C93C1001093E10027 -S21902F09B149001001C3F8000037CBF2B783D200003807C38C89C -S21902F0B07CDD33787CFE3B7893E938CC4BFFADF53D20000381C6 -S21902F0C56938D02C0B00004182001CB3CB0004801D0000392030 -S21902F0DA0000900B0000913C38C8480000143C600003386331EB -S21902F0EF347FE4FB784BFFB5C18001001C7C0803A68381000865 -S21902F10483A1000C83C1001083E10014382100184E8000209400 -S21902F11921FFD07C0802A6934100189361001C9381002093A15A -S21902F12E002493C1002893E1002C90010034A3A600047CBA2B12 -S21902F143787C7E1B787C9C23783CA000037CFF3B7838A5F0849A -S21902F158386100087FA4EB784BFFFBD12C0300004080000C382B -S21902F16D60FFFF48000084813F00043C001062817F000060008A -S21902F1824DD37D2900161D6B03E85529D1BE7F6B4A143D400050 -S21902F197033D2000033D60000393CA38C8938938CC934B38D0F6 -S21902F1AC480019CD7FBAEB787C7E1B783BE0FFFF3FA000033FB6 -S21902F1C1800003480019B57C7E18507C03D84040800018480080 -S21902F1D60559801D38C82C0000004082FFE483FC38CC7F43D339 -S21902F1EB784BFFFB957FE3FB78800100347C0803A68341001823 -S21902F2008361001C8381002083A1002483C1002883E1002C3852 -S21902F2152100304E8000209421FFF07C0802A693E1000C9001BD -S21902F22A00147C691B78880900002C0000FF4082002C88090001 -S21902F23F012C0000FF40820020880900022C0000FF4082001411 -S21902F25488090003386000012C0000FF418200643FE000037D80 -S21902F269234B78389F35E838A000044BFFB6B12C030000408231 -S21902F27E000C3860000148000040881F35E8389F35E82C000063 -S21902F293004082002C880400012C000000408200208804000248 -S21902F2A82C0000004082001488040003386000012C00000041B3 -S21902F2BD82000838600000800100147C0803A683E1000C382188 -S21902F2D200104E8000209421FFD87C0802A693A1001C93C100C6 -S21902F2E72093E100249001002C7C7E1B7883FE00047C9D2378D0 -S21902F2FC387F00104BFFFF1D2C03000041820020A09F00007FF9 -S21902F311E3FB785484D6BA38A00000480003752C030000418298 -S21902F32600107FC3F37848000341480000A8801F000C813D0029 -S21902F33B00A17D0004900100089121000CB1610010A13F00003B -S21902F350A01F00025523D6BA7C030050B01E000C881F00092C53 -S21902F36500000641820038418100102C0000014182001448006D -S21902F37A00582C000011418200384800004C7C1F1A14901E00DC -S21902F38F087FC3F37838810008480005054800003C7C1F1A144D -S21902F3A4901E00087FC3F3783881000848000AE5480000247C0A -S21902F3B91F1A14901E00087FC3F378388100084BFFFA1148002A -S21902F3CE000C7FC3F378480002998001002C7C0803A683A10089 -S21902F3E31C83C1002083E10024382100284E8000209421FFE003 -S21902F3F87C0802A69361000C9381001093A1001493C100189362 -S21902F40DE1001C900100247C7C1B7883BC000480FC0008A13C02 -S21902F422000C7CFD38507D293A14B13C000CA01D000054E935A5 -S21902F4372E5400053E600040007000F0FF7C004B78B01D0000E9 -S21902F44C39200000993D00013D000003A12838D4A01C000CB1E6 -S21902F4613D0004B01D000239690001B16838D439400000380006 -S21902F4760040989D0009981D0008B15D000AB15D00063D2000B6 -S21902F48B03800935E87CBB2B78901D000C813B00007CE43B785A -S21902F4A0913D00107FA3EB7838A00000480001E5B07D000A7F31 -S21902F4B583E378389B000438A0080048000371800100247C08C1 -S21902F4CA03A68361000C8381001083A1001483C1001883E10081 -S21902F4DF1C382100204E8000203D000003800835F82C0000006D -S21902F4F44C82002038000001900835F8380000047C0903A63C6A -S21902F5098000033D2000043D600004814438D838A90074390BF3 -S21902F51E002438C005EA38E000007D272A147120000239690097 -S21902F53302914800007C00002654001FFE7C0000D07D6B007822 -S21902F5487D2900387D295B78912800107D0A4378B0C8000E3986 -S21902F55D0A001438E705EC4200FFC4914438D84E8000209421D7 -S21902F572FFE87C0802A69381000893A1000C93C1001093E10036 -S21902F587149001001C3D2000043BE900243BC000003F80000341 -S21902F59C7FFDFB7880DF0010A0FF000EA11F000C813F00007F3D -S21902F5B1C4F3787FA5EB78387C31604BFFB0F93BDE00012C1EEC -S21902F5C600033BFF00143BBD00144081FFD03D2000033C600040 -S21902F5DB03808938D83863318C4BFFB0D18001001C7C0803A60B -S21902F5F08381000883A1000C83C1001083E10014382100184E38 -S21902F6058000203CA00003806538D82C0300004D8200203CE03B -S21902F61A0003814735F03D200003800935F4394A00017CC050C2 -S21902F62F503C800003816435EC8103001080030000392800141E -S21902F644900538D87C065800912300089103000438000000B0EF -S21902F65903000C914735F04C81002090C435EC4E8000203D40BC -S21902F66E0003812A35F03D600003800B38D83929FFFF912A3522 -S21902F683F0906B38D8900300004E8000203484FFFE4180001861 -S21902F698A00300003484FFFE7CA50214386300024080FFF02C4F -S21902F6AD04FFFF40820010880300005400402E7CA5021454ABEA -S21902F6C2043E54A9843E380000007CA95A146000FFFF7C050081 -S21902F6D7004081000C3D25FFFF38A900017CA928F85523C63E47 -S21902F6EC5463402E5520063E7C031B784E800020A123000EA0B2 -S21902F70103000CA16300107C004A14A1430012892300097C00C8 -S21902F7165A147C005214A06300027C004A147C601A144E8000D0 -S21902F72B209421FFD87C0802A69381001893A1001C93C10020FA -S21902F74093E100249001002C3F8000033FA000033FC00003387A -S21902F7556005EA4BFFFEB17C7F1B79408200183C6000033863AD -S21902F76A319C4BFFAF494BFFFE0148000000809F00103861001B -S21902F77F0838A005EA4BFFDB8D5460043E2C000000B07F000C90 -S21902F79441820074A0010014813C36042C00080039290001914E -S21902F7A93C3604418200182C000806418200347FE3FB784BFFA3 -S21902F7BEFEB14BFFFF94813D35FC801F001039290001913D359F -S21902F7D3FC901F00047FE3FB783881000E4BFFFAF94BFFFF70D9 -S21902F7E8813E3600801F001039290001913E3600901F00047FC7 -S21902F7FDE3FB7848000F9D4BFFFF507FE3FB784BFFFE6180010E -S21902F812002C7C0803A68381001883A1001C83C1002083E1005D -S21902F82724382100284E8000209421FFE87C0802A69001001CBD -S21902F83C80040000A144000490010008390100083D200003B157 -S21902F851480004396938B0A14B0004B0A10014800938B0A0A3BC -S21902F866000C808300109001000EB14100127D0343784BFFD867 -S21902F87B3D3D600003812B360839290001912B36088001001CB0 -S21902F8907C0803A6382100184E8000209421FFF07C0802A6936D -S21902F8A5C1000893E1000C900100147C7F1B78807F00087C9EAA -S21902F8BA2378A00300002C00080040820050A09F000C38A0008B -S21902F8CF004BFFFDC17C631B794082003C813F000838A0000004 -S21902F8E498690000817F0008B06B0002807F0008A09F000C4B45 -S21902F8F9FFFD99813F00087FC5F378B06900027FE3FB7838803F -S21902F90E00014BFFFAE57FE3FB784BFFFD55800100147C080326 -S21902F923A683C1000883E1000C382100104E8000209421FFD883 -S21902F9387C0802A693410010936100149381001893A1001C938C -S21902F94DC1002093E100249001002C7C9B23787C7E1B78736056 -S21902F96200023B9E002C83BC000483FC00087CBA2B784182001C -S21902F9774438000018B01C000C813F000C396000065169E006FD -S21902F98C3C000204913F000C600005B490010008387F0014388C -S21902F9A181000838A000044BFFA50938000000B01E0016480089 -S21902F9B60020A13E00163960000539290014B13C000C801F0074 -S21902F9CB0C5160E006901F000C801F000C396000005160C10EFE -S21902F9E0901F000C813E00542C1A0000913F0004801E0050B184 -S21902F9F57F0010901F000840820054A01E0012B01F0000A13E1C -S21902FA0A00149B7F000DB13F0002A01E00162C000000418200F0 -S21902FA1F0C63600008981F000D380005B4B01F000EB35F00123E -S21902FA343D200003800935E839600006901D000C813E000899F8 -S21902FA497D0009913D0010A01C000C7FA3EB78B01D0002A3BCC2 -S21902FA5E000C4BFFFC9D7C651B787FA4EB787FE3FB784BFFFC88 -S21902FA7321B07F00107F83E3783880000638BE00084BFFF9714A -S21902FA88801E00042C00000A408200243C8000013CA0000338D0 -S21902FA9DA5FC887FC6F378387E00186084D4C048000B5D480036 -S21902FAB20034881F000D7009000340820010A01E00162C000002 -S21902FAC7004182001C3CA0000338A5FC607FC6F378387E0018AE -S21902FADC388003E848000B298001002C7C0803A68341001083BE -S21902FAF16100148381001883A1001C83C1002083E100243821E3 -S21902FB0600284E8000209421FFE07C0802A69361000C938100F9 -S21902FB1B1093A1001493C1001893E1001C900100247C7C1B783A -S21902FB3083FC0008815C0004A0DF0000A0FF0002807F000480AE -S21902FB45BF000839000014B11C000C3BEA0014801F000C39207A -S21902FB5A0005396000005120E0065160C10E901F000C39200402 -S21902FB6F00B13F000EB17F0010B17F0012B0EA0014B0DF0002BB -S21902FB84991F000D907F000890BF00043D200003800935E87CB4 -S21902FB999B2378900A000C813B000038000006912A0010980A0D -S21902FBAE0009A13C000C7D435378B12A0002A3BC000C4BFFFB31 -S21902FBC33D7C651B787FA4EB787FE3FB784BFFFAC1B07F0010D6 -S21902FBD87F83E3787F65DB78388000064BFFF811800100247C4B -S21902FBED0803A68361000C8381001083A1001483C1001883E14F -S21902FC02001C382100204E8000203D200003812938DC396000AC -S21902FC17002C0900004D8200207D2A4B787C0918004082001CC8 -S21902FC2C2C0B00004182001080090000900B00004800000881BD -S21902FC414900007D2B4B78812900002C0900004082FFD43D2022 -S21902FC560003914938DC4E8000209421FFF87C0802A69001004A -S21902FC6B0C3880000038A000014BFFFCC18001000C7C0803A61F -S21902FC80382100084E8000209421FFF87C0802A69001000C386C -S21902FC95000000900300044BFFFF718001000C7C0803A63821EF -S21902FCAA00084E8000209421FFF07C0802A693E1000C90010067 -S21902FCBF147C7F1B784800001080030000901F00404BFFF99DDD -S21902FCD4807F00402C0300004082FFEC800100147C0803A683B4 -S21902FCE9E1000C382100104E8000209421FFE87C0802A693A1BF -S21902FCFE000C93C1001093E100149001001C7C7D1B7838000081 -S21902FD1300901D0004387D00184800097D7FA3EB784BFFFF8D2D -S21902FD287FA3EB784BFFFEE18001001C7C0803A683A1000C8394 -S21902FD3DC1001083E10014382100184E8000208124000880E3F2 -S21902FD520050814900048009000CA164000C7D07505154003622 -S21902FD67BA7D6058507D090214418100707C0A38507D605851DF -S21902FD7C7D08021440810060814300407D275A142C0A0000382B -S21902FD91000000912300509004000041820030800A00002C0015 -S21902FDA600004182001C7D49537881290000800900002C000072 -S21902FDBB004082FFF47D2A4B78908A00004800001091030044C3 -S21902FDD09083004091630048386000014E800020386000004E1B -S21902FDE58000209421FFF07C0802A693C1000893E1000C900125 -S21902FDFA0014812400087C7F1B7883C90008801F00547D20F0CA -S21902FE0F514081006C387F001848000881811F0054A15F0016AF -S21902FE247D68F0505549043E7F8B48004FFEE3827C00002654C3 -S21902FE390007FE7C0000D07D2900787D6B00387D6B4B794081B1 -S21902FE4E00307D2B50505525043E2C0500007C085A14901F0092 -S21902FE6354B13F001641820014807F0034386300147C835A1403 -S21902FE784BFFA039800100147C0803A683C1000883E1000C3895 -S21902FE8D2100104E8000209421FFE07C0802A69361000C938166 -S21902FEA2001093A1001493C1001893E1001C900100247C7C1B28 -S21902FEB778807C0004A01C000C83FC0008B0030002A3BC000C48 -S21902FECC7C9E23784BFFF82D7C651B787FA4EB787FE3FB784BDC -S21902FEE1FFF7B12C0300003B600000408203A03D20000383A9A3 -S21902FEF638DC4800000883BD00002C1D00004182037CA13D00E3 -S21902FF0B12A01F00027C0900004082FFE8A13D00142C090000B2 -S21902FF2041820028A01F00007C0900004082FFD07FC3F3783820 -S21902FF359D000838A000044BFFA9E92C0300004082FFB8801D0E -S21902FF4A0004817E0004A13E00082C000002917D000CB13D0077 -S21902FF5F1041820024881F000D70090004418200187FA3EB78FE -S21902FF744BFFFD817F83E3784BFFF6F14800031C813D000438BA -S21902FF8909FFFF28000009418102FC3D600003396B31C05400DB -S21902FF9E103A7D4B002E3D200003392931C07D4A4A147D490366 -S21902FFB3A64E800420881F000D7009000241820040380000022E -S21902FFC8901D0004813F0004A17F000039290001913D0050B156 -S21902FFDD7D0014801E000039200000901D0008B13D004C7FA36F -S21902FFF2EB78B13D001638800012480002247FC4F3787F83E3C1 -S219030007784BFFFB0548000280387D001848000685881F000DFC -S21903001C700900044182001038000001901D0004480002607073 -S219030031090002408202387009001041820250813D0054807FFC -S2190300460008392900017C0348004082023C38000004907D0022 -S21903005B54901D00044800022C881F000D83DD00507009001020 -S219030070418200107FA3EB787F84E3784BFFFD6D7FA3EB787F05 -S21903008584E3784BFFFCC5881F000D7C7B1B78700900014182F9 -S21903009A0024807F0004801D00507C03000040820014380300A5 -S2190300AF0139200005901D0050913D0004801D00507C00F000AD -S2190300C440820010A01D004C2C000000418201BCA3FD00162CB6 -S2190300D91F000040820024387D0018480005B57FA3EB783880F9 -S2190300EE001038A000004BFFF841B3FD004C480001903800007D -S21903010301B01D004C48000184881F000D70090010418201787F -S2190301187FA3EB787F84E3784BFFFCC9813D0054801F000839E6 -S21903012D2900017C0048004082015838000000901D00047FA3A1 -S219030142EB784BFFFAC948000144881F000D70090010418200A3 -S219030157607FA3EB787F84E3784BFFFC89813D0054801F0008C0 -S21903016C392900017C00480040820040881F000D7009000141DE -S21903018182002C813D00503800000A39290001913D0050901D35 -S21903019600047FA3EB783880001038A000004BFFF79148000009 -S2190301AB0C38000008901D0004881F000D70090001418200D079 -S2190301C0387D0018480004D5813D0050380000093929000191F1 -S2190301D53D0050901D00047FA3EB78388000114800003C7FA3DB -S2190301EAEB787F84E3784BFFFB5D881F000D7C7B1B78700900DE -S2190301FF014182008C813D00503800000A39290001913D0050C2 -S219030214901D00047FA3EB783880001038A000004BFFF711485D -S219030229000064881F000D70090010418200587FA3EB787F8474 -S21903023EE3784BFFFBA9813D0054801F0008392900017C00487A -S2190302530040820038387D00184800043D3800000A901D00044B -S219030268480000247FA3EB783880000038A000014BFFF6BD48B2 -S21903027D0000107FC4F3787F83E3784BFFF8852C1B0000408279 -S219030292000C7F83E3784BFFF3D5800100247C0803A68361001E -S2190302A70C8381001083A1001483C1001883E1001C382100208D -S2190302BC4E8000209421FFF87C0802A69001000C4BFFF46148DB -S2190302D10004218001000C7C0803A6382100084E80002094212D -S2190302E6FFE87C0802A69381000893A1000C93C1001093E100B4 -S2190302FB149001001C7C7D1B787C9C23783880000038A006440C -S2190303104BFF9C793D600003810B38DC381D006C395D005890F2 -S2190303251D0034915D003039200001380005EA93AB38DC913DAB -S21903033A0004B39D0012B01D003A911D0000915D003C386000C9 -S21903034F008001001C7C0803A68381000883A1000C83C1001037 -S21903036483E10014382100184E8000209421FFF07C0802A69342 -S219030379E1000C900100147C7F1B78480000084BFFFF39801FD6 -S21903038E00042C00000041820010A01F00162C0000004082FF8D -S2190303A3E8800100147C0803A683E1000C382100104E800020CC -S2190303B89421FFF07C0802A693E1000C900100147C7F1B784B5A -S2190303CDFFFFA5817F000469690004200900007D2049146960AA -S2190303E20002214000007C0A01147D2A037941820020380000C2 -S2190303F707901F00047FE3FB783880001138A000004BFFF52D4D -S21903040C480000242C0B00054082001C38000006901F00047FDD -S219030421E3FB783880001138A000004BFFF5097FE3FB784BFF60 -S219030436F87D800100147C0803A683E1000C382100104E8000CB -S21903044B209421FFE87C0802A69381000893A1000C93C10010EC -S21903046093E100149001001C7CBE2B797C7F1B787C9D237840EA -S219030475810010801F00482C0000004082001438600000480010 -S21903048A00B8907F0048480000AC3B80000048000064809F00CC -S21903049F447FA3EB784BFF9A0D807F0040801F004881230000BC -S2190304B47FC0F050913F00407F9C02147FBD02144BFFF1A980B5 -S2190304C97F00402C0300004182FFBC81630008A123000C800B63 -S2190304DE000C540036BA7D204850913F0048800B000C54003643 -S2190304F3BA7D6B0214917F00442C1E00004182003C80BF004810 -S2190305087C1E28004080FF90809F00447FA3EB787FC5F3784BE3 -S21903051DFF9995813F0044801F00487D29F2147C1E0050901F64 -S2190305320048913F00447F9CF2147F83E3788001001C7C0803AE -S219030547A68381000883A1000C83C1001083E100143821001878 -S21903055C4E8000209421FFF07C0802A693C1000893E1000C9058 -S2190305710100147CBE2B797C7F1B78807F00344081006C813FCC -S21903058600043929FFFC280900014081000C3860FFFF4800001A -S21903059B58A01F00162C00000040820048213E05B47D294910C9 -S2190305B07D294BB87D2048F87FC94838700005B47D3E03783849 -S2190305C56300147FC5F3784BFF98E57FE3FB78B3DF00163880F7 -S2190305DA001038A000004BFFF3557FC3F37848000008386000F5 -S2190305EF00800100147C0803A683C1000883E1000C3821001008 -S2190306044E8000209421FFE87C0802A69381000893A1000C9334 -S219030619C1001093E100149001001C7C7F1B787CBD2B787CDCFC -S21903062E3378909F0004480005453D200003812938E0907F000E -S219030643082C09000093BF000C939F0010418200187C09F80065 -S21903065841820020812900002C0900004082FFF03D2000038032 -S21903066D0938E093E938E0901F00008001001C7C0803A683813E -S219030682000883A1000C83C1001083E10014382100184E800018 -S219030697203D200003812938E0394000002C0900004D82002067 -S2190306AC7D2B4B787C091800408200202C0A00004182001080BE -S2190306C1090000900A00004800001C81690000480000147D2A28 -S2190306D64B78812900002C0900004082FFD03D20000391693842 -S2190306EBE04E8000209421FFE87C0802A693A1000C93C10010B8 -S21903070093E100149001001C3D20000383E938E03BC000002C9C -S2190307151F00003FA000034182006448000459801F0008813F93 -S21903072A00047C6018507C0348404180003C2C1E000041820059 -S21903073F10801F0000901E00004800000C801F0000901D38E088 -S219030754801F000C807F00107C0803A63BC000004E8000218334 -S219030769FD38E04800000C7FFEFB7883FF00002C1F000040828B -S21903077EFFA48001001C7C0803A683A1000C83C1001083E10009 -S21903079314382100184E8000209421FFE87C0802A693810008F2 -S2190307A893A1000C93C1001093E100149001001C7C7D1B78834C -S2190307BDFD0004A13F0002A01F000069290800216900007D2BB1 -S2190307D2491468000001216000007C0B01147C0B48394182005C -S2190307E7D83FC00003387F0018389E35E838A000044BFFA12D65 -S2190307FC2C030000408200BCA01F00062C00000140820064819A -S2190308113F000E38000002B01F0006913F0018801F0008391F87 -S2190308260008A1280004901F0012389F0012B1240004801E358A -S21903083BE83D200003901F000E814938B0392938B0A169000491 -S219030850915F0008B16800043800001CB01D000C7FA3EB78388C -S219030865A008064BFFEFC9480000502C000002408200483FC0F7 -S21903087A0004801E18243B9E18242C00000041820034807C004F -S21903088F08389F000E38A000044BFFA08D7C631B794082001CBB -S2190308A4A01F000C817F0008813C0004B009000491690000905C -S2190308B97E18247FA3EB784BFFEDAD8001001C7C0803A6838131 -S2190308CE000883A1000C83C1001083E10014382100184E8000CA -S2190308E3209421FFD87C0802A6936100149381001893A1001C9C -S2190308F893C1002093E100249001002C7C7F1B787C9D237838A0 -S21903090D60002A4BFFECF97C7E1B7940820018480001007FC321 -S219030922F3784BFFED4938600000480000F4817E00043920009D -S21903093704992B0005394000013900080038000006980B000436 -S21903094CB14B0000B14B0006B10B00023D200003800935E83D8F -S219030961400003900B000E392A38B0A1090004800A38B0B10B66 -S219030976000C900B0008813F00003D400004912B0018396A18E5 -S21903098B24380000FF93EB00089801000D93AB0004392000012C -S2190309A0912A182498010008980100099801000A9801000B9821 -S2190309B501000C3BA000073F8000043B60001CB37E000C7FC33D -S2190309CAF3783881000838A008064BFFEE5D480001A17C7F1B69 -S2190309DF78480000144BFFED49801C18242C0000004182FF30B1 -S2190309F4480001857C7F1850280300F94081FFE47FA0EB782C3F -S219030A090000003BBDFFFF4181FFB47FC3F3784BFFEC55386095 -S219030A1EFFFF8001002C7C0803A6836100148381001883A100AB -S219030A331C83C1002083E10024382100284E8000209421FFD8A3 -S219030A487C0802A6930100089321000C9341001093610014938A -S219030A5D81001893A1001C93C1002093E100249001002C3D206D -S219030A7200043B2918303B1900967C7B1B787C9C23787F3DCB09 -S219030A87783B4000007FBEEB787F63DB787FC4F37838A0000400 -S219030A9C4BFF9E892C0300007F5FD378418200383BBE000A7CFA -S219030AB11DC0003B5F000A4081FFD4801B00007F63DB78901C97 -S219030AC60000389C00044BFFFE192C030000408000283860FF2C -S219030ADBFF4800006C7C1AC82EA13D0008817D0004B13C0008E2 -S219030AF0901C0000917C00044800004C3CC000038126360C8030 -S219030B05FC0000390900011D29000A3D600004A15C0008801C02 -S219030B1A0004396B18307CE9592E7D295A142C080010B1490090 -S219030B2F08900900049106360C4082000C380000009006360C4D -S219030B44386000008001002C7C0803A6830100088321000C8363 -S219030B59410010836100148381001883A1001C83C1002083E112 -S219030B6E0024382100284E8000209421FFF87C0802A69001006E -S219030B830C3D2000003929320080090048386003E87C0803A6D7 -S219030B984E8000213D2000038069361038630001906936108067 -S213030BAD01000C7C0803A6382100084E800020A8 -S219030BC03C746F7069633E0048656C702061626F7574206865CE -S219030BD56C703F0000000068656C70000000005B2D77203C7470 -S219030BEA696D656F75743E5D205B656E7472795D000045786594 -S219030BFF6375746520636F64652061742061206C6F636174695B -S219030C146F6E0000676F00002D62203C6C6F636174696F6E3E8E -S219030C29205B2D6C203C6C656E6774683E5D00446973706C61C4 -S219030C3E7920286865782064756D702920612072616E676520C6 -S219030C536F66206D656D6F72790000000064756D700000000040 -S219030C685B4F4E207C204F46465D00004D616E616765206D614C -S219030C7D6368696E6520636163686573000000636163686500D8 -S219030C9200000A526564426F6F7428746D292064656275672013 -S219030CA7656E7669726F6E6D656E74202D206275696C742025A9 -S219030CBC732C2025730A000031323A33303A3039000000004FC8 -S219030CD16374203230203230303000506C6174666F726D3A202C -S219030CE6257320282573292025730A0000004D6F746F726F6CA2 -S219030CFB61204D425800000000506F7765725043203836300016 -S219030D1000000000436F707972696768742028432920323030A7 -S219030D25302C20526564204861742C20496E632E0A0A005241A2 -S219030D3A4D3A2025702D25700A003D3D20457865637574696EB5 -S219030D4F6720626F6F742073637269707420696E202564207364 -S219030D6465636F6E6473202D20656E746572205E4320746F2087 -S219030D7961626F72740A00526564426F6F743E200000002A2ADA -S219030D8E204572726F723A20496C6C6567616C20636F6D6D61DD -S219030DA36E643A2025730A00006F6E00006F666600496E7661BF -S219030DB86C6964206361636865206D6F64653A2025730A0063AD -S219030DCD6163686573203F0A00000025730A20202025732025BD -S219030DE2730A00000000626173652061646472657373000000D6 -S219030DF7006C656E677468000044756D702077686174205B6C0C -S219030E0C6F636174696F6E5D3F0A0000776169742074696D65B2 -S219030E216F7574000000007374617274696E67206164647265D0 -S219030E3673730000000041626F757420746F207374617274204D -S219030E4B657865637574696F6E206174202570202D2061626F6D -S219030E6072742077697468205E432077697468696E2025642076 -S219030E757365636F6E64730A0000005B2D765D205B2D725D2075 -S219030E8A5B2D62203C6D656D5F616464723E5D203C66696C6535 -S219030E9F5F6E616D653E0000004C6F616420612066696C650037 -S219030EB46C6F616400000000454C4620696D61676573206E6F17 -S219030EC97420737570706F727465640A000000496E76616C6925 -S219030EDE6420532D7265636F7264206174206F666673657420B8 -S219030EF325702C20696E7075743A2025630A00000042616420BE -S219030F08532D7265636F726420636F756E74206174206F666634 -S219030F1D7365742025700A0000000041646472657373206F66F1 -S219030F3266736574203D2025700A00000000417474656D7074F5 -S219030F4720746F206C6F616420532D7265636F72642064617452 -S219030F5C6120746F20616464726573733A202570205B6E6F7453 -S219030F7120696E2052414D5D0A00002A2A2A205761726E696EF8 -S219030F86672120436865636B73756D206661696C757265202D1E -S219030F9B20416464723A20256C782C202530326C58203C3E20EA -S219030FB02530326C580A0000456E74727920706F696E743A2019 -S219030FC525702C20616464726573732072616E67653A2025702C -S219030FDA2D25700A0000496E76616C696420532D7265636F72AC -S219030FEF64206174206F6666736574203078256C782C207479DB -S21903100470653A2025780A0000000000FFFF4AA8FFFF490CFFB7 -S219031019FF490CFFFF490CFFFF4A90FFFF4A90FFFF4A90FFFF8D -S21903102E4A58FFFF4A58FFFF4A58256308000A000000757361E0 -S21903104367653A206C6F6164203C66696C655F6E616D653E2070 -S2190310585B2D725D205B2D765D205B2D68203C686F73743E5DE4 -S21903106D205B2D6D207B54465450207C205A4D4F44454D7D5D16 -S219031082205B2D62203C626173655F616464726573733E5D0A66 -S21903109700766572626F7365006C6F61642072617720646174E3 -S2190310AC610000006C6F616420616464726573730000000064BC -S2190310C16F776E6C6F6164206D6F6465202854465450206F72D2 -S2190310D6205A4D4F44454D290000686F7374206E616D65202821 -S2190310EB4950206164647265737329000066696C65206E616D24 -S21903110065000000496E76616C6964204950206164647265735A -S219031115733A2025730A007A6D6F64656D000074667470000004 -S21903112A000054465450206D6F646520726571756972657320F5 -S21903113F6120776F726B696E67206E6574776F726B0A000000DD -S219031154496E76616C696420276D6F6465273A2025730A004662 -S219031169696C65206E616D65206D697373696E670A00004361A6 -S21903117E6E2774206C6F616420272573273A2025730A00000089 -S219031193004572726F722072656164696E6720686561646572B2 -S2190311A82076696120544654503A2025730A0000536F72727951 -S2190311BD2C207A6D6F64656D20646F776E6C6F6164206E6F7454 -S2190311D22079657420617661696C61626C650A00000052617799 -S2190311E7206C6F61642072657175697265732061206D656D6F4C -S2190311FC727920616464726573730A005261772066696C6520D1 -S2190312116C6F616465642025702D25700A0000454C4600556E3C -S2190312267265636F676E697A656420696D61676520747970657C -S21903123B3A20256C780A000000000000006574683000000000B8 -S21903125071756963635F65746800000051554943432045746816 -S21903126565726E65743A204E6F206672656520786D6974206211 -S21903127A7566666572730A000000000000007B636D64737D0023 -S21903128F004D616E61676520464C41534820696D6167657300D5 -S2190312A4666973005B2D6C5D000000004D616E61676520636F5F -S2190312B96E66696775726174696F6E206B65707420696E204641 -S2190312CE4C415348206D656D6F727900000066636F6E66696746 -S2190312E3005B2D665D00000000496E697469616C697A6520462B -S2190312F84C41534820496D6167652053797374656D205B4649FF -S21903130D535D00696E69740000000000000000446973706C6102 -S2190313227920636F6E74656E7473206F6620464C4153482049BB -S2190313376D6167652053797374656D205B4649535D00000000A0 -S21903134C6C69737400000000446973706C617920667265652010 -S2190313615B617661696C61626C655D206C6F636174696F6E732A -S2190313762077697468696E20464C41534820496D6167652053A3 -S21903138B797374656D205B4649535D00006672656500000000B7 -S2190313A02D66203C666C6173685F616464723E202D6C203C6C7A -S2190313B5656E6774683E00457261736520464C41534820636F57 -S2190313CA6E74656E74730000000065726173650000006E616D1E -S2190313DF6500000000446973706C617920616E20696D616765A4 -S2190313F42066726F6D20464C41534820496D6167652053797318 -S21903140974656D205B4649535D000064656C65746500004C6F98 -S21903141E616420696D6167652066726F6D20464C4153482049FE -S2190314336D6167652053797374656D205B4649535D20696E7438 -S2190314486F2052414D0000006C6F6164000000002D62203C6D20 -S21903145D656D5F626173653E202D6C203C696D6167655F6C6520 -S2190314726E6774683E205B2D73203C646174615F6C656E6774E4 -S219031487683E5D205B2D66203C666C6173685F616464723E5D38 -S21903149C205B2D65203C656E7472795F706F696E743E5D205BF9 -S2190314B12D72203C72616D5F616464723E5D203C6E616D653E13 -S2190314C6000043726561746520616E20696D6167650063726569 -S2190314DB61746500002A2A2A20696E76616C69642027666973AC -S2190314F02720636F6D6D616E643A2025730A000066697320005B -S21903150500000066756C6C20696E697469616C697A6174696F7C -S21903151A6E2C2065726173657320616C6C206F6620666C617363 -S21903152F680000000041626F757420746F20696E697469616C2F -S219031544697A65205B666F726D61745D20464C41534820696D5D -S2190315596167652073797374656D002A2A2041626F727465644E -S21903156E0A002A2A2A20496E697469616C697A6520464C415360 -S2190315834820496D6167652053797374656D0A00002020206988 -S2190315986E697469616C697A6174696F6E206661696C65642012 -S2190315AD25703A202578282573290A000000002020202057616A -S2190315C2726E696E673A2064657669636520636F6E74656E7409 -S2190315D773206E6F74206572617365642C20736F6D6520626C91 -S2190315EC6F636B73206D6179206E6F7420626520757361626C3C -S219031601650A00526564426F6F7400526564426F6F745B6261E1 -S219031616636B75705D00526564426F6F7420636F6E6669670062 -S21903162B00464953206469726563746F72790000004572726F33 -S219031640722077726974696E6720696D616765206465736372A3 -S2190316556970746F72732061742025703A202578282573290A43 -S21903166A00004E616D65202020202020202020202020202046DC -S21903167F4C41534820616464722020204D656D20616464722011 -S2190316942020204C656E67746820202020456E74727920706FE6 -S2190316A9696E740A000000252D313673202030782530386C586A -S2190316BE20202030782530386C58202030782530366C5820203F -S2190316D330782530386C580A00202030782530386C58202E2E42 -S2190316E82030782530386C580A0000006D656D6F727920626146 -S2190316FD736520616464726573730072616D2062617365206176 -S21903171264647265737300000000656E74727920706F696E74B9 -S219031727206164647265737300464C415348206D656D6F727978 -S21903173C20626173652061646472657373000000696D616765CC -S219031751206C656E677468205B696E20464C4153485D00696DC6 -S2190317666167652073697A65205B61637475616C2064617461AF -S21903177B5D0000000066696C65206E616D65000000696E7661E5 -S2190317906C696420617267756D656E74730000007265717569E7 -S2190317A572656420706172616D65746572206D697373696E67F1 -S2190317BA0000496E76616C696420464C41534820696D6167659A -S2190317CF2073697A652F6C656E67746820636F6D62696E617404 -S2190317E4696F6E00496E76616C696420464C4153482061646404 -S2190317F9726573733A20257020282573290A0020202076616C71 -S21903180E69642072616E67652069732025702D25700A00000046 -S219031823002A2A205741524E494E473A2052414D206164647229 -S2190318386573733A202570206D617920626520696E76616C6968 -S21903184D640A004E616D6520697320746F6F206C6F6E672C2005 -S2190318626D757374206265206C657373207468616E202564204E -S21903187763686172730A00000043616E2774206C6F63617465F4 -S21903188C20256C64206279746573206672656520696E20464C78 -S2190318A14153480A000000496D61676520666F756E642C206277 -S2190318B6757420464C415348206164647265737320696E636FCF -S2190318CB72726563740A000000496D61676520666F756E642C8B -S2190318E020627574204C454E47544820697320696E636F7272F5 -S2190318F56563740A000000416E20696D616765206E616D656499 -S21903190A202725732720657869737473000043616E27742070BD -S21903191F726F6772616D207468697320726567696F6E202D203A -S219031934636F6E7461696E7320636F646520696E2075736521F7 -S2190319490A000043616E277420657261736520726567696F6EF6 -S21903195E2061742025703A202578282573290A00000043616EC6 -S21903197327742070726F6772616D20726567696F6E20617420EB -S21903198825703A202578282573290A004572726F722065726161 -S21903199D73696E672061742025703A202578282573290A0000E8 -S2190319B200004572726F722070726F6772616D6D696E672061CA -S2190319C7742025703A202578282573290A000000006C656E674A -S2190319DC746800006D697373696E6720617267756D656E740095 -S2190319F1000000696D616765206E616D65000044656C657465C2 -S219031A0620696D61676520272573270000004E6F20696D61671F -S219031A1B65202725732720666F756E640A000000004E6F7420AC -S219031A3061206C6F616461626C6520696D6167650A0000004671 -S219031A454C4153483A2064726976657220696E69742066616952 -S219031A5A6C6564212C207374617475733A2025780A00464C4155 -S219031A6F53483A202570202D2025702C20256420626C6F636BCE -S219031A8473206F662025702062797465732065612E0A0000744F -S219031A996F6F2066657720617267756D656E7473000000756E17 -S219031AAE7265636F676E697A656420636F6D6D616E64000000F2 -S219031AC30052756E2073637269707420617420626F6F74000053 -S219031AD8626F6F745F73637269707400426F6F742073637269E4 -S219031AED707400626F6F745F7363726970745F64617461000057 -S219031B020000426F6F74207363726970742074696D656F757456 -S219031B1700626F6F745F7363726970745F74696D656F757400A3 -S219031B2C25733A200000000025732000747275650000000066CC -S219031B41616C73650000002564200030782530325800003A0078 -S219031B560000200000003F3F00000A0000002E2E2025730A00AC -S219031B6B00456E746572207363726970742C207465726D696ECF -S219031B80617465207769746820656D707479206C696E650A0011 -S219031B950000003E3E200000000000FFFF17A8FFFF17CCFFFFFB -S219031BAA1848FFFF1854FFFF17E0FFFF17FCFFFF195CFFFF19C4 -S219031BBF70FFFF1AE4FFFF1A34FFFF198CFFFF19D0FFFF16288B -S219031BD4FFFF1628FFFF1638FFFF1640FFFF1628FFFF16306C2C -S219031BE969737420636F6E66696775726174696F6E206F6E6C8E -S219031BFE79002A2A20696E76616C696420656E7472790A00009A -S219031C130055706461746520526564426F6F74206E6F6E2D7674 -S219031C286F6C6174696C6520636F6E66696775726174696F6E1D -S219031C3D0000004572726F722077726974696E6720636F6E6696 -S219031C52696720646174612061742025703A2025782825732961 -S219031C670A0000000000000000FFFF13E0FFFF1440FFFF13F80A -S219031C7CFFFF13FCFFFF1410FFFF14305265717565737420666B -S219031C916F7220636F6E6669672076616C75652027257327205C -S219031CA62D2077726F6E6720747970650A0043616E2774206688 -S219031CBB696E6420636F6E6669672076616C75652027257327F8 -S219031CD00A00000000000000FFFF11D0FFFF11D0FFFF1234FFEC -S219031CE5FF11F0FFFF11D0FFFF11DC464C41534820636F6E66E4 -S219031CFA696775726174696F6E20636865636B73756D20657291 -S219031D0F726F72206F7220696E76616C6964206B65790A0000E9 -S219031D2400000000FFFF42B4FFFF42B4FFFF42B4FFFF42B4FFD3 -S219031D39FF42B4FFFF42B4FFFF42B4FFFF42B4FFFF42B4FFFFCA -S219031D4E42B4FFFF42B4FFFF42B4FFFF42B4FFFF42B4FFFF4272 -S219031D63B4FFFF42B4FFFF42D4FFFF42F4FFFF4314FFFF4334A9 -S219031D78FFFF4354FFFF43B8FFFF43B8FFFF43B8FFFF43B8FFD6 -S219031D8DFF4374FFFF4394FFFF4394FFFF4394FFFF4394FFFF31 -S219031DA24394FFFF4394FFFF4394FFFF4394FFFF4394FFFF43B8 -S219031DB794FFFF4394FFFF4394FFFF4394FFFF4394FFFF439452 -S219031DCCFFFF4394FFFF4394FFFF4394FFFF4394FFFF4394FFD2 -S219031DE1FF4394FFFF4394FFFF4394FFFF4394FFFF4394FFFFBD -S219031DF64394FFFF4394FFFF4394FFFF4394FFFF4394FFFF4364 -S219031E0B94FFFF4394FFFF4374FFFF4374FFFF4374FFFF43747D -S219031E20FFFF4374FFFF4374FFFF4374FFFF4374FFFF4374FF1D -S219031E35FF4374FFFF4374FFFF4374FFFF4374FFFF4374FFFF08 -S219031E4A4374FFFF4374FFFF42ECFFFF42ECFFFF4310FFFF4325 -S219031E5F34FFFF4334FFFF4374FFFF4374FFFF4374FFFF4374E9 -S219031E74FFFF4358FFFF4374FFFF4374FFFF4374FFFF4374FFE5 -S219031E89FF4374FFFF4374FFFF4374FFFF4374FFFF4374FFFFB4 -S219031E9E4374FFFF4374FFFF4374FFFF4374FFFF4374FFFF435B -S219031EB374FFFF4374FFFF4374FFFF4374FFFF4374FFFF437415 -S219031EC8FFFF4374FFFF4374FFFF4374FFFF4374FFFF4374FF75 -S219031EDDFF4374FFFF4374FFFF4374FFFF4374FFFF4374FFFF60 -S219031EF24374FFFF4374FFFF42A8FFFF42A8FFFF42A8FFFF426F -S219031F07A8FFFF42A8FFFF42A8FFFF42A8FFFF42A8FFFF42A88D -S219031F1CFFFF42A8FFFF42A8FFFF42A8FFFF42A8FFFF42A8FF21 -S219031F31FF42A8FFFF42A8FFFF42C8FFFF42E8FFFF4308FFFF4B -S219031F464328FFFF4348FFFF43ACFFFF43ACFFFF43ACFFFF4382 -S219031F5BACFFFF4368FFFF4388FFFF4388FFFF4388FFFF4388F0 -S219031F70FFFF4388FFFF4388FFFF4388FFFF4388FFFF4388FF68 -S219031F85FF4388FFFF4388FFFF4388FFFF4388FFFF4388FFFF53 -S219031F9A4388FFFF4388FFFF4388FFFF4388FFFF4388FFFF43FA -S219031FAF88FFFF4388FFFF4388FFFF4388FFFF4388FFFF4388A0 -S219031FC4FFFF4388FFFF4388FFFF4388FFFF4388FFFF4388FF14 -S219031FD9FF4388FFFF43883031323334353637383961626364C1 -S219031FEE65660000000000000000503031004F4B00004530311A -S21903200300453033004530320042303100FFFF5740FFFF5F409C -S219032018FFFF57ACFFFF5E00FFFF5C80FFFF5F40FFFF5F40FF3B -S21903202DFF5F40FFFF5938FFFF5F54FFFF5F40FFFF5F40FFFF80 -S2190320425F40FFFF5F40FFFF5A34FFFF5F40FFFF5F40FFFF5928 -S21903205738FFFF5790FFFF5F40FFFF5C80FFFF5F54FFFF5F408A -S21903206CFFFF5F40FFFF5F40FFFF5A30FFFF5F40FFFF5F40FF5C -S219032081FF5F40FFFF5F40FFFF5F40FFFF5F40FFFF5F40FFFF32 -S2190320965F40FFFF5F40FFFF5ECCFFFF5C80FFFF5F40FFFF5FF5 -S2190320AB40FFFF5F40FFFF579CFFFF5F40FFFF5F40FFFF5F4073 -S2190320C0FFFF5DE0FFFF5F40FFFF594CFFFF5F40FFFF5F40FF4F -S2190320D5FF5F40FFFF5784FFFF5DF8FFFF5C80000000003031E9 -S2190320EA32333435363738394142434445460000000000000098 -S2190320FF00FFFF7264FFFF7264FFFF7264FFFF7264FFFF7264A0 -S219032114FFFF7264FFFF7264FFFF7264FFFF7264FFFF7264FF8B -S219032129FF7264FFFF7264FFFF7264FFFF7264FFFF7264FFFF76 -S21903213E7264FFFF71A4FFFF71A4FFFF71D8FFFF720CFFFF7255 -S2190321530CFFFF7264FFFF7264FFFF7264FFFF7264FFFF724063 -S219032168FFFF7264FFFF7264FFFF7264FFFF7264FFFF7264FF37 -S21903217DFF7264FFFF7264FFFF7264FFFF7264FFFF7264FFFF22 -S2190321927264FFFF7264FFFF7264FFFF7264FFFF7264FFFF729A -S2190321A764FFFF7264FFFF7264FFFF7264FFFF7264FFFF726493 -S2190321BCFFFF7264FFFF7264FFFF7264FFFF7264FFFF7264FFE3 -S2190321D1FF7264FFFF7264FFFF7264FFFF7264FFFF7264FFFFCE -S2190321E67264FFFF7218FFFF7218FFFF7218FFFF7218FFFF7276 -S2190321FB18FFFF7218FFFF7218FFFF7218FFFF7218FFFF721807 -S219032210FFFF7218FFFF7218FFFF7218FFFF7218FFFF7218FF0A -S219032225FF7218FFFF7240FFFF7264FFFF7288FFFF72ACFFFF7D -S21903223A72D0FFFF733CFFFF733CFFFF733CFFFF733CFFFF7221 -S21903224FF4FFFF7314FFFF7314FFFF7314FFFF7314FFFF7314E5 -S219032264FFFF7314FFFF7314FFFF7314FFFF7314FFFF7314FFC5 -S219032279FF7314FFFF7314FFFF7314FFFF7314FFFF7314FFFFB0 -S21903228E7314FFFF7314FFFF7314FFFF7314FFFF7314FFFF7327 -S2190322A314FFFF7314FFFF7314FFFF7314FFFF7314FFFF731471 -S2190322B8FFFF7314FFFF7314FFFF7314FFFF7314FFFF7314FF71 -S2190322CDFF7314FFFF7294FFFF7294FFFF7294FFFF7294FFFF60 -S2190322E27294FFFF7294FFFF7294FFFF7294FFFF7294FFFF7259 -S2190322F794FFFF7294FFFF7294FFFF7294FFFF7294FFFF729422 -S21903230CFFFF7294FFFF72BCFFFF72DCFFFF72FCFFFF731CFF40 -S219032321FF733CFFFF73A4FFFF73A4FFFF73A4FFFF73A4FFFF9F -S219032336735CFFFF737CFFFF737CFFFF737CFFFF737CFFFF7396 -S21903234B7CFFFF737CFFFF737CFFFF737CFFFF737CFFFF737C58 -S219032360FFFF737CFFFF737CFFFF737CFFFF737CFFFF737CFFC0 -S219032375FF737CFFFF737CFFFF737CFFFF737CFFFF737CFFFFAB -S21903238A737CFFFF737CFFFF737CFFFF737CFFFF737CFFFF7322 -S21903239F7CFFFF737CFFFF737CFFFF737CFFFF737CFFFF737C04 -S2190323B4FFFF737CFFFF72FCFFFF72FCFFFF72FCFFFF72FCFF70 -S2190323C9FF72FCFFFF72FCFFFF72FCFFFF72FCFFFF72FCFFFFDC -S2190323DE72FCFFFF72FCFFFF72FCFFFF72FCFFFF72FCFFFF7254 -S2190323F3FCFFFF72FCFFFF7324FFFF7344FFFF7364FFFF738451 -S219032408FFFF73A4FFFF73ECFFFF73ECFFFF73ECFFFF73ECFF2F -S21903241DFF73ECFFFF73C4FFFF73C4FFFF73C4FFFF73C4FFFF72 -S21903243273C4FFFF73C4FFFF73C4FFFF73C4FFFF73C4FFFF7311 -S219032447C4FFFF73C4FFFF73C4FFFF73C4FFFF73C4FFFF73C4AB -S21903245CFFFF73C4FFFF73C4FFFF73C4FFFF73C4FFFF73C4FF5B -S219032471FF73C4FFFF73C4FFFF73C4FFFF73C4FFFF73C4FFFF46 -S21903248673C4FFFF73C4FFFF73C4FFFF73C4FFFF73C4FFFF73BD -S21903249BC4FFFF73C4FFFF7348FFFF738CFFFF7348FFFF738CBF -S2190324B0FFFF7348FFFF738CFFFF7348FFFF738CFFFF7348FFEB -S2190324C5FF738CFFFF7348FFFF738CFFFF7348FFFF738CFFFF92 -S2190324DA7348FFFF738CFFFF738CFFFF738CFFFF738CFFFF73C5 -S2190324EF8CFFFF738CFFFF738CFFFF738CFFFF738CFFFF738C53 -S219032504FFFF738CFFFF738CFFFF738CFFFF738CFFFF738CFFCA -S219032519FF738CFFFF738CFFFF738CFFFF738CFFFF738CFFFFB5 -S21903252E738CFFFF738CFFFF738CFFFF738CFFFF738CFFFF732C -S2190325438CFFFF738CFFFF738CFFFF738CFFFF738CFFFF738CFE -S219032558FFFF738CFFFF738CFFFF738CFFFF738CFFFF738CFF76 -S21903256DFF738CFFFF738CFFFF738CFFFF738CFFFF738CFFFF61 -S219032582738CFFFF738CFFFF73A4FFFF73A4FFFF73A4FFFF7390 -S219032597A4FFFF73A4FFFF73A4FFFF73A4FFFF73A4FFFF73A41A -S2190325ACFFFF73A4FFFF73A4FFFF73A4FFFF73A4FFFF73A4FFAA -S2190325C1FF73A4FFFF73A4FFFF72E4FFFF72E4FFFF7318FFFFA3 -S2190325D6734CFFFF734CFFFF73A4FFFF73A4FFFF73A4FFFF73BC -S2190325EBA4FFFF7380FFFF73A4FFFF73A4FFFF73A4FFFF73A4EA -S219032600FFFF73A4FFFF73A4FFFF73A4FFFF73A4FFFF73A4FF55 -S219032615FF73A4FFFF73A4FFFF73A4FFFF73A4FFFF73A4FFFF40 -S21903262A73A4FFFF73A4FFFF73A4FFFF73A4FFFF73A4FFFF73B7 -S21903263FA4FFFF73A4FFFF73A4FFFF73A4FFFF73A4FFFF73A471 -S219032654FFFF73A4FFFF73A4FFFF73A4FFFF73A4FFFF73A4FF01 -S219032669FF73A4FFFF73A43031323334353637383900003031BB -S21903267E323334353637383961626364656600000000303132AB -S2190326933334353637383941424344454600000000000000001B -S2190326A8FFFF7BC8FFFF7D78FFFF7D78FFFF7D78FFFF7D78FF09 -S2190326BDFF7D78FFFF7D78FFFF7D78FFFF7D78FFFF7D78FFFF42 -S2190326D27D78FFFF7D0CFFFF7BC8FFFF7D78FFFF7D78FFFF7DCD -S2190326E778FFFF7D78FFFF7D78FFFF7D78FFFF7D78FFFF7D789F -S2190326FCFFFF7D78FFFF7D78FFFF7D78FFFF7BA8FFFF7D78FFD5 -S219032711FF7D78FFFF7CA0FFFF7D78FFFF7D78FFFF7D78FFFFC6 -S2190327267D78FFFF7BC8000000005E430A003078253038583AEE -S21903273B20000000002530325800000000202000002000000022 -S219032750207C0000256300007C0A0000202D2061726520796F15 -S2190327657520737572652028792F6E293F2000556E62616C61CA -S21903277A6E63656420737472696E67210A00416D626967756F02 -S21903278F757320636F6D6D616E6420272573272C2063686F6951 -S2190327A4636573206172653A20257300202573000A000000557C -S2190327B9736167653A0A002020257325732025730A00002A2A99 -S2190327CE204572726F723A20257320616C7265616479207370CD -S2190327E3656369666965640A002A2A204572726F723A20696E57 -S2190327F876616C6964206E756D626572202725732720666F729E -S21903280D2025730A0000002A2A204572726F723A20696E766166 -S2190328226C696420666C616720272563270A000000002A2A2032 -S2190328374572726F723A206E6F2064656661756C742F6E6F6EC4 -S21903284C2D666C616720617267756D656E747320737570706F5B -S219032861727465640A00004E45544153434949000000004F43BF -S219032876544554000000556E6B6E6F776E206572726F7200001E -S21903288B0066696C65206E6F7420666F756E6400006163636557 -S2190328A073732076696F6C6174696F6E000000006469736B2075 -S2190328B566756C6C206F7220616C6C6F636174696F6E2065780F -S2190328CA63656564656400000000696C6C6567616C20544654AF -S2190328DF50206F7065726174696F6E0000756E6B6E6F776E206B -S2190328F47472616E736665722049440066696C6520616C726551 -S21903290961647920657869737473006E6F2073756368207573FB -S21903291E6572000000006F7065726174696F6E2074696D6564C1 -S219032933206F757400736F6D6520736F7274206F66206E657417 -S219032948776F726B206572726F720000696E76616C69642070EE -S21903295D6172616D6574657200000070726F746F636F6C207604 -S219032972696F6C6174696F6E000066696C65206973206C6172EE -S219032987676572207468616E206275666665720000FFFF955CA1 -S21903299CFFFF9568FFFF9574FFFF9580FFFF958CFFFF9598FFC0 -S2190329B1FF95A4FFFF95B0FFFF95BCFFFF95C8FFFF95D4FFFF7F -S2190329C695E047444220636F6E6E656374696F6E20706F72747D -S2190329DB006764625F706F7274000000004E6574776F726B2084 -S2190329F0646562756720617420626F6F742074696D6500006EBD -S219032A0565745F646562756700000055736520424F4F54502084 -S219032A1A666F72206E6574776F726B20636F6E66696775726150 -S219032A2F74696F6E00626F6F74700000004C6F63616C20495008 -S219032A44206164647265737300000000626F6F74705F6D795FA7 -S219032A5969700044656661756C74207365727665722049502032 -S219032A6E61646472657373000000626F6F74705F7365727665BD -S219032A83725F69700025732E25640A00006E65745F696F5F77DF -S219032A9872697465000000006E65745F696F5F726561640000F4 -S219032AAD000000FFFF9A0CFFFF9A0CFFFF9A0CFFFF9A0CFFFF7E -S219032AC29A0CFFFF9A0CFFFF9A0CFFFF9A0CFFFF9A0CFFFF9A29 -S219032AD70CFFFF9A0CFFFF9A0CFFFF9A0CFFFF9A0CFFFF9A0CA2 -S219032AECFFFF9A0CFFFF9A38FFFF9A58FFFF9A78FFFF9A98FF2A -S219032B01FF9AB8FFFF9CDCFFFF9CDCFFFF9CDCFFFF9CDCFFFF90 -S219032B169AD8FFFF9AF8FFFF9AF8FFFF9AF8FFFF9AF8FFFF9A58 -S219032B2BF8FFFF9AF8FFFF9AF8FFFF9AF8FFFF9AF8FFFF9AF8C5 -S219032B40FFFF9AF8FFFF9AF8FFFF9AF8FFFF9AF8FFFF9AF8FFA9 -S219032B55FF9AF8FFFF9AF8FFFF9AF8FFFF9AF8FFFF9AF8FFFF94 -S219032B6A9AF8FFFF9AF8FFFF9AF8FFFF9AF8FFFF9AF8FFFF9AE4 -S219032B7FF8FFFF9AF8FFFF9AF8FFFF9AF8FFFF9AF8FFFF9AF871 -S219032B94FFFF9AF8FFFF9A90FFFF9A90FFFF9A90FFFF9A90FFF5 -S219032BA9FF9A90FFFF9A90FFFF9A90FFFF9A90FFFF9A90FFFF48 -S219032BBE9A90FFFF9A90FFFF9A90FFFF9A90FFFF9A90FFFF9A98 -S219032BD390FFFF9A90FFFF9ABCFFFF9AE0FFFF9B04FFFF9B2803 -S219032BE8FFFF9B4CFFFF9BF4FFFF9BF4FFFF9BF4FFFF9BF4FFB8 -S219032BFDFF9B70FFFF9B90FFFF9B90FFFF9B90FFFF9B90FFFF0F -S219032C129B90FFFF9B90FFFF9B90FFFF9B90FFFF9B90FFFF9B3D -S219032C2790FFFF9B90FFFF9B90FFFF9B90FFFF9B90FFFF9B9033 -S219032C3CFFFF9B90FFFF9B90FFFF9B90FFFF9B90FFFF9B90FFAF -S219032C51FF9B90FFFF9B90FFFF9B90FFFF9B90FFFF9B90FFFF9A -S219032C669B90FFFF9B90FFFF9B90FFFF9B90FFFF9B90FFFF9BE9 -S219032C7B90FFFF9B904E6F206E6574776F726B20696E7465725A -S219032C90666163657320666F756E640A0000000043616E277432 -S219032CA52067657420424F4F545020696E666F202D206E65748E -S219032CBA776F726B2064697361626C6564210A00000049503AE4 -S219032CCF20257300002C2044656661756C742073657276657268 -S219032CE43A2025730A0000000000000025642E25642E25642EB2 -S219032CF925640045746865726E65742073656E643A0A0045742F -S219032D0E6865726E657420726563763A0A006574685F64727622 -S219032D235F6473722073686F756C64206E6F7420626520636100 -S219032D386C6C65643A20766563746F722025642C206461746161 -S219032D4D2025780A000000000000002E2E2E20457261736520E8 -S219032D6266726F6D2025702D25703A2000002E0000000A000097 -S219032D77002E2E2E2050726F6772616D2066726F6D2025702D07 -S219032D8C25702061742025703A2000004E6F206572726F72206A -S219032DA12D206F7065726174696F6E20636F6D706C657465007E -S219032DB60000496E76616C696420464C4153482061646472658B -S219032DCB73730000004572726F7220747279696E6720746F201B -S219032DE065726173650000004572726F7220747279696E6720DF -S219032DF5746F206C6F636B2F756E6C6F636B004572726F722030 -S219032E0A747279696E6720746F2070726F6772616D0047656ED9 -S219032E1F65726963206572726F720000004465766963652F72B8 -S219032E346567696F6E2069732077726974652D70726F7465636E -S219032E4974656400000000464C415348207375622D7379737457 -S219032E5E656D206E6F7420696E697469616C697A65640000005E -S219032E7300556E6B6E6F776E206572726F720000000000000008 -S219032E88FFFFAC6CFFFFAC78FFFFAC84FFFFAC90FFFFAC9CFF48 -S219032E9DFFACA8FFFFACB4FFFFACC0457272203D2025780A00B0 -S219032EB2000000000000FFFFB1ECFFFFB1ECFFFFB1E4FFFFB18B -S219032EC77CFFFFB1E4FFFFB184FFFFB1BCFFFFB1C4FFFFB1D44B -S219032EDCFFFFB1D4FFFFB1CCFFFFB1DCFFFFB1BCFFFFB1F4FF43 -S219032EF1FFB1D4FFFFB1DCFFFFB1DCFFFFB1E4FFFFB1ECFFFFFE -S219032F06B1F4FFFFB1F4FFFFB1F4FFFFB1F4FFFFB1F4FFFFB1CE -S219032F1BF4FFFFB1F4FFFFB1DCFFFFB1DCFFFFB1DCFFFFB1DCD6 -S219032F30FFFFB7C4FFFFB7C4FFFFB7C4FFFFB7C4FFFFB7C4FF28 -S219032F45FFB7C4FFFFB7C4FFFFB7C4FFFFB7C4FFFFB7C4FFFF13 -S219032F5AB7C4FFFFB7C4FFFFB7C4FFFFB7C4FFFFB7C4FFFFB746 -S219032F6FC4FFFFB7E4FFFFB804FFFFB824FFFFB844FFFFB86440 -S219032F84FFFFB8C0FFFFB8C0FFFFB8C0FFFFB8C0FFFFB884FF1F -S219032F99FFB8A4FFFFB8A4FFFFB8A4FFFFB8A4FFFFB8A4FFFF5A -S219032FAEB8A4FFFFB8A4FFFFB8A4FFFFB8A4FFFFB8A4FFFFB88C -S219032FC3A4FFFFB8A4FFFFB8A4FFFFB8A4FFFFB8A4FFFFB8A48B -S219032FD8FFFFB8A4FFFFB8A4FFFFB8A4FFFFB8A4FFFFB8A4FF1B -S219032FEDFFB8A4FFFFB8A4FFFFB8A4FFFFB8A4FFFFB8A4FFFF06 -S219033002B8A4FFFFB8A4FFFFB8A4FFFFB8A4FFFFB8A4FFFFB837 -S219033017A4FFFFB814FFFFB814FFFFB814FFFFB814FFFFB81406 -S21903302CFFFFB814FFFFB814FFFFB814FFFFB814FFFFB814FF96 -S219033041FFB814FFFFB814FFFFB814FFFFB814FFFFB814FFFF81 -S219033056B814FFFFB834FFFFB858FFFFB87CFFFFB8A0FFFFB85B -S21903306BC4FFFFB95CFFFFB95CFFFFB95CFFFFB95CFFFFB8E89A -S219033080FFFFB908FFFFB908FFFFB908FFFFB908FFFFB908FF79 -S219033095FFB908FFFFB908FFFFB908FFFFB908FFFFB908FFFF64 -S2190330AAB908FFFFB908FFFFB908FFFFB908FFFFB908FFFFB995 -S2190330BF08FFFFB908FFFFB908FFFFB908FFFFB908FFFFB90831 -S2190330D4FFFFB908FFFFB908FFFFB908FFFFB908FFFFB908FF25 -S2190330E9FFB908FFFFB908FFFFB908FFFFB908FFFFB908FFFF10 -S2190330FEB90825733A2043616E27742066696E642061646472D9 -S219033113657373206F66207365727665720A0000005F5F756407 -S219033128705F73656E64746F000000007564705F726563766670 -S21903313D726F6D202D2064726F70706564207061636B65742014 -S2190331526F662025642062797465730A00004275665B25645D33 -S2190331672F25703A206275663A2025702C206C656E3A20256493 -S21903317C2F25642C206E6578743A2025700A00004672656520D8 -S2190331916C697374203D2025700A005F5F656E65745F706F6C35 -S2190331A66C3A206E6F206D6F726520627566666572730A00007F -S2190331BB0000000000FFFFCDF8FFFFCE50FFFFD0CCFFFFCEA40E -S2190331D0FFFFCEA4FFFFCF4CFFFFCF8CFFFFD028FFFFD06CFFD1 -S2070331E5FFD0AC64 -S2190331E800000000000332040003789000031248000000000029 -S2190331FD0000000000000000024E3000024E4800024E2000022B -S2190332124E0800024C9800024B4C0002524400024A0C00024A8E -S21903322704000335C40000000008003E2879B800007C2F2D5CB7 -S21903323C7C2D000000025DEC00029E0800029E0800029E080089 -S219033251029E0800029E0800029E0800029E0800029E08000216 -S2190332669E0800029E0800029E0800029E0800029E0800029E65 -S21903327B0800029E0800029E0800029E0800029E0800029E08E6 -S21903329000029E0800029E0800029E0800029E0800029E0800D9 -S2190332A5029E0800029E0800029E0800029E0800029E080002C2 -S2190332BA9E0800029E0800029E0800029E0800029E0800029E11 -S2190332CF0800029E0800029E0800029E0800029E0800029E0892 -S2190332E400029E0800029E0800029E0800029E0800029E080085 -S2190332F9029E0800029E0800029E0800029E0800029E0800026E -S21903330E9E0800029E0800029E0800029E0800029E0800029EBC -S2190333230800029E0800029E0800000000000000000000000035 -S21903333800000000000000000000000000000000000000000078 -S21903334D00000000000000000000000000000000000000000063 -S2190333620000000000000000000000000000000000000000004E -S21903337700000000000000000000000000000000000000000039 -S21903338C00000000000000000000000000000000000000000024 -S2190333A10000000000000000000000000000000000000000000F -S2190333B6000000000000000000000000000000000000000000FA -S2190333CB000000000000000000000000000000000000000000E5 -S2190333E0000000000000000000000000000000000000000000D0 -S2190333F5000000000000000000000000000000000000000000BB -S21903340A000000000000000000000000000000000000000000A5 -S21903341F00000000000000000000000000000000000000000090 -S2190334340000000000000000000000000000000000000000007B -S21903344900000000000000000000000000000000000000000066 -S21903345E00000000000000000000000000000000000000000051 -S2190334730000000000000000000000000000000000000000003C -S21903348800000000000000000000000000000000000000000027 -S21903349D00000000000000000000000000000000000000000012 -S2190334B2000000000000000000000000000000000000000000FD -S2190334C7000000000000000000000000000000000000000000E8 -S2190334DC000000000000000000000000000000000000000000D3 -S2190334F100000000000000000000000000000000000000FE00C0 -S2190335060000FE0000000040000000000000FF000000FF00006C -S21903351B000010000001000000FA100000FA100000000000046A -S219033530010000000000000000000000008000000000000000FD -S21903354500000000000000000000000000000000000000000069 -S21903355A000000027FD800028034000000000000000000000045 -S21903356F00FFFFFFFF00000000000000000000000000041B988C -S2190335840000000000000000000000000000000000000000FF2B -S219033599FFFFFEFFFFFFFE0000000000001E1400001E140000BA -S2190335AE01F4000000000000000000000000000000000000000B -S2190335C3000002D0300002D4D80002D2C40000000000000000A3 -S2190335D800000000000003E800000000000000000000000000EB -S2190335ED000000000000000000000000000000000000000000C1 -S219033602000000000000000000000000000000000000000000AB -S21903361700000314D8000314C80003145800023D94000314145B -S21903362C000313E4000313DC000239B8000313D4000313BC00E6 -S2190336410313A000023BBC000313980003135400031318000275 -S219033656447800031310000312EC000312E400024648000313D5 -S21903366B4C0003131C0003131800024588000314500003141C2D -S219033680000313DC0002387000030C8C00030C7400030C6800FC -S21903369502283000030C6000030C3800030C1C00022A2000038E -S2190336AA12A40003129000031288000236DC000312DC000312F1 -S2190336BFB0000312A800022F3800030C1800030BFC00030BE4F5 -S2190336D400022B1800030BDC00030BC800030BC0000229AC002F -S2190336E9030EB400030EA800030E800002529C00031AD80003CD -S2190336FE1AC40000000000000001000000010000000000031AB2 -S219033713F000031AE400031AD8000000010000000400000000AE -S21903372800031B1800031B0400031AD800000001000000020034 -S21903373D00000000032A3400032A1000000000000000010000D0 -S21903375200010000000000032A5000032A3C00032A3400000012 -S21903376700000000050000000000032A7800032A5C00032A34B1 -S21903377C000000000000000500000000000329DC000329C8002F -S21903379100000000000001000000020000000000032A040003E4 -S2190337A629E80000000000000001000000010000000000022CC5 -S2190337BBB0000000000002CB98000000000003125000024E60C7 -S2190337D0000331EC000000004E800021000000000000000000CD -S2070337E5000000D9 +S21902265189476093EB47804E8000213C000040901B4764939A0A +S219022666477C4800066D3C6000033C8000033CA00003386318EA +S21902267B443884187438A51880480082DD3C6000033C8000033D +S2190226903CA000033CC0000338C618C03863188C388418A4388B +S2190226A5A518B4480082B93C600003386318C4480082AD809A7E +S2190226BA477C80BB47643C600003386318E8480082993D200061 +S2190226CF033D600003380947403BAB47307C1D00003D2000032E +S2190226E493894774418200207C1C0378813D00003BBD00087DD2 +S2190226F92803A64E8000217C1DE0004082FFEC3F600003835B5F +S21902270E47882C1A00004182006C3D20000383A947683C801064 +S219022723621FBD03E860844DD37C9D20967FA0FE707C8436706B +S2190227387C8020501CA403E83C600003386318F47CA5E8504887 +S21902274D0082153D2000033B800000938947887FA5EB783861B3 +S219022762000838800100480088692C03FFFE4082000C939B47F2 +S2190227778848000008935B47887FFDFB787F3CCB787FDBF378FF +S21902278C2C1D0000418200143C60000338631938480081C53BBD +S2190227A1A00000386100083880010038A000FA480088212C0330 +S2190227B600004080001C3D2000038009478C2C0000004182FF81 +S2190227CBC44800A5C94BFFFFBC40820020393C3200800900342D +S2190227E07F63DB787C0803A64E800021480068954BFFFF9C382A +S2190227F5610008480082252C0300004081004C3FA000033F40D3 +S21902280A000438610008389D477838BA2C5C48008D1D7C631B13 +S21902281F794182001C8003000C807D4778389A2C5C7C0803A673 +S2190228344E800021480000143C6000033863194438810008489D +S2190228490081193BA000014BFFFF3C9421FFF07C0802A693E134 +S21902285E000C900100142C0300027C9F237840820144807F00C0 +S219022873043C80000338841964480082312C030000408200441D +S2190228887D6000A67D605B7839200000512004207C0001243C36 +S21902289D0002004C00012C7C108BA64C00012C3D4002007C0073 +S2190228B204AC7D588BA67C0000A6516004207C00012448000074 +S2190228C7F8807F00043C80000338841968480081D92C0300002D +S2190228DC408200C07D6000A67D605B7839200000512004207CC1 +S2190228F100012439200000380000807C0903A6612010003D4059 +S2190229060E007C0004AC7D398BA67D588BA67C198BA67D588B68 +S21902291BA6392900104200FFE03C0004004C00012C7C108BA6F1 +S2190229304C00012C3D4004007C0004AC7D588BA63920000038CE +S2190229450000807C0903A6612010003D400E007C0004AC7D39CA +S21902295A8BA67D588BA67C198BA67D588BA6392900104200FFAB +S21902296FE03C000C004C00012C7C108BA64C00012C3D400C00EC +S2190229847C0004AC7D588BA67C0000A6516004207C0001244825 +S2190229990000243C600003809F00043863196C48007FB9480054 +S2190229AE00103C6000033863198448007FA9800100147C08039A +S2190229C3A683E1000C382100104E8000209421FFE87C0802A6C3 +S2190229D893A1000C93C1001093E100149001001C3D6000033D2D +S2190229ED200003392946703BEB46007C1F48004182002C7D3D9B +S219022A024B783FC00003809F000480BF000080DF0008387E195B +S219022A179048007F493BFF00107C1FE8004082FFE48001001CF4 +S219022A2C7C0803A683A1000C83C1001083E10014382100184EA6 +S219022A418000209421FFA87C0802A69381004893A1004C93C121 +S219022A56005093E100549001005C7C7D1B787C9C23783D2000C3 +S219022A6B03392919A0386100083880006238A0000138C00000A5 +S219022A8038E100383901003C48008DD53D200003392919B03806 +S219022A956100203880006C38A0000138C0000038E1004039011C +S219022AAA004448008DB13D4000037FA3EB787F84E378394A1848 +S219022ABFC038A0000138C1000838E000023900000039200000B5 +S219022AD448008DA52C030000418200408001003C2C0000004011 +S219022AE98200143C600003386319B848007E6D48000024800110 +S219022AFE00442C0000004082000C380000209001004080610074 +S219022B133880810040480089218001005C7C0803A683810048E5 +S219022B2883A1004C83C1005083E10054382100584E80002094A2 +S219022B3D21FFB87C0802A69381003893A1003C93C1004093E1B4 +S219022B5200449001004C3D200003800947847C7D1B787C9C23CB +S219022B67783D20000390010028392919D03861000838800077A6 +S219022B7C38A0000138C0000038E100203901002448008CD13DF3 +S219022B914000037FA3EB787F84E378394A19E038A0000138C1B4 +S219022BA6000838E00001390100283920000048008CC52C03006F +S219022BBB00418200F8800100242C000000418200343C600003DC +S219022BD08081002880A10020386319F448007D8580A100203814 +S219022BE56100301CA503E838800008480083E12C03FFFE41823C +S219022BFA00BC814100287D6000A67D605B783920000051200418 +S219022C0F207C00012439200000380000807C0903A66120100018 +S219022C243D600E007C0004AC7D398BA67D788BA67C198BA67D6D +S219022C39788BA6392900104200FFE03C0004004C00012C7C10FE +S219022C4E8BA64C00012C3D6004007C0004AC7D788BA639200074 +S219022C6300380000807C0903A6612010003D600E007C0004AC07 +S219022C787D398BA67D788BA67C198BA67D788BA6392900104293 +S219022C8D00FFE03C000C004C00012C7C108BA64C00012C3D60B8 +S219022CA20C007C0004AC7D788BA67D4803A64E800021800100DA +S219022CB74C7C0803A68381003883A1003C83C1004083E10044C0 +S219022CCC382100484E8000204E8000209421FFE07C0802A6931C +S219022CE1A1001493C1001893E1001C90010024380000003D20DC +S219022CF600033FC000033BA9478890094788901E477448000AE7 +S219022D0B992C030000418200EC3D2000038089479C3D60000349 +S219022D20800B47983D2000043BE988547C8422147C8400507FC7 +S219022D35E3FB7838A00400480074217FE3FB78388003FC48009F +S219022D4A04F9801F03FC7C030000408200303D2000048169888E +S219022D5F543C000BAD6000FACE7C0B000040820018813F03F8CC +S219022D743C00DEAD6000DEAD7C090000418200283C600003384A +S219022D896328D848007BD53C600004386388543880000038A08C +S219022D9E040048007495480000583C600003386326B03881005B +S219022DB30838A0000148000061800100082C00000041820030D2 +S219022DC83C600003386326C87FA4EB7838A00004480000413CA0 +S219022DDD6000033C800003386327043884476838A00002480065 +S219022DF2002938000001901E4774800100247C0803A683A10004 +S219022E071483C1001883E1001C382100204E8000209421FFD8CC +S219022E1C7C0802A69321000C9341001093610014938100189303 +S219022E31A1001C93C1002093E100249001002C3D2000033D6002 +S219022E4600033B4947307C7B1B787C9D23787CB92B783BCB4610 +S219022E5B70480009452C0300003B800004418200CC7C1ED0006E +S219022E70418200B43D20000439298854807E00007FFC4A147FDA +S219022E8564DB7848007BBD2C0300004082007C807E00107C0300 +S219022E9AC8004082005C3803FFFF280000054181008C3D6000E5 +S219022EAF03396B28C05400103A7D4B002E3D200003392928C03A +S219022EC47D4A4A147D4903A64E800420801F0000901D000048D8 +S219022ED900005CA01F0004813F0000B01D0004913D0000480017 +S219022EEE004893FD0000480000403C600003386328707F64DBD8 +S219022F037848007A5D4800002C807E00103BDE0018480002DD41 +S219022F187C1ED0007F9C1A144082FF543C6000033863289C7F58 +S219022F2D64DB7848007A318001002C7C0803A68321000C834190 +S219022F420010836100148381001883A1001C83C1002083E10047 +S219022F5724382100284E8000209421FBB87C0802A69301042877 +S219022F6C9321042C93410430936104349381043893A1043C93DA +S219022F81C1044093E104449001044C3D2000033D6000033B094E +S219022F9646703B2B47307C7C1B787C9B2378480007FD2C0300D4 +S219022FAB003B4000007F1FC3783BC00004418202083C8000042A +S219022FC0388488543861000838A00400480071913BA104083D71 +S219022FD56000033D200003934B4788392927D07FA3EB783880DA +S219022FEA006C38A0000038C0000238E104203900000048008847 +S219022FFF613D4000037F83E3787F64DB787FA6EB78394A1E50C9 +S21902301438A0000138E000013900000039200000480088552CCB +S219023029030000418201947C1FC800418200A480A104207FE3BF +S21902303EFB787FC4F3784800026538030001280000054181FF7C +S219023053E03D600003396B28585400103A7D4B002E3D200003C9 +S219023068392928587D4A4A147D4903A64E8004203C600004380C +S21902307D6388543881000838A00400480070D5480001343B40D6 +S2190230920001807F00103BFF0018480001557FDE1A144BFFFF4E +S2190230A78C7FE9C2783129FFFF7D294910381FFFE87C0048780E +S2190230BC7FE948387D3F03784BFFFF6C3C600003386327E84893 +S2190230D10078914BFFFF5C2C1A0000418200E43C000BAD3D60B7 +S2190230E600046000FACE3D20DEAD3B8B88546129DEAD900B88E0 +S2190230FB54913C03F87F83E378388003FC480001393D200003A7 +S2190231103FE00003801F479C81694798907C03FC7C0002143C5D +S2190231256000037FC05850386327FC4800832D2C03000041829C +S21902313A0088809F479C3BA104247FC3F3787FA5EB784800A9C6 +S21902314F0D7C7F1B794182002C83A104247FE3FB784800AC15AF +S2190231647C661B783C600003386320BC7FA4EB787FE5FB78481F +S2190231790077E9480000447FC3F3787F84E3787FA6EB7838A0E3 +S21902318E04004800AA397C7F1B794182002883A104247FE3FBD3 +S2190231A3784800ABD17C661B783C600003386328287FA4EB784F +S2190231B87FE5FB78480077A58001044C7C0803A683010428838F +S2190231CD21042C83410430836104348381043883A1043C83C199 +S2190231E2044083E10444382104484E8000203803FFFF280000ED +S2190231F7054D8100203D600003396B27B85400103A7D4B002E12 +S21902320C3D200003392927B87D4A4A147D4903A64E8004203847 +S2190232216000044E800020386000084E800020386000004E804B +S2190232360020386002004E800020388400035484F0BE7C802370 +S21902324B782C00000038C0000038E000003884FFFF40810044F4 +S219023260816300007C8A23787D68383038E7000168E900102CD3 +S2190232750A00007D2AFE707D404A787C0050507D6B43787C0064 +S21902328AFE707CC65A78386300047CE700383884FFFF4181FFF1 +S21902329FC47CC333784E8000209421FF707C0802A69301007023 +S2190232B493210074934100789361007C9381008093A10084933B +S2190232C9C1008893E1008C900100947C7B1B78807B00087C9FD3 +S2190232DE23782C0300007CB82B78418200383881006038A00047 +S2190232F3014BFFFB25801B000C2C0000004182001480010060C9 +S2190233082C0000004182019848000010800100602C000000407C +S21902331D8201883D200004392988543C600003809B00047FBFEE +S2190233324A143863271848007629813B00103809FFFF2800002D +S21902334705418101483D600003396B27885400103A7D4B002ED3 +S21902335C3D200003392927887D4A4A147D4903A64E80042080DE +S2190233711D00002C000000418200103D20000338892724480070 +S21902338600303D2000033889272C480000243C600003809D005F +S21902339B0038632734480075C1480000EC7FA3EB7848009DF113 +S2190233B07C641B783C60000338632720480075A5480000D07F14 +S2190233C5BEEB783BE000003F8000033FA000037C9EF8AE387C98 +S2190233DA273848007585281F00044181000C387D274048007544 +S2190233EF753BFF0001281F00054081FFDC3C6000037FDDF378C4 +S2190234043863274448007559480000843C6000033863274848D3 +S2190234190000883C6000033863274C4800753D881D00007FBE86 +S21902342EEB782C0000007FBFEB78418200583F2000033B40005A +S219023443003B80000A881E00002C00000A418200187FEBFB7814 +S2190234588C0B00012C00000A4082FFF87D7F5B787FC4F3789BB9 +S21902346D5F000038792750480074ED3BDF00019B9F0000881E18 +S21902348200007FDFF3782C0000004082FFBC2C180000418200B5 +S219023497183C6000033863274C480074C1386000024800022CC7 +S2190234AC801B00102C0000044182005438610008388000503831 +S2190234C1A0000048007B0D2C0300003860FFFF4180020438615A +S2190234D60008480075452C0300004182FFC4880100082C00005E +S2190234EB2E4082000C38600000480001E02C00005E4082000CB0 +S21902350038600003480001D0813B00103809FFFF280000054182 +S2190235158101BC3D600003396B27A05400103A7D4B002E3D2060 +S21902352A0003392927A07D4A4A147D4903A64E80042083FD0053 +S21902353F00386100087FA4EB78480087F94800003083FD000089 +S219023554386100087FA4EB7838A0000038C000004800866D48E1 +S21902356900001483FD0000386100087FA4EB7848009ABD2C03BD +S21902357E00004182013C801D00007FE002787C09FE707D230226 +S219023593787C6348507C63FE707C6018F8546307FE540007BC21 +S2190235A87C63037848000128801D0000A17D000490010058395B +S2190235BD210058B1690004380100087D3A4B78900100683BC0AC +S2190235D200003F6000033BE100643B810068806100687FE4FBF0 +S2190235E7787F85E37838DB2740480085E12C030000418200B423 +S2190235FC881F00037C1DF1AE3BDE0001281E00054081FFD44890 +S2190236110000C03C6000037FBEEB783863275848007341480040 +S2190236260044880100083BE100082C000000418200287FC4F342 +S21902363B787FEBFB78880B0000980400008D2B00013884000179 +S2190236502C0900004082FFEC7C9E23783800000A981E00003B94 +S219023665DE0001380000003C600003981E00003863278448004F +S21902367A72E9386100083880005038A00000480079492C03001F +S21902368F003860FFFF4180004038610008480073812C0300007C +S2190236A44082FF8448000028A01A000481210058B01D0004913B +S2190236B93D000038600004480000143C600003386327484800CF +S2190236CE729538600001800100947C0803A68301007083210066 +S2190236E374834100788361007C8381008083A1008483C10088C3 +S2190236F883E1008C382100904E8000209421FFF07C0802A6938C +S21902370DC1000893E1000C900100147C7E1B782C1E00017C9FBF +S2190237222378418100143C60000338632670480013C9480000DE +S21902373754480000692C030000418200483C6000033C800003D9 +S21902374C80BF0004386345903884460048007F417C631B7941F0 +S21902376182001C8003000C7FC3F3787FE4FB787C0803A64E80A1 +S2190237760021480000103C600003386326844800137580010089 +S21902378B147C0803A683C1000883E1000C382100104E800020CE +S2190237A09421FFE07C0802A6934100089361000C9381001093BA +S2190237B5A1001493C1001893E1001C900100243D2000038009A9 +S2190237CA3F102C0000004082009C3FE00003807F476438000006 +S2190237DF0190093F103C63FFFF3C8000014800A1597C641B79D5 +S2190237F4418200183C600003386326184800716138600000486C +S2190238090000683F6000033F40000338600000389B479438BADF +S21902381E47984800A1CD3FA000033F800003387D479C389C47A2 +S219023833A04800A1ED809B479480BA479880DC47A03C60000312 +S21902384880FD479C3863264048007111813D479C801F47643D11 +S21902385D2900017C0900503D600003900B47A438600001800110 +S21902387200247C0803A6834100088361000C8381001083A100F5 +S2190238871483C1001883E1001C382100204E8000209421FFA872 +S21902389C7C0802A69381004893A1004C93C1005093E10054900C +S2190238B101005C380000007C7D1B787C9C23783D200003900136 +S2190238C600403929257C9001003C386100083880006238A00043 +S2190238DB0138C0000038E100383901003C48007F753D20000375 +S2190238F039292598386100203880006338A0000038C0000238BF +S219023905E100403900000048007F513D4000037FA3EB787F842C +S21902391AE378394A254438A0000238C1000838E000023901001B +S21902392F443920000148007F452C030000408200143C6000032E +S219023944386322DC480011B1480000E080610044480011ED7CB5 +S2190239597D1B79408200183C6000038081004438632564480017 +S21902396E6FF5480000BC8001003C2C0000004082000C801D0081 +S21902398314900100383D2000038009477C806100387C030040C7 +S2190239984180001C80BD00183D200003816947647C032A147CB3 +S2190239AD005840418000143C600003386325AC48006FA54800E2 +S2190239C2006C809D001048006795801D00FC817D001C2C00002D +S2190239D7003D200003916947844182004C80610038809D00204A +S2190239EC48001211809D00FC7C7C1B787C1C2000418200143CE5 +S219023A01600003386325C47F85E37848006F55800100402C006A +S219023A160000418200143C600003386326047F84E37848006F44 +S219023A2B398001005C7C0803A68381004883A1004C83C10050EC +S219023A4083E10054382100584E8000209421FFD87C0802A693C8 +S219023A55410010936100149381001893A1001C93C1002093E198 +S219023A6A00249001002C3D400003394A254438A0000238C00021 +S219023A7F0038E00000390100083920000148007DED2C03000096 +S219023A94408200143C600003386322DC48001059480001843D4D +S219023AA96000033D20000380A9479C800B47983FA000037F6502 +S219023ABE0050807D47A47F64DB784800669583DD47A43BA00015 +S219023AD3003BDE02003BE000024800000C3BFF00013BDE0100F6 +S219023AE83F400003801A479C5400C23E7C1F004040800040880C +S219023AFD1E00002C0000FF4182FFDC806100087FC4F3784800E7 +S219023B126F352C0300004082FFC83C60000380810008386325D3 +S219023B2750480079352C030000418200F83BA000012C1D00002D +S219023B3C408200183C600003808100083863256448006E1548B4 +S219023B510000D83B81000C807E0010809E00187F85E3784800CD +S219023B669EF57C7F1B794182002883A1000C7FE3FB784800A148 +S219023B7BFD7C661B783C600003386324E47FA4EB787FE5FB781D +S219023B9048006DD17FC3F378388000FF38A00100480066958093 +S219023BA59A479C7F63DB787F85E37848009EA97C7F1B79418212 +S219023BBA002C83A1000C7FE3FB784800A1B17C661B783C600013 +S219023BCF03386324E47FA4EB787FE5FB7848006D85480000480D +S219023BE43D200003808947A480BA479C7F63DB787F86E3784877 +S219023BF9009FD17C7F1B794182002883A1000C7FE3FB78480079 +S219023C0EA1697C661B783C600003386325047FA4EB787FE5FBD3 +S219023C237848006D3D8001002C7C0803A6834100108361001475 +S219023C388381001883A1001C83C1002083E10024382100284E59 +S219023C4D8000209421FFA07C0802A69381005093A1005493C1FB +S219023C62005893E1005C90010064380000007C7D1B787C9C232A +S219023C77783D20000390010044392922809001003C3861000812 +S219023C8C3880006638A0000138C0000038E100383901003C481E +S219023CA1007BBD3D20000339292528386100203880006C38A00B +S219023CB6000138C0000038E100403901004448007B993D400049 +S219023CCB037FA3EB787F84E378394A1E5038A0000238C100082B +S219023CE038E00002390000003920000048007B8D2C030000405D +S219023CF58200143C600003386322DC48000DF9480001048001C9 +S219023D0A003C2C00000041820010800100442C000000408200AF +S219023D1F143C6000033863253048000DD1480000DC8061003882 +S219023D3448009C757C7C1B794082002080610038800100407C56 +S219023D496302143863FFFF48009C597C7C1B794182004483A158 +S219023D5E00387F83E3784800A0117C651B783C600003386323EA +S219023D73387FA4EB7848006BE93D2000033D6000033C6000033B +S219023D888089479480AB47983863235848006BCD480000708063 +S219023D9D810038800100407C8323787C8402143884FFFF4800DE +S219023DB2A1A92C030000418200143C6000033863246848006B2C +S219023DC79D48000040806100388081004038A1004848009C81DB +S219023DDC7C7C1B794182002883A100487F83E37848009F897C9F +S219023DF1661B783C600003386324E47FA4EB787F85E37848004E +S219023E066B5D800100647C0803A68381005083A1005483C100B6 +S219023E1B5883E1005C382100604E8000209421FF187C0802A6D4 +S219023E30934100D0936100D4938100D893A100DC93C100E09347 +S219023E45E100E4900100EC380000007C7D1B787C9C23783D204B +S219023E5A0003900100C4392922449001009C900100A490010039 +S219023E6FAC900100B4900100BC386100083880006238A0000165 +S219023E8438C0000038E100983901009C480079CD3D200003397C +S219023E99292258386100203880007238A0000138C0000038E19D +S219023EAE00A0390100A4480079A93D2000033929226C38610027 +S219023EC3383880006538A0000138C0000038E100A8390100AC16 +S219023ED84800798538E100B03D2000037CFE3B783929228038F6 +S219023EED6100503880006638A0000138C00000390100B44800E3 +S219023F02795D3D2000033929229C386100683880006C38A00050 +S219023F170138C0000038E100B8390100BC480079393D20000374 +S219023F2C392922B4386100803880007338A0000138C0000038F4 +S219023F41E100C0390100C4480079153D4000037FA3EB787F84E7 +S219023F56E378394A22D038A0000238C1000838E000063901004C +S219023F6BC839200001480079092C030000408200143C600003AA +S219023F80386322DC48000B75480004B08001009C2C000000413E +S219023F9582001C800100BC2C00000041820010800100C82C00C1 +S219023FAA0000408200143C600003386322F048000B41480004F9 +S219023FBF7C800100C4814100B82C00000040820008914100C023 +S219023FD43D2000038009479C816100C07D2A02143929FFFF7DC9 +S219023FE92903963F4000037D2901D67C095840912100B84080B4 +S219023FFE00143C6000033863230C480069594800042C80010027 +S219024013B42C00000041820070806100B0480099897C7C1B79F7 +S21902402840820020806100B0800100C07C6302143863FFFF48F2 +S21902403D00996D7C7C1B794182004483A100B07F83E378480055 +S2190240529D257C651B783C600003386323387FA4EB7848006851 +S219024067FD3D2000033D6000033C6000038089479480AB4798B3 +S21902407C38632358480068E1480003B43FE00003808100988047 +S2190240911F477C7C0400404180001C800100C03D200003816909 +S2190240A647647C0402147C005840418000283C60000338632363 +S2190240BB74480068A53D2000033C600003809F477C80A947646B +S2190240D0386323584800688D806100C8480069412803000F406C +S2190240E58100183C600003386323A0388000104800686D4800FC +S2190240FA0340800100B42C0000004082002C808100B87FC3F32A +S21902410F78480003512C030000408200183C600003808100B81F +S219024124386323D0480068394800030C3F8000033D200003800F +S219024139BC479C800947983FA000037F650050807D47A47F6482 +S21902414EDB784800600D801C479C83FD47A45409C23F3BA0002A +S219024163003B800000418200883FC00003881F00002C0000FF66 +S21902417841820060806100C87FE4FB78480068C12C03000040A9 +S21902418D82004C800100B42C00000041820014813F00108001BF +S2190241A200B07C0900004082022C813F0018800100B87C090046 +S2190241B7004082022C808100C8387E244C480072992C0300008B +S2190241CC4182026C3B8000014800001C801A479C3BBD000154BC +S2190241E100C23E7C1D00403BFF01004180FF842C1C0000814160 +S2190241F600C0806100B04082004C3D2000038009479C3D6000E5 +S21902420B035400C23E7C1C004083EB47A43BA000004800001CD0 +S2190242203D2000038009479C3BBD00015400C23E7C1D00403B55 +S219024235FF010040800010881F00002C0000FF4082FFDC7C832F +S21902424A52143884FFFF48009D092C030000418200143C6000A8 +S21902425F0338632468480066FD480001D038A100CC806100B01F +S219024274808100B87CBE2B78480097DD7C7C1B793BA000014133 +S21902428982002C83A100CC7F83E37848009AE17C661B783C604A +S21902429E00037FA4EB783863249C7F85E378480066B53BA00083 +S2190242B3002C1D000041820044806100B08081009880A100C094 +S2190242C87FC6F378480098FD7C7C1B794182002883A100CC7F67 +S2190242DD83E37848009A957C661B783C600003386324C07FA4BA +S2190242F2EB787F85E378480066697FE3FB783880000038A00171 +S2190243070048005F2D808100C87FE3FB7848006765800100A4EF +S21902431C812100B02C000000913F001040820020800100B42CE4 +S2190243310000004182000C812100B04800001081210098480075 +S2190243460008812100A0800100AC913F00142C00000040820012 +S21902435B103D2000038009478448000008800100A8901F001C3E +S219024370800100B8901F0018812100C0913F00208061009880E6 +S2190243858100C0480008753D200003907F00FC8089479C7F63DD +S21902439ADB787FC5F378480096B97C7C1B794182004C83A100AF +S2190243AFCC7F83E378480099C17C661B783C600003386324E470 +S2190243C47FA4EB787F85E37848006595480000683C600003382F +S2190243D96323F848006585480000583C600003386324244800AE +S2190243EE6575480000483D200003808947A480BA479C7F63DB1B +S219024403787FC6F378480097C17C7C1B794182002883A100CC6E +S2190244187F83E378480099597C661B783C600003386325047F9A +S21902442DA4EB787F85E3784800652D800100EC7C0803A68341D5 +S21902444200D0836100D4838100D883A100DC83C100E083E10072 +S219024457E4382100E84E8000203D20000380E9479C3D600003EA +S21902446C814B47943D2000037C073A14810947987D4A02147D99 +S2190244814953787C0940404080007054E0F0BE7C06037854079C +S219024496103A800A00002C00FFFF4182004C7C09500041820065 +S2190244AB147C0950507C0016707C002040408000587D49537835 +S2190244C07C0940404080002054CB103A7D295A147C0940404039 +S2190244D5800010800900002C00FFFF4082FFEC7D2A4B78480029 +S2190244EA00087D4A3A147C0A40404180FFA47C09500041820097 +S2190244FF207C0950507C0016707C0020404180001091230000F9 +S219024514386000014E800020386000004E8000209421FFE07C6E +S2190245290802A69361000C9381001093A1001493C1001893E17A +S21902453E001C900100243D2000038009479C3D600003814B4711 +S219024553943D20000383C947987C0002147FEA02147C1FF04051 +S2190245687FE4FB783F600003408000883F8000033FA000038053 +S21902457D1F00002C00FFFF4182005C7C04F80041820010387CBB +S219024592222C7FE5FB78480063C97C1FF0407FE4FB7840800013 +S2190245A734801F00002C00FFFF41820028801D479C5400F0BE8E +S2190245BC5409103A7C844A147C04F04040800010800400002CAE +S2190245D100FFFF4082FFEC7C9F237848000014801B479C54003F +S2190245E6F0BE5400103A7FFF02147C1FF0404180FF887C04F84E +S2190245FB00418200143C6000033863222C7FE5FB78480063556E +S219024610800100247C0803A68361000C8381001083A1001483FD +S219024625C1001883E1001C382100204E8000209421FFC87C08B9 +S21902463A02A69381002893A1002C93C1003093E1003490010063 +S21902464F3C7C7D1B787C9C2378380000003D200003900100208B +S21902466439292194386100083880006338A0000038C00002385D +S219024679E1002039000000480071DD3D4000037FA3EB787F844D +S21902468EE378394A1E5038A0000238C1000838E0000139000097 +S2190246A30039200000480071D12C030000418200B481010020D0 +S2190246B83D2000033D60000381494798800B479C2C0800007F1C +S2190246CDA050503FE00003418200103D200003388921E848002A +S2190246E2000C3D200003388921F43C600003386321A8480062CD +S2190246F76D3D2000038009479C3B8000005409C23F4182005C36 +S21902470C3FC00003881D00002C0000FF418200348001002080A7 +S219024721BD00102C0000004182000C80DD00FC4800000880DDAE +S219024736001480FD0018811D001C387E22007FA4EB78480062FC +S21902474B19801F479C3B9C00015400C23E7C1C00403BBD0100BA +S2190247604180FFB08001003C7C0803A68381002883A1002C83E4 +S219024775C1003083E10034382100384E8000209421FFB87C0830 +S21902478A02A69321002C93410030936100349381003893A100DF +S21902479F3C93C1004093E100449001004C7C7D1B787C9C23785A +S2190247B43BE000003D2000033929203093E1002038610008384F +S2190247C980006638A0000038C0000238E1002039000000480062 +S2190247DE70813D4000037FA3EB787F84E378394A1E5038A000A2 +S2190247F30238C1000838E00001390000003920000048007075CF +S2190248082C030000418202C03C6000033863205C48006C452C05 +S21902481D030000408200143C6000033863208C4800613548009A +S219024832029C3C6000033863209848006125800100202C00003F +S219024847004182006C3D200003808947A03D600003800B479CC8 +S21902485C3D2000033884FFFC806947947C8401D63BA100247C12 +S2190248710002147C6302147FA5EB78480091DD7C7C1B797FBE1A +S219024886EB784182003C83A100247F83E378480094E17C661B55 +S21902489B783C600003386320BC7FA4EB787F85E378480060B531 +S2190248B0480000143C600003386320E4480060A53BC100243FA6 +S2190248C5400003839A479C3C0000027F9C00003F20000383B99D +S2190248DA47A44FFEEB827C000026540007FE7C0000D07C090051 +S2190248EFF87F9C00385529039C7F9C4B787FA3EB78388000002A +S21902490438A001004800592D3D2000033F6000033969212C807F +S2190249191B47948149212C810B0004939D0018915D0000911D01 +S21902492E0004901D0014901D00103BBD01007FA3EB78388000B5 +S2190249430038A00100480058ED3D600003801B4794810B2134FB +S219024958392B213480E9000C81690004814900087C00E2149350 +S21902496D9D0018911D0000917D0004915D000890FD000C901D7D +S2190249820014901D00103BBD01007FA3EB783880000038A00139 +S219024997004800589D3D2000038009214439692144812B0008BE +S2190249AC814B0004A10B000C913D0008901D0000915D0004B141 +S2190249C11D000C880B000E3F800003981D000E817A479C801C11 +S2190249D647987D2B5A147C090050901D0014917D0018901D0067 +S2190249EB103BBD01007FA3EB783880000038A0010048005839B8 +S219024A00801C4798809A479C3D600003814B21547F64005039D5 +S219024A152B2154A109000C8009000481690008915D0000901D15 +S219024A2A0004917D0008B11D000C909D0018937D0010937D0007 +S219024A3F147F63DB787FC5F378480090113BFF00013BFF000104 +S219024A547C7C1B793BFF00013BFF00014182002C83A100247F8E +S219024A6983E378480093097C661B783C600003386320BC7FA4C1 +S219024A7EEB787F85E37848005EDD48000044809947A47F63DB8A +S219024A937857E5402E7FC6F3784800912D7C7C1B7941820028B8 +S219024AA883A100247F83E378480092C57C661B783C6000033862 +S219024ABD6321647FA4EB787F85E37848005E998001004C7C0880 +S219024AD203A68321002C83410030836100348381003883A100E3 +S219024AE73C83C1004083E10044382100484E8000209421FFF810 +S219024AFC7C0802A69001000C7C641B783C6000033863200848B8 +S219024B11005E513C6000033C8000033CA0000338634590388470 +S219024B26460038A5202848006CAD8001000C7C0803A638210094 +S219024B3B084E8000209421FFE87C0802A69381000893A1000C44 +S219024B5093C1001093E100149001001C3F8000033D200003800E +S219024B65BC479C808947983FA000037C7F1B78807D47A47C8554 +S219024B7A2050480055E1801C479C83BD47A45409C23F3B80006E +S219024B8F003FC0000341820044881D00002C0000FF418200204E +S219024BA47FE3FB787FA4EB7848005E992C0300004082000C7FDF +S219024BB9A3EB7848000020801E479C3B9C00015400C23E7C1C2D +S219024BCE00403BBD01004180FFC4386000008001001C7C080352 +S219024BE3A68381000883A1000C83C1001083E100143821001897 +S219024BF84E800020388400035484F0BE7C8023782C0000003972 +S219024C0D6000003884FFFF408100207C802378812300002C0029 +S219024C220000386300047D6B4A783884FFFF4181FFE87D635B8F +S219024C37784E8000203860001C4E8000209421FFE87C0802A691 +S219024C4C93A1000C93C1001093E100149001001C7C7D1B788166 +S219024C613D000483C900044800002C73E00012418200107FA3D8 +S219024C76EB787FE4FB784800004973E000084182000C7FA3EB21 +S219024C8B78480001A9B3FE0010A01E00107000001A541F043ED5 +S219024CA02C1F00004082FFC88001001C7C0803A683A1000C83A7 +S219024CB5C1001083E10014382100184E8000209421FFE87C081B +S219024CCA02A69381000893A1000C93C1001093E100149001004D +S219024CDF1C7C7D1B7883DD000483FE0018A01F00007000900055 +S219024CF42C001000408200683B9E0028813D0000801E00108150 +S219024D096900247C00F850816B00085400F87AA13F00007C9C8B +S219024D1E002E7FA3EB7838A000007D6803A67129EFFFB13F00E8 +S219024D33004E800021A01F0000700920004182000C83FE0010BD +S219024D48480000083BFF0008A01F0000700090002C0010004181 +S219024D5D82FFA493FE00188001001C7C0803A68381000883A172 +S219024D72000C83C1001083E10014382100184E8000209421FF3A +S219024D87E87C0802A693A1000C93C1001093E100149001001C23 +S219024D9C812300048169000C83EB00047C188AA654000FFE2C9A +S219024DB100000041820028812B0004A00B00022C0000004081B1 +S219024DC600187C004BAC7C0004AC3400FFF0392900104181FFC4 +S219024DDBF02C050000408100387C9E23787CBD2B78807E000013 +S219024DF02C0300004182001880BE00047FE4FB784800535D800D +S219024E051E00047FFF021437BDFFFF3BDE00084082FFD88001AE +S219024E1A001C7C0803A683A1000C83C1001083E10014382100DE +S219024E2F184E8000209421FFE87C0802A693A1000C93C10010F5 +S219024E4493E100149001001C7C7D1B7883DD000483FE001C4848 +S219024E59000048813D000093FE000C816900247FA3EB78800B7C +S219024E6E0004A09F00027C0803A64E800021A01F000060008028 +S219024E8300B01F0000A13F0000712020004182000C83FE00144F +S219024E98480000083BFF0008A01F0000700090002C0010004130 +S219024EAD82FFB093FE001C8001001C7C0803A683A1000C83C1CD +S219024EC2001083E10014382100184E8000209421FFD87C0802DB +S219024ED7A6930100089321000C934100109361001493810018A5 +S219024EEC93A1001C93C1002093E100249001002C83C300047CCB +S219024F0198237883BE00087CBB2B78A01D00007CD93378700908 +S219024F1680007CFA3B78418200447FBFEB783F800003A01F00AD +S219024F2B00700920004182000C83FE0010480000083BFF0008DF +S219024F407C1FE8004082000C387C1D5448005A15A01F000070F9 +S219024F550980004082FFD07FFDFB78A01D00007009200041821E +S219024F6A0010801E00107C0903784800000C381D0008813E00FD +S219024F7F10901E00087C09E8502C1B00005400F87A393E0028E7 +S219024F94B33D00027F49012E83FD0004408100307F1EC3787F4C +S219024FA97CDB78809E000080BE00047FE3FB78480051A5801E0C +S219024FBE0004379CFFFF3BDE00087FFF02144082FFE07C188A8E +S219024FD3A654000FFE2C00000041820028813D0004A01D000223 +S219024FE82C000000408100187C004BAC7C0004AC3400FFF039AD +S219024FFD2900104181FFF0A01D00006000DC00B01D0000800167 +S219025012002C7C0803A6830100088321000C8341001083610035 +S219025027148381001883A1001C83C1002083E100243821002890 +S21902503C4E8000208123000481690008A06B000054638BFE681D +S2190250516300014E800020688401003004FFFF7C6021104E80F7 +S21902506600208123000481690004800B000060000030900B00C2 +S21902507B004E8000208123000481690004800B0000540007327D +S219025090900B00004E8000209421FFD87C0802A69321000C9370 +S2190250A5410010936100149381001893A1001C93C1002093E132 +S2190250BA00249001002C83230008839900047FDE9AA677DEFF3A +S2190250CFFF3C80000338843F583860000838A00006480017FDDA +S2190250E47F788AA6577B0FFE39200000380000807C0903A6610A +S2190250F92010003CC00E007C0004AC7D398BA67CD88BA67C1934 +S21902510E8BA67CD88BA6392900104200FFE03D2004007C00045B +S219025123AC7D388BA63FA000033CC000023CE000033D2000047E +S21902513838C654AC38E7D918391D4790392988383860001C3812 +S21902514D8000007F25CB7848004395807D47903BFE3C0048002E +S21902516243B13860001C480047BD3860001C48004665801E0AEE +S219025177003B5E0A005400073293FC0000901E0A00935C0004B2 +S21902518C7FE3FB783880000038A000A44800509D38C000047C51 +S2190251A1C903A62F9B0000391E2C00395E2C203D2000033D6053 +S2190251B6000338E0000038009000915C001C39295880396B70A3 +S2190251CB40911C0010911C0008911C0018915C0014915C000C57 +S2190251E0B0EA0002912A0004B00A0000392905F0394A0008427A +S2190251F500FFECA40AFFF87D09437860002000B00A000039401A +S21902520A00047D4903A6399F007238000000B0090002916900DE +S21902521F04B0090000396B05F0392900084200FFEC7D284B781E +S219025234A408FFF83B60000160002000B0080000A13E09523B72 +S219025249A0001061290003B13E0952A01E0950390005F0540029 +S21902525E043AB01E0950A13E09543B80FFFF7129FFFDB13E094C +S21902527354A01E09623D40DEBB7000FFCFB01E0962A13E0960CD +S219025288614A20E37129FFCFB13E0960A01E0964396000006078 +S21902529D000030B01E0964A13E09523860888861290A00B13E25 +S2190252B20952A01E09503880000F7000F5FFB01E0950813E0A53 +S2190252C7EC38C005EE5529002E913E0AEC801E0AEC38E0004097 +S2190252DC6000003D901E0AEC813E0AEC38002C20552906B09177 +S2190252F13E0AEC937E0030B01F000039202C00B13F00029BBF8C +S21902530600049BBF0005B11F0006939F0030915F0034917F00BC +S21902531B38917F003C917F0040B07F0044B17F0044B09F004626 +S219025330B17F0048B0DF004AB0FF004CB11F004EB11F0050389F +S219025345000006B17F00587C0903A6B17F005A3CA00003B17FF7 +S21902535A005CB17F005E38A53F5E7D8963788C05FFFF980900C2 +S21902536F00392900014200FFF438000000B01F0078B01F0094A8 +S219025384B01F0096B01F0098B01F009AB01F009EB01F00A0B04C +S2190253991F00A239200001B13E09C0A01E09C070060001418264 +S2190253AE00187FC9F378A00909C0700A00014082FFF87D3E4B6C +S2190253C3783800FFFFB01A00103920001AB13A0014396000003B +S2190253D83C001088917A00046000000C901A00003920D555B18C +S2190253ED3A000E3800280AB01A0008392000903D60FA10992BCC +S2190254020000A01E096260000001B01E0962A13E096055290401 +S2190254173CB13E0960419E00103D6002007C0004AC7D788BA605 +S21902542C813900003C800003816900247F23CB78800B00003835 +S219025441843F587C0803A64E800021386000018001002C7C084E +S21902545603A68321000C83410010836100148381001883A100D5 +S21902546B1C83C1002083E10024382100284E8000209421FFF802 +S2190254807C0802A69001000C4BFFF7BD3860001C48004495383C +S21902549560001C4800433D8001000C7C0803A6382100084E80CE +S2190254AA00209421FFF87C0802A69001000C3860001C48004114 +S2190254BFB5386000038001000C7C0803A6382100084E80002078 +S2190254D49421FF207C0802A67D800026934100C8936100CC93AA +S2190254E98100D093A100D493C100D893E100DC900100E491814B +S2190254FE00C43BA000007C7B1B787C9A237893A1009893A100B8 +S219025513B0386100083880000038A0000C48004D153D20000484 +S21902552881492CF03B8100183800000C396000013D2000037FF0 +S21902553D83E378B0010010B161000E91410008B3A1000C3929F7 +S2190255521BD03880007638A0000038C0000238E1009039000070 +S21902556700480062F53D20000339291BD83861003038800072E1 +S21902557C38A0000038C0000238E1009439000000480062D13DA3 +S21902559120000339291BE8386100483880006238A0000138C0AA +S2190255A6000038E100983901009C480062AD3D20000339291B2E +S2190255BBF8386100603880006D38A0000138C0000138E100A033 +S2190255D0390100A4480062893D20000339291C1C38610078386B +S2190255E580006838A0000138C0000138E100A8390100AC480001 +S2190255FA62653D4000037F86E3787F63DB787F44D378394A1C0C +S21902560F3438A0000138E00005390100B039200001480062590E +S2190256242C0300003B8000004182030C800100AC2C0000004114 +S21902563982002C806100A838810008480079F12C0300004082BA +S21902564E00183C600003808100A838631C4048005305480002FF +S219025663D8800100A42C000000418200E883A100A03BBD00019A +S2190256787FA3EB78480053A17C651B783C8000037FA3EB783865 +S21902568D841C58480054C92C0300004082006C812100A07D2464 +S2190256A24B78892900003809FFBF280000194181000C38090028 +S2190256B7205409063E7D204B782C000079418200284181001054 +S2190256CC2C00007841820014480000282C00007A41820018480E +S2190256E100001C3B8000014800006C3B800002480000643B80FD +S2190256F600034800005C3C60000348000048806100A03C800085 +S21902570B0338841C744800539D2C030000408200283D20000382 +S2190257208009478C3B8000002C000000408200283C6000033869 +S219025735631C7C48005229480001FC3C600003808100A038637A +S21902574A1C6048005215480001E82E1C00004092007480610076 +S21902575FB02C030000408200283C60000338631CA4480051F1E1 +S2190257743C6000033C80000338631CB838843F68480051DD482B +S2190257890001B03BA100B43881000838A000017FA6EB78480059 +S21902579E66217C7B1B7940800014806100B483A100B0480069EF +S2190257B3B9480000403C600003808100903863BF64480001C1A1 +S2190257C8480000543BA100B4806100B07F84E3787FA5EB7848DB +S2190257DD008F957C7B1B7940800028806100B483A100B0480068 +S2190257F2931D7C651B783C60000338631CC87FA4EB784800513A +S2190258075D480001303C600003808100903863E8F44800016D52 +S21902581C3D2000043BE92E083B8000003B4100B84800000C7FF3 +S2190258317CD1AE3B9C0001281C0003418100184800016D7C7BBA +S2190258461B794080FFE8801F0110900100B42C1B00004180000E +S21902585BD44800010D800100942C000000418200548001009C92 +S2190258702C000000408200143C60000338631CE0480050E14823 +S2190258850000A8838100984800000C987C00003B9C000148003B +S21902589A01157C631B794080FFF03C6000038081009838631DCA +S2190258AF047F85E378480050AD480000743C80000338841D1CC5 +S2190258C4386100B938A00003480052412C0300003B8100B840DD +S2190258D98200143C600002386359AC480006DD4800004488019F +S2190258EE00B82C00005340820028893C00013929FFD028090055 +S21902590309418100183C60000280810098386359AC480001C9BC +S219025918480000143C600003808100B838631D204800503940D6 +S21902592D92000C7FA3EB784800661D800100E4818100C47C08C1 +S21902594203A6834100C8836100CC838100D083A100D483C10054 +S219025957D883E100DC7D808120382100E04E8000203D200004F6 +S21902596C39292E088009010C3969000490090108916901044E5C +S2190259818000203D600004392B2E083940000038000100906B82 +S2190259962E08914901189009010C90890114914901084E800047 +S2190259AB209421FFF07C0802A693C1000893E1000C900100146F +S2190259C03D2000043BE92E0883DF01082C1E00004080000C3857 +S2190259D560FFFF480000EC408200C4801F01142C0000004182FB +S2190259EA0038817F01183D20000339293F607C8958AE396B0040 +S2190259FF013C600003917F011838631BC848004F55801F0118A1 +S219025A14280000064081000893DF01183D2000043BE92E0880B9 +S219025A291F010C2C0000FF41810020801F01142C000000418285 +S219025A3EFF983C60000338631BCC48004F194BFFFF883D2000B6 +S219025A530481292E08381F00047C0303783880010038BF01103D +S219025A687D2803A6901F01044E8000212C030000907F010C9056 +S219025A7D7F010841810020801F01142C0000004182FF483C601D +S219025A92000338631BCC48004EC94BFFFF383D400004394A2E61 +S219025AA708812A0108816A01043929FFFF912A0108886B000020 +S219025ABC396B0001916A0104800100147C0803A683C100088398 +S219025AD1E1000C382100104E8000209421FF707C0802A6928112 +S219025AE6006092A1006492C1006892E1006C930100709321005B +S219025AFB74934100789361007C9381008093A1008493C1008837 +S219025B1093E1008C900100947C7D1B787C9523783B6000003A47 +S219025B258000013B2000003AC000003AE0FFFF480002602C059B +S219025B3A0053418200183C60000338631A687F64DB7848004E99 +S219025B4F15480002547FA803A63B7B00024E80002138A10058DF +S219025B6438000000547C063E7CBA2B78900100587FA3EB78385A +S219025B79800001480002697C7F1B79408000183C60000338633B +S219025B8E1A947F64DB7848004DCD4800020C381CFFD028000014 +S219025BA3093B7B0001418101AC3D600003396B1BA05400103A1A +S219025BB87D4B002E3D20000339291BA07D4A4A147D4903A64E7C +S219025BCD8004207FA3EB78389CFFD17F45D378480002092C144D +S219025BE200007C7E1B78381BFFD17FD8F3787F60E2144182009D +S219025BF72C2C1500004182001C7F3EA8503C60000338631AB885 +S219025C0C7F24CB7848004D51480000083B2000003A8000003D0E +S219025C212000038169477C7FDECA147D39F0507C1748107C00FF +S219025C3601107C0003B87D2900787C1E58407EE000387C174B46 +S219025C4B78418000143D200003800947647C1E004040810018A9 +S219025C603C60000338631AD07FC4F37848004CF5480001343818 +S219025C751F002E7FFC00507FE9FB782C0900007F7BFA143BFFA9 +S219025C8AFFFF408100307F5CD3787FA3EB78388000017F85E3C4 +S219025C9F78480001457FE0FB782C000000987E00003BDE0001B5 +S219025CB43BFFFFFF4181FFDC7FA3EB783880000138A0000048A1 +S219025CC900011D88A1005B7C6318F85466063E7C0628003B7BD0 +S219025CDE000190A10058418200183C60000338631B0C7F04C39E +S219025CF37848004C6D480000AC7D39F0507C09B0107C00011060 +S219025D087C0003B87D2900787EC000387C164B78480000547F44 +S219025D1DA3EB78209C003B7F45D378480000BD7C7E1B783D206F +S219025D3200033C60000393C9478438631B487FC4F3787EE5BBC2 +S219025D47787EC6B37848004C15480000543C60000338631B704F +S219025D5C7F64DB787F85E37848004BFD4800003C7F7FDB787FB2 +S219025D71BEEB78480000083BFF00017FC803A64E8000212C035C +S219025D86000A4082FFF07FDDF3787FFBFB787FA803A64E8000F4 +S219025D9B217C651B794181FD98800100947C0803A6828100605A +S219025DB082A1006482C1006882E1006C83010070832100748347 +S219025DC54100788361007C8381008083A1008483C1008883E14D +S219025DDA008C382100904E8000209421FFE07C0802A693610096 +S219025DEF0C9381001093A1001493C1001893E1001C900100246F +S219025E047C9E23787FC0F3782C0000007C7B1B787CBC2B783B57 +S219025E19A000003BDEFFFF408101787F6803A64E8000217F6816 +S219025E2E03A6547F063E4E800021393FFFD0381FFFBF21290003 +S219025E4309392000007D29491420000005380000007C000114F0 +S219025E587D270379546B063E3920000040820010381FFF9F28C3 +S219025E6D00000541810008392000012C09000041820104392B8F +S219025E82FFD0380BFFBF7D2A4B787C0803785529063E540006AF +S219025E973E21290009392000007D2949142000000538000000A5 +S219025EAC7C0001147D2703793920000040820010380BFF9F28F5 +S219025EC100000541810008392000012C090000418200B0393F7C +S219025ED6FFD05520063E2800000957BD402E4181000C7D234BBC +S219025EEB7848000030381FFF9F280000054181000C387FFFA95C +S219025F004800001C381FFFBF393FFFC9200000057C0001107C9E +S219025F150003B87C0348385540063E280000094181000C7D4918 +S219025F2A537848000030380BFF9F280000054181000C392BFFD9 +S219025F3FA94800001C5500063E392BFFC9200000057C000110C2 +S219025F547C0003B87C094838546020362C1C00007C034B787FE2 +S219025F69BD1B784182001C801C00007C001A14901C00004800B3 +S219025F7E000C3860FFFF480000187FC0F3782C0000003BDEFF17 +S219025F93FF4181FE907FA3EB78800100247C0803A68361000C5C +S219025FA88381001083A1001483C1001883E1001C382100204EEE +S219025FBD8000209421FFF87C0802A69001000C3C600003386379 +S219025FD21A4C4800498D8001000C7C0803A6382100084E800046 +S219025FE7209421FFF07C0802A693C1000893E1000C900100142D +S219025FFC3D6000033D200003392945903BEB458C7C1F484041F7 +S2190260118000207D3E4B78813F00003BFFFFFC7D2803A64E8044 +S21902602600217C1FF0404080FFEC800100147C0803A683C100C1 +S21902603B0883E1000C382100104E8000209421FFF87C0802A6A2 +S2190260509001000C3D2000038009430C2C0000004182001080E0 +S21902606509430C90030094480000243D200003906947D4480078 +S21902607A15417C1602A628007A124081000C38007A127C1603A0 +S21902608FA68001000C7C0803A6382100084E8000204E80002058 +S2190260A4386000004E8000209421FFF07C0802A693E1000C907A +S2190260B9010014480005AD3D2000033889427C800400083BE036 +S2190260CE00002C000000418200307FE3FB787C9F2378809F00ED +S2190260E30080BF000480DF000888FF000C3BFF00104800047D51 +S2190260F8801F00082C0000004082FFE0800100147C0803A683D3 +S21902610DE1000C382100104E8000204E8000209421FFF87C0814 +S21902612202A69001000C480000ED38007A127C1603A680010067 +S2190261370C7C0803A6382100084E8000203D20002F6129AF08F7 +S21902614C7C6349D63C00431B6000DE837C0300967C63FE707C00 +S2190261610096707D6300507D3602A67D605B782C000000396B11 +S219026176FFFF4C810020394BFFFF7C1602A67C0900004182FF1F +S21902618BF87C0903787D605B782C0000007D4B53784181FFE0F0 +S2190261A04E8000209421FFF87C0802A69001000C3D20FF0061C3 +S2190261B529093038000001B00900007C0006ACA00900007C0027 +S2190261CA06AC5400AAFF38600000418200302060003A3D600028 +S2190261DF035460103A396B3FB87D6B002E3D200003392940A44C +S2190261F47C89002E7D6803A64E800021546307FA8001000C7C1E +S2190262090803A6382100084E8000203D20000339493FB8390067 +S21902621E00407C0A402E3D200002392960A47C004800418200E4 +S21902623318800A00403D2000033929A0B47C004800408200349D +S2190262483D200002392961A43D600003380000007D2A412E6026 +S21902625D00DEAD396B40A47C0B412E3D20000339294190380051 +S21902627200007C09412E3D600003800B294C3D20000339292991 +S219026287107D2902147D2903A64E8004203D20FF0061290014F4 +S21902629C800900007C0006AC64000001900900007C0006AC48BB +S2190262B10000E83D20FF0061290200A00900007C0006AC6000CA +S2190262C60008B00900007C0006AC480000C83D20FF00612902D5 +S2190262DB00A00900007C0006AC60000004B00900007C0006AC85 +S2190262F0480000A83D20FF0061290240A00900007C0006AC6043 +S219026305000004B00900007C0006AC480000883D20FF006129DB +S21902631A0220A00900007C0006AC60000008B00900007C0006CB +S21902632FAC480000683D20FF0061290220A00900007C0006AC17 +S21902634460000004B00900007C0006AC480000483D20FF0061A5 +S219026359290940800900007C0006AC60000080900900007C000A +S21902636E06AC480000283D20FF0061290948816900007C00064E +S219026383AC3C00800054005D7E7D6B0378916900007C0006ACDC +S2190263983D600003800B2A5C3D200003392929F87D2902147D1C +S2190263AD2903A64E8004203D20FF0061290200A00900007C0003 +S2190263C206AC5400063E60000100B00900007C0006AC480000E5 +S2190263D7683D20FF0061290240A00900007C0006AC5400063EAB +S2190263EC60000100B00900007C0006AC480000443D20FF006104 +S219026401290220A00900007C0006AC5400063E60000100B009AB +S21902641600007C0006AC480000203D20FF00612909408009001C +S21902642B007C0006AC6000E000900900007C0006AC3D60000380 +S219026440800B2B443D20000339292AE07D2902147D2903A64E21 +S2190264558004203D20FF0061290014800900007C0006AC600076 +S21902646A0040900900007C0006AC4E8000203D20FF0061290239 +S21902647F00A00900007C0006AC60000008B00900007C0006ACDB +S2190264944E8000203D20FF0061290200A00900007C0006AC60DF +S2190264A9000004B00900007C0006AC4E8000203D20FF00612918 +S2190264BE0240A00900007C0006AC60000004B00900007C00060A +S2190264D3AC4E8000203D20FF0061290220A00900007C0006AC34 +S2190264E860000008B00900007C0006AC4E8000203D20FF00619E +S2190264FD290220A00900007C0006AC60000004B00900007C00C8 +S21902651206AC4E8000203D20FF0061290940800900007C000693 +S219026527AC60000080900900007C0006AC4E8000203D20FF00BB +S21902653C61290948816900007C0006AC3C00800054000FFE7DB6 +S2190265516B0378916900007C0006AC4E8000207C1E22A6600070 +S21902656600077C1E23A64E8000209421FFF093E1000C54E0FF6A +S21902657BFE70FF00012F0000002F8300207CC0FE707D600026E8 +S219026590556B1FFE54A500267D400026554ADFFE7C0600507D45 +S2190265A54A00D07CE0002654E7EFFE7D6B00D060A808FF5400FB +S2190265BA0FFE7D0858787D4950F860A508FD7CFF00387CAB5819 +S2190265CF38714A000D2F9F00007D654378548400267129001D90 +S2190265E47D4A4B78608402003960000039000020419E005C54AA +S2190265F96B402E7D55C3A67D70C3A67C93C3A67CB6C3A660A009 +S21902660E01007D5DC3A67D78C3A67C9BC3A67C1EC3A6386300B0 +S219026623013CC6FF807F8340007CC0FE707C0600507D20002658 +S2190266385529EFFE54000FFE7D2700393C8400803CA5008040BC +S21902664D82FFAC656020007C10C3A67C18C3A683E1000C382164 +S21902666200104E800020380000007C19C3A6380000207C090308 +S219026677A639200000380000007C15C3A67D30C3A67C13C3A6C8 +S21902668C7C16C3A67C1DC3A67D38C3A67C1BC3A67C1EC3A6399B +S2190266A12901004200FFD83C00200060001F007C10C3A67C1836 +S2190266B6C3A64E8000209421FDE87CDE9AA674C6FFFF3D600068 +S2190266CB03812B42CC2C0900004082020039400030380000011B +S2190266E07D4903A6900B42CCB12609C43800000039263C807D12 +S2190266F5284B789806086038E62E0838A1000838862E003861DE +S21902670A00093981021198090000392900014200FFF839202ED9 +S21902671F00B1280002396000103940020938002E0899680005E2 +S21902673499680004B0080000B14800063920A800B1262E083847 +S219026749000101B007000290A700047C8B2378B14B0002380066 +S21902675E00A59801000890AB0004B1262E0038000000980608B7 +S21902677364392000509926086838000001980608603920011124 +S219026788B12609C0A00609C070090001418200187CC93378A001 +S21902679D0909C0700A00014082FFF87D264B7838000211B00673 +S2190267B209C0A12609C071200001418200187CC93378A0090963 +S2190267C7C0700A00014082FFF87D264B78392000007D2903A6B4 +S2190267DC380000819806086C7D4902A6614AC3517D4903A6A09A +S2190267F10B000070098000418200084200FFF4394001007D4948 +S21902680603A63D20000439298C5439600000380000FF7C09597C +S21902681BAE396B00014200FFF87D8763787C6B1B787C0B3800BD +S2190268304182009C3CA00004880B00002C00004D408200808837 +S2190268450B00012C00004F40820074880B00022C0000544082A3 +S21902685A00688C0B000839400000892B00015400402E7C084B5C +S21902686F787C0A4000396B00024080005438858C547C651B7804 +S219026884880B0000396B00017D693A787D23FE707C0451AE7C1F +S219026899604A787C0018507C00FE70394A00017CA900787C0A4C +S2190268AE40007D6000387C0B4B784180FFCC48000010396B00A7 +S2190268C3017C0B38004082FF7038000000980608603821021817 +S2190268D84E8000209421FFE87C0802A693A1000C93C1001093B7 +S2190268EDE100149001001C7C7D1B787C9F23787CBE2B784BFF84 +S219026902FDBD3D20000439698C54394B01007C0B504040800080 +S2190269178457A8063E880B00007C00400040820054886B000144 +S21902692C396B00027F83F0004FFEE3827C000026540007FE7C8E +S2190269410000D07FC900787C6000387C034B794081004C7C6961 +S21902695603A67D695B787FE4FB7888090000392900019804005D +S21902696B00388400014200FFF048000028886B00013803000281 +S2190269807D2B00EE5529063E2C0900FF4182000C7C0B50404148 +S21902699580FF88386000008001001C7C0803A683A1000C83C109 +S2190269AA001083E10014382100184E8000209421FFF87C0802B8 +S2190269BFA69001000C480035358001000C7C0803A638210008AC +S2190269D44E8000203C80FF00608400007C9E9BA63CA0FA106079 +S2190269E9A500013C60000060630000986500007C788AA63C60D0 +S2190269FE0A007C0004AC7C788BA63C600C007C0004AC7C788BCF +S219026A13A63C6004007C0004AC7C788BA63C6001007C0004AC07 +S219026A287C788BA63C6007007C0004AC7C788BA67C708AA63CE1 +S219026A3D600A007C708BA64C00012C3C600C007C708BA64C002C +S219026A52012C3C6004007C708BA64C00012C7C0004AC3C6000FD +S219026A676060632400906400003C60FFFF6063FF8890640004FC +S219026A7C3C600000606300C2B06402003C6055CC6063AA3390DA +S219026A9164032090640324906403289064032C386000C3B06496 +S219026AA6022038600083B064024038600200B064017A3C601864 +S219026ABB8060631000906401703C60FE00606304013CA0FF804A +S219026AD060A509609064010090A401043C600000606300813CF2 +S219026AE5A0FFC060A504009064010890A4010C3C600000606390 +S219026AFA00803CA0000060A504009064011090A401143C600031 +S219026B0F00606300803CA0000060A504009064011890A4011CE4 +S219026B243C60FA00606304013CA0FFE060A50930906401209059 +S219026B39A401243C608000606300013CA0A00060A50108906419 +S219026B4E012890A4012C3C60FA21606300013CA0FFFF60A50146 +S219026B63089064013090A401343C60FC00606300013CA0FF80C9 +S219026B7860A509409064013890A4013C3C600200606300009024 +S219026B8D640280806402845463653E2C030000418200103C60A4 +S219026BA25F506063D0004800000C3C6000006063D0009064021C +S219026BB7843C4000003C60FF0060630014904300003C40000001 +S219026BCC604200007C4210F87C5603A6384000013C60FF006056 +S219026BE1630200B04300003CA0FA1060A500013C6000006063F5 +S219026BF60008986500004E8000207063000E3C80FA1060840005 +S219026C0B01986400004E8000203C80FA106084000138A0000AF5 +S219026C2098A400003CA0000A7CA903A64200000038A0000C98AA +S219026C35A400003CA0000A7CA903A6420000003863FFFF2C03E1 +S219026C4A00004080FFD038A0000698A400003CA000147CA9036D +S219026C5FA6420000004E8000203D20000339292BC85463073E92 +S219026C747C6918AE4E8000209421FFF87C0802A69001000C3DB9 +S219026C89200003806942E82C0300004181000C48001B454800CC +S219026C9E000C3800FFFF900942E88001000C7C0803A6382100C2 +S219026CB3084E8000203803FF9F280000054181000C3863FFA9B8 +S219026CC84E8000203923FFD05520063E280000094181000C7D62 +S219026CDD234B784E8000203803FFBF280000054081000C38603C +S219026CF2FFFF4E8000203863FFC94E8000209421FFE07C08022F +S219026D07A6900100243800000098010018906100104BFFFF657D +S219026D1C5463063E388100084800001D2C0300014082FFEC80DD +S219026D310100247C0803A6382100204E8000209421FFF07C0865 +S219026D4602A693C1000893E1000C900100147C9F2378897F004A +S219026D5B102C0B0000408200282C0300244082009839200001E4 +S219026D703800FFFF901F0004993F0010917F0000917F000C48C2 +S219026D8500007C2C0B0001408200542C03002340820020815F14 +S219026D9A0008817F000C380000007C0A59AE39200002993F00D1 +S219026DAF1048000050817F000C2C0B0800418200E8801F00008B +S219026DC4813F00087C001A14901F00007C6959AE380B000190D2 +S219026DD91F000C480000242C0B0002408200245463063E4BFFA3 +S219026DEEFECD5463203638000003907F0004981F001038600004 +S219026E0300480000AC2C0B0003408200985463063E4BFFFEA503 +S219026E18801F0004893F00037C001B787C090000901F00044168 +S219026E2D8200103860002D4800196D4800006C3860002B480065 +S219026E421961813F0008880900022C00003A4082004C886900FA +S219026E570083DF000C48001945813F00088869000148001939B7 +S219026E6C396000037C0BF040418100287FCAF3787FE4FB7881C2 +S219026E812400087C0958AE7D2B4A14396B00017C0B50409809DB +S219026E96FFFD4081FFE8386000014800001038000000981F005C +S219026EAB103860FFFF800100147C0803A683C1000883E1000CA7 +S219026EC0382100104E8000209421FFE07C0802A69361000C930C +S219026ED581001093A1001493C1001893E1001C900100243D20BA +S219026EEA00033B692BC87C7C1B7838600024480018A98BFC001B +S219026EFF003BC000002C1F00003BA00000418200247FE3FB789A +S219026F144800188D7C1DFA143BDE00017FFCF0AE541D063E2CB9 +S219026F291F00004082FFE4386000234800186D57A0E13E7C7BF3 +S219026F3E00AE4800186157A0073E7C7B00AE480018554BFFFDEB +S219026F532D5463067E2C03002B4082FF98800100247C0803A635 +S219026F688361000C8381001083A1001483C1001883E1001C38BD +S219026F7D2100204E8000209421FFD87C0802A6936100149381F5 +S219026F92001893A1001C93C1002093E100249001002C3D200055 +S219026FA703816947A83D4000032C0B000038000000900A42EC3B +S219026FBC3F6000033F800003408101383FC000033FA000033D3A +S219026FD1200003800947B42C0000004182006C801C47A83D607A +S219026FE600032800000340810018801E47AC70090003408200B9 +S219026FFB0C3BE0000448000034801C47A83BE000012800000103 +S21902701040810024800B47AC540007FE7C0000D07C00FE707CF6 +S2190270250900F8540007FE552907BC7C1F4B78808B47AC3861BF +S21902703A00087FE5FB784800232548000014813E47AC3BE000A2 +S21902704F0188090000980100083D200003800942EC2C000000AF +S21902706440820098390000007C08F8004080006C3D200003383D +S219027079C92BC838A100083CE000033C8000037D6828AE8147FD +S21902708E47B05560E13E7D2600AE992A0000800442EC394A00D2 +S2190270A3012C000000914747B0408200505560073E7D2600AE78 +S2190270B8396A0001992A0000801B42EC916747B02C0000004031 +S2190270CD820030390800017C08F8004180FFB0813D47A8801E7C +S2190270E247AC7D3F48502C0900007C00FA14901E47AC913D47D6 +S2190270F7A84181FED88001002C7C0803A683610014838100184F +S21902710C83A1001C83C1002083E10024382100284E8000209438 +S21902712121FFE87C0802A693A1000C93C1001093E10014900161 +S219027136001C2C0600003D2000033D6000033D4000033D000032 +S21902714B03908947B0906B47AC90AA47A890C847B441820030B8 +S2190271603FA0000338000000901D42EC813D42EC4BFFFE158154 +S2190271753D42EC801D42EC2C00000041820010386000004800E9 +S21902718A001C4BFFFDF93D600003812B47B03800000098090071 +S21902719F00806B47B08001001C7C0803A683A1000C83C10010A4 +S2190271B483E10014382100184E8000209421FFC07C0802A692B6 +S2190271C981001092A1001492C1001892E1001C93010020932170 +S2190271DE0024934100289361002C9381003093A1003493C10055 +S2190271F33893E1003C900100443D200003800947A83B60000050 +S2190272082C0000003D200003936942EC3E8000033EA0000340D2 +S21902721D8101703D200003816947AC3F000003880B00002C0025 +S2190272320000418201583EC000033F4000033EE00003801647A3 +S219027247B42C00000041820058801547A82800000340810018A8 +S21902725C801A47B0700900034082000C3BC000044800003C8038 +S2190272711547A83BC00001280000014081002C801A47B0540006 +S21902728607FE7C0000D07C00FE707C0900F8540007FE55290756 +S21902729BBC7C1E4B78480000083BC000013BE000007C1FF000CC +S2190272B0408000743FA000033F2000033B810008813D47AC884D +S2190272C569000039290001913D47AC5463063E4BFFF9E5801964 +S2190272DA42EC547B26362C000000408200A8813847AC8869000C +S2190272EF0039290001913847AC5463063E4BFFF9BD801442ECA7 +S2190273047F631B782C000000547B063E4082007C7F7FE1AE3BB3 +S219027319FF00017C1FF0004180FFA0801647B42C0000004182ED +S21902732E0018809A47B0386100087FC5F3784800208948000091 +S2190273430C813A47B09B6900003D200003800942EC2C00000029 +S21902735840820034813747A8801A47B07D3E48502C0900007CE7 +S21902736D00F214901A47B0913747A840810014813847AC880994 +S21902738200002C0000004082FEBC800100447C0803A682810052 +S2190273971082A1001482C1001882E1001C83010020832100244D +S2190273AC834100288361002C8381003083A1003483C10038833E +S2190273C1E1003C382100404E8000209421FFE87C0802A693A110 +S2190273D6000C93C1001093E100149001001C2C0600003D200067 +S2190273EB033D6000033D4000033D000003906947AC908B47B025 +S21902740090AA47A890C847B4418200303FA00003380000009057 +S2190274151D42EC813D42EC4BFFFDA5813D42EC801D42EC2C0055 +S21902742A00004182001038600000480000104BFFFD893D200056 +S21902743F03806947B08001001C7C0803A683A1000C83C1001000 +S21902745483E10014382100184E8000209421FFF87C0802A690DD +S21902746901000C48001AA53D20000338000001900942D080012E +S21902747E000C7C0803A6382100084E8000209421FFE87C080248 +S219027493A693A1000C93C1001093E100149001001C7C9E2378A9 +S2190274A83BA000007C7F1B7893BE000048000024801E00008183 +S2190274BD3F0000540020367C001B7839290001901E0000913FDA +S2190274D200003BBD0001813F0000886900002C03000041820002 +S2190274E7104BFFF7D17C631B794080FFC87FA3EB788001001C4B +S2190274FC7C0803A683A1000C83C1001083E10014382100184E8C +S2190275118000207C8423793940000040820018380000309803CC +S219027526000198030000386000024E800020392500077D20FE25 +S21902753B7054001F7E7D2902147D251E71418200603D20000363 +S21902755038C92BC838E5FFFF54E018387C88043068A900012022 +S2190275650900007D2049143168FFFF7C0B41107C0B4B7941828A +S21902757A00285508063E5500E13E7D6600AE5509073E7C0648BA +S21902758FAE996300009C03000138630001394A00027CE53B7960 +S2190275A44082FFB07D4353784E8000204E8000204E8000209471 +S2190275B921FFF07C0802A693C1000893E1000C900100143D209C +S2190275CE0003800942E42C00000041820010800942E47C0803BA +S2190275E3A64E8000213D200003800947D82C00000041820014EC +S2190275F838000000900947D83BE00002480000104800766948A3 +S21902760D00759D7C7F1B78480077252C0300004182000848009B +S2190276227751480077114BFFFF8D480076C13860000348001B61 +S219027637D13860000348001B612C1F0000418200203FC00003D7 +S21902764C813E42D47FE3FB787D2803A64E8000212C03000040CC +S21902766182FFEC480076CD3D200003800942E02C00000041821B +S2190276760010800942E07C0803A64E800021800100147C080305 +S21902768BA683C1000883E1000C382100104E8000209421FFB8BE +S2190276A07C0802A6936100349381003893A1003C93C100409397 +S2190276B5E100449001004C7C7E1B783BE000003F6000033B81B1 +S2190276CA0028801B47C43BA000012C0000004182001C7FE3FB92 +S2190276DF787F84E3787C0803A64E8000217C7D1B7848000010B9 +S2190276F47FE3FB784800108190610028381FFFE02800001F7CBA +S2190277090A03782F9D00003BFF00017F83E3784181004C390034 +S21902771E00047D0903A6386100087C6B1B783800000039200070 +S219027733007C0B49AE392900014200FFF8380000047C0903A6B6 +S2190277487C6943787F8BE378880B0000396B000198090000390E +S21902775D2900014200FFF0419E0030200A001F7C0001107C054F +S21902777200F85400077A54A507387FC4F3787C052B7838C0002C +S219027787004BFFF9997C7E1B7848000058212A001F7D29491074 +S21902779C7D2048F8540006F6552907387D2903782C0900007F12 +S2190277B1CBF378380000783929FFFF418200182C090000980BC3 +S2190277C60000396B00013929FFFF4082FFF0280A001F418100DE +S2190277DB0C3BDE0010480000083BDE00082C1F00464081FEE0BC +S2190277F08001004C7C0803A6836100348381003883A1003C834C +S219027805C1004083E10044382100484E8000209421FFD07C0827 +S21902781A02A67D8000269381002093A1002493C1002893E1000B +S21902782F2C900100349181001C88030000386300012C0000507B +S2190278447C9D237890610008392000003BC00047408200703876 +S2190278596100083881000C4BFFFC2D2C030000418200288121B6 +S21902786E000888090000392900012C00003D912100084082001D +S219027883108121000C3BC90001480000383D20000388092BE0AA +S2190278987FA4EB782C00000039692BE0418200D8880B000098AF +S2190278AD0400008D2B0001388400012C0900004082FFEC48001B +S2190278C200BC7D3F4B787C1FF000408000803B800000397FFF32 +S2190278D7E020AB001F7CA52910392100103881000C7CA028F806 +S2190278EC7C8428787CA9483854A5077A54000738806100082A1B +S2190279010B001F7CA503787D2423789381001038C000004BFF02 +S219027916FAB9808100107FE3FB7848000E6D4191001081210075 +S21902792B08392900104800000C812100083929000891210008A4 +S2190279403BFF00017C1FF0004180FF8C3D20000388092BE47F9A +S219027955A4EB782C00000039692BE44182001C880B0000980424 +S21902796A00008D2B0001388400012C0900004082FFEC38000071 +S21902797F0098040000800100348181001C7C0803A6838100202C +S21902799483A1002483C1002883E1002C7D808120382100304E1E +S2190279A98000209421FF287C0802A693A100CC93C100D093E182 +S2190279BE00D4900100DC3BA000003D6000047C7E1B789BAB9687 +S2190279D3E4893E00003809FFC128000034418108283D600003FE +S2190279E8396B2BF85400103A7D4B002E3D20000339292BF87DC6 +S2190279FD4A4A147D4903A64E800420480072694800719D3D208F +S219027A12000339292BC85460E73E7D0900AE5463073E7CE9187A +S219027A27AE3D40000438000053392A96E4980A96E439600000F7 +S219027A3C996900039909000198E90002480007D4387E000148E1 +S219027A51000B6D480007C8387E000148000CE5480007BC3C60F3 +S219027A660004386396E44BFFFC31480007AC881E00012C0000A6 +S219027A7B0040820040480009013D20000388092BE43D600004FA +S219027A902C000000396B96E439492BE441820748880A00008DCE +S219027AA52A0001980B00002C090000396B00014082FFEC480028 +S219027ABA072C381E0001900100883BC1008C3BE100887FE3FB84 +S219027ACF787FC4F3784BFFF9B92C030000418200A481210088B9 +S219027AE488090000392900012C00002C912100884082008C7F33 +S219027AF9E3FB78388100904BFFF98D2C030000418200788121F6 +S219027B0E008888090000392900012C00002C912100884082008B +S219027B23608081008C2C04000041820038806100904800088DE0 +S219027B387C641B79418200148061008880A1008C38C000004B8D +S219027B4DFFF8818001008C812100887C0002147D29021491216D +S219027B62008881210088880900002C00002C4082001038090059 +S219027B7701900100884BFFFF5081210088880900002C00000058 +S219027B8C4082003C3D20000388092BE43D6000042C00000039D9 +S219027BA16B96E439492BE44182063C880A00008D2A0001980B60 +S219027BB600002C090000396B00014082FFEC480006203D200061 +S219027BCB0388092BE83D6000042C000000396B96E439492BE877 +S219027BE041820604880A00008D2A0001980B00002C0900003961 +S219027BF56B00014082FFEC480005E83C8000047FC3F3783884FD +S219027C0A96E44BFFFC094800060C381E00013BE10094900100A3 +S219027C1F947FE3FB78388100984BFFF8652C0300004182009066 +S219027C348121009488090000392900012C00002C91210094402C +S219027C498200787FE3FB783881009C4BFFF8392C03000041828E +S219027C5E0064806100983C80000480A1009C388496E438C00082 +S219027C73014BFFF4AD2C030000408205A03D600003880B2BEC29 +S219027C883D2000042C000000394996E4396B2BEC4182001C8835 +S219027C9D0B00008D2B0001980A00002C090000394A00014082EA +S219027CB2FFEC38000000980A0000480005603D20000388092B28 +S219027CC7E83D6000042C000000396B96E439492BE84182050C65 +S219027CDC880A00008D2A0001980B00002C090000396B00014085 +S219027CF182FFEC480004F03BA00001381E00013BE100A090014E +S219027D0600A07FE3FB78388100A44BFFF77D2C030000418201DE +S219027D1BF8812100A088090000392900012C00002C912100A074 +S219027D30408201E07FE3FB78388100A84BFFF7512C030000415C +S219027D458201CC806100A088030000386300012C00003A9061D4 +S219027D5A00A0408201B42C1D000041820124800100A82C000070 +S219027D6F00418200A8800100A83BE000007C1F0040408000545A +S219027D8439410008816100A0892B0000396B00017D204B782CFA +S219027D9900007D7D2AF9AE916100A040820018880B0000392BA0 +S219027DAE0001600000207C0AF9AE912100A03BFF0001281F0037 +S219027DC37F41810010800100A87C1F00404180FFB8808100A432 +S219027DD8386100087FE5FB78480015E57C03F8004082002481F7 +S219027DED2100A8800100A47D3F48502C0900007C00FA149001E8 +S219027E0200A4912100A84082FF6C800100A82C00000040820022 +S219027E173C3D20000388092BE43D6000042C000000396B96E428 +S219027E2C39492BE4418203B4880A00008D2A0001980B00002C16 +S219027E41090000396B00014082FFEC480003983D2000038809F6 +S219027E562BEC3D6000042C000000396B96E439492BEC418203AF +S219027E6B7C880A00008D2A0001980B00002C090000396B0001B8 +S219027E804082FFEC48000360808100A480A100A838C000014BDC +S219027E95FFF5392C0300004182003C3D20000388092BE43D60D9 +S219027EAA00042C000000396B96E439492BE44182032C880A0059 +S219027EBF008D2A0001980B00002C090000396B00014082FFECC5 +S219027ED4480003103D20000388092BEC3D6000042C0000003929 +S219027EE96B96E439492BEC418202F4880A00008D2A0001980B59 +S219027EFE00002C090000396B00014082FFEC480002D83D200062 +S219027F130388092BF03D6000042C000000396B96E439492BF01B +S219027F28418202BC880A00008D2A0001980B00002C0900003961 +S219027F3D6B00014082FFEC480002A0881E0000395E0001680976 +S219027F520053216900007D2B491468000043216000007C0B017D +S219027F67147C0B4B7939600000914100AC916100B03BE100AC1E +S219027F7C418200287FE3FB78388100B04BFFF505812100AC88A6 +S219027F910900002C00003B4082000C38090001900100AC7FE3B5 +S219027FA6FB78388100B44BFFF4E12C0300004182000C806100E1 +S219027FBBB448006CC9386000034800124138600003480011D17E +S219027FD0806100B02C0300004182004C3D200003800942DC2C93 +S219027FE50000004182001C800942DC7C0803A64E8000217C63FF +S219027FFA1B7940820008906100B0800100B02C0000004182004C +S21902800F1838000009900100B0386000094800030D4800020870 +S2190280244800094D2C0300004182001838000063981E00003D0A +S21902803920000338000001900942FC881E000068090053216904 +S21902804E00007D2B491468000073216000007C0B01147C0B4B47 +S2190280637941820024386000004BFFF5453D20000439292F246F +S2190280783D600003912B42F848006C2D4800000C386000014B3D +S21902808DFFF525386000034800117138600003480011013860CC +S2190280A2FFFF480001883D200003800942D87C0803A64E8000F5 +S2190280B721386000014800017048000F8948000158381E000162 +S2190280CC900100B8386100B8388100BC4BFFF3B52C0300004127 +S2190280E182007C812100B888090000392900012C00002C91212D +S2190280F600B84082006488090000392900012C0000439121007B +S21902810BB840820010806100BC48001AD14800000C806100BC0D +S21902812048001ABD3D20000388092BE43D6000042C000000391E +S2190281356B96E439492BE4418200A8880A00008D2A0001980B60 +S21902814A00002C090000396B00014082FFEC4800008C3D200061 +S21902815F0388092BE83D6000042C000000396B96E439492BE8DD +S21902817441820070880A00008D2A0001980B00002C0900003961 +S2190281896B00014082FFEC48000054381E0001900100C03861E4 +S21902819E00C0388100C44BFFF2E92C030000408200443D2000D1 +S2190281B30388092BF43D6000042C000000396B96E439492BF471 +S2190281C84182001C880A00008D2A0001980B00002C0900003961 +S2190281DD6B00014082FFEC38000000980B0000480000303C607E +S2190281F2000338632BE44BFFECD1806100C4480006154800006D +S219028207183C8000047FC3F378388496E438A0012C4800121130 +S21902821C3C600004386396E44BFFECA538600000800100DC7C45 +S2190282310803A683A100CC83C100D083E100D4382100D84E8045 +S21902824600209421FFE87C0802A693A1000C93C1001093E1001C +S21902825B149001001C3FA00004389D96E448000E21387D96E46E +S2190282704BFFEC598001001C7C0803A683A1000C83C100108392 +S219028285E10014382100184E8000209421FFF07C0802A693E145 +S21902829A000C900100143D200003800942E82C00000040800018 +S2190282AF084BFFFF993FE00004387F8EE44BFFEA45387F8EE4DB +S2190282C44BFFF6E97C631B794182FFEC7C6318F854630FFE8021 +S2190282D90100147C0803A683E1000C382100104E8000204E80B2 +S2190282EE00209421FFF87C0802A69001000C4BFFF16548000CEB +S219028303553860002B480004998001000C7C0803A63821000846 +S2190283184E8000203D200003906942E84E8000209421FFF87CC2 +S21902832D0802A69001000C3D20000339292BC85460E73E7D4993 +S21902834200AE5463073E7D0918AE3D60000438000058386B96BF +S219028357E4980B96E43920000099430001990300029923000376 +S21902836C4BFFEB5D8001000C7C0803A6382100084E8000203D1D +S21902838120000438A0000039299F343CC0000338E0FFFF3C80DE +S21902839600033D6000043D4000033D0000033800000190E64771 +S2190283ABBC90AB9EE4912A47C0900842F090A447B84E80002090 +S2190283C09421FFF07C0802A693C1000893E1000C900100143D13 +S2190283D5200003800942F07C7F1B782C0000007C9E237840827D +S2190283EA00084BFFFF952C1F0012418100243D600003800B47DC +S2190283FFC03D20000439299F347C0900507C00F214280000800D +S2190284144081000C386000004800006C3CE00003800747BC7C0E +S2190284291F00004182004C3D000003800847B87C1F00004180E6 +S21902843E0020395F00013D20000439299EE4554B103A38000002 +S219028453007C09592E914847B83D600003814B47C03D20000455 +S21902846839299EE457E0103A7D49012E93E747BC3D2000038041 +S21902847D6947C07C03F214900947C0800100147C0803A683C148 +S219028492000883E1000C382100104E8000209421FFD87C0802ED +S2190284A7A6936100149381001893A1001C93C1002093E1002483 +S2190284BC9001002C3D600003800B42F47C7D1B782C0000007C52 +S2190284D19E23787CBF2B7840820058380000013D200004392962 +S2190284E69FB4900B42F439400000380000087C0903A6390A002C +S2190284FB01554BC00E5547103A2C0B00005560083C4080000C14 +S2190285106C0004C168001DB77C0B03784200FFE87D0A4378284D +S2190285250A00FF7C09392E4081FFC43D600003380000003D208C +S21902853A00043B699FB4900B42EC3F8000034800002489210089 +S21902854F0857E0463E7C004A785400103A7D7B002E57E9402E9D +S2190285647D3F5A783BBD00012C1E00003BDEFFFF4182002038F8 +S2190285796100087FA4EB7838A0000148000DE1801C42EC2C00F2 +S21902858E00004182FFBC7FE3FB788001002C7C0803A6836100C0 +S2190285A3148381001883A1001C83C1002083E1002438210028DF +S2190285B84E8000209421FFD87C0802A693A1001C93C1002093AA +S2190285CDE100249001002C3D20000438000000980996E43BA938 +S2190285E296E47C691B7890610008880900002C000043408200D0 +S2190285F7F4880900012C000052408200E88BC900022C1E0043D7 +S21902860C408200DC880900032C00003A408200D0380900043BA8 +S219028621E10008900100087FE3FB783881000C4BFFEE5D2C035D +S2190286360000418200EC8121000888090000392900012C0000AF +S21902864B2C91210008408200D47FE3FB78388100104BFFEE3190 +S2190286602C030000418200C08061000C8081001038A0FFFF4B2D +S219028675FFFE2D3D20000383E942EC2C1F0000418200403D201A +S21902868A000388092BE87FA3EB782C00000039692BE841820004 +S21902869F1C880B00008D2B0001980300002C09000038630001EB +S2190286B44082FFEC3800000098030000480000647C641B7838D3 +S2190286C97D000138A000204BFFEE453D2000049BC996E43863C8 +S2190286DE00017FFD19AE4800004081210008880900007D234B8E +S2190286F3782C00004C7C090378418200284181000C2C00004353 +S219028708480000082C090050418200143C800004388496E4387B +S21902871DA0012C48000CF98001002C7C0803A683A1001C83C1C8 +S219028732002083E10024382100284E8000209421FFF87C0802E2 +S219028747A69001000C880300002C000070418200143C80000415 +S21902875C388496E438A0012C48000CBD8001000C7C0803A638C3 +S2190287712100084E8000203D200003816942F85463103A7C6371 +S219028786582E4E8000203D200003816942F85463103A7C835986 +S21902879B2E4E8000209421FFF87C0802A69001000C3D200000D4 +S2190287B039293200816900185464063E806B0000800B000C7C1D +S2190287C50803A64E8000218001000C7C0803A6382100084E800F +S2190287DA00209421FFF87C0802A69001000C3D200000392932FD +S2190287EF0081690018806B0000800B00107C0803A64E800021CA +S2190288048001000C7C0803A6382100084E8000209421FFF87C27 +S2190288190802A69001000C3D20000039293200816900187C6522 +S21902882E1B78806B0000800B0014388000007C0803A64E80005E +S219028843218001000C7C0803A6382100084E8000209421FFF843 +S2190288587C0802A69001000C480000158001000C7C0803A638EC +S21902886D2100084E8000209421FFE87C0802A693A1000C93C17C +S219028882001093E100149001001C3FC00003817E47C83D200028 +S219028897032C0B0000380000003BBE47C8900942FC7C7F1B78E6 +S2190288AC418200187D635B7848000055801E47C82C000000406C +S2190288C182002C813F00003C007D82913D000460001008901FF9 +S2190288D6000093FE47C8386000034800092538600003480008EA +S2190288EBB58001001C7C0803A683A1000C83C1001083E10014F6 +S219028900382100184E8000209421FFF87C0802A69001000C3D4A +S219028915200003816942FC2C0B0000408200183D200003800901 +S21902892A47C8394947C87C0300004182000C3860000048000063 +S21902893F24800A0004916947C89003000038600003480008B52E +S2190289543860000348000845386000018001000C7C0803A6384C +S2190289692100084E8000203D200003800947C83120FFFF7C69AF +S21902897E01104E8000209421FFF87C0802A69001000C2C03003A +S21902899300418200483D400003812A43003929FFFF2C090000BA +S2190289A8912A4300418100683D20000039293200816900183860 +S2190289BD000000900A4300806B0000800B0014388000057C08F6 +S2190289D203A64E8000214800003C3D600003812B43003929007C +S2190289E7012C090001912B4300408200243D2000003929320067 +S2190289FC8169001838800004806B0000800B00147C0803A64E9C +S219028A118000218001000C7C0803A6382100084E8000209421EA +S219028A26FFF87C0802A69001000C3D2000003929320081690099 +S219028A3B18806B0000800B00107C0803A64E8000218001000CD8 +S219028A507C0803A6382100084E8000209421FFC87C0802A69254 +S219028A65C1001092E10014930100189321001C93410020936139 +S219028A7A00249381002893A1002C93C1003093E1003490010063 +S219028A8F3C2C04000D418201CC3D600003814B43043D200004AE +S219028AA43929A3B47C8951AE2C04000A394A0001914B43043FD9 +S219028AB94000034182000C2C0A00644082019C3D2000003929D7 +S219028ACE320083C900187EE000A67EE0BB783920000051200493 +S219028AE3207C0001243C60000338638C604BFFFD653D20000384 +S219028AF83AC92CD0807E0000813E000C388000247D2803A63B35 +S219028B0D6000003BE0004F4E800021807E0000813E000C388012 +S219028B22004F7D2803A64E800021801A43047C1B000040800073 +S219028B37703D2000043D6000033B09A3B43B2B2CD07D38D8AE79 +S219028B4C807E00005520E13E7F9900AE817E000C7F84E3787DCF +S219028B616803A65529073E7FB948AE3B7B00014E800021807E52 +S219028B760000813E000C7FA4EB787D2803A64E800021801A4378 +S219028B8B047F9FE214579F063E7C1B00007FBFEA1457BF063E4F +S219028BA04180FFA8807E0000813E000C388000237D2803A64E11 +S219028BB5800021807E0000813E000C57E0E13E7C9600AE7D287F +S219028BCA03A64E800021807E0000813E000C57E0073E7C9600A0 +S219028BDFAE7D2803A64E800021807E0000813E00107D2803A674 +S219028BF44E8000215460063E2C00002B986100084182003838F3 +S219028C09610008388000014800142D2C03000040820014880116 +S219028C1E00082C00002D4082FFC44BFFFED43D20000039293247 +S219028C330038000001900900443D200003380000009009430497 +S219028C483C60000338638C604BFFFCB97C0000A652E004207CF7 +S219028C5D0001248001003C7C0803A682C1001082E1001483019E +S219028C7200188321001C83410020836100248381002883A100D2 +S219028C872C83C1003083E10034382100384E8000209421FFE87E +S219028C9C7C0802A693A1000C93C1001093E100149001001C7C3B +S219028CB1BF2B787FE0FB782C0000007C7D1B787C9E23783BFFCC +S219028CC6FFFF41820024889E00007FA3EB784BFFFD897FE0FBD8 +S219028CDB782C0000003BDE00013BFFFFFF4082FFE48001001C45 +S219028CF07C0803A683A1000C83C1001083E10014382100184E80 +S219028D058000209421FFE87C0802A693A1000C93C1001093E1D2 +S219028D1A00149001001C7CBF2B787FE0FB782C0000007C7D1B8C +S219028D2F787C9E23783BFFFFFF418200247FA3EB784BFFFCE52C +S219028D447FE0FB782C000000987E00003BDE00013BFFFFFF406D +S219028D5982FFE48001001C7C0803A683A1000C83C1001083E1E7 +S219028D6E0014382100184E8000209421FF909081000C90A100E4 +S219028D831090C1001490E100189101001C912100209141002460 +S219028D9838600000382100704E8000209421FFF87C0802A69008 +S219028DAD01000C386000004BFFFBD13D600004380000207C0971 +S219028DC203A63D200003814947D4396B2F243D00000339200017 +S219028DD7007C09502E7C09592E392900044200FFF47D6A5B781C +S219028DEC3D200003816947D4800B0094900A0100812B0090917F +S219028E012A0104800B0080900A0108812B0088912A010C800BF1 +S219028E16008C900A0110812B0084912A01143D4000033D6000EC +S219028E2B03800B42FC3D2000042C00000039292F24912A42F828 +S219028E404182001838000000900842FC386000404BFFF9294B9E +S219028E55FFFAB5386000404BFFF91D4BFFFAA93D2000039069D5 +S219028E6A47D88001000C7C0803A6382100084E8000209421FF10 +S219028E7FF87C0802A69001000C380000207C0903A63D20000330 +S219028E94814947D43D600004396B2F24392000007C09582E7C65 +S219028EA909512E392900044200FFF47D6A5B783D200003816986 +S219028EBE47D4800A0100900B0094812A0104912B0090800A013C +S219028ED308900B0080812A010C912B0088800A0110900B008CA2 +S219028EE8812A0114912B0084386000014BFFFA918001000C7CF7 +S219028EFD0803A6382100084E800020386000004E8000203D2076 +S219028F12000339298F083D400003912A42DC3D600003396B901A +S219028F27483D200003916942D83D4000033D600003394A8DA49E +S219028F3C914B42E43D20000339298E7C3D600003912B42E04E7F +S219028F518000209421FFF07C0802A693C1000893E1000C900127 +S219028F6600143D200003800943082C000000408200BC380000C5 +S219028F7B019009430848005E213D2000003BC93200813E0034A8 +S219028F903860FFFF7D2803A64E800021813E00347C7F1B783839 +S219028FA560FFFD7D2803A64E800021815E00143D200003392962 +S219028FBA8C98912A00043D6000036FE0FFFF396B8D086800FF2B +S219028FCFFE3D200003916A000839298A5C3100FFFF7CE8011039 +S219028FE4912A000C3D600003301FFFFF7D00F910396B8A243DA8 +S219028FF92000037CE04039916A001039298D78912A0014418260 +S21902900E0014813E00347FE3FB787D2803A64E800021801E008F +S21902902330386000007C0803A64E800021800100147C0803A68B +S21902903883C1000883E1000C382100104E8000209421FFF87CE1 +S21902904D0802A69001000C3D20000039293200800900402C00D4 +S21902906200004182000C7C0803A64E8000218001000C7C0803F3 +S219029077A6382100084E8000207FE000084E8000209421FFD807 +S21902908C7C0802A6936100149381001893A1001C93C100209311 +S2190290A1E100249001002C7C9D23787C7C1B7838000054981D71 +S2190290B600007F8326704BFFDBAD9C7D00017F83E3784BFFDB98 +S2190290CBA17FBFEB789C7F0001386000044BFFDB919C7F0001BD +S2190290E0386000404BFFDB859C7F00013BA0003A9FBF0001382A +S2190290F56000404BFFF6813B810008906100083BFF00017FE4A3 +S21902910AFB787F83E37838A0000438C000004BFFE0097C7F1B5C +S21902911F783B60003B9B7F0000386000004BFFDB3D9C7F0001B6 +S219029134386000014BFFDB319C7F00019FBF0001386000014BD1 +S219029149FFF631906100083BFF00017FE4FB787F83E37838A0A5 +S21902915E000438C000004BFFDFBD7C7F1B7838000000981F0096 +S219029173019B7F00008001002C7C0803A68361001483810018D7 +S21902918883A1001C83C1002083E10024382100284E8000202C04 +S21902919D0300014182002028030001418000502C03000241829E +S2190291B200242C030003418200304800003C3C0002004C000149 +S2190291C72C7C108BA64C00012C480000283C0004004C00012C01 +S2190291DC7C108BA64C00012C480000143C000C004C00012C7CA8 +S2190291F1108BA64C00012C7C708AA654630FFE4E8000202C03AB +S21902920600014182002028030001418000682C0300024182001F +S21902921B202C03000341820028480000543C0002007C0004ACF4 +S2190292307C188BA6480000443D6004007C0004AC7D788BA64896 +S219029245000034380000807C0903A639200000612010003D606C +S21902925A0E007C0004AC7D398BA67D788BA67C198BA67D788B6B +S21902926FA6392900104200FFE07C788AA654630FFE4E800020D4 +S2190292843D60000338000001900B42EC3D200003392993543D46 +S219029299600003912B430C3D40000348000098800A47D0280022 +S2190292AE0003408100307080000340820028706000034082003E +S2190292C320800300003863000490040000812A47D03884000437 +S2190292D83929FFFC4800005C3D600003800B47D02800000140CE +S2190292ED810034708000014082002C7060000140820024A00377 +S219029302000038630002B0040000812B47D0388400023929FF1C +S219029317FE912B47D0480000208803000038630001980400003E +S21902932C812A47D0388400013929FFFF912A47D0800A47D02CA7 +S2190293410000004082FF643D20000338000000900942EC3D202F +S2190293560003380000009009430C4E8000209421FFE87C0802C8 +S21902936BA69381000893A1000C93C1001093E100149001001C4B +S2190293807C601B787CBC2B787C8323783FA000037C040378937D +S2190293959D47D04BFFFEED807D47D07C63E0508001001C7C088F +S2190293AA03A68381000883A1000C83C1001083E100143821009D +S2190293BF184E8000209421FFE87C0802A69381000893A1000C68 +S2190293D493C1001093E100149001001C7CBC2B783FA000039394 +S2190293E99D47D04BFFFE99807D47D07C63E0508001001C7C088F +S2190293FE03A68381000883A1000C83C1001083E1001438210049 +S219029413184E800020386000004E800020386000004E8000202B +S219029428386000004E8000209421FFF07C0802A693C1000893E3 +S21902943DE1000C900100143D200003800947E02C000000418282 +S21902945200603FE000033BC000007D4000A67D4053783920003D +S21902946700512004207C000124817F47E0800B0014901F47E017 +S21902947C808B001893CB00187C0000A6514004207C0001248142 +S2190294912B000C80AB0010806B00007D2803A64E800021801F86 +S2190294A647E02C0000004082FFB0800100147C0803A683C100E0 +S2190294BB0883E1000C382100104E8000209421FFF87C0802A6EE +S2190294D09001000C4BFFFF5D8001000C7C0803A6382100084ED4 +S2190294E58000209069000038000000900900149089000490A997 +S2190294FA0010900900189128000090C9000890E9000C4E800028 +S21902950F20812300002C090000418200F8810300043809FFFFC5 +S21902952428000039418100E83D600003396B2CE85400103A7DAD +S2190295394B002E3D20000339292CE87D4A4A147D4903A64E8065 +S21902954E04203D20FF0061290200A16900007C0006AC556B06F7 +S2190295633E38000000600080007C0046307D600378540B043EAB +S219029578B16900007C0006AC480000903D20FF0061290240A1EE +S21902958D6900007C0006AC556B063E38000000600080007C0093 +S2190295A246307D600378540B043EB16900007C0006AC480000AE +S2190295B75C3D20FF0061290220A16900007C0006AC556B063EF8 +S2190295CC38000000600080007C0046307D600378540B043EB1CF +S2190295E16900007C0006AC480000283D20FF00612909408009AF +S2190295F600007C0006AC540004DE550B68247C005B7890090021 +S21902960B007C0006AC800300003D20000339493FB85408103A13 +S2190296207C0A402E3D200002392960A47C004800418200187C5A +S2190296350A402E3D2000033929A0B47C0048004C820020800356 +S21902964A00083D6000037C0A412E81430010396B40A43D2000AE +S21902965F037D4B412E392941907C69412E4E8000207C631B79CD +S2190296744D8200203803FFFF280000397C0803784D8100203D27 +S219029689600003396B2DD05500103A7D4B002E3D20000339296A +S21902969E2DD07D4A4A147D4903A64E8004203D20FF0061290047 +S2190296B314816900007C0006AC3C0080007C0044307D6B007863 +S2190296C8916900007C0006AC4E8000203D20FF0061290200A0E8 +S2190296DD0900007C0006AC7000FFF75400043EB00900007C0009 +S2190296F206AC4E8000203D20FF0061290200A00900007C0006A9 +S219029707AC7000FFFB5400043EB00900007C0006AC4E800020C5 +S21902971C3D20FF0061290240A00900007C0006AC7000FFFB5474 +S21902973100043EB00900007C0006AC4E8000203D20FF0061291F +S2190297460220A00900007C0006AC7000FFF75400043EB0090059 +S21902975B007C0006AC4E8000203D20FF0061290220A009000025 +S2190297707C0006AC7000FFFB5400043EB00900007C0006AC4E7A +S2190297858000203D20FF0061290940800900007C0006AC5400EE +S21902979A066E900900007C0006AC4E8000203D20FF006129099B +S2190297AF48816900007C0006AC3943FFE53C0080007C00543022 +S2190297C47D6B0078916900007C0006AC4E8000207C631B794D53 +S2190297D98200203803FFFF280000397C0803784D8100203D60AE +S2190297EE0003396B2EB85500103A7D4B002E3D20000339292E4D +S219029803B87D4A4A147D4903A64E8004203D20FF006129001411 +S219029818816900007C0006AC3C0080007C0044307D6B0378917C +S21902982D6900007C0006AC4E8000203D20FF0061290200A00909 +S21902984200007C0006AC60000008B00900007C0006AC4E8000BF +S219029857203D20FF0061290200A00900007C0006AC60000004B2 +S21902986CB00900007C0006AC4E8000203D20FF0061290240A043 +S2190298810900007C0006AC60000004B00900007C0006AC4E807B +S21902989600203D20FF0061290220A00900007C0006AC60000057 +S2190298AB08B00900007C0006AC4E8000203D20FF0061290220BC +S2190298C0A00900007C0006AC60000004B00900007C0006AC4E1C +S2190298D58000203D20FF0061290940800900007C0006AC600091 +S2190298EA0080900900007C0006AC4E8000203D20FF006129093E +S2190298FF48816900007C0006AC3943FFE53C0080007C005430D1 +S2190299147D6B0378916900007C0006AC4E8000207C631B794DFE +S2190299298200203803FFFF280000397C0803784D8100203D605C +S21902993E0003396B2FA05500103A7D4B002E3D20000339292F11 +S219029953A07D4A4A147D4903A64E8004203D20FF0061290010DC +S219029968816900007C0006AC3C0080007C0044307D6B0378912B +S21902997D6900007C0006AC4E8000203D20FF0061290200A009B8 +S21902999200007C0006AC60000080B00900007C0006AC4E8000F6 +S2190299A7203D20FF0061290200A00900007C0006AC6000004025 +S2190299BCB00900007C0006AC4E8000203D20FF0061290240A0F2 +S2190299D10900007C0006AC60000080B00900007C0006AC4E80AE +S2190299E600203D20FF0061290220A00900007C0006AC60000006 +S2190299FB80B00900007C0006AC4E8000203D20FF0061290220F3 +S219029A10A00900007C0006AC60000040B00900007C0006AC4E8E +S219029A258000203D20FF006129094C816900007C0006AC3943B6 +S219029A3AFFE53C0080007C0054307D6B0378916900007C000691 +S219029A4FAC4E8000207C8723787C631B794D8200203803FFFF28 +S219029A64280000397C0803784D8100203D600003396B30885547 +S219029A7900103A7D4B002E3D200003392930887D4A4A147D492C +S219029A8E03A64E8004203C0080007C0044303D60FF00616B000D +S219029AA318808B00007C0006AC7C8400787CEAFE707D493A7892 +S219029AB87D2950507D29FE707C8003787C0048787C8948387D83 +S219029ACD240378908B00007C0006AC4E8000207C8823787C6329 +S219029AE21B794D8200203803FFFF280000394D8100203D6000C0 +S219029AF703396B31705400103A7D4B002E3D2000033929317014 +S219029B0C7D4A4A147D4903A64E8004203D20FF0061290200A02F +S219029B218900007C0006AC5484063E38000000600080007C00C1 +S219029B3646307C8003785404043EB08900007C0006AC4E800057 +S219029B4B203D20FF0061290240A08900007C0006AC5484063E43 +S219029B6038000000600080007C0046307C8003785404043EB01E +S219029B758900007C0006AC4E8000203D20FF0061290220A089FE +S219029B8A00007C0006AC5484063E38000000600080007C00469B +S219029B9F307C8003785404043EB08900007C0006AC4E80002014 +S219029BB43D20FF0061290940800900007C0006AC540004DE5524 +S219029BC90B68247C005B78900900007C0006AC4E80002038604D +S219029BDE00014E800020386000014E8000209421FFF87C0802C3 +S219029BF3A69001000C4BFFC54D8001000C7C0803A6382100089C +S219029C084E8000203C00FE00600001007C0903A64E8004209403 +S219029C1D21FFF87C0802A69001000C4BFFFFE538600000800103 +S219029C32000C7C0803A6382100084E800020386000004E800028 +S219029C47209421FFE87C0802A693A1000C93C1001093E10014ED +S219029C5C9001001C7C7F1B78386000003BA00001380000002CD9 +S219029C711FFFFE41820040418100102C1FFFFD4182004C480048 +S219029C8600502C1FFFFF408200483D200003812943102C09008D +S219029C9B003BA9FFFF4181003C7D3D4B78408200343BA0FFFD83 +S219029CB04800002C3D200000392932003D6000039069001893EF +S219029CC5EB4310480000143BE00000480000083BFF000138000B +S219029CDA00012C000000418200803D2000003BC93200813E00AC +S219029CEF182C09000041820018806900008009001438800004EF +S219029D047C0803A64E8000213D2000043929A41857E028347C99 +S219029D19004A143D2000032C030000901E001893E94310813EED +S219029D2E00184182001C8069000080090014388000057C080358 +S219029D43A64E80002148000018806900008009001438800004CD +S219029D587C0803A64E8000217FA3EB788001001C7C0803A68301 +S219029D6DA1000C83C1001083E10014382100184E800020394089 +S219029D820001380000002C03FFFE41820040418100102C03FF5D +S219029D97FD4182004C480000502C03FFFF408200483D20000375 +S219029DAC812943142C0900003949FFFF4181003C7D2A4B78403D +S219029DC18200343940FFFD4800002C3D200000392932003D6059 +S219029DD6000390090014906B4314480000143860000048000033 +S219029DEB0838630001380000012C000000418200283D20000407 +S219029E003929A418546028343D6000007C004A14396B32003D8E +S219029E15200003900B0014906943147D4353784E8000204E80C8 +S219029E2A00204E8000209421FFF87C0802A69001000C3D6000FC +S219029E3F00392B320081290018800B32002C00001340820020D1 +S219029E5438000014900B32008069000080090014388000057C1A +S219029E690803A64E8000218001000C7C0803A6382100084E8054 +S219029E7E00209421FFE87C0802A693E100149001001C3D20004E +S219029E930039293200816900183800000090010008812B0000A0 +S219029EA8800B00187C651B787C8623787D234B78388100087C4A +S219029EBD0803A64E800021800100087C7F1B782C0000004182E3 +S219029ED200103D200003806947E8480001917FE3FB78800100BC +S219029EE71C7C0803A683E10014382100184E8000209421FFE8A3 +S219029EFC7C0802A693A1000C93C1001093E100149001001C380D +S219029F110000407C0903A63D2000003D60000339293200396B91 +S219029F269C40394000007D69512E394A00044200FFF83D200048 +S219029F3B043D6000033929A418396B9C4039000000550A2834D4 +S219029F5038080001390000087D0903A67D69512E394A00044216 +S219029F6500FFF87C0803782C0800024081FFDC3FA00000380001 +S219029F7A0013901D32003D6000033BBD3200396B3FB8917D0066 +S219029F8F043D200000392930003D600003913D0008396B9C0C01 +S219029FA4917D00403D20000339299C1C3D600003913D00103922 +S219029FB96B9BEC917D00483D20000339299C483D600003913D30 +S219029FCE0030396B9D803D400003917D0034394A9E283D20001E +S219029FE303915D002039299E2C913D001C3860FFFE4BFFFC550B +S219029FF83860FFFE4BFFFD8538000000901D0024901D0028907E +S21902A00D1D004C3D200003901D004439298874913D008C800144 +S21902A022001C7C0803A683A1000C83C1001083E1001438210084 +S21902A037184E8000207C842379418200243884FFFF7C0320AE7D +S21902A04C2C0000034082000C386000014E8000202C0400004004 +S21902A06182FFE4386000004E8000209421FFF87C0802A690018F +S21902A076000C7C631B793D2000033809A0A4418200088003001C +S21902A08B943D200000392932008129008C7C0303787D2803A6B6 +S21902A0A04E8000218001000C7C0803A6382100084E8000209418 +S21902A0B521FFF07C0802A693C1000893E1000C900100143D2075 +S21902A0CA0000800932007C7F1B782C000014396932007C9E23E0 +S21902A0DF783860FFFF4082001C812B001838800006806900000E +S21902A0F4800900147C0803A64E8000217C1F18004082001C7F87 +S21902A109E3FB787FC4F3784BFFFD717C601B797C030378408252 +S21902A11E00287FE3FB787FC4F3784BFFBF797C601B787C09FE06 +S21902A133707D2302787C6348507C63FE707C031838800100145E +S21902A1487C0803A683C1000883E1000C382100104E8000202893 +S21902A15D0500037C691B78408100107C801B78700B00034182C5 +S21902A17200302C05000038A5FFFF4D820020880400002C0500E9 +S21902A1870098090000388400013929000138A5FFFF4082FFE877 +S21902A19C4E8000202805000F7C6B1B784081003880040000384E +S21902A1B1A5FFF0900B0000852400042805000F952B000484042E +S21902A1C60004940B000485240004952B000438840004396B0001 +S21902A1DB044181FFD028050003408100208004000038A5FFFC66 +S21902A1F028050003900B000038840004396B00044181FFE82C4B +S21902A2050500007D695B7838A5FFFF4D820020880400002C05F8 +S21902A21A000098090000388400013929000138A5FFFF4082FFCB +S21902A22FE84E800020280500037C691B784081000C70600003F5 +S21902A244418200282C05000038A5FFFF4D8200202C050000984F +S21902A2598900003929000138A5FFFF4082FFF04E8000205484AB +S21902A26E063E5480402E7C0023785409801E7C004B787C6B1BFB +S21902A283782805000F40810024900B0000940B000438A5FFF01C +S21902A298940B00042805000F940B0004396B00044181FFE428B3 +S21902A2AD0500034081001838A5FFFC28050003900B0000396B6D +S21902A2C200044181FFF02C0500007D695B784D8200207CA903CA +S21902A2D7A698890000392900014200FFF84E8000209421FFA8BE +S21902A2EC7C631B79394100087D4753783900000040820014388B +S21902A3010000309801000839410009480000247C032B967D20A3 +S21902A31629D67D2918507D6648AE7C030379996A0000394A00C4 +S21902A32B014082FFE47C0A3800418200287D0343787CE93B7874 +S21902A3408C0AFFFF386300017C0A48009804000038840001406A +S21902A35582FFEC7C681B7838000000980400007D0343783821A0 +S21902A36A00584E8000209421FF987C0802A67D80002692410023 +S21902A37F30926100349281003892A1003C92C1004092E1004467 +S21902A394930100489321004C9341005093610054938100589366 +S21902A3A9A1005C93C1006093E100649001006C9181002C7C99BF +S21902A3BE23788BB900003AE100082C1D00007EF2BB787C7B1B83 +S21902A3D3787CB82B783BC000003AA000003B390001418204808E +S21902A3E82C1D00254082043C8BB900003B3900012C1D002D3A80 +S21902A3FDC000003BE00000408200108BB900003B3900013AC0E4 +S21902A41200012C1D0030408200148BB900003B8000013B39006A +S21902A42701480000083B800000381DFFD0280000094181003CBA +S21902A43C7FA3EB787F24CB787FE9FB781D29000A3929FFD07DC0 +S21902A451291A1488640000388400013803FFD0280000094081F3 +S21902A466FFE47D3F4B787C9923787C7D1B782C1D002E40820003 +S21902A47B3C8BB900003B390001381DFFD0280000093B9C0001A3 +S21902A490418100247F24CB7888640000388400013803FFD02809 +S21902A4A50000094081FFF07C7D1B787C9923782C1D006C3A8037 +S21902A4BA00004082000C8BB900003B390001381DFFA8280000DB +S21902A4CF203A790001418101F83D600003396B32905400103A3E +S21902A4E47D4B002E3D200003392932907D4A4A147D4903A64E00 +S21902A4F9800420386000307F6803A63B8000013BE000084E809E +S21902A50E0021386000787F6803A64E80002189780000556906BC +S21902A5233E38090001280000084181001C801800085529103A26 +S21902A538396B00017C604A149978000048000030280900074126 +S21902A54D81001C80780004380000083923000498180000913840 +S21902A5620004480000108078000438030004901800042C1D0051 +S21902A577648063000041820028418100102C1D00584182004C14 +S21902A58C480000602C1D0070418200342C1D00784182002C4863 +S21902A5A100004C2C0300004080000C3A80002D7C6300D03CC0C5 +S21902A5B6000338C632583881000838A0000A480000203CC000F7 +S21902A5CB0338C632644800000C3CC0000338C632783881000821 +S21902A5E038A000104BFFFD057C751B787E579378480000EC890A +S21902A5F57800005569063E38090001280000084181001C8018E8 +S21902A60A00085529103A396B00017C604A14997800004800002C +S21902A61F30280900074181001C8078000438000008392300043D +S21902A6349818000091380004480000108078000438030004906A +S21902A64918000482E300007EE3BB78480003C97C751B78480000 +S21902A65E0080897800005569063E380900012800000841810029 +S21902A6731C801800085529103A396B00017D404A149978000076 +S21902A68848000030280900074181001C815800043800000839D2 +S21902A69D2A000498180000913800044800001081580004380A7F +S21902A6B2000490180004886A00037F6803A63BDE00014E80006F +S21902A6C7214800018C3860003F7F6803A63BDE00014E80002111 +S21902A6DC7F55F8503134FFFF7D294910381AFFFF7C0048782F29 +S21902A6F19C00007F4948387D3A03782C140000419E00243BA019 +S21902A7060030418200207E83A3787F6803A63BDE00013A8000A4 +S21902A71B004E800021480000083BA000202C1400002E16000064 +S21902A7303AD5FFFF7F8000264092003C7F40D3782C0000003B5C +S21902A7455AFFFF4081002C7F5FD3787FA3EB787F6803A63BDE5C +S21902A75A00014E8000217FE0FB782C0000003BFFFFFF4181FFFC +S21902A76FE47FFAFB787F880120418200147E83A3787F6803A653 +S21902A7843BDE00014E8000217EA0AB782C0000007ED5B3784085 +S21902A7998100547EBDAB787EFCBB788BFC00007F6803A67FE34B +S21902A7AEFB783B9C00013BDE00014E8000212C1F000A40820024 +S21902A7C3143860000D7F6803A63BDE00014E8000217FA0EB78A6 +S21902A7D82C0000003BBDFFFF4181FFC47F97E3787FB5EB784175 +S21902A7ED9200687F40D3782C0000003B5AFFFF408100587F5F96 +S21902A802D378386000207F6803A63BDE00014E8000217FE0FB44 +S21902A817782C0000003BFFFFFF4181FFE4480000307FA3EB78A7 +S21902A82C7F6803A63BDE00013A7900014E8000212C1D000A4030 +S21902A8418200143860000D7F6803A63BDE00014E8000218BB9E3 +S21902A85600007E799B782C1D00004082FB887FC3F37880010020 +S21902A86B6C8181002C7C0803A6824100308261003482810038C5 +S21902A88082A1003C82C1004082E10044830100488321004C83F4 +S21902A895410050836100548381005883A1005C83C1006083E1FA +S21902A8AA00647D808120382100684E8000203D20000381694750 +S21902A8BFEC38000000986B0000396B0001916947EC980B0000E1 +S21902A8D44E8000209421FF707C0802A693A1008493C100889303 +S21902A8E9E1008C900100943D60000390A10010906B47EC38A1D9 +S21902A8FE00083BA1009838000002396000003C60000390A1001F +S21902A913789081000C90C1001490E100189101001C9121002025 +S21902A92891410024980100709961007193A100743863A8B838CE +S21902A93DA100704BFFFA31800100947C0803A683A1008483C14A +S21902A952008883E1008C382100904E8000209421FF707C0802F0 +S21902A967A693A1008493C1008893E1008C9001009490A1001034 +S21902A97C9081000C7C641B789061000838A100083BA1009838A9 +S21902A991000001396000003C60000390A1007890C1001490E1F2 +S21902A9A600189101001C91210020914100249801007099610004 +S21902A9BB7193A100743863AC1438A100704BFFF9A980010094C2 +S21902A9D07C0803A683A1008483C1008883E1008C382100904EA3 +S21902A9E58000209421FFF87C0802A69001000C7C601B787C85D1 +S21902A9FA23783C6000033863AC147C0403784BFFF96980010084 +S21902AA0F0C7C0803A6382100084E8000208803000039200000BF +S21902AA244800000C88030000392900012C0000003863000140CC +S21902AA3982FFF07D234B784E8000207C691B78480000102C0340 +S21902AA4E0000386000004D82002088690000880400003884002C +S21902AA63017C030000392900014182FFE07C6018504E80002020 +S21902AA78880400007C691B784800001098030000880400003807 +S21902AA8D6300012C000000388400014082FFEC380000009803E0 +S21902AAA200007D234B784E8000207C6B1B78480000102C030046 +S21902AAB700386000004D820020886B0000396B00013803FFBF6B +S21902AACC280000194181000C380300205403063E892400003884 +S21902AAE18400013809FFBF280000194181000C38090020540908 +S21902AAF6063E7D204B787C0300004182FFB47C6018504E800099 +S21902AB0B207CA02B797C691B787C0903A640820014386000003A +S21902AB204E8000207C6018504E80002088690000880400003844 +S21902AB358400017C030000392900014082FFE42C030000418206 +S21902AB4A00084200FFE0386000004E8000207CA02B797C6B1B7E +S21902AB5F787C0903A640820018386000004E8000207C60185090 +S21902AB744E80002042400050886B0000396B00013803FFBF284C +S21902AB890000194181000C380300205403063E8924000038846A +S21902AB9E00013809FFBF280000194181000C38090020540906C8 +S21902ABB33E7D204B787C0300004082FFB42C0300004082FFB450 +S21902ABC8386000004E8000204800002C89230000880400003807 +S21902ABDD8400017C09000038630001418200148803FFFF88646A +S21902ABF2FFFF7C6300504E8000207CA02B782C00000038A5FF65 +S21902AC07FF4082FFCC386000004E8000209421FFE87C0802A657 +S21902AC1C9381000893A1000C93C1001093E100149001001C3DEA +S21902AC31200003800947607C7D1B782C000000408200743D2069 +S21902AC46000039293200800900343860FFFF7C0803A67D3E4BD8 +S21902AC5B783BE000004E8000217C7C1B78813E00347FE3FB7808 +S21902AC707D2803A64E800021813E00147FA4EB788069000080C9 +S21902AC8509000C7C0803A64E80002137FF00014081FFD43D205A +S21902AC9A000039293200800900347F83E3787C0803A64E8000F5 +S21902ACAF21480000483D20000039293200816900142C0B0000B2 +S21902ACC44182001C806B0000800B000C7FA4EB787C0803A64E12 +S21902ACD98000214800001C816900187FA4EB78806B0000800B5C +S21902ACEE000C7C0803A64E8000218001001C7C0803A683810054 +S21902AD030883A1000C83C1001083E10014382100184E800020D1 +S21902AD189421FFF07C0802A693E1000C900100143D2000003994 +S21902AD2D293200816900147C7F1B782C0B000040820008816938 +S21902AD420018806B0000800B00107C0803A64E800021987F0024 +S21902AD5700800100147C0803A683E1000C382100104E80002057 +S21902AD6C9421FFE07C0802A69361000C9381001093A10014930C +S21902AD81C1001893E1001C900100243D200003800947607C7D0F +S21902AD961B782C000000408200883D200000392932008009001E +S21902ADAB343860FFFF7C0803A67D3C4B783BE000004E8000210F +S21902ADC07C7B1B78813C00347FE3FB787D2803A64E8000218169 +S21902ADD57C00147FA4EB78806B0000800B001C7C0803A64E80BF +S21902ADEA00217C7E1B7941820010881D00002C00000040820038 +S21902ADFF4C37FF00014081FFC03D200000392932008009003487 +S21902AE147F63DB787C0803A64E800021480000643D200000398F +S21902AE29293200816900142C0B000041820034806B0000800B10 +S21902AE3E001C7FA4EB7848000034817C00307FE3FB787D6803F0 +S21902AE53A63D20000338000001900947604E800021480000200D +S21902AE68816900187FA4EB78806B0000800B001C7C0803A64E39 +S21902AE7D8000217C7E1B787FC3F378800100247C0803A6836128 +S21902AE92000C8381001083A1001483C1001883E1001C38210017 +S21902AEA7204E8000209421FFE87C0802A69381000893A1000C5D +S21902AEBC93C1001093E100149001001C3D200003800947607CD5 +S21902AED17D1B782C000000408200803D2000003929320080096D +S21902AEE600343860FFFF7C0803A67D3E4B783BE000004E8000F2 +S21902AEFB217C7C1B78813E00347FE3FB787D2803A64E8000218A +S21902AF10813E00142C0900004182001C80690000800900143880 +S21902AF258000077FA5EB787C0803A64E80002137FF00014081EE +S21902AF3AFFC83D20000039293200800900347F83E3787C0803A2 +S21902AF4FA64E800021480000303D20000039293200812900142A +S21902AF642C0900004182001C8069000080090014388000077FF9 +S21902AF79A5EB787C0803A64E8000213D200000392932008129FD +S21902AF8E00182C0900004182001C80690000800900147FA5EBE6 +S21902AFA378388000077C0803A64E8000218001001C7C0803A675 +S21902AFB88381000883A1000C83C1001083E10014382100184EB6 +S21902AFCD8000209421FFD07C0802A693010010932100149341D8 +S21902AFE200189361001C9381002093A1002493C1002893E100AF +S21902AFF72C900100347C7D1B787CBE2B787FBFEB783B600000A8 +S21902B00C3F2000033F8000033B400000813947882C090000418A +S21902B021820020896900002C0B00004182001438090001996135 +S21902B036000890194788480000647FC0FE707C1E005054000FD8 +S21902B04BFE7FE9EA78216900007D2B49147C0B48394182003C8B +S21902B060386000324BFFFE49480000083BDEFFCE2C1E000040B9 +S21902B075810014386100084BFFFCF17C7B1B794182FFE82C1BD6 +S21902B08A0000408200143860FFFF48000180386100084BFFFC8E +S21902B09F7D880100089B5F00007C0303785400063E2C00000DC2 +S21902B0B44182007C418100282C000008418200D4418100102C8E +S21902B0C900000341820038480001142C00000A41820058480077 +S21902B0DE01082C00002B418200E8418100102C00002441820066 +S21902B0F3DC480000F02C00007F41820098480000E47C1FE80078 +S21902B108408200183C600003386333184BFFF84D3860FFFE4860 +S21902B11D0000F8987F00003BFF00013F000003480000DC8921BC +S21902B13200083F0000032C09000A40820010881843182C00007F +S21902B1470D418200182C09000D40820018881843182C00000AB7 +S21902B15C4082000C9B410008480000A4801C47802C0000004169 +S21902B1718200143860000D4BFFFA9D3860000A4BFFFA958801A2 +S21902B18600083860000198184318480000847C1FE8003F000073 +S21902B19B034182006C801C47802C0000004182001C3860000858 +S21902B1B04BFFFA65386000204BFFFA5D386000084BFFFA553B0D +S21902B1C5FFFFFF480000407C1FE800408200145463063E4BFF4B +S21902B1DAD1453860000048000034801C47802C000000418200DD +S21902B1EF0C886100084BFFFA21880100083F000003981F000058 +S21902B2043BFF000188010008981843184BFFFE08800100347CD6 +S21902B2190803A68301001083210014834100188361001C83813C +S21902B22E002083A1002483C1002883E1002C382100304E800049 +S21902B243209421FFC07C0802A6924100089261000C9281001032 +S21902B25892A1001492C1001892E1001C9301002093210024937A +S21902B26D4100289361002C9381003093A1003493C1003893E190 +S21902B282003C900100447C9D23787C7C1B787D3DE0107D2949C7 +S21902B297107D294BB87C1CE8507C0048787FA948387D3D0379F8 +S21902B2AC7CB62B78408101403E4000032C1600004182001438DD +S21902B2C172331C7C96E0504BFFF699480000103872331C7F8441 +S21902B2D6E3784BFFF6897FBEEB787F9DE3783BE000003E800048 +S21902B2EB033EA000033E6000033B5EFFF03AFD00103F000003B1 +S21902B3003F6000033F2000037C1FF000408000147C9DF8AE38D7 +S21902B3157833284BFFF6494800000C387933304BFFF63D7FFC60 +S21902B32AFE707C1CF8507C000E707C0002147C00F8502C00003D +S21902B33F014082000C387B33344BFFF61957801F7E7C1F02148B +S21902B3547C001E70540018387C00F8502C0000074082000C3832 +S21902B3697B33344BFFF5F53BFF00012C1F000F4081FF907FBC92 +S21902B37EEB787FDDF378387433384BFFF5D97EBEAB783BE000E0 +S21902B393007C1FE8004080002C7C9CF8AE3804FFE02000005ED8 +S21902B3A87C0001107C0003B87C0900F87C8000387129002E7CD0 +S21902B3BD044B784800000838800020387E333C4BFFF5953BFF52 +S21902B3D200012C1F000F4081FFBC387333404BFFF5817F5DD3FB +S21902B3E7797EFCBB784181FECC800100447C0803A682410008DB +S21902B3FC8261000C8281001082A1001482C1001882E1001C839F +S21902B41101002083210024834100288361002C8381003083A1E2 +S21902B426003483C1003883E1003C382100404E8000209421FF7F +S21902B43BF87C0802A69001000C38A000004BFFFDFD8001000C8B +S21902B4507C0803A6382100084E8000209421FF607C0802A69391 +S21902B46561008C9381009093A1009493C1009893E1009C9001E5 +S21902B47A00A49081000C388100A83FA000033B800000380000BF +S21902B48F013961000890810074837D47889061000890A1001070 +S21902B4A490C1001490E100189101001C91210020914100249890 +S21902B4B9010070916100789B810071388100704BFFF5213C60EA +S21902B4CE0003386333444BFFF48D939D478838610080388000B2 +S21902B4E30838A000004BFFFAE988610080937D478868600059D7 +S21902B4F8212000007C09011468630079212300007C6919147C47 +S21902B50D630378800100A47C0803A68361008C8381009083A1CA +S21902B522009483C1009883E1009C382100A04E8000209421FF02 +S21902B537E87C0802A69381000893A1000C93C1001093E100149C +S21902B54C9001001C7C9C23787CBD2B787C7F1B783BC0000048D6 +S21902B5610000C857C0103A7FFD012E881F00003BDE00014800F1 +S21902B5760098881F00002C0000224082008457C0103A7D60EABE +S21902B58B14812BFFFC7C09F8004082000C3BFF000193EBFFFCEA +S21902B5A0893F0000692000227C0000D07D2900D055290FFE547B +S21902B5B5000FFE7D2B00394182002C7FE3FB788D23000169208E +S21902B5CA00227C0000D07D2900D055290FFE54000FFE7D2B00ED +S21902B5DF394082FFE47C7F1B78881F00002C0000004082002C23 +S21902B5F43C6000033863335C4BFFF365480000083BFF000188BD +S21902B6091F00002C0000004182004C2C0000204082FF60380026 +S21902B61E0000981F00003BFF0001881F00002C00000041820088 +S21902B6332C2C000020408200187FE3FB788C0300012C000020F8 +S21902B6484182FFF87C7F1B78881F00002C0000004082FF0C3CC2 +S21902B65D6000033C80000380BD000093DC000038634600388466 +S21902B6724670480000258001001C7C0803A68381000883A1009F +S21902B6870C83C1001083E10014382100184E8000209421FFD8E4 +S21902B69C7C0802A6930100089321000C9341001093610014938B +S21902B6B181001893A1001C93C1002093E100249001002C7C7FD0 +S21902B6C61B787CBC2B787C9A23787F83E3784BFFF3497FFDFBEF +S21902B6DB787C1DD0007C7B1B78418200C0809D00007F83E378EB +S21902B6F07F65DB784BFFF4652C0300004082009C807D00004B8F +S21902B705FFF3197C03D800408100847C1FD0003BC00001418257 +S21902B71A00603F0000033F2000037C1DF80041820044809F0058 +S21902B72F007F83E3787F65DB784BFFF4212C0300004082002CEE +S21902B7442C1E00004182001880BD0000387833707F84E3784B8B +S21902B759FFF2093BC00000809F0000387933984BFFF1F93BFFD6 +S21902B76E00107C1FD0004082FFB02C1E0000408200143C600017 +S21902B783033863339C4BFFF1D9480000187FA3EB7848000014E8 +S21902B7983BBD00107C1DD0004082FF48386000008001002C7C5A +S21902B7AD0803A6830100088321000C83410010836100148381C3 +S21902B7C2001883A1001C83C1002083E10024382100284E8000D8 +S21902B7D7209421FFE87C0802A69381000893A1000C93C10010AE +S21902B7EC93E100149001001C7C601B783C6000037C9D23787CCE +S21902B8011F03787CBE2B78386333A04BFFF1557C1FE800418270 +S21902B81600283F80000380BF000080DF0008387C33A87FC4F3C1 +S21902B82B784BFFF1353BFF00107C1FE8004082FFE48001001C0A +S21902B8407C0803A68381000883A1000C83C1001083E10014387F +S21902B8552100184E800020912300149883000090A3000490C343 +S21902B86A000890E3000C910300104E8000209421FFB07C0802BF +S21902B87FA691C1000891E1000C920100109221001492410018DA +S21902B8949261001C9281002092A1002492C1002892E1002C9352 +S21902B8A901003093210034934100389361003C9381004093A1A6 +S21902B8BE004493C1004893E1004C900100547D344B787D16439F +S21902B8D3783016FFFF7D20B1106A800001216000007C0B011437 +S21902B8E87D2B00397C701B787C9823787CD133787CF53B787D9C +S21902B8FD5353783B4000013A40000041820008925600007C12DA +S21902B912A8007E3F8B78408000507EA903A67FEBFB78390000BB +S21902B92700812B00102C0900004182000891090000814B0004DE +S21902B93C2C0A000040820020800B00082C0000004182000C2C1D +S21902B9510000024082000C812B000C91490000396B001842007A +S21902B966FFC47CBD2B787C1D8000408002043DC000033DE0002A +S21902B97B0357BE103A7C9EC02E880400002C00002D4082014C52 +S21902B990396000007C0BA8008AE400017E3F8B78392000003B10 +S21902B9A57D0001408001147F9EC2143B200001881F00007C17AA +S21902B9BA0000408200F0813F00102C090000418200208009004E +S21902B9CF002C00000041820014809F0014386E33B44BFFEF81DF +S21902B9E43B400000801F00042C00000041820080813C00008875 +S21902B9F90900023BC900032C00003D4182000C83DC00043BBD8D +S21902BA0E0001801F00082C000000418200102C00000141820085 +S21902BA233C48000040809F000C7FC3F37838A0000038C000009B +S21902BA38480001992C0300004082002480BF00147FC4F37838C2 +S21902BA4D6F33D44BFFEF113B4000004800000C813F000C93C926 +S21902BA620000813F00103B7D000148000034801F00082C0000F0 +S21902BA7700418200102C0000024182001C48000020817F000C5F +S21902BA8C812B000039290001912B00004800000C813F000C9320 +S21902BAA12900003960000148000014392900017C09A8003BFFA0 +S21902BAB600184180FEFC2C0B0000408200A83C60000338633393 +S21902BACBFC7EE4BB784BFFEE91480000902C16000041820078B0 +S21902BAE02C12000041820014386E33B47E649B784BFFEE713BCF +S21902BAF54000002C140000418200102C1400014182003C48005A +S21902BB0A00407C7EC02E7EC4B37838A0000038C0000048000072 +S21902BB1FB52C030000408200247C9EC02E386F33D47E659B7894 +S21902BB344BFFEE2D3B4000004800000C7C1EC02E901600003B58 +S21902BB497D00013A400001480000183C6000033863341C3B7D45 +S21902BB5E00014BFFEE013B4000007F7DDB787C1D80004180FEEF +S21902BB730C7F43D378800100547C0803A681C1000881E1000CE3 +S21902BB888201001082210014824100188261001C8281002082D8 +S21902BB9DA1002482C1002882E1002C830100308321003483417D +S21902BBB200388361003C8381004083A1004483C1004883E10083 +S21902BBC74C382100504E8000208803000038E000012C0000208F +S21902BBDC3900000A39800000408200108C0300012C0000204162 +S21902BBF182FFF8880300002C0000004182012C2C070000418222 +S21902BC060038880300002C0000304082002C892300013809FF28 +S21902BC1BBF280000194181000C380900205409063E2C09007890 +S21902BC304082000C39000010386300028943000038E000003927 +S21902BC452AFFD0380AFFBF21290009392000007D29491420001B +S21902BC5A0005380000007C0001147D2B037938630001392000E7 +S21902BC6F0040820010380AFF9F280000054181000839200001B6 +S21902BC842C09000041820068392AFFD05520063E2800000941E7 +S21902BC9981000C7D2B4B7848000030380AFF9F28000005418150 +S21902BCAE000C396AFFA94800001C380AFFBF200000057C00011D +S21902BCC3107C0003B8392AFFC97C0B48387C0B40004080001C49 +S21902BCD8880300007D2C41D62C0000007D895A144082FF184844 +S21902BCED00003C2C0600004182002C88060000480000088C066E +S21902BD0200012C000000418200187C0A00004082FFF088060058 +S21902BD17002C0000004082000C386000004E8000202C0500005F +S21902BD2C918400004182000890650000386000014E8000208817 +S21902BD410300002C000020408200108C0300012C000020418226 +S21902BD56FFF88863000068690074200900007D204914686000BF +S21902BD6B54214000007C0A01147D2B037941820010380000013C +S21902BD80900400004800003068690046200900007D20491468F9 +S21902BD95600066214000007C0A01147C0A4B794082000C386020 +S21902BDAA00004E80002091640000386000014E8000209421FF5F +S21902BDBFE07C0802A69361000C9381001093A1001493C1001884 +S21902BDD493E1001C900100243D2000043969A4A4800BFFD47CE9 +S21902BDE99C23782C0000007CDB33784182000C3800000A480080 +S21902BDFE012838000001B009A4A488030000396B00022C000069 +S21902BE13002F85000041820018980B00008C030001396B0001AC +S21902BE282C0000004082FFF038000000980B0000396B00014061 +S21902BE3D9E00103D200003386934504800001C2C05000141825D +S21902BE52000C3800000A480000CC3D2000033869345C88030056 +S21902BE67002C00000041820018980B00008C030001396B0001E0 +S21902BE7C2C0000004082FFF03D2000043BA9A48C380000009888 +S21902BE910B00007FA3EB783880000038A0000C4BFFE3953D600A +S21902BEA60003812B43203BFDFFEC38000001B13F0018B01F003B +S21902BEBB1AA01C0004392900012C0000003BC00000912B4320E8 +S21902BED093DF00144082000C38000045B01C00047F85E378381E +S21902BEE57D0018388002057FA6EB7848003CAD2C030000418044 +S21902BEFA002838000001901DFFEC3920FFFF93DF0004913F0096 +S21902BF0F1093DF000C93DF0008386000004800001038000009DD +S21902BF24901B00003860FFFF800100247C0803A68361000C837B +S21902BF3981001083A1001483C1001883E1001C382100204E8000 +S21902BF4E00203D200004380000009009A478386000004E800003 +S21902BF63209421FFC87C0802A692C1001092E100149301001864 +S21902BF789321001C93410020936100249381002893A1002C93A2 +S21902BF8DC1003093E100349001003C7C9923783B6000007C1B50 +S21902BFA2C8003D2000043BC9A4A47C7A1B787CBC2B78408001E9 +S21902BFB7783BFEFFD43B0100083AE000043AC00009813F000CB9 +S21902BFCC2C0900004081005C7C1BC8507F890000809F02347F7C +S21902BFE143D3784FFEE3827FA0002657BD07FE7FBD00D07C001E +S21902BFF6E8787D3DE8387FBD03787FA5EB784BFFE159801F0292 +S21902C00B34813F000C7C00EA147D3D4850901F0234913F000C8C +S21902C0207F7BEA147F5AEA14480000FC801F0010280001FF40DA +S21902C0358100F838000001900100083920000091380004387FC7 +S21902C04A002C3880020538BF002038DF00147F07C37848003C68 +S21902C05F6D7C631B794080002C813F0004392900012C09000F8E +S21902C074913F000441810010801F00082C0000004082004438F9 +S21902C0890000084800008CA81E00002C00000340820064813FE4 +S21902C09E0008A97E0002392900017C0B48004082001C3863FFAB +S21902C0B3FC381E0004907F000C901F0234917F0008907F0010E4 +S21902C0C8A01F000AB2FE0000B01E0002387F002C38800004383C +S21902C0DDBF002038DF001448003AB92C0300004080003892DC6D +S21902C0F200003860FFFF480000382C00000540820014A81E004F +S21902C107023860FFFF901C0000480000203800000B901C000081 +S21902C11C3860FFFF480000107C1BC8004180FEA07F63DB7880A6 +S21902C13101003C7C0803A682C1001082E100148301001883217E +S21902C146001C83410020836100248381002883A1002C83C10015 +S21902C15B3083E10034382100384E8000203803FFFF2800000B15 +S21902C1703D200003386934644D8100203D600003396B358054DF +S21902C18500103A7D4B002E3D200003392935807D4A4A147D49FC +S21902C19A03A64E8004203C600003386334744E8000203C600082 +S21902C1AF03386334844E8000203C600003386334984E8000203C +S21902C1C43C600003386334BC4E8000203C600003386334D44EB7 +S21902C1D98000203C600003386334E84E8000203C60000338632C +S21902C1EE34FC4E8000203C6000033863350C4E8000203C600012 +S21902C20303386335204E8000203C6000033863353C4E800020A5 +S21902C2183C600003386335504E8000203C600003386335644E3C +S21902C22D8000209421FFE87C0802A693A1000C93C1001093E175 +S21902C24200149001001C3D200003800943287C9F23782C0000E9 +S21902C257004082007C48004C153D2000043869A6B08003000405 +S21902C26C2C00000540820018A00300162C00000040820050486C +S21902C281004CE9480000482C00000040820014480008D9380079 +S21902C296000A981F0000480000603FA00004389DACF438A000F3 +S21902C2AB8048004D512C0300003BBDACF43D2000033D6000034A +S21902C2C093A94808906B43284082000C38600000480000303D55 +S21902C2D5400003816A48083D000003880B0000396B0001981FA0 +S21902C2EA000081284328916A48083929FFFF91284328386000BD +S21902C2FF018001001C7C0803A683A1000C83C1001083E100145C +S21902C314382100184E8000209421FFE07C0802A693A100149313 +S21902C329C1001893E1001C900100243D2000003BA932007C7E6D +S21902C33E1B783BE000644800002837FFFFFF4082001048000013 +S21902C353513BE0006448000014813D0048386000647D2803A652 +S21902C3684E8000217FC3F378388100084BFFFEBD2C03000041E7 +S21902C37D82FFCC88610008800100247C0803A683A1001483C118 +S21902C392001883E1001C382100204E8000209421FFE87C08026E +S21902C3A7A693A1000C93C1001093E100149001001C3D2000049A +S21902C3BC3BA9AD744800003080BE432C7FE3FB787FA4EB784898 +S21902C3D1004D417C631B7940810014801E432C7FBD1A147C0384 +S21902C3E60050901E432C48004A853FC00003801E432C2C00007C +S21902C3FB00418200303D2000043BE9A6B0801F00042C00000584 +S21902C4104082000C7FE3FB7848004B51801F00042C000000407A +S21902C42582FFA0480007413D2000003BC93200801E00443D2078 +S21902C43A00042C0000003929AD743D6000033D4000033BE000F8 +S21902C44F00912B480C93EA432C41820010386000004BFFDC0D37 +S21902C46493FE00448001001C7C0803A683A1000C83C100108316 +S21902C479E10014382100184E8000209421FFF07C0802A693E10F +S21902C48E000C900100143D600003812B480C2C040024988900CC +S21902C4A30039290001912B480C40820010380000013D2000039F +S21902C4B8900947F03FE00003801F47F0688B0023212B00007DC1 +S21902C4CD6959143140FFFF7D2A01107D2058394182001C3D40CC +S21902C4E20003392000013D60000338000000912A47F4900B4731 +S21902C4F7F83D600003812B432C392900012C090100912B432CB2 +S21902C50C4182002C3D200003800947F42C000000418200283DAC +S21902C521600003812B47F8392900012C090003912B47F8408258 +S21902C53600104BFFFE6938000000901F47F0800100147C0803EE +S21902C54BA683E1000C382100104E8000209421FFE87C0802A69F +S21902C56093A1000C93C1001093E100149001001C4800055D7CC0 +S21902C5757D1B783C6000033C80000338A000EC38843678386373 +S21902C58A36704BFFE3D57FA3EB78480005A58001001C7C080352 +S21902C59FA683A1000C83C1001083E10014382100184E8000207F +S21902C5B49421FFE87C0802A693A1000C93C1001093E1001490E7 +S21902C5C901001C480005017C7D1B783C6000033C80000338A029 +S21902C5DE00FE38843688386336704BFFE3797FA3EB7848000510 +S21902C5F3498001001C7C0803A683A1000C83C1001083E100141D +S21902C608382100184E8000209421FFE87C0802A6938100089340 +S21902C61DA1000C93C1001093E100149001001C7C7D1B787C9E15 +S21902C63223784BFFFD6D3D200003800943243D6000001FE000B1 +S21902C6470A3B8B320048000014813C0048386000647D2803A62A +S21902C65C4E8000217FA3EB787FC4F3784BFFFBC97C631B7940DF +S21902C6718200102C1F00003BFFFFFF4082FFD48001001C7C08E2 +S21902C68603A68381000883A1000C83C1001083E100143821008E +S21902C69B184E8000209421FF787C0802A693C1008093E1008459 +S21902C6B09001008C7C8023782C00000590A1001090C100149053 +S21902C6C5E100189101001C91210020914100249081000C3BC0D2 +S21902C6DA00004182002C28000005418100102C00000441820162 +S21902C6EF94480003482C000006418203082C0000074182030C03 +S21902C704480003343FE00003801F43303D6000032C0000003961 +S21902C719200001912B433440820014480011C1907F43302C030F +S21902C72E000041820308811F43303808FFFF28000039418102AB +S21902C743F83D600003396B36985400103A7D4B002E3D200003DC +S21902C758392936987D4A4A147D4903A64E8004203D20FF006152 +S21902C76D290014816900007C0006AC3948FFFF3C0080007C00A4 +S21902C78254307D6B0378916900007C0006AC480002A83D20FF3E +S21902C7970061290200A00900007C0006AC60000008B009000002 +S21902C7AC7C0006AC480002883D20FF0061290200A00900007C64 +S21902C7C10006AC60000004B00900007C0006AC480002683D2050 +S21902C7D6FF0061290240A00900007C0006AC60000004B0090088 +S21902C7EB007C0006AC480002483D20FF0061290220A0090000C1 +S21902C8007C0006AC60000008B00900007C0006AC480002283DF0 +S21902C81520FF0061290220A00900007C0006AC60000004B00948 +S21902C82A00007C0006AC480002083D20FF0061290940800900BA +S21902C83F007C0006AC60000080900900007C0006AC480001E8D7 +S21902C8543D20FF0061290948816900007C0006AC3948FFE53CD8 +S21902C8690080007C0054307D6B0378916900007C0006AC480060 +S21902C87E01BC3D60000383CB433438000000900B43343D2000D5 +S21902C89303814943302C0A00004182019C7D4853783808FFFFE5 +S21902C8A8280000394181018C3D600003396B37805400103A7DAE +S21902C8BD4B002E3D200003392937807D4A4A147D4903A64E800B +S21902C8D204203D20FF0061290014816900007C0006AC3948FF94 +S21902C8E7FF3C0080007C0054307D6B0078916900007C0006ACF2 +S21902C8FC4800013C3D20FF0061290200A00900007C0006AC706C +S21902C91100FFF75400043EB00900007C0006AC480001183D20D9 +S21902C926FF0061290200A00900007C0006AC7000FFFB540004D1 +S21902C93B3EB00900007C0006AC480000F43D20FF006129024057 +S21902C950A00900007C0006AC7000FFFB5400043EB00900007CBF +S21902C9650006AC480000D03D20FF0061290220A00900007C00BF +S21902C97A06AC7000FFF75400043EB00900007C0006AC480000C4 +S21902C98FAC3D20FF0061290220A00900007C0006AC7000FFFB97 +S21902C9A45400043EB00900007C0006AC480000883D20FF00616D +S21902C9B9290940800900007C0006AC5400066E900900007C005C +S21902C9CE06AC480000683D20FF0061290948816900007C000648 +S21902C9E3AC3948FFE53C0080007C0054307D6B00789169000011 +S21902C9F87C0006AC4800003C3D20000383C943304800003039A1 +S21902CA0D61000838010090392000039BC10071992100709001F7 +S21902CA220074916100783D200003800B000883C9432490094398 +S21902CA37247FC3F3788001008C7C0803A683C1008083E100842C +S21902CA4C382100884E8000209421FFE07C0802A693A100149364 +S21902CA61C1001893E1001C900100247C7D1B787C9F23787CA33A +S21902CA762B784BFFCEAD38000000901F00007FA3EB7838810017 +S21902CA8B084BFFF7A52C03000041820018880100082C000003D7 +S21902CAA04082000C38000001901F000038600001800100247C0A +S21902CAB50803A683A1001483C1001883E1001C382100204E8059 +S21902CACA00209421FFE87C0802A69381000893A1000C93C100B8 +S21902CADF1093E100149001001C3FA000003BBD3200813D0034FB +S21902CAF43860FFFF7D2803A64E800021801D00347C7C1B7838BF +S21902CB096000007C0803A64E8000217F83E3788001001C7C0816 +S21902CB1E03A68381000883A1000C83C1001083E10014382100F1 +S21902CB33184E8000209421FFF87C0802A69001000C3D2000000E +S21902CB4839293200800900347C0803A64E8000218001000C7C5B +S21902CB5D0803A6382100084E8000209421FFE87C0802A693A1C0 +S21902CB72000C93C1001093E100149001001C3FA000003BBD32F9 +S21902CB8700817D00343D200003806948007D6803A63D200003E1 +S21902CB9C38000000900947604E800021801D00303D2000038069 +S21902CBB16948047C0803A64E8000213D20000338000001900965 +S21902CBC647808001001C7C0803A683A1000C83C1001083E100DA +S21902CBDB14382100184E8000209421FFE87C0802A693A1000CC3 +S21902CBF093C1001093E100149001001C3FA000003BBD32008106 +S21902CC051D00343860FFFF7D0803A63D400003392000013D6087 +S21902CC1A000338000000912A4760900B47804E8000213D2000B3 +S21902CC2F0390694800813D0034386000017D2803A64E800021DD +S21902CC44813D00303860FFFF7D2803A64E8000213D2000038033 +S21902CC591D003090694804386000017C0803A64E8000218001F7 +S21902CC6E001C7C0803A683A1000C83C1001083E100143821000C +S21902CC83184E8000209421FFE87C0802A69381000893A1000C6B +S21902CC9893C1001093E100149001001C3FE00003801F43382C7F +S21902CCAD000000408200A03FA000003BBD3200813D0034386076 +S21902CCC2FFFF7D2803A64E800021813D00347C7C1B7838600006 +S21902CCD7017D2803A64E800021815D00143D2000033929C55832 +S21902CCEC912A00043D600003396BC5B43D200003916A00083914 +S21902CD0129C484912A000C3D600003396BC31C3D200003916A60 +S21902CD1600103929C6A0912A00143D600003396BCA543D20009B +S21902CD2B03916A00183929C610912A001C801D00347F83E37899 +S21902CD407C0803A64E80002138000001901F43383D2000033FB9 +S21902CD55A00004A0894772387DA6B0480041353BBDA6B0801D88 +S21902CD6A00043D200003900947FC8001001C7C0803A68381009F +S21902CD7F0883A1000C83C1001083E10014382100184E80002035 +S21902CD949421FFF07C0802A693E1000C90010014480040CD3DFC +S21902CDA92000043BE9A6B03D200003817F0004800947FC7C0024 +S21902CDBE5800418200602C0B0004408200484BFFFE193C60009C +S21902CDD3043D2000043929AD743C80000338C3ACF43CA0000323 +S21902CDE8396000013940000D3D0000033CE000033800000090E8 +S21902CDFDC44808916543289943ACF49128480C9007432C801F77 +S21902CE1200042C000000408200084BFFFE6D3D2000048009A6C5 +S21902CE27B43D600003900B47FC800100147C0803A683E1000C8B +S21902CE3C382100104E8000209421FFE87C0802A693A1000C93E8 +S21902CE51C1001093E100149001001C3D20000380E947742C0708 +S21902CE660000408200283D000003392000013D6000033D40000F +S21902CE7B03380023289128476C90EB4830900A47704800007CA1 +S21902CE903C6000033C800003386335EC3884483038A000014B14 +S21902CEA5FF5F753C6000033C800003386335C43884477038A061 +S21902CEBA00024BFF5F5D3C6000033C8000033863361C38844706 +S21902CECF6C38A000014BFF5F453C6000033C80000338633638AD +S21902CEE43884456038A000054BFF5F2D3C6000033C8000043887 +S21902CEF963366038842CF038A000054BFF5F153D200003380019 +S21902CF0E00009009478C4800034D480031813D6000033D20000C +S21902CF2303392947503BEB47407C1F48004182003C7D3D4B78EA +S21902CF383BC00001813F00047FE3FB787D2803A64E8000217C8F +S21902CF4D631B794182000C93DF000C48000008907F000C3BFFDF +S21902CF6200107C1FE8004082FFD43D200003800948342C0000FA +S21902CF7700408200143C600003386338684BFFD9DD4800009016 +S21902CF8C3D2000038009476C2C000000418200283C60000438FE +S21902CFA1632CDC480027912C030000418200143C6000033863C9 +S21902CFB638884BFFD9A9480000103D2000033800000190094702 +S21902CFCB8C3D2000038009478C2C000000418200403C60000334 +S21902CFE038634560480001B97C641B783C600003386338B44B0F +S21902CFF5FFD96D3C60000438632CF04800019D7C641B783C608F +S21902D00A0003386338BC4BFFD9514BFFFC758001001C7C080325 +S21902D01FA683A1000C83C1001083E10014382100184E800020F4 +S21902D0349421FFF093E1000C380000047C0903A67C9F23783864 +S21902D049800000398000188963000038E000012C0B000038A066 +S21902D05E000038C0000A3863000141820110696000302120000A +S21902D073007C0901147CE9003941820030892300003809FFBFCB +S21902D088280000194181000C380900205409063E2C090078408E +S21902D09D8200108D63000138C0001038630001392BFFD0380BDA +S21902D0B2FFBF7D2A4B787C0803785529063E5400063E21290097 +S21902D0C709392000007D29491420000005380000007C000114FA +S21902D0DC7D27037938E000003920000040820010380BFF9F28CC +S21902D0F100000541810008392000012C09000041820068554005 +S21902D106063E280000094181000C7D49537848000030380BFF7F +S21902D11B9F280000054181000C392BFFA94800001C5500063E55 +S21902D130200000057C0001107C0003B8392BFFC97C0948387C4D +S21902D14509300040800020896300007C0531D62C0B00007CA0EE +S21902D15A4A14386300014082FF0C480000142C0B002E4182006E +S21902D16F0C386000004800001C7CA060307C840378398CFFF8B9 +S21902D1844200FECC909F00003860000183E1000C382100104E94 +S21902D1998000209421FFE87C0802A693A1000C93C1001093E1FA +S21902D1AE00149001001C890300033FA0000488A3000088C300BC +S21902D1C30188E300023C800003388438D8387DAE744BFFD7055A +S21902D1D8387DAE748001001C7C0803A683A1000C83C100108393 +S21902D1EDE10014382100184E800020812300007C0918004182CE +S21902D20200208123000490890000800300049064000090040020 +S21902D21704908300044E80002090890004908900009124000007 +S21902D22C912400044E8000207C6B1B78806B00007C03580041C2 +S21902D24182001880030000900B000081230000916900044E80A9 +S21902D2560020386000004E8000209421FFE87C0802A693A1001A +S21902D26B0C93C1001093E100149001001C3D0000033CE00003A3 +S21902D280392848183967481091284818916748103D400004915E +S21902D2952900043BCAAE94916B00043FA000033BE000107FC4B9 +S21902D2AAF378387D48104BFFFF4937FFFFFF3BDE06104082FF3A +S21902D2BFEC8001001C7C0803A683A1000C83C1001083E10014A1 +S21902D2D4382100184E8000209421FFF87C0802A69001000C80EA +S21902D2E9040000A124000490030010B123001480040000A104A8 +S21902D2FE00043D20000339694828900948283D400003B10B0059 +S21902D31304906A4834480000158001000C7C0803A6382100080C +S21902D3284E8000209421FFF87C0802A69001000C8123000038AA +S21902D33D8300108009000038A000007C0803A64E800021800143 +S21902D352000C7C0803A6382100084E8000209421FF587C0802A5 +S21902D367A67D80002693410090936100949381009893A1009C79 +S21902D37C93C100A093E100A4900100AC9181008C3D2000003918 +S21902D39129320083A9004C3D6000032C1D00007C7B1B787C9A24 +S21902D3A623787CBC2B7883EB48343BC00005418200547FBFEBCB +S21902D3BB78815F0000801F000C816A00243D2000032C000000B8 +S21902D3D03929433C916A0028912A00244082002C800A00003CAA +S21902D3E5800003388448287FE3FB7838A000007C0803A64E80D5 +S21902D3FA0021801F000C60000001901F000C2E1D00004800009C +S21902D40F3C813F00007FE3FB788009001C7C0803A64E8000216F +S21902D4243D20000039293200800900483C60000360630D407CFF +S21902D4390803A64E80002137DEFFFF408100E4813F00007FE35D +S21902D44EFB788009000C7C0803A64E8000212C0300004182FFAD +S21902D463B0813F00003D6000038149001038A0000238EB48205E +S21902D4789361000893410010938100147FE3FB783881000838C2 +S21902D48DDC000E7D4803A63800000E392000009001000C912B33 +S21902D4A248204E8000213D200003800948303FC000032C000088 +S21902D4B700418200384BFFF6117C7D1B783C600003386338E42B +S21902D4CC4BFFD4957F63DB783880000E4BFFDF617F43D3787F80 +S21902D4E184E3784BFFDF557FA3EB784BFFF64D801E48202C008E +S21902D4F60000408200307FFDFB787FDFF378813D00007FA3EBA5 +S21902D50B788009001C7C0803A64E800021801F48202C00000098 +S21902D5204182FFE47FBFEB7841920018813F0000380000008144 +S21902D5356900289009002891690024800100AC8181008C7C082B +S21902D54A03A683410090836100948381009883A1009C83C100B0 +S21902D55FA083E100A47D808120382100A84E8000209421FFF8CF +S21902D5747C0802A69001000C3D200003380948207C0400004009 +S21902D589820010380000019009482048000018812300008169CC +S21902D59E0028800B00087C0803A64E8000218001000C7C080386 +S21902D5B3A6382100084E8000209421FFE07C0802A69361000CA7 +S21902D5C89381001093A1001493C1001893E1001C900100243DED +S21902D5DD200000392932008389004C3D6000032C1C00007C7D45 +S21902D5F21B787C9B237883CB4834418200547F9EE378815E00A0 +S21902D60700801E000C816A00243D2000032C0000003929433CE1 +S21902D61C916A0028912A00244082002C800A00003C8000033881 +S21902D6318448287FC3F37838A000007C0803A64E800021801EAA +S21902D646000C60000001901E000C813E00007FC3F378800900AC +S21902D65B1C7C0803A64E8000213C600003386348184BFFFBC9D3 +S21902D6707C7F1B7941820054393F000CA009000C817F000C8132 +S21902D68549000481090008B01D000C917D0000915D0004911D23 +S21902D69A000880BF00087F63DB7838A5FFF2389F001A4BFFCA1D +S21902D6AFB13C600003386348107FE4FB784BFFFB3D807F0008BD +S21902D6C448000008386000002C1C000041820018813E00003848 +S21902D6D9000000816900289009002891690024800100247C081B +S21902D6EE03A68361000C8381001083A1001483C1001883E1007B +S21902D7031C382100204E8000209421FFE87C0802A693A1000C7F +S21902D71893C1001093E100149001001C7CA02B797C0903A6402E +S21902D72D81003C7C9F23787FC902A63FA00003807F000080BF5D +S21902D7420004809D48244BFFCA15801D4824813F000437DEFF34 +S21902D757FF7C004A143BFF0008901D48244082FFD88001001C4C +S21902D76C7C0803A683A1000C83C1001083E10014382100184EB9 +S21902D7818000209421FF607C0802A69361008C9381009093A154 +S21902D796009493C1009893E1009C900100A47C7E1B783C600089 +S21902D7AB037C9B2378386348104BFFFA817C7C1B787F89FE70F4 +S21902D7C07D20E2787C004850817E00007C00FE70393C000C7D5B +S21902D7D53F0038800B001493E100089361000C7FC3F378388140 +S21902D7EA000838A000017C0803A64E8000213D200003800948F5 +S21902D7FF302C000000418200384BFFF2C57C7D1B783C6000038B +S21902D814386338F44BFFD1497FE3FB783880000E4BFFDC1538BF +S21902D8297F000E389BFFF24BFFDC097FA3EB784BFFF301813EE1 +S21902D83E0000800900282C0000004182005C3C60000338634553 +S21902D85360389F001E38A000044BFFD3752C03000041820040C4 +S21902D868815E00007FC3F378812A00287F64DB78800900043D45 +S21902D87D6000037C0803A683AA0014396BD70C3D20000393E95B +S21902D8924824916A00144E800021813E000093A900142C1C00B9 +S21902D8A700418200183C600003937C0008386348187F84E3787B +S21902D8BC4BFFF93D800100A47C0803A68361008C8381009083F7 +S21902D8D1A1009483C1009883E1009C382100A04E80002094218E +S21902D8E6FFF87C0802A69001000C3D20000380694834816300BD +S21902D8FB00800B00207C0803A64E8000218001000C7C0803A690 +S21902D910382100084E8000209421FFF87C0802A69001000C7CBB +S21902D925641B783C600003386339044BFFD0318001000C7C081C +S21902D93A03A6382100084E8000209421FFF07C0802A693E10095 +S21902D94F0C900100143D2000043BE9315C801F001C2C00000012 +S21902D9644082002C9069315C909F00044800049D7C631B794064 +S21902D97982001C801F0008392000017C0000D0913F001C901F0C +S21902D98E001038600000800100147C0803A683E1000C3821004A +S21902D9A3104E8000203D2000043929315C8009001C7C6B1B78FB +S21902D9B82C0000004082000C386000074E800020800900147CB3 +S21902D9CD0B00404180001480090018386000007C0B00404D8051 +S21902D9E20020386000014E8000203D2000043969315C800B0067 +S21902D9F71C2C0000004182001C812B00143860000091240000E0 +S21902DA0C800B0018900500004E800020386000074E8000203D0E +S21902DA212000043969315C800B001C7C6A1B782C000000418287 +S21902DA36001C812B000838600000912A0000800B000C90040086 +S21902DA4B004E800020386000074E8000209421FFD87C0802A68C +S21902DA609321000C93410010936100149381001893A1001C93EF +S21902DA75C1002093E100249001002C3D200004800931787C7FD1 +S21902DA8A1B782C0000007C9E23787CBA2B783B800000408200B6 +S21902DA9F0C38600007480000F83D20000483A9315C3C800003A7 +S21902DAB43CA000033884DF9C38A5E0C47CA428507FA3EB784B57 +S21902DAC9FFC6957CBFF214380000807C0903A6392000006120E6 +S21902DADE10003D600E007C0004AC7D398BA67D788BA67C198B18 +S21902DAF3A67D788BA6392900104200FFE03C0004004C00012CFF +S21902DB087C108BA64C00012C3D2000043929315C800900107C66 +S21902DB1DBE2B783C6000037FFF00383F2000037D3B4B783863BE +S21902DB3239407FE4FB784BFFCE294800001C801B000838793956 +S21902DB47585400F87E7C0002147FFF02144BFFCE0D7C1FF0408A +S21902DB5C408000207FE3FB787FA803A64E800021480003657C0D +S21902DB717C1B794182FFCC93FA00003C0002004C00012C7C102A +S21902DB868BA64C00012C3C6000033863395C4BFFCDCD7F83E341 +S21902DB9B788001002C7C0803A68321000C8341001083610014A0 +S21902DBB08381001883A1001C83C1002083E10024382100284E42 +S21902DBC58000209421FFD07C0802A692E1000C9301001093211D +S21902DBDA0014934100189361001C9381002093A1002493C1003F +S21902DBEF2893E1002C900100343D600004392B315C8009001C56 +S21902DC047CBE2B782C0000007CD833787C7C1B787C9D23783B82 +S21902DC194000004082000C386000074800011C836B315C3C80A6 +S21902DC2E00033CA000033884E0C438A5E2087CA428507F63DB7C +S21902DC43784BFFC5197CBDF214380000807C0903A639200000A7 +S21902DC58612010003D600E007C0004AC7D398BA67D788BA67CBF +S21902DC6D198BA67D788BA6392900104200FFE03C0004004C000C +S21902DC82012C7C108BA64C00012C3C600003386339607FA4EB42 +S21902DC97787F86E3784BFFCCC53D2000043EE000033B29315C4B +S21902DCAC48000020387739584BFFCCAD57E0F87E7C0002147F33 +S21902DCC1BD02147FDFF0507F9C02142C1E0000408100508019B1 +S21902DCD600087FC5F3787F8500007F83E3787FA4EB784FFEE364 +S21902DCEB827D200026552907FE7D2900D07C0048787CA94838FE +S21902DD007D2503787F6803A67CBF2B784E800021480001C17C07 +S21902DD157A1B794182FF98939800003C0002004C00012C7C101C +S21902DD2A8BA64C00012C3C6000033863395C4BFFCC297F43D390 +S21902DD3F78800100347C0803A682E1000C8301001083210014B3 +S21902DD54834100188361001C8381002083A1002483C10028837C +S21902DD69E1002C382100304E80002028030007418100883D6001 +S21902DD7E0003396B3A705460103A7D4B002E3D20000339293A48 +S21902DD93707D4A4A147D4903A64E8004203C600003386339808B +S21902DDA84E8000203C600003386339A04E8000203C6000033899 +S21902DDBD6339B84E8000203C600003386339D04E8000203C603B +S21902DDD20003386339EC4E8000203C60000338633A044E80003E +S21902DDE7203C60000338633A144E8000203C60000338633A38DE +S21902DDFC4E8000203C60000338633A5C4E8000209421FFE07C4F +S21902DE110802A693A1001493C1001893E1001C900100243D20EF +S21902DE26000483E9315C3C8000033CA000033884E20838A5E2E0 +S21902DE3BA47CA428507FE3FB784BFFC3193FC000013BA00008B1 +S21902DE5038610008380000807C0903A639200000612010003D08 +S21902DE65600E007C0004AC7D398BA67D788BA67C198BA67D783F +S21902DE7A8BA6392900104200FFE07FE803A64E8000217D3DF11E +S21902DE8FD63D600004396B315C3D29FE003C00FE00912B00185D +S21902DEA4900B001493CB000893AB000C38600000800100247C4A +S21902DEB90803A683A1001483C1001883E1001C382100204E8041 +S21902DECE00209421FFF07C0802A693E1000C900100143C0000E7 +S21902DEE37E7C7F1B786000007E7FE90039418200503C600003E6 +S21902DEF838633A907FE4FB784BFFCA613C000010600000107F23 +S21902DF0DE9003938600004408200303C600020606300207FE347 +S21902DF2218387C6300D07C63FE707C6018F8546307BC540007D6 +S21902DF37387C6303784800000838600000800100147C0803A692 +S21902DF4C83E1000C382100104E8000203D200002392920007C95 +S21902DF610348407C802378396000004181000C7C004840418155 +S21902DF76001C3D2000033889176C7C032040418100107C002082 +S21902DF8B4040810008396000017D635B784E8000207C6A1B78BD +S21902DFA07CF88AA654E70FFE2C07000041820040380000807C0F +S21902DFB50903A639200000612010003D600E007C0004AC7D3927 +S21902DFCA8BA67D788BA67C198BA67D788BA6392900104200FF45 +S21902DFDFE03C0004007C0004AC7C188BA655480010396000AA25 +S21902DFF49968055539200055992802AA38000080980805559950 +S21902E009680555992802AA392000327D2903A62F870000380004 +S21902E01E0030980A0000396A0001420000003D20004C7D2903DC +S21902E033A6880A00005400067261294B407D2903A65400063ED1 +S21902E048886A0000546906727C09000041820014706000207DCC +S21902E05D204B78408200084200FFE4380000FF98080000892A4B +S21902E07200007D6A5B782C0900FF3D2000014082001C3529FF0B +S21902E087FF40810014880A0000394A00012C0000FF4182FFECBA +S21902E09C7D2BFE707D604A787C0058507C00FE707C6300384D41 +S21902E0B19E00203C0002007C0004AC7C188BA64E8000209421C3 +S21902E0C6FFF093C1000893E1000C7D588AA6554A0FFE2C0A008C +S21902E0DB0041820040380000807C0903A6392000006120100056 +S21902E0F03D000E007C0004AC7D398BA67D188BA67C198BA67DAD +S21902E105188BA6392900104200FFE03D2004007C0004AC7D38E0 +S21902E11A8BA62C0500002F8A0000546A0010408100A03BC000A4 +S21902E12FAA3BE00055398000A038C000FF9BCA05559BEA02AA7A +S21902E144998A0555880400003920003198030000380000327CAB +S21902E1590903A63904000138E300013929FFFF4200FFFC880376 +S21902E16E00007D2903A6540006725400063E8963000055690632 +S21902E183727C09000041820014716000207D204B784082000897 +S21902E1984200FFE498CA000089230000880400007D0443787CF4 +S21902E1AD0900007CE33B784182000C396000FF4800000C34A5A7 +S21902E1C2FFFF4181FF787CA8FE707D002A787C0040507C00FED3 +S21902E1D770392000FF992A00007D6B0038419E00103D20020033 +S21902E1EC7C0004AC7D388BA67D635B7883C1000883E1000C385E +S21902E2012100104E8000207D588AA6554A0FFE2C0A0000418238 +S21902E2160040380000807C0903A639200000612010003D600E31 +S21902E22B007C0004AC7D398BA67D788BA67C198BA67D788BA6B2 +S21902E240392900104200FFE03C0004007C0004AC7C188BA63DC1 +S21902E25560FE00380000AA980B055539200055992B02AA38001A +S21902E26A0090980B0555892B00002C0A000099230000880B00D2 +S21902E27F01392000FF98030001992B0000418200103D60020058 +S21902E2947C0004AC7D788BA6386000004E8000209421FF687CFE +S21902E2A90802A693410080936100849381008893A1008C93C12D +S21902E2BE009093E100949001009C3FA000003BBD320090610085 +S21902E2D308819D00347C7A1B783860FFFF7D8803A63B81000844 +S21902E2E83B6100A03800000139600000938100789081000C90D3 +S21902E2FDA1001090C1001490E100189101001C91210020914114 +S21902E31200249801007099610071936100744E800021813D0042 +S21902E327347C7C1B78386000017D2803A64E800021388100701C +S21902E33C7F43D3784BFFC6A9801D00347F83E3787C0803A64E56 +S21902E3518000218001009C7C0803A68341008083610084838115 +S21902E366008883A1008C83C1009083E10094382100984E8000D8 +S21902E37B209421FFE07C0802A6934100089361000C93810010A6 +S21902E39093A1001493C1001893E1001C900100243FA000003B5E +S21902E3A5BD3200813D00347C7A1B783860FFFF7D2803A67C9CF6 +S21902E3BA23784E800021813D00347C7B1B78386000017D280300 +S21902E3CFA64E8000217F84E3787F43D3784BFFD05D801D0034EA +S21902E3E47F63DB787C0803A64E800021800100247C0803A68377 +S21902E3F94100088361000C8381001083A1001483C1001883E1C3 +S21902E40E001C382100204E8000209421FFE87C0802A693E10033 +S21902E423149001001C3FE00004813F0F943881000880690000EC +S21902E4388009001C7C0803A64E8000212C0300004082FFE480B3 +S21902E44D01001C7C0803A683E10014382100184E8000209421DD +S21902E462FFE07C0802A69381001093A1001493C1001893E10047 +S21902E4771C900100243BE000003FA00004813D0F943881000898 +S21902E48C806900008009001C7C0803A64E8000212C030000415A +S21902E4A18202A4896100082C0B000441820040408100102C0BFF +S21902E4B600184182002C480000382C0B000241810030392BFF35 +S21902E4CBFF7D694B787D29FE70380900017FE948387D3F037818 +S21902E4E0480000143860FFFB480002683860FFFC480002602C17 +S21902E4F51F00004182FF8C3D20000481690F943BC90F94806B1E +S21902E50A0000800B001C389E04087C0803A64E8000212C030021 +S21902E51F0041820224813D0F94389E0409806900008009001C25 +S21902E5347C0803A64E8000212C03000041820204880100083BEB +S21902E549E00000680000017C0000D07C00FE707C0900F855293C +S21902E55E06305400056A7C004B787C1F0000393E0004901E04A1 +S21902E57310913E0404408000487FDCF3787D3D4B783FC0000457 +S21902E588813E0F9438810008806900008009001C7C0803A64E4B +S21902E59D8000212C030000418201A0880100087C1DF9AE813CA0 +S21902E5B204103BFF00017C1F48004180FFCC3FC00004813E0FBE +S21902E5C7943BFE0F94806900008009001C389F040A7C0803A628 +S21902E5DC4E8000212C03000041820160801F04142C00000041BD +S21902E5F1820024813E0F94389F040B806900008009001C7C080E +S21902E60603A64E8000212C030000418201343D2000043BC90FC5 +S21902E61B94889E040888BE04097C862A782C0600FF418200280A +S21902E6303C60000338633AA04BFFFC6D809E0410387E00044BD0 +S21902E645FFFD394BFFFDD13860FFFA48000100801E04142C00B0 +S21902E65A000041820088801E041038C000007C0600003BE00012 +S21902E66F00408000403D2000037FEBFB7839094348387E0004CB +S21902E6847C0A03787D2358AE54C0C23E7C004A787C00021439B6 +S21902E6996B00017D28022E7C0B500054C0442E7C064A784180C2 +S21902E6AEFFDC3D20000439290F948889040A88A9040B5480409C +S21902E6C32E7C002B787C060000418200803C60000338633AC0F5 +S21902E6D84BFFFBCD3860FFF948000070801E041038C000007CA6 +S21902E6ED0600003BE00000408000287FEBFB78387E00047C0AEB +S21902E70203787C0358AE396B00017C0B50007C06021454060489 +S21902E7173E4180FFEC3D2000048889139E54C5063E7C042800D4 +S21902E72C418200203C60000338633AEC4BFFFB6D3860FFF94804 +S21902E7410000103860FFFD4800000838600000800100247C0807 +S21902E75603A68381001083A1001483C1001883E1001C3821007D +S21902E76B204E8000209421FFD87C0802A6930100089321000C70 +S21902E78093410010936100149381001893A1001C93C10020930E +S21902E795E100249001002C2C0400037CBE2B7840820044380058 +S21902E7AAFFFE901E0000480001103FA00004813D0F9438800053 +S21902E7BF06806900008009000C3BBD0F947C0803A64E80002103 +S21902E7D438000001939D0410981D040C38600000480000E03FE8 +S21902E7E9A000003BBD3200813D00343860FFFF7D2803A63F80B5 +S21902E7FE00043B5C0F947FB8EB784E800021813D00347C7B1B34 +S21902E813787D2803A63BE000133F2000044E800021801D0014F2 +S21902E828813D00347F63DB787D2803A6901C0F944E80002181A0 +S21902E83D3C0F9438800007806900008009001438A003E87C0854 +S21902E85203A64E8000213920000038000001913A0418901A04EB +S21902E86714913A04104BFFFBF57C7C1B794182FF402C1CFFFD96 +S21902E87C40820030813800483C6000076063A1207D2803A64ECA +S21902E89180002181390F9438800043806900008009000C7C0870 +S21902E8A603A64E8000217FE0FB782C0000003BFFFFFF4181FFC7 +S21902E8BBB4939E00003860FFFF8001002C7C0803A68301000860 +S21902E8D08321000C83410010836100148381001883A1001C83D1 +S21902E8E5C1002083E10024382100284E8000209421FFD07C0837 +S21902E8FA02A692E1000C9301001093210014934100189361008F +S21902E90F1C9381002093A1002493C1002893E1002C9001003463 +S21902E9243D2000047C9B237839690F94812B04187F60FE707CEE +S21902E9391B005054000FFE210900007D2849147D2A00397C7AF4 +S21902E94E1B787CB72B783B0000003F200004418201787D7C5B16 +S21902E96378801C04102C000000408200F03BC000134BFFFAED53 +S21902E9787C7F1B794082004C3D4000043BAA0F94897D04088942 +S21902E98D3D040C7C0B4800418200A03809FFFF5400063E7C0B91 +S21902E9A2000040820020812A0F943880000680690000800900F9 +S21902E9B70C7C0803A64E800021480000283BE0FFF82C1FFFFC54 +S21902E9CC4182004481390F9438800043806900008009000C7CD6 +S21902E9E10803A64E8000217FC0F3782C0000003BDEFFFF4181CB +S21902E9F6FF802C1F00004080006093F700003800FFFF901C04AB +S21902EA0B10480000C881390F9438800006806900008009000C36 +S21902EA207C0803A64E80002138000001901C04184BFFFFC8812B +S21902EA35390F9438800006806900008009000C7C0803A64E80B2 +S21902EA4A0021893D040C39290001993D040C4BFFFFA083BC0444 +S21902EA5F10809C04047F9BE8007F43D3784FFEEB827C000026FC +S21902EA74540007FE7C0000D07F6900787FBD00387FBD4B787F8F +S21902EA89A5EB784BFFB6D17F7DD850815C04187F60FE707C1B97 +S21902EA9E0050813C0410817C040454000FFE210A00007D485194 +S21902EAB3147D4800397D6BEA147D3D4850913C0410917C040407 +S21902EAC87F5AEA147F18EA144082FE947F03C378800100347C84 +S21902EADD0803A682E1000C8301001083210014834100188361F1 +S21902EAF2001C8381002083A1002483C1002883E1002C3821002B +S21902EB07304E8000203803000828000007418100883D60000378 +S21902EB1C396B3BC05400103A7D4B002E3D20000339293BC07D70 +S21902EB314A4A147D4903A64E8004203C60000338633B184E8064 +S21902EB4600203C60000338633B2C4E8000203C60000338633B8F +S21902EB5B4C4E8000203C60000338633B584E8000203C6000030A +S21902EB7038633B644E8000203C60000338633B704E8000203C52 +S21902EB8560000338633B804E8000203C60000338633B944E80F6 +S21902EB9A00203C60000338633BAC4E8000209421FFF87C0802FE +S21902EBAFA69001000C3803FFFE2800001D418100A03D60000388 +S21902EBC4396B3BE05400103A7D4B002E3D20000339293BE07D88 +S21902EBD94A4A147D4903A64E8004203860000248000078386025 +S21902EBEE00414BFF9B8954637F3E2C0300024182004028030089 +S21902EC0302418100102C030001418200384800004C2C0300042F +S21902EC18418200242C0300084082003C3860000848000038386C +S21902EC2D60000E480000303860000C48000028386000044800ED +S21902EC42002038600005480000183860000A4800001038600007 +S21902EC570B480000083860000F8001000C7C0803A63821000884 +S21902EC6C4E8000203D200003816947D4806B00985463C23E4EB1 +S21902EC818000209421FFF87C0802A69001000C7C641B78386057 +S21902EC9600404BFF9AF58001000C7C0803A6382100084E800060 +S21902ECAB209421FFF87C0802A69001000C386000414BFF9ABD3E +S21902ECC060640600548004203D2000035484045E90094548387E +S21902ECD56000414BFF9AB58001000C7C0803A6382100084E8000 +S21902ECEA00209421FFF87C0802A69001000C386000414BFF9ABC +S21902ECFF7D3D20000380894548546305E8380000007C6423782F +S21902ED1490094548386000414BFF9A718001000C7C0803A6389D +S21902ED292100084E8000204E8000204E8000209421FFF87C08AB +S21902ED3E02A69001000C386000404BFF9A313D20000339299035 +S21902ED53807C634A78200300007C6019148001000C7C0803A69D +S21902ED68382100084E8000209421FFF87C0802A69001000C3893 +S21902ED7D6000404BFF99F938830004386000404BFF9A01800101 +S21902ED92000C7C0803A6382100084E8000209421FFF87C0802AB +S21902EDA7A69001000C3D2000038009454C2C0000004082001095 +S21902EDBC380000019009454C480008118001000C7C0803A63885 +S21902EDD12100084E8000203D200003800945502C0000004C8297 +S21902EDE6002038000001900945507D1E9AA67508FFFF3D2000D7 +S21902EDFB017D2903A638008001B00809C07C0902A6600086A0BF +S21902EE107C0903A64200000080080ABC3D600001600000C090DA +S21902EE25080ABC81280AB8616B00A2552906AE91280AB8916884 +S21902EE3A09F07CE902A690E80AE038002800B0083E8039683E9F +S21902EE4F8038002808B00B000239200091B12809C039400001FC +S21902EE649148003038000018980B0004980B0005B14B0006B038 +S21902EE79EB0028B0EB002CB0EB002EB14B003039282800B0E98C +S21902EE8E00023800B000B00828003808281090090004396828C0 +S21902EEA30838082820B14B0002900B000439202000B1282808A4 +S21902EEB8380000FF98080A863920000599280A8A38004820B0D4 +S21902EECD080A8239204823B1280A824E80002039233E80A009BB +S21902EEE200207D4302147D4B5378A00A00007008800041820026 +S21902EEF728A00A00007008200041820010A00900027D43021441 +S21902EF0C48000008394A00087C0A58004082FFD47D495378A06A +S21902EF21090000700080004082FFF87D2A4B787C090378A00A0E +S21902EF360000700B100041820014A00A00007000EFFFB00A009B +S21902EF4B00B12A0002A12A00023900000038090001B00A0002C9 +S21902EF60816A00045529043E7C8B49AEA00A000060008000B0AE +S21902EF750A0000A12A000071208000418200647D4B53787D0A59 +S21902EF8A43783D0000076108FFFF394A00017C0A4000408200F9 +S21902EF9F38A1230A82394000007129FFFDB1230A82A00B0000B4 +S21902EFB45400047EB00B0000A1230A8261290002B1230A82A0D4 +S21902EFC90B000060008000B00B0000A00B000070098000408220 +S21902EFDEFFB87D6A5B787D495378A0090000700080004082FFBB +S21902EFF3F87D2A4B78B00A00024E80002038E33E80A107001065 +S21902F0087C03422E7D434214700680004182000C386000004E3C +S21902F01D800020812A0004396000008809000098040000B0CA48 +S21902F0320002812A0004996900007C03422E600080007C03437E +S21902F0472E7D388AA655290FFE2C09000041820028812A000440 +S21902F05CA00700062C000000408100187C004BAC7C0004AC3413 +S21902F07100FFF0392900104181FFF0386000014E800020942135 +S21902F086FFE87C0802A693E100149001001C7C7F1B787FE3FB3B +S21902F09B78388100084BFFFF612C0300004182FFF088610008A4 +S21902F0B08001001C7C0803A683E10014382100184E800020940F +S21902F0C521FFE87C0802A693A1000C93C1001093E1001490013E +S21902F0DA001C7CBF2B787FE0FB782C0000007C7D1B787C9E2359 +S21902F0EF783BFFFFFF41820024889E00007FA3EB784BFFFDDD9F +S21902F1047FE0FB782C0000003BDE00013BFFFFFF4082FFE4807A +S21902F11901001C7C0803A683A1000C83C1001083E1001438213B +S21902F12E00184E8000209421FFE87C0802A693A1000C93C10063 +S21902F1431093E100149001001C7CBF2B787FE0FB782C0000008F +S21902F1587C7D1B787C9E23783BFFFFFF418200247FA3EB784B6B +S21902F16DFFFF197FE0FB782C000000987E00003BDE00013BFF07 +S21902F182FFFF4082FFE48001001C7C0803A683A1000C83C10090 +S21902F1971083E10014382100184E8000209421FFE87C0802A6AD +S21902F1AC9381000893A1000C93C1001093E100149001001C3D15 +S21902F1C1200003800945543D6000001FE0000A3B8B32007C7D56 +S21902F1D61B787C9E237848000014813C0048386000647D2803D0 +S21902F1EBA64E8000217FA3EB787FC4F3784BFFFE097C631B797C +S21902F200408200102C1F00003BFFFFFF4082FFD48001001C7CEF +S21902F2150803A68381000883A1000C83C1001083E100143821CB +S21902F22A00184E8000209421FF807C8023782C00000590A10095 +S21902F23F1090C1001490E100189101001C91210020914100243F +S21902F2549081000C386000004182002C28000005418100102CCF +S21902F26900000441820144480002B42C000006418202782C00E4 +S21902F27E000741820278480002A03D600003800B3D2C3D200055 +S21902F2930339293C587D2902147D2903A64E8004203D20FF000D +S21902F2A861290014800900007C0006AC60000400900900007C7C +S21902F2BD0006AC480000E03D20FF0061290200A00900007C004E +S21902F2D206AC60000008B00900007C0006AC480000C03D20FFBB +S21902F2E70061290200A00900007C0006AC60000004B00900008B +S21902F2FC7C0006AC480000A03D20FF0061290240A00900007C93 +S21902F3110006AC60000004B00900007C0006AC480000803D20BE +S21902F326FF0061290220A00900007C0006AC60000008B0090028 +S21902F33B007C0006AC480000603D20FF0061290220A00900002F +S21902F3507C0006AC60000004B00900007C0006AC480000403D63 +S21902F36520FF0061290940800900007C0006AC6000008090096A +S21902F37A00007C0006AC480000203D20FF006129094880090021 +S21902F38F007C0006AC60000010900900007C0006AC3D2000039D +S21902F3A43800000190094558480001783D2000038069455838FF +S21902F3B9000000900945583D600003800B3E143D2000033929C3 +S21902F3CE3D407D2902147D2903A64E8004203D20FF00612900C3 +S21902F3E314800900007C0006AC540005A8900900007C0006AC7B +S21902F3F84800012C3D20FF0061290200A00900007C0006AC7055 +S21902F40D00FFF75400043EB00900007C0006AC480001083D20C2 +S21902F422FF0061290200A00900007C0006AC7000FFFB540004AA +S21902F4373EB00900007C0006AC480000E43D20FF006129024040 +S21902F44CA00900007C0006AC7000FFFB5400043EB00900007C98 +S21902F4610006AC480000C03D20FF0061290220A00900007C00A8 +S21902F47606AC7000FFF75400043EB00900007C0006AC4800009D +S21902F48B9C3D20FF0061290220A00900007C0006AC7000FFFB80 +S21902F4A05400043EB00900007C0006AC480000783D20FF006156 +S21902F4B5290940800900007C0006AC5400066E900900007C0035 +S21902F4CA06AC480000583D20FF0061290948800900007C000692 +S21902F4DFAC54000734900900007C0006AC4800003838600036C1 +S21902F4F4480000303961000838010088392000039861007199C2 +S21902F50921007090010074916100783D200003800B000880690A +S21902F51E455490094554382100804E8000209421FFE87C08021D +S21902F533A693C1001093E100149001001C7C9E2378392000006F +S21902F5487C7F1B78913E0000881F0A86700B000141820060383C +S21902F55D000001981F0A86A13F2800391F2800712080004082EF +S21902F572003C8128000439400001880900003960B000980100A7 +S21902F58708B1480002B17F280038610008388000014BFFAAA51A +S21902F59C2C0300004182000C38000001901E0000380000109096 +S21902F5B11F094C392000017D234B788001001C7C0803A683C1FF +S21902F5C6001083E10014382100184E8000209421FFF07C080218 +S21902F5DBA693C1000893E1000C900100143D2000003BE932003A +S21902F5F0813F00343860FFFF7D2803A64E8000217C7E1B787C2F +S21902F6051E9AA67400FFFF3D2000038009455C2C0000004082A1 +S21902F61A0094380000019009455C4BFFF7B5813F00343860004B +S21902F62F007D2803A64E800021815F00147C1E9AA67400FFFF42 +S21902F6443D200003900A00003929F0C4912A00043D6000033902 +S21902F6596BF1343D200003916A00083929EEDC912A000C3D6012 +S21902F66E0003396BF0843D200003916A00103929F230912A00BB +S21902F683143D600003396BF52C3D200003916A00183929F1A488 +S21902F698912A001C801F00347FC3F3787C0803A64E8000218063 +S21902F6AD0100147C0803A683C1000883E1000C382100104E800C +S21902F6C200209421FFF07C0802A693E1000C900100143D2000BA +S21902F6D703806948387C9F23782C030000418200084BFFAA7592 +S21902F6EC881F00002C0000024082002C3C80000338844828381C +S21902F7017F001C38A000064BFFB4C92C03000040820010801F0C +S21902F71600103D20000390094560800100147C0803A683E10003 +S21902F72B0C382100104E8000209421FE887C0802A69321015CE7 +S21902F74093410160936101649381016893A1016C93C1017093A9 +S21902F755E101749001017C3D20000390694838386100187C79B5 +S21902F76A1B783880000038A0012C4BFFAAC13D200003808948CD +S21902F77F2839694828A06B00043D201234394000003CE00003EA +S21902F79438C0000161295555396000063907456098C10019999D +S21902F7A961001A9121001C9947456099480003380000FF90814A +S21902F7BE0034B06100389801015198C100189948000199480093 +S21902F7D3023CA000037D1D437838A5F6C4980101489801014988 +S21902F7E89801014A9801014B9801014C9801014D9801014E98EF +S21902F7FD01014F980101503861000838800044480000D53B8040 +S21902F81200023B4101483F60000348001F0D7C7E1B787F23CB03 +S21902F827783880012C7F45D37838C0004338E00044480002492F +S21902F83C48000AA1881B45602C00000040820028881D00012C8D +S21902F8510000004082001C881D00022C000000408200108BFD90 +S21902F86600032C1F00004182001438600044480000BD386000E8 +S21902F87B004800003848001EA97C7E1850280307CF4081FFB00F +S21902F8907F80E3782C0000003B9CFFFF4181FF8038600044489C +S21902F8A500008D3D20000393E948303860FFFF8001017C7C084E +S21902F8BA03A68321015C83410160836101648381016883A10188 +S21902F8CF6C83C1017083E10174382101784E8000203D20000303 +S21902F8E48129483C2C09000041820024A00900047C0020004035 +S21902F8F982000C3860FFFF4E800020812900002C090000408240 +S21902F90EFFE43D2000038009483C9069483CB083000490A300A6 +S21902F9230890030000386000004E8000203D2000038129483C19 +S21902F938396000002C0900004D8200207D2A4B78A00900047C63 +S21902F94D0018004082001C2C0B00004182001080090000900B7A +S21902F962000048000008814900007D2B4B78812900002C090025 +S21902F977004082FFD03D2000039149483C4E8000209421FFE89B +S21902F98C7C0802A69381000893A1000C93C1001093E10014905B +S21902F9A101001C7C7E1B7883FE000838000000A13F0006600099 +S21902F9B6FFFF7C090000817E00047C9C23784082000C380000F6 +S21902F9CB00B01F0006A01F00047D635B78B00B0002A3BF0004B2 +S21902F9E0480008CD7C651B787FA4EB787FE3FB78480008512C52 +S21902F9F5030000408200603D2000038169483C2C0B0000418209 +S21902FA0A0050A12B0004A01F00027C09000040820034A0BF0025 +S21902FA1F04800B00087D635B7838A5FFF87F86E378A0FF0000AE +S21902FA34389F00087C0803A64E8000217FC3F378480007D9489E +S21902FA49000018816B00002C0B00004082FFB87FC3F3784800F8 +S21902FA5E07C18001001C7C0803A68381000883A1000C83C1007A +S21902FA731083E10014382100184E8000209421FFD87C0802A6D8 +S21902FA88930100089321000C934100109361001493810018935B +S21902FA9DA1001C93C1002093E100249001002C7C9C2378281CD0 +S21902FAB205C07C791B787CB82B787CDA33787CFE3B7841810024 +S21902FAC7A8386005EA480006ED7C7F1B794182009883BF000885 +S21902FADC381C0008837F0004B01F000CB3DD0000B35D0002A08F +S21902FAF11F000C392000007F85E378B01D0004B13D00067F24AE +S21902FB06CB78387D00084BFFA6513D200003800945603960007B +S21902FB1B11901B000C81380000997B0009913B0010A01D000493 +S21902FB307F63DB78B01B0002A39F000C480007717C651B787FB6 +S21902FB4584E3787FA3EB78480006F5B07D00067F05C3787FE3A9 +S21902FB5AFB7838800011480004457FE3FB78480006B580010069 +S21902FB6F2C7C0803A6830100088321000C834100108361001419 +S21902FB848381001883A1001C83C1002083E10024382100284E4E +S21902FB998000209421FFD87C0802A69381001893A1001C93C128 +S21902FBAE002093E100249001002C7CBF2B787C7D1B787C9C2321 +S21902FBC3787CDE33787FE3FB783881000848001A252C0300005D +S21902FBD841800024A0DF0004A0FE00047FA3EB787F84E37838EC +S21902FBEDA100084BFFFE91386000004800001C3C6000033C8023 +S21902FC02000338633E2838843E4C4BFFAD553860FFFF80010039 +S21902FC172C7C0803A68381001883A1001C83C1002083E1002430 +S21902FC2C382100284E8000209421FFE87C0802A69381000893D6 +S21902FC41A1000C93C1001093E100149001001C3F8000037CBF64 +S21902FC562B783D200003807C48407CDD33787CFE3B7893E94816 +S21902FC6B444BFFA4F13D200003816948482C0B00004182001C6A +S21902FC80B3CB0004801D000039200000900B0000913C484048B8 +S21902FC950000143C60000338633E5C7FE4FB784BFFACBD800161 +S21902FCAA001C7C0803A68381000883A1000C83C1001083E10001 +S21902FCBF14382100184E8000209421FFD07C0802A6934100181A +S21902FCD49361001C9381002093A1002493C1002893E1002C90CC +S21902FCE9010034A3A600047CBA2B787C7E1B787C9C23783CA088 +S21902FCFE00037CFF3B7838A5FC34386100087FA4EB784BFFFB40 +S21902FD13D12C0300004080000C3860FFFF48000084813F0004E2 +S21902FD283C001062817F000060004DD37D2900161D6B03E8550D +S21902FD3D29D1BE7F6B4A143D4000033D2000033D60000393CACD +S21902FD52484093894844934B4848480019CD7FBAEB787C7E1B18 +S21902FD67783BE0FFFF3FA000033F800003480019B57C7E1850D3 +S21902FD7C7C03D8404080001848000559801D48402C00000040C5 +S21902FD9182FFE483FC48447F43D3784BFFFB957FE3FB788001A9 +S21902FDA600347C0803A6834100188361001C8381002083A100BC +S21902FDBB2483C1002883E1002C382100304E8000209421FFF0F1 +S21902FDD07C0802A693E1000C900100147C691B78880900002C91 +S21902FDE50000FF4082002C880900012C0000FF408200208809E5 +S21902FDFA00022C0000FF4082001488090003386000012C000091 +S21902FE0FFF418200643FE000037D234B78389F456038A00004D4 +S21902FE244BFFADAD2C0300004082000C38600001480000408878 +S21902FE391F4560389F45602C0000004082002C880400012C009A +S21902FE4E000040820020880400022C000000408200148804009A +S21902FE6303386000012C000000418200083860000080010014C3 +S21902FE787C0803A683E1000C382100104E8000209421FFD87C72 +S21902FE8D0802A693A1001C93C1002093E100249001002C7C7E96 +S21902FEA21B7883FE00047C9D2378387F00104BFFFF1D2C03001C +S21902FEB70041820020A09F00007FE3FB785484D6BA38A00000F8 +S21902FECC480003752C030000418200107FC3F3784800034148D7 +S21902FEE10000A8801F000C813D0000A17D000490010008912187 +S21902FEF6000CB1610010A13F0000A01F00025523D6BA7C03009A +S21902FF0B50B01E000C881F00092C000006418200384181001001 +S21902FF202C00000141820014480000582C0000114182003848A1 +S21902FF3500004C7C1F1A14901E00087FC3F3783881000848002F +S21902FF4A05054800003C7C1F1A14901E00087FC3F37838810028 +S21902FF5F0848000AE5480000247C1F1A14901E00087FC3F378AF +S21902FF74388100084BFFFA114800000C7FC3F3784800029980F7 +S21902FF8901002C7C0803A683A1001C83C1002083E1002438217D +S21902FF9E00284E8000209421FFE07C0802A69361000C9381005D +S21902FFB31093A1001493C1001893E1001C900100247C7C1B789E +S21902FFC883BC000480FC0008A13C000C7CFD38507D293A14B1C7 +S21902FFDD3C000CA01D000054E9352E5400053E600040007000BC +S21902FFF2F0FF7C004B78B01D000039200000993D00013D00008B +S21903000703A128484CA01C000CB13D0004B01D00023969000150 +S21903001CB168484C3940000038000040989D0009981D0008B17D +S2190300315D000AB15D00063D200003800945607CBB2B78901D22 +S219030046000C813B00007CE43B78913D00107FA3EB7838A00087 +S21903005B00480001E5B07D000A7F83E378389B000438A008000F +S21903007048000371800100247C0803A68361000C83810010835E +S219030085A1001483C1001883E1001C382100204E8000203D0029 +S21903009A0003800845702C0000004C82002038000001900845D9 +S2190300AF70380000047C0903A63C8000033D2000043D60000499 +S2190300C48144485038A91400390B13B038C005EA38E000007D4A +S2190300D9272A147120000239690002914800007C00002654009F +S2190300EE1FFE7C0000D07D6B00787D2900387D295B789128001C +S219030103107D0A4378B0C8000E390A001438E705EC4200FFC49B +S219030118914448504E8000209421FFE87C0802A69381000893F8 +S21903012DA1000C93C1001093E100149001001C3D2000043BE9EA +S21903014213B03BC000003F8000037FFDFB7880DF0010A0FF0023 +S2190301570EA11F000C813F00007FC4F3787FA5EB78387C3E8842 +S21903016C4BFFA7F53BDE00012C1E00033BFF00143BBD0014408F +S21903018181FFD03D2000033C6000038089485038633EB44BFF9A +S219030196A7CD8001001C7C0803A68381000883A1000C83C1008E +S2190301AB1083E10014382100184E8000203CA0000380654850F4 +S2190301C02C0300004D8200203CE00003814745683D2000038090 +S2190301D509456C394A00017CC050503C80000381644564810322 +S2190301EA00108003000039280014900548507C06580091230035 +S2190301FF089103000438000000B003000C914745684C810020DA +S21903021490C445644E8000203D400003812A45683D60000380EA +S2190302290B48503929FFFF912A4568906B4850900300004E8059 +S21903023E00203484FFFE41800018A00300003484FFFE7CA5027A +S21903025314386300024080FFF02C04FFFF4082001088030000A3 +S2190302685400402E7CA5021454AB043E54A9843E380000007CCC +S21903027DA95A146000FFFF7C0500004081000C3D25FFFF38A960 +S21903029200017CA928F85523C63E5463402E5520063E7C031B15 +S2190302A7784E800020A123000EA003000CA16300107C004A1465 +S2190302BCA1430012892300097C005A147C005214A06300027C2D +S2190302D1004A147C601A144E8000209421FFD87C0802A69381EE +S2190302E6001893A1001C93C1002093E100249001002C3F80000B +S2190302FB033FA000033FC00003386005EA4BFFFEB17C7F1B79F0 +S219030310408200183C60000338633EC44BFFA6454BFFFE0148F4 +S219030325000000809F00103861000838A005EA4BFFD2895460CB +S21903033A043E2C000000B07F000C41820074A0010014813C450F +S21903034F7C2C00080039290001913C457C418200182C000806DB +S219030364418200347FE3FB784BFFFEB14BFFFF94813D457480E3 +S2190303791F001039290001913D4574901F00047FE3FB7838810D +S21903038E000E4BFFFAF94BFFFF70813E4578801F0010392900C1 +S2190303A301913E4578901F00047FE3FB7848000F9D4BFFFF509B +S2190303B87FE3FB784BFFFE618001002C7C0803A6838100188331 +S2190303CDA1001C83C1002083E10024382100284E800020942146 +S2190303E2FFE87C0802A69001001C80040000A144000490010040 +S2190303F708390100083D200003B148000439694828A14B000440 +S21903040CB0A1001480094828A0A3000C808300109001000EB1C3 +S2190304214100127D0343784BFFCF393D600003812B458039296B +S2190304360001912B45808001001C7C0803A6382100184E80001E +S21903044B209421FFF07C0802A693C1000893E1000C9001001423 +S2190304607C7F1B78807F00087C9E2378A00300002C000800401E +S219030475820050A09F000C38A000004BFFFDC17C631B79408238 +S21903048A003C813F000838A0000098690000817F0008B06B0055 +S21903049F02807F0008A09F000C4BFFFD99813F00087FC5F37895 +S2190304B4B06900027FE3FB78388000014BFFFAE57FE3FB784B39 +S2190304C9FFFD55800100147C0803A683C1000883E1000C3821EE +S2190304DE00104E8000209421FFD87C0802A69341001093610073 +S2190304F3149381001893A1001C93C1002093E100249001002C93 +S2190305087C9B23787C7E1B78736000023B9E002C83BC000483F7 +S21903051DFC00087CBA2B784182004438000018B01C000C813FF5 +S219030532000C396000065169E0063C000204913F000C600005DE +S219030547B490010008387F00143881000838A000044BFF9C05F7 +S21903055C38000000B01E001648000020A13E0016396000053932 +S219030571290014B13C000C801F000C5160E006901F000C801F9B +S219030586000C396000005160C10E901F000C813E00542C1A001F +S21903059B00913F0004801E0050B17F0010901F00084082005474 +S2190305B0A01E0012B01F0000A13E00149B7F000DB13F0002A0E3 +S2190305C51E00162C0000004182000C63600008981F000D380023 +S2190305DA05B4B01F000EB35F00123D2000038009456039600023 +S2190305EF06901D000C813E0008997D0009913D0010A01C000CA4 +S2190306047FA3EB78B01D0002A3BC000C4BFFFC9D7C651B787F44 +S219030619A4EB787FE3FB784BFFFC21B07F00107F83E37838802D +S21903062E000638BE00084BFFF971801E00042C00000A4082005D +S219030643243C8000013CA0000338A508387FC6F378387E00183F +S2190306586084D4C048000B5D48000034881F000D700900034071 +S21903066D820010A01E00162C0000004182001C3CA0000338A543 +S21903068208107FC6F378387E0018388003E848000B2980010025 +S2190306972C7C0803A683410010836100148381001883A1001CC5 +S2190306AC83C1002083E10024382100284E8000209421FFE07CC6 +S2190306C10802A69361000C9381001093A1001493C1001893E120 +S2190306D6001C900100247C7C1B7883FC0008815C0004A0DF00C4 +S2190306EB00A0FF0002807F000480BF000839000014B11C000CE1 +S2190307003BEA0014801F000C39200005396000005120E0065159 +S21903071560C10E901F000C39200400B13F000EB17F0010B17F12 +S21903072A0012B0EA0014B0DF0002991F000D907F000890BF0036 +S21903073F043D200003800945607C9B2378900A000C813B0000F7 +S21903075438000006912A0010980A0009A13C000C7D435378B1AF +S2190307692A0002A3BC000C4BFFFB3D7C651B787FA4EB787FE3FE +S21903077EFB784BFFFAC1B07F00107F83E3787F65DB783880005B +S219030793064BFFF811800100247C0803A68361000C838100101A +S2190307A883A1001483C1001883E1001C382100204E8000203D7C +S2190307BD20000381294854396000002C0900004D8200207D2A52 +S2190307D24B787C0918004082001C2C0B00004182001080090039 +S2190307E700900B000048000008814900007D2B4B78812900002B +S2190307FC2C0900004082FFD43D200003914948544E80002094BE +S21903081121FFF87C0802A69001000C3880000038A000014BFF0E +S219030826FCC18001000C7C0803A6382100084E8000209421FF3B +S21903083BF87C0802A69001000C38000000900300044BFFFF7156 +S2190308508001000C7C0803A6382100084E8000209421FFF07C62 +S2190308650802A693E1000C900100147C7F1B7848000010800338 +S21903087A0000901F00404BFFF99D807F00402C0300004082FF63 +S21903088FEC800100147C0803A683E1000C382100104E800020D7 +S2190308A49421FFE87C0802A693A1000C93C1001093E1001490B3 +S2190308B901001C7C7D1B7838000000901D0004387D001848007B +S2190308CE097D7FA3EB784BFFFF8D7FA3EB784BFFFEE1800100FD +S2190308E31C7C0803A683A1000C83C1001083E100143821001842 +S2190308F84E8000208124000880E30050814900048009000CA191 +S21903090D64000C7D075051540036BA7D6058507D090214418111 +S21903092200707C0A38507D6058517D0802144081006081430034 +S219030937407D275A142C0A00003800000091230050900400004B +S21903094C41820030800A00002C0000004182001C7D49537881F4 +S219030961290000800900002C0000004082FFF47D2A4B78908A62 +S2190309760000480000109103004490830040916300483860000D +S21903098B014E800020386000004E8000209421FFF07C0802A60A +S2190309A093C1000893E1000C90010014812400087C7F1B7883FB +S2190309B5C90008801F00547D20F0514081006C387F001848003F +S2190309CA0881811F0054A15F00167D68F0505549043E7F8B4826 +S2190309DF004FFEE3827C000026540007FE7C0000D07D290078E4 +S2190309F47D6B00387D6B4B79408100307D2B50505525043E2CF9 +S219030A090500007C085A14901F0054B13F001641820014807FFA +S219030A1E0034386300147C835A144BFF9735800100147C080339 +S219030A33A683C1000883E1000C382100104E8000209421FFE059 +S219030A487C0802A69361000C9381001093A1001493C1001893FA +S219030A5DE1001C900100247C7C1B78807C0004A01C000C83FCF8 +S219030A720008B0030002A3BC000C7C9E23784BFFF82D7C651B1F +S219030A87787FA4EB787FE3FB784BFFF7B12C0300003B600000C3 +S219030A9C408203A03D20000383A948544800000883BD00002CF4 +S219030AB11D00004182037CA13D0012A01F00027C0900004082D1 +S219030AC6FFE8A13D00142C09000041820028A01F00007C0900D6 +S219030ADB004082FFD07FC3F378389D000838A000044BFFA0E538 +S219030AF02C0300004082FFB8801D0004817E0004A13E00082C8A +S219030B05000002917D000CB13D001041820024881F000D7009A5 +S219030B1A0004418200187FA3EB784BFFFD817F83E3784BFFF6F5 +S219030B2FF14800031C813D00043809FFFF28000009418102FC5F +S219030B443D600003396B3EE85400103A7D4B002E3D20000339FD +S219030B59293EE87D4A4A147D4903A64E800420881F000D70097D +S219030B6E00024182004038000002901D0004813F0004A17F0096 +S219030B830039290001913D0050B17D0014801E0000392000009B +S219030B98901D0008B13D004C7FA3EB78B13D00163880001248B6 +S219030BAD0002247FC4F3787F83E3784BFFFB0548000280387D31 +S219030BC2001848000685881F000D7009000441820010380000EF +S219030BD701901D000448000260700900024082023870090010A5 +S219030BEC41820250813D0054807F0008392900017C0348004054 +S219030C0182023C38000004907D0054901D00044800022C881FAB +S219030C16000D83DD005070090010418200107FA3EB787F84E33D +S219030C2B784BFFFD6D7FA3EB787F84E3784BFFFCC5881F000DDE +S219030C407C7B1B787009000141820024807F0004801D00507C40 +S219030C55030000408200143803000139200005901D0050913D44 +S219030C6A0004801D00507C00F00040820010A01D004C2C000009 +S219030C7F00418201BCA3FD00162C1F000040820024387D001824 +S219030C94480005B57FA3EB783880001038A000004BFFF841B3E6 +S219030CA9FD004C4800019038000001B01D004C48000184881F46 +S219030CBE000D70090010418201787FA3EB787F84E3784BFFFC1E +S219030CD3C9813D0054801F0008392900017C0048004082015840 +S219030CE838000000901D00047FA3EB784BFFFAC948000144885F +S219030CFD1F000D70090010418200607FA3EB787F84E3784BFFD5 +S219030D12FC89813D0054801F0008392900017C0048004082009D +S219030D2740881F000D700900014182002C813D00503800000A02 +S219030D3C39290001913D0050901D00047FA3EB783880001038E3 +S219030D51A000004BFFF7914800000C38000008901D0004881F27 +S219030D66000D70090001418200D0387D0018480004D5813D00AA +S219030D7B503800000939290001913D0050901D00047FA3EB7813 +S219030D90388000114800003C7FA3EB787F84E3784BFFFB5D88EC +S219030DA51F000D7C7B1B78700900014182008C813D005038006C +S219030DBA000A39290001913D0050901D00047FA3EB78388000A3 +S219030DCF1038A000004BFFF71148000064881F000D70090010E4 +S219030DE4418200587FA3EB787F84E3784BFFFBA9813D00548074 +S219030DF91F0008392900017C00480040820038387D0018480080 +S219030E0E043D3800000A901D0004480000247FA3EB78388000EA +S219030E230038A000014BFFF6BD480000107FC4F3787F83E37879 +S219030E384BFFF8852C1B00004082000C7F83E3784BFFF3D580D2 +S219030E4D0100247C0803A68361000C8381001083A1001483C1B6 +S219030E62001883E1001C382100204E8000209421FFF87C080242 +S219030E77A69001000C4BFFF461480004218001000C7C0803A655 +S219030E8C382100084E8000209421FFE87C0802A6938100089383 +S219030EA1A1000C93C1001093E100149001001C7C7D1B787C9C4A +S219030EB623783880000038A006444BFF93753D600003810B48E4 +S219030ECB54381D006C395D0058901D0034915D003039200001AE +S219030EE0380005EA93AB4854913D0004B39D0012B01D003A9128 +S219030EF51D0000915D003C386000008001001C7C0803A6838133 +S219030F0A000883A1000C83C1001083E10014382100184E800087 +S219030F1F209421FFF07C0802A693E1000C900100147C7F1B7812 +S219030F34480000084BFFFF39801F00042C00000041820010A08C +S219030F491F00162C0000004082FFE8800100147C0803A683E15B +S219030F5E000C382100104E8000209421FFF07C0802A693E100CF +S219030F730C900100147C7F1B784BFFFFA5817F0004696900045A +S219030F88200900007D20491469600002214000007C0A01147DE5 +S219030F9D2A03794182002038000007901F00047FE3FB7838802F +S219030FB2001138A000004BFFF52D480000242C0B000540820063 +S219030FC71C38000006901F00047FE3FB783880001138A000008A +S219030FDC4BFFF5097FE3FB784BFFF87D800100147C0803A683D7 +S219030FF1E1000C382100104E8000209421FFE87C0802A69381C3 +S219031006000893A1000C93C1001093E100149001001C7CBE2B87 +S21903101B797C7F1B787C9D237840810010801F00482C00000019 +S2190310304082001438600000480000B8907F0048480000AC3BAF +S21903104580000048000064809F00447FA3EB784BFF9109807F97 +S21903105A0040801F0048812300007FC0F050913F00407F9C0202 +S21903106F147FBD02144BFFF1A9807F00402C0300004182FFBC2E +S21903108481630008A123000C800B000C540036BA7D20485091F2 +S2190310993F0048800B000C540036BA7D6B0214917F00442C1E3C +S2190310AE00004182003C80BF00487C1E28004080FF90809F006F +S2190310C3447FA3EB787FC5F3784BFF9091813F0044801F004842 +S2190310D87D29F2147C1E0050901F0048913F00447F9CF2147FBA +S2190310ED83E3788001001C7C0803A68381000883A1000C83C1BE +S219031102001083E10014382100184E8000209421FFF07C0802BF +S219031117A693C1000893E1000C900100147CBE2B797C7F1B7828 +S21903112C807F00344081006C813F00043929FFFC2809000140B3 +S21903114181000C3860FFFF48000058A01F00162C00000040820B +S2190311560048213E05B47D2949107D294BB87D2048F87FC94807 +S21903116B38700005B47D3E0378386300147FC5F3784BFF8FE1B8 +S2190311807FE3FB78B3DF00163880001038A000004BFFF3557F24 +S219031195C3F3784800000838600000800100147C0803A683C121 +S2190311AA000883E1000C382100104E8000209421FFE87C080237 +S2190311BFA69381000893A1000C93C1001093E100149001001C78 +S2190311D47C7F1B787CBD2B787CDC3378909F0004480005453D8F +S2190311E920000381294858907F00082C09000093BF000C939FA0 +S2190311FE0010418200187C09F80041820020812900002C0900AA +S219031213004082FFF03D2000038009485893E94858901F0000B9 +S2190312288001001C7C0803A68381000883A1000C83C1001083CC +S21903123DE10014382100184E8000203D2000038129485839401D +S21903125200002C0900004D8200207D2B4B787C09180040820091 +S219031267202C0A00004182001080090000900A00004800001CBA +S21903127C81690000480000147D2A4B78812900002C0900004086 +S21903129182FFD03D200003916948584E8000209421FFE87C08E7 +S2190312A602A693A1000C93C1001093E100149001001C3D20004D +S2190312BB0383E948583BC000002C1F00003FA0000341820064B8 +S2190312D048000459801F0008813F00047C6018507C0348404165 +S2190312E580003C2C1E000041820010801F0000901E000048007E +S2190312FA000C801F0000901D4858801F000C807F00107C08039E +S21903130FA63BC000004E80002183FD48584800000C7FFEFB78CD +S21903132483FF00002C1F00004082FFA48001001C7C0803A6832D +S219031339A1000C83C1001083E10014382100184E80002094210A +S21903134EFFE87C0802A69381000893A1000C93C1001093E1003B +S219031363149001001C7C7D1B7883FD0004A13F0002A01F0000FB +S21903137869290800216900007D2B491468000001216000007CC9 +S21903138D0B01147C0B4839418200D83FC00003387F0018389ED9 +S2190313A2456038A000044BFF98292C030000408200BCA01F0036 +S2190313B7062C00000140820064813F000E38000002B01F0006E3 +S2190313CC913F0018801F0008391F0008A1280004901F0012384F +S2190313E19F0012B1240004801E45603D200003901F000E81493B +S2190313F6482839294828A1690004915F0008B16800043800003D +S21903140B1CB01D000C7FA3EB7838A008064BFFEFC948000050CA +S2190314202C000002408200483FC00004801E2BB03B9E2BB02C1B +S21903143500000041820034807C0008389F000E38A000044BFF94 +S21903144A97897C631B794082001CA01F000C817F0008813C0084 +S21903145F04B009000491690000907E2BB07FA3EB784BFFEDAD63 +S2190314748001001C7C0803A68381000883A1000C83C10010837E +S219031489E10014382100184E8000209421FFD87C0802A6936146 +S21903149E00149381001893A1001C93C1002093E1002490010004 +S2190314B32C7C7F1B787C9D23783860002A4BFFECF97C7E1B792F +S2190314C840820018480001007FC3F3784BFFED493860000048D7 +S2190314DD0000F4817E000439200004992B000539400001390022 +S2190314F2080038000006980B0004B14B0000B14B0006B10B0036 +S219031507023D200003800945603D400003900B000E392A48283B +S21903151CA1090004800A4828B10B000C900B0008813F00003DA2 +S219031531400004912B0018396A2BB0380000FF93EB00089801B1 +S219031546000D93AB000439200001912A2BB0980100089801000F +S21903155B099801000A9801000B9801000C3BA000073F800004D9 +S2190315703B60001CB37E000C7FC3F3783881000838A008064BCB +S219031585FFEE5D480001A17C7F1B78480000144BFFED49801C0F +S21903159A2BB02C0000004182FF30480001857C7F1850280300DF +S2190315AFF94081FFE47FA0EB782C0000003BBDFFFF4181FFB469 +S2190315C47FC3F3784BFFEC553860FFFF8001002C7C0803A683DF +S2190315D96100148381001883A1001C83C1002083E100243821DF +S2190315EE00284E8000209421FFD87C0802A693010008932100C2 +S2190316030C93410010936100149381001893A1001C93C10020E2 +S21903161893E100249001002C3D2000043B292BBC3B1900967C4E +S21903162D7B1B787C9C23787F3DCB783B4000007FBEEB787F63E3 +S219031642DB787FC4F37838A000044BFF95852C0300007F5FD36A +S21903165778418200383BBE000A7C1DC0003B5F000A4081FFD46F +S21903166C801B00007F63DB78901C0000389C00044BFFFE192C80 +S219031681030000408000283860FFFF4800006C7C1AC82EA13DAD +S2190316960008817D0004B13C0008901C0000917C000448000033 +S2190316AB4C3CC000038126458480FC0000390900011D29000A58 +S2190316C03D600004A15C0008801C0004396B2BBC7CE9592E7DD3 +S2190316D5295A142C080010B1490008900900049106458440825C +S2190316EA000C3800000090064584386000008001002C7C080374 +S2190316FFA6830100088321000C83410010836100148381001804 +S21903171483A1001C83C1002083E10024382100284E8000209489 +S21903172921FFF87C0802A69001000C3D20000039293200800948 +S21903173E0048386003E87C0803A64E8000213D20000380694519 +S2190317538838630001906945888001000C7C0803A63821000874 +S2080317684E80002087 +S2190317703C746F7069633E0048656C702061626F757420686512 +S2190317856C703F0000000068656C70000000005B2D77203C74B4 +S21903179A696D656F75743E5D205B656E7472795D0000457865D8 +S2190317AF6375746520636F64652061742061206C6F636174699F +S2190317C46F6E0000676F00002D62203C6C6F636174696F6E3ED3 +S2190317D9205B2D6C203C6C656E6774683E5D00446973706C6109 +S2190317EE7920286865782064756D702920612072616E6765200B +S2190318036F66206D656D6F72790000000064756D700000000084 +S2190318185B4F4E207C204F46465D00004D616E616765206D6190 +S21903182D6368696E65206361636865730000006361636865001C +S21903184200000A526564426F6F7428746D292064656275672057 +S219031857656E7669726F6E6D656E74202D206275696C742025ED +S21903186C732C2025730A000030373A33393A3235000000004F01 +S2190318816374203237203230303000506C6174666F726D3A2069 +S219031896257320282573292025730A0000004D6F746F726F6CE6 +S2190318AB61204D425800000000506F776572504320383630005A +S2190318C000000000436F707972696768742028432920323030EC +S2190318D5302C20526564204861742C20496E632E0A0A005241E7 +S2190318EA4D3A2025702D25700A003D3D20457865637574696EFA +S2190318FF6720626F6F742073637269707420696E2025642E25E9 +S219031914303364207365636F6E6473202D20656E746572205ED7 +S2190319294320746F2061626F72740A00000000526564426F6FDE +S21903193E743E200000002A2A204572726F723A20496C6C6567F5 +S219031953616C20636F6D6D616E643A2025730A00006F6E0000D2 +S2190319686F666600496E76616C6964206361636865206D6F64EC +S21903197D653A2025730A00636163686573203F0A000000257384 +S2190319920A20202025732025730A0000000062617365206164F4 +S2190319A76472657373000000006C656E677468000044756D70EA +S2190319BC2077686174205B6C6F636174696F6E5D3F0A00007749 +S2190319D16169742074696D656F757400000000737461727469FD +S2190319E66E6720616464726573730000000041626F757420747A +S2190319FB6F20737461727420657865637574696F6E2061742009 +S219031A102570202D2061626F72742077697468205E4320776902 +S219031A257468696E202564207365636F6E64730A0000004C6F74 +S219031A3A616420612066696C65006C6F616400000000454C4612 +S219031A4F20696D61676573206E6F7420737570706F727465646D +S219031A640A000000496E76616C696420532D7265636F72642055 +S219031A796174206F66667365742025702C20696E7075743A2049 +S219031A8E25630A00000042616420532D7265636F726420636F91 +S219031AA3756E74206174206F66667365742025700A0000000074 +S219031AB841646472657373206F6666736574203D2025700A0088 +S219031ACD000000417474656D707420746F206C6F616420532DBA +S219031AE27265636F7264206461746120746F2061646472657318 +S219031AF7733A202570205B6E6F7420696E2052414D5D0A000046 +S219031B0C2A2A2A205761726E696E672120436865636B73756DD4 +S219031B21206661696C757265202D20416464723A20256C782C28 +S219031B36202530326C58203C3E202530326C580A0000456E74F1 +S219031B4B727920706F696E743A2025702C206164647265737327 +S219031B602072616E67653A2025702D25700A0000496E76616C86 +S219031B75696420532D7265636F7264206174206F6666736574CB +S219031B8A203078256C782C20747970653A2025780A000000005E +S219031B9F00FFFF41CCFFFF4030FFFF4030FFFF4030FFFF41B4E1 +S219031BB4FFFF41B4FFFF41B4FFFF417CFFFF417CFFFF417C25D8 +S219031BC96308000A000000766572626F7365006C6F6164207262 +S219031BDE617720646174610000006C6F61642061646472657325 +S219031BF37300000000646F776E6C6F6164206D6F6465202854A9 +S219031C08465450206F722078797A4D4F44454D29000000006846 +S219031C1D6F7374206E616D652028495020616464726573732983 +S219031C32000066696C65206E616D65000000496E76616C69646D +S219031C4720495020616464726573733A2025730A006D6F646520 +S219031C5C6D000000496E76616C696420276D6F6465273A2025A5 +S219031C71730A00746674700000000054465450206D6F646520F8 +S219031C867265717569726573206120776F726B696E67206E653C +S219031C9B74776F726B0A00000046696C65206E616D65206D69B4 +S219031CB07373696E670A000075736167653A206C6F6164202595 +S219031CC5730A0043616E2774206C6F616420272573273A202593 +S219031CDA730A00000000526177206C6F616420726571756972CE +S219031CEF65732061206D656D6F727920616464726573730A00B6 +S219031D045261772066696C65206C6F616465642025702D2570D8 +S219031D190A0000454C4600556E7265636F676E697A6564206956 +S219031D2E6D61676520747970653A20256C780A0000006574686E +S219031D43300000000071756963635F657468000000515549436C +S219031D58432045746865726E65743A204E6F206672656520785B +S219031D6D6D697420627566666572730A000000000000007B631A +S219031D826D64737D00004D616E61676520464C41534820696DB6 +S219031D976167657300666973005B2D6C5D000000004D616E617F +S219031DAC676520636F6E66696775726174696F6E206B657074E2 +S219031DC120696E20464C415348206D656D6F72790000006663FE +S219031DD66F6E666967005B2D665D00000000496E697469616CC8 +S219031DEB697A6520464C41534820496D616765205379737465CA +S219031E006D205B4649535D00696E6974000000005B2D635D00A2 +S219031E15000000446973706C617920636F6E74656E7473206FBD +S219031E2A6620464C41534820496D6167652053797374656D20DF +S219031E3F5B4649535D000000006C697374000000000000000030 +S219031E54446973706C61792066726565205B617661696C61628E +S219031E696C655D206C6F636174696F6E732077697468696E206F +S219031E7E464C41534820496D6167652053797374656D205B4670 +S219031E9349535D000066726565000000002D66203C666C617302 +S219031EA8685F616464723E202D6C203C6C656E6774683E004563 +S219031EBD7261736520464C41534820636F6E74656E7473000041 +S219031ED2000065726173650000006E616D650000000044697322 +S219031EE7706C617920616E20696D6167652066726F6D20464C90 +S219031EFC41534820496D6167652053797374656D205B464953E8 +S219031F115D000064656C65746500005B2D62203C6D656D6F727D +S219031F26795F6C6F61645F616464726573733E5D205B2D635DDE +S219031F3B206E616D65000000004C6F616420696D61676520669F +S219031F50726F6D20464C41534820496D6167652053797374655D +S219031F656D205B4649535D20696E746F2052414D0000006C6F83 +S219031F7A6164000000002D62203C6D656D5F626173653E202DD6 +S219031F8F6C203C696D6167655F6C656E6774683E205B2D732010 +S219031FA43C646174615F6C656E6774683E5D205B2D66203C66FE +S219031FB96C6173685F616464723E5D205B2D65203C656E7472AC +S219031FCE795F706F696E743E5D205B2D72203C72616D5F61647F +S219031FE364723E5D203C6E616D653E0000437265617465206160 +S219031FF86E20696D6167650063726561746500002A2A2A2069C0 +S21903200D6E76616C696420276669732720636F6D6D616E643A4F +S2190320222025730A0000666973200000000066756C6C20696ED3 +S219032037697469616C697A6174696F6E2C20657261736573208C +S21903204C616C6C206F6620666C6173680000000041626F757420 +S21903206120746F20696E697469616C697A65205B666F726D617D +S219032076745D20464C41534820696D6167652073797374656D06 +S21903208B002A2A2041626F727465640A002A2A2A20496E6974C7 +S2190320A069616C697A6520464C41534820496D61676520537928 +S2190320B57374656D0A0000202020696E697469616C697A617449 +S2190320CA696F6E206661696C65642025703A2025782825732999 +S2190320DF0A00000000202020205761726E696E673A20646576EB +S2190320F469636520636F6E74656E7473206E6F742065726173D4 +S21903210965642C20736F6D6520626C6F636B73206D6179206E5D +S21903211E6F7420626520757361626C650A00526564426F6F7485 +S21903213300526564426F6F745B6261636B75705D005265644255 +S2190321486F6F7420636F6E666967000046495320646972656389 +S21903215D746F72790000004572726F722077726974696E672049 +S219032172696D6167652064657363726970746F72732061742066 +S21903218725703A202578282573290A0000646973706C617920A6 +S21903219C636865636B73756D730000004E616D6520202020203F +S2190321B1202020202020202020464C4153482061646472202088 +S2190321C6202573202020204C656E677468202020202020456EEF +S2190321DB74727920706F696E740A000000436865636B73756D01 +S2190321F0000000004D656D206164647200000000252D313673CC +S219032205202030782530386C5820202030782530386C582020EA +S21903221A30782530386C58202030782530386C580A00202030FB +S21903222F782530386C58202E2E2030782530386C580A0000002A +S2190322446D656D6F7279206261736520616464726573730072B1 +S219032259616D2062617365206164647265737300000000656E06 +S21903226E74727920706F696E74206164647265737300464C41D1 +S2190322835348206D656D6F72792062617365206164647265739C +S21903229873000000696D616765206C656E677468205B696E209F +S2190322AD464C4153485D00696D6167652073697A65205B61632C +S2190322C27475616C20646174615D0000000066696C65206E61A3 +S2190322D76D65000000696E76616C696420617267756D656E74AE +S2190322EC73000000726571756972656420706172616D65746592 +S21903230172206D697373696E670000496E76616C696420464CBA +S21903231641534820696D6167652073697A652F6C656E6774681F +S21903232B20636F6D62696E6174696F6E00496E76616C696420FB +S219032340464C41534820616464726573733A202570202825733D +S219032355290A0020202076616C69642072616E6765206973207F +S21903236A25702D25700A000000002A2A205741524E494E473A31 +S21903237F2052414D20616464726573733A202570206D617920C5 +S219032394626520696E76616C69640A004E616D65206973207443 +S2190323A96F6F206C6F6E672C206D757374206265206C65737396 +S2190323BE207468616E2025642063686172730A00000043616E41 +S2190323D32774206C6F6361746520256C642062797465732066D8 +S2190323E872656520696E20464C4153480A000000496D6167652A +S2190323FD20666F756E642C2062757420464C4153482061646419 +S2190324127265737320696E636F72726563740A000000496D61E6 +S219032427676520666F756E642C20627574204C454E47544820F7 +S21903243C697320696E636F72726563740A000000416E20696D0F +S219032451616765206E616D656420272573272065786973747356 +S219032466000043616E27742070726F6772616D2074686973209C +S21903247B726567696F6E202D20636F6E7461696E7320636F649E +S2190324906520696E20757365210A000043616E27742065726136 +S2190324A5736520726567696F6E2061742025703A2025782825B0 +S2190324BA73290A00000043616E27742070726F6772616D207208 +S2190324CF6567696F6E2061742025703A202578282573290A004A +S2190324E44572726F722065726173696E672061742025703A20C4 +S2190324F92578282573290A000000004572726F722070726F6754 +S21903250E72616D6D696E672061742025703A202578282573293B +S2190325230A000000006C656E67746800006D697373696E6720F5 +S219032538617267756D656E7400000000696D616765206E616DC4 +S21903254D65000044656C65746520696D61676520272573270090 +S21903256200004E6F20696D616765202725732720666F756E643A +S2190325770A000000006D656D6F7279205B6C6F61645D20626149 +S21903258C736520616464726573730000646973706C61792063DB +S2190325A16865636B73756D000000004E6F742061206C6F6164BB +S2190325B661626C6520696D6167650A0000002A2A205761726E3B +S2190325CB696E67202D20636865636B73756D206661696C757252 +S2190325E0652E202073746F7265643A202530386C782C20636F91 +S2190325F56D70757465643A202530386C780A00436865636B7314 +S21903260A756D3A202530386C780A00000000464C4153483A2034 +S21903261F64726976657220696E6974206661696C6564212C204C +S2190326347374617475733A2025780A00464C4153483A20257087 +S219032649202D2025702C20256420626C6F636B73206F662025C5 +S21903265E7020627974657320656163682E0A00000000746F6F6D +S2190326732066657720617267756D656E7473000000756E726538 +S219032688636F676E697A656420636F6D6D616E64000000005291 +S21903269D756E2073637269707420617420626F6F740000626FEE +S2190326B26F745F73637269707400426F6F7420736372697074EB +S2190326C700626F6F745F7363726970745F646174610000000055 +S2190326DC426F6F74207363726970742074696D656F7574202829 +S2190326F1313030306D73207265736F6C7574696F6E2900626FBD +S2190327066F745F7363726970745F74696D656F75740025733AA7 +S21903271B200000000025732000747275650000000066616C7363 +S219032730650000002564200030782530325800003A000000209D +S2190327450000003F3F00000A0000002E2E2025730A0000456E1E +S21903275A746572207363726970742C207465726D696E6174654D +S21903276F207769746820656D707479206C696E650A0000000050 +S2190327843E3E2000FFFF0BE8FFFF0C0CFFFF0C88FFFF0C94FF66 +S219032799FF0C20FFFF0C3CFFFF0D9CFFFF0DB0FFFF0F24FFFF21 +S2190327AE0E74FFFF0DCCFFFF0E10FFFF0A68FFFF0A68FFFF0AB1 +S2190327C378FFFF0A80FFFF0A68FFFF0A706C69737420636F6EF5 +S2190327D866696775726174696F6E206F6E6C79002A2A20696E7F +S2190327ED76616C696420656E7472790A00000055706461746500 +S21903280220526564426F6F74206E6F6E2D766F6C6174696C65F2 +S21903281720636F6E66696775726174696F6E0000004572726F74 +S21903282C722077726974696E6720636F6E6669672064617461A9 +S2190328412061742025703A202578282573290A000000000000E6 +S2190328560000FFFF0820FFFF0880FFFF0838FFFF083CFFFF0833 +S21903286B50FFFF08705265717565737420666F7220636F6E6674 +S21903288069672076616C75652027257327202D2077726F6E678E +S21903289520747970650A0043616E27742066696E6420636F6E6C +S2190328AA6669672076616C756520272573270A0000000000008E +S2190328BF00FFFF0610FFFF0610FFFF0674FFFF0630FFFF061014 +S2190328D4FFFF061C464C41534820636F6E66696775726174699E +S2190328E96F6E20636865636B73756D206572726F72206F722017 +S2190328FE696E76616C6964206B65790A000000000000FFFF392C +S21903291384FFFF3984FFFF3984FFFF3984FFFF3984FFFF39847C +S219032928FFFF3984FFFF3984FFFF3984FFFF3984FFFF3984FFEC +S21903293DFF3984FFFF3984FFFF3984FFFF3984FFFF3984FFFFD7 +S21903295239A4FFFF39C4FFFF39E4FFFF3A04FFFF3A24FFFF3AA5 +S21903296788FFFF3A88FFFF3A88FFFF3A88FFFF3A44FFFF3A6473 +S21903297CFFFF3A64FFFF3A64FFFF3A64FFFF3A64FFFF3A64FF33 +S219032991FF3A64FFFF3A64FFFF3A64FFFF3A64FFFF3A64FFFF1E +S2190329A63A64FFFF3A64FFFF3A64FFFF3A64FFFF3A64FFFF3ACE +S2190329BB64FFFF3A64FFFF3A64FFFF3A64FFFF3A64FFFF3A648F +S2190329D0FFFF3A64FFFF3A64FFFF3A64FFFF3A64FFFF3A64FFDF +S2190329E5FF3A64FFFF3A64FFFF3A64FFFF3A64FFFF3A64FFFFCA +S2190329FA3A44FFFF3A44FFFF3A44FFFF3A44FFFF3A44FFFF3A1A +S219032A0F44FFFF3A44FFFF3A44FFFF3A44FFFF3A44FFFF3A44FA +S219032A24FFFF3A44FFFF3A44FFFF3A44FFFF3A44FFFF3A44FF2A +S219032A39FF39BCFFFF39BCFFFF39E0FFFF3A04FFFF3A04FFFF0C +S219032A4E3A44FFFF3A44FFFF3A44FFFF3A44FFFF3A28FFFF3AE1 +S219032A6344FFFF3A44FFFF3A44FFFF3A44FFFF3A44FFFF3A44A6 +S219032A78FFFF3A44FFFF3A44FFFF3A44FFFF3A44FFFF3A44FFD6 +S219032A8DFF3A44FFFF3A44FFFF3A44FFFF3A44FFFF3A44FFFFC1 +S219032AA23A44FFFF3A44FFFF3A44FFFF3A44FFFF3A44FFFF3A71 +S219032AB744FFFF3A44FFFF3A44FFFF3A44FFFF3A44FFFF3A4452 +S219032ACCFFFF3A44FFFF3A44FFFF3A44FFFF3A44FFFF3A44FF82 +S219032AE1FF3978FFFF3978FFFF3978FFFF3978FFFF3978FFFF6E +S219032AF63978FFFF3978FFFF3978FFFF3978FFFF3978FFFF391F +S219032B0B78FFFF3978FFFF3978FFFF3978FFFF3978FFFF3978CA +S219032B20FFFF3998FFFF39B8FFFF39D8FFFF39F8FFFF3A18FF4D +S219032B35FF3A7CFFFF3A7CFFFF3A7CFFFF3A7CFFFF3A38FFFF44 +S219032B4A3A58FFFF3A58FFFF3A58FFFF3A58FFFF3A58FFFF3A64 +S219032B5F58FFFF3A58FFFF3A58FFFF3A58FFFF3A58FFFF3A5831 +S219032B74FFFF3A58FFFF3A58FFFF3A58FFFF3A58FFFF3A58FF75 +S219032B89FF3A58FFFF3A58FFFF3A58FFFF3A58FFFF3A58FFFF60 +S219032B9E3A58FFFF3A58FFFF3A58FFFF3A58FFFF3A58FFFF3A10 +S219032BB358FFFF3A58FFFF3A58FFFF3A58FFFF3A58FFFF3A58DD +S219032BC83031323334353637383961626364656600000000008E +S219032BDD000000503031004F4B000045303100453033004530CD +S219032BF2320042303100FFFF4E10FFFF5610FFFF4E7CFFFF5417 +S219032C07D0FFFF5350FFFF5610FFFF5610FFFF5610FFFF5008BD +S219032C1CFFFF5624FFFF5610FFFF5610FFFF5610FFFF5610FF94 +S219032C31FF5104FFFF5610FFFF5610FFFF5008FFFF4E60FFFF6A +S219032C465610FFFF5350FFFF5624FFFF5610FFFF5610FFFF56D6 +S219032C5B10FFFF5100FFFF5610FFFF5610FFFF5610FFFF56106D +S219032C70FFFF5610FFFF5610FFFF5610FFFF5610FFFF5610FF54 +S219032C85FF559CFFFF5350FFFF5610FFFF5610FFFF5610FFFF77 +S219032C9A4E6CFFFF5610FFFF5610FFFF5610FFFF54B0FFFF56E1 +S219032CAF10FFFF501CFFFF5610FFFF5610FFFF5610FFFF4E54C2 +S219032CC4FFFF54C8FFFF53500000000030313233343536373864 +S219032CD9394142434445460000000000000000FFFF6928FFFF83 +S219032CEE6928FFFF6928FFFF6928FFFF6928FFFF6928FFFF6995 +S219032D0328FFFF6928FFFF6928FFFF6928FFFF6928FFFF6928C0 +S219032D18FFFF6928FFFF6928FFFF6928FFFF6928FFFF6868FF95 +S219032D2DFF6868FFFF689CFFFF68D0FFFF68D0FFFF6928FFFFBF +S219032D426928FFFF6928FFFF6928FFFF6904FFFF6928FFFF6964 +S219032D5728FFFF6928FFFF6928FFFF6928FFFF6928FFFF69286C +S219032D6CFFFF6928FFFF6928FFFF6928FFFF6928FFFF6928FF80 +S219032D81FF6928FFFF6928FFFF6928FFFF6928FFFF6928FFFF6B +S219032D966928FFFF6928FFFF6928FFFF6928FFFF6928FFFF69EC +S219032DAB28FFFF6928FFFF6928FFFF6928FFFF6928FFFF692818 +S219032DC0FFFF6928FFFF6928FFFF6928FFFF6928FFFF68DCFF79 +S219032DD5FF68DCFFFF68DCFFFF68DCFFFF68DCFFFF68DCFFFF98 +S219032DEA68DCFFFF68DCFFFF68DCFFFF68DCFFFF68DCFFFF681A +S219032DFFDCFFFF68DCFFFF68DCFFFF68DCFFFF68DCFFFF690468 +S219032E14FFFF6928FFFF694CFFFF6970FFFF6994FFFF6A00FF26 +S219032E29FF6A00FFFF6A00FFFF6A00FFFF69B8FFFF69D8FFFFF7 +S219032E3E69D8FFFF69D8FFFF69D8FFFF69D8FFFF69D8FFFF69D3 +S219032E53D8FFFF69D8FFFF69D8FFFF69D8FFFF69D8FFFF69D84F +S219032E68FFFF69D8FFFF69D8FFFF69D8FFFF69D8FFFF69D8FF13 +S219032E7DFF69D8FFFF69D8FFFF69D8FFFF69D8FFFF69D8FFFFFE +S219032E9269D8FFFF69D8FFFF69D8FFFF69D8FFFF69D8FFFF697F +S219032EA7D8FFFF69D8FFFF69D8FFFF69D8FFFF69D8FFFF69587B +S219032EBCFFFF6958FFFF6958FFFF6958FFFF6958FFFF6958FF3F +S219032ED1FF6958FFFF6958FFFF6958FFFF6958FFFF6958FFFF2A +S219032EE66958FFFF6958FFFF6958FFFF6958FFFF6958FFFF69AB +S219032EFB80FFFF69A0FFFF69C0FFFF69E0FFFF6A00FFFF6A688D +S219032F10FFFF6A68FFFF6A68FFFF6A68FFFF6A20FFFF6A40FF05 +S219032F25FF6A40FFFF6A40FFFF6A40FFFF6A40FFFF6A40FFFF48 +S219032F3A6A40FFFF6A40FFFF6A40FFFF6A40FFFF6A40FFFF6AC8 +S219032F4F40FFFF6A40FFFF6A40FFFF6A40FFFF6A40FFFF6A40DD +S219032F64FFFF6A40FFFF6A40FFFF6A40FFFF6A40FFFF6A40FF09 +S219032F79FF6A40FFFF6A40FFFF6A40FFFF6A40FFFF6A40FFFFF4 +S219032F8E6A40FFFF6A40FFFF6A40FFFF6A40FFFF6A40FFFF6975 +S219032FA3C0FFFF69C0FFFF69C0FFFF69C0FFFF69C0FFFF69C08E +S219032FB8FFFF69C0FFFF69C0FFFF69C0FFFF69C0FFFF69C0FF3A +S219032FCDFF69C0FFFF69C0FFFF69C0FFFF69C0FFFF69C0FFFF25 +S219032FE269E8FFFF6A08FFFF6A28FFFF6A48FFFF6A68FFFF6A99 +S219032FF7B0FFFF6AB0FFFF6AB0FFFF6AB0FFFF6AB0FFFF6A88BD +S21903300CFFFF6A88FFFF6A88FFFF6A88FFFF6A88FFFF6A88FFF8 +S219033021FF6A88FFFF6A88FFFF6A88FFFF6A88FFFF6A88FFFFE3 +S2190330366A88FFFF6A88FFFF6A88FFFF6A88FFFF6A88FFFF6A63 +S21903304B88FFFF6A88FFFF6A88FFFF6A88FFFF6A88FFFF6A8830 +S219033060FFFF6A88FFFF6A88FFFF6A88FFFF6A88FFFF6A88FFA4 +S219033075FF6A88FFFF6A88FFFF6A88FFFF6A88FFFF6A88FFFF8F +S21903308A6A0CFFFF6A50FFFF6A0CFFFF6A50FFFF6A0CFFFF6AF3 +S21903309F50FFFF6A0CFFFF6A50FFFF6A0CFFFF6A50FFFF6A0CF8 +S2190330B4FFFF6A50FFFF6A0CFFFF6A50FFFF6A0CFFFF6A50FFF0 +S2190330C9FF6A50FFFF6A50FFFF6A50FFFF6A50FFFF6A50FFFF53 +S2190330DE6A50FFFF6A50FFFF6A50FFFF6A50FFFF6A50FFFF6AD3 +S2190330F350FFFF6A50FFFF6A50FFFF6A50FFFF6A50FFFF6A50D8 +S219033108FFFF6A50FFFF6A50FFFF6A50FFFF6A50FFFF6A50FF13 +S21903311DFF6A50FFFF6A50FFFF6A50FFFF6A50FFFF6A50FFFFFE +S2190331326A50FFFF6A50FFFF6A50FFFF6A50FFFF6A50FFFF6A7E +S21903314750FFFF6A50FFFF6A50FFFF6A50FFFF6A50FFFF6A5083 +S21903315CFFFF6A50FFFF6A50FFFF6A50FFFF6A50FFFF6A50FFBF +S219033171FF6A68FFFF6A68FFFF6A68FFFF6A68FFFF6A68FFFF32 +S2190331866A68FFFF6A68FFFF6A68FFFF6A68FFFF6A68FFFF6AB2 +S21903319B68FFFF6A68FFFF6A68FFFF6A68FFFF6A68FFFF6A689F +S2190331B0FFFF69A8FFFF69A8FFFF69DCFFFF6A10FFFF6A10FFB2 +S2190331C5FF6A68FFFF6A68FFFF6A68FFFF6A68FFFF6A44FFFF02 +S2190331DA6A68FFFF6A68FFFF6A68FFFF6A68FFFF6A68FFFF6A5E +S2190331EF68FFFF6A68FFFF6A68FFFF6A68FFFF6A68FFFF6A684B +S219033204FFFF6A68FFFF6A68FFFF6A68FFFF6A68FFFF6A68FF9E +S219033219FF6A68FFFF6A68FFFF6A68FFFF6A68FFFF6A68FFFF89 +S21903322E6A68FFFF6A68FFFF6A68FFFF6A68FFFF6A68FFFF6A09 +S21903324368FFFF6A68FFFF6A68FFFF6A68FFFF6A68FFFF6A68F6 +S21903325830313233343536373839000030313233343536373878 +S21903326D396162636465660000000030313233343536373839A9 +S2190332824142434445460000000000000000FFFF728CFFFF742C +S2190332973CFFFF743CFFFF743CFFFF743CFFFF743CFFFF743C78 +S2190332ACFFFF743CFFFF743CFFFF743CFFFF743CFFFF73D0FF0D +S2190332C1FF728CFFFF743CFFFF743CFFFF743CFFFF743CFFFF3D +S2190332D6743CFFFF743CFFFF743CFFFF743CFFFF743CFFFF7401 +S2190332EB3CFFFF743CFFFF726CFFFF743CFFFF743CFFFF7364CF +S219033300FFFF743CFFFF743CFFFF743CFFFF743CFFFF728C00FC +S2190333150000005E430A003078253038583A20000000002530B4 +S21903332A3258000000002020000020000000207C000025630078 +S21903333F007C0A0000202D2061726520796F75207375726520CA +S21903335428792F6E293F2000556E62616C616E636564207374A2 +S21903336972696E67210A00416D626967756F757320636F6D6DF4 +S21903337E616E6420272573272C2063686F696365732061726577 +S2190333933A20257300202573000A00000055736167653A0A0030 +S2190333A82020257325732025730A00002A2A204572726F723A1E +S2190333BD20257320616C7265616479207370656369666965646D +S2190333D20A002A2A204572726F723A20696E76616C6964206E87 +S2190333E7756D626572202725732720666F722025730A0000007F +S2190333FC2A2A204572726F723A20696E76616C696420666C61A2 +S2190334116720272563270A000000002A2A204572726F723A205F +S2190334266E6F2064656661756C742F6E6F6E2D666C61672061E5 +S21903343B7267756D656E747320737570706F727465640A0000EF +S2190334504E45544153434949000000004F43544554000000553B +S2190334656E6B6E6F776E206572726F7200000066696C65206E37 +S21903347A6F7420666F756E6400006163636573732076696F6CCA +S21903348F6174696F6E000000006469736B2066756C6C206F7286 +S2190334A420616C6C6F636174696F6E206578636565646564006E +S2190334B9000000696C6C6567616C2054465450206F7065726187 +S2190334CE74696F6E0000756E6B6E6F776E207472616E73666504 +S2190334E3722049440066696C6520616C726561647920657869A5 +S2190334F8737473006E6F20737563682075736572000000006F5F +S21903350D7065726174696F6E2074696D6564206F757400736FB2 +S2190335226D6520736F7274206F66206E6574776F726B206572BC +S219033537726F720000696E76616C696420706172616D657465CE +S21903354C7200000070726F746F636F6C2076696F6C6174696FF7 +S2190335616E000066696C65206973206C61726765722074686149 +S2190335766E206275666665720000FFFF8C20FFFF8C2CFFFF8C46 +S21903358B38FFFF8C44FFFF8C50FFFF8C5CFFFF8C68FFFF8C746D +S2190335A0FFFF8C80FFFF8C8CFFFF8C98FFFF8CA447444220634E +S2190335B56F6E6E656374696F6E20706F7274006764625F706FDC +S2190335CA7274000000004E6574776F726B20646562756720616C +S2190335DF7420626F6F742074696D6500006E65745F6465627572 +S2190335F46700000055736520424F4F545020666F72206E6574B4 +S219033609776F726B20636F6E66696775726174696F6E00626F78 +S21903361E6F74700000004C6F63616C2049502061646472657305 +S2190336337300000000626F6F74705F6D795F69700044656661F6 +S219033648756C742073657276657220495020616464726573739A +S21903365D000000626F6F74705F7365727665725F697000257366 +S2190336722E25640A00006E65745F696F5F777269746500000072 +S219033687006E65745F696F5F726561640000000000FFFF90D04F +S21903369CFFFF90D0FFFF90D0FFFF90D0FFFF90D0FFFF90D0FF3C +S2190336B1FF90D0FFFF90D0FFFF90D0FFFF90D0FFFF90D0FFFF27 +S2190336C690D0FFFF90D0FFFF90D0FFFF90D0FFFF90D0FFFF9081 +S2190336DBFCFFFF911CFFFF913CFFFF915CFFFF917CFFFF93A039 +S2190336F0FFFF93A0FFFF93A0FFFF93A0FFFF919CFFFF91BCFFB5 +S219033705FF91BCFFFF91BCFFFF91BCFFFF91BCFFFF91BCFFFF31 +S21903371A91BCFFFF91BCFFFF91BCFFFF91BCFFFF91BCFFFF918A +S21903372FBCFFFF91BCFFFF91BCFFFF91BCFFFF91BCFFFF91BC4A +S219033744FFFF91BCFFFF91BCFFFF91BCFFFF91BCFFFF91BCFFF2 +S219033759FF91BCFFFF91BCFFFF91BCFFFF91BCFFFF91BCFFFFDD +S21903376E91BCFFFF91BCFFFF91BCFFFF91BCFFFF91BCFFFF9136 +S21903378354FFFF9154FFFF9154FFFF9154FFFF9154FFFF915466 +S219033798FFFF9154FFFF9154FFFF9154FFFF9154FFFF9154FFA6 +S2190337ADFF9154FFFF9154FFFF9154FFFF9154FFFF9154FFFF91 +S2190337C29180FFFF91A4FFFF91C8FFFF91ECFFFF9210FFFF92A4 +S2190337D7B8FFFF92B8FFFF92B8FFFF92B8FFFF9234FFFF92549D +S2190337ECFFFF9254FFFF9254FFFF9254FFFF9254FFFF9254FF4D +S219033801FF9254FFFF9254FFFF9254FFFF9254FFFF9254FFFF37 +S2190338169254FFFF9254FFFF9254FFFF9254FFFF9254FFFF928F +S21903382B54FFFF9254FFFF9254FFFF9254FFFF9254FFFF9254B8 +S219033840FFFF9254FFFF9254FFFF9254FFFF9254FFFF9254FFF8 +S219033855FF9254FFFF9254FFFF9254FFFF9254FFFF92544E6F24 +S21903386A206E6574776F726B20696E746572666163657320664D +S21903387F6F756E640A0000000043616E27742067657420424FAE +S2190338944F545020696E666F202D206E6574776F726B206469F4 +S2190338A97361626C6564210A00000049503A20257300002C2095 +S2190338BE44656661756C74207365727665723A2025730A000075 +S2190338D3000000000025642E25642E25642E25640045746865A4 +S2190338E8726E65742073656E643A0A0045746865726E6574209D +S2190338FD726563763A0A006574685F6472765F6473722073682B +S2190339126F756C64206E6F742062652063616C6C65643A207637 +S2190339276563746F722025642C20646174612025780A00000010 +S21903393C000000002E2E2E2045726173652066726F6D2025704B +S2190339512D25703A2000002E0000000A0000002E2E2E20507299 +S2190339666F6772616D2066726F6D2025702D25702061742025A9 +S21903397B703A2000004E6F206572726F72202D206F70657261DA +S21903399074696F6E20636F6D706C657465000000496E76616CED +S2190339A5696420464C41534820616464726573730000004572ED +S2190339BA726F7220747279696E6720746F2065726173650000AD +S2190339CF004572726F7220747279696E6720746F206C6F636B48 +S2190339E42F756E6C6F636B004572726F7220747279696E672024 +S2190339F9746F2070726F6772616D0047656E6572696320657202 +S219033A0E726F720000004465766963652F726567696F6E2069BC +S219033A23732077726974652D70726F74656374656400000000D1 +S219033A38464C415348207375622D73797374656D206E6F742036 +S219033A4D696E697469616C697A656400000000556E6B6E6F7744 +S219033A626E206572726F7200000000000000FFFFA330FFFFA31D +S219033A773CFFFFA348FFFFA354FFFFA360FFFFA36CFFFFA378F1 +S219033A8CFFFFA384457272203D2025780A000000000000004665 +S219033AA172616D696E67206572726F72202D20626C6B3A20251B +S219033AB6782F25782F25780A0000435243206572726F72202D6A +S219033ACB2072656376643A2025303278253032782C20636F6DC7 +S219033AE070757465643A2025780A0000436865636B73756D2053 +S219033AF56572726F72202D2072656376643A2025782C20636FF4 +S219033B0A6D70757465643A2025780A00000043616E27742061E0 +S219033B1F63636573732066696C65000000536F7272792C207AD3 +S219033B344D6F64656D206E6F7420617661696C61626C652079B7 +S219033B4965740054696D6564206F7574000000456E64206F660F +S219033B5E2066696C650043616E63656C6C6564000000496E76E2 +S219033B73616C6964206672616D696E67004352432F63686563FD +S219033B886B73756D206572726F720000426C6F636B20736571C2 +S219033B9D75656E6365206572726F7200000000556E6B6E6F772F +S219033BB26E206572726F7200000000000000FFFFAFD0FFFFAF14 +S219033BC7C4FFFFAFB8FFFFAFACFFFFAFA0FFFFAF94FFFFAF889C +S219033BDCFFFFAF7CFFFFB074FFFFB074FFFFB06CFFFFB004FF94 +S219033BF1FFB06CFFFFB00CFFFFB044FFFFB04CFFFFB05CFFFFEE +S219033C06B05CFFFFB054FFFFB064FFFFB044FFFFB07CFFFFB0B7 +S219033C1B5CFFFFB064FFFFB064FFFFB06CFFFFB074FFFFB07CA6 +S219033C30FFFFB07CFFFFB07CFFFFB07CFFFFB07CFFFFB07CFFA6 +S219033C45FFB07CFFFFB064FFFFB064FFFFB064FFFFB064FFFFF1 +S219033C5AB64CFFFFB64CFFFFB64CFFFFB64CFFFFB64CFFFFB697 +S219033C6F4CFFFFB64CFFFFB64CFFFFB64CFFFFB64CFFFFB64CEC +S219033C84FFFFB64CFFFFB64CFFFFB64CFFFFB64CFFFFB64CFF24 +S219033C99FFB66CFFFFB68CFFFFB6ACFFFFB6CCFFFFB6ECFFFF2F +S219033CAEB748FFFFB748FFFFB748FFFFB748FFFFB70CFFFFB78D +S219033CC32CFFFFB72CFFFFB72CFFFFB72CFFFFB72CFFFFB72C53 +S219033CD8FFFFB72CFFFFB72CFFFFB72CFFFFB72CFFFFB72CFF6B +S219033CEDFFB72CFFFFB72CFFFFB72CFFFFB72CFFFFB72CFFFF56 +S219033D02B72CFFFFB72CFFFFB72CFFFFB72CFFFFB72CFFFFB788 +S219033D172CFFFFB72CFFFFB72CFFFFB72CFFFFB72CFFFFB72CFE +S219033D2CFFFFB72CFFFFB72CFFFFB72CFFFFB72CFFFFB72CFF16 +S219033D41FFB69CFFFFB69CFFFFB69CFFFFB69CFFFFB69CFFFFD6 +S219033D56B69CFFFFB69CFFFFB69CFFFFB69CFFFFB69CFFFFB60A +S219033D6B9CFFFFB69CFFFFB69CFFFFB69CFFFFB69CFFFFB69C0F +S219033D80FFFFB6BCFFFFB6E0FFFFB704FFFFB728FFFFB74CFF8C +S219033D95FFB7E4FFFFB7E4FFFFB7E4FFFFB7E4FFFFB770FFFF89 +S219033DAAB790FFFFB790FFFFB790FFFFB790FFFFB790FFFFB7EC +S219033DBF90FFFFB790FFFFB790FFFFB790FFFFB790FFFFB790FE +S219033DD4FFFFB790FFFFB790FFFFB790FFFFB790FFFFB790FF7A +S219033DE9FFB790FFFFB790FFFFB790FFFFB790FFFFB790FFFF65 +S219033DFEB790FFFFB790FFFFB790FFFFB790FFFFB790FFFFB798 +S219033E1390FFFFB790FFFFB790FFFFB790FFFFB790FFFFB790A9 +S219033E2825733A2043616E27742066696E64206164647265738A +S219033E3D73206F66207365727665720A0000005F5F7564705FD9 +S219033E5273656E64746F000000007564705F7265637666726F27 +S219033E676D202D2064726F70706564207061636B6574206F66E9 +S219033E7C2025642062797465730A00004275665B25645D2F257D +S219033E91703A206275663A2025702C206C656E3A2025642F255C +S219033EA6642C206E6578743A2025700A000046726565206C6920 +S219033EBB7374203D2025700A005F5F656E65745F706F6C6C3A2D +S219033ED0206E6F206D6F726520627566666572730A00000000EE +S219033EE5000000FFFFCC80FFFFCCD8FFFFCF54FFFFCD2CFFFFBE +S219033EFACD2CFFFFCDD4FFFFCE14FFFFCEB0FFFFCEF4FFFFCF2A +S205033F0F3475 +S219033F100000000000033F2C0003880000031D4000000000003B +S219033F2500000000000000000250680002508000025058000247 +S219033F3A504000024ED000024D840002547C00024C4400024C35 +S219033F4F3C0003433C0000000008003E2879B800007C2F2D5CC4 +S219033F647C2D00005B2D725D205B2D765D205B2D68203C686F82 +S219033F7973743E5D205B2D6D207B54465450207C2078797A4D47 +S219033F8E4F44454D7D5D205B2D62203C626173655F616464721C +S219033FA36573733E5D203C66696C655F6E616D653E00000000E1 +S219033FB8000260A40002A0B40002A0B40002A0B40002A0B4008E +S219033FCD02A0B40002A0B40002A0B40002A0B40002A0B4000227 +S219033FE2A0B40002A0B40002A0B40002A0B40002A0B40002A074 +S219033FF7B40002A0B40002A0B40002A0B40002A0B40002A0B44B +S21903400C0002A0B40002A0B40002A0B40002A0B40002A0B400E9 +S21903402102A0B40002A0B40002A0B40002A0B40002A0B40002D2 +S219034036A0B40002A0B40002A0B40002A0B40002A0B40002A01F +S21903404BB40002A0B40002A0B40002A0B40002A0B40002A0B4F6 +S2190340600002A0B40002A0B40002A0B40002A0B40002A0B40095 +S21903407502A0B40002A0B40002A0B40002A0B40002A0B400027E +S21903408AA0B40002A0B40002A0B40002A0B40002A0B40002A0CB +S21903409FB40002A0B400000000000000000000000000000000FA +S2190340B4000000000000000000000000000000000000000000EF +S2190340C9000000000000000000000000000000000000000000DA +S2190340DE000000000000000000000000000000000000000000C5 +S2190340F3000000000000000000000000000000000000000000B0 +S2190341080000000000000000000000000000000000000000009A +S21903411D00000000000000000000000000000000000000000085 +S21903413200000000000000000000000000000000000000000070 +S2190341470000000000000000000000000000000000000000005B +S21903415C00000000000000000000000000000000000000000046 +S21903417100000000000000000000000000000000000000000031 +S2190341860000000000000000000000000000000000000000001C +S21903419B00000000000000000000000000000000000000000007 +S2190341B0000000000000000000000000000000000000000000F2 +S2190341C5000000000000000000000000000000000000000000DD +S2190341DA000000000000000000000000000000000000000000C8 +S2190341EF000000000000000000000000000000000000000000B3 +S2190342040000000000000000000000000000000000000000009D +S21903421900000000000000000000000000000000000000000088 +S21903422E00000000000000000000000000000000000000000073 +S2190342430000000000000000000000000000000000000000005E +S21903425800000000000000000000000000000000000000000049 +S21903426D000000000000000000000000000000FE000000FE0038 +S21903428200000040000000000000FF000000FF000000001000D1 +S2190342970001000000FA100000FA1000000000000401000000F0 +S2190342AC00000000000000000080000000000000000000000075 +S2190342C1000000000000000000000000000000000000000002DE +S2190342D68290000282EC000000000000000000000000FFFFFF4C +S2190342EBFF00000000000000000000000000042F240000000060 +S21903430000000000000000000000000000000000FFFFFFFEFFA6 +S219034315FFFFFE0000000000001E1400001E14000001F4000036 +S21903432A0000000000000000000000000000000000000002D2A2 +S21903433FDC0002D7840002D5700000102120423063408450A502 +S21903435460C670E781089129A14AB16BC18CD1ADE1CEF1EF1219 +S2190343693102103273225252B5429472F762D693398318B37BC8 +S21903437EA35AD3BDC39CF3FFE3DE246234430420140164E6748F +S219034393C744A45485A56AB54B85289509E5EEF5CFC5ACD58DC1 +S2190343A8365326721611063076D766F6569546B4B75BA77A9722 +S2190343BD198738F7DFE7FED79DC7BC48C458E5688678A70840BB +S2190343D2186128023823C9CCD9EDE98EF9AF89489969A90AB917 +S2190343E72B5AF54AD47AB76A961A710A503A332A12DBFDCBDCE3 +S2190343FCFBBFEB9E9B798B58BB3BAB1A6CA67C874CE45CC52C1D +S219034411223C030C601C41EDAEFD8FCDECDDCDAD2ABD0B8D6846 +S2190344269D497E976EB65ED54EF43E132E321E510E70FF9FEFBA +S21903443BBEDFDDCFFCBF1BAF3A9F598F78918881A9B1CAA1EB13 +S219034450D10CC12DF14EE16F108000A130C220E35004402570A6 +S21903446546606783B99398A3FBB3DAC33DD31CE37FF35E02B146 +S21903447A129022F332D24235521462777256B5EAA5CB95A8851B +S21903448F89F56EE54FD52CC50D34E224C314A004817466644762 +S2190344A454244405A7DBB7FA879997B8E75FF77EC71DD73C26C0 +S2190344B9D336F2069116B06657767646155634D94CC96DF90E9E +S2190344CEE92F99C889E9B98AA9AB584448657806682718C00819 +S2190344E3E1388228A3CB7DDB5CEB3FFB1E8BF99BD8ABBBBB9AE2 +S2190344F84A755A546A377A160AF11AD02AB33A92FD2EED0FDD77 +S21903450D6CCD4DBDAAAD8B9DE88DC97C266C075C644C453CA24D +S2190345222C831CE00CC1EF1FFF3ECF5DDF7CAF9BBFBA8FD99F68 +S219034537F86E177E364E555E742E933EB20ED11EF00000000023 +S21903454C0000000000000000000003E800000000000000000067 +S2190345610000000000000000000000000000000000000000003D +S21903457600000000000000000000000000000000000000000028 +S21903458B00000000000003200000031FF000031F8000023E28D4 +S2190345A000031F1400031EE400031EDC00023A4C00031ED40049 +S2190345B5031EBC00031EA000023C5000031E9800031E5400038C +S2190345CA1E500002452400031E0800031DE400031DDC00024789 +S2190345DF8400031E4800031E1800031E100002463400031F7852 +S2190345F400031F4400031F1C000238980003183C00031824009E +S2190346090318180002285400031810000317E8000317CC0002CE +S21903461E2A4400031D9C00031D8800031D800002370400031DB0 +S219034633D400031DA800031DA000022F60000317C8000317ACD5 +S2190346480003179400022B3C0003178C0003177800031770007C +S21903465D0229D000031A4400031A3800033F68000254D40003B8 +S21903467226B00003269C0000000000000001000000010000008E +S21903468700000326C8000326BC000326B0000000010000000462 +S21903469C0000000000032704000326DC000326B00000000100F4 +S2190346B1000002000000000003361C000335F800000000000065 +S2190346C6000100000001000000000003363800033624000336CE +S2190346DB1C00000000000000050000000000033660000336448B +S2190346F00003361C000000000000000500000000000335C40057 +S2190347050335B0000000000000000100000002000000000003A9 +S21903471A35EC000335D000000000000000010000000100000057 +S21903472F0000022CD8000000000002CE440000000000031D48EB +S2190347440002509800033F14000000004E800021000000000029 +S20B0347590000000000000051 S804020100F8
index b09cd39d08160b6bf2a98b04079f7c0830a99dff..8629f1b8fe1ea93beac8b6b677a39e14cd814bb6 GIT binary patch literal 88344 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
index 98b37c3b6b2fc98a7c85be94de209878f07a7c42..670839058e3e616a42ea16a247231647ff623d9c GIT binary patch literal 315808 zc%1CL0dy3{l{Q+f8N`ev+v8;H$VNg#Bs&rkifm-j!;HizU}r$&kGvKONpLb+iL7ME zuAGp~VD~URlAM(ce*XxOM8sf=UC@KX#v&&F;@H@7%=*9|XBWSaJ>&#CVvRRolMPur ziEM-VeYdK5G!l})*?-SFZ>f8Z)IHtRRdsLOx^?fZTUGHpm*1sjXe<R8%!~ipDC5s6 znKN*hi8~*2vSM~E%cl2Z9|TtMKkb%1_>n2!XiS@r%X~Jf)ekY|S|$F{-e)j2%ETX| zG&~)fnR@S>_Im{i6ev)jK!E}U3KS?%pg@5F1qu`>P@q780tE^bC{Un4fdT~z6ev)j zK!E}U3KS?%pg@5F1qu`>P@q780tE^bC{Un4fdT~z6ev)jK!E}U3KS?%pg@5F1qu`> zP@q780tE^bC{Un4fdT~z6ev)jK!E}U3KS?%pg@5F1qu`>P@q780tE^bC{Un4fdT~z z6ev)jK!E}U3KS?%pg@5F1qu`>P@q780tE^bC{Un4fdT~z6ev)jK!E}U3KS?%pg@5F z1qu`>P@q780tE^bC{Un4fdT~z6ev)jK!E}U3KS?%pg@5F1qu`>P@q780tE^bC{Un4 zfdT~z6ev)jK!E}U3KS?%pg@5F1qu`>P@q780tE^bC{Un4fdT~z6ev)jK!E}U3KS?% zpg@5F1qu`>P@q780tE^bC{Un4fdT~z6ev)jK!E}U3KS?%pg@5F1qu`>P@q780tE^b zC{Un4fdT~z6ev)jK!E}U3KS?%pg@5F1qu`>P@q780tE^bC{Un4fdT~z6ev)jK!E}U z3KS?%pg@5F1qu`>P@q780tE^bC{Un4fdT~z6ev)jK!E}U3KS?%pg@5F1qu`>P@q78 z0tE^bC{Un4fdT~z6ev)jK!E}U3KS?%pg@5F1qu`>P@q780tE^bC{Un4fdT~z6ev)j zK!E}U3KS?%pg@5F1qu`>P@q780tE^bC{Un4fdT~z6ev)jK!E}U3KS?%pg@5F1qu`> zP@q780tE^b{1<?6|Kb5-3;v$QpUH03`x$H4{p$0<2xF0^3T8AFmm7OB28<TRfR1PX z!(_hyZ)^O27J`vc;OS$8-+wpUt^_V^|BPwcKjXh$`(KK`V;cM&R{{RcY4CSm1^CaH z2LBmX0sfiO;GcOF;6HO3{AXST_`9aT-*pw>@16#K_f>#@)-?EMT?P1OPlJE<Re*oa zH2CLS1^8bx4gS|$1^8b(4gS|&1^8b#4gS|%1^9cW!QXQg;D7xz_+Nh&;Qx_n@c+nF zfd5CQ!T+OI0sh`;@b_K?_}?%M{x@6&_}@4U{x@C)_<w8~{6BUT;Ga7U{<&8H{x?m7 z|4ml`{x?s9|IJqc{<EgRf7Vrif8I3s=UoN(=TC!w{#Ahg>}l|yeHGweFb)0%|LyP> zc(R$s#zH>7Z+yLQAQ*AdGiEU76Gn7X>i2S{l^JcD2E_Hp1I;vV-uBXf5taARmj)!= zGWfR<t%$C{5T1SN*|5=cbJQ?E=gyBujU9^z!ffgOpbzinEH{mc#RFn49(6MDtP|IM z{N7zqX*h~Qwe8HOH(3|-PW<h*E_6DWbE}g%`8(5kSA09?wD`7y@pS#nx3!r$k=`ns z!C0u>PWSP1cDiIU^Wv`v&$UQX{g8M*A7$gZJFv=d^0M<x2V+SmV|o+v>qNOuUhX-8 zZ_vbdTBP%qJvwM=IDGVtH|Y@R`EOoFN*h=u$_N@$rPJr&5BVfD{^!~{$2t;bORfpC zaATM)x<=CY_H-KKIo{RG!*yqvHLnS?|4R!q=ZrA&L4M82M%I^1Ff+N6bxroYasQ_V zkS532f@^|#jHhwkiMml8YMIL@%#Nat+mXhZe39iQPqDlnjrn@!u%ez?R@~Fb%6by4 zqGu<o?0J#tJ*QZ3i^f7*=CCDOYFT(oBU`>D!Roi{WDQ$hWUIEEVyk;K7U`YCntN+m zOK&4v*PCE%y*t_Z-WOT4_Y^bie2hl)zi#~f2!FrKpn7(qj+;@xt*A?q*9|n9NHf7d zMTW7*0bZ+a`)^N&^6aR<X}KwR%rthn?yfa~&(7StYZIt{<E-enUPRxRgkFh%XMHPv z`wtd)GPiozVvWCLdELKdY{hTSKkxr7(|Y)O&qB%buAY||GyjV91&8qa<@tMzm!svP z+{&#+XSCcnN-;IgIp!SJHd%Q(o}0kIOt3C<C);c^ItGj`{OxrNB!F`QIGdoc2^uFr z;{<4&0F4u%aRM|>fW~&ZcF?#TG;Rlt+d<=Y(6}8mZU>FqLE{e4xC1oq0F669;||cc z12pacjXOYNgE21u>LX4c=L07A!9;ycv^(l)qMln(&!q9!zw;U2MLnN&4B&YVo_p}z z3p}0l4avvlj5QOl2zo3xA&<@&iNYx7tq7yG^B66>4ZZ1fp?XA`%uDJaWWdHlpqY*` zy)+)7%p8;Q!8a4r8#_y*G*)e$GkU^sWeoJr(Q<lgHBWD&=Iu>rxxG8JyxtczU+*cc zD5+^>iy-d;hi+$yYF4R7EGt&*7zm*5fnlaC3h}tFIrPrhI4eqYqW6n%UE~w*%zPFG zUpOL7*Mtn0W1t$(tMR_KJFu$v?EuwfP7oqEIV-Tb_q&1hVV3z7lDR<>fBmDH-c+(n z?<_g4?=Be*v#qzKzY7lG{mXM9|4Yv4opT}2=X#Om8cL%#%`L*cW+G4X*}!V~EF5ON zzp?9}y90XQ`+;I3AHRLPPU~nqG4dQy-~_yxi}0a38u`OCPMjm$I=&Dv%Wh^2Y1h$r z9eV?jpy~OGf<ulok<QQj%-G@kcD#SI&FHLZGfZE7-Y&-(S$>1D`%FFR&`RGC9Z{wk z-~Dz}Z)7eVOciF^4wX5q(NH_f>3uX{LQcDSQC|Gw2hn)&C(-yX--(vx^Rm4%&pzaL zQvmH`=YjF<edP1?GK?P~ljTuaraRDC#^^iiaG3o=ew}4KhcbNr;O%(FD&tMRj8gj$ zu3`3#qj<la@<ZMmcs>cXoOl6kuJLkq1lsf;`MSdFvHOjtSsUb7m}AE9{JXxcvAk0C z+@&Wdzb#)uT{Yw%1n-{bJa~%bfXBTkC&PHWFdAytmY8woq;^KTqQ1Qk@jA4#B{B4o zSmX;)KXAI+N4%{S1zCpBK|DeSsSagu9VNDE(*X5>yCWhU>N1j+FZxaIJelv%WckuP z`k-mJ9RrO%533GcEAsVk8sK@~B(DAv=J^z}hJ(yGp&rguJwAM1ITP~AnF=SaqnM9F z|7e=~N|^OPA7CCy^V4CLya<-?QhPw2<v>n&ME{4}A=*P$U_9}l4QMROqkcjB;xAd) z5_sD`Vibgl*UDnmb<ssbq8#%DAo45lz{a`fk^hc>1zA&YhWf{8l$FQJLcWlp9+c@t znYpseJ-o~W3!~iSD7PNvHlW<qMr>Bp*j^Z|_Kj-(l2Xab>@UE}nvQWqKgD#v#)4t? zc!^BoK^h;@tV>H1LYgH=Gov~*s>T2Q?P$F7ji`SaWCW#o5qS=?3_tn-wFh|jJ!*g8 z7ec**)IUP0epQ+qX8-d=qA%Vpk?(TQhCb9c1o^5%zK6o>yI(h{{)98|0^ZAkcRlcK z0N$%4-UlV#I`9qx?-1}_f_#?CzG<Z6kLSg}uR_w`8)^9YfFIiYv0KLDR~kygPxI6F z0>7Iiej})3k?8-dlJiS~6=R%$>@017PWTIc-^eQRc010XO!U)l-9d5)>7S#q^@{pO zB#oz|lBc87^pA+_AJIwr$7S=H&_5zMsk~xgA$x%Ha@j6A+9il~387t<pk2b$F0yTg zWk2wuU2@Sbd7yt0jlI-1i$M3l-hi2O<8O9gU6^HUlQccY+pasXmHLdC9Y}JSe%4qI zJH~5tvikTNA4Dl`GRz+OI=?p^7odB;XBIdv7((t;&^L)zV||ciKN(@~|C5o;pXVkP zIYxr)bv%3hNyE*{D;9jYP!F?5N=Vnzn~e2nD<;c03tn9%(&!$NwZs#6)(ASdWZPHB z_r>vD7<2lW6Yp!qm`eHS&3b1bg6A1{UIH3ugfsDu?9*P*Fc&n;0}XBZNj(B`q!w}n zItch2dIW<W!JtPl=n<^U9&-arG2T81Uf)p|HJ&Mr27a=zCCuD+5=}84I#I`0jM>Mi zt_Or1GS-_L8H-<7=8ZT1G78+UmonSHbC2OTLiek6hh-HrHUqls=4#;MU%SxPz&s0M zb*x;-i-o?}vSr@bQm%XY%mV0D`P4_)YMA!U#3IH9^O>`!nm-HoUgX!1pqKxcD0|a> zJS(Ge1Ftj4hm6;#uJP?Rdm;N8WZDZd?L(kj8K)a)1O3ti{n86w%mp3uKt~_wSOhv2 z3p#!vWQ67{?w#W->#cQG^fo#xdlOE`3@2oU6EedInc-ZXqNN)$x)k&@K+i`DQRd8x zoQ}}T;sq~714Bg53>R<PPVfrJ6V5B`Zw7WcT|(B6YQ1#<(_iARAbBF?DTBPp&`&vi zBrBmy{E*9=jyIx&TYTVc$ed3Oa+yQ&CM8d|?G=4P+iDaXp*GxQ?sWQy_v44(LH#n; z=nkfdcCv;=JNXZeZzuo3^ma<|c_LN!k}%UMfun}8+=H<P?VzoQzkah9I>qMr*&j!5 zD}kO`vecs&V2oqoX#8wgk1cXU@qV3bBj|zMZ{qiAsmGnB{zvqnK3MI0{mH;4V|`=E z>rW=LjrBc2#|Ysr`mg5aa$y*Kz96tQ(Hcl54fJQ0!N-mG(5iamzZ$w{LduCQ^YOq| z(7P!9(mPSo^}_5&jYgd7Ol2MP9P|mZL#@V_XGKN*ZqK9s8Gn<WcUObwmhf*O>xuS) z4$nR!^C(Ws<Cd{J{9R*tbiHSSZ#XZ4zdFEQ9pJAH@K*=;3*SRFIw2dKkd00*8}0t| znFRC6cFLX5PPysr1l`}szl$)JyfSeWYXkI7=4j|V|GZ%qMoAX&@obp*(z2jiE=iDI z>EXg?tVOTTf6cU(v&>VL1$$!dXj?3_ENZa&`q<jVxI(Xf`SVfk7x^{Q>3i_fVdJIw z(yp=EL_dP9JO{RNEo|jRW<VyHkV&18NnMahn<107k{mK0glz?#liJESSQ-UAb?_R= zK<KC+++xmRIZ}3d(VrvYUh5+r%l-|0wab=Od~AJ`IpZ%Z^Fp42_J12o1eiy6+ww^Z z3wr8j#?w<jGfqB1Hpy~5^j`1QJ5gqZyx*MC`*v`-y%pu$fM@5Z4~N-PcN)z$ALy_l zzWE;B9g9Ezb`*9STLk@g5$q@9v5|ecp#zt1{-PK%5VA8zkLmsReH8sl!?PKogmseh z^=t2d=K3zYdlGqd%DngBzDwRefp<M!s5g~Eb&tRBHqmp{BGj2=66AYU*KCeg7Woq5 zZ+{TooQ=U7zac+IV(~9<Iq~S1fYSzj5c$;xe#Nv$A4ehhF8-@`qJrMmb7i@lHo0kK z-vFM&xRp_cHuE4IjU^3IhpH!;7G|3psh!D=tu-^8!oK;Y9M7%8U1FRp=Xzd*(rd%` z{YClPf#1g_wB>WMZ?Fk{gQd4+$3<bAQGbMt{0y~Y`ZFnSQQmh*-}H`8|HSoDrUr>8 z;=>tH!;L;sh-*{0-e^L9h~$nmG|e1sU^AaHnjH8>E2gwNW6TLYU*(4$y1y0n0q~10 ztc&7V3&sYv2z3vfV$FdBYk@x75<d+&{Sf5bFNp`fbBB~)2f7NF!^r>LK8$%<@odf$ z$5GEA&KGEF(EnhVb$*NF6wwfQ+WJN@wI{W67xbDwCu5J4V$A47o4a{Co--aRj6%=I z>O=cd{yO(Pk81QA`NDqbtRCNn5APUjLlzQk*!gpz6Ij$oiu-TIcn+NH@tkDSm>o(y z+i@1pG?Qcimx-(mWAu8A(NT=i2F7R;V{|9R=q`-Wn=wWwrEC%QD)emIW+lHz*=(kf z3_<^qWh^)rW*<F@GND_uR!K+lgK!@<>?bG5XT8%u0{iJ(>Gm_1^Js@O`&rs@3qXsH zem!N&p$-%5IibhaqHc}Q#S+lPCg`-n)|k(vEwi1EVe!CfuIJ%-un9)FNjl>Xo`n3^ zFxI~ofT!AjDEb6z;r^Wvrz_JR4Q$qb6i9~I({s3gfOL&mV5`180J-vXt%>(0-kT=_ zeOz8$#Ji>i;IH;IiR!>sjG?QmOF%z2tEcfdnH|_J+eYY|zz1!TgEsL@p?^+kQ*xjC zc)Kd(FR40-YjA4&GI><=;i?g7Up9^DL-?NSL&@Fa?XRj`q%)`NOW2Fhhd{^VHmR#h zzNke0*OLx8jQ$2Y_4?nSej7rP&alar=uK6J!z{5BX`V~7NpsMj$v)Smy||w2PuLJ4 z^npC{5X%*IL}0bynCmszDtd17VosQuB>&f8tnh?c^epnakchFoGHK)Vv<3{c^>S|0 z?qI$!`^fdUUf_CVo-fVUw4jLO1M=I8x`pg<QNC*?THxIyS6~mHki0szy#V^A=qhyu z(A6dA`af$grK{(2kb9lB|H9l0-hxd=JQ-iZ>djbSyU@$Oakk^Nz;^PN1zyh}KPK5a zIW*n{Ue`EZn>PoxHn1Pp7zHd8f{c-4mW46mq)Bp_>#}CIlsQLa+quwo7_%Pkwry_m zbCItut$kghedDbt^91B>4%rgsV;BoLT?dzr>2#0<T&H{b?lGONYRQ;R7r%vM1^Cm_ z`^j(kjkD%=16#?DC-Qpg;+T$^%4^2td2Rd!**wyo-H!e$^7$s^v;US$>-2*|Y56p# z<<pb0c`j@3SpBl!)}!qk(Dtj)_N&qM&6D)oCH|86!)g8Y%a``sN3NIswrgs?(B|Ka z@3-8B$+*-nwE5Jf{B;fbkmj`eB<W>oej%Bz3Uct8S3yhS6WHlb9z`Fb{_W#^3w_3D z%79*IS$Ov(y+b}rKp&m#3($IvvBsurWuF-TW7W33$9bq5^7Q+GB;I4pjnVkf2EGz` zcfh9ZME;$W{|_!oK9qI4<4BkpzayL0_Fd^a8SJ1Ze=h4m?Hd;L7<}y#KH)rN>_<7x zvTxTTeFNHc720(*+BG8EHCOiSW9Zw*(Y`0pz9-SX!)V{rXv1@pwC`cG?=D=o<BzUS z;O_wbo|{BY_n|Gf!@iy)+I#*%+1_7GOVf`u&{ZG4DAT-xG&<6(NlUW_X`nYg{0rO< zQaWQa5G6iC+WK@JL%IV<w_oOU0q<KT@Yg}4c@AkF5os#DNMj<+*V57qAr1Qe!>!|a zu(BeJ2Q!i8h>&p)-+L(!W`8}*oP%hC?UD!caQ|EyKOPy+kCpZKrWW5Acy~Ba%MQx- zuAW*pB*&7iiAFXQo15YFbGzB`ZIXep6763M_o`6O9Ck328cQnIh1mnp|D9#X?|>|q z=IS8#zV})huTvd|#(4dEFQ)POpy0868!qMb2kxGl*B`he%p3=}&XQn#&>PkpPC5Q* z0vA61IWz3>Px{L$p{s6qkKPMEImXVt(0O>C8&09F=ob%stJuM=gB>dMojcG$Xsp}- zecTbUaRqK=DElDET|B>AwvR2_58}HDeDet2<&Yl4>H8eUA@^kC(EW{OUSMm-#lZFk z_m3Cx@yHbZ0`jv%=ayp*i%=a&CqzAOkYz4UqrW$?h`0Tq!FB44GW^cP?}PSl)a{7A z@ec5M$8Us8$XFNPdLC$pu`Y0kX?(oPXQ6<lv0BsWEXxBu!6Vd`RG!T%)HXbA9t(B6 zEyhvG$9_LCFYu1X#sy>LNu%S>q<q?U@1^o7dN<ivkV~&{9s*5`=SzY2-rI<OXgrnU z*(-vFp18x7Q{0Yfy5oY7Q&Bh7OU{!mk$Lr*JK0eDWoo<c-JK@$WM1Dtn<n#oV>0g> zhlKBz{H!$2wk3$3VjPS<13K@5tuaV#(Svs2{6E$<IrNTncwEV6;KH>Z@1H<gujDC@ zJqJMV@orDDfb;Z0Tyv3r2x+NL^`YFMFmrvK(kJ8W0{Nc#IQ@@=)1GT2PRrA9x?yrT z{x{?+Zjp3fh2Osz^Bvy-8|rV4PO1-Z+U>pJQrdm*$xHMBQBDGQoRj*%G3W!wF>ai| zcPBA!3}f6ljd9})jT^kIvx2`8b%D+F+nBk~n?T=*Ez5u{eGly35b0xW4a4W3H!>a3 zhMAs)W)|_5Mg3&C;jZWWgloOQZfrA{kJ7J7`_|X+6WHk`pZCh&9@8zpCtEZ&w=PO; z5L>p;Yh;Be=4O}7)0dtnWQ(V#klR06y00r`gH3CHjmNR$Xdp?x!}wc}TLtGs)X&Mj zLfyKApN9O5DI6i+M!2lkjrp5}&h_<t`#XG7nU=QL%qKne{PPWN&qAYfnb&Zh7dSh| za3;HzY-4klOv^kA<Cdrk@b8l4$v$eAxqffTKAYY)J0f+wV$h-tw5R|rDoKyC$A2-; z!gT<jzvT9J<#?ZNb4ed`$8FQ-ZfQQ~j$3TM1;vKg<4IyEY|!k$)-o65aDRP0jU!{e zwfSMP0pz{(<Ii`6+1Fl7$u;zUlGD@%Tt4Tg<Z~rx;e!q4vHQIF8oR*z@@t^$MfBl( z&}8HMh#2F(_7(CQ2ewN&2{{@##APmxnL(*rQQs;9Ju5)ZN{a0mH;*_6w5$a!8(HOK zbBZ=?$=4_Jk=v4Z=S$O_C(t(W^DCom;;0-yh6IgngU%D1VB_9)F3i5#9cCHZ<?j*v z-as^x^jRn6N}rrJ+e*JFF3)TYY&JTze+ldaZ=p|+{viD2f6wJV`I_*35VR>0a%bR< zOMK>B?tIlf=I^;3djI|J1zu!Dq}O!7MhY^P5#KIiR63psZ2#=&+wBHpw>GeuqqrW! zxH*FN`ic_A_W1U?sGJv(^8daB(UkhAzxDRb=r@}aOK;zt$Y##o9W1x!UW^0z%$X#6 zJ)e1~Z6|zROFl#XUH0u;{iU~WHP2$4Xl2gCQi}8WS1->8{M8d<PUPoGUSv5_=hyl> zs*mZueHZGpD^ZFurj9vxX0x20YJ5xi+{>K%^I1+;HoKPelD>R)ZQ=pwC3%por6dbk zJ>`$`a;GTc5lTz;CDlDqcl&{OGpk445A1Y<-`%KtD|E_x`J9>)`M9XOB=G2sK@P^4 zcWj*6xrW=?_~T=`yqDv;Y}Z})PTsC<w~>$0+y)&A`K^32R4&G(ze}WzNp>DLrR8yW zERVnbO=?~k{Rrby1!P#|RCC1Wb0gH}(64gFeCoHgAfMf~KTpId34flx`?fCF!Q{Wn zp)!z<Yh1iVg1IKfT#VBdyM?X@n>$LnqVbRqI{aVW!F9z$Qdcy^yfo=HX>v%+vvC>o z*T0c{GDpk@Kt9c$ROTF}u`3m`fx1l=w=r?<#ve(|+xX~NqEO6L(40(c?XswxlQ|P> z`hq<t<0IT-Cc71K>j>o5E1<(M(BU}fZ~}B7pWNx51UpQ68=oKkZebMf`|vj?<rc*? z<$x9%Xr(2V&dCcvU&r{7gZgOH2dLc#HRjph$gYKb<9Zsn_)F%s;oHASlX*!Y^NdqM zHqN8is|sm9+G)1RG>2pw@+pKTw?mC>GEE=SM3CkyGL1H7hZ<j(X~>?Xe$|qeM%tmq z-CPEL^NlF)D@%R`IXv&UoMWAVG=st}H0-%@w7(;VbV(^!%b+9f5iwT1uT8K`_UKLX zhQn+f?Ej1tq_fIz&Y->fNoN;)@|8!pO=gO*K<}If+5J~PlzFWq-8EKJ7ws;g*g5Nk zV#aRbb4G6HRqo81n6HlbgZD!`r}2>FwU>PIxPO5B$z&@?+k<Qn^1U_V>Y#aesw?T8 zz@uNpXqDsJuSh=|E4Jg<2zRMFOB=5|54ha`+u?%5w;#{Ye(R8*cBUM*OlS)upXs2T zm;4T6!`j!z;vdRa>7DbzV{4)RYJ(Vu4%l%NH18T_<~88W4P*}^uLESuLf_bJ#|fZZ z*s8~1$7nQ<(?H)-nS9=sk7ENH<oCs6-+xaVvxCc9ME_m86nRvP<@ra*0PQQp_kpt? zujKKUu;oc-i5su(qkdhS#~h$J&4qtOlwqAQ3p5Y;QOahatxX0ySi6SiJY?H9*nWhu zvAf*F`1Dicy9cs>?3J8842YCJzP*9wDUk1ZS+72%-z8+~ecO<By=*h$@n=9YwCOq? zUx$8rP?iB2-(3`DnXk#YBJxMvL+#NWgq~4i9V>P-cdf9)nJ9zOYe((zT-e#=u!HWq z1#K$jo9PBFrxTDL($+Wvnf?lJI0hOYhdet0d3G{pCVY@-!_wYBc^|Jd-CB+xV{g)} zxq4bPK8FpxMDv$^ywV?{m?VuQ*M7XRXQ`HpG&#v`&5L{2RP#Z08+H6jbCu2JdVCJe zRngom@H~t*@k;vZiMW<4=8fk&jqX+Z{A-y;IQHN<`YXnm)>@>`ML)|7(YWy|o}TBA z=Q&*NLk5rKY4wSAoVO0&&Zx7jE-ov9r(Qto2pmx!ANqpkp}5v$0mpX^wNWw-+~S&R zLVn?~{91m9{PgM&XtV6&m5I5UD{-IZB%e_a?z`3k57fWsKJFu(YL1G}&2LGt$d;X~ zdCQBeWy>kH?uzE>NvHi5bXtr(3n4!OpxZ*o;f2FQ+l)xr40g}hd{voC_*h!Nw;2ub zJ&u9EgDit^)pxR0WOFnanKj0bN@*^1mDF`8Z7cb@(Pnl&l_H<Nd<O4w^gQq<V{YW7 z)h4tj#N6+^(D=FEd7<>VU!M1N>(%(3Kcn~;cbOOC8^ub`!m|_aMB|Zv^^)u^yFvK# z;x&8fW!bCZML(gkDgML7@s)Z)qBXES{`&v+#{B2&jgN&r2Gj88I2bEoQDgS1(8gh= z8y~BS(j1VKnX8T2EHvidDr*yS7+*d`u{7X~^7sW-A3ys+l;&mQ55DgWSbTi1h_C*c zt^aDGuWNV4hd<zYK;K3&XG>`@-k-G7iFsNrziTJ^g3**a((q-_I<uG&-IAbxT01=v zcfLgR_#AM2g5%>J9EZ=wA>eW&x62zSf8TZ%5VT~6h>o^julH!cKz?TkuZ?d$8{PQw z)08ibC(@pq=i#wS9EUaJ{|Lt8`29TBk6fgK#*c_OSM&#pM>tP05AhG6Q|*y4;A@~` zCNB2b^TzGq<96_IJNURAeEcEik*D<&(42UDNW?mDUFf;esF<&!HqoMSu_x&qx;Df! zYv|s;$U3GMSTD>eVQ#Y3VkJwxxXj?bcBXk_pKxqwSescx@5twbw2#YpIX<UW#$yc8 zpG%QXw)Fz}LV#m*MM-8&1Iw(LF5gt1*^}i7y#;k!;mfR{zO(XBsGM|$SRrrIinMy< z=y7W==?8=dzBx+e*t}pk!upDk$b)~s^d9m3SeZGfJO6$K>WlmF-@C(lL&R4_eoeyx zo9@u8DEFV!Z+5dcnaBN@wye&z=}$DTO^haq_pZ?Ak+K(L95L+SrVSJA0qEU%)5T$v zyh~IwXU9<<yHNJEVfGR7S8yAh`-0h0Jag5ibbM{^)1%DOKbv{l7`wTlz*$pPAm%48 z6O%oqT|#x}cnx(JWx4&xtBob0cX_C-TLO=<Vp=0%qCD7su-8ZG6Kk2PfsH({a}j8| z9Wv$bMQlq9e0qP$Z>{}{#F`MEmz&Qk=OAy7?0>HGGBEb+>K)~N>}hS2sptorgly8B zj<+%H<vu*nz^)s$V^UxvJNvU)2G@Nc6Af1P1jP<lGV46W7ekhv=j#Gt6H;F^4wXhJ z237i%a?R(NQ?$Y7b^w1T`O6j@vMk6#7wCQBis(Hxt@B6+CfWjj@(UDk-pfXvA7>eM zTnN!B!b~=ZE7ALYUy7dIDd;(f{PHeSw-YjU&ULwX-j0_**S^AN$Mei(JX;#=haGDC zVt%yEZ8GEi0QIdU6#qp&%&FR2tQkO`GfH9qL{^A&Ch_bsTJJ)6%I`eHXNH?%n~*-A zxe_(Zlbnq_+-K@Zza_r&*RbNJt64^TsaD=`kvaMJHT$J#-1ueGd<?uw?Z*A~E8nDc zTd-ZU8MPnE9KM84(Em_}Y59ce7-1(Vc9^B+zCph$iTRa0>gtE?)X=nPw53V-lUq79 zR^hZPBQnR6md*(tKv}FJnJxUy>CYS3%-ikfR~nPuQHXkO15IB4?!Y%*=dnMq>*x1V z3@7?+W|&<wFCKk(VC93?jZTcu4-SpR=Nl(Pd_G<6`21?0jP2Jq4Uj)0I5f(F!=oDa z^}YP1WBRY(GW_|0E`N!!iew?#_widu-w9uD#sXb|(IDh;cpkkAv*mtqU3SWxoy7uQ z%;Na=UVz?;-@U6vyGkDc?Cn2)4YswD)){{CQRt<!%b5R*Whq}Uk2^)b=vmG3{3Xl# z{cD>eJ$cN7KNtRT@!X5QoWZwPM$cU49Lypeea3nJGUftq=XPaTBQf{lXoUF~e-~m- z()aw2v#-*)IOxWAXct_e6VD)C;orrI>!Q0{)(CW1jeqMx->q@~8OC-`V+nKY$9?~7 zcfFs@IN!jW3kPwJ_YDElvhFXjF5-Oy-v32)==EpYnDx(i{}*^4X<X)e1MmMC?<08M zO#T_-6TEMx{PjpzS7S*Qv-1a?u4`kzw<!NaP1ZSmXvV*<C}HJ2xCedDfj%L8Uk%!x z<L_CS4|>2Lz3<(Kd<)1QT*e^JGah|`Iq^4Re*w$veVkSFe2G=|#F>u2ApSywakgYX z{stdsci|cy{1sa^XtCu;|3C0o4|-+d`6}WoTt83it8rb8zc1>$=MTiXo1&X%SXLj= zvV>`%BVPlJIz;ie6@TBxUmyOyi@(S4*N?xyBmD#T4guexwoL9{%#9y?C))4E?<}VA zc+;A?sLm{F@Mh*g`kVJJWL~0Oka@a#9$-$~<|J<>Tz|d-@2=HZaTd~&Zj-Ezyzkjo z${4i=(rI>EtSE5?sU2z`W1i|rMrut;!Y_P<T%H&HgycEzYqmU>F>fDYy}+2BQD^<} zkmw&vuNT)(KQoE{F_m7Vx$8EHX`Lk9r8aHEUK8f;3cT&_Gz!8r2j(OC(Yguf{})p0 zBnxPc$vQWU4VbEjuuT>?Q}GM9PdeCEif!g|oUMWLVU~N7abw0nF?--6A<_|XHEwha zOsw~WdAM=w3d3y1@3`FQu3Be0G4>3nVyi1iZqOW<`M8M7q;+jw7LNzRIOTlNED*7* zG(MzoO2a3}vc!G}9$J@&Ywo6jiEER_o@Y$@d?H<d|8J(k6L@^GvE(V2(X{kmf^6}u z2z$N5aIkOlIAHeewpbIZk5y&xwOZU)yVkOn!>0GccqclFwL~ZjW2v1cR(DU7)?-}S zJ{D^%aaT}$D9JK|Wj@g_uMO;b7SWq%=!>w0JT4&OS?FIoe@|>J*}}vxm0OK&Rvwe~ zN<-7k_b0)J`IpY$gYFSBvO;7-<GaWKgN22zmBm8BuKqzTJ%hebDbh5Ka9K|EpIci_ z>!kc^QC@bfEc*_V+bC}QCcjbk!YAZ9pte{^hBsCs>~n!5^O_Q`W*!SG?$His#QO|p z<BcL+gJbWHO!D5D_I{6iADZHQmwfM=BL9|2-lu;bmTeR=$KIQ1^)Ht1!;m}tSr9s7 z1G{%)Y^@{OBcBQS1fCQ039P!5K4bWiEeKJ?CaGg+nlwu$;xS1Y-=(+=GaDCC$KWne z$6#o>HjL1Ea(OR!Z0a_g;=OZ{_mj3^+WSe{aEkYnd_Q>`roErghS!azw;`o7W`BGD z-_A5<7uquAJjuX@VQaL_V%jIsA3oWEbVH+Uu?V|$#oB_=hTZJeSP1vael==jLUt@; z$BbciYs0U9i~QNK$R3x)%W|!X#+KHPM0UF_8W!xL@2}GDU&gNaB;;mn&EjZ7C%g6j z5|$rZRu_$QX7D*8^l2Z)!PO0GL*=m*FAc<KPncf({jZk>BK;bR-HT^Y{C*UFvtJs} zq5lS7w#;}(h*2GReSD}}$!|w_9X`SQ!A@odcQX_6_=z<UA2U4oHut4*GMV@Ln~)!) zxDAKBwv-t+pu7sC|0w=$#9uys>$uJm<@-xC2L0kh5V~1}6{PYOw7hu6fS$bmWy|96 z1f^Bai8Txvr2lalNjhLMyXv|9x4I8gdH!32Ch2^AnXZWbZ{;q1C-mxXmebk}w?C0_ zeVR@);`f!a{lzQ;bo2N_8E&1GySBBk8TfOOp142EGX1_iZ2zsuhiTg2OqP-SzoFx9 zDva*0V;LxKcOUGI<oB5qX*j+pw;8zCZ@bmiLiMA1_<h>-sNYb3CiEb;(2I<t^T+E& zw~}6zas43D>_po8eN(3sJ|PFuI)VJx#g=9aG%kDTZlVQjY;MotThf2u^@q^rOZgrU z=)>lEzmVUS;r<-=eG?sGf7=u_*3OC=**bl<9r~a~Yez6neFn1M>=NsRK8ySHUBZTM zAb-T>Z0Kbn#=1*sjx$tlxay)9Psk^o5khy-A2Qd|JPYMTWyM+-Mq`EGG3VX;j0mkS z%dMxiWzg|8V=v?1qL1iCHu+JlS15*yzN2~p_clr2h(0IdvUWY`7Zk@<XI(tRac>3g zbs96W>nR?mbLF1Q8mgDULNvZLbfFxocf8{~`|Ri&<6;xyM^QJbm!ob2?a5%YItF5` zU*JBWF3C@{&W6_5fS%`R450jU2g`_+vVSLk9{85#i*u-ait!mY2Ryl7AWb*9t9s%X z9yBe!FO%`uqXWVI_dSu_G>^gek79jm@EkT|Fp`zFZ&c2>J*39&wY2-0se7YMelPc! z;@_w4ovC}ir&NSRB27iKe-jHvEGyDvb>ZGA>+|Em<_tVv@k*rWd-Idc4j=xC@K=n# zGSJ~AyeB=f1J{t)CurSvvRxxDe`UMzW<|a6>l@o>{?`Ov$!5(+9@bj)-OQ=K4Bp7p zX-@qNt$7@5)*c8(a?MDShtjo){iU2*u-`HxyWJ5yW652bU9SY54@Gu6DXk07bL4YV z>^H@qd+^*l$@5%1&kIK0xAPxH{uOxc!}FqG#H93i-jDRiyICv7bI|SmIpR5JB%W8` zd1WwiL8j;R4B@$s=fNOwqV`NSXP9PlMrT9Qni}a3^8_Pbs*f}s<Ni}ozhjiHllJ#Q z8_;*&<YL^1XumJ;!>2qW#-D?KLc}NZ9`vI3<9Wx$d8Z{~psmTWnwv&bXL0@WQ$x<{ zo;vKzd1|xM^Hh%W{8KsXofpEe5{LL-`g?}=GoQ+F<>0E}@489uMIJ+`JpS2Y&g(3v zGsntdAGN|xJagK4PkisNa&jiSPWGMscLC3b@TcMLI{X!gbd#o)e>2nn+M3w4K@+q> zAMa}xHjn*V?`K(kyNH%7i}p(bxp~~gCC@-pu|JG;jC?)vz1My(^bXRss*9nw*BGt2 z`zE#DTB}ZQK1h&kD9PvkIoQ-mch!kYeBO>UUw@Oem!A0x$L0p?c>$T0;tOVQn-Be% zKWnm%rq7?)`!rzO%cXsjVB)N4Xv(Y+F%T>t^`dd=ob9(y^U+_rjt?@rJI*|1V*iC= zd|QNTANdhDJ_XFVZ4vYI#2LdM*=PpRY9z0bwvgg}6JKJkM4ayt!i+48X+D-g-ym&0 zJul04@t6yW(S+UX;`0u;H(EcpPe)$3r+kZ$ZwB%!B3$aM(VsRn`KpkoBN=DTz5?cv z>+qgHItSHJrrV8to!yI=!(bS5Fcwgqd8}xJ%?q<n+(|JPxG%-MpUTI0LF4B_itp}% z9@+6LD*qGt{9P-}hkoLEjL{Aw`+Nv(Qyl-_Vr^ogi2Sar_Qgt<dBvDmAL?^k7efh> zeLS|q!`p?|)v~7X1zaXxc2o<rR`dN0kZ)0#-I~~RfiYUUN^=`DCkFiF+V@-682Rse zX+AQ3;rzaa{7ifP<21f4#QQr}_MfUT9%TD)?_b$J)4rdFad{qSxDoAGiu8R~IL~uJ z)_uzTE)uPQ{%XiP;wiqDS60<YzIM_if3l`i3>W!E<s7XY$Ft7N!*@sr{&$ey*_<8N z1znBWIwvs9=YuLK4en_#1r2G6V8883#V^ttc{dxO-z!RHK4%ovMa@ltU3^V3kKetm zgyJa@HGy4}2k8x@JBoT#os=;leG~&_xJD?3VI7Z+Jz8B%I&5%Q__AUx#rqPU4(wSG zIaL$8mF?R$7vDRpPLdAA<KgiR`P8q7%;fL=_c4v9nN@YN=Pv_$WH}Xn7kCKePz-FM zI?zw}#ukO^%eW2nzBh^AJ$PQ57(J2lkxlO#n^YGo%M`Tc{w%ahHML21U{7*wU{~^c zf&S!?z!T)ppf=&{m0xu-QC)Qsed`9gn)!k@vQP1K58$2mggp@8dpwd(Z>|mOxr{zF zB;z1FTfkdez*}3uTfG|iXAUdst!2gFt1|Fa1#qYY4mxlM(mFWFEBzD)VXxopZLK<4 zgZ8ND=X}*Bd2iPuyqCH&&F!wL84~MuYtVk?jVXRxW!@0zPx0E#fjuc+8{)hcr1!YD zd994nOv!7rMGQTqCqJ7}aGv;QJzpE_<FP<4wDB&IH>9hgU3Urj_1>H2O;slw9=x?m z^2MHno|aBer8{JLt4_w7W^vzD!-JVMv=>Y~erg|&DMfkUqy9Afa?S6eZHV`I{Au|k zG)5&B2KGGKYWKYq&sQcEfd7DBtj6ZQ|L`X9y9dvKyO-C=ZO5OD(i+_*G8Vwoj<#$^ zTehPuJJ6OLXv+??C3v+AyjlTXs01(Q;DsP~A@ren6>XZ_1b&^CS1<0Kf>$v<UhEcQ z_GS4qP2VrRvs&2C8piaYN&Ll=+dYpJ@|XpRW9@yOmtSPg=Hnh~V7@9Eqo`ezv-!Fi z+G|gvchugtURh`T@l_dfc0|s<Pg!T9vv331e-!hGx>odI?C<0I1n{^YpZ^v%Gv*s@ zYhVQ%x$o$f+4s}hs+3%N)3O?db9JN3S<$kWX+E@Z%(v8gTZ?5G*|i?nfjq8pg)6gW z1%tf%GTXPpjWHxMyl)%y;_WDp{1=dY8OED|4H!oTV~g*Jj?*{BV#H{D@-W2{(>yb^ z4|uCn>?u=qI<4I_dwxLZGGeVzUu)Gc#kEk{Ifa%r2Q-V7F7?hqK1R0Ym36I@vcg^; zSTrF&x&A@4ZJ)d9)MWnciFKzsb`?|&+k1)0{$tm<$i|KD4PesvA?G)^K2S9*zdvQq zu}-LCF5hc-{5R9rYkce-)#doud_vW6J1<$zyY`wn-e>SzuK$LP*7+v>ZX$jSvxjy{ z`aq9-=%@I51Y^K^xK@jOK#IHN^(N9WDE6Ah@<dJ5VbVqHxe&QN{2abpD(iMEt!~Hc zx=o`W9h5r8<m)^(&Jz2%M7UfnHfIHf_?mMjW63BUyz`CJUJ~SsAY6sMlz$C$=3>3T z8irgiFtQxcPwt?(9LD3Qq3<on`0tFl(bpk6$tS~oT0Y{jrTc8Z6`ncC$7ZxHj>b2= zk@Byk`L@p2KE^71Stx^Iac1zb;(><UGj)p9GG>%U$)2vWMm|IM&^oj^b6ElH-xTwO zkv8)W7+3UIi9^Ju{p200N0j0YiC^ehpDdG}QQTHB$|73=x}b<Pc%8Y>PIrY8qcn%J zT<Q<g#rz*j#j7VUChx?U{36EWQ>+Yhuk1;%ye_dfGts)9_A&!4X<m?Y(@&$Hw(*$t z1kKI8e@gOFabgbFxj9|%U3JeKiWlK)19JjLx!$akJnC{+hbRu1&)>9G(_YXgrrJM+ z_KAoss*B2T)}+{Af7}}OeINARUE=YBm#7{_fANUXSsXR?hIP>X0ki?_7wejvP3aub zSW#h=ba2rY?|p^#t`&T8^Lw>DypArK+vj7axOY+g)5hG*vhGXL>b`{daH_iV{_W(x zr^-Yk73brlH5_P@Vzfz_jM=S_?NTB8{1LRpD`<=3WD8KdF7?|-f3k_}ABs(X5j<U4 zn{XvXjAnJ;_!!OVzVsN)Ff-5MFF$4PMt)rrbF+Qi?me5kk78a?*L(bPH#z&VHaW>} zxviBswz<LQXGwmzf)e*I)kVy^A>GpIaBcg{GhJE0eJ;|HF6I`zD%x)5D|(#TJ$oDO zN5uU#_u`)R565`2$ysN8a1p;xb`^+x!7rgObI-GBJ)u0%duDW+@>c7}2XyNSyvQ~O zPO&a~Z#MKlzvNR|&)Sv7r)6m8E|j~O$5<p-5^1lIX`@r5jevhPmpMh8Gx#hC8a*TT zl%d#pzOS?3wLj9l_h!n6)_l>}OnKP(Ql31v&@Ji>8^1p79nm8=H7zpNO-+l;dih<~ zgzviWUF9_2<<cHGoEDwDeSVH-L82?@xs_s-C7t@}tUtUd>6ApBw@#qbR@6Nz({4xF zXJp!DTI)+?fJWP?3|c2rXT2l$s-1C+c)BaQn%0ksdM`!2*H&+~`x^DLzARbqWuo4^ zuVs-QHX}JT-ZO$z<2}PiI=#fRA9(i5y6>v9elPc$&_;k~{{%eyL+#qIOuGkZUzKTT zjdy>V99;+*N@)*J+&tdXzN>rWSVsEl9$`=LJy{z3wXh?QzPnWV^TpbeSZwZl`+9gj zESHZ(r4(xe{V)s9Q5U(dS)A6VP@a?@WY<CPYnpxh@m9kzLcCQ3e5ma4_9%WMFW9!$ zI=hb3^P%JP)O2+mk>72e@EzLI@x(OWC8^Hfkv)<>Z2p<99;>IxFEmX(il+I_CBI8f z_%2!7o^fvK?=p_jz5xC&F|EbT?y+^)7RDB*>#-zjdurJeXwyN+tS9)MVzlo~f(-)a zhtNJxNLdizv4lcSJR#E@K$=EL7upm3K$tyvz0loe|D(LFu-66EruI3gdL^~L2JTb( zQxo6c!j%;JTMVXjR>s^Ya}fEtK@UH0)5GkBhwOM!yl?6&5cZt3quwRlC*b|H3Hm$f z>yVG{{G*sJE9CoQ^^{hf53>ipE@G8=yYCiw<o{k?9}+Rl+ChoSk@OfNJns*)S^IJA zA{j$t4wo_gT3MJ~dkvnqUHbf*7@n_^V+ZZGauBqAuFm?884^bW?Qn2Hzo#`n&1ugT z%V!?Y`?)at#4Ut_yuW^Go@INc<{`FuYFWnGrunWx;xYtWhJefAI_r0SdyjFM=hg{% zZsqcIiafb|&E|Hl++(+TNuBlf9N>32%sxVEIL3_|g08dIjE(be{a(()9hbJi5$Hd! zK=(N|ot?di)(7s`<b<A<ug7>kPhQ5hztk3WSDoN8%w#T%uiIdwq5V6M*O_hN`iE|@ zN1b(!ujgpGZgeu6?9#Zj-#!y&xl4u5+4GN+#r`B)t4>@xuaKsPEfsoL%ndy(!u7CK zI@+Tz8*PH`w=HJcHV4btR>&N6*4h1&l)=}d_)B^l=sXI2Sj4$fUbbI__sM??97uk@ z*V!{Sa4_krI+NTL7`%*~d4_aOzDDCQ+OwY1?pv@kK7z5ONUm)^DEe-11Ff+pUlR0E zQ_N{_URg)JRC8wFfKedj5ArizfkFP8{1#tgn#{wwqRz8W#58@byeAwOl>127WjI$3 zL&sgJmG}NSa6tNb4jPXC@WReLIE{@ty&s$7QFV@NM;lk;g;K(o)=}AYJDx-uv0jem z1{?$aET*lf8@hJIr#%bF|GgsO3esA*b<Fu<3(NlpBij*$ZFnY@wKxiU%`)8n@=(G$ zY{zu*b#ARZ-;?AoC;w45+H~dcT{Q+<7UlZ<gRFez*-&|G(dVP&KPsCo*K4$ky$<Bw znvi)n`^`MtA7(vAeeeqX$R}i<o9Nrugs*p#Gq87)(`cQ=?LRpVEe37g#XZT6Kg0c* zO-ES<>PF8`;<-c4xg5h-<)pnb>3k2VAED2j+b{JaeS*DMChSGcC)0Y6R*o@Rj(y&U z-fvlT*62LGx5!!GEcnVE+q=k*CT+8>ar&Y|$TQN#Qu55f={`t)Dm}*gkq>2VBm5sd z3K@p9@ryU@BROo>HCD>?u;qFy?dj;CbpSrO7I-n~CP=#+<<wKzeBG>>KF+xBz4TdD z53PS0d*&h?_M$CMX^r_<+M8yi+VwIqv!r*TPHlXR^tke7ioGMoJ<I*!M7iQG)bb2R zIJ6x1riiz2j-A&O=4U|3Sfo3Nj*wLqI|@19+-~~{<@?Xd_jUZed_Ij|bp!Q9(uK*k z>WT^9X`S`2yBC1><JPR`%CqEOrI?Wd?xUx5ba7e}SWp+`Ybyl*|H*5D_`WSB%YeMQ zH)+s*pDZJl-{scnOrIyoP`Av}b-6s#=99g+-^<V8viIbX^T&Ly*<sOnCa3i#>sUiX z%r)CGn9@?Li2dDkaXe$Rwz@CpkEZ_CV4kY+m(;YyS}}%o&a5%qzHz?dadV)Ptpkk9 zeOxeZ1$Oc|ZCVfITKT%Ks)5a{iNEfMl0DNEXN+VW`u*>u&+%mMNjwwnTqJ2Y)ja0Z z?Sk?HkJH&6!y!J#nc%lL>7>K{&Cs8CyE$lI_2H70hkRAscX$ZTkp9u<#oAExgYo?K zA=hz{Z*AqSyJ&uU|H@t8r0d?5yI!X2&Xv3Py!W;%;^j%^Cum<!I~Lqu!(-fhwC;%H z7#~lVkiC2@=nHR0KlwO2D*DxL$M%Uqzq-GK9ihIp@^oemeUCcLpuNZB8rs$T?4HB# zM7zOf@$bDIokOu+uFrW}TUp^8l9|Ozy#}j`Rxr!rK2qe1Jm<#Nq8qG*JcZ6ld_%r7 z;+w!BzTWo073q0tdQ0FXIxpdTh@Y`z!ajan_<QTDi!10k+UopNdIIE=Q^xu6ae?YV z{$Im<xs84s-QR2@`DK`QwGn^!bqN0U)46yNzDC9o3*8eXd!5hQMMCAY4wL(BmvMYf zOL@rkhb|ezmR8pJaqXGbmaq%?9`0gazME}-E5&5q-N)Ceu*EwTfj3_wKbLhsjc1%! z-=Ma-*v<D*;P>yZAfA`83u7^Hm(uo#<f(CcTA`2nC~uMt;DJ~9`bQp%a`W%)z3z}F zpVzVXVU#+5P`2Y_dp=EiK8YPyNcq=U9~?6BbNM_3`E-G!ZS#5rUhnM~!|}cQ?KVuw zhUwxPCg?uhwC@@C6l3^bQu(C2Q2U^)&3v49vnH}#QQi>lX?#5>>iGU%p|gBI<N2T* zf9Fx$4DN{@x6vLE(nhAa8Jgqrh&5?}VSN7!snZUR%@2-lkoOG&w~-%GtPP(N-4Qs6 zZ+4rw>O3~+Vy&4UI4So=%dz*~Ls=Pw17CN{xJ~G?=SYy>oqQjjvGY^pz9u}6%{&H( zaop)_oeY{!6!GvA?R6F*J5A^mh4p%@XkDH4#}}zy81p`@A1Yc0-KE5yC(!eY_#RnQ zhormeJkq|#*Cg{g{qfbYw*2Gn3H&;p?sH783H0{Xf{z-}u9M7d@L1JDrIN2keos0n z>E9^pH~RL#E8w43sb4_`{abv|TVC0}K12PB_o??G>lXivuf@anv<GoCKKcRGv4Xzm z`?_!BXDc-F@x>JLSES!_y>>_7INou((>?7yqCZIGesI<(IKua1=DJuOw^u8P--$<f zn|B6Y(GLZVhuOzCEjb@)d`&LJX52<)Q{7f}(zr3wm`1lsx$er_0ouSO$eTD1kv0c0 zB>Tm<xD0NWiT*(SllEO9*^~?VL1+Hs49JFJF-DK{jLC%?Uz2Tq8sFb9Y1u}!gf8zR z9}Lo;mHp>7)YC_FX>)U4^9dbn<fyp*v8OA+K8kC%<XIomIr%<-8ngEt$&>3Oom3B$ z;l=e-T6&jEpF1Hv@j@fg=i<6QExkwXf0t+X51AhQZR9qj&%-q_#;@=GegeNPk^DMY zT*S0?DaDa+8TcspbysPW<}AUR_wqApXs@p|v~S0aw_S;yC*ozQ&Nno978*^f$}f4= z@wxKJVjuk_x6^vQ+=k}N8gnh#$-+jEbGlQmzf1pCe&_kH-%%{P{MMU3&wi!x8GOEa zW8gI9X~(Apo)4TR-z2pW`7Oz|Lffq{X9rH(``=QGMv%qYd#Y)Dq{l_^i@l?P)57=Y zzF%Io%jhQKZ~~p*m2sE3a-ROQe`(;fA^o<}S5jnVF=tOJ>L}tmcsb(g>XGXwFYzx? zUbp$6SG8)FtUt8RWgtILVs6z4%^#Bu+=F|_`IdBg%lN&KG@8#yJEI{e*My94TOGDP z<o-xV#zUm?K)<uU|1aPZu9Iv5t+#;Iz39V`^?8u>KJ=lY$@btZbFyn{+qDD2k5qL* zj9cG1Zgk(h5AU*Q?x+XPDQ1k1nOUqk)UI{f_3AjvayJgMfsMn@M#)capGioz&%&cM zowR2{q6Y0}vLb$NXoTzApXK!*d-qv8Uc$V&>Vh$g%XNxj(`cS6;Qr3>Kxs{9Oh2)Y zzFFZrRTJOF_9Zq#rgXj$rL~1CN?;2;6W&Mr%cSQ`av(kL_~ZZTUHN!s4V4jp;VtjV z7cy(0^X^HjOJOR#e717<RE_a%w(rvCGbelQv44}Di9S=>*T`k6F88q0Ad{Bb`(?`W zW}pLEhoQ?Hx9KY82pIXodAtR9=>qJHfj=7-^tJWHcC>Xn+PVX6jj<~aW0wzdu4tP5 zLnpU|UV!|Rd-`yhO0ioO*Kvxv9%D@Cvln;TY3x0JuHd}K4_%%p>%zs!_87W?@{&pD zE6JT0e_updr&w+e()U28?Wq;>DRj2*#C|5`Sw1)`{mXpK7?(>+1Lyr~p~o>9_u{TE zC*LdjxRcg1#qRq;RK{AKN8j9<%+eqOSh8oXMtd@t`0c{)F8t2H@6Gt_!S7D|_Hy5| z@U6a^n#YCC2-$O9&Ka?!tLk0UErfBc5##?)<^2lWzbMy7zdN1$n1~DC*9`awTvh>> zyC=s5cqD;O0(kTQAN+RVw~605_}zuy9{k>n-(LLg6!TE;@10l|+rJ|G`Hw9joPpmf zA|~T;zW;GgYt<3j_mK1YvhBl=H^)W#9S5cUY|np8;fG&f#{nD`{bm8iiU^Ol3LL$i z`ef?dV(ORlo9iGE>tgEJ7b!0)^U>q9-via}uZJzmzjphQ7G{moyPo?f=4IR9ZDgaL z(L6|(L+L6CkT-kJ<6patpJiYShx|zE@t15rfHbtXmzT;+j|($rLl=&u#koaDAN!|y z)A;Bw852x*>im@{b&mLOiYKPkrTAHl2G`3P`sj?Qj$7MMpBdX@A{MO9`ssV*|JWYq z{bT+10`QTKwUC~Q-(Qu#*T~<E@^^EfpDm<kkH5g<S~T*Ja~t9G2jaZre&!T0Apg(Z z(iRBNSzm%4KYfUo$9evz8|a?$5x@U%cc2kG&?wGr;pbL0{W6-CpNIz%dExg@{W34` z=}+gS<%QpWm@#!euRfEeukv%qu0)@tSWVK;i|J~zdOFvb+lUV4Aio6Z3lsMOpmll^ z&qw8c=!ts?v^_jP^KX-s(<009$#RPM-e*kgK|%Wr@O9W}XRgvZ0$uLuLNeh>&RwOo ze0KSAu12Fd8qt6L?p@Jm7dWY}BmX`#D{xN6mRGcyjN;0R+amnxGo`<r{I-d?fpg?T zhYm)2XRns?XXj+hc_qH3_}4OgOV^@)@omPSlgHlEw;A|$v<LUJmfVgj=^M*i6MGc~ z&QYD@o(|1p{szLqzF*+HtZy_T_GP0pSNMLtPDiwNN8lXB@!y!Sz&WF7xc)!o6Gz^Z zugr7XmF78i?&A3C)bcZMLCTQ`#paT)ITm6A<f|i|u+REU!~+*dZ%r29x(PDmC$t|D z8@M|p-<Pr+^ZU$0dTL6}6^Ohk7WztL8_g$7lwrwMyG>AbH+W?)#&$QxbudQqD03yx zvK&gs_aGMg&5a}+=)dBOK0oyMGh)1{nGge5GcE?u-UDE#Tu;AZZDtLXOM7e??5>Jf z#1U=CcGm1~P3>2ZwD$%05Z|n}_X7A3-xN>WAE1FbUtf{kQe?0%MD2Y7s4v-jX*9TC zvre*?hJ2RVOJlj{gZvy=BdfMNv6$94SMvSXV|BIVw1<Y#TFY%;n*aYyd+J<JKkW@T zb~flDbHzB?E;28rEylsL{R<4Xq$0MKjoZIq;yw&*%=#m6t(k7G2Bi65iZr1sNaMSL zvV51%C%tVl|7yCu8~lr{HwFF;m*77=jYBQtX&h>~G8#LkrE%o{=X+s{r>EmX(6hFF zJUwgcC!we3PoSrH8G42;L(j>+_kD=>ljQGSens^9Tj+t)((F_Ec$$4mA9q%>q)~MQ zWv*qp7$<n%Mkk9JZ;iIamM)COO6u!lC8KSI>4?(V%tm)uj}<wh$xUhX=(@BXV|7?O z;au;<zRBcxf4A(9o#W*zmD}J%AMT!{4L<xgz7PM+^m1H|*;@Kl*m^-*CmCl8kWH6Z z8gwSt_UVab7%MmR=`>#`_hzEGri@tlihNC)@B<;Q);`_u?$eW97;pD57v)QNj-89k zyfNouT9fPe&*VK#zRv%`I?wno%zNfEd7qJScVf=+l!*C(Zg-n~R)fsT)gNb>DLror zziFNI^m`M_2(nQ|dn%DWPkmv6ZuO>|Yn;?ZpVC*uZDqdJn#Vkq6<DJbPsHcJ3apD1 zvqp1nxVJ*>;>@T-$pRPYVu8Ihugik5YKl8ym4SYX;&#ex8<yw`{Vuon?FBUF=B2rK zxi=`4Wv^p0(`@-%spI9Et)#nhKddutjThuW-;$NX#gztI#`RmixA|<8adrXi8Jf#u zddI#^_u)>O=jGx&{2@sfM;cumX>@Unqe~8t8C@#rGFQ;WADV<Nr0=e!vs+P?<O{NA z(&$ob<J%A^uH-r#qxJZ=b3HIgx_aw^9D5C7`rkxeyu{C~G4flHznRZ77~d?6(!LBd z50&O?aM|&X_BukdHHdc9wvCJTxB`EmPJ6#eKNXkpsEdE?lV>QNFxGl^xqlh=QH|I> zVZxceN7*Z~iYs*&KcmP+Yt_=z)7Vw!Vi|OXxm+jv(PX}$Z{QG>F@F!8u_N%W;APX9 zImr6}p38mbo;)m{LpOeME1rkt^Yij~g@5f+#pJ`nyGsAEr;c%d(Y<t@)l<juK2MKW zqjlDWo#J}&Rk2=|72&TKf6MW=M31pxo%Q}rBJb}U!FQXd<2zdK%45VkEz5BD_LVVi zQ|H)Y2Cco3dmpfgvV+D}zV6li1M*F~U;}JT@jwaNOffwv8}3p$HiaE|JCpq2^|#*6 z<3!2thC1bemuT)I)9zoXc>01|l6!e$YmhFs!mi#x<%i^4qIkaV7H)4(Jons@t50QD z7SCV~ipvb4KN{w&Xj``Mz3}z6yDf`!3yLwJ-?Uay_y^Fxc5^@T8JWj*wC<7if#xxO zyRGxI$L>Q#%t`OQRmz;5PUhU2&7Aa%esdqjTIQ@xSjVUibViQ+_5%G*W{X%sndS_Y zPy080h&tJL<&YnR<Ul%3{M&93w<N#gaWkZ!G?<}sgB3;_+~#bGHzM2!586M1>P2`E zj&!Bxbd~iyEpf?B$3wn5Z{tAa)BZ7b`P2s`&+H+dqcuCRPu~;u3xBPbuhWJc!E=ha zEHWIW-;Vi8{v}qDTOa#!cpvy+!?ycUYnV<OS$t2h;+SJ`)HoZ6ZqBkSl8HuEnAv+? z@iXmOq|Xk|C~exg(|z{3&Mmd9VoM{d+=8~<vXce3yvRaZPO&Au8VmQ%Vat1KS$%IK zYv@g|RghP!!S509do%cbT~C6Q8QTh@o1S58A;xiv_1gF!&qn!P{Rc~Vyxu~{n}DDE zb50ZQZwa+KgOr}0;rG0SLn8K!Vo>boct-Ckh&KG0$uxS-$3zqO<%{ztXzbwoz!&`_ zN@q6Ym#{24J0(_fv$v~R#)&yZTFAcBe0?bD%VW6nSvjp$vdgsdq&N$TTc<oH$>Thq zr$HY0ejS}dL9!+-k3C4|TeyLri!mbf^d%F{#aJ@#Tnxyiig=4-fa56q)Z_<Goo&z^ zg=}wyPVMIVPSCj|d1fwittg>AM$zVxW!`O3vEHKC&1UlVQSdL)`U{z}FPE_%o$p`a z;m;k=-Ex@|^=~$t(qeh?`FRvHR!4B(M)3@|()@QBk5zVvGhBf4Jfn#n3l2eUzP!XG z&jrdNU!#2H<@;ZW`(pW?;*Mq*U!N7-xU!e#($D=@;nn^Ic<_y9>0H{QR9={l*t<+w zvCySuC05C@=8i9mKhF|nb=}7tyzO2W^Q{>3H>2$qr9X?W7^%OllFk!e>d|kexW;hw zliL}KFNM9g5aY5JZSWW?f?iocKI@Gge;>8KC;pN;nG5fIl(zgv^r@d)Rvdjdv<3Vh z`k9!E{5+4bEQ^0hoKrHc4)%PdIG^M+k4@^*d^9JMULK|0*#CW=cH_^VCfVAs@zD39 z8!tQ?rTvB|9gRiQN9^=v1$0IT*UhdOS7yJ6ua_~JhvVOQBO3qV+tJ!BtYt!-S5cku zy>GfYQ`@BDMSYBypFer|)F(G?cr+@`o&TVVVjeL@u1h4uyhS_YUOVJoJLFzF<X$`E zUOVJo2jpG{<X#8lUI*k}2kHmCV>QOr2*%ZBxemL<wnr1KLB7vbpMCBRe)o;-Ki?+x zym4pvaJ`o1X4m4|ooL>dHXF_@3L48F&}v^S6`C-C~?*+t$eLN1p5TrXS_u`!*R9 zwN>g!lby3NX+3xy65>2Rnv+Vai#Dz<m#xR4sHn$#doNRuG2M&wn1>4Gd0&U3G;e_K zTPNyST@L%qO|e!%t^u*vXPme9Nh4i=`e&JliD6uafSzT?&l>XES~}k#l3UO7cG8|> z;ya21<!PH_{+;93f27J;J4rdR?PaXJI1A1JUBi)C(_JLTkSWfI6R|zk0lQ8{f9VFQ z6WIZhuQ@NJ>O2Wfq!ZZtbkN*X>Kn>yZ7Q$aiFti0#OnXEbw}9;WUT!GJAbm_C_Xk- zPr06k<V_dsz^-P<!6s(o%lo<1(O$X44xeOBNY2-+ve#nK9;j*a!F-;Zc!>68C*6YU z*v72r#QA6Z_EKz&)W=iv#|tc)YqO50=SlOwX*O~=%~teM%oew&W$YW}nU*$>>`7kE zrLl3Bn-{xejiOy9w=qPlm}|1QsJ=M&aZI*f%$1zYoKD-WNogBQqb>BkL~sIa4M|&3 zue_A4vytz8;F0Hb@-y5ey@$rpyXlwdG;E%P-j#OV;;cYci8A><_7n>>w#GQHO6K94 z&<^Q!ipuffO7^?^FnnqLseCE@JLx`}nRIsI1Rgyy4Ubl&*|L|-FD-5E#I%%-(tilP zJtoi3@mw~}n)K=COQRH5L2+@kHyXuR2SONI{Q*<f#n;^`;xqZ4MbP6g_PCNa1x(_N zIPH-=o7L0a*zvP(MeViZMt0awYwaLYZm+XOmx?`btbgL?5z<;IzDD4}@93OJ$lx<{ zevXj2eBHPy-^VCE?a?n`tbjdE`?aHOuc5Wxv=?L<<8f`r<=Q^7Lv?&hamHD=Uxj;$ zZ7aq78JVUC_a{-8^SF=Wp3av%Ezbaw=fN#GLi+%bp9Jqls4tT*koK{|?~}CtlkPzq z(tSK#xeGk9PSkeS@I4>IGkTx%Xf2QB-(}_nY(Ev(m!LQ7z%>ikZxN2<GwH*3NZU#E zS;SKNFxubc(U~|%zlQWRT<?{?SCF1YYZfIQUa?2rOC{20SDBVaP8X-^`*WyFDuZI6 z`T8yVrt;BNwB}93qJxJ%OguX5Sr_ctoIhnxK|B5@Rz2+D`!1E#9W?UJ)RWF0-wS=c z+Ofg-U!~BCwNOoHR4cnt((<cIUNOEsTwiDXfzJQ*&~J*#r1j!-u3mh{8@#{Qn4?-v zKmI75^NZH`g%_D;5u-D-@kcRJV(%iav14SP9$j(*-!J9+8*ErIjQi^N1@L*^2<mff z8$TDEjnvb+3-0fFaLH+;xoM?Yu+b=>ceC3XFyzZLGsn{W{`W*{=<U}*ek9}1p?<Hu z6V=x*IfHk<*!cYSd0lxsn$VTEqb^Qs7~S%VV`s>*5yRx`y~+)z*ym6uANs~6=a9#@ z((->!|JsuCc$SFY`?C#XN7N=pUoq{y0?}5`!E^o-dj^ih`1Mnq(#4CD_~{~YyxWX6 zPomAYqRsoz=G$ri64HNZKNj+fa^C{!z9d@`Y<)*8V3J-uRU9Shz&(vD`e=gPk369N z{(g?^zwg#r?>^GIBS135q;&(Le(#?J@0-2Iw<W?pH^)cuhnlygiEWruNV@1vUZcrD z<IpZS4s8bRN#MQ}xc33~?ZB)5a^n!Km87*RJeF*T_rD`6hdc}87qxQQZ-Z<kib<k- z@W#i%8=dq%7J18?D77vaZocOWj|J;}+qyt|Nwxae$K@K@V=GFo6Xy_=GLo-lG<H2w z$h4`_aGw?GBFp3P^MX!y=G0m5tg+`h?Dyn{z}1KEB6_-f7<*qP-ix(Bo5i{*A3x7! zTsc;beKxsyh%s6VsyF#Z^v;DXDD##p7{{*o95}v4mExejTPW9Hyt9<nI~w`N_}P`H z^N_iNVhZ2jYcjweYvg>_b~DEJH@V4hoZ$N(8U@EF{z&7oNKDFx{1JZ6Ii1gwmWSM1 z5A>KV=YxQ!9=+2i<j;S&sr~62eZ!sMI_r1u(Rn_UKgA;PaWHk}@tw=@{ug|Gl{hQi z8#sit`8;h{&Y69vbKNc%H%8@hnOorCIsobb8Tz{wBzwp&MQ7%jFQD9Cq5l|nt`a`* z-`yc_IK#%pK~K?!J%!BM*8zL`@0m0C68iERET_kj(uD`9emyTTR}XaLEf{OIV64Fy zl8Z4U4`YZAV@MIkkYbD>W#EGf@IfW`KnEWLfmaB4EdgF(;I$lhHN-0GqOltnM=Nf$ zte9`V=RT8Z_I@_h7mPOWNgr^2b$-<NeIOdU=bk8Z9c^Jq*l%0@9BDtYhizQ6iPomp zZ`|t`h`;>-_Z25f`MN@$uE$Mtvdk&xUwzPL?X`KdrjPc`&Y@Veo~7Kr%Y|Kdn9GEG zS~!;BtR5QGs)t9lmCt(?8jlT?bALOJ!Pl1id42b=hfgz&>OuB*Ack?q)V%S>e(VkS zL|-&M#>+mRSd^-l&vd8ys26<a)&J_w<~r-Q3DW0iUv7IY6ZQh5eYXQg`92WURPT<H z%t`Bw?X#xHPLS&gX}^RJ^2_1-8TIq?>FI3UZIb_sz$aef5B;z2>_mCjQ+YIYqHa08 zNBMrM9>Rg^BIEPVkb5xrXm4_w@8kRImZp7Q!sr|q`qoSD4EG+AN4d4;=mlwm?U8-x ziH)b91&{tat?f)o{UBQQ5veDD78{!%rT6z!{kZRs>fjy2(bzatzVYzWX*e?b-1#DE zC&F*z8lJ~I8%JaIP<ir3(MI4Ss;AT=?|g-xA+1Jf<FQ}z_D8*QX#F4hP6PFw1o%Gz z{%;5Ww}byNF6Uxg&cnFu!?;|8ak&`davA!41^Rs@`n`^RA4H!Eq0cQrp9`bUEk~cL zw|zGHu#m~%+bqBElY7$Tv|RT}dv=tS&6ImMh-c*YC;!2ueh2Uw&57msNzZCx8QqJ; zIfnkZ)-gS6nsa|k9UJ(*v_84sHEYr{dRr);ar^L>%JX@%($3etPoB?<@_cD$>*Cv^ zusL)iJ4Ct@-y1VlR{Jl6XRQ14bhc(L#XQrV#x#a?Ws3Ri&6%mW>|BHQXX`w@lVfFS ze+HUg>gg2yKe=XXuLems-z79|VyvZ=t+)5^h0f71Cqyxhf*!SE-LFP*$Alx&-j$a2 z%XV5Lt8PPjJ$lCP6LC3zg641SJ7#8E$4M{YYh8XhKg!p$F`75fim48R?!IH(zqeML zGy2Jg1U<-?N;r{^N{;F0xlSPWIt|hJf;5NQdKce^95m9#@@B8dcR6GHHhG>@&%oZk zgLdBX3~zpBM4k1<x5T=(1-XHX+$X5*U&L|;3)s#5c@(QH@}aS|2WfhL#k?U=hdT%H zp3d6VV>I`hF(W=eV{7n9?yoZ$$32;Eo%8!F3*R|=Ag6H6>HU>h6CW052)L88i01qZ zfy??Rs^z{sNq66_G=JKMUKdC6Tx63QvyO;;h>rFhGae9n4#t9LVAMJufG)6bm^l{? zF*nIdzNcw|t;RR?@ov&RGAc>d(D^;_es=51Lo-L?hiJd_GqAJH=<!32DESxatW%#e z3o<Gx4}-nsja7&1llTpK<isC*%NzgvTQsk90kYdu%ru%e7_rx>^R;0*bLw%}gP^hg z0&EeqL3}2isUG}_*gKoA*>uWviPs@tC*S)pb*>>_yG(ZS<~_4HuTUI8Go1mkcO%8r z)A<hk+`T-#$-1D=hCYGug4Z#Q{upPT{sNZugHgr?XR{1Z7t~4CCCnB+Bj?ccEhj}= zqAb0P&i26Au!p|EGkN|t?f;NX_cEP_+5mF9pZsFxpSbQ##t>%9KH(jUCH!>7_&Lf? zSB#5i<YUQQMLf1j+*hXEhtuxYrQLU?-S?&4KaqC-T-yDywEJ^o_n&5I_ulE^XXH94 zAFV%^ZEA$s@*8-6X#MU<)4}x*qIYh;gWV|8)FaJV^6ARoXe-w*NPdvr5te%v=sR}$ zAPdYe`^??cj)6lvQ|IXR?hO_v*Dmm-#jaKGwY2vIi)qbVYA<Ly@1%HvuLsZh8Vuaa z^}5ro<(qWh3myx$_jV@tzHX-Y_yv4zAm5w#Zu!icsAi<QH`~5NxgVsf&Kf-=<_xS? z$RA@)zX!%t^oGpb*-!YI&oAKn76@PLXKHz$OF##l{r|G}F7QzmXaD$YvPm`}V1NKY z133uD29gjIWkVJS5+InMQA3LbN<y-bNJwHX8tlew1T84OO^UvTiW=$-Z*8bnZHpD( zYO5AnTWyP#R_f&~UiubWTT$Wc@B7Tm+4JlYF4oWI?f?D!&wLnio}D>!W}bQGxy=o~ zKYeC;FkX~*<GDm!bOY_Vrr$L`&X?u9i~h-q^iQffbGh_VOJ@X+#&?qDT5I4!W91zX zdcWX~KI?t}@?G>y@#k!PZ^i_@?i04vfx%l%*iN74JV43s{W&>q*!i0+ozS17&&rVZ zH+Lud(`c_qD9fK#d$SlnZVIjcxFUU85p@5_uCxwgDcQ%FRIdWPj*|Ft&t!jk_aJ|U zmMIeyPjZp$pgQL$I`&&<6?k=BGBodsM?Er%)VUvZlF#G&C-C(T*l#5wVFmeJX-xTH zV}Y(e@NF#d`l?F|$hzMs`!C_XQ{d}FWxHa^Hc_@um%Uz>z38;cKG7Ljca5htQtR}1 z&m{b09TX{rH=irlpu)C@rg@q-mbT+(FY2>P)8xH5YA@}pr{M=^*K55(sK-XsV@oh3 zc}&8Id_&|{B7K1RQ|panYq+8B-dZB!iPt2~y*{2~PZIv7;<xFFmS)KQmUL|p&CSSB zJZb2&-JLVMYRtxax{%N3vG(@F>9r;$CDDAmq~v6KBMM5w;epn`mx#EXC)*!^^i3z* zAA$7a?m~@8FFE;ruW{a!-}f5lIr)9Bu0zM|k0=><y+88qCVX%B`HUPnmIlpGcNQ%I zu2ZCavc03^@^%~7t}P1Ji(+KvqWsgxwcy|PpK8Ak@?@N9zYpmCqf_noL7taSwciJM z9y!&1pOVOZy#w#}DT&;Ldm{Yv_R~4d!2gRgXrE?2`Cff4(GA*<zvEeP)wXe>3FEDm z{H$`k55gFIaYkl0#=V}i+oIP!hA?I~V$5zjncR%rLwOI~L%H`|#Xq&aFXiIL_gUu^ z>vIX>wJuNhk_j!ZPc174;9b(k{Pej3GC685c4&;4uJ87W?1d&D-)Zorf%ZdB|J-Mw zSoP}A_n6fA4K{}=tT|NFGhe4q;PZxhp7r$3QasVO$7r13{p00j;nMCwh3(e&x=}xc zL*a_dna-lU<Tg%aJyBoejk@pUUzIzWH|J{|vF}8ENwDrqyKXD2ef7WHZSAWsSo^yS zdq4ee4q5x?3)a3G(!Zw_Wbb#=-g))=>rd(5p$Gh~6~AW^-S9bIMWZuhACb=5x4H02 zU&pr&l!&?K7d{RBYK&Ur4ZS7v^R7LB<+IPy(<FcF6mIA!nL)8s?wQRQB;2&VA3Dis zI?GwD$=}gOzIWeGb{KR|C;89{io{^jiRrvwNn6kPy*+^$#<qDoj2^E)r#orJ1Y75m zdMe3zS19>g2j#k{L9*_rt?NiSc(<^gd`z^KTAyLzvh+ot81L=z7S?pX?=SC8DWrLU zpweAvu3+JI-$s8qot;}6zIYt_z16p|uol0^;rC?r`(FHBqw+8Qko|thx3OR;eow&f zuj$`m&y=M3Hjc~Gzdy^y+eYXEi%Z0`E?G}GwhK!N-!Jq9v*aFDxtE0I2*{@8YX{W% z)Y5-IdnU*(O=bS_SG8_gVc9y$uDU3rH2fN!t=6sAFw|JOr#hE=9PHvrJ=WQM`W+wM zAwO6e;{hA>`y2K9MKu57t1h5<aJu(GulKsB2Jf!ZWkY9l-O1AGk#=cm_-Nay^mU?5 zpLOrf-SXU2Q4kUto2#||agg-ikRLTgtv_<5)m4i8afX_A3%)Doukz(tekb-drrkpO zP4-BCqpM&__+{Uq@H4b$h4xj@J;Jmm;Dmn1N%8BYf6~x?$3X-89hVd_pW~v-mCtby z^EpmYKF1~amcf0FQ^GF>lS_QT<b3ii7}WM)!nEH~+k<@<rR#Naa{ml|%VXzAWd{2y z^Mf1X+Y7dYk6b9sz1`}Z2-oS1tIhEuo_Nfrd!P*b1b^QWaZ=ykc+n<b$G7`R!@o<Q zzbETM+N&N+R_8V1+1*Y4B3j2=144A;?*<|F`pNz7Nb8v(quW}CN9%Zk@k`abSG?To zBdAR17BbJN_H<c%sKD#@6|C{+ga7z?@R#nn>B$!E!k50ir)RBjOJ09aq{;b(4u5`W zIJ}5#?ZQ7Mrs;cCPwR{?+W)X)f;=BNZP$3%#ss_dzMDFK3HY)+gKHOfY4?@>3iQ#4 z0c3cjJZh_N1Kpve==>yde`(|%r@5kgYn8YaGOic+*baR30U!6GyhnPv#1>1B*zlkz zlXl1$A?Gh?UX%QO8{YR<fbS&CrL!iVdB44DrJUDE?YdI=B$PcqV>;xN7cz?Oj?D?B zs5w~h(h_+t9<M9jtyH>IYTg)0mwq~1P41maw%2Ge{iXzbBfheFa8YC})F0(K;<wp* zku`SO$I(w|(vDt4XM>A4-~0X|;K3v3bh|{lK1<x=J0OP8-bIYxAv9(Q&#<?PB05E~ zznuIRn!kYu{&T2h?}B&TS{i=!HhFeRNDL_rzfncLPc;|&#u9a=(?1u7#`=pi|IL?Y z;=b|scIXXK2jy)JW%>2lHsQAk*K@xqGN>KITcB5ap>KOZ>vRs*BVAou4@UoPK>tFn z_ktd`gC6@pkN4_z%R2|s8-2<CqM$o+4k-Azzli3Lh`#7Mq;sEywobX8P}0+8O;4FZ zSmzaP__@DA($QUSwRe4$d_tdtj`TcWq+Vk+9Z?yxflIOt7%r6@^82I@pi|1oih?;J z6*f+)ocCKK++E4ALC2uKJHSI$2zSpI;R!t>JhDIU3;)e`w>Yyj{L(I6Rz97RgYssD zI;G!O`s=BE#E+;B1N77BuP==Cd(c{5TF2WZ{PK+77vt_Hz7(Q$p3guRyVGBcx{U~p z@fVX$Kx2aTK|=O>y73$M)c#ZOsgtggAwMIvoBEB~UK;+ii}c*i&1O@F@h0tIFYmgJ zWS-en;D-#GBYbpD3f}h+ZCHLs(vA3-rtxHtrN2GT#?rl|;a@G%=V)Rq9T?&36hnM> zg#U);WHpxl?jk&+pS`+_<(9sIz8XvC7nO!zY14X35z!dcqieG8cGkR3^dWU|iIay! zdcoR5^3K?;@A`{Dcj<a9rr7!*WT);|Dt~K`_MrNGYFvLZ>onKv#M~F|ujs0l_N;M| zv1PB9xAmjPOT#Zu8z67&T4Ctw6E}gsW?E}*y6Yxxf{b^U2=|@Z50**uAEbxSx}Bam z7_<6b?SXV`rPHHK8dqy0Yg|d6NTPJPr*RP7BL&%(tnaV{yf_rKhu>9zdeHh?YfWL- z6t&Ks<U8%P?M{fC*^?CePVmaeUR!!kjydoLxvrY#G5LFu^*g6nyQA!jiTCn*OoBh0 zBG2Tt+DGd!Dc^<%CvGA=$KOY~&Zm98`#yUic(1oy(c@2V3qJF=^v`>iRP1?I49{t_ zE{6KOGc0_x4ydEB6yxur!;1I(g6^-*44nl$tS|Lch$Gk0y1>qGTsqPQ2eS^-Il=Ot zjLx0by5RT##x1RP-MjTuI>R*j{4GUerKzRiefzWzLaq5Zz4bnF-S0O+GpDomSDwQ+ zMbp!d)jojW{`2G-Oj;L2YZh$$yD~Sd<+%Us1>b$gQYG%IX)V<Aqk~U>aop?nr^&N( zZ=~_PSKd1{`=IG6M4!mHxob*cm+pP^%Lg^SpGJJ+aCztUxOBa?xI8pk-Lu?zgI=$N z@@NjU!w}~z$xbq9jhsC9gVvQ!jF<bG=sZZ(N3Lgs*UCQX-P(JyKH8hD*KtUn&-K9j z>8_Xc#>;(fo0M;%%&4g3zRWV?`1!xme0v_Qw46QHvgZ(c-p-yMXV1^E=R@{$S?Vd~ zyIdRIjT(Dy-+iC<$^Mt;NBm?o^fFgrAI1Xt5I-j!bRJUUqhr>Gzg6c$PTVvr+Z1$` zM9&oPB$8!6hb((o*-xkN0Y>p+zYy0EZ^3KVbt;>)T(`MMjpLW9kSDE@&Ra)1o%=z$ zA!LnFSxw_N!$*5A<zDYfx_2sRH{DxGYeg-+V_<$w=Uy3t?qQ+%3R>4iwj}6|&S%J! z^T3<EF9+idd0s<M7)3>7msYC#WOQ3<Wn1Qo5XSLFjN?t{n=R;@?yc&c$L*FcjMmC_ z-3eN}R-P*v?${K6Kb=oqSS9+bJ!N>m{bXm8M)s9eiPjVO(`c<N(S2$7#a*#JFyLXk z)`LT!|BaykP3WU7=%a4n=2qaQH;T^YD*a?2-Ie?JB5gt)XdO$WZeNS88|eh9Zm$Gn z-Pk^s2+iP|r=<hhzDHNroOrsQ&7=2ZWODl^Y8~W2bH@X;jpj+oe(#!f;&SI+A9wF& z^eOrFNPnU;1n``p_XPX!90$6|FPH+n)Rnf=c}BE1qw`(xv^kPCX)ncRG#`Y&NAb5( z-NO`?cXoEw#qTM6F@BG=AIEo>+Y|Hs39^27xsy*&KR5a4sV%ia=`f^!()#oz*@^iT zBH>E8zduXfYvS%6>rU&L?RG;ZmUJHYdpr5ih-Y-oJ{b;Nee{jsm`}db<#(s4dwxsk zp5MLJyM-p&px^b~?M{h#zcQ5Nw&rpt$Zy^49(00lO;_t|;`eL<E;jwxogBPza(hmq z2rFNl<Qe6q;iKz9ce&Gi*O7jEtU#WnQ5pUeasxJ0<XfBYEblQ6Ch9%*Av((g@`%=x zCeJ9M_vyatj`2&sQ?cj2<b7f!&*YwHZ(Lq*P`RksQ=At}yr>=RJ)raw)NQjnWz&Q1 zLFycZDeXbEo-L&7*94nrAL{c7`oC#_I(X^(*0+Q4OTQ!cd*fTd#JKc|L^qv9{Q-Sz z)8?d?DxOcA9dvu8k4Trl9p$gn<)_j4wTuUz>W-h&UeBH57V)H$sC7YM6Lux7H%*I- z8T%ZM)WWCZ_i!Kl);ry4y<^;#pY7m4a|Lr~zyI?1J)KXzAH_>34R{(p$IxeZkCAIQ zBp;!)?#%c-GQVHeAt|z-t1teLRfhuYkL{W1&geeVosPeB-^f3--dB{989qkxrOPLM zDM^*pJB-L&MS(1LUhJO8nElv~Z@nwB9_{n43IBXLBH1ReISarmx~8}@Ix8{0&r*B6 ztUH4`CW`{OF6~L^>_YA#BVTWOM{rqtDAS#$?UciXd+1(>Pya&pKkYjtKVRWP@q0FR zxILR^xl?I<7wD{y&demAZcwf5HM%B8_cz;P=Pf)KK9Z9aK1yrzPl&rcf7j=QOWcKs z2VxvlZv9x@A=8aI(jE={{&C-tKAB8+Mrk;F!aP)eS|73vf03_m!)|w4XuI3pdB-84 z*5AE<eNf)nlqBzL>Z}v(olgs2=hLNn{oM~<>+INH-nHDuG4Z>upxZ5RodR5!T$<id zA__Xzs`Yt2Nbf;9t<CGqcrU%^dh^!K_@Des`lv5nc)Wt^q>G!P=hqiE9j}v?y}<Ox z1MK;z{k+)2p3~X0!Je6JySSJ=FQ?~@r8nKb<f1c7wH`ne{VO(xb@njYMq~4#-a!dV z@cxo*Q{o;1+)c2&6AIthHeRk7qqWN6-gxxs6n(Z-WnARU;>ccZ*u%jiH{D<HXVfq0 zi`Q>SiAaN<_RzLkT|cj^U#QoUu!Mdi7{8xOcVJEZy5uwYbf0#?m2}RHoU1CMG`b%a zW2m_*yR?X48c&<9#BX(p%|SKik=_LTmiCbsseS8o_e;3fBgAId^K=e-PO=Eo_$NQb z`PtIPn@;7@IXD<kVY-L4V~W|-QAu)ZX}OgB)xx*<E;<9wKJPg)U!>1!I%R(fhOZ2b zuM8VsvkZN9wD0EoX-)Rjo6xQ+MH=eY2Ojef`1g{65ctR*5x(Q4ge7;p7x&P%n-Z4L z9t(V9TCcj3=Un+sw{ZF1QfD%w?4xqcxWZR6;f&^UmN1-M6@#<hmw+$5*PhPaqkO@) z3g!B0^dqeuO`U$9<U8%boxqit3|tjSToHY3BV4Z)zPWN8bzG!fr2n7njACDW*u;1p zgYnv@$7^@Yc<qik=OzwyAzgWHX?WYVit5hU`kd|}Z@kna)ATvsz7lob4C$P7R=B4~ z?cpUKs}FyN$homfIlt*8TS?mFl_G(B*0i5h=>=kt)(g&v^_9u_YdYV5t>~?&{;$~s z`P$U^>e~`d=95!x>D^aZlPD_Wnjg@?M)y~{lM9M;+HrUN4)Fdh(jU0Fps1oc;gFm+ ztQp_V%IJzM!-_Fwp}xIy74GkTE?9k0yFvHSRgO+SMIGq9WZwpPKOH>}Jz0L`vn?oQ z_lCJp*Wwc4Iqp53SFWq2GnRGUl8&+8y1&g6mSbDpr5AGbdy@AAljH8M6gT$KxFB8< z@}$t(EV{RTPdA>syeUsrtrg#fZvUMgJonTl9}d2YdL2qR=o4Pi@0lGcsGS|cv!@@n z3Fy0Lmp6G2olV$NBJaVYwf}C!gk7Z~vHyMHMa)6W1Ds#rMH%mkIG^Z8Szh7uc<GF7 zcR{V!gJ%PI;=1W9FvAeLyk3vuS1C8*I|<voDK|l#GWtC!*B2Ni<9B&et|uH6jGrCq zOU9U;7nj~qdU<;vcutciB<I%Evmtpq^2AXdqFL}aPcUVvoUf<3U|NUOBtirqk@L>U z@v59bX_6<%XYto?KmP8TEaG+`(ta_r#qe8P*OkJ(B-=eZc=Mv~P+mHlmGUB=xXO@q zsiC^j9mKOBgR9Ut#AAagMbyW>9pllaBIL~uAKQiJzCpy>-PZxfg3_w8MV$4!EE|96 zxhYxJ`6=S%1GR(dCT0IyvqL+Q=uXB9^E&2TnBJ5airjZZ>0Oh7^Gdm2OrB-d{}S4S z-?q^jGQ1<tnvI{A*Wm+S&jw#tywXc~`jSMVq}47ur@izM;&0PM_%QKuI<t-KV~Mi4 z<$Y~>PSCzbFnn0Al|Jn=9Z&O4nLqsR-6<0u{V(1rbBc2>3d;C8T<hB>Uyo}h|BLH! zL#MO;R-gSFyZ#ouD(-Q${x+^%t-p;!J>#St3k|wh-{Ekvrz0C<HamJfr@h|PE!cX; zgC}1vEB2gxy)0ztN!QELIU*-pFDoifzFwB>{*$ejwa*i0>1kHFy}qZQ95%38hgnxp zuGT6Qlq<Yl@|?!o;gjL5LL}^D>vVHYW9_TwG}gYpeHv?D_ngMs*X^gV_O<;KYhRbf z;u1F3be2v!%mr+%>n2+3+FLd7T36t?3^=B}m7%C{$j3a!8R@RXvwCKOPiCdu*fdD( zAE$on1-xU9R}^G<CBG+qs>=(W3b`onRj=$9bpGTn41!&qkbC-$uF~*B)>>G#{&lRR zgS76f<T9Ewq%*N1WA#Mq2V>4hEqwP}+KU^tW|HQXgU|_Dh13a%msso5Zq;;GQ5ydE z`|3UWUX8AmBHez^baj($kR9i>*I35&+G{LDk-f%})`webEaPvr*H|WY+iNW2J#vj@ zmY7a+#>|I%qWe3JJF6*F=U*!KBI&cafX_C4HbI;`13|B4@O27W1DIGEe*8tf*O&IC zrKz==1xp9=?cX}i+@$6<UCX!5byaSya@B0@a@B6#;i}*ItgC73pIoioE>}>mmtBfJ z%?PePOYdoP<)ALlD!tQRLTiuu*3vqpVbe*@%e9$%gsUoh$r8xj#Db)PrM=IJ(c7xT znc%OP+ZGlq-Bu#vN&f+#o!(z1e7!E$rO1=9jW%V2j%bdiW6ZpE-+dl0(n=5)Azp-7 zidcrY81Z7nOAyO7&4D+I-xP*KT;W_-$sFlF%Ni`tXBz)=)ZLZSIscV*)NP*cAmxo) zR3cJ#Y&xr8siqh2rZJH_g){LSXX&Xo9~1G)_blg{={rwr{~YX%u@45X%P9B8C;hUh zE8O21dP~XT?aE)H^WUP^29ztmmn*2|MP17`0RJ0+{|&(Z2H<}K@V^20_l<M4N9>Jk z|8lLDOaO0j2Zf>MHp5}5<7BIQTSyM;brH+aZ_E3kmv`SIJo>Ij!OJ6^h~A+y=t!SZ z<*KuU^;t=BZ5XYKBfYX~5uJ-v+Rnc9GL_Y{$iMtlGM@TigDL0L#Ev;4v6AlpqB97{ zkGp+*yIvzN`m;o0UzTu_{YX0aJ<pJR=GjN*XUjQNxv$G}siyNvWs3nfs=nnrra))Q z5^+IUKQX<J*0z8TQhC1n!bfOMwl54^+-<K(Qukda$+IiE)~a)&Nbl6YKYJSb#Oa^& zfwp=x6ZX(pqBCxTzdx@%Xu{s^5<7jB3GbDN#J}kEMZFuI0lqTv%}&VTERp)yAB1>p z1r!ZD6ThZ?!Tn=|d)F+HNaxM^I*3Qyf2rnyOVPhWyU!A-T|n%%uZiTILf8q&Prl&( zvw+*X$p%ikO5&F0o#fuC#DDa6puB{iwClAqLra8vzQTLr_x}Zd?S4%Y$KwLJrquK3 zyqQ0q7txnX#F-QI{^kjNZ=gR-)R}ZX)RE4Zgx=R<twD|K6RW;tzi;CuM@z$xE{XCh z{|je}(D`9hH;KofzcTm-)khe+HKpNuKh!i=Yn|Ko*v~;@W7Ha58Y?}1Kiyxg*EyG` zsyW(6o<0padRfmYp3t9t&;1xLKLp;cQ+Ojj84MSKwg>kT4^(#}fA%Zuyj{KjcO$Lo z@{6=pU7ciOEq<jVTZ|mDHvZ6(>|g!3bL~ay9z{d%M}5g(xplL@W^1XxwnU8H*ZITu z+tohNaG2&I2tWA!`^58t@%w3wNJfcBxFR&hU#a(6zP;h7zedetes-Ha$9}q=yFAr7 zTv2k6&a&L3&IF;osX2Id>1Tt^|Ip9rc#bDqO!@Uh4ehs(XYJoD*Uh^@7mu?0A?S>Y zqD@(}&MU(Eb2hmnyr0hYw0M6yo~^Q_96r%}`HAj&*Syb7Yf>Pq(_ll5(K6lWyIZX} zt=Rb6AJTe6h(&9?S(@TM@pDnvopOyVjO!g8;O7{7kfW))sze%isUUv0Wc+V`NPA@a z$BI<w2+7Jm5k76V$g?v^x5V>M%SRT>Ix`(Qna5gNhdv}9nE&|SQ{E||bH!tRFAaY> zl>CFLo^jhEV{YK_cG7j8G)KQ-H^$LX;o0FAslj8u@{a78>AUa@o+T>YJwFe+|LjUp zB$~wGFwM*M>oK=&mT=Kp>>XZzeP1T<G7J0?vb&&8xOUb0>q#d83oPorQzZ9}fu6cT zq#!0*d@}f>Dec{3fZsxl`?m|*>5c-qpG)?K>mBgJ6j~$TyF<8reIDwgt3s!-7IT*L zK^4?S`L6(5dk#o{o2B-WxVnn{O}+;`IR%4~4*2#Yyhm&PJ0?v|zsiv9h@%5x)ci}9 zoPVJ`a2UhBj_hUaJzkMUzL)+N#E^m%@RL6$d_d>*^q|bsu)SS{?<O6fy{2?t60Ii= zy#YB97DIMq$@6Oj+1m09$6&dyH2lCn$mY)(E8+{o@{Ff+=sZ#nAbtmZun9a5eDZ;P zr{Z_CrzaHfHxa#)4nlfk*TRBI-7huLhqR}>obc3DQ?R@%9{LEK@!>_?6Z}oV#HFHV zJjO!2JZoF@$BWb+yk7?1(*0b4)JfEx)F_k2>>z)Wy1THTvU{z+iF6{$Gks&&gsh=G z{eqr@_r=k^hq$6p_;8L}?TIJ9dW9&;qqK^L-Loqm+$irU3O@Libg9cENFPz^tcl^U z??Kf2LGO_z<9|B4qPi%L&VvcYpCxs<9pl9id?$5BHLaJqD1FB~F>LdAksK6XNe_z4 z();jT`aM{AX8Nh*C-Gs)kN1#nm+&6s;x0Wmsn72zZ-qWEAHNg7qjS8{)P13p_t%>% zD&2GzrReVzso)8%eJ=8~6tw0DkJ_(}XL%;1@DMMVuJ75|1^#tw*Q|nivN2>nJa=cQ zeMI03L%<h4L7t|r*#%9JJb1S9l!!C#M7mygWmcW8tR{Mudmf4v4=g|=T7li^CL3f& zDaQQ{@)f`yxksdiHo(?&i6Oh@ieYqrL23Ax1!^yRLA%<IUl6fBPiA+LT}*4V$xiN* z=fHU6xewso*13VtYCjb1J&<Sh_14KfZl3<NB97jryvVnW(rH~^KgP7yujtO-cN8v; zEjfvOxL@lAC)O?R7%$~?OC{`|yF?E0(+%LKq%X`>=aXdgXR0%)$S%9I?qH%{#L<~C zsg)w(al$F&Q@UPf4Vk%J?n8o18A(2#9kazqyq5snNxn=n>C(!BiM02Ep4Hvu&kiBD zYqqG!ITN}N^p4P2QNF8_?0z{HQ_(k841+!^P+s~Sonr8=InZgxs`E6+S5RFkJiS?B zun%=Yz9EmT6vLQKn<#npY~k6~0i71Sns`3(YvTF$>?S-Py_4GufX9Kx(<BcMiA3Lz zNp^j573$^IXPi!;{d96&;C-XFcmDM6w7w*xa^tIeO2nWQbmkXi>fk2m7{m)$T{HDN zt=2ofQ2ZghlO3VyQ|rg4mW$}auI12!-+-(SOL}tCzJdbin7h#S!uLS)$|gvVePA3+ zwECgIa0}pf2;m=bSU>XizX4&5_H@&^Gta2~LsAZce!5eX97Mk-_DmLOy(uD@<T2fU zL~{cQzn{&D#_y-kTKJ`N1qsKc;Uhy&OGYYNv^CZirF~tW!w!8_+o7$;%}+^x1&y(z z&z^K1i+qvsMDyXR2FMq!lXj{z+~uCJEP0pso#>Myy_W8S6X=Em``bIz9V?(|H=XfR zB9c3_pZyl~*ZkAT{OVm3geUZtD5w1=w4P%}4f-mn{L%_>!4EqsmzH-V$E8CDYzn48 zpQ>DXX@@5c@>*1O%@ai(lfIHJ@3_PFAxFz;{X6Yvq<u0Lebc-P;n_Nu5AFMi`ltIQ zb+!~_Z*lhqQPfi{ee~9Sdnddrm+DLS+wdaloh2$djKi0rKK0-`XuGGY3%~7HDMohG z9xh+9$UVFB<`O~cp847n=soQ;=iITjl+K9B@0e0vzGNa~Spx0n`ARzaqyjWQQl25$ zDW*e~rw2EDCA~C!`}rr~ucsV`p&-T}#v6@C=o)e?sIx?l<VKH&k9Wy4ekuuH@qO}q zf(QMrM7tZFR(s;+ULPOaF-r`yeHGzDfUR@3y?t~(qV};!efv&}C-=Rh>Fg=mk4^p) z@KHKvAg-rF>b_}mZb<Pfngh?!b3|S0T+x4i2>mq^wuE)JZ}Qx(xTDH{Ssrt@Z+X<+ zzPijfz2+f~XqN2C9i94on_1xV9du@owuMR8o+ZlY`}jK&V{sVlgb7lgly&(G_C{Pt z(S70#tj=m)cntY|;wtHzMc2pq@E2{1D@WZcNT$j&wc_batvEmF)ZHDTLcfzkWo`I_ zC|B<&eO~RiIkwJzKKeZ6qjhu0M>f&~$y>*Wa&<QW##y{vN0WeZ%h5iSCJsxVAncMd zeFov~dyYXSWT|r&ReKV?ug`!>Q#!(txsM&A`*B>|)HcW}dfuqpoJQ--SiN49ZOqbb z6x2r7Qj1Th{`~YsykBg;FDlvln~#5=>|L3c+L?oNntw^L`pqiWuJ6ZWau8qiP#Syp zWz|0SZ*&>S1C&8_q2I30XDedxyyY~$Pi54w_AO=QJvc!7e7at<s9Z${YR=M@0snlO zc$Q6nM{dw(wx{YdcYkv_GAsH%$d9V<%@d!MaiTMbwvX5KN-Qo7Z*7x$=^%frZ;Yrf zSRt08{?mI_i2MS17GJ`9TOanf68$}PCuH~-F|%ik++*n1zKG9t7K4^wG%sDi&QzuI z=k%Fo;X@~oVaJt&GVY_Z9O~+X+dBKP4*F;0oXE-YoJg{LlOi?(=tK4KKXR#$AmbC{ zxp>ey2FR1Fc<PaklgibB@ciQ`>*cx1caE3$*P*SEGupKO@G0m(C3I#@q4a5q8rVq1 zYJBx1lT4>~Xdi3mp2OwPWs7K!4(-<|4S)EcCG+QAAKu+nEj+O8QfVKVl)Xj?<u8fA zYva;;Iz_QQXW0+^tt2?siw}gmt#6WDP#W&;0Z%Qa?{;MWEuHQq08UC!R&nR{zonn% zxh}`sFd7#m4@ustvkb#Wy~%VBM8r?H)TRMZGH!Ol<JLL$XwQ+(7fXCi(8)Vy$G4MA zRrUSGpQwKxdqeVfJ$C=TMEQhbd}YVW+!Oa5^&6cxeBiuxwdXKlzSb4nNpB@Nx%C;m zbGPIT8Fc2jJO{wm2@mUe5c1o$)7d+x!kbk-`HLdD=#+>qYUuTTN*7I0{%1O$h<v@I z6CF1%Qs-|!neHd`0@RIsFC;t2mM7mO_{kN-+o+G|t{vKcGdCpsns$heg<4N8?Jmd! ze>>^_=v#Sz3zbLn8XJ!J+ogZb{H%RLSbYO^yZ2vRr$Kyc!!gMFIdTp{)Ma~wbyo)M zpRmrU*7s)YmwpN8b-ueSA8c>7_QCGP`-%GQ0Xidd2<a0v_X9f5kbE6+hZizEOAPbf zEr#uyKz3xoQaK+9o3Lw<zoZ}=Hb3}I&r0YSwbBQaN&Byr@6H1o<gbvCqFm3Hme78S z(Aca4g?D8g&^&K?i1y;%jql6)-M-n{*Gh9NWWRU$<vIvAoj28eUDg4`8~*a>Y0n9r z$X3^U3FBjOY50Rr=w2K0+t3~i8aw#LBF&>dA{`HMz`bn>?7JemqtzqrGg^zbt5gVD zi?(Z!h_mcC@_E5l8d5MB_(9!6DgKgOw7+$bq$wfKr<fu#3a-pLKy$EL--o^J5`(us zEWhLGnVfZi=JOGg5mOKcA*L4gi6pu2pi*Q$b{*f7O}PFa*vYOPTDGK9{X>}+p2PV_ zyCK*~bEM)Ex=S(Uez(U}n?H!2yE&bCrPG*mlRnPutV4yP#ed4PC?I<~XZ>9650&?8 zRKG6Q6Db<F?FOPzx>Jt)<b^*LDZw#&MBz%2LU%fapf6B<dA90y%5RR=b1h!YL+gWQ zzK{o9-qY2A{_#V9Lf)RB)JMwv7!zIR6a+&@p(BI$(w&p!|J|`1_7I%~yf*7l@ZBr& zI<jG#d0?|I!uv#ji3LGxj<g%k|KfT21D*E;yUpJFq1Wbw=-iiX{EgLX{H={mb=9*) zNua*Ts9M$7)@sz^k*;A8^gw@?<z9n)b?X91oxQ?X7HDW~UcW+!`R#$~w$^}A-B=Sa zs#=XIqrS1as<p1ML5MYtLgcP8{MIkCjb*v@00RwcT5D&o5XE&ZP4!jl4R39r-Kc3> z*OZOdo2weu1dPVj#=5||#^&|(ZAy}Lxa49ZXk4;j0lvGqs-X(`)>T#4)-~Ys_#0?J z9{GU3DVGImE^KUU^|r3dHfjQ^+SV9>hO6tE8ynW4>PD`ys;#cR)tK0lg9yH#KV#<f z{F$^IRESHeTa9yP80Y5a=Zo_Cs@Bzw&Ff|&o8g_<lC83f#f`0v&5iX{#^MW?(mUmi z*94l&=NY~W@(C348k^QP*R82-HN5k(Wl=c>s$`T@wdNR$8mjYBQp9C*7o*sw+=)#o zV%97}p|Y-Fjj;+9H(IKj>zZ1Px&~unP2R-(^J<KiKy_n7O$#cICIp&|ug)`C8>z#Z zTd7JyH<``?5|bwz^P8I+n`at}>gxk*s_M~0>(*5@)XY>3p#EuGy;>}4xVoyou0|oy zSchIz85BZ|IaDxU!=U!7ri)coE$Hi-n&v<Yp<JjA6`~mZWL#4VDp+Q9`3frFnyR{1 zL(>lBZ)vS+mhEI^%#~z^=Ey`Npm5RHKr}V62~C#GG_I*@t)+I;Ux^tDDO9mQYpq27 zRc&?E)hh#3C2{GJMf2tv^IK~J%?*Lpna0J9#_Hxkz-V8GI<0D3y*kjW8ii2SSXBcG zTwPZm5cPPb-{zMsFzVKU)LM)N>Xf#oCe$NPL+@C)yF9lUm1wS^x&o&y0jhEidakJr zUz}J?c`vMD`KlY+K!ZHDtioJ{4(r!hk>6We1M8Y3cBoo*IW<+SRgwhMi$qMuGO8v} z1L9hdLUb_M_;OWq1JFIrm{%L9Ufa^P&RAVlSKrng09xsrc(1-4;~@Xs`lW_{wtB$3 z^J$D5O^tO8)C{ype@Bhc2<e^-5Bcq~=+^a3l)qhJIvk#KZ#aC8$BvV>uvlTmiPauK zZ(JQ{Ue(y5`UKy;Mz)*iPWG2gLp6=pG|1nGj16zaf{JpZvDs)}f9>K+isvuRmi(-- zrPXMtT8H#S<<`qcp-z{-vwpQRs4+psu4Czw=!Z!vt#x&)<WcgY^83vJ&>>z1MP1X_ zyq4%46iAQMrUlmbjCFM_El9+VZ7o%VR@nq9b6!=$q*et^n%JU0MB^MNP`I!^p}3`0 z-xQfgwuv%=?^t~WdKOC>sGrs})Ln}NN!(Tk)yp3GTJ^e`mW~LIT~Idn@)A7=fTtG7 zg8CIy51o$jx4LdkTeBSS#@c{lTI#I`6JM=z;oa5p-9-&`t#!cSwO09yWIZll-vU}U zmMvIx`3g~oJWBRd%Xch!fudT$0coI|_+_Gxx|UWwv?K4z!N08PY7Bs?RrP@t5pmUG z@stynNbgcvxvLHT>iVjd+LeUv*#;A8Vtz9*M^%PZPkJXnzvHhau}FQY8gvh=Zf;z6 zl5f`p>I1C-!UY7X!s<%u+LgM;NhSkL76~g}b{Zw4tH40OEcAGi?NgsvNqk<lP8PIM zw-Fy|G5j<JtzYQd(Kw-B0)}5|2`eQBkv}yX{^qK6Ru(^1b~a>XbD#<;goO%GEn&sG z>a4K_!kZK$!|)S{I<dN~zTT*_2uk*5jv*0_k%1(TiL6?boT;-3a2W~ss@4^p(v230 zB$A_ZS80w<^*JfsqD~N$(KV60Rt`X7fTTglF^qf`U!Dp5<m$TWfKAuL!e#wya*UQn z@Q78Q(zPwncGk<ZRRIIM0_2-w$$abYvQ<^pYulPuSg;<P;5UmdH)_Bus$11~l*)l| zO>><T#Hz_P0i|;^Hn%9T%W7O>jXf<wh^Q|n_7xQrN~n94!hldFNkk<xfkH^I#F6AB zAV_+To+su`y8!P(cI5jYk=Rr0LyE9}%geKW6+-jFC{+cdXT<6*0lP|(pE>J_eL-PL z(Y>+EVizm)?=6y?s;XPtpm5O$k$i~D7K@&%n%A_g)67A$@fxG43RMh{YNv&QEo-7k z6JMFCtAG))s;)sP+|hZtQlL5!m{b{*j*Zb{Nd>7detGU?7caVa;Y{KNQEwC3f#h`6 zQ&hj>?bb$8NE+7U80*?vBvsavcF<Z|B{j3^+A5`6S#qqJM)}108e`S^Rt!zaiY*LE zeM+$_C`X|CRT!pG4MA2Y7ev7W<}I6l@xqD{s#a9KxfXvV{3|&M<r0FS#j00RbK@GK z3^0FaHi0!XW^?6Otg3@lkcJIv+13)E{m$wgIXJD%u|p-M+<|kc@kixIML4zyovzDR zH*g+H@7BZ;p(zoeQ$=*eQg&!O5C&-MHZoY@QI@Hxei_Mv6*0sg%L9ZgN7;N;HN=lp znJJo{6ni6N#^{}S2GsmUP&}H00Sg5YWDI3F@<U35H$;9Qor%Z++_Je28lhyfnz@e4 zA+w>itwrgWI-fKfNNoizY6c2PfL|5)1z_Ri$#RK~R|l?%8k22YN77<P>RxRPmSu(x zAwv!J5dL4OeiRqlrW^l#rB+#ax@8g>-f1uo*AelxG}cS2Cp+q0%XFHE_DTK-vDez% zCguF<s(PtcppAmq-?^|xXOetDoC6D<8VJrP<>h>7HL60PlLwmD5$6afqlzqy^+r96 zX^E5Bup-0er@e@~!{%o`#9}<ZjQBy=JX(fW88(l-iZ}t!LBu^_^OFo6y@>hx*&sbE zMoVmLs9!Ibc$aLLKD?x<hN@(VuZG5k+^b<`w-O7DD&ja9rc#wnbo^M6c8B>-)c<4D z>z{`Z(T<Pt+sF9WRc!%O5o&-{3ToA+$3`x`0466@WJ@PsUDr@^eAbl6cRt#q;y-|! zj}B^hZ$v9(h=>f0fNV@-a|9)81M78x;jp*;3&vi=rx5oe9tnrDGZ2F@(TBM7-yD5k zEPDHOd{wnmwly|i<`@6Y7p`ah7mTozy^kR7Mf?C|rXn`Q#2m!3e`m~}cJ6u8&%a=X zub^sGbxmNkH4e-3r-@5Sp?l41Y%vxVUkK*iwyMQgCi##a`70tWI_8ZtrW*M(W}a6t zbNVzXBT>%${PPgc6&K<;9G+7V4lmq|zv%Y`py}eh3bx|hjrhGR`ZtOfhNAP#IiQ~D z{RK5Kd4tElKVU3T@6YMAf17hCI?sX}{mtI!-{-uHv|@Un+Bpy&?ce5JIInpA0>vlR zWPGu>dZ~_}uhn~0JTA{iU;H~?xSo5zV6@ucN329dpRYL_6L%uM@NbSKUoe6Xtm#Gs zPh9h|YFF*jn3#r`|L={meqSW+N5q(~MW5FCbi4Wni0%L0xaKJS7X9mg|Ifr&8vC4a zO|Om^tF=PM*nHE!_;<cow0ZF9^JvAVn}MU2!>1WHe$M=e%?5)r21qZWdVF<WinJMg zOSN4gtq1Z=Df__);y1cGg8W*!FpmPp`o=b+g=P-C>!&tk&oRW3hE-MdRSng!l3H4u zX_g^H%w4w%3T|Uti)A=T?HER0ZDU<E`Q)1AB$J>hb$;phCjZ357HgKtp1+z%PQ2zo zRn2;%r72Kdx4KUG;;eK_Uv6kyw+iNswr88Qv;6pctLv-QAXoJy%kQDn8yXGtTUA?q z>r}EjWVVP!7&Y;8@%)Opm(N?Yh~B?sUd8+hYD2@?hQ@0elo}uL`82jF(^`nC>T2>~ zTwN!P8EL+dJ-ybD&P!Ccs^0QM8-e!fK%gcd?aewpd#5HdngW*b)26@I+FaGpvKsAP zRII*f;YvF>(5jZU>RNJNNZ(qd2x)!R7-UyU7h?-eufaana}-uXEUZObQz)aUxv{me zy0M<OMt-}l#i$3$P#ft3QqyZh?>9pqzxf~{bk&=|r?<EfA$PVw7vJJV#8}<}8s7rl zY|Bzo31KBQ1gd343GZS}&8n61fqV|SifUR{o8huOLZJF9<?oWN0>*`xTmr-qJy;Ek zwj$|Onz$(g^6S}*4}C|btz5T$WnGgfR-|D7jpTfY%Bb?G6v{iXC2u0p3Du>paU~h3 z(pJ|n^^fKQ-5bAPgzW2vT<^x1?g2h~AWOGaM8}?T#HN39^nAex`se}A?Sbyy13BLF zTsZvA`smmL-TIrJe`mb7F+yZ@<Z4-6McmHzttsEZnn0_j%DRTtjo_=+J75RoL#r7l z{hQ^IMT#6Fn(`u(fYRraXZ;h_3^%eh)PR>p;O0Q})qn%7wJU3yuU=Wx(rmQUHn!E* zSThNr`+9P`T`lJZjEOZl%7<dj){_4y&rtJPaw<tWjY(qU3Cq8fXOwGir=7!c!bo4E z@^0kX987xr)Rfl1e(Q*Tr?q)Kxp!I{4Qmc9_IL8_O>JwSKgXqM52{!gXb3ddRY&-9 zv7B<5s-3f7Tym7=5^Dn<6z^5_X=z)Pt0sdCHMMR{0LeVDd|!?0Z@-O*G5KxiZTEmS z?ny_4Ouh&9-aS6lktX*e_+5YsQgtmPt*T#3zN@M7ANiawn-@u=?v!5AbII8k?Kzcs zqy0(t3&&^G^r$71T=gKt<&DkF>vN227t>s~Y;a_*)L0*A6%`SwLH@)VIk!e{&LbUw z2#NLQYSk{P|I}zdmk<|HZ-H2^Y75{+8+`-g^AU{uN5DrOfi3<B_`oBO6OTY%JOaM( z2;@h<6@laLKBfP{cKt47O+Vi6Pty^7(VwAz&)2_Y=xFFN@=p>oqT>_d3r2kN3AE!0 z*q~2@5W(A?I2setjwcTOn`8MGjOe>3Zbd}jJaHf#eiChevNtA9KrH@uM)I#S|87-e zIgaMNG-g(=Y^xzz-%!)qNVG{14Kd00a*dki#-=7YlUKbqAoZz<db$fQU)Z*K*~FR^ zQ;91=H&SbA>H`gUsF_N9w;|9jSK6cyPY48*<6JERTDdYn>O)gweZ5pw*EK>3k6FJI z4)4Wy*t;bh{w3&q??Dy!Z9;q@9R3By&M$T%9uiJ)f)kwJ1SdGb2~Kc=6P(}#Cpf_g zPH=(~oZti}IKc@{aDo$@-~=Z)!3j=qf)kwJ1SdGb2~Kc=6P(}#Cpf_gPH=(~oZti} zIKc@{aDo$@-~=Z)!3j=qf)kwJ1SdGb2~Kc=6P(}#Cpf_gPH=(~oZti}IKc@{aDo$@ z-~=Z)!3j=qf)kwJ1SdGb2~Kc=6P(}#Cpf_gPH=(~oZti}IKc@{aDo$@-~=Z)!3j=q zf)kwJ1SdGb2~Kc=6P(}#Cpf_gPH=(~oZti}IKc@{aDo$@-~=Z)!3j=qf)kwJ1SdGb z2~Kc=6P(}#Cpf_gPH=(~oZti}IKc@{aDo$@-~=Z)!3j=qf)kwJ1SdGb2~Kc=6P(}# zCpf_gPH=(~oZti}IKc@{aDo$@-~=Z)!3qB#2*Ihj%Y(T>EX!?PVJyqNn*OUb{I!iO zt+VNQo$<Ab1r_B+&}d(O?cz&{=P&M{pH~_FRaGs4l~px0&4HE{Wc9DEs}HPfs9G18 ztx7(x6{Q=dYf3Nwo+*}XLA)0+h*)EaD?T#C(w(MQ*=LF`*CJL5F=IOA^@!Qt^-s|| zm5-a^dl~<Ki2v&Z;DrB`VCpD}6dcx3qzU1|pHI_NL~y(Ki=k7Md&7QH+&G>87Dlks z|I;qPHNJeHGLYS*sGzawD!M)z_<L^`nc~nPQ~dX<sQftN!u;x@jpg@M{<P`OU7nuo z9T)9d`|OrqJ^H6#eE8R4)8f+3Z8`h0%f5f%t<4{=`t8<&4H=Jp?Vhi^^7K!(|2_QH zA1ADuKF@8WyK4Ts^=HNRR@`vkmESMD!FyZsJOA^KUq1iHZ*IBZ@^hL;4o%Fz`gg1U z`K8+yJpSae2d=$+^w)hKzwu}DcX$45cgb^0->JQ^{Q*x=MwK_tH~z)Ful?oS|M=v) zn@hIUJ(%)?DPQ@=MXz4_<dy$<=2a=>GtZkm?Db<mKk(Tz@85OD`kR;jsPN%4>+cVK zz3lDf&*z-&k58@4ocovW9Q($;5B{+4(aBE_x~2BcMc3Wl@WfYtbMZ&Bhv%I;_R=9u z;k*C(<2U~B%cIYn_1&3wU-6Cho=sg3?s{p*`@c$kHuuAe|J0Zk5<Bw$%Xq8YT{N+2 zLFJkaKiJxP&u5SQ{wK3u$$YEx?_Z7EHLUyWzn}Z-3(vnSebqJ1U;6%g_x=2~oi}X$ zN5eap{3hr5!PDQI@RRgDcUSA`nuQe;iW44q{mD<izU}s>{=D+z>wY%ocm8u;x!`Y! zJtO;9fBEXG7mWDQ^w-K>T=&V4cc*T9Ve`8`xaq-%mll@<+7oLhW$f|%$#=c?o}YKT zzWn_;pN+lwlRNf5{G%Uz>!P-=R9rdZ+L0+Ap84|R$7X)>Sl(aG_(T1^#ZN!<=*@Q? zy5+^-IrT})Ys%*Pzn!xo^I+<;f6WTd{^g1{g5SO4nIC@RwY!frjJocEi<f-0HE-+e z?+y9Y*u&A35r639lzQS|x~5ekmYc5pgQl46!{1iKVnn|wW-iCy>4=$#pg%wIPCbJ7 zIAXsk<|A!tEh6$yMgE1i;_ptxcEl!AETD4sBi@S$nd3uR_IAXLi0!8E*5GdwVhLi7 zDJEB#uDqj&hY(Sp8R;m8zTrW{_oq@`FJh|c@<Mh^DZ}3n5b+J~%cjUa2$}ab;(o}$ zR8y28-Ir#%W*oIfp^j*`59RnWDP8~O*1w}pK0o_CPW`@cFXGPQ%UOuJE_{{Jby|Y@ zy#(J~_|fsdF9d!UR<d%e@`0Cyq2tOIIfvBWH+HIgQy{CC?MC~S6MS(<jEm~fyq5Lr zTB}y!Z)>yqTWdXC9jI<?Y;F;Gt%3Gdk+-_8p-$vAH`Y|OR!y@W=;!vfCXu(Mx_V`x zy*kj;x)Lwf2SlDqZduiW66n9r6VB4@Ns^3Cw%B0F5w1Hy1BoW3$052rFSCqp{dcm3 zBkFhIE?gS(J*&X{)67?(pW|h|ctkOYk1>z_JJ&9+e9uYBD>==4U$MT6{zU7}qfha? z9^K|j{fvB67Dd;D0r0Zg&gTyyA86!VFUyyv{|;4othZ(T)(%j=2z{!2vmlo$sXqn- zSf;;AWhO_Lch_@5oO@t^@?wL_eh7bvKf|oHXn4GCj|HEPn9AUVR+}_@1!6jbsZALS z?m*0B@Hd1eL=Eo{iUuwCF+?wepGVAL@b848F$;bdaXN!PL-g6O3wRTL24@Mam1uYx z9*Y?~PbgZl;3ar0WAGY0mNR%g9xE7p6CRf`_>O3NyS^i|mZRZk@VJq|zry1t2EU2N zEes|-rQ3$%67hH|gGb@9m%&qGU~21j27fggUvbyQq;JDxA%m&@2@HNoC|a~&;+<Ix z{w%t`<I|$k<Igdp@DuNg##j7BG4NucX;{P57jX=}T<CG3;V+3O`i{RMy8iLR(-RrI z5|2p?UL~T&Lwq2*z45hpOkr?69tSbFNkomGc-V<FmLqUG9)~bEh{rP+OtiwrTRhRq zPzDpN3}Z0S%5Vk~t+4SKPqZ?E!9*J)8BBdYioty%YCOl^i^tInCK-7qgC7w}_E>Pg zh#LR#kK=I+gJJQCu?*fFLmzu$`uis~z0kk-Uz#FoI)mT9a1Ch~{Sr?+!C>$I(-aee zIvsT5b}PPZ<#(S&`i+J`CvJmu9R^R7^2&xMlYYeDsiZ40csl7#3@#x3i@~!=7h~`| z(#sf3dfIjdFD6}%!IzU>$KWdf-^<{YfL~>B0PsNuuLaE8dzI;$>}K#afYTY=0oY*h z2EY>-ycsZW&o=;9F!(mWy$rqsFt6_pz|S%G0l+UX_))-n8T=UFw;B8cz=s+94D>g_ z;O7CSG5F_zGZ_3U!1)aR9pEAc{{b*>&s)$VXpAJfB%g4<r+h&oN5jX+2Sj5iPSRV# zVDbksIFo!sfYUUbM}8ufK9_t(_*#>O%gKL)^nMMmBwrHXd<|bkekH&m4R<OZlkjNx zR`OE;_Sy74h4%;fu=;E`;a;Wt#=ouKe+=Iv`uA%1S)^O^L-31$KVmTCSt0Q#vh%?= z6OcDZ@-b6=pIC1hzBg)*hQZrvDs7m?+muJ_`XrtWe9-&b)%O#pqkSZE_Gowk*&%=z zYy4CD-i~Qs%y^!{=s&Rx<@xOPB`!0?637VG0lU3R`lH*s<W(C^tOC5B!F7NSGZ_7| z<OqY;o8n8w4DJG4#^B9>mom5q@Nx!k1I)fp{3yr6+6R7=Go8WUM>$Iw41Sao!;f+p zzKI_xd&uTTxorF-e%ln6VLZfZ`bzwsDJu4|`aOyKZ2TndM*7<<9r(Pwguy>W`mGH9 zIr@|MQIhUY@W0$zRv+-c+<FFs|K;-bfdA!k{s{h;yNSWzf4Q9g!T)l1GZ_3Ym-A2X zzubci2LH=F!eH>fJkD>x|MEEh1pmv+WH9(&UNM8g|MGbMfdA$3_JaTAg%}L}m&f@h z_+K8cKloqX9)|x{OmVTr?+CvK0B17z9l!>I{|E4N8>aD;cQkrD<#GC$NPYwcPbPmt zG(Aq`^hv%3j;{jpZ$#7MRF0o{<o96h`Ivklq*p2WBl?`WljUDbzL98pnab!RNs!M3 zP`Q5p3i7u^)6dk$qv>aAKYKr!d@_JE|0a6M=k2|Ud^yqdl+W6mG>m*afcES6JIEgt zO<(!E{hP^8#NN*&pAlYl>-WDw{-0=i%jfiQ2l<8A`;*8=1n6=7{tog_MbqE3@@V?Y zXZ@R$Pd+U4gHOGmRA`Da;=e^2z7YJM#<S-CNzmU5yBYjtz}sz@=y@9Nf6((ZHeQof zo1&EHr$pBm^gXSc<%fKq#_1pOeHzzqAm69){)K!$m-i3k`?(C?Nlk#aF!*Y~w=y^g znBh0+dccfck~RTm`b^S)puN4U{kH+$!eHS4T&6E30srT*@sb4mpU3p8B;e~jrjH~6 zU+1y@O9Fn*<Mn^u6vagU&*}bo1?jy0uK|9F!EXR&`c~3AfO-GF518?Tqz_HkbjI(J zJ_gM6sib3o8U1?V0W<pYBm-vr+;awC#-BYS0JHjez>lUg{_GiNy3S|g%QFcu`@Sa^ zFypVD^8hn_+5`S`K9hf*Ie?k|>6s6hwbxT>x-Kvnd?{c?Kb|iGu3_*Bz>J<f)qolO zdg=hP{_r#cX8gv}2AI*4=WBouFt`gaqi@gGP1g)&k9ckY%=C57R=~V|+oWGi(Ie>2 z1A3gn_@@W-IHQljkD6iz)$fR+C(n<N&g>)4vw)fY<@uTR^IGse%U7)7SIAGy;Md4! z%-}c3U(Dcl$al<O(4&vn7xd^0F&Omd<NXbK^s(`g40`mj@tq8M^fCHN20i*%`;$SB zKGt8!phq8*Kgpm+AET#a(4&v_XENx~$LKj3^3ccdl?;A*F4Eo06@HVU-v(RBrQwqL zaWdqakICQU%S~~f)n3Yf1>k!b40~a^!QcSk90spN{-+oWef2!1UnWC-6|nJ@++m9I znZBC50dOUQp}$_h-~R^S2@Jjs`I$YQd<Wn?4BmnE6Mv}H?e7On$y#0~{}}aQ_FM9E zNY7{QzXZ65!7l@5`eyQP0s9zy0Oc`$k^B~5#&46~1H7EUpsxZpo|BK5BL5I8&qO-w z-xN2}H`(baDS-PJoCcWnSIS7htUpp9@AH{`k#aW5XX7m;8!#JBDUi=onSGIRf$5rQ zuynsEBKjJoUl;?I;C;d1i;>Rky_5=+=VRq9Q}ZXTBHLbC#q5EUb;!^3uap*~Gkm4M z9;)^*81`$mm%%pxX8o6PGvHbV!#=9!_`Mx4ukW3JcQW`Mz%SS^*>gNU*>h3vKWMrN znfyrkt|@A|S^D<@^ZNe?FdJVfz(-9vgMS9Nm3^-+x;(NMqsj-r^cS)3L!YmCgr&a* znB)5mz`Xv@?*pj}ejhNe--m$Ncus+S9boou$}zz8HasXE@D^6z_0jnUL8rNZ^f4_@ z2Bn)~O&U!!+4Qj{-Of+=U&HK?L1zmQY9&bVJNhFuJv#Fj!kNEt<}aN2i~mFO7lY0- zMZM+EC;kR`yN<(`fM3!(7Qb9ZYn}jW{cq4Zz5Yqt`-9p|*DT^ULzO%j)MbhWYOi0X zL*Htk^0ho3w9OP(8Tgv^pALEm!=q0`?9V|@0KS*Os7v7^4E`nHoeYM&X(9hZsxI$6 z)c+tgN7w%t;6K@LD*Ez*x9#?&jx)tI#GiJn_fuz>qMhiqH!k9DnpLFnqy0^@n0-a^ z<7-TRB>C|*Cf`YZ2bq3H@-@ih7x}AZ@%f6$fVqEgDqv<GkiTjc_cy>^oW<;gRP^7? zZfcs6SE<mqZ>X@pml{BRW>2I--wrbQoC<m0!Q_4FHKy3e<YOxI?dxk841K$k$;(ve z+Z&jFmGs3B^Y^8K9y*x5kqZ5L!%+r9{|@o*LI2)((1uBW?_m0M>H~m742C_p;W-9B zhWhdRKR|w_ucbbN{0D59^qmgoZzO%9gZCfkyTi|5w6}xf<9SnT2L4?yYkGoybQ9Sh zWeO($c?Z+4$$#F#=>_>am_9}R(GF(6q(YziI??ArT^{tQ>zKYn{?h9nXZfK|UB~qI z)K393d=7^GbRE-w2d4sN^e}h?U^ag+cr5VA`g8Ckz<msczTe60gTV!W`S-wYIvITo zE(OfLUxEHlWAF-7bTRx7UJaPxe{dt<A_lhuX8k)D{ngdP;F|z5`Ww6za65yy1Lp0y z5AYrae+Mw5ufb0OX8QZ!J%BmBzz@3Ee9Pcp17`F-_;rjY!Qi(6Gkat3UjQ@u9sEzg zj6Mg40W<sz@c^!5@KB5&*4`m!0%q+UG9EDFUqf;LGx{8IK43<VLuLbJ^fqK6U`B64 z$^o<SGz9kl4Xk}bRsnW182sl3X0Hrs1<cz6escryBkgY;a<dQ{7=Ih`Eg}2U)vaOZ z!xs=eY5qP0`qozBe<7XzG~~zQA|gMA`~q-4gI`B}s$aRzkFpA%V(EWH`5&<IKf!n; zdoxqlFO2tJwf!S!3<5u3<M#~MA2+e~o-xK0Hya`{-*?6|z(gMv8lGi}E#(Y`J-p>! z2E!iSa>T|D$>Z5X?^+(8vD_556tVKJ1WfqZq~U8#@gJ0bsfNMN|AXjR`_s+<zx@W$ zzxH>W0sFO^#;5kTpMmkvP4Y|6|DFMTypYC+N8#%X(0>ofhkBj<Tcq!0>EH#0uQK>= zfZt{?@G1R?8sBN7P0>sIrB9WY2L7|H-L6mCEFo^E@@f?R)8^y-qwM`M;Af+apR~*I zKKegyf_@+J`3`zt&v&PVOtHO~!T$-E=qE?Ru)ntxf7A0PX)l=KPNJ7B8vdgYGX(oS z#`CwyUeo+L?K8k^zM864XwetiKNM{!Jj&qVrnravEm}Vr3SF@92ulb3+{fpKp`YBl zo0UHU?Pv0TDCp~6#;=CX!~4uXHgpkSHvc>H62Q#fCVhv0kMy1UnS2<!#B|LGvF|~j zyr0?kLn%MwPea!L?qx9a&HH)%TL2$qFy!+CjGqkc1kCvT&>H|VemeAKz<j>9E;>KS z{|6X99NJ^Lir9S6(A$yD+B+2E;Q=P^hTa31@%y0<nqnu%2k2!d<8MR1518ZkM}YS* z82z`C@#~>K1I+M4`U%fZ`pHh_e;K;Zbj@Y+8$(|;#e;&SL;gI-@$)8NhM%GD0%r1b z=wZOjzcut@z)XJ`Y652TG%NuylaHh?@pRIM9%A(wmTI~#Wd6Kip!bKEyc-7j^$^1c z=}%EG^rwed{f3P*UGof9p4Su)v;4!RB0tlQhFt)d=|96TJ{~q0Tnw1$)1;q8l~)SW z$8C?tVaqU7sXeKR9}NS&KT7(#p~mkp@Z(2`pXmA9VNHOEe`<a->^i{2ul4$dVK;%F zctnJs41>P>DDdgh{BIbL*-QMYQhyI^lk+cDevH@eQh)E%`F{_X_=&dXhW#1vs|^0g z6yIa=Y8dp#$7%d(`9bzkF`rL|eN@cX8^FFPX7ee-pszfR@)NYY8V-HsDW=~HAB_A( zcK+eROz}jBrH?YjlT7~_4*TMXN(RH8dy<W(;pdp*hnY6Mhv%YyEPNy@{<xdbKk>8O zMK(<QY&TyY1AeiauYUo**v;3IU_9<-`W=nOrx|?{{Xfn4!SI=;_%ZPtEzgHTzW*5g zVfn9zSDRuF?OM|GFuVi(DfcP3BI}Ea`T8`%KVP3l_~-NSurG@bG8pz{F<+kq`?8p? zr+|G~%;&FX1Lo`7<^ksG3sIl>snPYBZ$#H;evG|4zbv{w^UI^_Ge2g%(EOU{`pn-L zU7z`U{ZI*Dh7aoReKGd>KJM>EfA8b=82Wo3Ur&Vo-uE(t(ck-+{X+e{kMlS5_b(X# z8V=qxBi$a4gs%mH)ff0$!0<PGEAnU9`G?<y@eTbi&RRbQd@kVQ4ftHZ*FyrI3u4w^ zE#UYEJ{R!yOTg!X7<?|^>yv=b1suPN0rT|^mjmYOQ?CHb>1U<sTFBcQ0L<zSe&AZj z=D&tNWQtdqd>;<^`3kcSi66Ye{13w)2h7IvaM=5=aQy!mFdN^)e*&24Bg3J;y~6p& zKETYr9}fHN6{ar?{~cgPPs1S(USaZw`gb8;Ph(hnf$Z_Hkgu<uZ0!lM`)?s1&(p0v zNp}A&<l}WV?M;gAzY@OQw1oC3G5r1s^p(lz>pj2*gOOLx*IO|7_bVj7K2ZE99ewvL z*n5e^iXPKp&m5ro26g&*LhPXOLOOjW_^($)_;31!rg)XwyHV$dJ@XstZ@u0#9rANW zAJtaBUyb*3*!!See;R|o1~{F;=nH=agQ36whVb>OmS3RX5+j;^OPIV$|F$W9OZ2V% zpG40kOg~8nJ^n7kPEUva_B-nDZVmqu`19KMOMeY;4uk*O6#L!e*VXy|VT#w8KbH8_ zex~oGe}?a~@jJqWbjF`XBmrjn=ZL|kc#X-M5zwbzWBTU^*i)}DdLNMmnCUYkCIV*P zA29_m)0c>UzIM=tiGTi{jn@&=OxGedo=40;I{!ZOtKYNnH3Ig>@7een0sG_k%>OU~ z_Q&rT{~fUeFteXVz`l5$w-@z!J;wj~dL>JTz41D=r(NNHL^J5cqJPlKh)%#07<`i{ z{y_M@SLX+9&d9g>bHq-hgWtKdKY9doJAbDAKJmYc_<C>fzl#_>(fYlMxO}?`Fyqfe z4}W6vhVcI<u5X~dZ>B}J_f4+9Kz_Z+?H|amHyJ)ie!a=`eUe{qGI==SheCWCZ5D<r zvVQv_=C2;{EbUnq5r4smU(o(#q*iM9b+wn-@`sLi-xP0=KBeaiM!+6^i|9?;*CPiZ ziSVQS0V9Dse?EgJqCR_ssM7plWFEdx@_f3jpI*fL<0JiezsT;7k<hmeHQD_?@+(L$ zX8i?zeGy;32!4GLUyn)UbA1T;OFhx~OSwJ-{$9%YG5C8aU+)k8Udr_!@b}V~^{AyG z27|wsa`^%NUdrnS{#MHOGl0L9a(MxMR>tZFe&8xI7`|YS{FRO8kyis|^ffXFn91Lf z*8^tq7yL^6mC0Y?SAQ*HF!<G9nfxVw^;gD^2)|`TtUjba6;YBJZzKQ16n`UrtL=%A zcM2EHdAT!f`Yhx4ME{iW_1Wm3GKRmAJ5V0&H?Y>zqQA<xevSSrW9!|hzsmS}Wc1f! z-v8*Y#aur_e=TPCrT$vX`yc(an6I}*e=TO~eMWu{FsuK_r%dq)vsXt#zxm`KgP#M; z{Es7F0?h33kuL*g{*{rx1<d>#BcacH!u-J_-vrF$!N^0V_|zQ(_eH~>@$Y?Xieq~i zd<^Yj^I4<fk<R4HsARybKBLY6%=p)+5rElxmQiN`X7Xbc?7?G9zaKRTFst9FT)?b7 zqs{}&_}!?27<i5l1w@aU-;Y`ZxR}A9UAbOM!^E${%wItKI?U|HQQ-eB;`dtr8Fi!S zilgzP{f(pU2HeZwCsBSm``&Y=i{_-`j_UL`OjjanKjeWcp3%pscTCsCj6O%bZ@S#f zz901=U^ae7eGHhdce))glMkcNe{S}@jCjBdUm3}!D}m8R#u-Rw^g!#e+}wVui_Q;u z<w{`w$cz!FKjXI<7~cs+EPWi{N>=`N0dHjKlK}Jj<pO5<Q^t9Knf;c5@tnx!BQxdz zj-DTMB{KTUm=BofP5W0e(ANbOc7H*>x{{*ht1F57AA0~Z`b^vgnAf+)ba@zkWRSkH zR7B)e#<hT#+c5FJOSt_H{&xxISKxo;jQ?kBFkOR*-fq?9e@n>y0g>__09?ah(r;=R z40=3+_?ezh&-gXcNq>pc>8}GHwKhI7-b8v6d;bIB@<2Zx)vx$>#z(@HMEthg=I7<U z==PK|eTkM<6x7@0k4^&I#Naakw=x*AtDxP6W%<lr8=YgiMuPsW{Sl+jH(jGiUg-Ih z(ctf+TN%8_bY&RywuUQ^4%qVVj9!KIw%Y9-4SjDk$>(C7evRomlg6W-j~N{TO!(L9 zB}Q)nO#SzWf)jU}t}I3`uwPx}%w8Xj@tVo#d-QhGHHM9+(K`S$eSh@*rfaOh;D-UT z@dW$ZHJ0g{u(w@VZ2ZBVc4dXw`{3RFcGlh>2v-*Mr}l@Aeirx-vi{hMbm9knI{g)- zhwOAJRt0DMowNQ<IP346^>_cL*5B!K$y6u16l_?qqyuYzf4rsx2D@Y61O=Dx(Qsl6 zoTR>Vo>jg_!D{_@yru)|{DFAIZ=vsZQ=b~cbbWLHO!XiAzJA|5RPpnprr1F^4XONR zLSO%cXllELGfZ(0$>)mb^5WA}d1q#u;zuM8rtAFRjdFhjm5=(KITPQbF_ora@b5z6 zuO1Drp);S5{Z{>cqp8S=hz$5WbF(Q95KZLk^xI7FP>_-|{3x9%1-MtkkD1~y^<lAw ze+K;R)aB9l{)qC3f7k2u4@^bQ`g@UZShepg*s~_ls9WVf3;O9$lAoJ24E|P7X}9+* z*c(55j-?lw8f`J<=j-ynVv5^oeE4;K;3Euq;j+H>b#*3?)n8{peic?S_%2htOf;RY z^Y@$L+M_l;&ibh-Zj|doH2fR9U&G#iL%1f=7&eAV`Z?=8Q|u=Ewd?#JnL?8Nehr6( z%b@%rl|K_SU07?EmkHkD532T3`!dh6#*1oy<^`Z9qHj+OeU>PEWR?ms!)@a;bEPS+ z?zibN^Ge`*zfDh>K~oK9t9;m7BZ}?*&3sshnbdz7I{z<B@sph-$8`EzrfWFyhZ+t4 z4gFni)6bYhQ`|*7>}X7V-KxH0!0Tp~*!3AR0s1rf4>R@q(@e3I<^xMKTw;oe(tgx% z1I8=WZ(~gPUS0n6rnsAUs!!*?3H2#s_4}5^4~A;~WYtf>V;(RSd)N3G^MWZJDYEHd z%<n9Ir1N8Zlpj^!m+7#j3hV9u9rLLv)<XukG<}RsGsUyef8ttW>YuLaKNj}=|4@Hv zdK`PUDQ+Qp(fnrYbW^c!UB9uHfZq1o{XKS>kmoSEG8Mgzh5Rc#Y}aROt0^jX+x<Nj z_L)KYvgRjaZ!yJxeqfJ}v4pSP?0t-#f+KeSjs2M^enI>&sPq5Y6yGCy-G8=%Ujx4+ zeXdrg|HTwHQ~$^E+ugeTpP8<dTWx%24K>9BwBD^;!;?+%FwNgC*D&~pN%FQx!{C={ zf0*i@tP0T2K_qE<$%6h=u+y%8)>Wua$gY1@m*u}18eKolzq4*PMUGrgt=gBh-4w@O zwegkp9aB^hews84esY-fUCrOJes78fH_QK~snikOpIOID(M<U6Q|U&Msl>ldH$V?B z`fd6*a!he=t&LBk%oKTEd;AzHz|TmY<Y;)EDS8M$njVb}rg$IUbLsjT-vEC^`{Oh} zHTppRAKCaezN7tL+hh9gR)rtqho~RqTfFW+<2i*-mmYt{Z!!J}znZ@oADUt%;j2=m zkAwWkV(lFVG+*$ti14>@xt9D^^gV8Y=}MyZ9oFxE75MLE<*hZvzUg-R#<iJB-LlHR zUCUQ3?;^pY+B5EZ=r6R#rTcH(&rH|Zq!aGc@GGYHHI1JaGz@-_#>$U`GF{%sXwOG> zd(KAY!X|rsosIGD9_W3okDLwruCSHmpQF$9)%7|165*OqZ;$`8S0I0hJs!?RTERvJ zuZKL_$>0sq{PFB>n&Lf5*ZltMJHh{Hyleh(_C3ON_H_GuvE$|JN6}yOeUGm1Gp1`8 zeP8ppv-d^g|Liw0{z)F`@qYFvbS5SqyA?b>*>sUT=$a5ie_B5nKMwNGYmc|_IoA19 zs($04U#zC_rS-G%mjNGS1Et0Ezm`|yYfvBJheve&X3hU}eaGJ@)P7stpW|;e)p`d# zKE~ex`BN++@_YREOxKVcTVEOftmQve{AT>GEPYnte?08Tf*Mx-``~w^-}z$NpQ`FR z0mL&i!*0(6)TOZ9rk4rh^tqaP{7ry9HuE5ZF9uv|w{OB~ydPxmLw?*y<5%<B37epQ zx$XK)xI4Q36QEz+Oyy<h^dCp-I}={C<b_WEl_`E{06$tDO`!HaH9-GpeiI3;y8Y0< zj*<QLLJWR1Jx)YjFR<hx%A0tGEiWW&nBp<wACIf|CxVs=Lw5ToPBoR;p~vUM`AGkW zrGMEJ&r|<s`kYt^eV_CXt?y3+F3uHp`zJ!)yhr%Z{COheuZNfa82Y2%?w{EHp7?_4 znuPJ{vdaIBDSAnt*79ZI|A2pyzeCG|iT{NBr}3@%^EuE*o^H44@tiDEnX~%)=gc%k z+floI=Uike^Uz9Pt<Qkg{NS8xf#1D0e$RnCxv@soSEk<;EuYVM1oDOOy*#GBYE=8q zc^dTMvGIEj^sg)$e_M2UZwuErq`Pv|_&x{vXgiIkw^jP2glKx4lpX_5fW9c#Z|nS1 zE&Funfa7b@1*YpP@I$x8$E0H29!;Or7o5H)1t6c%e=aSLCS7N`(u-_-PrAu;dC-2> zBN~RheURvBQw%=*G4yWLXE*GF7g+sYjpp~0-Y{Ln6NFVh?6>!c|LXDTb-{ii`BSE0 z*t55Rf4H>1<~7v0ye=(Yz1isB7wrCx1kEqKe(1-fe`|T~U8wP^@#($H6mJo%^)2rj zG_Bn3UoZ5r7pZ@=J>dNs^u3_nKJOM&{FUnaTnv7e>hFW!j$-ubeFEiIu=1ggJ-o%H zNAK@V*Pyp;`@{Q=Dc(l?;?gwyci6AgPHq2qk44MJ>{N`O>2`awhtrwQC{MR9dkn@8 z@juPavM1qvIiIiampwaLo@8H+`faq^n+^O-ztv8UgypKe+1Kj(3{s=hU9t3{?ThTM zWBm7vh<zRj#X24O?4Nq={?ESO6#u|@cE#FTT0hGEktufdiHN@;612XOjdu%ZeCzQ+ zXCYepn@s;82A@Yj&qS|!yiE33{8;JRlg|MCrrP+P40%>a3Rf(D)bubJ{Of(9FU=n( zmumT@^G{w)XL5^(e4pF^`hL!)@5zwwg$Hc<nfxu#ug3pC_U+_*VNVl&dt=g@boyha z_%4;F_3z2gf*+*W_?!F-x{t!{|H<TENMrc;yD5U82amR|r?^e!zSHzR1^nB5)h=(! z<Y<07Wk$5VH)W3L8cz&e>sM1sA+L7Y_?mK=(obC4zMWD7{hIVEEl;Lg9aH{BQ@Jm# z`rNJE|5iHLkCs1efc~2DTr@pQA^*!p8~;<FUtgIjBKFRd!=@Pbw*DUAoFO*<qw;gW zzkW#elIEv5UQ@Y4b^UVYnW7*4@6!A)2ln(a(g$^WbG`(6IAGT|XO*6w(Dlh7{zUX? zy?>J_%0c56|H`>5THZv0=HEGxf0s_c_jP~e`~dXnvByi!OQv%7TJ?Pg>7fDWy;hZ% zo1pa{jgQ>3OgZL+_BZ5?kM57$Y0>f`7yM}E5xe}{FKK^dEdSBtJGT+z^(mWPb8j@o z?KIxBe97HviokRB_{s%8`6HFzuVLuJF2Z+F^muVu<)i)26aMzcj3=wT`@w%+w&^kV z{b>6p_fu23!!`c$MnE3++xBrD@Ns^~ZeL!3<v&*M=Rx1Od#`Oj<}EYDPl-Qjdnm8U z+E1?GtAMYAHhskQci#1;_!;>db$jz}G3At(#V_)}U+zz1<?k}p^n_Lay{4Luh_w&3 z|0)mT!^QI-jvh~Wus;j;*!7zV{jYbqi1=sh@>G4NLf-#~(Z^KSo9p`R_D;Ptnx9Pl zlIe;kI@vOCd6A&~ms7z%E+Btd`8bLHsW+M~W24=lk)Zj*)Ne-X&r=_crq8KA0ROvH zMC9AlUz(zc^v~S`%e$$so34pRZ2c?}HtO_up>GmD)%yHY*cWGipuZPKY!><*@juNk z@~43QDOu~^`99FU-0z~{MW$<9CBA2+SC~Ssf7A8LUulZJ<k<RP{yNy(A^ZFJ;5R^l zaJ?K;UoGGBdrqLgYJBJSqJE^mX?-OBI~eb5z9Ii<Q%$pI`pN&bsiwm$81m>xA=X}$ zSx_b-{4w7&#h(q^UpH-#De8#f9MJHYkbnE_{+X7G`Vju~c$hZJ6pu20^0Z4({tI^f zreVD8e9q>V(>hIkEWfJXwBBfXpSBb7?GX{NccwjQ>S-dK|L2e=IW|4V;xiI7KbrOj z;LFSE1AA&LEALz|n+x{a_&9ew>^mAiTArSJfhkt~zrL<5xp5uIGJ5u-koeGJ{#>%F zu4imlwe7l5-9HGLf+V*2x*+K)->=!oEMs;t`<cIq&O8Z_pd@!ilth3)63EBNlb|9@ z{Nvy5F4yn;@4r0%4k;g}&8Y8?_V({T#^;Cm6u-mX3AAmh&;O6~`4?M%hyVTm7MARK z|7Tk7hyOdNU$%eya`m`X|8f8A)A!Hn>Dx)iV|d!Jh|YTAv!3LvXL;7MI_p`V^=!_T zGe7HDob{ZoIXqi)c(&&7Y|Y`>n!~d-hi7XJ&(<8BtvNbf^WEb~$9CxW_HFxk^F`7B zr<1O;F+Xljd+ts<w$G<M_fMxi-?m<d+J1d_zWMR2o^Jnsb29Mvo9**gf3~{$vAy~B zeEap`bhvtYzS{n$`uuoxe{*(koOOLeg70r0p858}_j~o*)t$P1dZbl+pLWW#)h#XV z@$vh&OZNt0qL$$<iMzl0aoY9K6CUnwx%d9&o^8O3G<A8}la_&*2WAnNFfdVI;=m+< zSq5emm~~(_bc=7({RIu65Hb`rhQh>9U>FJoL(Xr=-3>Xo30V$}Beyl=sD@nAkTV)` zKSK^@$i)mfl_583n}C+1+@Hnqu9dEKfl_(ZX=D1PQ*D=KuYof95E$Lk5Y1hkJ|Cp` zZ}SDSyX~Am7W@(NN5mg7e<b{|<c}49todVu!7>GN7MQfatOcemFmHj03(Q<#>H>2^ z%njvvm>Xhlh`Ax=hL{^-Ziu-d=0=zsVQwUg#oQ<kbj5#VF!-a-`Og7$$GK`VwePET z?BZ>kZqlwBubI_VXX?W5Nh{T|hP^q{rqS7(*WBqMf79MFSn1Q2wVc1wyxP~3LHT4( zYiN)Bmyj0rJDf_iMm?t0uF#im`Ro1l((iqpbf+DUzi!_2WYN#Ir*G4P4vIS6DP8PU zUUE|%^{>#bE3)6Q{Z8!n(tfY(_u77M+`i@_wIyv@v9r4+k6!Z7n6DDv{BlX5kXN(N zX<{*4xHT-?BFGo_c`M4~iz093VsEs@g*F@jd_`u{om}!laFH2}u*qKAz6@T9nj)sn z|D;hx+8z;iJnUy}D3bUtnxZ3iNjP!@M~>jg5ga+%h^*Gi5ufCUgKx+1?HIltOC%yL z;zZV-S3B7N_dz(cvyCA<MwBFw1chxANJ=0nk)X!H63k67H^JNlbC;OA#M~w3E-`nB zxl2I=%!PfnFwl01xhu?FVeSfZSD3rP+!f}o1Wqt_wGP-ivsmsx#(Ey?Y9*?H>9`LP z*O0h|#5E+YF>eitYe6WiW(`RjtY(9`8_eBc?gn!=n7hH;4d!kH-YmWez|9xIL3a!c z`}`2tui4!K^A_0G0()6t6$`9lv0CGkC53Q+aGu~(dT<T23*oFGVWirNaO-WhQRwQ> z9eD_h5W-v`j1$5*;nJ>CFnBH?JQoy}hhmW-R2Z(L2TQ`TLo791TPcFrbKHUYB8ZBh zjS#Ad@Qi3K&_7>G;EKHl{lu6YL-#RsA4B&sbRR?aF?1M1Z!s(o!vae@Ab|~+*uoO) zT4GttImW;Pmx2&W>A`q-;1V9Vga<C6rX~DvNvg=h3~n`B2C97dg=<Bffx7?nLuuV` zYQ>+AQ>t&u?xnB+Iy5=%c~+hl1O~f+W@Nf;?O&kF>x%uis=H%e9Rk9}?3i-K*6HqA zzx0PKHQA>cO2C@MmbwgS7{O@KP~xD=dtGkpp72(#pG+2%>ATveebK41-f4T|y5;!{ zza+!W-{m_cP?a6^t}krYE^qly<Bchy4KM&h_f>%J?#RpZX7<(Pexu8*F2DBOr+&ZJ zoSh;dLj=2o$mbz4a|8^FkiA1-NCbonk;5b4T!=`CfI=a%dKAfcxGQpgMCj-={YS6O z`_O8kMaun(dJaU<RBG4<kpf%-TDT0fa4Bfva?rvhA@CAh3~AQol+fjr&}FvJNe-Rl z&`A!R<j_fuoaD$!j)sisBu7qi<RnK<a^xgOPIBZV$4+wWB*#v2JS1Z$Id+m`CpmVK zV<$Owk`pI6agq}!IdPJcA<sL>iIbc-$z)Y#OsZ4X<HdJwE9*K$K4yd#WHU+CorIJ# zWZRj5u%(+A*SpUA#v6-iXa@ca<Sl29%w(i%e7ZjlDU8JJitwTB`WM2k=AB71kpxZg z+E)!2@;fmAd(A{HZz<edN0q;@KwNVK`-3H9@?9`Y#RYALVPQIiIbm1Zw$b}wxZ-Y} zD;+b!I2(#7vrH()-lD`;(QaIeI0jwN`bEhe^{0U8+lDNncQdlz(4X^GviAeA$U+@< zFN7HBK@m`8L6KK_Mha`{c1G%=t<ESNosDgJ8hh6J)8yR+!Mx1#UPr)%$&Qe!vO=d- z-<;n7MeyL56`>R%FziXV$hm|fsdSjSYmG3$EG-H}t(J^x27JtT5D;yJpkE>QRtUHi zqHTpxTOrQYOZklO8RIj-=MtYQd~$59fo^MLsWr0H2AOXI#;^fz*&yd_kUKZXog3uN z4Vcdc8FYgTx{%zykc_>MjJ;SOH`3PzU#QXOYayNT1;Vii0eXuNkVh>Di)3E7k(SJh zz^myilCL<}y&P2g-a>tdHNFanKvRn9Ingm7zvguJg#(IPRoxIwo3}jUDzqi8ol%&p zd^aP#(g330lo?6)B{QG0RFpHTN*C?PXo9p>*jQV`Ry2NJ^vo2ql#-Ke?4&`2g7l)Y zH_8uh4aHrzX9bGB*)3o@5RWA+8mJaNOkWs{?Um$Y2szH<)0X;~bN!T;y6!vN;?<3} z-5uapcAQc2U^3a%rkh3M<tpg*UBl3z(-N)%PvH;v44eW!0hfR;z!lgNU@T%%!^855 zgPw?EKrMG!(X;Xz(M;5&l4_;P=%IXJ?;1^o>!4jL$bL1x2zL!_yT`b1j?p(w5m*$d zVf&(aBzicb@Hq-iq!^n~7+E<`y1f>-7*<3e;ji6oQYvWRm-$1EH)fQB>`;dyWLVfZ z21$+q`SDVEz(x_VF(Nib#Kuc;2e=3BCb*m6Zi2gsy~}1v5XlMnW<q?^E`SU6+T@2p zmuSGr-H@~;ny)=&6D1`NbOIRF<kW`TVn*?avjy`ecU%K!53bSuBBfV)XqPP@dD12& zqRrR)p2Bu$a7Aew?Jz}{ujFk$_ZWrQZ0S9I=z%k^>Y-5ZfEeHxQ-Mi|n5fvV_doB6 z#+KHDs5y3VSR8i-U?or&3UCRE@u%RFfSn+pz#w7bA<II>g(fd37w|)Y)-ljJ27brD z@)(#GgAT?ZYH=iYF%m>A2H%P)dkkJSNj1dyP(HBQx#7}TQ|uY;a?Wg%h`TUgnjXCy z@cq%diI-g%<as(uyBL`wMvWY!Mvm9gkA1G?Fa@80l>{)8;BJDu36LfM)Fi-~1Yna8 z+FV!wdpdlVto>5g1Y?q+iPtr9s@3lr$+uKM(ItDxo@*>OZs=gQ85#^)LxWQXjm#Tn z`9_s#mmRs4@7N{r_$XixmIsj_6mZRJN0-u9^`*)ie5FRdNxUW!wL_ybY1Nj(K7or| z<uQvW>Q?iG(HJ6JR<aruM|t%M2&ER!k`pFgi1~$UOyseaw_siNnonuDp5+fP4Uh{k zhI!DHmZi{YNyHx@cf9o3CNPA6x(&KKdu?YF9f-V<Ji6@Y5+~CkdaRP9IK&yTzM6?4 z9FU2UYSTU7CTrfQ-uy)zlbqI`0unCm^jje1GVy3Nr+?>_KkXOCXUbz}cz9R5s4{N} zT1b5k^w^&S)7%MWK`E$UDTg|6f_GZgWd0&;+JL?9^t_V@9B^t7t0wf2Hq>Xh9@d~h zCyfF{ZfX+9eb!w7u<#RX-|_}uW=V=9Mobx9lL-l8$GZMfgs{dep9#25Vb5walk;Dz zx9QBw|JLJBlJpJfPJ2a(Qs7m#;tBdzD+FEOj>{<CNKBQLO_m3LmTG60kJ^Y?HWLmK z^YrQIDO5KP*Gf&c#?DHywu5=+tQ1>hlY$S(0rteg9!9tzMt$*I|3<Zu%E}!)WH@sD z$R4Bmc}OKGhJ44Kebq99H>ghZwd>1<@j?h#z2D2atOdnz&d4p*TO19YZU7a(rDpdt zHF{hqxf`FI@Fqt1f&oY%Be=vC_A+%qd5a=Un3hgYQrAz9?KnB>jgi?TU64RQ2RwxU zr2)fz;ZqEI$TX^IPm$D-NN9-p0sw``x2+r5*h+H=OGvqcnviYaz)pv+vX*^q2sJ%V zqLJ?Wnf5|S-_@;esUhs;a`pqqSX_}~uxnWx1fF{yk+)ovTle?hWkE_YK#Fr8^tcp8 zr?aCeb*yRSzJUN<Em098K3{M_$3UefE+rTz>PLm1z7Bb(Bou)|lB<~u*wa^K+P-=k zw$AH2kW$zDu22GpMOd@>J})m7B!I_*1E=eh*N;Or_VpKe1S^ESK@sk}@EIU!E;TPX z^-0uFftod?6>|K^Ij|WJysJO9);vWR+cU<GOq$Rj-h#Zl;C+p1IrnZ^g?B7Iaw5gs z9^HR(Sm9}40(giH6qUpAq70Q|zLsCX)y?3p?zo3t?*ddbs(j~6?~pjJ-s)H3+3=DY zFgj}C;r`ZvB9NLYixUNSuS!3Fci3wvfW=42lK(OhIpb}=K779YVt3H0=c`WxEc213 z)RDCsPK!B;gfl{iPR#hAw%&J)Z%UW_<bcKWRmC=hBje=kqxJDiV|D~qvpBeHP%xh< zUs`mNwDjfcbI7m$AD^*uYA%LtFuKV*YL*8!fLCYZ8y<==(v}4;Mm0XbP7BEic&R&J zJEIP@9`)`M1K#b!?K5<yY?wQ29pZd=m*igIoSRT;euli~`j$fVg87GOl2ZuPPV$_P z9$vwi65S%V_t(Q3?Ku|QjF*<T<BHsQc7CYR;)E{yA>p)XUsPBVF=as&M~>Wjxs_jm z!>kiL#e*$T)Y-9~zBa!cSVF@&xX$+`#wI#W%VUda&@514|1fu=em=fwod?KoLk1rj zAsjzukQ|A9Tio{%q$YTp+QTY>3qj(_PgbM8$9}$j;u)>842k9JEJR}x8H8Sks?^po zTr@$!0}%<{2A(*;>RWEQo<_^5vn!K#?KE7cS-!8*w=^#><B|;+6{sL6C_VPg`Fhy$ z*ac~i;oc1xALqQ2537Xv<5=s1<gur`Fdol2zH&nCJsJnAoxFTfCyou*?<<P-kv0<y za$3E+ePY{lE*MxB|BQvV(5AekNm$}1Ew1b$4<O(dN3|ewdR9DonS-X!w?Dpr8+^{^ zqmGWT_#vWw4|6{b0G0L#!IV>^9ihk3(c7jjIId-pc#$tSXVcYms#w2gqI$~0T{3vO zzEYpAo^E(6OpT2^Va(4$H2kvQ0<XnwoI6P*j_)&VIwZKDIOTFP5MwjQ4h}7E7;GF@ z&ROJO1Zi90RMb=M$YSghFLII<h>Mp92$rP!v@av&2-@N#DhIbD$&aA(Qc;MJoShj# zNE0Kg9NwXN_3eiKc}khUg>xUvDZQ;t%L7#VZc+Fpk`TM>I7y~C(p*OlIuz$VunkPc zqWaVi?GINZ%{s58{Oc`}lr@z17UskRgy#AF-DcP++Kh%Ay{X8{obCBxea0%a3Ht1% zI6MhRb>O_rxF~fIc3*Whzi`jVE<?B>-FBwPpd=F6>Yg6JRKcesJ58a;@XV>HH8{XP z`8zIRAWs(^?GqfWea##AwZ$T*zN1c?#SmWtuKa*=LXTDHO5P$l$GY}#?c$+`BXDEd zAg(VdLk;lYNDu}5^VLYSaI#)$al58SJ1+BV{b!xVY00w#l=*P;e0}r#=*;bfa}G~O zoB3RP+n$ebL^qj#6d=`*Lw&hIDgc~&b?~HCHTq|c02L&bwfG|@q{aHy#T72uiXWdG zAQaCE2xU+CQ2z7&eC31FS~r*q_6}0ch^X_M6UdfYW|H)riMW&_HP&?Bp8j{b?LIn8 z4qVU*r*orv8sgwV==aFRFY0RzuV*sh$J>Zq^~*nW2J{|SyF-_kJ}<oY`KWg=n}1Kk zo>B0jBP)rIr(K-09b3)d=RtN?U&wqY!#`joFIe_?i#SQ9&j!;fwfu(1R@T{giY8|Z zlfuY@@j!jK`}*nXPJR9S`RN8Gy}MDv?!<$zKX#pu4*cCY)nH<Z5;C*p6FZaUmAIRw zi1IpX@VqfNm3Lfpa$4DszaX+_#Jz4EWdRR3#eh-6i~$!Ihfo@lJf6;Al_~A48d4$4 zhef6E0TZ1>)>y59hL49~<Y}ZHdmPr{<jS|h_-j=^=nwV8yfjH0sgJyx_noAbII3WH z=9dSQ=0-b=@5}hfFeI7jsDA%;Jxw!1J<5zF?RVt-q>(9tseCt0!2{r)aKG%es(+HN z9P~N#yAs=Cx)-gIXtK1*^mLO>yS(6|J;b!@^$R<{*qux#|7?!PydGg8B3^e=1B`DN zhhHfB*1vuH>v-5PH2g=~BACeswlm3U_J`}I496agdfFM&`Q_6Q6}aPTr?Y<o>61g=
--- a/packages/hal/powerpc/mbx/current/images/redboot_ROM.srec +++ b/packages/hal/powerpc/mbx/current/images/redboot_ROM.srec @@ -395,24 +395,24 @@ S31AFE002015600400606300007C0004AC7C788B S31AFE00202A00004C00012C7C708BA64C00012C7C70C2A664632053 S31AFE00203F007C70C3A67C78C2A6646320007C78C3A63C600000F7 S31AFE002054606330027C0004AC7C6001247C0004AC3C4000006049 -S31AFE00206942B8F87C631A787C7C43A67C8422787C9D43A6480036 -S31AFE00207E46F93C20000060214A307C3043A63C60FE00606300C1 +S31AFE00206942BB487C631A787C7C43A67C8422787C9D43A64800E3 +S31AFE00207E49B13C20000060214C807C3043A63C60FE00606300B4 S31AFE002093003C800000608400003CA0FE0060A51F347C0328407B S31AFE0020A8418200203863FFFC3884FFFC38A5FFFC8403000494F8 S31AFE0020BD0400047C0328404180FFF43C60FE00606321E43C8049 S31AFE0020D20000608430003884FFFC38A000209464000438A5FF5A S31AFE0020E7FF2C0500004082FFF43C60FE00606322EC3C800000D4 -S31AFE0020FC6084300090640014906400243C60FE01606343E03CDA -S31AFE002111800000608433003CA0000060A539087C042840418251 +S31AFE0020FC6084300090640014906400243C60FE01606350C03CED +S31AFE002111800000608433003CA0000060A53B587C0428404182FF S31AFE002126001C800300009004000038630004388400047C042866 -S31AFE00213B404180FFEC3C60000060633A303C80000160841F3CDA +S31AFE00213B404180FFEC3C60000060633C803C800001608425A816 S31AFE002150380000007C0320404182001490030000386300047CDA -S31AFE0021650320404180FFF43C600000606339083C80000060840A -S31AFE00217A3A2C7C0320404182001490030000386300047C03205F +S31AFE0021650320404180FFF43C60000060633B583C8000006084B8 +S31AFE00217A3C7C7C0320404182001490030000386300047C03200D S31AFE00218F404180FFF43821FFF438000000900100009001000895 -S31AFE0021A49421FFC848004155480045A948003C553C60000060BD -S31AFE0021B96330327C0004AC7C6001247C0004AC48003CA948007A -S31AFE0021CE3B7948003CE9480061D948008B814800040548000068 +S31AFE0021A49421FFC84800440D4800486148003F0D3C600000608C +S31AFE0021B96330327C0004AC7C6001247C0004AC48003F614800BF +S31AFE0021CE3E2D48003FA14800646548008E0148000405480000E4 S31AFE0021E3003821FF64906100989081008090A100883C600000B8 S31AFE0021F8606330327C0004AC7C6001247C0004AC7C7142A690EB S31AFE00220D61000C7C9242A6908100107CB342A690A10014900147 @@ -425,7 +425,7 @@ S31AFE00228B6C9381007093A1007493C1007893 S31AFE0022A091E1003C7C6102A67C8902A67CBA02A67CDB02A690D8 S31AFE0022B56100849081008C90A1009490C100907C230B7838216D S31AFE0022CAFFC83800000090010000900100089421FFC83CA0FE7C -S31AFE0022DF0060A5247C7CA803A648003ABC3821FF6490610098F1 +S31AFE0022DF0060A5247C7CA803A648003D703821FF64906100983A S31AFE0022F49081008090A100883C600000606330327C0004AC7C1E S31AFE0023096001247C0004AC7C7142A69061000C7C9242A6908131 S31AFE00231E00107CB342A690A1001490010000904100087C230B26 @@ -436,13 +436,13 @@ S31AFE002372004C9281005092A1005492C10058 S31AFE0023876093210064934100689361006C9381007093A10074FD S31AFE00239C93C1007893E1007C91C1003891E1003C7C6102A67C33 S31AFE0023B18902A67CBA02A67CDB02A6906100849081008C90A1C2 -S31AFE0023C6009490C100907C2E0B783C60000060634A303C8000C7 -S31AFE0023DB0060843A307CA408514180000C7CA118514181000805 +S31AFE0023C6009490C100907C2E0B783C60000060634C803C800075 +S31AFE0023DB0060843C807CA408514180000C7CA1185141810008B3 S31AFE0023F07C611B7895C1FFFC3821FFC83800000090010000909A S31AFE0024050100089421FFC881EE009855EFB7FF418200183DE040 S31AFE00241AFF0061EF001C89EF000055EFF0BE39EF000191EE002C -S31AFE00242F9855EF103A3C600000606339B891C30000806E009844 -S31AFE0024443CC0000060C633587CC6782E3C800000608434447C56 +S31AFE00242F9855EF103A3C60000060633C0891C30000806E0098F1 +S31AFE0024443CC0000060C633A87CC6782E3C800000608434947CB6 S31AFE00245984782E7CC903A64E800421802100703821FFC83800F6 S31AFE00246E000090010000900100089421FFC83821007080610005 S31AFE002483848081008880A1008C7C6103A67C8803A67CA903A685 @@ -455,11 +455,11 @@ S31AFE002501C1007883E1007C7C0000A6386000 S31AFE00251604AC7C0001247C0004AC800100008041000880610004 S31AFE00252B808081009480A100907C6FF1207C9A03A67CBB03A636 S31AFE0025408061000C8081001080A10014802100047C0004AC4C32 -S31AFE00255500012C4C0000647C230B783C80000060844A30388498 +S31AFE00255500012C4C0000647C230B783C80000060844C80388446 S31AFE00256AFFE87C8123789061000C7C6000A6906100107C680273 S31AFE00257FA6906100143800000090010000900100087C0000A614 S31AFE00259460638000506004207C0004AC7C0001247C0004AC948A -S31AFE0025A921FFC848007C3D38210038806100147C6803A680A1FC +S31AFE0025A921FFC848007EBD38210038806100147C6803A680A17A S31AFE0025BE000C806100107C0000A6506004207C0004AC7C000168 S31AFE0025D3247C0004AC7CA12B784E8000209421FED87C0802A63A S31AFE0025E89321010C93410110936101149381011893A1011C931A @@ -467,3560 +467,3745 @@ S31AFE0025FDC1012093E101249001012C3FA000 S31AFE00261200343860FFFF7D2803A63B8000003BE000013F400041 S31AFE002627004E800021813D00347C7E1B78386000007D2803A646 S31AFE00263C3F6000003F2000004E800021801D00483C60000360B4 -S31AFE002651630D407C0803A63D2000003D6000009389390893EBBE -S31AFE00266639284E8000213C0000403C60FE013C80FE013CA0FE5F -S31AFE00267B01901B390C38631E2438841E5438A51E60939A392465 -S31AFE002690480091B53C60FE013C80FE013CA0FE013CC0FE01383F -S31AFE0026A5C61EA038631E6C38841E8438A51E94480091913C6080 -S31AFE0026BAFE0138631EA448009185809A392480BB390C3C60FEBC -S31AFE0026CF0138631EC8480091713D2000003D600000380938E8CB -S31AFE0026E43BAB38D87C1D00003D2000009389391C418200207C21 -S31AFE0026F91C0378813D00003BBD00087D2803A64E8000217C1D9D -S31AFE00270EE0004082FFEC3F800000837C39302C1B0000418200F4 -S31AFE0027234C3FA00000809D39103C60FE0138631ED448009111FA -S31AFE00273880BD39103D2000003BA000001CA503E893A939303841 -S31AFE00274D61000838800100480097612C03FFFE4082000C93BCC8 -S31AFE002762393048000008937C39307FFDFB787F3CCB787FDBF3F3 -S31AFE002777782C1D0000418200143C60FE0138631F10480090BDB7 -S31AFE00278C3BA00000386100083880010038A000FA480097192C09 -S31AFE0027A10300004080001C3D200000800939342C0000004182FE -S31AFE0027B6FFC44800B4C14BFFFFBC40820020393C320080090073 -S31AFE0027CB347F63DB787C0803A64E800021480075614BFFFF9C6D -S31AFE0027E0386100084800911D2C0300004081004C3FA000003FEF -S31AFE0027F540000138610008389D392038BA1A1C48009C157C63BB -S31AFE00280A1B794182001C8003000C807D3920389A1A1C7C0803CE -S31AFE00281FA64E800021480000143C60FE0138631F1C388100087D -S31AFE002834480090113BA000014BFFFF3C9421FFF07C0802A693DE -S31AFE002849E1000C900100142C0300027C9F237840820144807FF7 -S31AFE00285E00043C80FE0138841F3C480091292C03000040820098 -S31AFE002873447D6000A67D605B7839200000512004207C00012446 -S31AFE0028883C0002004C00012C7C108BA64C00012C3D4002007C4F -S31AFE00289D0004AC7D588BA67C0000A6516004207C00012448008C -S31AFE0028B200F8807F00043C80FE0138841F40480090D12C030064 -S31AFE0028C700408200C07D6000A67D605B78392000005120042055 -S31AFE0028DC7C00012439200000380000807C0903A6612010003D35 -S31AFE0028F1400E007C0004AC7D398BA67D588BA67C198BA67D58CC -S31AFE0029068BA6392900104200FFE03C0004004C00012C7C108B24 -S31AFE00291BA64C00012C3D4004007C0004AC7D588BA63920000078 -S31AFE002930380000807C0903A6612010003D400E007C0004AC7DE3 -S31AFE002945398BA67D588BA67C198BA67D588BA639290010420089 -S31AFE00295AFFE03C000C004C00012C7C108BA64C00012C3D400C05 -S31AFE00296F007C0004AC7D588BA67C0000A6516004207C00012485 -S31AFE002984480000243C60FE01809F000438631F4448008EB14843 -S31AFE0029990000103C60FE0138631F5C48008EA1800100147C08D4 -S31AFE0029AE03A683E1000C382100104E8000209421FFE87C08027E -S31AFE0029C3A693A1000C93C1001093E100149001001C3D600000DF -S31AFE0029D83D200000392938183BEB37A87C1F48004182002C7D83 -S31AFE0029ED3D4B783FC0FE01809F000480BF000080DF0008387E54 -S31AFE002A021F6848008E413BFF00107C1FE8004082FFE48001002A -S31AFE002A171C7C0803A683A1000C83C1001083E1001438210018F0 -S31AFE002A2C4E8000209421FFA87C0802A69381004893A1004C93AC -S31AFE002A41C1005093E100549001005C7C7D1B787C9C23783D201A -S31AFE002A56FE0139291F78386100083880006238A0000138C000E3 -S31AFE002A6B0038E100383901003C48009CCD3D20FE0139291F8875 -S31AFE002A80386100203880006C38A0000138C0000038E1004039FD -S31AFE002A9501004448009CA93D40FE017FA3EB787F84E378394A74 -S31AFE002AAA1EA038A0000138C1000838E0000239000000392000CF -S31AFE002ABF0048009C9D2C030000418200408001003C2C00000062 -S31AFE002AD4408200143C60FE0138631F9048008D65480000248008 -S31AFE002AE90100442C0000004082000C380000209001004080618B -S31AFE002AFE003880810040480098198001005C7C0803A68381003F -S31AFE002B134883A1004C83C1005083E10054382100584E80002006 -S31AFE002B289421FFB87C0802A69381003893A1003C93C100409319 -S31AFE002B3DE100449001004C3D2000008009392C7C7D1B787C9C8E -S31AFE002B5223783D20FE019001002839291FA83861000838800038 -S31AFE002B677738A0000138C0000038E100203901002448009BC9CA -S31AFE002B7C3D40FE017FA3EB787F84E378394A1FB838A000013876 -S31AFE002B91C1000838E00001390100283920000048009BBD2C03BF -S31AFE002BA60000418200F8800100242C000000418200343C60FEF9 -S31AFE002BBB018081002880A1002038631FCC48008C7D80A100207E -S31AFE002BD0386100301CA503E838800008480092D92C03FFFE4197 -S31AFE002BE58200BC814100287D6000A67D605B78392000005120B2 -S31AFE002BFA04207C00012439200000380000807C0903A66120102D -S31AFE002C0F003D600E007C0004AC7D398BA67D788BA67C198BA602 -S31AFE002C247D788BA6392900104200FFE03C0004004C00012C7CA9 -S31AFE002C39108BA64C00012C3D6004007C0004AC7D788BA639207C -S31AFE002C4E0000380000807C0903A6612010003D600E007C0004CB -S31AFE002C63AC7D398BA67D788BA67C198BA67D788BA63929001041 -S31AFE002C784200FFE03C000C004C00012C7C108BA64C00012C3DEE -S31AFE002C8D600C007C0004AC7D788BA67D4803A64E800021800192 -S31AFE002CA2004C7C0803A68381003883A1003C83C1004083E1001C -S31AFE002CB744382100484E8000209421FFE07C0802A693A1001429 -S31AFE002CCC93C1001893E1001C90010024380000003D2000003F6A -S31AFE002CE1C000003BA9393090093930901E391C48000A992C03AE -S31AFE002CF60000418200EC3D200000808939443D600000800B39D2 -S31AFE002D0B403D2000003BE97A247C8422147C8400507FE3FB78F5 -S31AFE002D2038A004004800831D7FE3FB78388003FC480004F98085 -S31AFE002D351F03FC7C030000408200303D20000081697A243C00D5 -S31AFE002D4A0BAD6000FACE7C0B000040820018813F03F83C00DE5A -S31AFE002D5FAD6000DEAD7C090000418200283C60FE0138632E806F -S31AFE002D7448008AD13C60000038637A243880000038A0040048F2 -S31AFE002D89008391480000583C60FE0138632C683881000838A01A -S31AFE002D9E000148000061800100082C000000418200303C60FE30 -S31AFE002DB30138632C807FA4EB7838A00004480000413C60FE0139 -S31AFE002DC83C80000038632CA83884391038A0000248000029383F -S31AFE002DDD000001901E391C800100247C0803A683A1001483C18B -S31AFE002DF2001883E1001C382100204E8000209421FFD87C0802B7 -S31AFE002E07A69321000C93410010936100149381001893A1001CE4 -S31AFE002E1C93C1002093E100249001002C3D2000003D6000003B9F -S31AFE002E314938D87C7B1B787C9D23787CB92B783BCB381848007B -S31AFE002E4609452C0300003B800004418200CC7C1ED0004182007B -S31AFE002E5BB43D20000039297A24807E00007FFC4A147F64DB7840 -S31AFE002E7048008AB92C0300004082007C807E00107C03C80040BC -S31AFE002E8582005C3803FFFF280000054181008C3D60FE01396B62 -S31AFE002E9A2E685400103A7D4B002E3D20FE0139292E687D4A4A90 -S31AFE002EAF147D4903A64E800420801F0000901D00004800005CA5 -S31AFE002EC4A01F0004813F0000B01D0004913D00004800004893B0 -S31AFE002ED9FD0000480000403C60FE0138632E187F64DB78480061 -S31AFE002EEE89594800002C807E00103BDE0018480002DD7C1ED0A5 -S31AFE002F03007F9C1A144082FF543C60FE0138632E447F64DB7879 -S31AFE002F184800892D8001002C7C0803A68321000C8341001083C1 -S31AFE002F2D6100148381001883A1001C83C1002083E10024382175 -S31AFE002F4200284E8000209421FBB87C0802A69301042893210454 -S31AFE002F572C93410430936104349381043893A1043C93C10440A5 -S31AFE002F6C93E104449001044C3D2000003D6000003B0938183BE6 -S31AFE002F812B38D87C7C1B787C9B2378480007FD2C0300003B40C9 -S31AFE002F9600007F1FC3783BC00004418202083C80000038847A8B -S31AFE002FAB243861000838A004004800808D3BA104083D60000092 -S31AFE002FC03D20FE01934B393039292D787FA3EB783880006C386D -S31AFE002FD5A0000038C0000238E10420390000004800975D3D401A -S31AFE002FEAFE017F83E3787F64DB787FA6EB78394A24A838A0008D -S31AFE002FFF0138E000013900000039200000480097512C030000AE -S31AFE003014418201947C1FC800418200A480A104207FE3FB787FE8 -S31AFE003029C4F3784800026538030001280000054181FFE03D6009 -S31AFE00303EFE01396B2E005400103A7D4B002E3D20FE0139292E28 -S31AFE003053007D4A4A147D4903A64E8004203C60000038637A2409 -S31AFE0030683881000838A0040048007FD1480001343B40000180A1 -S31AFE00307D7F00103BFF0018480001557FDE1A144BFFFF8C7FE9F3 -S31AFE003092C2783129FFFF7D294910381FFFE87C0048787FE9486A -S31AFE0030A7387D3F03784BFFFF6C3C60FE0138632D904800878D9D -S31AFE0030BC4BFFFF5C2C1A0000418200E43C000BAD3D6000006078 -S31AFE0030D100FACE3D20DEAD3B8B7A246129DEAD900B7A24913CB7 -S31AFE0030E603F87F83E378388003FC480001393D2000003FE000C4 -S31AFE0030FB00801F394481693940907C03FC7C0002143C60FE0105 -S31AFE0031107FC0585038632DA4480092292C030000418200888056 -S31AFE0031259F39443BA104247FC3F3787FA5EB784800B8097C7F39 -S31AFE00313A1B794182002C83A104247FE3FB784800BB117C661BC7 -S31AFE00314F783C60FE01386327247FA4EB787FE5FB78480086E55E -S31AFE003164480000447FC3F3787F84E3787FA6EB7838A00400480F -S31AFE00317900B9357C7F1B794182002883A104247FE3FB7848006C -S31AFE00318EBACD7C661B783C60FE0138632DD07FA4EB787FE5FB14 -S31AFE0031A378480086A18001044C7C0803A6830104288321042CAA -S31AFE0031B883410430836104348381043883A1043C83C10440833B -S31AFE0031CDE10444382104484E8000203803FFFF280000054D81F9 -S31AFE0031E200203D60FE01396B2D605400103A7D4B002E3D20FEF8 -S31AFE0031F70139292D607D4A4A147D4903A64E80042038600004AD -S31AFE00320C4E800020386000084E800020386000004E800020386F -S31AFE0032216002004E800020388400035484F0BE7C8023782C003C -S31AFE003236000038C0000038E000003884FFFF40810044816300CC -S31AFE00324B007C8A23787D68383038E7000168E900102C0A0000C5 -S31AFE0032607D2AFE707D404A787C0050507D6B43787C00FE707C9C -S31AFE003275C65A78386300047CE700383884FFFF4181FFC47CC3F0 -S31AFE00328A33784E8000209421FF707C0802A6930100709321008A -S31AFE00329F74934100789361007C9381008093A1008493C10088BE -S31AFE0032B493E1008C900100947C7B1B78807B00087C9F23782C6D -S31AFE0032C90300007CB82B78418200383881006038A000014BFFDB -S31AFE0032DEFB25801B000C2C00000041820014800100602C000000 -S31AFE0032F3004182019848000010800100602C00000040820188B6 -S31AFE0033083D20000039297A243C60FE01809B00047FBF4A1438C1 -S31AFE00331D632CBC48008525813B00103809FFFF28000005418160 -S31AFE00333201483D60FE01396B2D305400103A7D4B002E3D20FEAD -S31AFE0033470139292D307D4A4A147D4903A64E800420801D00008A -S31AFE00335C2C000000418200103D20FE0138892CC8480000303D93 -S31AFE00337120FE0138892CD0480000243C60FE01809D00003863A8 -S31AFE0033862CD8480084BD480000EC7FA3EB784800ACED7C641B0C -S31AFE00339B783C60FE0138632CC4480084A1480000D07FBEEB7856 -S31AFE0033B03BE000003F80FE013FA0FE017C9EF8AE387C2CDC4889 -S31AFE0033C5008481281F00044181000C387D2CE4480084713BFF95 -S31AFE0033DA0001281F00054081FFDC3C60FE017FDDF37838632CC8 -S31AFE0033EFE848008455480000843C60FE0138632CEC48000088D2 -S31AFE0034043C60FE0138632CF048008439881D00007FBEEB782CE7 -S31AFE0034190000007FBFEB78418200583F20FE013B4000003B804A -S31AFE00342E000A881E00002C00000A418200187FEBFB788C0B0050 -S31AFE003443012C00000A4082FFF87D7F5B787FC4F3789B5F000009 -S31AFE00345838792CF4480083E93BDF00019B9F0000881E00007F5C -S31AFE00346DDFF3782C0000004082FFBC2C180000418200183C6098 -S31AFE003482FE0138632CF0480083BD386000024800022C801B0048 -S31AFE003497102C00000441820054386100083880005038A0000044 -S31AFE0034AC48008A092C0300003860FFFF418002043861000848B7 -S31AFE0034C10084412C0300004182FFC4880100082C00002E4082CB -S31AFE0034D6000C38600000480001E02C00005E4082000C38600020 -S31AFE0034EB03480001D0813B00103809FFFF28000005418101BCF5 -S31AFE0035003D60FE01396B2D485400103A7D4B002E3D20FE0139D4 -S31AFE003515292D487D4A4A147D4903A64E80042083FD0000386160 -S31AFE00352A00087FA4EB78480096F54800003083FD000038610096 -S31AFE00353F087FA4EB7838A0000038C00000480095694800001473 -S31AFE00355483FD0000386100087FA4EB784800A9B92C030000419D -S31AFE00356982013C801D00007FE002787C09FE707D2302787C6328 -S31AFE00357E48507C63FE707C6018F8546307FE540007BC7C6303AE -S31AFE0035937848000128801D0000A17D00049001005839210058DC -S31AFE0035A8B1690004380100087D3A4B78900100683BC000003FFE -S31AFE0035BD60FE013BE100643B810068806100687FE4FB787F85CF -S31AFE0035D2E37838DB2CE4480094DD2C030000418200B4881F005C -S31AFE0035E7037C1DF1AE3BDE0001281E00054081FFD4480000C08F -S31AFE0035FC3C60FE017FBEEB7838632CFC4800823D48000044889D -S31AFE0036110100083BE100082C000000418200287FC4F3787FEB44 -S31AFE003626FB78880B0000980400008D2B0001388400012C09003E -S31AFE00363B004082FFEC7C9E23783800000A981E00003BDE000102 -S31AFE003650380000003C60FE01981E000038632D28480081E53802 -S31AFE0036656100083880005038A00000480088452C030000386027 -S31AFE00367AFFFF41800040386100084800827D2C0300004082FF60 -S31AFE00368F8448000028A01A000481210058B01D0004913D0000D7 -S31AFE0036A438600004480000143C60FE0138632CEC480081913835 -S31AFE0036B9600001800100947C0803A68301007083210074834185 -S31AFE0036CE00788361007C8381008083A1008483C1008883E100AF -S31AFE0036E38C382100904E8000209421FFF07C0802A693C100083F -S31AFE0036F893E1000C900100147C7E1B782C1E00017C9F237841C5 -S31AFE00370D8100143C60FE0138632C28480012B548000054480091 -S31AFE00372200692C030000418200483C6000003C80000080BF0054 -S31AFE0037370438633738388437A848008E3D7C631B794182001C6B -S31AFE00374C8003000C7FC3F3787FE4FB787C0803A64E80002148EE -S31AFE0037610000103C60FE0138632C3C48001261800100147C08CD -S31AFE00377603A683C1000883E1000C382100104E8000209421FFCA -S31AFE00378BE07C0802A6934100089361000C9381001093A10014D1 -S31AFE0037A093C1001893E1001C900100243D200000800933002C1A -S31AFE0037B50000004082009C3FE00000807F390C38000001900968 -S31AFE0037CA33003C63FFFF3C8000014800B0557C641B79418200D5 -S31AFE0037DF183C60FE0138632BD44800805D386000004800006817 -S31AFE0037F43F6000003F40000038600000389B393C38BA3940480B -S31AFE00380900B0C93FA000003F800000387D3944389C39484800C0 -S31AFE00381EB0E9809B393C80BA394080DC39483C60FE0180FD3987 -S31AFE0038334438632BFC4800800D813D3944801F390C3D2900011B -S31AFE0038487C0900503D600000900B394C38600001800100247C1B -S31AFE00385D0803A6834100088361000C8381001083A1001483C155 -S31AFE003872001883E1001C382100204E8000209421FFE07C080224 -S31AFE003887A693A1001493C1001893E1001C900100243D40FE010D -S31AFE00389C394A2B8438A0000238C0000038E0000039010008397C -S31AFE0038B120000148008EA92C030000408200143C60FE01386323 -S31AFE0038C6291C48001105480000E03D6000003D20000080A939C2 -S31AFE0038DB44808B39403FA00000807D394C7C8520504800775526 -S31AFE0038F083BD394C3BC000003BE000004800000C3BFF00013B1A -S31AFE003905BD01003D200000800939445400C23E7C1F0040408099 -S31AFE00391A0028881D00002C0000FF4182FFDC806100087FA4EB07 -S31AFE00392F7848007FF92C0300004082FFC83BC000012C1E000049 -S31AFE003944408200183C60FE018081000838632BA448007EF14883 -S31AFE0039590000543D20000080093924807D00147C03004041802D -S31AFE00396E001C80BD00183D2000008169390C7C032A147C0058B2 -S31AFE00398340418000143C60FE0138632BBC48007EB5480000181E -S31AFE003998809D0010480076A5801D001C3D2000009009392C80F2 -S31AFE0039AD0100247C0803A683A1001483C1001883E1001C382142 -S31AFE0039C200204E8000209421FFD87C0802A6934100109361004E -S31AFE0039D7149381001893A1001C93C1002093E100249001002C7E -S31AFE0039EC3D40FE01394A2B8438A0000238C0000038E0000039F1 -S31AFE003A010100083920000148008D552C030000408200143C607E -S31AFE003A16FE013863291C48000FB1480001843D6000003D2000E9 -S31AFE003A2B0080A93944800B39403FA000007F650050807D394C43 -S31AFE003A407F64DB78480075FD83DD394C3BA000003BDE02003B67 -S31AFE003A55E000024800000C3BFF00013BDE01003F400000801AB4 -S31AFE003A6A39445400C23E7C1F004040800040881E00002C0000C5 -S31AFE003A7FFF4182FFDC806100087FC4F37848007E9D2C03000068 -S31AFE003A944082FFC83C60FE018081000838632B904800889D2CFD -S31AFE003AA9030000418200F83BA000012C1D0000408200183C60AB -S31AFE003ABEFE018081000838632BA448007D7D480000D83B81005F -S31AFE003AD30C807E0010809E00187F85E3784800AE5D7C7F1B7949 -S31AFE003AE84182002883A1000C7FE3FB784800B1657C661B783CC6 -S31AFE003AFD60FE0138632B247FA4EB787FE5FB7848007D397FC3CA -S31AFE003B12F378388000FF38A00100480075FD809A39447F63DB91 -S31AFE003B27787F85E3784800AE117C7F1B794182002C83A1000CF9 -S31AFE003B3C7FE3FB784800B1197C661B783C60FE0138632B247F10 -S31AFE003B51A4EB787FE5FB7848007CED480000483D2000008089D6 -S31AFE003B66394C80BA39447F63DB787F86E3784800AF397C7F1B2F -S31AFE003B7B794182002883A1000C7FE3FB784800B0D17C661B788A -S31AFE003B903C60FE0138632B447FA4EB787FE5FB7848007CA58031 -S31AFE003BA501002C7C0803A683410010836100148381001883A1A1 -S31AFE003BBA001C83C1002083E10024382100284E8000209421FFC7 -S31AFE003BCFA07C0802A69381005093A1005493C1005893E1005CA9 -S31AFE003BE490010064380000007C7D1B787C9C23783D20FE019070 -S31AFE003BF9010044392928C09001003C386100083880006638A0C0 -S31AFE003C0E000138C0000038E100383901003C48008B253D20FE8A -S31AFE003C230139292B68386100203880006C38A0000138C00000E4 -S31AFE003C3838E100403901004448008B013D40FE017FA3EB787F48 -S31AFE003C4D84E378394A24A838A0000238C1000838E00002390002 -S31AFE003C6200003920000048008AF52C030000408200143C60FE8A -S31AFE003C77013863291C48000D51480001048001003C2C00000077 -S31AFE003C8C41820010800100442C000000408200143C60FE0138B2 -S31AFE003CA1632B7048000D29480000DC806100384800ABDD7C7C89 -S31AFE003CB61B794082002080610038800100407C6302143863FF16 -S31AFE003CCBFF4800ABC17C7C1B794182004483A100387F83E378E1 -S31AFE003CE04800AF797C651B783C60FE01386329787FA4EB784842 -S31AFE003CF5007B513D2000003D6000003C60FE018089393C80ABAC -S31AFE003D0A39403863299848007B35480000708081003880010061 -S31AFE003D1F407C8323787C8402143884FFFF4800B1112C030000A8 -S31AFE003D34418200143C60FE0138632AA848007B054800004080C7 -S31AFE003D496100388081004038A100484800ABE97C7C1B7941823B -S31AFE003D5E002883A100487F83E3784800AEF17C661B783C60FE65 -S31AFE003D730138632B247FA4EB787F85E37848007AC580010064FB -S31AFE003D887C0803A68381005083A1005483C1005883E1005C3895 -S31AFE003D9D2100604E8000209421FF187C0802A6934100D093610E -S31AFE003DB200D4938100D893A100DC93C100E093E100E49001000B -S31AFE003DC7EC380000007C7D1B787C9C23783D20FE01900100C4CF -S31AFE003DDC392928849001009C900100A4900100AC900100B4904C -S31AFE003DF10100BC386100083880006238A0000138C0000038E157 -S31AFE003E0600983901009C480089353D20FE013929289838610018 -S31AFE003E1B203880007238A0000138C0000038E100A0390100A4DC -S31AFE003E30480089113D20FE01392928AC386100383880006538DF -S31AFE003E45A0000138C0000038E100A8390100AC480088ED38E14E -S31AFE003E5A00B03D20FE017CFE3B78392928C0386100503880002B -S31AFE003E6F6638A0000138C00000390100B4480088C53D20FE0124 -S31AFE003E84392928DC386100683880006C38A0000138C000003891 -S31AFE003E99E100B8390100BC480088A13D20FE01392928F438619D -S31AFE003EAE00803880007338A0000138C0000038E100C03901006C -S31AFE003EC3C44800887D3D40FE017FA3EB787F84E378394A2910BA -S31AFE003ED838A0000238C1000838E00006390100C8392000014834 -S31AFE003EED0088712C030000408200143C60FE013863291C4800FB -S31AFE003F020ACD480004988001009C2C0000004182001C80010042 -S31AFE003F17BC2C00000041820010800100C82C000000408200148B -S31AFE003F2C3C60FE013863293048000A9948000464800100C4818C -S31AFE003F414100B82C00000040820008914100C03D200000800900 -S31AFE003F563944816100C07D2A02143929FFFF7D2903963F400058 -S31AFE003F6B007D2901D67C095840912100B8408000143C60FE01CA -S31AFE003F803863294C480078C148000414800100B42C0000004195 -S31AFE003F95820070806100B04800A8F17C7C1B7940820020806160 -S31AFE003FAA00B0800100C07C6302143863FFFF4800A8D57C7C1BA7 -S31AFE003FBF794182004483A100B07F83E3784800AC8D7C651B7843 -S31AFE003FD43C60FE01386329787FA4EB78480078653D2000003DB8 -S31AFE003FE96000003C60FE018089393C80AB3940386329984800FE -S31AFE003FFE78494800039C3FE0000080810098801F39247C0400CE -S31AFE004013404180001C800100C03D2000008169390C7C04021414 -S31AFE0040287C005840418000283C60FE01386329B44800780D3D65 -S31AFE00403D2000003C60FE01809F392480A9390C38632998480021 -S31AFE00405277F5806100C8480078A92803000F408100183C60FE2A -S31AFE00406701386329E038800010480077D548000328800100B497 -S31AFE00407C2C0000004082002C808100B87FC3F378480003392CFB -S31AFE004091030000408200183C60FE01808100B838632A104800C8 -S31AFE0040A677A1480002F43F8000003D20000080BC394480093914 -S31AFE0040BB403FA000007F650050807D394C7F64DB7848006F75B5 -S31AFE0040D0801C394483FD394C5409C23F3BA000003B8000004184 -S31AFE0040E58200883FC0FE01881F00002C0000FF418200608061E4 -S31AFE0040FA00C87FE4FB78480078292C0300004082004C80010068 -S31AFE00410FB42C00000041820014813F0010800100B07C0900005A -S31AFE00412440820214813F0018800100B87C0900004082021480BC -S31AFE0041398100C8387E2A8C480082012C030000418202543B80EA -S31AFE00414E00014800001C801A39443BBD00015400C23E7C1D00F6 -S31AFE004163403BFF01004180FF842C1C0000814100C0806100B029 -S31AFE0041784082004C3D200000800939443D6000005400C23E7C50 -S31AFE00418D1C004083EB394C3BA000004800001C3D2000008009A5 -S31AFE0041A239443BBD00015400C23E7C1D00403BFF010040800066 -S31AFE0041B710881F00002C0000FF4082FFDC7C8352143884FFFF51 -S31AFE0041CC4800AC712C030000418200143C60FE0138632AA8481F -S31AFE0041E1007665480001B838A100CC806100B0808100B87CBEC0 -S31AFE0041F62B784800A7457C7C1B793BA000014182002C83A1005E -S31AFE00420BCC7F83E3784800AA497C661B783C60FE017FA4EB78A0 -S31AFE00422038632ADC7F85E3784800761D3BA000002C1D00004145 -S31AFE004235820044806100B08081009880A100C07FC6F3784800A7 -S31AFE00424AA8657C7C1B794182002883A100CC7F83E3784800A999 -S31AFE00425FFD7C661B783C60FE0138632B007FA4EB787F85E3788E -S31AFE004274480075D17FE3FB783880000038A0010048006E958072 -S31AFE0042898100C87FE3FB78480076CD800100A4812100B02C00D0 -S31AFE00429E0000913F001040820020800100B42C00000041820021 -S31AFE0042B30C812100B0480000108121009848000008812100A070 -S31AFE0042C8800100AC913F00142C000000408200103D20000080F1 -S31AFE0042DD09392C48000008800100A8901F001C800100B83D2080 -S31AFE0042F2000080893944901F00187F63DB787FC5F3784800A694 -S31AFE004307397C7C1B794182004C83A100CC7F83E3784800A9414A -S31AFE00431C7C661B783C60FE0138632B247FA4EB787F85E3784861 -S31AFE004331007515480000683C60FE0138632A3848007505480097 -S31AFE00434600583C60FE0138632A64480074F5480000483D2000A4 -S31AFE00435B008089394C80BA39447F63DB787FC6F3784800A741EF -S31AFE0043707C7C1B794182002883A100CC7F83E3784800A8D97C2B -S31AFE004385661B783C60FE0138632B447FA4EB787F85E378480054 -S31AFE00439A74AD800100EC7C0803A6834100D0836100D4838100FF -S31AFE0043AFD883A100DC83C100E083E100E4382100E84E80002082 -S31AFE0043C43D20000080E939443D600000814B393C3D2000007CE6 -S31AFE0043D9073A14810939407D4A02147D4953787C094040408040 -S31AFE0043EE007054E0F0BE7C0603785407103A800A00002C00FF0D -S31AFE004403FF4182004C7C095000418200147C0950507C001670BF -S31AFE0044187C002040408000587D4953787C0940404080002054CD -S31AFE00442DCB103A7D295A147C09404040800010800900002C00C3 -S31AFE004442FFFF4082FFEC7D2A4B78480000087D4A3A147C0A4021 -S31AFE004457404180FFA47C095000418200207C0950507C001670C9 -S31AFE00446C7C0020404180001091230000386000014E8000203817 -S31AFE0044816000004E8000209421FFE07C0802A69361000C938100 -S31AFE004496001093A1001493C1001893E1001C900100243D2000A7 -S31AFE0044AB00800939443D600000814B393C3D20000083C93940F2 -S31AFE0044C07C0002147FEA02147C1FF0407FE4FB783F6000004052 -S31AFE0044D58000883F80FE013FA00000801F00002C00FFFF41829D -S31AFE0044EA005C7C04F80041820010387C286C7FE5FB7848007338 -S31AFE0044FF497C1FF0407FE4FB7840800034801F00002C00FFFFFD -S31AFE00451441820028801D39445400F0BE5409103A7C844A147C06 -S31AFE00452904F04040800010800400002C00FFFF4082FFEC7C9FFF -S31AFE00453E237848000014801B39445400F0BE5400103A7FFF0235 -S31AFE004553147C1FF0404180FF887C04F800418200143C60FE013E -S31AFE0045683863286C7FE5FB78480072D5800100247C0803A68350 -S31AFE00457D61000C8381001083A1001483C1001883E1001C382137 -S31AFE00459200204E8000209421FFE87C0802A69381000893A100EA -S31AFE0045A70C93C1001093E100149001001C3FA000003D2000001A -S31AFE0045BC81693940801D39443C60FE017FE05850386327FC48C1 -S31AFE0045D1007275801D39443BC000005409C23F3F8000004182F5 -S31AFE0045E600547FFDFB787FDFF3787F9EE3783F80FE01881D00D5 -S31AFE0045FB002C0000FF4182002080BD001080DD001480FD001846 -S31AFE004610811D001C387C28407FA4EB7848007229801E39443BFC -S31AFE004625FF00015400C23E7C1F00403BBD01004180FFC480014F -S31AFE00463A001C7C0803A68381000883A1000C83C1001083E1002A -S31AFE00464F14382100184E8000209421FFB87C0802A69321002C67 -S31AFE00466493410030936100349381003893A1003C93C10040932E -S31AFE004679E100449001004C7C7D1B787C9C23783BE000003D206F -S31AFE00468EFE013929269893E10020386100083880006638A000C9 -S31AFE0046A30038C0000238E1002039000000480080913D40FE01BD -S31AFE0046B87FA3EB787F84E378394A24A838A0000238C1000838A4 -S31AFE0046CDE000013900000039200000480080852C030000418222 -S31AFE0046E202C03C60FE01386326C448007C552C030000408200D3 -S31AFE0046F7143C60FE01386326F4480071454800029C3C60FE01C7 -S31AFE00470C3863270048007135800100202C0000004182006C3DAB -S31AFE004721200000808939483D600000800B39443D200000388417 -S31AFE004736FFFC8069393C7C8401D63BA100247C0002147C6302C7 -S31AFE00474B147FA5EB784800A1ED7C7C1B797FBEEB784182003CB9 -S31AFE00476083A100247F83E3784800A4F17C661B783C60FE013876 -S31AFE0047756327247FA4EB787F85E378480070C5480000143C6023 -S31AFE00478AFE013863274C480070B53BC100243F400000839A39A7 -S31AFE00479F443C0000027F9C00003F20000083B9394C4FFEEB828A -S31AFE0047B47C000026540007FE7C0000D07C0900F87F9C00385580 -S31AFE0047C929039C7F9C4B787FA3EB783880000038A001004800D3 -S31AFE0047DE693D3D20FE013F60000039692794801B393C814927C3 -S31AFE0047F394810B0004939D0018915D0000911D0004901D0014E0 -S31AFE004808901D00103BBD01007FA3EB783880000038A001004883 -S31AFE00481D0068FD3D60FE01801B393C810B279C392B279C80E992 -S31AFE004832000C81690004814900087C00E214939D0018911D0039 -S31AFE00484700917D0004915D000890FD000C901D0014901D001039 -S31AFE00485C3BBD01007FA3EB783880000038A00100480068AD3D9A -S31AFE00487120FE01800927AC396927AC812B0008814B0004A10B0E -S31AFE004886000C913D0008901D0000915D0004B11D000C880B002B -S31AFE00489B0E3F800000981D000E817A3944801C39407D2B5A14D1 -S31AFE0048B07C090050901D0014917D0018901D00103BBD01007FFE -S31AFE0048C5A3EB783880000038A0010048006849801C3940809A1B -S31AFE0048DA39443D60FE01814B27BC7F640050392B27BCA10900D9 -S31AFE0048EF0C8009000481690008915D0000901D0004917D000870 -S31AFE004904B11D000C909D0018937D0010937D00147F63DB787F83 -S31AFE004919C5F3784800A0213BFF00013BFF00017C7C1B793BFF10 -S31AFE00492E00013BFF00014182002C83A100247F83E3784800A3B5 -S31AFE004943197C661B783C60FE01386327247FA4EB787F85E37867 -S31AFE00495848006EED480000448099394C7F63DB7857E5402E7F1B -S31AFE00496DC6F3784800A13D7C7C1B794182002883A100247F8319 -S31AFE004982E3784800A2D57C661B783C60FE01386327CC7FA4EB56 -S31AFE004997787F85E37848006EA98001004C7C0803A68321002C07 -S31AFE0049AC83410030836100348381003883A1003C83C100408343 -S31AFE0049C1E10044382100484E8000209421FFF87C0802A69001C0 -S31AFE0049D6000C7C641B783C60FE013863267048006E613C6000CA -S31AFE0049EB003C8000003CA0FE0138633738388437A838A52690E4 -S31AFE004A0048007CBD8001000C7C0803A6382100084E800020947F -S31AFE004A1521FF207C0802A67D800026934100C8936100CC938189 -S31AFE004A2A00D093A100D493C100D893E100DC900100E491810098 -S31AFE004A3FC43BA000007C7B1B787C9A23783D20FE013BC92210F2 -S31AFE004A5493A1009893A100B0386100083880000038A0000C4814 -S31AFE004A690066B13D20000181491AB03B8100183800000C39607A -S31AFE004A7E00013D20FE01B0010010B161000E91410008B3A100B3 -S31AFE004A930C392922687F83E3783880007638A0000038C00002B5 -S31AFE004AA838E100903900000048007C913D20FE01392922703836 -S31AFE004ABD6100303880007238A0000038C0000238E1009439006D -S31AFE004AD2000048007C6D3D20FE013929228038610048388000A1 -S31AFE004AE76238A0000138C0000038E100983901009C48007C49EF -S31AFE004AFC3D20FE0139292290386100603880006D38A000013802 -S31AFE004B11C0000138E100A0390100A448007C253D20FE0139298C -S31AFE004B2622B0386100783880006838A0000138C0000138E10088 -S31AFE004B3BA8390100AC48007C013D40FE017F63DB787F44D3784F -S31AFE004B507F86E378394A22C838A0000138E00005390100B03966 -S31AFE004B6520000148007BF52C0300003BE0000041820288800146 -S31AFE004B7A00AC2C0000004182002C806100A83881000848009336 -S31AFE004B8F8D2C030000408200183C60FE01808100A8386322D4A2 -S31AFE004BA448006CA148000254800100A42C0000004182007480FD -S31AFE004BB96100A03C80FE01388422EC48006DCD2C0300004082EA -S31AFE004BCE000C3BE0000148000054806100A03C80FE01388422F0 -S31AFE004BE3F448006DAD2C030000408200283D20000080093934F7 -S31AFE004BF83BE000002C000000408200283C60FE01386322FC48D7 -S31AFE004C0D006C39480001EC3C60FE01808100A03863232448004E -S31AFE004C226C25480001D82E1F0000409200DC806100B02C03000C -S31AFE004C37004082001C3C60FE013863233848006C017FC3F37893 -S31AFE004C4C48006BF9480001AC38C100B47CDE3378388100083803 -S31AFE004C61A000014800803D7C7C1B7940800028806100B483A167 -S31AFE004C7600B0480083D57C651B783C60FE013863234C7FA4EBAE -S31AFE004C8B7848006BB94800016C3C60FE01808100903863CE489A -S31AFE004CA0480001A93D2000013B491BC83BA000003B6100B848CD -S31AFE004CB500000C7F9DD9AE3BBD0001281D0003418100184800D4 -S31AFE004CCA01A97C7C1B794080FFE8801A0110900100B42C1C00BC -S31AFE004CDF0040800028806100B4480083657C641B783C60FE0101 -S31AFE004CF43863236448006B4D7FC3F37848008135480000F82C6E -S31AFE004D091F0001408200143C60FE013863238848006B2D480092 -S31AFE004D1E00E04800010D800100942C000000418200548001006D -S31AFE004D339C2C000000408200143C60FE01386323B448006B0108 -S31AFE004D48480000A883A100984800000C987D00003BBD000148FC -S31AFE004D5D0001157C631B794080FFF03C60FE0180810098386336 -S31AFE004D7223D87FA5EB7848006ACD480000743C80FE01388423D1 -S31AFE004D87F0386100B938A0000348006C612C0300003BA100B81E -S31AFE004D9C408200143C60FE0038634E70480006DD4800004488F6 -S31AFE004DB10100B82C00005340820028893D00013929FFD028099E -S31AFE004DC60009418100183C60FE008081009838634E704800011C -S31AFE004DDBC9480000143C60FE01808100B8386323F448006A5989 -S31AFE004DF04092000C386100B44800803D800100E4818100C47CD3 -S31AFE004E050803A6834100C8836100CC838100D083A100D483C197 -S31AFE004E1A00D883E100DC7D808120382100E04E8000203D200045 -S31AFE004E2F0139291BC88009010C39690004900901089169010447 -S31AFE004E444E8000203D600001392B1BC839400000380001009040 -S31AFE004E596B1BC8914901189009010C90890114914901084E807A -S31AFE004E6E00209421FFF07C0802A693C1000893E1000C900100CE -S31AFE004E83143D2000013BE91BC883DF01082C1E00004080000C1C -S31AFE004E983860FFFF480000EC408200C4801F01142C0000004190 -S31AFE004EAD820038817F01183D200000392933047C8958AE396B74 -S31AFE004EC200013C60FE01917F01183863220848006975801F0187 -S31AFE004ED718280000064081000893DF01183D2000013BE91BC8C3 -S31AFE004EEC801F010C2C0000FF41810020801F01142C00000041D3 -S31AFE004F0182FF983C60FE013863220C480069394BFFFF883D2002 -S31AFE004F16000181291BC8381F00047C0303783880010038BF01EE -S31AFE004F2B107D2803A6901F01044E8000212C030000907F010C21 -S31AFE004F40907F010841810020801F01142C0000004182FF483C38 -S31AFE004F5560FE013863220C480068E94BFFFF383D400001394A00 -S31AFE004F6A1BC8812A0108816A01043929FFFF912A0108886B0090 -S31AFE004F7F00396B0001916A0104800100147C0803A683C1000866 -S31AFE004F9483E1000C382100104E8000209421FF707C0802A6925B -S31AFE004FA981006092A1006492C1006892E1006C93010070932125 -S31AFE004FBE0074934100789361007C9381008093A1008493C1000A -S31AFE004FD38893E1008C900100947C7D1B787C9523783B60000045 -S31AFE004FE83A8000013B2000003AC000003AE0FFFF480002602CB2 -S31AFE004FFD050053418200183C60FE01386320A87F64DB784800EC -S31AFE0050126835480002547FA803A63B7B00024E80002138A100FA -S31AFE0050275838000000547C063E7CBA2B78900100587FA3EB7885 -S31AFE00503C38800001480002697C7F1B79408000183C60FE0138B5 -S31AFE0050516320D47F64DB78480067ED4800020C381CFFD028007C -S31AFE00506600093B7B0001418101AC3D60FE01396B21E05400105D -S31AFE00507B3A7D4B002E3D20FE01392921E07D4A4A147D4903A699 -S31AFE0050904E8004207FA3EB78389CFFD17F45D378480002092C5E -S31AFE0050A51400007C7E1B78381BFFD17FD8F3787F60E2144182D4 -S31AFE0050BA002C2C1500004182001C7F3EA8503C60FE0138632086 -S31AFE0050CFF87F24CB7848006771480000083B2000003A80000065 -S31AFE0050E43D200000816939247FDECA147D39F0507C1748107C77 -S31AFE0050F90001107C0003B87D2900787C1E58407EE000387C17DD -S31AFE00510E4B78418000143D2000008009390C7C1E00404081002A -S31AFE005123183C60FE01386321107FC4F378480067154800013405 -S31AFE005138381F002E7FFC00507FE9FB782C0900007F7BFA143BBB -S31AFE00514DFFFFFF408100307F5CD3787FA3EB78388000017F85F3 -S31AFE005162E378480001457FE0FB782C000000987E00003BDE001E -S31AFE005177013BFFFFFF4181FFDC7FA3EB783880000138A0000033 -S31AFE00518C4800011D88A1005B7C6318F85466063E7C0628003B4E -S31AFE0051A17B000190A10058418200183C60FE013863214C7F04EF -S31AFE0051B6C3784800668D480000AC7D39F0507C09B0107C0001BE -S31AFE0051CB107C0003B87D2900787EC000387C164B7848000054FF -S31AFE0051E07FA3EB78209C003B7F45D378480000BD7C7E1B783D5C -S31AFE0051F52000003C60FE0193C9392C386321887FC4F3787EE5D0 -S31AFE00520ABB787EC6B37848006635480000543C60FE0138632113 -S31AFE00521FB07F64DB787F85E3784800661D4800003C7F7FDB7891 -S31AFE0052347FBEEB78480000083BFF00017FC803A64E8000212C2B -S31AFE00524903000A4082FFF07FDDF3787FFBFB787FA803A64E803C -S31AFE00525E00217C651B794181FD98800100947C0803A682810005 -S31AFE0052736082A1006482C1006882E1006C8301007083210074B5 -S31AFE005288834100788361007C8381008083A1008483C1008883F6 -S31AFE00529DE1008C382100904E8000209421FFE07C0802A6936100 -S31AFE0052B2000C9381001093A1001493C1001893E1001C900100DE -S31AFE0052C7247C9E23787FC0F3782C0000007C7B1B787CBC2B78BA -S31AFE0052DC3BA000003BDEFFFF408101787F6803A64E8000217F8F -S31AFE0052F16803A6547F063E4E800021393FFFD0381FFFBF2129E7 -S31AFE0053060009392000007D29491420000005380000007C00014F -S31AFE00531B147D270379546B063E3920000040820010381FFF9F22 -S31AFE0053302800000541810008392000012C0900004182010439DD -S31AFE0053452BFFD0380BFFBF7D2A4B787C0803785529063E5400D5 -S31AFE00535A063E21290009392000007D29491420000005380000EA -S31AFE00536F007C0001147D2703793920000040820010380BFF9F68 -S31AFE0053842800000541810008392000012C090000418200B039DE -S31AFE0053993FFFD05520063E2800000957BD402E4181000C7D2313 -S31AFE0053AE4B7848000030381FFF9F280000054181000C387FFF05 -S31AFE0053C3A94800001C381FFFBF393FFFC9200000057C000110BD -S31AFE0053D87C0003B87C0348385540063E280000094181000C7D31 -S31AFE0053ED49537848000030380BFF9F280000054181000C392BDB -S31AFE005402FFA94800001C5500063E392BFFC9200000057C00011E -S31AFE005417107C0003B87C094838546020362C1C00007C034B789C -S31AFE00542C7FBD1B784182001C801C00007C001A14901C0000487F -S31AFE00544100000C3860FFFF480000187FC0F3782C0000003BDE61 -S31AFE005456FFFF4181FE907FA3EB78800100247C0803A6836100B4 -S31AFE00546B0C8381001083A1001483C1001883E1001C382100207B -S31AFE0054804E8000209421FFF87C0802A69001000C3C60FE0138DD -S31AFE00549563208C480063AD8001000C7C0803A6382100084E80AE -S31AFE0054AA00203860001C4E8000209421FFE87C0802A693A1002B -S31AFE0054BF0C93C1001093E100149001001C7C7D1B78813D0004E1 -S31AFE0054D483C900044800002C73E00012418200107FA3EB787FBF -S31AFE0054E9E4FB784800004973E000084182000C7FA3EB784800CB -S31AFE0054FE01A9B3FE0010A01E00107000001A541F043E2C1F00D2 -S31AFE005513004082FFC88001001C7C0803A683A1000C83C10010A8 -S31AFE00552883E10014382100184E8000209421FFE87C0802A69338 -S31AFE00553D81000893A1000C93C1001093E100149001001C7C7DFA -S31AFE0055521B7883DD000483FE0018A01F0000700090002C0010B5 -S31AFE00556700408200683B9E0028813D0000801E00108169002486 -S31AFE00557C7C00F850816B00085400F87AA13F00007C9C002E7FF3 -S31AFE005591A3EB7838A000007D6803A67129EFFFB13F00004E804F -S31AFE0055A60021A01F0000700920004182000C83FE0010480000CB -S31AFE0055BB083BFF0008A01F0000700090002C0010004182FFA42C -S31AFE0055D093FE00188001001C7C0803A68381000883A1000C8390 -S31AFE0055E5C1001083E10014382100184E8000209421FFE87C08E5 -S31AFE0055FA02A693A1000C93C1001093E100149001001C81230073 -S31AFE00560F048169000C83EB00047C188AA654000FFE2C000000C5 -S31AFE00562441820028812B0004A00B00022C000000408100187CA4 -S31AFE005639004BAC7C0004AC3400FFF0392900104181FFF02C05BE -S31AFE00564E0000408100387C9E23787CBD2B78807E00002C03008C -S31AFE005663004182001880BE00047FE4FB78480059D1801E000427 -S31AFE0056787FFF021437BDFFFF3BDE00084082FFD88001001C7CC0 -S31AFE00568D0803A683A1000C83C1001083E10014382100184E8018 -S31AFE0056A200209421FFE87C0802A693A1000C93C1001093E100EF -S31AFE0056B7149001001C7C7D1B7883DD000483FE001C48000048FC -S31AFE0056CC813D000093FE000C816900247FA3EB78800B0004A0A8 -S31AFE0056E19F00027C0803A64E800021A01F000060008000B01F85 -S31AFE0056F60000A13F0000712020004182000C83FE00144800005E -S31AFE00570B083BFF0008A01F0000700090002C0010004182FFB0CE -S31AFE00572093FE001C8001001C7C0803A683A1000C83C1001083F2 -S31AFE005735E10014382100184E8000209421FFD87C0802A69301BB -S31AFE00574A00089321000C93410010936100149381001893A10032 -S31AFE00575F1C93C1002093E100249001002C83C300047C98237853 -S31AFE00577483BE00087CBB2B78A01D00007CD93378700980007CC7 -S31AFE005789FA3B78418200447FBFEB783F80FE01A01F00007009BC -S31AFE00579E20004182000C83FE0010480000083BFF00087C1FE85D -S31AFE0057B3004082000C387C202448006089A01F0000700980002E -S31AFE0057C84082FFD07FFDFB78A01D00007009200041820010809F -S31AFE0057DD1E00107C0903784800000C381D0008813E0010901E57 -S31AFE0057F200087C09E8502C1B00005400F87A393E0028B33D003D -S31AFE005807027F49012E83FD0004408100307F1EC3787F7CDB78F4 -S31AFE00581C809E000080BE00047FE3FB7848005819801E000437AC -S31AFE0058319CFFFF3BDE00087FFF02144082FFE07C188AA6540056 -S31AFE0058460FFE2C00000041820028813D0004A01D00022C000078 -S31AFE00585B00408100187C004BAC7C0004AC3400FFF03929001027 -S31AFE0058704181FFF0A01D00006000DC00B01D00008001002C7C7F -S31AFE0058850803A6830100088321000C834100108361001483814D -S31AFE00589A001883A1001C83C1002083E10024382100284E800062 -S31AFE0058AF208123000481690008A06B000054638BFE686300010F -S31AFE0058C44E800020688401003004FFFF7C6021104E8000208142 -S31AFE0058D923000481690004800B000060000030900B00004E801D -S31AFE0058EE00208123000481690004800B000054000732900B0038 -S31AFE005903004E8000209421FFD87C0802A69321000C9341001041 -S31AFE005918936100149381001893A1001C93C1002093E100249056 -S31AFE00592D01002C83230008839900047FDE9AA677DEFFFF3C80BA -S31AFE0059420000388433503860000838A0000648000D297F788A90 -S31AFE005957A6577B0FFE39200000380000807C0903A661201000E2 -S31AFE00596C3CC00E007C0004AC7D398BA67CD88BA67C198BA67C3E -S31AFE005981D88BA6392900104200FFE03D2004007C0004AC7D382F -S31AFE0059968BA63FA000003CC0FE003CE0FE013D20000038C65D1B -S31AFE0059AB1C38E7E7FC391D393839297A083860001C38800000AE -S31AFE0059C07F25CB7848004845807D39383BFE3C00480048613806 -S31AFE0059D560001C48004C6D3860001C48004B15801E0A003B5E9F -S31AFE0059EA0A005400073293FC0000901E0A00935C00047FE3FB76 -S31AFE0059FF783880000038A000A44800571138C000047CC903A649 -S31AFE005A142F9B0000391E2C00395E2C203D2000003D6000003817 -S31AFE005A29E0000038009000915C001C39294A50396B6210911CF4 -S31AFE005A3E0010911C0008911C0018915C0014915C000CB0EA0031 -S31AFE005A5302912A0004B00A0000392905F0394A00084200FFECB0 -S31AFE005A68A40AFFF87D09437860002000B00A0000394000047D0B -S31AFE005A7D4903A6399F007238000000B009000291690004B0092A -S31AFE005A920000396B05F0392900084200FFEC7D284B78A408FFB8 -S31AFE005AA7F83B60000160002000B0080000A13E09523BA00010F5 -S31AFE005ABC61290003B13E0952A01E0950390005F05400043AB073 -S31AFE005AD11E0950A13E09543B80FFFF7129FFFDB13E0954A01EB0 -S31AFE005AE609623D40DEBB7000FFCFB01E0962A13E0960614A209C -S31AFE005AFBE37129FFCFB13E0960A01E096439600000600000309B -S31AFE005B10B01E0964A13E09523860888861290A00B13E0952A0E1 -S31AFE005B251E09503880000F7000F5FFB01E0950813E0AEC38C0F1 -S31AFE005B3A05EE5529002E913E0AEC801E0AEC38E00040600000A2 -S31AFE005B4F3D901E0AEC813E0AEC38002C20552906B0913E0AEC2A -S31AFE005B64937E0030B01F000039202C00B13F00029BBF00049BA8 -S31AFE005B79BF0005B11F0006939F0030915F0034917F0038917F9B -S31AFE005B8E003C917F0040B07F0044B17F0044B09F0046B17F00C6 -S31AFE005BA348B0DF004AB0FF004CB11F004EB11F00503800000651 -S31AFE005BB8B17F00587C0903A6B17F005A3CA00000B17F005CB17B -S31AFE005BCD7F005E38A533567D8963788C05FFFF98090000392909 -S31AFE005BE200014200FFF438000000B01F0078B01F0094B01F00C3 -S31AFE005BF796B01F0098B01F009AB01F009EB01F00A0B01F00A2E2 -S31AFE005C0C39200001B13E09C0A01E09C070060001418200187F15 -S31AFE005C21C9F378A00909C0700A00014082FFF87D3E4B783800DA -S31AFE005C36FFFFB01A00103920001AB13A0014396000003C001026 -S31AFE005C4B88917A00046000000C901A00003920D555B13A000E17 -S31AFE005C603800280AB01A0008392000903D60FA10992B0000A0FB -S31AFE005C751E096260000001B01E0962A13E09605529043CB13EFE -S31AFE005C8A0960419E00103D6002007C0004AC7D788BA6813900FE -S31AFE005C9F003C800000816900247F23CB78800B00003884335073 -S31AFE005CB47C0803A64E800021386000018001002C7C0803A683C5 -S31AFE005CC921000C83410010836100148381001883A1001C83C129 -S31AFE005CDE002083E10024382100284E8000209421FFF87C080264 -S31AFE005CF3A69001000C4BFFF7BD3860001C480049453860001C19 -S31AFE005D08480047ED8001000C7C0803A6382100084E8000209469 -S31AFE005D1D21FFF87C0802A69001000C3860001C4800466538604D -S31AFE005D3200038001000C7C0803A6382100084E8000209421FF98 -S31AFE005D47F07C0802A693C1000893E1000C900100143D60000009 -S31AFE005D5C3D200000392937383BEB37347C1F4840418000207DEE -S31AFE005D713E4B78813F00003BFFFFFC7D2803A64E8000217C1F4B -S31AFE005D86F0404080FFEC800100147C0803A683C1000883E100B7 -S31AFE005D9B0C382100104E8000209421FFF87C0802A69001000C17 -S31AFE005DB03D200000800936B42C0000004182000C9003009448A0 -S31AFE005DC50000243D200000906939A0480018197C1602A6280097 -S31AFE005DDA7A124081000C38007A127C1603A68001000C7C080344 -S31AFE005DEFA6382100084E8000204E800020386000004E80002032 -S31AFE005E049421FFF07C0802A693E1000C90010014480005F13D15 -S31AFE005E192000003889361C800400083BE000002C0000004182A7 -S31AFE005E2E00307FE3FB787C9F2378809F000080BF000480DF00DF -S31AFE005E430888FF000C3BFF0010480004C1801F00082C00000081 -S31AFE005E584082FFE0800100147C0803A683E1000C382100104EA7 -S31AFE005E6D8000203C000A007C0004AC7C108BA67C0004AC7C188D -S31AFE005E828BA63C000C004C00012C7C108BA64C00012C7C00045F -S31AFE005E97AC7C188BA63C0002004C00012C7C108BA64C00012C94 -S31AFE005EAC7C0004AC7C188BA64E8000209421FFF87C0802A69096 -S31AFE005EC101000C480000ED38007A127C1603A68001000C7C0876 -S31AFE005ED603A6382100084E8000203D20002F6129AF087C6349C6 -S31AFE005EEBD63C00431B6000DE837C0300967C63FE707C00967089 -S31AFE005F007D6300507D3602A67D605B782C000000396BFFFF4C33 -S31AFE005F15810020394BFFFF7C1602A67C0900004182FFF87C0952 -S31AFE005F2A03787D605B782C0000007D4B53784181FFE04E800005 -S31AFE005F3F209421FFF87C0802A69001000C3D20FF006129093095 -S31AFE005F5438000001B00900007C0006ACA00900007C0006AC54E9 -S31AFE005F6900AAFF38600000418200302060003A3D6000005460E0 -S31AFE005F7E103A396B33587D6B002E3D200000392934447C89003F -S31AFE005F932E7D6803A64E800021546307FA8001000C7C0803A6D8 -S31AFE005FA8382100084E8000203D20000039493358390000407C32 -S31AFE005FBD0A402E3D20FE0039295DFC7C00480041820018800A14 -S31AFE005FD200403D20FE013929AF987C004800408200343D20FE5C -S31AFE005FE70039295F403D600000380000007D2A412E6000DEADCA -S31AFE005FFC396B34447C0B412E3D20000039293530380000007CA2 -S31AFE00601109412E3D60FE01800B2EF43D20FE0139292EB87D296B -S31AFE00602602147D2903A64E8004203D20FF006129001480090087 -S31AFE00603B007C0006AC64000001900900007C0006AC480000E8C2 -S31AFE0060503D20FF0061290200A00900007C0006AC60000008B060 -S31AFE0060650900007C0006AC480000C83D20FF0061290200A0094A -S31AFE00607A00007C0006AC60000004B00900007C0006AC4800004C -S31AFE00608FA83D20FF0061290240A00900007C0006AC60000004ED -S31AFE0060A4B00900007C0006AC480000883D20FF0061290220A084 -S31AFE0060B90900007C0006AC60000008B00900007C0006AC480000 -S31AFE0060CE00683D20FF0061290220A00900007C0006AC60000012 -S31AFE0060E304B00900007C0006AC480000483D20FF0061290940FA -S31AFE0060F8800900007C0006AC60000080900900007C0006AC48E9 -S31AFE00610D0000283D20FF0061290948816900007C0006AC3C00C6 -S31AFE006122800054005D7E7D6B0378916900007C0006AC3D60FE8F -S31AFE00613701800B30043D20FE0139292FA07D2902147D2903A6F7 -S31AFE00614C4E8004203D20FF0061290200A00900007C0006AC5435 -S31AFE00616100063E60000100B00900007C0006AC480000683D208C -S31AFE006176FF0061290240A00900007C0006AC5400063E60000175 -S31AFE00618B00B00900007C0006AC480000443D20FF006129022080 -S31AFE0061A0A00900007C0006AC5400063E60000100B00900007CE1 -S31AFE0061B50006AC480000203D20FF0061290940800900007C0083 -S31AFE0061CA06AC6000E000900900007C0006AC3D60FE01800B30AC -S31AFE0061DFEC3D20FE01392930887D2902147D2903A64E80042048 -S31AFE0061F43D20FF0061290014800900007C0006AC6000004090B1 -S31AFE0062090900007C0006AC4E8000203D20FF0061290200A009C6 -S31AFE00621E00007C0006AC60000008B00900007C0006AC4E80001C -S31AFE006233203D20FF0061290200A00900007C0006AC600000040F -S31AFE006248B00900007C0006AC4E8000203D20FF0061290240A0A0 -S31AFE00625D0900007C0006AC60000004B00900007C0006AC4E80D8 -S31AFE00627200203D20FF0061290220A00900007C0006AC600000B4 -S31AFE00628708B00900007C0006AC4E8000203D20FF006129022019 -S31AFE00629CA00900007C0006AC60000004B00900007C0006AC4E79 -S31AFE0062B18000203D20FF0061290940800900007C0006AC6000EE -S31AFE0062C60080900900007C0006AC4E8000203D20FF006129099B -S31AFE0062DB48816900007C0006AC3C00800054000FFE7D6B0378CA -S31AFE0062F0916900007C0006AC4E8000207C1E22A6600000077C3A -S31AFE0063051E23A64E8000209421FFF093E1000C54E0FFFE70FFE6 -S31AFE00631A00012F0000002F8300207CC0FE707D600026556B1FDC -S31AFE00632FFE54A500267D400026554ADFFE7C0600507D4A00D070 -S31AFE0063447CE0002654E7EFFE7D6B00D060A808FF54000FFE7DF1 -S31AFE0063590858787D4950F860A508FD7CFF00387CAB5838714A16 -S31AFE00636E000D2F9F00007D654378548400267129001D7D4A4BD7 -S31AFE00638378608402003960000039000020419E005C546B402E49 -S31AFE0063987D55C3A67D70C3A67C93C3A67CB6C3A660A001007DCA -S31AFE0063AD5DC3A67D78C3A67C9BC3A67C1EC3A6386300013CC692 -S31AFE0063C2FF807F8340007CC0FE707C0600507D2000265529EF55 -S31AFE0063D7FE54000FFE7D2700393C8400803CA500804082FFAC63 -S31AFE0063EC656020007C10C3A67C18C3A683E1000C382100104E9A -S31AFE006401800020380000007C19C3A6380000207C0903A63920CD -S31AFE0064160000380000007C15C3A67D30C3A67C13C3A67C16C3D8 -S31AFE00642BA67C1DC3A67D38C3A67C1BC3A67C1EC3A6392901002C -S31AFE0064404200FFD83C00200060001F007C10C3A67C18C3A64E0F -S31AFE0064558000209421FDE87CDE9AA674C6FFFF3D600000812BD9 -S31AFE00646A366C2C0900004082020039400030380000017D4903D3 -S31AFE00647FA6900B366CB12609C43800000039263C807D284B78C2 -S31AFE0064949806086038E62E0838A1000838862E003861000939ED -S31AFE0064A981021198090000392900014200FFF839202E00B128A9 -S31AFE0064BE0002396000103940020938002E089968000599680021 -S31AFE0064D304B0080000B14800063920A800B1262E0838000101AD -S31AFE0064E8B007000290A700047C8B2378B14B0002380000A59892 -S31AFE0064FD01000890AB0004B1262E00380000009806086439209E -S31AFE006512005099260868380000019806086039200111B1260967 -S31AFE006527C0A00609C070090001418200187CC93378A00909C075 -S31AFE00653C700A00014082FFF87D264B7838000211B00609C0A141 -S31AFE0065512609C071200001418200187CC93378A00909C0700AF9 -S31AFE00656600014082FFF87D264B78392000007D2903A63800001C -S31AFE00657B819806086C7D4902A6614AC3517D4903A6A00B00002D -S31AFE00659070098000418200084200FFF4394001007D4903A63DD3 -S31AFE0065A520000039297E2439600000380000FF7C0959AE396BB9 -S31AFE0065BA00014200FFF87D8763787C6B1B787C0B3800418200B3 -S31AFE0065CF9C3CA00000880B00002C00004D40820080880B000159 -S31AFE0065E42C00004F40820074880B00022C000054408200688C22 -S31AFE0065F90B000839400000892B00015400402E7C084B787C0AB9 -S31AFE00660E4000396B00024080005438857E247C651B78880B0013 -S31AFE00662300396B00017D693A787D23FE707C0451AE7C604A78F6 -S31AFE0066387C0018507C00FE70394A00017CA900787C0A40007D17 -S31AFE00664D6000387C0B4B784180FFCC48000010396B00017C0B42 -S31AFE00666238004082FF703800000098060860382102184E800037 -S31AFE006677209421FFE87C0802A693A1000C93C1001093E10014F6 -S31AFE00668C9001001C7C7D1B787C9F23787CBE2B784BFFFDBD3DE8 -S31AFE0066A120000039697E24394B01007C0B50404080008457A89D -S31AFE0066B6063E880B00007C00400040820054886B0001396B008A -S31AFE0066CB027F83F0004FFEE3827C000026540007FE7C0000D0C9 -S31AFE0066E07FC900787C6000387C034B794081004C7C6903A67D72 -S31AFE0066F5695B787FE4FB7888090000392900019804000038842E -S31AFE00670A00014200FFF048000028886B0001380300027D2B00FB -S31AFE00671FEE5529063E2C0900FF4182000C7C0B50404180FF884F -S31AFE006734386000008001001C7C0803A683A1000C83C1001083E3 -S31AFE006749E10014382100184E8000209421FFF87C0802A690017A -S31AFE00675E000C480046758001000C7C0803A6382100084E80002A -S31AFE006773203C80FF00608400007C9E9BA63CA0FA1060A5000107 -S31AFE0067883C60000060630000986500007C788AA63C600A007C56 -S31AFE00679D0004AC7C788BA63C600C007C0004AC7C788BA63C6079 -S31AFE0067B204007C0004AC7C788BA63C6001007C0004AC7C788B31 -S31AFE0067C7A63C6007007C0004AC7C788BA67C708AA63C600A005D -S31AFE0067DC7C708BA64C00012C3C600C007C708BA64C00012C3C94 -S31AFE0067F16004007C708BA64C00012C7C0004AC3C6000606063AA -S31AFE0068062400906400003C60FFFF6063FF88906400043C6000E9 -S31AFE00681B00606300C2B06402003C6055CC6063AA339064032055 -S31AFE00683090640324906403289064032C386000C3B06402203829 -S31AFE006845600083B06402403CA0FE0060A569E43CC0FE0060C6B5 -S31AFE00685A6AE47CE530507CE7167038C00000806500009064013B -S31AFE00686F7C90C4016838A5000438C600017C0638004180FFE895 -S31AFE00688438600200B064017A3C60188060631000906401703C2A -S31AFE00689960FE00606304013CA0FF8060A509609064010090A4CE -S31AFE0068AE01043C600000606300813CA0FFC060A5040090640153 -S31AFE0068C30890A4010C3C600000606300803CA0000060A50400AF -S31AFE0068D89064011090A401143C600000606300803CA00000603E -S31AFE0068EDA504009064011890A4011C3C60FA00606304013CA051 -S31AFE006902FFE060A509309064012090A401243C60800060630012 -S31AFE006917013CA0A00060A501089064012890A4012C3C60FA21A7 -S31AFE00692C606300013CA0FFFF60A501089064013090A401343CDC -S31AFE00694160FC00606300013CA0FF8060A509409064013890A413 -S31AFE006956013C3C6002006063000090640280806402845463658E -S31AFE00696B3E2C030000418200103C605F506063D0004800000CA1 -S31AFE0069803C6000006063D000906402843C4000003C60FF0060DE -S31AFE006995630014904300003C400000604200007C4210F87C56E9 -S31AFE0069AA03A6384000013C60FF0060630200B04300003CA0FA89 -S31AFE0069BF1060A500013C60000060630008986500007C6802A6B9 -S31AFE0069D47063FFFF6463FE007C6803A64E800020CFAFC0040F48 -S31AFE0069E9AFC4040CAF8C0410AF0C04F0AF0C00F3BF4805FFFF5C -S31AFE0069FEC005FFFFC005CFAFC0040FAFC4040CAF8C0400AF0C2A -S31AFE006A130407AF0C080CAF0C0401AF0C040FAF0C080CAF0C0474 -S31AFE006A2801AF0C040FAF0C080CAF0C0410AF0C04F0AFC000F3D7 -S31AFE006A3DBF4805FFFFC005CFFF00040FFF04040CFF0C0013FF60 -S31AFE006A524804FFFFC004FFFFC005FFFFC005FFFFC005CFFF0006 -S31AFE006A67040FFF04040CFF0C0003FF0C0C0CFF0C0003FF0C0C9A -S31AFE006A7C0CFF0C0003FF0C0C0CFF0C0013FF4804FFFFC004FF9A -S31AFE006A91FFC005FFFFC005FFFFC005FFFFC005FFFFC005FCFF21 -S31AFE006AA6C004C0FFC00401FFC0040FFFC0041FFFC004FFFFC05A -S31AFE006ABB04FFFFC005FFFFC005FFFFC005FFFFC005FFFFC005EF -S31AFE006AD0FFFFC005FFFFC007FFFFC007FFFFC007FFFFC0077066 -S31AFE006AE563000E3C80FA1060840001986400004E8000203C80D6 -S31AFE006AFAFA106084000138A0000A98A400003CA0000A7CA90368 -S31AFE006B0FA64200000038A0000C98A400003CA0000A7CA903A6B1 -S31AFE006B24420000003863FFFF2C0300004080FFD038A000069849 -S31AFE006B39A400003CA000147CA903A6420000004E8000203D2054 -S31AFE006B4EFE01392931705463073E7C6918AE4E8000209421FFE3 -S31AFE006B63F87C0802A69001000C3D200000806936882C03000025 -S31AFE006B784181000C480029494800000C3800FFFF90093688801B -S31AFE006B8D01000C7C0803A6382100084E8000203803FF9F280065 -S31AFE006BA200054181000C3863FFA94E8000203923FFD055200630 -S31AFE006BB73E280000094181000C7D234B784E8000203803FFBF3E -S31AFE006BCC280000054081000C3860FFFF4E8000203863FFC94E81 -S31AFE006BE18000209421FFE07C0802A690010024380000009801B5 -S31AFE006BF60018906100104BFFFF655463063E38810008480000BB -S31AFE006C0B1D2C0300014082FFEC800100247C0803A6382100202B -S31AFE006C204E8000209421FFF07C0802A693C1000893E1000C9031 -S31AFE006C350100147C9F2378897F00102C0B0000408200282C0313 -S31AFE006C4A002440820098392000013800FFFF901F0004993F0098 -S31AFE006C5F10917F0000917F000C4800007C2C0B000140820054CE -S31AFE006C742C03002340820020815F0008817F000C380000007C2B -S31AFE006C890A59AE39200002993F001048000050817F000C2C0BC3 -S31AFE006C9E0800418200E8801F0000813F00087C001A14901F006A -S31AFE006CB3007C6959AE380B0001901F000C480000242C0B000238 -S31AFE006CC8408200245463063E4BFFFECD546320363800000390E5 -S31AFE006CDD7F0004981F001038600000480000AC2C0B00034082CC -S31AFE006CF200985463063E4BFFFEA5801F0004893F00037C001B04 -S31AFE006D07787C090000901F0004418200103860002D480027714B -S31AFE006D1C4800006C3860002B48002765813F0008880900022C8C -S31AFE006D3100003A4082004C8869000083DF000C48002749813F2A -S31AFE006D460008886900014800273D396000037C0BF04041810079 -S31AFE006D5B287FCAF3787FE4FB78812400087C0958AE7D2B4A142F -S31AFE006D70396B00017C0B50409809FFFD4081FFE8386000014828 -S31AFE006D8500001038000000981F00103860FFFF800100147C0837 -S31AFE006D9A03A683C1000883E1000C382100104E8000209421FF70 -S31AFE006DAFE07C0802A69361000C9381001093A1001493C10018E7 -S31AFE006DC493E1001C900100243D20FE013B6931707C7C1B78380D -S31AFE006DD9600024480026AD8BFC00003BC000002C1F00003BA05A -S31AFE006DEE0000418200247FE3FB78480026917C1DFA143BDE0011 -S31AFE006E03017FFCF0AE541D063E2C1F00004082FFE438600023FC -S31AFE006E184800267157A0E13E7C7B00AE4800266557A0073E7C3C -S31AFE006E2D7B00AE480026594BFFFD2D5463067E2C03002B408291 -S31AFE006E42FF98800100247C0803A68361000C8381001083A100A6 -S31AFE006E571483C1001883E1001C382100204E8000209421FFD83F -S31AFE006E6C7C0802A6936100149381001893A1001C93C100209356 -S31AFE006E81E100249001002C3D200000816939503D4000002C0BB2 -S31AFE006E96000038000000900A368C3F6000003F8000004081012F -S31AFE006EAB383FC000003FA000003D2000008009395C2C00000011 -S31AFE006EC04182006C801C39503D60000028000003408100188044 -S31AFE006ED51E3954700900034082000C3BE0000448000034801C78 -S31AFE006EEA39503BE000012800000140810024800B395454000769 -S31AFE006EFFFE7C0000D07C00FE707C0900F8540007FE552907BC2F -S31AFE006F147C1F4B78808B3954386100087FE5FB784800316148D4 -S31AFE006F29000014813E39543BE0000188090000980100083D2044 -S31AFE006F3E00008009368C2C00000040820098390000007C08F8B4 -S31AFE006F53004080006C3D20FE0138C9317038A100083CE00000FE -S31AFE006F683C8000007D6828AE814739585560E13E7D2600AE9982 -S31AFE006F7D2A00008004368C394A00012C000000914739584082B0 -S31AFE006F9200505560073E7D2600AE396A0001992A0000801B3613 -S31AFE006FA78C916739582C00000040820030390800017C08F800E0 -S31AFE006FBC4180FFB0813D3950801E39547D3F48502C0900007CD5 -S31AFE006FD100FA14901E3954913D39504181FED88001002C7C083E -S31AFE006FE603A6836100148381001883A1001C83C1002083E100CD -S31AFE006FFB24382100284E8000209421FFE87C0802A693A1000CE2 -S31AFE00701093C1001093E100149001001C2C0600003D2000003D02 -S31AFE0070256000003D4000003D00000090893958906B395490AACC -S31AFE00703A395090C8395C418200303FA0000038000000901D36DA -S31AFE00704F8C813D368C4BFFFE15813D368C801D368C2C000000B4 -S31AFE00706441820010386000004800001C4BFFFDF93D60000081E6 -S31AFE0070792B39583800000098090000806B39588001001C7C08CC -S31AFE00708E03A683A1000C83C1001083E10014382100184E800005 -S31AFE0070A3209421FFC07C0802A69281001092A1001492C100183F -S31AFE0070B892E1001C9301002093210024934100289361002C93F5 -S31AFE0070CD81003093A1003493C1003893E1003C900100443D2023 -S31AFE0070E20000800939503B6000002C0000003D2000009369362D -S31AFE0070F78C3E8000003EA00000408101703D2000008169395452 -S31AFE00710C3F000000880B00002C000000418201583EC000003F13 -S31AFE0071214000003EE000008016395C2C000000418200588015F0 -S31AFE00713639502800000340810018801A3958700900034082004A -S31AFE00714B0C3BC000044800003C801539503BC000012800000159 -S31AFE0071604081002C801A3958540007FE7C0000D07C00FE707CF3 -S31AFE0071750900F8540007FE552907BC7C1E4B78480000083BC0BE -S31AFE00718A00013BE000007C1FF000408000743FA000003F2000D3 -S31AFE00719F003B810008813D39548869000039290001913D395419 -S31AFE0071B45463063E4BFFF9E58019368C547B26362C00000040AD -S31AFE0071C98200A8813839548869000039290001913839545463DC -S31AFE0071DE063E4BFFF9BD8014368C7F631B782C000000547B0688 -S31AFE0071F33E4082007C7F7FE1AE3BFF00017C1FF0004180FFA054 -S31AFE0072088016395C2C00000041820018809A3958386100087F70 -S31AFE00721DC5F37848002EC54800000C813A39589B6900003D20EC -S31AFE00723200008009368C2C0000004082003481373950801A39C2 -S31AFE007247587D3E48502C0900007C00F214901A39589137395040 -S31AFE00725C4081001481383954880900002C0000004082FEBC8045 -S31AFE0072710100447C0803A68281001082A1001482C1001882E18A -S31AFE007286001C8301002083210024834100288361002C83810067 -S31AFE00729B3083A1003483C1003883E1003C382100404E800020AF -S31AFE0072B09421FFE87C0802A693A1000C93C1001093E100149041 -S31AFE0072C501001C2C0600003D2000003D6000003D4000003D00AD -S31AFE0072DA000090693954908B395890AA395090C8395C418200F6 -S31AFE0072EF303FA0000038000000901D368C813D368C4BFFFDA564 -S31AFE007304813D368C801D368C2C000000418200103860000048B2 -S31AFE0073190000104BFFFD893D200000806939588001001C7C0883 -S31AFE00732E03A683A1000C83C1001083E10014382100184E800062 -S31AFE007343209421FFF87C0802A69001000C480028713D2000005E -S31AFE00735838000001900936708001000C7C0803A6382100084E3B -S31AFE00736D8000209421FFE87C0802A693A1000C93C1001093E187 -S31AFE00738200149001001C7C9E23783BA000007C7F1B7893BE00C2 -S31AFE0073970048000024801E0000813F0000540020367C001B785A -S31AFE0073AC39290001901E0000913F00003BBD0001813F000088A6 -S31AFE0073C16900002C030000418200104BFFF7D17C631B79408003 -S31AFE0073D6FFC87FA3EB788001001C7C0803A683A1000C83C10014 -S31AFE0073EB1083E10014382100184E8000207C842379394000008D -S31AFE00740040820018380000309803000198030000386000024E12 -S31AFE007415800020392500077D20FE7054001F7E7D2902147D25FF -S31AFE00742A1E71418200603D20FE0138C9317038E5FFFF54E01832 -S31AFE00743F387C88043068A90001200900007D2049143168FFFFF8 -S31AFE0074547C0B41107C0B4B79418200285508063E5500E13E7D7F -S31AFE0074696600AE5509073E7C0648AE996300009C0300013863A4 -S31AFE00747E0001394A00027CE53B794082FFB07D4353784E800090 -S31AFE007493209421FFF07C0802A693E1000C900100143D2000006E -S31AFE0074A880A939907C641B782C05000038600000408100843F19 -S31AFE0074BDE00000801F36942C00000041820010386000017C0851 -S31AFE0074D203A64E8000212C030001408200103D20000098693673 -S31AFE0074E79048000054801F36942123FFFF216900007D2B491426 -S31AFE0074FC216000007C0B01147C0B4B79418200343D200000803B -S31AFE00751109396C2C00000041820024386000017C0803A64E800C -S31AFE00752600212C030000418200103D20000038000001980936BC -S31AFE00753B91800100147C0803A683E1000C382100104E8000201D -S31AFE0075509421FFF07C0802A693E1000C900100143FE000008886 -S31AFE0075651F36902C000000418200343D200000800936942C0029 -S31AFE00757A0000418200243D20000080A939903860000038800072 -S31AFE00758F007C0803A64E80002138000000981F36903FE00000F3 -S31AFE0075A4881F36912C000000418200283D2000008009396C2C92 -S31AFE0075B900000041820018386000007C0803A64E8000213800F2 -S31AFE0075CE0000981F3691800100147C0803A683E1000C3821009B -S31AFE0075E3104E8000209421FFF07C0802A693C1000893E1000CE5 -S31AFE0075F8900100143D200000800936842C0000004182001080B6 -S31AFE00760D0936847C0803A64E8000213D200000800939A42C0096 -S31AFE00762200004182001438000000900939A43BE0000248000065 -S31AFE0076371048007C1948007B4D7C7F1B7848007CD52C030000E7 -S31AFE00764C4182000848007D0148007CC14BFFFEF948007C713861 -S31AFE007661600003480028B538600003480028452C1F000041822A -S31AFE00767600203FC00000813E36747FE3FB787D2803A64E800082 -S31AFE00768B212C0300004082FFEC48007C7D3D200000800936800C -S31AFE0076A02C00000041820010800936807C0803A64E80002180F7 -S31AFE0076B50100147C0803A683C1000883E1000C382100104E8087 -S31AFE0076CA00209421FFB87C0802A6936100349381003893A10047 -S31AFE0076DF3C93C1004093E100449001004C7C7E1B783BE0000085 -S31AFE0076F43F6000003B810028801B39703BA000012C000000416D -S31AFE00770982001C7FE3FB787F84E3787C0803A64E8000217C7D81 -S31AFE00771E1B78480000107FE3FB7848001D3990610028381FFF85 -S31AFE007733E02800001F7C0A03782F9D00003BFF00017F83E378B1 -S31AFE0077484181004C390000047D0903A6386100087C6B1B78385B -S31AFE00775D000000392000007C0B49AE392900014200FFF8380068 -S31AFE00777200047C0903A67C6943787F8BE378880B0000396B0090 -S31AFE0077870198090000392900014200FFF0419E0030200A001F5B -S31AFE00779C7C0001107C0500F85400077A54A507387FC4F3787C97 -S31AFE0077B1052B7838C000004BFFF84D7C7E1B7848000058212A18 -S31AFE0077C6001F7D2949107D2048F8540006F6552907387D2903F9 -S31AFE0077DB782C0900007FCBF378380000783929FFFF4182001848 -S31AFE0077F02C090000980B0000396B00013929FFFF4082FFF028CA -S31AFE0078050A001F4181000C3BDE0010480000083BDE00082C1F8E -S31AFE00781A00464081FEE08001004C7C0803A6836100348381005A -S31AFE00782F3883A1003C83C1004083E10044382100484E800020ED -S31AFE0078449421FFD07C0802A67D8000269381002093A100249339 -S31AFE007859C1002893E1002C900100349181001C88030000386374 -S31AFE00786E00012C0000507C9D237890610008392000003BC00083 -S31AFE0078834740820070386100083881000C4BFFFAE12C030000B9 -S31AFE007898418200288121000888090000392900012C00003D9154 -S31AFE0078AD210008408200108121000C3BC90001480000383D2037 -S31AFE0078C2FE01880931887FA4EB782C0000003969318841820094 -S31AFE0078D7D8880B0000980400008D2B0001388400012C090000E6 -S31AFE0078EC4082FFEC480000BC7D3F4B787C1FF000408000803B4D -S31AFE007901800000397FFFE020AB001F7CA52910392100103881EF -S31AFE007916000C7CA028F87C8428787CA9483854A5077A540007F6 -S31AFE00792B38806100082A0B001F7CA503787D24237893810010D2 -S31AFE00794038C000004BFFF96D808100107FE3FB7848001B2541D7 -S31AFE00795591001081210008392900104800000C812100083929FC -S31AFE00796A0008912100083BFF00017C1FF0004180FF8C3D20FED5 -S31AFE00797F018809318C7FA4EB782C0000003969318C4182001CB0 -S31AFE007994880B0000980400008D2B0001388400012C09000040C0 -S31AFE0079A982FFEC3800000098040000800100348181001C7C082D -S31AFE0079BE03A68381002083A1002483C1002883E1002C7D808121 -S31AFE0079D320382100304E8000209421FF287C0802A693A100CCFC -S31AFE0079E893C100D093E100D4900100DC3BC000003D6000017C98 -S31AFE0079FD7D1B789BCB88B4893D00003809FFC12800003B4181D3 -S31AFE007A1208B43D60FE01396B31E05400103A7D4B002E3D20FE5F -S31AFE007A2701392931E07D4A4A147D4903A64E8004204800781973 -S31AFE007A3C4800774D3D20FE01392931705460E73E7D0900AE5465 -S31AFE007A5163073E7CE918AE3D40000138000053392A88B4980AFF -S31AFE007A6688B439600000996900039909000198E90002480008B7 -S31AFE007A7B603FA00001387D88B43880080038A000204BFFF96D59 -S31AFE007A903BBD88B4380000007C1D19AE4800083C3D20FE0188A1 -S31AFE007AA50931903D6000012C000000396B88B43949319041824E -S31AFE007ABA07E8880A00008D2A0001980B00002C090000396B00FE -S31AFE007ACF014082FFEC480007CC387D000148000B9D480007F8E8 -S31AFE007AE4387D000148000D61480007EC3C600001386388B44B23 -S31AFE007AF9FFFBD5480007DC881D00012C0000004082004048005E -S31AFE007B0E09313D20FE018809318C3D6000012C000000396B8884 -S31AFE007B23B43949318C41820778880A00008D2A0001980B000027 -S31AFE007B382C090000396B00014082FFEC4800075C381D0001901C -S31AFE007B4D0100883BC1008C3BE100887FE3FB787FC4F3784BFF9D -S31AFE007B62F8112C030000418200A481210088880900003929004E -S31AFE007B77012C00002C912100884082008C7FE3FB7838810090F6 -S31AFE007B8C4BFFF7E52C030000418200788121008888090000395C -S31AFE007BA12900012C00002C91210088408200608081008C2C0430 -S31AFE007BB600004182003880610090480008BD7C641B7941820006 -S31AFE007BCB148061008880A1008C38C000004BFFF6D98001008C59 -S31AFE007BE0812100887C0002147D29021491210088812100888828 -S31AFE007BF50900002C00002C4082001038090001900100884BFF9F -S31AFE007C0AFF5081210088880900002C0000004082003C3D20FED2 -S31AFE007C1F018809318C3D6000012C000000396B88B43949318C14 -S31AFE007C344182066C880A00008D2A0001980B00002C09000039A7 -S31AFE007C496B00014082FFEC480006503D20FE01880931D03D60E0 -S31AFE007C5E00012C000000396B88B4394931D041820634880A00EE -S31AFE007C73008D2A0001980B00002C090000396B00014082FFEC16 -S31AFE007C88480006183C8000017FA3EB78388488B44BFFFBAD4809 -S31AFE007C9D00063C381D00013BE10094900100947FE3FB783881D3 -S31AFE007CB200984BFFF6BD2C0300004182009081210094880900DB -S31AFE007CC700392900012C00002C91210094408200787FE3FB7894 -S31AFE007CDC3881009C4BFFF6912C03000041820064806100983C5E -S31AFE007CF180000180A1009C388488B438C000014BFFF3052C03DA -S31AFE007D060000408205D03D60FE01880B31D43D2000012C00000F -S31AFE007D1B00394988B4396B31D44182001C880B00008D2B0001BD -S31AFE007D30980A00002C090000394A00014082FFEC380000009862 -S31AFE007D450A0000480005903D20FE01880931D03D6000012C0086 -S31AFE007D5A0000396B88B4394931D04182053C880A00008D2A0060 -S31AFE007D6F01980B00002C090000396B00014082FFEC4800052063 -S31AFE007D843BC00001381D00013BE100A0900100A07FE3FB78389A -S31AFE007D998100A44BFFF5D52C030000418201F8812100A08809DA -S31AFE007DAE0000392900012C00002C912100A0408201E07FE3FBAF -S31AFE007DC378388100A84BFFF5A92C030000418201CC806100A0A6 -S31AFE007DD888030000386300012C00003A906100A0408201B42CD1 -S31AFE007DED1E000041820124800100A82C000000418200A8800136 -S31AFE007E0200A83BA000007C1D0040408000543941000881610093 -S31AFE007E17A0892B0000396B00017D204B782C00007D7D2AE9AE12 -S31AFE007E2C916100A040820018880B0000392B0001600000207CDD -S31AFE007E410AE9AE912100A03BBD0001281D007F41810010800125 -S31AFE007E5600A87C1D00404180FFB8808100A4386100087FA5EBC5 -S31AFE007E6B78480022797C03E80040820024812100A8800100A4E7 -S31AFE007E807D3D48502C0900007C00EA14900100A4912100A84019 -S31AFE007E9582FF6C800100A82C0000004082003C3D20FE018809A7 -S31AFE007EAA318C3D6000012C000000396B88B43949318C41820353 -S31AFE007EBFE4880A00008D2A0001980B00002C090000396B0001FF -S31AFE007ED44082FFEC480003C83D20FE01880931D43D6000012C19 -S31AFE007EE9000000396B88B4394931D4418203AC880A00008D2A5E -S31AFE007EFE0001980B00002C090000396B00014082FFEC480003F5 -S31AFE007F1390808100A480A100A838C000014BFFF3912C03000061 -S31AFE007F284182003C3D20FE018809318C3D6000012C0000003994 -S31AFE007F3D6B88B43949318C4182035C880A00008D2A0001980B36 -S31AFE007F5200002C090000396B00014082FFEC480003403D20FEA9 -S31AFE007F6701880931D43D6000012C000000396B88B4394931D439 -S31AFE007F7C41820324880A00008D2A0001980B00002C09000039A7 -S31AFE007F916B00014082FFEC480003083D20FE01880931D83D60D8 -S31AFE007FA600012C000000396B88B4394931D8418202EC880A00E7 -S31AFE007FBB008D2A0001980B00002C090000396B00014082FFECCB -S31AFE007FD0480002D0881D0000395D000168090053216900007D77 -S31AFE007FE52B491468000043216000007C0B01147C0B4B7939604F -S31AFE007FFA0000914100AC916100B03BE100AC418200287FE3FB3E -S31AFE00800F78388100B04BFFF35D812100AC880900002C00003B97 -S31AFE0080244082000C38090001900100AC7FE3FB78388100B44B69 -S31AFE008039FFF3392C0300004182000C806100B44800721D386001 -S31AFE00804E000348001EC93860000348001E59806100B02C0300CD -S31AFE008063004182004C3D2000008009367C2C0000004182001C52 -S31AFE0080788009367C7C0803A64E8000217C631B794082000890CB -S31AFE00808D6100B0800100B02C00000041820018380000099001BF -S31AFE0080A200B0386000094800033D48000238480015892C030055 -S31AFE0080B7004182001838000063981D00003D20000038000001EF -S31AFE0080CC900936A4881D000068090053216900007D2B491468C8 -S31AFE0080E1000073216000007C0B01147C0B4B794182002438602C -S31AFE0080F600004BFFF39D3D20000139291CE43D600000912B3648 -S31AFE00810BA0480071814800000C386000014BFFF37D386000033F -S31AFE00812048001DF93860000348001D893860FFFF480001B83D8B -S31AFE008135200000800936787C0803A64E800021386000014800DD -S31AFE00814A01A048001BB5480001883C800001387D0001388488DB -S31AFE00815FB438A0012C48000E11480001703C800001387D0001BB -S31AFE008174388488B438A0012C48000D8148000158381D00019098 -S31AFE0081890100B8386100B8388100BC4BFFF1DD2C030000418254 -S31AFE00819E007C812100B888090000392900012C00002C912100F4 -S31AFE0081B3B84082006488090000392900012C000043912100B808 -S31AFE0081C840820010806100BC480027354800000C806100BC4852 -S31AFE0081DD0027213D20FE018809318C3D6000012C000000396B29 -S31AFE0081F288B43949318C418200A8880A00008D2A0001980B00A1 -S31AFE008207002C090000396B00014082FFEC4800008C3D20FE01A7 -S31AFE00821C880931D03D6000012C000000396B88B4394931D04149 -S31AFE008231820070880A00008D2A0001980B00002C090000396B7C -S31AFE00824600014082FFEC48000054381D0001900100C038610095 -S31AFE00825BC0388100C44BFFF1112C030000408200443D20FE01F0 -S31AFE008270880931DC3D6000012C000000396B88B4394931DC41DD -S31AFE00828582001C880A00008D2A0001980B00002C090000396B7C -S31AFE00829A00014082FFEC38000000980B0000480000303C60FE30 -S31AFE0082AF013863318C4BFFEAF9806100C4480012414800001890 -S31AFE0082C43C8000017FA3EB78388488B438A0012C48001E753C4B -S31AFE0082D9600001386388B44BFFEACD38600000800100DC7C08DA -S31AFE0082EE03A683A100CC83C100D083E100D4382100D84E800093 -S31AFE008303209421FFE87C0802A693A1000C93C1001093E100144D -S31AFE0083189001001C3FA00001389D88B448001A1D387D88B44BF3 -S31AFE00832DFFEA818001001C7C0803A683A1000C83C1001083E11B -S31AFE0083420014382100184E8000209421FFF07C0802A693E1006B -S31AFE0083570C900100143D200000800936882C00000040800008C4 -S31AFE00836C4BFFFF993FE00001387F80B44BFFE86D387F80B44B36 -S31AFE008381FFF65D7C631B794182FFEC7C6318F854630FFE80013C -S31AFE00839600147C0803A683E1000C382100104E8000204E8000F8 -S31AFE0083AB209421FFF87C0802A69001000C4BFFEF8D48001849B5 -S31AFE0083C03860002B480010C58001000C7C0803A6382100084E5B -S31AFE0083D58000203D200000906936884E8000209421FFF87C08BD -S31AFE0083EA02A69001000C3D20FE01392931705460E73E7D490037 -S31AFE0083FFAE5463073E7D0918AE3D60000138000058386B88B462 -S31AFE008414980B88B4392000009943000199030002992300034B92 -S31AFE008429FFE9858001000C7C0803A6382100084E8000203D2067 -S31AFE00843E000138A00000392991043CC0000038E0FFFF3C800087 -S31AFE008453003D6000013D4000003D0000003800000190E639646C -S31AFE00846890AB90B4912A39689008369890A439604E800020946B -S31AFE00847D21FFF07C0802A693C1000893E1000C900100143D20CC -S31AFE0084920000800936987C7F1B782C0000007C9E237840820049 -S31AFE0084A7084BFFFF952C1F0012418100243D600000800B3968CA -S31AFE0084BC3D200001392991047C0900507C00F214280000804013 -S31AFE0084D181000C386000004800006C3CE00000800739647C1FDE -S31AFE0084E600004182004C3D000000800839607C1F0000418000B4 -S31AFE0084FB20395F00013D200001392990B4554B103A3800000089 -S31AFE0085107C09592E914839603D600000814B39683D2000013933 -S31AFE0085252990B457E0103A7D49012E93E739643D2000008069FD -S31AFE00853A39687C03F21490093968800100147C0803A683C100C2 -S31AFE00854F0883E1000C382100104E8000209421FFD87C0802A68C -S31AFE008564936100149381001893A1001C93C1002093E1002490DE -S31AFE00857901002C3D600000800B369C7C7D1B782C0000007C9EF0 -S31AFE00858E23787CBF2B7840820058380000013D200001392991B7 -S31AFE0085A384900B369C39400000380000087C0903A6390A0001A3 -S31AFE0085B8554BC00E5547103A2C0B00005560083C4080000C6CEE -S31AFE0085CD0004C168001DB77C0B03784200FFE87D0A4378280AF5 -S31AFE0085E200FF7C09392E4081FFC43D600000380000003D2000DF -S31AFE0085F7013B699184900B368C3F800000480000248921000877 -S31AFE00860C57E0463E7C004A785400103A7D7B002E57E9402E7D6D -S31AFE0086213F5A783BBD00012C1E00003BDEFFFF41820020386159 -S31AFE00863600087FA4EB7838A0000148001A45801C368C2C000093 -S31AFE00864B004182FFBC7FE3FB788001002C7C0803A683610014F1 -S31AFE0086608381001883A1001C83C1002083E10024382100284EEA -S31AFE0086758000209421FFD87C0802A693A1001C93C1002093E15C -S31AFE00868A00249001002C3D20000138000000980988B43BA98817 -S31AFE00869FB47C691B7890610008880900002C000043408200F4E7 -S31AFE0086B4880900012C000052408200E88BC900022C1E004340D0 -S31AFE0086C98200DC880900032C00003A408200D0380900043BE14D -S31AFE0086DE0008900100087FE3FB783881000C4BFFEC852C03005E -S31AFE0086F300418201388121000888090000392900012C00002C7C -S31AFE00870891210008408201207FE3FB78388100104BFFEC592C62 -S31AFE00871D0300004182010C8061000C8081001038A0FFFF4BFF52 -S31AFE008732FE2D3D20000083E9368C2C1F0000418200403D20FECF -S31AFE00874701880931D07FA3EB782C000000396931D04182001C53 -S31AFE00875C880B00008D2B0001980300002C09000038630001400C -S31AFE00877182FFEC3800000098030000480000B07C641B78387D8F -S31AFE008786000138A000204BFFEC6D3D2000019BC988B4386300A5 -S31AFE00879B017FFD19AE4800008C81210008880900007D2B4B7807 -S31AFE0087B02C00004C386900017C09037841820020418100102CB5 -S31AFE0087C50000434182003C4800004C2C0900504182001C480019 -S31AFE0087DA00403C800001388488B438A0012C4800095D48000096 -S31AFE0087EF403C800001388488B438A0012C48000A914800002C20 -S31AFE0088043C800001388488B438A00800480005FD480000183CE0 -S31AFE0088198000017D635B78388488B438A0012C48001911800122 -S31AFE00882E002C7C0803A683A1001C83C1002083E1002438210053 -S31AFE008843284E8000209421FFF87C0802A69001000C8803000006 -S31AFE0088582C000070408200183C800001388488B438A0012C488F -S31AFE00886D000709480000143C800001388488B438A0012C480084 -S31AFE00888218C18001000C7C0803A6382100084E8000203923019E -S31AFE0088971C7C0348404C800020800400003884000490030000E2 -S31AFE0088AC386300047C0348404180FFEC4E80002038000045985E -S31AFE0088C1030000392000309D230001380000329C0300013863AC -S31AFE0088D600014E8000203800004F980300003920004B9D230014 -S31AFE0088EB01386300014E8000209421FFE87C0802A693A1000CE1 -S31AFE00890093C1001093E100149001001C7C9E23797C7D1B783B48 -S31AFE008915E0000041820038887D00003BBD00014BFFE27937DEB6 -S31AFE00892AFFFF7FFF1B7857E920367C00002654001FFE7C000000 -S31AFE00893FD07D2900787FE000387C1F4B784082FFD07FE3FB78D6 -S31AFE0089548001001C7C0803A683A1000C83C1001083E10014380C -S31AFE0089692100184E8000209421FFE87C0802A69381000893A1B6 -S31AFE00897E000C93C1001093E100149001001C7C7D1B787C9C2374 -S31AFE00899378388000024BFFFF5D907C0000387D00028001001C93 -S31AFE0089A87C0803A68381000883A1000C83C1001083E100143849 -S31AFE0089BD2100184E8000209421FFE87C0802A69381000893A162 -S31AFE0089D2000C93C1001093E100149001001C7C7D1B787C9C2320 -S31AFE0089E778388000084BFFFF09907C0000387D00088001001C87 -S31AFE0089FC7C0803A68381000883A1000C83C1001083E1001438F5 -S31AFE008A112100184E8000203803FF9F280000054181001438030E -S31AFE008A26FFA990040000386000014E8000203803FFBF28000053 -S31AFE008A3B054181000C3803FFC94BFFFFE43863FFD05460063EBD -S31AFE008A50280000094081000C386000004E80002090640000385D -S31AFE008A656000014E8000209421FFE87C0802A693A1000C93C14D -S31AFE008A7A001093E100149001001C7C7D1B78887D00003BBD0015 -S31AFE008A8F014BFFFF897FA3EB788001001C7C0803A683A1000C7C -S31AFE008AA483C1001083E10014382100184E8000203D20FE0154DE -S31AFE008AB980E13E392932D07D6900AE5484073E7C0920AE9963A1 -S31AFE008ACE00009C030001386300014E8000209421FFE07C08024B -S31AFE008AE3A69381001093A1001493C1001893E1001C90010024B7 -S31AFE008AF87C7F1B787C9C23783BC000003BA10008480000188065 -S31AFE008B0D01000857DE20365400073E7FDE03783BFF0001887F08 -S31AFE008B2200007FA4EB784BFFFEF12C0300004082FFDC93DC0040 -S31AFE008B37007FE3FB78800100247C0803A68381001083A1001432 -S31AFE008B4C83C1001883E1001C382100204E8000209421FFE87CB5 -S31AFE008B610802A69381000893A1000C93C1001093E10014900172 -S31AFE008B76001C7C7F1B783B9F00107C1FE0407C9E237840800022 -S31AFE008B8B38887F00004BFFE00D8C1F00017C7D1B787C03037829 -S31AFE008BA04BFFDFFD57BD20363BFF00017FBD1B787C1FE0409BCC -S31AFE008BB5BE00003BDE00014180FFD07FE3FB788001001C7C0849 -S31AFE008BCA03A68381000883A1000C83C1001083E1001438210088 -S31AFE008BDF184E8000209421FFE87C0802A693A1000C93C100100B -S31AFE008BF493E100149001001C7C9D237857A4463E4BFFFEB157B0 -S31AFE008C09A4863E4BFFFEA957A4C63E4BFFFEA157A4063E4BFF88 -S31AFE008C1EFE998001001C7C0803A683A1000C83C1001083E100F4 -S31AFE008C3314382100184E8000209421FFE87C0802A693A1000CAD -S31AFE008C4893C1001093E100149001001C7C9E2378881E00003BE4 -S31AFE008C5DE000002C000000393E0001418200207FFDFB78880917 -S31AFE008C7200003BBD00012C000000392900014082FFF07FBFEB87 -S31AFE008C87782F9F00C97C0000265400EFFE7C0000D07C0900F819 -S31AFE008C9C7FE00038712900C87C1F4B7857E4063E7FFDFB784BAF -S31AFE008CB1FFFE052C1D00003BFFFFFF4081005C7FFDFB787FC4D8 -S31AFE008CC6F378896400007FAAEB78210B00007C085914696900C2 -S31AFE008CDB23210900007D2849147C004B783000FFFF7C00011037 -S31AFE008CF07C0900F87129002A7D6B00387D6B4B782C0A00009990 -S31AFE008D0563000038840001386300013BBDFFFF4181FFB48001AD -S31AFE008D1A001C7C0803A683A1000C83C1001083E10014382100A2 -S31AFE008D2F184E8000209421FFF07C0802A693C1000893E1000C79 -S31AFE008D44900100143BC300107C03F0407C9F237840800018889E -S31AFE008D599F00003BFF00014BFFFD557C03F0404180FFF08001AB -S31AFE008D6E00147C0803A683C1000883E1000C382100104E8000B8 -S31AFE008D8320392000047D2903A63800000098030000386300019C -S31AFE008D984200FFF87C80C670980300007C8986709D2300017C84 -S31AFE008DAD8046709C030001988300014E80002039630004386095 -S31AFE008DC20000394000037D405378892B00002C000000546040C0 -S31AFE008DD72E7C034B78396B0001394AFFFF4181FFE44E8000205A -S31AFE008DEC380000087C0903A688040000388400019803000038E4 -S31AFE008E016300014200FFF04E8000209421FFE87C0802A693C1B9 -S31AFE008E16001093E100149001001C3BC100087C9F23787FC3F30F -S31AFE008E2B7848001AED2C0300004182003038000051981F000005 -S31AFE008E40392000439D3F00017FC3F3784BFFFF717C641B783B8B -S31AFE008E55FF00017FE3FB784BFFFD894800000C7FE3FB784BFFEC -S31AFE008E6AFA557C7F1B7838000000981F00008001001C7C0803FF -S31AFE008E7FA683C1001083E10014382100184E8000209421FFC88D -S31AFE008E947C0802A693A1002C93C1003093E100349001003C3B05 -S31AFE008EA9A100207C641B787FA3EB784BFFFED17FA3EB783881A0 -S31AFE008EBE000848001B012C030000418200148001001038600000 -S31AFE008ED3012C00000040820008386000008001003C7C0803A60D -S31AFE008EE883A1002C83C1003083E10034382100384E8000209402 -S31AFE008EFD21FFE07C0802A693A1001493C1001893E1001C90015B -S31AFE008F1200247C7D1B787C9F2378388100084BFFFBBD7C1D186C -S31AFE008F270041820020806100084BFFFF612C03000041820010B9 -S31AFE008F3C7FE3FB784BFFF99D4800000C7FE3FB784BFFF9713852 -S31AFE008F5100000098030000800100247C0803A683A1001483C11E -S31AFE008F66001883E1001C382100204E8000209421FFD87C0802E1 -S31AFE008F7BA693A1001C93C1002093E100249001002C8923000072 -S31AFE008F903800FFFF2C0900677C9F2378900100083863000141CA -S31AFE008FA582008C418100102C09006341820024480000C02C0917 -S31AFE008FBA0070408200B8388100084BFFFAA9388100104BFFFBF8 -S31AFE008FCF91480000B0880300002C00002D4082002088030001AE -S31AFE008FE42C000031408200143D20000038000000900939904802 -S31AFE008FF90000103C800000388439904BFFFAD93D2000008069AB -S31AFE00900E39902C030000418200104BFFFE792C030000418200CB -S31AFE009023547FE3FB784BFFF8B5480000503FA00000389D398C03 -S31AFE0090384BFFFAA5809D398C386100104BFFFD41801D398C2C95 -S31AFE00904D00FFFF4182000C2C0000004082001038000002900174 -S31AFE00906200084800001C3800000190010008480000107FE3FB02 -S31AFE009077784BFFF8457C7F1B78800100082C00000041820028B3 -S31AFE00908C418100102C00FFFF4182008C4800007C2C000001414E -S31AFE0090A18200242C00000241820060480000683D20000139294F -S31AFE0090B61CE43D600000912B36A0480000603FA000013C80002E -S31AFE0090CB0138841CE4387D1E004BFFF7C1386100103880004752 -S31AFE0090E038BD1E00480019352C03000041820028381D1E003D04 -S31AFE0090F52000007FE3FB78900936A04BFFF7DD480000187FE31E -S31AFE00910AFB784BFFF7D14800000C7FE3FB784BFFF7A57C7F1BA2 -S31AFE00911F7838000000981F00008001002C7C0803A683A1001CB6 -S31AFE00913483C1002083E10024382100284E8000209421FFD07CC7 -S31AFE0091490802A693210014934100189361001C9381002093A131 -S31AFE00915E002493C1002893E1002C900100347C9F23787CBD2BD9 -S31AFE00917378388100084BFFF8F53881000C3F8000004BFFF7EDC1 -S31AFE009188389C397C4BFFF9D1380000513BBDFFE67F3FEA149877 -S31AFE00919D1F00003920004D9D3F00013BFF00017FFAFB787F432E -S31AFE0091B2D378388000004BFFF8FD7C7F1B787FFEFB78380000AC -S31AFE0091C730389C397C981E0000387E00014BFFFB617C7F1B7835 -S31AFE0091DC3B8000003F600000480000247FE3FB78389D39844B02 -S31AFE0091F1FFFB457C7F1B78389D39843B9C0001387B397C4BFF7C -S31AFE009206FBE97C1FC840408000408001000C7C1C0000408000E3 -S31AFE00921B34806100083C8000003FA000003884397C38BD39845F -S31AFE009230480017352C03000038000000900100084082FFA838F0 -S31AFE009245000031981E00007F43D3785784063E4BFFF861380022 -S31AFE00925A0000981F0000800100347C0803A683210014834100E6 -S31AFE00926F188361001C8381002083A1002483C1002883E1002C66 -S31AFE009284382100304E8000209421FFC07C0802A693A1003493BF -S31AFE009299C1003893E1003C90010044380000007C9F23789001BF -S31AFE0092AE001C900100109001001490010018388100204BFFF782 -S31AFE0092C3053BA100287FA4EB784BFFF8917FA3EB7838810008EA -S31AFE0092D8480016E92C030000418200E438000071981F000039C7 -S31AFE0092ED2000709D3F000180810020387F00014BFFF8E938813E -S31AFE00930200084BFFFA31800100207C7F1B787009000241820068 -S31AFE00931720388000024BFFF8C9388000024BFFF79188810013B0 -S31AFE00932C4BFFF7897C7F1B788001002070090004418200288047 -S31AFE0093410100142C0000004182001C7FE3FB78388000044BFF18 -S31AFE009356F891808100144BFFF8E17C7F1B788001002070090095 -S31AFE00936B0841820028800100182C0000004182001C7FE3FB787D -S31AFE009380388000084BFFF861808100184BFFF8B17C7F1B788057 -S31AFE00939501002070090010418200348001001C2C000000418292 -S31AFE0093AA00287FE3FB78388000104BFFF8318081001C4BFFF813 -S31AFE0093BF814800000C7FE3FB784BFFF4F57C7F1B7838000000F2 -S31AFE0093D4981F0000800100447C0803A683A1003483C100388380 -S31AFE0093E9E1003C382100404E8000209421FFD87C0802A693611B -S31AFE0093FE00149381001893A1001C93C1002093E1002490010029 -S31AFE0094132C3B8100087C7D1B787C9B23787CA42B787F83E378F2 -S31AFE0094284BFFF95D7F83E3787FA4EB787F65DB784800163D8056 -S31AFE00943D01002C7C0803A6836100148381001883A1001C83C124 -S31AFE009452002083E10024382100284E8000203D2000008169366D -S31AFE009467A05463103A7C63582E4E8000203D200000816936A0DB -S31AFE00947C5463103A7C83592E4E8000209421FFF87C0802A690FA -S31AFE00949101000C3D20000039293200816900185464063E806BDB -S31AFE0094A60000800B000C7C0803A64E8000218001000C7C0803E6 -S31AFE0094BBA6382100084E8000209421FFF87C0802A69001000C2E -S31AFE0094D03D2000003929320081690018806B0000800B00107C8E -S31AFE0094E50803A64E8000218001000C7C0803A6382100084E80E5 -S31AFE0094FA00209421FFF87C0802A69001000C3D200000392932D3 -S31AFE00950F00816900187C651B78806B0000800B0014388000008B -S31AFE0095247C0803A64E8000218001000C7C0803A6382100084EA9 -S31AFE0095398000209421FFE87C0802A693A1000C93C1001093E199 -S31AFE00954E00149001001C3FC00000817E39943D2000002C0B00E4 -S31AFE00956300380000003BBE3994900936A47C7F1B784182001815 -S31AFE0095787D635B7848000055801E39942C0000004082002C8184 -S31AFE00958D3F00003C007D82913D000460001008901F000093FEC1 -S31AFE0095A239943860000348000971386000034800090180010018 -S31AFE0095B71C7C0803A683A1000C83C1001083E1001438210018E5 -S31AFE0095CC4E8000209421FFF87C0802A69001000C3D2000008145 -S31AFE0095E16936A42C0B0000408200183D200000800939943949E8 -S31AFE0095F639947C0300004182000C3860000048000024800A00B3 -S31AFE00960B04916939949003000038600003480009013860000360 -S31AFE00962048000891386000018001000C7C0803A6382100084E4E -S31AFE0096358000203D200000800939943120FFFF7C6901104E80B6 -S31AFE00964A00209421FFF87C0802A69001000C2C03000041820080 -S31AFE00965F483D400000812A36A83929FFFF2C090000912A36A876 -S31AFE009674418100683D20000039293200816900183800000090F8 -S31AFE0096890A36A8806B0000800B0014388000057C0803A64E809E -S31AFE00969E00214800003C3D600000812B36A8392900012C09004F -S31AFE0096B301912B36A8408200243D20000039293200816900182A -S31AFE0096C838800004806B0000800B00147C0803A64E80002180A7 -S31AFE0096DD01000C7C0803A6382100084E8000209421FFF87C08BB -S31AFE0096F202A69001000C3D2000003929320081690018806B003C -S31AFE00970700800B00107C0803A64E8000218001000C7C0803A6D8 -S31AFE00971C382100084E8000209421FFC87C0802A692C100109248 -S31AFE009731E10014930100189321001C934100209361002493818E -S31AFE009746002893A1002C93C1003093E100349001003C2C040059 -S31AFE00975B0D418201B43D600000814B36AC3D200001392995844C -S31AFE0097707C8951AE2C04000A394A0001914B36AC3F40000041A0 -S31AFE00978582000C2C0A0064408201843D2000003929320083C91F -S31AFE00979A00187EE000A67EE0BB7839600000516004207C00011E -S31AFE0097AF243D20FE013AC932E4807E0000813E000C3880002463 -S31AFE0097C47D2803A63B6000003BE0004F4E800021807E000081CB -S31AFE0097D93E000C3880004F7D2803A64E800021801A36AC7C1BD6 -S31AFE0097EE0000408000703D2000013D60FE013B0995843B2B3243 -S31AFE009803E47D38D8AE807E00005520E13E7F9900AE817E000CCA -S31AFE0098187F84E3787D6803A65529073E7FB948AE3B7B00014E55 -S31AFE00982D800021807E0000813E000C7FA4EB787D2803A64E8016 -S31AFE0098420021801A36AC7F9FE214579F063E7C1B00007FBFEA63 -S31AFE0098571457BF063E4180FFA8807E0000813E000C388000237E -S31AFE00986C7D2803A64E800021807E0000813E000C57E0E13E7C0B -S31AFE0098819600AE7D2803A64E800021807E0000813E000C57E04D -S31AFE009896073E7C9600AE7D2803A64E800021807E0000813E00BA -S31AFE0098AB107D2803A64E8000215460063E2C00002B9861000807 -S31AFE0098C0418200383861000838800001480016552C0300004018 -S31AFE0098D5820014880100082C00002D4082FFC44BFFFED43D20FC -S31AFE0098EA00003929320038000001900900443D600000392000C5 -S31AFE0098FF00912B36AC7C0000A652E004207C0001248001003CDC -S31AFE0099147C0803A682C1001082E10014830100188321001C8364 -S31AFE009929410020836100248381002883A1002C83C1003083E168 -S31AFE00993E0034382100384E8000209421FFE87C0802A693A10061 -S31AFE0099530C93C1001093E100149001001C7CBF2B787FE0FB78A6 -S31AFE0099682C0000007C7D1B787C9E23783BFFFFFF4182002488D2 -S31AFE00997D9E00007FA3EB784BFFFDA17FE0FB782C0000003BDEAF -S31AFE00999200013BFFFFFF4082FFE48001001C7C0803A683A100F0 -S31AFE0099A70C83C1001083E10014382100184E8000209421FFE8D4 -S31AFE0099BC7C0802A693A1000C93C1001093E100149001001C7C11 -S31AFE0099D1BF2B787FE0FB782C0000007C7D1B787C9E23783BFFA2 -S31AFE0099E6FFFF418200247FA3EB784BFFFCFD7FE0FB782C0000BD -S31AFE0099FB00987E00003BDE00013BFFFFFF4082FFE48001001CA9 -S31AFE009A107C0803A683A1000C83C1001083E10014382100184E55 -S31AFE009A258000209421FF909081000C90A1001090C1001490E110 -S31AFE009A3A00189101001C91210020914100243860000038210094 -S31AFE009A4F704E8000209421FFF87C0802A69001000C3860000093 -S31AFE009A644BFFFBE93D600001380000207C0903A63D20000081B9 -S31AFE009A794939A0396B1CE43D000000392000007C09502E7C09F0 -S31AFE009A8E592E392900044200FFF47D6A5B783D20000081693963 -S31AFE009AA3A0800B0094900A0100812B0090912A0104800B008049 -S31AFE009AB8900A0108812B0088912A010C800B008C900A011081B3 -S31AFE009ACD2B0084912A01143D4000003D600000800B36A43D2025 -S31AFE009AE200012C00000039291CE4912A36A04182001838000038 -S31AFE009AF700900836A4386000404BFFF9614BFFFACD386000407F -S31AFE009B0C4BFFF9554BFFFAC13D200000906939A48001000C7C67 -S31AFE009B210803A6382100084E8000209421FFF87C0802A69001C2 -S31AFE009B36000C380000207C0903A63D200000814939A03D6000E7 -S31AFE009B4B01396B1CE4392000007C09582E7C09512E392900048E -S31AFE009B604200FFF47D6A5B783D200000816939A0800A010090C2 -S31AFE009B750B0094812A0104912B0090800A0108900B0080812AE3 -S31AFE009B8A010C912B0088800A0110900B008C812A0114912B0033 -S31AFE009B9F84386000014BFFFAA98001000C7C0803A63821000888 -S31AFE009BB44E800020386000004E8000203D20FE0139299BB83DD6 -S31AFE009BC9400000912A367C3D60FE01396B9D003D2000009169A2 -S31AFE009BDE36783D40FE013D600000394A9A54914B36843D20FE45 -S31AFE009BF30139299B2C3D600000912B36804E8000209421FFF08E -S31AFE009C087C0802A693C1000893E1000C900100143D20000080B9 -S31AFE009C1D0936B02C000000408200C438000001900936B048008D -S31AFE009C3257513D2000003BC93200813E00343860FFFF7D2803AD -S31AFE009C47A64E800021813E00347C7F1B783860FFFD7D2803A60C -S31AFE009C5C4E800021815E00143D20FE0139299948912A00043D72 -S31AFE009C7160FE016FE0FFFF396B99B86800FFFE3D20FE01916A7D -S31AFE009C860008392997243100FFFF7CE80110912A000C3D60FE9A -S31AFE009C9B01301FFFFF7D00F910396B96EC3D20FE017CE0403985 -S31AFE009CB0916A001039299A28912A001441820014813E00347F54 -S31AFE009CC5E3FB787D2803A64E800021801E0030386000007C0809 -S31AFE009CDA03A64E800021386000044BFFCE01800100147C080308 -S31AFE009CEFA683C1000883E1000C382100104E8000209421FFF8F7 -S31AFE009D047C0802A69001000C3D20000039293200800900402C97 -S31AFE009D190000004182000C7C0803A64E8000218001000C7C0835 -S31AFE009D2E03A6382100084E8000207FE000084E8000209421FF1B -S31AFE009D43D87C0802A6936100149381001893A1001C93C100200B -S31AFE009D5893E100249001002C7C9D23787C7C1B7838000054983A -S31AFE009D6D1D00007F8326704BFFCDD99C7D00017F83E3784BFF77 -S31AFE009D82CDCD7FBFEB789C7F0001380000749C1F0001392000B0 -S31AFE009D97689D3F0001380000729C1F0001392000659D3F00016D -S31AFE009DAC380000619C1F0001392000643BA0003A9D3F00019FFB -S31AFE009DC1BF000148000D0D906100083BFF00017FE4FB783861C4 -S31AFE009DD6000838A0000438C000004BFFD2257C7F1B783B80000E -S31AFE009DEB3B9B9F0000386000044BFFCD599C7F000138600040EA -S31AFE009E004BFFCD4D9C7F00019FBF0001386000404BFFF6513BC6 -S31AFE009E1561000C9061000C3BFF00017FE4FB787F63DB7838A0AC -S31AFE009E2A000438C000004BFFD1D57C7F1B789B9F0000386000D3 -S31AFE009E3F004BFFCD0D9C7F0001386000014BFFCD019C7F0001FD -S31AFE009E549FBF0001386000014BFFF6059061000C3BFF00017F01 -S31AFE009E69E4FB787F63DB7838A0000438C000004BFFD18D7C7FDD -S31AFE009E7E1B7838000000981F00019B9F00008001002C7C0803DA -S31AFE009E93A6836100148381001883A1001C83C1002083E10024D0 -S31AFE009EA8382100284E8000202C030001418200202803000141B2 -S31AFE009EBD8000502C030002418200242C03000341820030480037 -S31AFE009ED2003C3C0002004C00012C7C108BA64C00012C48000006 -S31AFE009EE7283C0004004C00012C7C108BA64C00012C48000014EF -S31AFE009EFC3C000C004C00012C7C108BA64C00012C7C708AA654E6 -S31AFE009F11630FFE4E8000202C03000141820020280300014180D9 -S31AFE009F2600682C030002418200202C0300034182002848000041 -S31AFE009F3B543C0002007C0004AC7C188BA6480000443D6004005D -S31AFE009F507C0004AC7D788BA648000034380000807C0903A6390B -S31AFE009F65200000612010003D600E007C0004AC7D398BA67D787F -S31AFE009F7A8BA67C198BA67D788BA6392900104200FFE07C788AA0 -S31AFE009F8FA654630FFE4E8000203D60000038000001900B368C2E -S31AFE009FA43D2000008009399C3D60FE012C000000396BA0743D2C -S31AFE009FB9200000916936B4418200A83D400000800A399C28001C -S31AFE009FCE00034081003070800003408200287060000340820014 -S31AFE009FE320800300003863000490040000812A399C388400044F -S31AFE009FF83929FFFC4800005C3D600000800B399C2800000140E9 -S31AFE00A00D810034708000014082002C7060000140820024A0034C -S31AFE00A022000038630002B0040000812B399C388400023929FF34 -S31AFE00A037FE912B399C4800002088030000386300019804000056 -S31AFE00A04C812A399C388400013929FFFF912A399C800A399C2C43 -S31AFE00A0610000004082FF643D200000380000009009368C3D2074 -S31AFE00A076000038000000900936B44E8000209421FFE87C080206 -S31AFE00A08BA69381000893A1000C93C1001093E100149001001C21 -S31AFE00A0A07C601B787CBC2B787C8323783FA000007C0403789356 -S31AFE00A0B59D399C4BFFFEE1807D399C7C63E0508001001C7C08F5 -S31AFE00A0CA03A68381000883A1000C83C1001083E1001438210073 -S31AFE00A0DF184E8000209421FFE87C0802A69381000893A1000C3E -S31AFE00A0F493C1001093E100149001001C7CBC2B783FA00000936D -S31AFE00A1099D399C4BFFFE8D807D399C7C63E0508001001C7C08F4 -S31AFE00A11E03A68381000883A1000C83C1001083E100143821001E -S31AFE00A133184E800020386000004E800020386000004E80002001 -S31AFE00A148386000004E8000209421FFF07C0802A693C1000893B9 -S31AFE00A15DE1000C900100143D200000800939AC2C00000041829D -S31AFE00A17200603FE000003BC000007D4000A67D40537839200016 -S31AFE00A18700512004207C000124817F39AC800B0014808B0018E2 -S31AFE00A19C901F39AC93CB00187C0000A6514004207C00012481A7 -S31AFE00A1B12B000C80AB0010806B00007D2803A64E800021801F5C -S31AFE00A1C639AC2C0000004082FFB0800100147C0803A683C100F8 -S31AFE00A1DB0883E1000C382100104E8000209421FFF87C0802A6C4 -S31AFE00A1F09001000C4BFFFF5D8001000C7C0803A6382100084EAA -S31AFE00A20580002090690000380000009089000490A90010900970 -S31AFE00A21A00189128000090C9000890E9000C900900144E8000F9 -S31AFE00A22F20812300002C090000418200F8810300043809FFFF9B -S31AFE00A24428000039418100E83D60FE01396B32F85400103A7D71 -S31AFE00A2594B002E3D20FE01392932F87D4A4A147D4903A64E8029 -S31AFE00A26E04203D20FF0061290200A16900007C0006AC556B06CD -S31AFE00A2833E38000000600080007C0046307D600378540B043E81 -S31AFE00A298B16900007C0006AC480000903D20FF0061290240A1C4 -S31AFE00A2AD6900007C0006AC556B063E38000000600080007C0069 -S31AFE00A2C246307D600378540B043EB16900007C0006AC48000084 -S31AFE00A2D75C3D20FF0061290220A16900007C0006AC556B063ECE -S31AFE00A2EC38000000600080007C0046307D600378540B043EB1A5 -S31AFE00A3016900007C0006AC480000283D20FF0061290940800984 -S31AFE00A31600007C0006AC540004DE550B68247C005B78900900F6 -S31AFE00A32B007C0006AC800300003D200000394933585408103A58 -S31AFE00A3407C0A402E3D20FE0039295DFC7C004800418200187CDF -S31AFE00A3550A402E3D20FE013929AF987C0048004C82002080033D -S31AFE00A36A00083D6000007C0A412E81430010396B34443D2000F3 -S31AFE00A37F007D4B412E392935307C69412E4E8000207C631B7912 -S31AFE00A3944D8200203803FFFF280000397C0803784D8100203DFD -S31AFE00A3A960FE01396B33E05500103A7D4B002E3D20FE01392932 -S31AFE00A3BE33E07D4A4A147D4903A64E8004203D20FF0061290007 -S31AFE00A3D314816900007C0006AC3C0080007C0044307D6B007839 -S31AFE00A3E8916900007C0006AC4E8000203D20FF0061290200A0BE -S31AFE00A3FD0900007C0006AC7000FFF75400043EB00900007C00DF -S31AFE00A41206AC4E8000203D20FF0061290200A00900007C00067E -S31AFE00A427AC7000FFFB5400043EB00900007C0006AC4E8000209B -S31AFE00A43C3D20FF0061290240A00900007C0006AC7000FFFB544A -S31AFE00A45100043EB00900007C0006AC4E8000203D20FF006129F5 -S31AFE00A4660220A00900007C0006AC7000FFF75400043EB009002F -S31AFE00A47B007C0006AC4E8000203D20FF0061290220A0090000FB -S31AFE00A4907C0006AC7000FFFB5400043EB00900007C0006AC4E50 -S31AFE00A4A58000203D20FF0061290940800900007C0006AC5400C4 -S31AFE00A4BA066E900900007C0006AC4E8000203D20FF0061290971 -S31AFE00A4CF48816900007C0006AC3943FFE53C0080007C005430F8 -S31AFE00A4E47D6B0078916900007C0006AC4E8000207C631B794D29 -S31AFE00A4F98200203803FFFF280000397C0803784D8100203D6084 -S31AFE00A50EFE01396B34C85500103A7D4B002E3D20FE013929340E -S31AFE00A523C87D4A4A147D4903A64E8004203D20FF0061290014D7 -S31AFE00A538816900007C0006AC3C0080007C0044307D6B03789152 -S31AFE00A54D6900007C0006AC4E8000203D20FF0061290200A009DF -S31AFE00A56200007C0006AC60000008B00900007C0006AC4E800095 -S31AFE00A577203D20FF0061290200A00900007C0006AC6000000488 -S31AFE00A58CB00900007C0006AC4E8000203D20FF0061290240A019 -S31AFE00A5A10900007C0006AC60000004B00900007C0006AC4E8051 -S31AFE00A5B600203D20FF0061290220A00900007C0006AC6000002D -S31AFE00A5CB08B00900007C0006AC4E8000203D20FF006129022092 -S31AFE00A5E0A00900007C0006AC60000004B00900007C0006AC4EF2 -S31AFE00A5F58000203D20FF0061290940800900007C0006AC600067 -S31AFE00A60A0080900900007C0006AC4E8000203D20FF0061290913 -S31AFE00A61F48816900007C0006AC3943FFE53C0080007C005430A6 -S31AFE00A6347D6B0378916900007C0006AC4E8000207C631B794DD4 -S31AFE00A6498200203803FFFF280000397C0803784D8100203D6032 -S31AFE00A65EFE01396B35B05500103A7D4B002E3D20FE01392935D3 -S31AFE00A673B07D4A4A147D4903A64E8004203D20FF0061290010A2 -S31AFE00A688816900007C0006AC3C0080007C0044307D6B03789101 -S31AFE00A69D6900007C0006AC4E8000203D20FF0061290200A0098E -S31AFE00A6B200007C0006AC60000080B00900007C0006AC4E8000CC -S31AFE00A6C7203D20FF0061290200A00900007C0006AC60000040FB -S31AFE00A6DCB00900007C0006AC4E8000203D20FF0061290240A0C8 -S31AFE00A6F10900007C0006AC60000080B00900007C0006AC4E8084 -S31AFE00A70600203D20FF0061290220A00900007C0006AC600000DB -S31AFE00A71B80B00900007C0006AC4E8000203D20FF0061290220C8 -S31AFE00A730A00900007C0006AC60000040B00900007C0006AC4E64 -S31AFE00A7458000203D20FF006129094C816900007C0006AC39438C -S31AFE00A75AFFE53C0080007C0054307D6B0378916900007C000667 -S31AFE00A76FAC4E8000207C8723787C631B794D8200203803FFFFFE -S31AFE00A784280000397C0803784D8100203D60FE01396B3698550B -S31AFE00A79900103A7D4B002E3D20FE01392936987D4A4A147D49F0 -S31AFE00A7AE03A64E8004203C0080007C0044303D60FF00616B00E3 -S31AFE00A7C318808B00007C0006AC7C8400787CEAFE707D493A7868 -S31AFE00A7D87D2950507D29FE707C8003787C0048787C8948387D59 -S31AFE00A7ED240378908B00007C0006AC4E8000207C8823787C63FF -S31AFE00A8021B794D8200203803FFFF280000394D8100203D60FE97 -S31AFE00A81701396B37805400103A7D4B002E3D20FE0139293780C3 -S31AFE00A82C7D4A4A147D4903A64E8004203D20FF0061290200A005 -S31AFE00A8418900007C0006AC5484063E38000000600080007C0097 -S31AFE00A85646307C8003785404043EB08900007C0006AC4E80002D -S31AFE00A86B203D20FF0061290240A08900007C0006AC5484063E19 -S31AFE00A88038000000600080007C0046307C8003785404043EB0F4 -S31AFE00A8958900007C0006AC4E8000203D20FF0061290220A089D4 -S31AFE00A8AA00007C0006AC5484063E38000000600080007C004671 -S31AFE00A8BF307C8003785404043EB08900007C0006AC4E800020EA -S31AFE00A8D43D20FF0061290940800900007C0006AC540004DE55FA -S31AFE00A8E90B68247C005B78900900007C0006AC4E800020386023 -S31AFE00A8FE00014E800020386000014E8000203D2000009069393C -S31AFE00A913B44E8000209421FFF87C0802A69001000C3D200000B7 -S31AFE00A9283D600001814939B4906B95E8814A0000388B95E82C12 -S31AFE00A93D0A00003860000041820010386000027D4803A64E80B6 -S31AFE00A95200218001000C7C0803A6382100084E8000209421FF0E -S31AFE00A967F87C0802A69001000C3D2000013D600000814B39B462 -S31AFE00A97C906995E8390995E89088000490A80008814A00002C3A -S31AFE00A9910A00004082000C38600000480000147D04437838600D -S31AFE00A9A600037D4803A64E8000218001000C7C0803A638210025 -S31AFE00A9BB084E8000209421FFF87C0802A69001000C3D200001BA -S31AFE00A9D03D600000814B39B4906995E8390995E8908800048146 -S31AFE00A9E54A00002C0A00004082000C38600000480000147D0496 -S31AFE00A9FA4378386000047D4803A64E8000218001000C7C08037C -S31AFE00AA0FA6382100084E8000209421FFF87C0802A69001000CC4 -S31AFE00AA243D2000013D600000814B39B4906995E8390995E890A0 -S31AFE00AA3988000490A80008814A00002C0A00004082000C3860D1 -S31AFE00AA4E0000480000147D044378386000057D4803A64E80007E -S31AFE00AA63218001000C7C0803A6382100084E8000209421FFF804 -S31AFE00AA787C0802A69001000C3D2000013D600000814B39B490B8 -S31AFE00AA8D6995E8390995E89088000490A80008814A00002C0AAE -S31AFE00AAA200004082000C38600000480000147D04437838600005 -S31AFE00AAB7077D4803A64E8000218001000C7C0803A63821000807 -S31AFE00AACC4E8000209421FFE87C0802A693E100149001001C3B4B -S31AFE00AAE1E100087FE3FB784BFFFE312C0300004082000C386090 -S31AFE00AAF6000048000008A07F00068001001C7C0803A683E100A4 -S31AFE00AB0B14382100184E8000209421FFF87C0802A69001000C49 -S31AFE00AB204BFFB3C18001000C7C0803A6382100084E8000203C19 -S31AFE00AB3500FE00600001007C0903A64E8004209421FFF87C0858 -S31AFE00AB4A02A69001000C4BFFFFE5386000008001000C7C0803D3 -S31AFE00AB5FA6382100084E800020386000004E8000209421FFE8C6 -S31AFE00AB747C0802A693A1000C93C1001093E100149001001C7C47 -S31AFE00AB897F1B78386000003BA00001380000002C1FFFFE4182EA -S31AFE00AB9E0040418100102C1FFFFD4182004C480000502C1FFF54 -S31AFE00ABB3FF408200483D200000812936B82C0900003BA9FFFF74 -S31AFE00ABC84181003C7D3D4B78408200343BA0FFFD4800002C3D7B -S31AFE00ABDD200000392932003D6000009069001893EB36B8480049 -S31AFE00ABF200143BE00000480000083BFF0001380000012C00002B -S31AFE00AC0700418200803D2000003BC93200813E00182C09000052 -S31AFE00AC1C418200188069000080090014388000047C0803A64E87 -S31AFE00AC318000213D200001392995F457E028347C004A143D2056 -S31AFE00AC4600002C030000901E001893E936B8813E0018418200FC -S31AFE00AC5B1C8069000080090014388000057C0803A64E80002165 -S31AFE00AC70480000188069000080090014388000047C0803A64EAE -S31AFE00AC858000217FA3EB788001001C7C0803A683A1000C83C152 -S31AFE00AC9A001083E10014382100184E8000203940000138000008 -S31AFE00ACAF002C03FFFE41820040418100102C03FFFD4182004C51 -S31AFE00ACC4480000502C03FFFF408200483D200000812936BC2C83 -S31AFE00ACD90900003949FFFF4181003C7D2A4B7840820034394002 -S31AFE00ACEEFFFD4800002C3D200000392932003D600000900900B6 -S31AFE00AD0314906B36BC4800001438600000480000083863000156 -S31AFE00AD18380000012C000000418200283D200001392995F45435 -S31AFE00AD2D6028343D6000007C004A14396B32003D200000900B0C -S31AFE00AD420014906936BC7D4353784E8000204E8000204E8000C4 -S31AFE00AD57204E8000209421FFE87C0802A693E100149001001CD8 -S31AFE00AD6C3D200000392932008169001838000000900100088189 -S31AFE00AD812B0000800B00187C651B787C8623787D234B783881BE -S31AFE00AD9600087C0803A64E800021800100087C7F1B782C00003D -S31AFE00ADAB00418200103D200000806939B8480001997FE3FB78CE -S31AFE00ADC08001001C7C0803A683E10014382100184E8000209445 -S31AFE00ADD521FFE87C0802A693A1000C93C1001093E10014900174 -S31AFE00ADEA001C380000407C0903A63D2000003D60FE0139293201 -S31AFE00ADFF00396BAB68394000007D69512E394A00044200FFF8E6 -S31AFE00AE143D2000013D60FE01392995F4396BAB683900000055FB -S31AFE00AE290A283438080001390000087D0903A67D69512E394A11 -S31AFE00AE3E00044200FFF87C0803782C0800024081FFDC3FA0000E -S31AFE00AE530038000013901D32003D6000003BBD3200396B3358C6 -S31AFE00AE68917D00043D200000392930003D60FE01913D00083925 -S31AFE00AE7D6BAB34917D00403D20FE013929AB443D60FE01913D0D -S31AFE00AE920010396BAB14917D00483D20FE013929AB703D60FE6A -S31AFE00AEA701913D0030396BACA83D40FE01917D0034394AAD505D -S31AFE00AEBC3D20FE01915D00203929AD54913D001C3860FFFE4BE6 -S31AFE00AED1FFFCA13860FFFE4BFFFDD138000000901D0024901D69 -S31AFE00AEE60028901D004C901D0044387D003C4BFFFA193D20FE98 -S31AFE00AEFB013929953C913D008C8001001C7C0803A683A1000CB6 -S31AFE00AF1083C1001083E10014382100184E8000207C8423794120 -S31AFE00AF258200243884FFFF7C0320AE2C0000034082000C3860D1 -S31AFE00AF3A00014E8000202C0400004082FFE4386000004E8000D4 -S31AFE00AF4F209421FFF87C0802A69001000C7C631B793D20FE0185 -S31AFE00AF643809AF8841820008800300943D200000392932008108 -S31AFE00AF7929008C7C0303787D2803A64E8000218001000C7C08C2 -S31AFE00AF8E03A6382100084E8000209421FFF07C0802A693C1008E -S31AFE00AFA30893E1000C900100143D200000800932007C7F1B78C2 -S31AFE00AFB82C000014396932007C9E23783860FFFF4082001C81C2 -S31AFE00AFCD2B00183880000680690000800900147C0803A64E80E9 -S31AFE00AFE200217C1F18004082001C7FE3FB787FC4F3784BFFFDDA -S31AFE00AFF7697C601B797C030378408200287FE3FB787FC4F37801 -S31AFE00B00C4BFFADED7C601B787C09FE707D2302787C6348507CD8 -S31AFE00B02163FE707C031838800100147C0803A683C1000883E104 -S31AFE00B036000C382100104E800020280500037C691B7840810035 -S31AFE00B04B107C801B78700B0003418200302C05000038A5FFFFD0 -S31AFE00B0604D820020880400002C05000098090000388400013994 -S31AFE00B07529000138A5FFFF4082FFE84E8000202805000F7C6B03 -S31AFE00B08A1B78408100388004000038A5FFF0900B00008524008D -S31AFE00B09F042805000F952B000484040004940B000485240004B8 -S31AFE00B0B4952B000438840004396B00044181FFD0280500034056 -S31AFE00B0C98100208004000038A5FFFC28050003900B00003884EA -S31AFE00B0DE0004396B00044181FFE82C0500007D695B7838A5FF3E -S31AFE00B0F3FF4D820020880400002C05000098090000388400013B -S31AFE00B1083929000138A5FFFF4082FFE84E800020280500037CAD -S31AFE00B11D691B784081000C70600003418200282C05000038A584 -S31AFE00B132FFFF4D8200202C050000988900003929000138A5FF86 -S31AFE00B147FF4082FFF04E8000205484063E5480402E7C002378DC -S31AFE00B15C5409801E7C004B787C6B1B782805000F408100249075 -S31AFE00B1710B0000940B000438A5FFF0940B00042805000F940BCD -S31AFE00B1860004396B00044181FFE4280500034081001838A5FF7A -S31AFE00B19BFC28050003900B0000396B00044181FFF02C0500004A -S31AFE00B1B07D695B784D8200207CA903A69889000039290001424A -S31AFE00B1C500FFF84E8000209421FFA87C631B79394100087D4777 -S31AFE00B1DA537839000000408200143800003098010008394100FF -S31AFE00B1EF09480000247C032B967D2029D67D2918507D6648AE0F -S31AFE00B2047C030379996A0000394A00014082FFE47C0A3800410B -S31AFE00B2198200287D0343787CE93B788C0AFFFF386300017C0A69 -S31AFE00B22E480098040000388400014082FFEC7C681B783800000A -S31AFE00B24300980400007D034378382100584E8000209421FF9830 -S31AFE00B2587C0802A67D8000269241003092610034928100389287 -S31AFE00B26DA1003C92C1004092E10044930100489321004C9341F1 -S31AFE00B2820050936100549381005893A1005C93C1006093E100F7 -S31AFE00B297649001006C9181002C7C9923788BB900003AE10008E8 -S31AFE00B2AC2C1D00007EF2BB787C7B1B787CB82B783BC000003A07 -S31AFE00B2C1A000003B390001418204802C1D00254082043C8BB964 -S31AFE00B2D600003B3900012C1D002D3AC000003BE000004082009D -S31AFE00B2EB108BB900003B3900013AC000012C1D00304082001437 -S31AFE00B3008BB900003B8000013B390001480000083B800000387C -S31AFE00B3151DFFD0280000094181003C7FA3EB787F24CB787FE931 -S31AFE00B32AFB781D29000A3929FFD07D291A14886400003884009A -S31AFE00B33F013803FFD0280000094081FFE47D3F4B787C992378E6 -S31AFE00B3547C7D1B782C1D002E4082003C8BB900003B39000138EE -S31AFE00B3691DFFD0280000093B9C0001418100247F24CB7888641E -S31AFE00B37E0000388400013803FFD0280000094081FFF07C7D1BFA -S31AFE00B393787C9923782C1D006C3A8000004082000C8BB90000F8 -S31AFE00B3A83B390001381DFFA8280000203A790001418101F83D27 -S31AFE00B3BD60FE01396B38A05400103A7D4B002E3D20FE0139294A -S31AFE00B3D238A07D4A4A147D4903A64E800420386000307F680352 -S31AFE00B3E7A63B8000013BE000084E800021386000787F6803A639 -S31AFE00B3FC4E800021897800005569063E38090001280000084193 -S31AFE00B41181001C801800085529103A396B00017C604A1499782D -S31AFE00B426000048000030280900074181001C807800043800004B -S31AFE00B43B083923000498180000913800044800001080780004BF -S31AFE00B45038030004901800042C1D00648063000041820028413C -S31AFE00B4658100102C1D00584182004C480000602C1D0070418269 -S31AFE00B47A00342C1D00784182002C4800004C2C03000040800052 -S31AFE00B48F0C3A80002D7C6300D03CC0FE0138C6386838810008A8 -S31AFE00B4A438A0000A480000203CC0FE0138C638744800000C3C10 -S31AFE00B4B9C0FE0138C638883881000838A000104BFFFD057C7517 -S31AFE00B4CE1B787E579378480000EC897800005569063E3809007A -S31AFE00B4E301280000084181001C801800085529103A396B000134 -S31AFE00B4F87C604A149978000048000030280900074181001C80E2 -S31AFE00B50D78000438000008392300049818000091380004480044 -S31AFE00B522001080780004380300049018000482E300007EE3BB98 -S31AFE00B53778480003C97C751B7848000080897800005569063E20 -S31AFE00B54C38090001280000084181001C801800085529103A39F5 -S31AFE00B5616B00017D404A149978000048000030280900074181C7 -S31AFE00B576001C8158000438000008392A000498180000913800A3 -S31AFE00B58B044800001081580004380A000490180004886A000387 -S31AFE00B5A07F6803A63BDE00014E8000214800018C3860003F7FCE -S31AFE00B5B56803A63BDE00014E8000217F55F8503134FFFF7D293E -S31AFE00B5CA4910381AFFFF7C0048782F9C00007F4948387D3A03B6 -S31AFE00B5DF782C140000419E00243BA00030418200207E83A3788E -S31AFE00B5F47F6803A63BDE00013A8000004E800021480000083B60 -S31AFE00B609A000202C1400002E1600003AD5FFFF7F8000264092E0 -S31AFE00B61E003C7F40D3782C0000003B5AFFFF4081002C7F5FD370 -S31AFE00B633787FA3EB787F6803A63BDE00014E8000217FE0FB7896 -S31AFE00B6482C0000003BFFFFFF4181FFE47FFAFB787F880120418B -S31AFE00B65D8200147E83A3787F6803A63BDE00014E8000217EA06B -S31AFE00B672AB782C0000007ED5B378408100547EBDAB787EFCBB4A -S31AFE00B687788BFC00007F6803A67FE3FB783B9C00013BDE000154 -S31AFE00B69C4E8000212C1F000A408200143860000D7F6803A63B0B -S31AFE00B6B1DE00014E8000217FA0EB782C0000003BBDFFFF41814C -S31AFE00B6C6FFC47F97E3787FB5EB78419200687F40D3782C00002F -S31AFE00B6DB003B5AFFFF408100587F5FD378386000207F6803A639 -S31AFE00B6F03BDE00014E8000217FE0FB782C0000003BFFFFFF41C1 -S31AFE00B70581FFE4480000307FA3EB787F6803A63BDE00013A796D -S31AFE00B71A00014E8000212C1D000A408200143860000D7F68036E -S31AFE00B72FA63BDE00014E8000218BB900007E799B782C1D0000BB -S31AFE00B7444082FB887FC3F3788001006C8181002C7C0803A68230 -S31AFE00B759410030826100348281003882A1003C82C1004082E1CF -S31AFE00B76E0044830100488321004C834100508361005483810072 -S31AFE00B7835883A1005C83C1006083E100647D808120382100680A -S31AFE00B7984E8000203D200000816939BC38000000986B000039FA -S31AFE00B7AD6B0001916939BC980B00004E8000209421FF707C08EF -S31AFE00B7C202A693A1008493C1008893E1008C900100943D600070 -S31AFE00B7D70090A10010906B39BC38A100083BA100983800000299 -S31AFE00B7EC396000003C60FE0190A100789081000C90C100149055 -S31AFE00B801E100189101001C9121002091410024980100709961BC -S31AFE00B816007193A100743863B79C38A100704BFFFA31800100D3 -S31AFE00B82B947C0803A683A1008483C1008883E1008C38210090F6 -S31AFE00B8404E8000209421FF707C0802A693A1008493C10088938A -S31AFE00B855E1008C9001009490A100109081000C7C641B78906186 -S31AFE00B86A000838A100083BA1009838000001396000003C60FEFC -S31AFE00B87F0190A1007890C1001490E100189101001C9121002098 -S31AFE00B89491410024980100709961007193A100743863BAF83804 -S31AFE00B8A9A100704BFFF9A9800100947C0803A683A1008483C15B -S31AFE00B8BE008883E1008C382100904E8000209421FFF87C0802F0 -S31AFE00B8D3A69001000C7C601B787C8523783C60FE013863BAF826 -S31AFE00B8E87C0403784BFFF9698001000C7C0803A6382100084E37 -S31AFE00B8FD80002088030000392000004800000C8803000039296D -S31AFE00B91200012C000000386300014082FFF07D234B784E800071 -S31AFE00B927207C691B78480000102C030000386000004D82002061 -S31AFE00B93C8869000088040000388400017C030000392900014195 -S31AFE00B95182FFE07C6018504E800020880400007C691B784800FE -S31AFE00B96600109803000088040000386300012C0000003884000D -S31AFE00B97B014082FFEC38000000980300007D234B784E800020E1 -S31AFE00B9907C6B1B78480000102C030000386000004D820020888E -S31AFE00B9A56B0000396B00013803FFBF280000194181000C380336 -S31AFE00B9BA00205403063E89240000388400013809FFBF28000028 -S31AFE00B9CF194181000C380900205409063E7D204B787C03000097 -S31AFE00B9E44182FFB47C6018504E8000207CA02B797C691B787CEE -S31AFE00B9F90903A640820014386000004E8000207C6018504E8015 -S31AFE00BA0E00208869000088040000388400017C030000392900E4 -S31AFE00BA23014082FFE42C030000418200084200FFE038600000B1 -S31AFE00BA384E8000207CA02B797C6B1B787C0903A640820018388D -S31AFE00BA4D6000004E8000207C6018504E80002042400050886B9B -S31AFE00BA620000396B00013803FFBF280000194181000C380300E3 -S31AFE00BA77205403063E89240000388400013809FFBF2800001951 -S31AFE00BA8C4181000C380900205409063E7D204B787C03000040B2 -S31AFE00BAA182FFB42C0300004082FFB4386000004E8000204800E5 -S31AFE00BAB6002C8923000088040000388400017C09000038630036 -S31AFE00BACB01418200148803FFFF8864FFFF7C6300504E800020FA -S31AFE00BAE07CA02B782C00000038A5FFFF4082FFCC386000004E14 -S31AFE00BAF58000209421FFE87C0802A69381000893A1000C93C120 -S31AFE00BB0A001093E100149001001C3D200000800939087C7D1BA2 -S31AFE00BB1F782C000000408200743D200000392932008009003485 -S31AFE00BB343860FFFF7C0803A67D3E4B783BE000004E8000217C31 -S31AFE00BB497C1B78813E00347FE3FB787D2803A64E800021813E10 -S31AFE00BB5E00147FA4EB78806900008009000C7C0803A64E8000BB -S31AFE00BB732137FF00014081FFD43D20000039293200800900341F -S31AFE00BB887F83E3787C0803A64E800021480000483D2000003905 -S31AFE00BB9D293200816900142C0B00004182001C806B0000800BAA -S31AFE00BBB2000C7FA4EB787C0803A64E8000214800001C8169007E -S31AFE00BBC7187FA4EB78806B0000800B000C7C0803A64E80002129 -S31AFE00BBDC8001001C7C0803A68381000883A1000C83C100108373 -S31AFE00BBF1E10014382100184E8000209421FFF07C0802A693E1A3 -S31AFE00BC06000C900100143D20000039293200816900147C7F1B6F -S31AFE00BC1B782C0B00004082000881690018806B0000800B00100F -S31AFE00BC307C0803A64E800021987F0000800100147C0803A68383 -S31AFE00BC45E1000C382100104E8000209421FFE07C0802A69361EE -S31AFE00BC5A000C9381001093A1001493C1001893E1001C900100CC -S31AFE00BC6F243D200000800939087C7D1B782C000000408200886F -S31AFE00BC843D20000039293200800900343860FFFF7C0803A67DB9 -S31AFE00BC993C4B783BE000004E8000217C7B1B78813C00347FE3AC -S31AFE00BCAEFB787D2803A64E800021817C00147FA4EB78806B004B -S31AFE00BCC300800B001C7C0803A64E8000217C7E1B794182001044 -S31AFE00BCD8881D00002C0000004082004C37FF00014081FFC03D80 -S31AFE00BCED20000039293200800900347F63DB787C0803A64E809D -S31AFE00BD020021480000643D20000039293200816900142C0B0035 -S31AFE00BD170041820034806B0000800B001C7FA4EB784800003488 -S31AFE00BD2C817C00307FE3FB787D6803A63D200000380000019048 -S31AFE00BD410939084E80002148000020816900187FA4EB78806BD5 -S31AFE00BD560000800B001C7C0803A64E8000217C7E1B787FC3F34F -S31AFE00BD6B78800100247C0803A68361000C8381001083A1001439 -S31AFE00BD8083C1001883E1001C382100204E8000209421FFE87C4F -S31AFE00BD950802A69381000893A1000C93C1001093E1001490010C -S31AFE00BDAA001C3D200000800939087C7D1B782C000000408200C3 -S31AFE00BDBF803D20000039293200800900343860FFFF7C0803A67A -S31AFE00BDD47D3E4B783BE000004E8000217C7C1B78813E00347FD1 -S31AFE00BDE9E3FB787D2803A64E800021813E00142C0900004182E3 -S31AFE00BDFE001C8069000080090014388000077FA5EB787C0803BD -S31AFE00BE13A64E80002137FF00014081FFC83D20000039293200D1 -S31AFE00BE28800900347F83E3787C0803A64E800021480000303D16 -S31AFE00BE3D20000039293200812900142C0900004182001C80697D -S31AFE00BE52000080090014388000077FA5EB787C0803A64E8000F9 -S31AFE00BE67213D20000039293200812900182C0900004182001CDA -S31AFE00BE7C80690000800900147FA5EB78388000077C0803A64E66 -S31AFE00BE918000218001001C7C0803A68381000883A1000C83C1AD -S31AFE00BEA6001083E10014382100184E8000209421FFD07C080292 -S31AFE00BEBBA69301001093210014934100189361001C938100202C -S31AFE00BED093A1002493C1002893E1002C900100347C7D1B787C18 -S31AFE00BEE5BE2B787FBFEB783B6000003F2000003F8000003B400E -S31AFE00BEFA0000813939302C09000041820020896900002C0B00CB -S31AFE00BF0F00418200143809000199610008901939304800006440 -S31AFE00BF247FC0FE707C1E005054000FFE7FE9EA78216900007D3B -S31AFE00BF392B49147C0B48394182003C386000324BFFFE494800BD -S31AFE00BF4E00083BDEFFCE2C1E000040810014386100084BFFFCE6 -S31AFE00BF63F17C7B1B794182FFE82C1B0000408200143860FFFFEC -S31AFE00BF7848000180386100084BFFFC7D880100089B5F00007C7C -S31AFE00BF8D0303785400063E2C00000D4182007C418100282C00F7 -S31AFE00BFA20008418200D4418100102C00000341820038480001A2 -S31AFE00BFB7142C00000A41820058480001082C00002B418200E8B9 -S31AFE00BFCC418100102C000024418200DC480000F02C00007F4177 -S31AFE00BFE1820098480000E47C1FE800408200183C60FE0138636E -S31AFE00BFF639284BFFF84D3860FFFE480000F8987F00003BFF001C -S31AFE00C00B013F000000480000DC892100083F0000002C09000A88 -S31AFE00C02040820010881836C02C00000D418200182C09000D4009 -S31AFE00C035820018881836C02C00000A4082000C9B410008480092 -S31AFE00C04A00A4801C39282C000000418200143860000D4BFFFA50 -S31AFE00C05F9D3860000A4BFFFA958801000838600001981836C0E0 -S31AFE00C074480000847C1FE8003F0000004182006C801C39282CCD -S31AFE00C0890000004182001C386000084BFFFA65386000204BFF74 -S31AFE00C09EFA5D386000084BFFFA553BFFFFFF480000407C1FE8B6 -S31AFE00C0B300408200145463063E4BFFC31D386000004800003465 -S31AFE00C0C8801C39282C0000004182000C886100084BFFFA218889 -S31AFE00C0DD0100083F000000981F00003BFF0001880100089818CF -S31AFE00C0F236C04BFFFE08800100347C0803A683010010832100D5 -S31AFE00C10714834100188361001C8381002083A1002483C1002857 -S31AFE00C11C83E1002C382100304E8000209421FFC07C0802A692D1 -S31AFE00C1314100089261000C9281001092A1001492C1001892E165 -S31AFE00C146001C9301002093210024934100289361002C93810008 -S31AFE00C15B3093A1003493C1003893E1003C900100447C9D23786E -S31AFE00C1707C7C1B787D3DE0107D2949107D294BB87C1CE8507C8D -S31AFE00C1850048787FA948387D3D03797CB62B78408101403E40AE -S31AFE00C19AFE012C160000418200143872392C7C96E0504BFFF6E3 -S31AFE00C1AF99480000103872392C7F84E3784BFFF6897FBEEB78B0 -S31AFE00C1C47F9DE3783BE000003E80FE013EA0FE013E60FE013B5E -S31AFE00C1D95EFFF03AFD00103F00FE013F60FE013F20FE017C1FE4 -S31AFE00C1EEF000408000147C9DF8AE387839384BFFF649480000C3 -S31AFE00C2030C387939404BFFF63D7FFCFE707C1CF8507C000E70AC -S31AFE00C2187C0002147C00F8502C0000014082000C387B39444B41 -S31AFE00C22DFFF61957801F7E7C1F02147C001E70540018387C009B -S31AFE00C242F8502C0000074082000C387B39444BFFF5F53BFF00FC -S31AFE00C257012C1F000F4081FF907FBCEB787FDDF3783874394891 -S31AFE00C26C4BFFF5D97EBEAB783BE000007C1FE8004080002C7C3C -S31AFE00C2819CF8AE3804FFE02000005E7C0001107C0003B87C0980 -S31AFE00C29600F87C8000387129002E7C044B784800000838800050 -S31AFE00C2AB20387E394C4BFFF5953BFF00012C1F000F4081FFBC3A -S31AFE00C2C0387339504BFFF5817F5DD3797EFCBB784181FECC8090 -S31AFE00C2D50100447C0803A6824100088261000C8281001082A1EE -S31AFE00C2EA001482C1001882E1001C83010020832100248341001D -S31AFE00C2FF288361002C8381003083A1003483C1003883E1003C46 -S31AFE00C314382100404E8000209421FFF87C0802A69001000C38DC -S31AFE00C329A000004BFFFDFD8001000C7C0803A6382100084E802E -S31AFE00C33E00209421FF607C0802A69361008C9381009093A1002E -S31AFE00C3539493C1009893E1009C900100A49081000C388100A88E -S31AFE00C3683FA000003B800000380000013961000890810074833F -S31AFE00C37D7D39309061000890A1001090C1001490E10018910107 -S31AFE00C392001C912100209141002498010070916100789B81001F -S31AFE00C3A771388100704BFFF5213C60FE01386339544BFFF48DF5 -S31AFE00C3BC939D3930386100803880000838A000004BFFFAE98869 -S31AFE00C3D1610080937D393068600059212000007C090114686332 -S31AFE00C3E60079212300007C6919147C630378800100A47C080369 -S31AFE00C3FBA68361008C8381009083A1009483C1009883E1009CEB -S31AFE00C410382100A04E8000209421FFE87C0802A69381000893B5 -S31AFE00C425A1000C93C1001093E100149001001C7C9C23787CBDCC -S31AFE00C43A2B787C7F1B783BC00000480000C857C0103A7FFD01CF -S31AFE00C44F2E881F00003BDE000148000098881F00002C00002210 -S31AFE00C4644082008457C0103A7D60EA14812BFFFC7C09F80040D9 -S31AFE00C47982000C3BFF000193EBFFFC893F0000692000227C0079 -S31AFE00C48E00D07D2900D055290FFE54000FFE7D2B0039418200BF -S31AFE00C4A32C7FE3FB788D230001692000227C0000D07D2900D061 -S31AFE00C4B855290FFE54000FFE7D2B00394082FFE47C7F1B7888E3 -S31AFE00C4CD1F00002C0000004082002C3C60FE013863396C4BFFF8 -S31AFE00C4E2F365480000083BFF0001881F00002C000000418200C8 -S31AFE00C4F74C2C0000204082FF6038000000981F00003BFF000149 -S31AFE00C50C881F00002C0000004182002C2C000020408200187FAF -S31AFE00C521E3FB788C0300012C0000204182FFF87C7F1B78881FE0 -S31AFE00C53600002C0000004082FF0C3C6000003C80000080BD005E -S31AFE00C54B0093DC0000386337A838843818480000258001001CD8 -S31AFE00C5607C0803A68381000883A1000C83C1001083E100143855 -S31AFE00C5752100184E8000209421FFD87C0802A69301000893217E -S31AFE00C58A000C93410010936100149381001893A1001C93C100D0 -S31AFE00C59F2093E100249001002C7C7F1B787CBC2B787C9A2378F4 -S31AFE00C5B47F83E3784BFFF3497FFDFB787C1DD0007C7B1B784168 -S31AFE00C5C98200C0809D00007F83E3787F65DB784BFFF4652C0394 -S31AFE00C5DE00004082009C807D00004BFFF3197C03D8004081007B -S31AFE00C5F3847C1FD0003BC00001418200603F00FE013F20FE0185 -S31AFE00C6087C1DF80041820044809F00007F83E3787F65DB784B83 -S31AFE00C61DFFF4212C0300004082002C2C1E00004182001880BD71 -S31AFE00C6320000387839807F84E3784BFFF2093BC00000809F00C9 -S31AFE00C64700387939A84BFFF1F93BFF00107C1FD0004082FFB0EE -S31AFE00C65C2C1E0000408200143C60FE01386339AC4BFFF1D9482E -S31AFE00C6710000187FA3EB78480000143BBD00107C1DD000408284 -S31AFE00C686FF48386000008001002C7C0803A683010008832100B2 -S31AFE00C69B0C83410010836100148381001883A1001C83C10020EE -S31AFE00C6B083E10024382100284E8000209421FFE87C0802A6931F -S31AFE00C6C581000893A1000C93C1001093E100149001001C7C601E -S31AFE00C6DA1B783C60FE017C9D23787C1F03787CBE2B783863399E -S31AFE00C6EFB04BFFF1557C1FE800418200283F80FE0180BF000087 -S31AFE00C70480DF0008387C39B87FC4F3784BFFF1353BFF00107C2C -S31AFE00C7191FE8004082FFE48001001C7C0803A68381000883A161 -S31AFE00C72E000C83C1001083E10014382100184E80002091230007 -S31AFE00C743149883000090A3000490C3000890E3000C91030010F9 -S31AFE00C7584E8000209421FFB07C0802A691C1000891E1000C92E0 -S31AFE00C76D01001092210014924100189261001C9281002092A17B -S31AFE00C782002492C1002892E1002C9301003093210034934100E0 -S31AFE00C797389361003C9381004093A1004493C1004893E1004CF9 -S31AFE00C7AC900100547D344B787D1643783016FFFF7D20B1106AC1 -S31AFE00C7C1800001216000007C0B01147D2B00397C701B787C984D -S31AFE00C7D623787CD133787CF53B787D5353783B4000013A400002 -S31AFE00C7EB0041820008925600007C12A8007E3F8B78408000507C -S31AFE00C8007EA903A67FEBFB7839000000812B00102C0900004107 -S31AFE00C81582000891090000814B00042C0A000040820020800B73 -S31AFE00C82A00082C0000004182000C2C0000024082000C812B004A -S31AFE00C83F0C91490000396B00184200FFC47CBD2B787C1D800044 -S31AFE00C854408002043DC0FE013DE0FE0157BE103A7C9EC02E88FE -S31AFE00C8690400002C00002D4082014C396000007C0BA8008AE414 -S31AFE00C87E00017E3F8B78392000003B7D0001408001147F9EC21A -S31AFE00C893143B200001881F00007C170000408200F0813F001060 -S31AFE00C8A82C09000041820020800900002C000000418200148053 -S31AFE00C8BD9F0014386E39C44BFFEF813B400000801F00042C0008 -S31AFE00C8D2000041820080813C0000880900023BC900032C000087 -S31AFE00C8E73D4182000C83DC00043BBD0001801F00082C000000FD -S31AFE00C8FC418200102C0000014182003C48000040809F000C7FF2 -S31AFE00C911C3F37838A0000038C00000480001992C03000040823C -S31AFE00C926002480BF00147FC4F378386F39E44BFFEF113B40004A -S31AFE00C93B004800000C813F000C93C90000813F00103B7D0001DE -S31AFE00C95048000034801F00082C000000418200102C000002413D -S31AFE00C96582001C48000020817F000C812B000039290001912BDC -S31AFE00C97A00004800000C813F000C9329000039600001480000E6 -S31AFE00C98F14392900017C09A8003BFF00184180FEFC2C0B0000A7 -S31AFE00C9A4408200A83C60FE0138633A0C7EE4BB784BFFEE9148EE -S31AFE00C9B90000902C160000418200782C12000041820014386E9D -S31AFE00C9CE39C47E649B784BFFEE713B4000002C14000041820037 -S31AFE00C9E3102C1400014182003C480000407C7EC02E7EC4B3780E -S31AFE00C9F838A0000038C00000480000B52C030000408200247CC8 -S31AFE00CA0D9EC02E386F39E47E659B784BFFEE2D3B4000004800A2 -S31AFE00CA22000C7C1EC02E901600003B7D00013A40000148000045 -S31AFE00CA37183C60FE0138633A2C3B7D00014BFFEE013B400000C5 -S31AFE00CA4C7F7DDB787C1D80004180FE0C7F43D378800100547C40 -S31AFE00CA610803A681C1000881E1000C8201001082210014824146 -S31AFE00CA7600188261001C8281002082A1002482C1002882E10058 -S31AFE00CA8B2C8301003083210034834100388361003C838100407A -S31AFE00CAA083A1004483C1004883E1004C382100504E80002088BA -S31AFE00CAB503000038E000012C0000203900000A39800000408242 -S31AFE00CACA00108C0300012C0000204182FFF8880300002C0000F6 -S31AFE00CADF004182012C2C07000041820038880300002C00003039 -S31AFE00CAF44082002C892300013809FFBF280000194181000C3848 -S31AFE00CB090900205409063E2C0900784082000C390000103863EA -S31AFE00CB1E00028943000038E00000392AFFD0380AFFBF2129009C -S31AFE00CB3309392000007D29491420000005380000007C00011496 -S31AFE00CB487D2B0379386300013920000040820010380AFF9F28E1 -S31AFE00CB5D00000541810008392000012C09000041820068392AD3 -S31AFE00CB72FFD05520063E280000094181000C7D2B4B7848000070 -S31AFE00CB8730380AFF9F280000054181000C396AFFA94800001CDB -S31AFE00CB9C380AFFBF200000057C0001107C0003B8392AFFC97CF0 -S31AFE00CBB10B48387C0B40004080001C880300007D2C41D62C00C6 -S31AFE00CBC600007D895A144082FF184800003C2C06000041820090 -S31AFE00CBDB2C88060000480000088C0600012C000000418200189D -S31AFE00CBF07C0A00004082FFF0880600002C0000004082000C3835 -S31AFE00CC056000004E8000202C05000091840000418200089065C2 -S31AFE00CC1A0000386000014E800020880300002C000020408200E1 -S31AFE00CC2F108C0300012C0000204182FFF8886300006869007416 -S31AFE00CC44200900007D20491468600054214000007C0A01147D1F -S31AFE00CC592B037941820010380000019004000048000030686932 -S31AFE00CC6E0046200900007D20491468600066214000007C0A012E -S31AFE00CC83147C0A4B794082000C386000004E80002091640000F1 -S31AFE00CC98386000014E8000209421FFE07C0802A69361000C93A9 -S31AFE00CCAD81001093A1001493C1001893E1001C900100243D2087 -S31AFE00CCC2000139699680800BFFD47C9C23782C0000007CDB33D9 -S31AFE00CCD7784182000C3800000A4800012838000001B009968042 -S31AFE00CCEC88030000396B00022C0000002F8500004182001898AB -S31AFE00CD010B00008C030001396B00012C0000004082FFF03800C4 -S31AFE00CD160000980B0000396B0001409E00103D20FE0138693A97 -S31AFE00CD2B604800001C2C0500014182000C3800000A480000CCD4 -S31AFE00CD403D20FE0138693A6C880300002C00000041820018980D -S31AFE00CD550B00008C030001396B00012C0000004082FFF03D204B -S31AFE00CD6A00013BA9966838000000980B00007FA3EB78388000B5 -S31AFE00CD7F0038A0000C4BFFE3953D600000812B36C83BFDFFEC8B -S31AFE00CD9438000001B13F0018B01F001AA01C0004392900012C0D -S31AFE00CDA90000003BC00000912B36C893DF00144082000C380030 -S31AFE00CDBE0045B01C00047F85E378387D0018388002057FA6EB4C -S31AFE00CDD378480033A92C0300004180002838000001901DFFECC2 -S31AFE00CDE83920FFFF93DF0004913F001093DF000C93DF00083855 -S31AFE00CDFD6000004800001038000009901B00003860FFFF800162 -S31AFE00CE1200247C0803A68361000C8381001083A1001483C10036 -S31AFE00CE271883E1001C382100204E8000203D200001380000005D -S31AFE00CE3C90099654386000004E8000209421FFC87C0802A6929A -S31AFE00CE51C1001092E10014930100189321001C9341002093610C -S31AFE00CE6600249381002893A1002C93C1003093E1003490010036 -S31AFE00CE7B3C7C9923783B6000007C1BC8003D2000013BC9968040 -S31AFE00CE907C7A1B787CBC2B78408001783BFEFFD43B0100083A62 -S31AFE00CEA5E000043AC00009813F000C2C0900004081005C7C1BD8 -S31AFE00CEBAC8507F890000809F02347F43D3784FFEE3827FA0000C -S31AFE00CECF2657BD07FE7FBD00D07C00E8787D3DE8387FBD037892 -S31AFE00CEE47FA5EB784BFFE159801F0234813F000C7C00EA147D92 -S31AFE00CEF93D4850901F0234913F000C7F7BEA147F5AEA14480073 -S31AFE00CF0E00FC801F0010280001FF408100F838000001900100B4 -S31AFE00CF23083920000091380004387F002C3880020538BF00200E -S31AFE00CF3838DF00147F07C378480033697C631B794080002C8130 -S31AFE00CF4D3F0004392900012C09000F913F000441810010801F9C -S31AFE00CF6200082C00000040820044380000084800008CA81E00A2 -S31AFE00CF77002C00000340820064813F0008A97E000239290001F8 -S31AFE00CF8C7C0B48004082001C3863FFFC381E0004907F000C9044 -S31AFE00CFA11F0234917F0008907F0010A01F000AB2FE0000B01EA4 -S31AFE00CFB60002387F002C3880000438BF002038DF001448003106 -S31AFE00CFCBB52C0300004080003892DC00003860FFFF48000038ED -S31AFE00CFE02C00000540820014A81E00023860FFFF901C000048DF -S31AFE00CFF50000203800000B901C00003860FFFF480000107C1B8F -S31AFE00D00AC8004180FEA07F63DB788001003C7C0803A682C10084 -S31AFE00D01F1082E10014830100188321001C834100208361002429 -S31AFE00D0348381002883A1002C83C1003083E10034382100384E7C -S31AFE00D0498000203803FFFF2800000B3D20FE0138693A744D8149 -S31AFE00D05E00203D60FE01396B3B905400103A7D4B002E3D20FE9F -S31AFE00D0730139293B907D4A4A147D4903A64E8004203C60FE0155 -S31AFE00D08838633A844E8000203C60FE0138633A944E8000203C1A -S31AFE00D09D60FE0138633AA84E8000203C60FE0138633ACC4E80A6 -S31AFE00D0B200203C60FE0138633AE44E8000203C60FE0138633A93 -S31AFE00D0C7F84E8000203C60FE0138633B0C4E8000203C60FE0164 -S31AFE00D0DC38633B1C4E8000203C60FE0138633B304E8000203C90 -S31AFE00D0F160FE0138633B4C4E8000203C60FE0138633B604E8018 -S31AFE00D10600203C60FE0138633B744E8000209421FFE87C0802FB -S31AFE00D11BA693A1000C93C1001093E100149001001C3D2000001F -S31AFE00D130800936D07C9F23782C0000004082007C480043113D5E -S31AFE00D1452000013869988C800300042C00000540820018A003B6 -S31AFE00D15A00162C00000040820050480043E5480000482C00003C -S31AFE00D16F0040820014480008D93800000A981F00004800006007 -S31AFE00D1843FA00001389D9ED038A000804800444D2C0300003BD4 -S31AFE00D199BD9ED03D2000003D60000093A939D8906B36D0408248 -S31AFE00D1AE000C38600000480000303D400000816A39D83D000096 -S31AFE00D1C300880B0000396B0001981F0000812836D0916A39D8A9 -S31AFE00D1D83929FFFF912836D0386000018001001C7C0803A68339 -S31AFE00D1EDA1000C83C1001083E10014382100184E80002094219C -S31AFE00D202FFE07C0802A693A1001493C1001893E1001C90010033 -S31AFE00D217243D2000003BA932007C7E1B783BE0006448000028EB -S31AFE00D22C37FFFFFF40820010480000513BE000644800001481EE -S31AFE00D2413D0048386000647D2803A64E8000217FC3F3783881B0 -S31AFE00D25600084BFFFEBD2C0300004182FFCC8861000880010083 -S31AFE00D26B247C0803A683A1001483C1001883E1001C38210020CC -S31AFE00D2804E8000209421FFE87C0802A693A1000C93C1001093A8 -S31AFE00D295E100149001001C3D2000013BA99F504800003080BEF7 -S31AFE00D2AA36D47FE3FB787FA4EB784800443D7C631B7940810009 -S31AFE00D2BF14801E36D47FBD1A147C030050901E36D4480041819F -S31AFE00D2D43FC00000801E36D42C000000418200303D2000013BE2 -S31AFE00D2E9E9988C801F00042C0000054082000C7FE3FB78480060 -S31AFE00D2FE424D801F00042C0000004082FFA0480007413D20006B -S31AFE00D313003BC93200801E00443D2000012C00000039299F500E -S31AFE00D3283D6000003D4000003BE00000912B39DC93EA36D4411E -S31AFE00D33D820010386000004BFFDC0D93FE00448001001C7C0884 -S31AFE00D35203A683A1000C83C1001083E10014382100184E8000DE -S31AFE00D367209421FFF07C0802A693E1000C900100143D600000FB -S31AFE00D37C812B39DC2C0400249889000039290001912B39DC40EE -S31AFE00D391820010380000013D200000900939C03FE00000801F0B -S31AFE00D3A639C0688B0023212B00007D6959143140FFFF7D2A01A9 -S31AFE00D3BB107D2058394182001C3D400000392000013D600000C8 -S31AFE00D3D038000000912A39C4900B39C83D600000812B36D4392C -S31AFE00D3E52900012C090100912B36D44182002C3D200000800934 -S31AFE00D3FA39C42C000000418200283D600000812B39C83929005A -S31AFE00D40F012C090003912B39C8408200104BFFFE693800000053 -S31AFE00D424901F39C0800100147C0803A683E1000C382100104E5E -S31AFE00D4398000209421FFE87C0802A693A1000C93C1001093E15A -S31AFE00D44E00149001001C4800055D7C7D1B783C60FE013C80FE79 -S31AFE00D4630138A000EC38843C8838633C804BFFE3D57FA3EB788D -S31AFE00D478480005A58001001C7C0803A683A1000C83C1001083D8 -S31AFE00D48DE10014382100184E8000209421FFE87C0802A693A136 -S31AFE00D4A2000C93C1001093E100149001001C480005017C7D1B6A -S31AFE00D4B7783C60FE013C80FE0138A000FE38843C9838633C80D1 -S31AFE00D4CC4BFFE3797FA3EB78480005498001001C7C0803A68339 -S31AFE00D4E1A1000C83C1001083E10014382100184E8000209421A5 -S31AFE00D4F6FFE87C0802A69381000893A1000C93C1001093E100D6 -S31AFE00D50B149001001C7C7D1B787C9E23784BFFFD6D3D200000F4 -S31AFE00D520800936CC3D6000001FE0000A3B8B32004800001481EC -S31AFE00D5353C0048386000647D2803A64E8000217FA3EB787FC458 -S31AFE00D54AF3784BFFFBC97C631B79408200102C1F00003BFFFF86 -S31AFE00D55FFF4082FFD48001001C7C0803A68381000883A1000C19 -S31AFE00D57483C1001083E10014382100184E8000209421FF787CCB -S31AFE00D5890802A693C1008093E100849001008C7C8023782C002D -S31AFE00D59E000590A1001090C1001490E100189101001C912100E0 -S31AFE00D5B320914100249081000C3BC000004182002C2800000515 -S31AFE00D5C8418100102C00000441820194480003482C00000641EA -S31AFE00D5DD8203082C0000074182030C480003343FE00000801F66 -S31AFE00D5F236D83D6000002C00000039200001912B36DC4082005F -S31AFE00D60714480011C1907F36D82C03000041820308811F36D814 -S31AFE00D61C3808FFFF28000039418102F83D60FE01396B3CA85422 -S31AFE00D63100103A7D4B002E3D20FE0139293CA87D4A4A147D4913 -S31AFE00D64603A64E8004203D20FF0061290014816900007C0006CA -S31AFE00D65BAC3948FFFF3C0080007C0054307D6B03789169000072 -S31AFE00D6707C0006AC480002A83D20FF0061290200A00900007C74 -S31AFE00D6850006AC60000008B00900007C0006AC480002883D205C -S31AFE00D69AFF0061290200A00900007C0006AC60000004B00900F8 -S31AFE00D6AF007C0006AC480002683D20FF0061290240A0090000B1 -S31AFE00D6C47C0006AC60000004B00900007C0006AC480002483D05 -S31AFE00D6D920FF0061290220A00900007C0006AC60000008B00975 -S31AFE00D6EE00007C0006AC480002283D20FF0061290220A00900D2 -S31AFE00D703007C0006AC60000004B00900007C0006AC4800020842 -S31AFE00D7183D20FF0061290940800900007C0006AC6000008090A2 -S31AFE00D72D0900007C0006AC480001E83D20FF006129094881695A -S31AFE00D74200007C0006AC3948FFE53C0080007C0054307D6B0394 -S31AFE00D75778916900007C0006AC480001BC3D60000083CB36DC17 -S31AFE00D76C38000000900B36DC3D200000814936D82C0A00004113 -S31AFE00D78182019C7D4853783808FFFF280000394181018C3D6055 -S31AFE00D796FE01396B3D905400103A7D4B002E3D20FE0139293D7B -S31AFE00D7AB907D4A4A147D4903A64E8004203D20FF006129001455 -S31AFE00D7C0816900007C0006AC3948FFFF3C0080007C0054307D80 -S31AFE00D7D56B0078916900007C0006AC4800013C3D20FF006129C5 -S31AFE00D7EA0200A00900007C0006AC7000FFF75400043EB0090098 -S31AFE00D7FF007C0006AC480001183D20FF0061290200A0090000F1 -S31AFE00D8147C0006AC7000FFFB5400043EB00900007C0006AC489E -S31AFE00D8290000F43D20FF0061290240A00900007C0006AC700083 -S31AFE00D83EFFFB5400043EB00900007C0006AC480000D03D20FFE6 -S31AFE00D8530061290220A00900007C0006AC7000FFF75400043E3D -S31AFE00D868B00900007C0006AC480000AC3D20FF0061290220A024 -S31AFE00D87D0900007C0006AC7000FFFB5400043EB00900007C0026 -S31AFE00D89206AC480000883D20FF0061290940800900007C0006C1 -S31AFE00D8A7AC5400066E900900007C0006AC480000683D20FF0021 -S31AFE00D8BC61290948816900007C0006AC3948FFE53C0080007CC3 -S31AFE00D8D10054307D6B0078916900007C0006AC4800003C3D2051 -S31AFE00D8E6000083C936D848000030396100083801009039200093 -S31AFE00D8FB039BC100719921007090010074916100783D2000004E -S31AFE00D910800B000883C936CC900936CC7FC3F3788001008C7C4C -S31AFE00D9250803A683C1008083E10084382100884E800020942108 -S31AFE00D93AFFE07C0802A693A1001493C1001893E1001C900100F4 -S31AFE00D94F247C7D1B787C9F23787CA32B784BFFCCE93800000060 -S31AFE00D964901F00007FA3EB78388100084BFFF7A52C030000415F -S31AFE00D979820018880100082C0000034082000C38000001901F85 -S31AFE00D98E000038600001800100247C0803A683A1001483C10099 -S31AFE00D9A31883E1001C382100204E8000209421FFE87C0802A6A4 -S31AFE00D9B89381000893A1000C93C1001093E100149001001C3F22 -S31AFE00D9CDA000003BBD3200813D00343860FFFF7D2803A64E80D3 -S31AFE00D9E20021801D00347C7C1B78386000007C0803A64E80001C -S31AFE00D9F7217F83E3788001001C7C0803A68381000883A1000C93 -S31AFE00DA0C83C1001083E10014382100184E8000209421FFF87CAE -S31AFE00DA210802A69001000C3D20000039293200800900347C086D -S31AFE00DA3603A64E8000218001000C7C0803A6382100084E800056 -S31AFE00DA4B209421FFE87C0802A693A1000C93C1001093E10014AE -S31AFE00DA609001001C3FA000003BBD3200817D00343D20000080E8 -S31AFE00DA756939D07D6803A63D20000038000000900939084E805B -S31AFE00DA8A0021801D00303D200000806939D47C0803A64E800047 -S31AFE00DA9F213D20000038000001900939288001001C7C0803A6F3 -S31AFE00DAB483A1000C83C1001083E10014382100184E800020946A -S31AFE00DAC921FFE87C0802A693A1000C93C1001093E10014900153 -S31AFE00DADE001C3FA000003BBD3200811D00343860FFFF7D08031A -S31AFE00DAF3A63D400000392000013D60000038000000912A3908CC -S31AFE00DB08900B39284E8000213D200000906939D0813D00343890 -S31AFE00DB1D6000017D2803A64E800021813D00303860FFFF7D2828 -S31AFE00DB3203A64E8000213D200000801D0030906939D43860007A -S31AFE00DB47017C0803A64E8000218001001C7C0803A683A1000CAE -S31AFE00DB5C83C1001083E10014382100184E8000209421FFE87C6D -S31AFE00DB710802A69381000893A1000C93C1001093E10014900112 -S31AFE00DB86001C3FE00000801F36E02C000000408200A03FA00029 -S31AFE00DB9B003BBD3200813D00343860FFFF7D2803A64E80002182 -S31AFE00DBB0813D00347C7C1B78386000017D2803A64E8000218188 -S31AFE00DBC55D00143D20FE013929D43C912A00043D60FE01396B09 -S31AFE00DBDAD4983D20FE01916A00083929D368912A000C3D60FE68 -S31AFE00DBEF01396BD2003D20FE01916A00103929D584912A0014B5 -S31AFE00DC043D60FE01396BD9383D20FE01916A00183929D4F4918C -S31AFE00DC192A001C801D00347F83E3787C0803A64E80002138002A -S31AFE00DC2E0001901F36E03D2000003FA00001A089391A387D9811 -S31AFE00DC438C480038313BBD988C801D00043D200000900939CCD3 -S31AFE00DC588001001C7C0803A68381000883A1000C83C1001083D6 -S31AFE00DC6DE10014382100184E8000209421FFF07C0802A693E106 -S31AFE00DC82000C90010014480037C93D2000013BE9988C3D20008D -S31AFE00DC9700817F0004800939CC7C005800418200602C0B0004B0 -S31AFE00DCAC408200484BFFFE193C6000013D20000139299F503C6C -S31AFE00DCC180000038C39ED03CA00000396000013940000D3D0028 -S31AFE00DCD600003CE000003800000090C439D8916536D099439E06 -S31AFE00DCEBD0912839DC900736D4801F00042C0000004082000848 -S31AFE00DD004BFFFE6D3D200001800998903D600000900B39CC8089 -S31AFE00DD150100147C0803A683E1000C382100104E800020942137 -S31AFE00DD2AFFE87C0802A693A1000C93C1001093E1001490010010 -S31AFE00DD3F1C3D20000080E9391C2C070000408200283D0000003A -S31AFE00DD54392000013D6000003D40000038002328912839149029 -S31AFE00DD69EB3A00900A39184800007C3C60FE013C8000003863DB -S31AFE00DD7E3BFC38843A0038A000014BFF50793C60FE013C80001C -S31AFE00DD930038633BD43884391838A000024BFF50613C60FE0150 -S31AFE00DDA83C80000038633C2C3884391438A000014BFF50493CA2 -S31AFE00DDBD60FE013C80000038633C483884370838A000054BFFF1 -S31AFE00DDD250313C60FE013C80000138633C7038841AB038A000BA -S31AFE00DDE7054BFF50193D20000038000000900939344800034D38 -S31AFE00DDFC4800287D3D6000003D200000392938F83BEB38E87CD3 -S31AFE00DE111F48004182003C7D3D4B783BC00001813F00047FE3F3 -S31AFE00DE26FB787D2803A64E8000217C631B794182000C93DF007F -S31AFE00DE3B0C48000008907F000C3BFF00107C1FE8004082FFD4F5 -S31AFE00DE503D20000080093A042C000000408200143C60FE0138C0 -S31AFE00DE65633E784BFFD9DD480000903D200000800939142C0054 -S31AFE00DE7A0000418200283C60000138631A9C48001E8D2C030094 -S31AFE00DE8F00418200143C60FE0138633E984BFFD9A94800001073 -S31AFE00DEA43D20000038000001900939343D200000800939342C4A -S31AFE00DEB9000000418200403C60000038633708480001B97C64F5 -S31AFE00DECE1B783C60FE0138633EC44BFFD96D3C60000138631A8E -S31AFE00DEE3B04800019D7C641B783C60FE0138633ECC4BFFD95169 -S31AFE00DEF84BFFFC758001001C7C0803A683A1000C83C100108385 -S31AFE00DF0DE10014382100184E8000209421FFF093E1000C38004B -S31AFE00DF2200047C0903A67C9F2378388000003980001889630089 -S31AFE00DF370038E000012C0B000038A0000038C0000A386300010B -S31AFE00DF4C4182011069600030212000007C0901147CE900394135 -S31AFE00DF61820030892300003809FFBF280000194181000C3809FA -S31AFE00DF7600205409063E2C090078408200108D63000138C00069 -S31AFE00DF8B1038630001392BFFD0380BFFBF7D2A4B787C08037834 -S31AFE00DFA05529063E5400063E21290009392000007D294914203F -S31AFE00DFB5000005380000007C0001147D27037938E000003920F4 -S31AFE00DFCA000040820010380BFF9F28000005418100083920003B -S31AFE00DFDF012C090000418200685540063E280000094181000CF0 -S31AFE00DFF47D49537848000030380BFF9F280000054181000C39F6 -S31AFE00E0092BFFA94800001C5500063E200000057C0001107C0000 -S31AFE00E01E03B8392BFFC97C0948387C093000408000208963007C -S31AFE00E033007C0531D62C0B00007CA04A14386300014082FF0C32 -S31AFE00E048480000142C0B002E4182000C386000004800001C7CB7 -S31AFE00E05DA060307C840378398CFFF84200FECC909F0000386070 -S31AFE00E072000183E1000C382100104E8000209421FFE87C0802AB -S31AFE00E087A693A1000C93C1001093E100149001001C8903000372 -S31AFE00E09C3FA0000188A3000088C3000188E300023C80FE0138B4 -S31AFE00E0B1843EE8387DA0504BFFD705387DA0508001001C7C081B -S31AFE00E0C603A683A1000C83C1001083E10014382100184E80005D -S31AFE00E0DB20812300007C09180041820020812300049089000027 -S31AFE00E0F0800300049064000090040004908300044E800020906F -S31AFE00E1058900049089000091240000912400044E8000207C6B18 -S31AFE00E11A1B78806B00007C0358004182001880030000900B009E -S31AFE00E12F0081230000916900044E800020386000004E800020C1 -S31AFE00E1449421FFE87C0802A693A1000C93C1001093E10014903E -S31AFE00E15901001C3D0000003CE00000392839E8396739E0912843 -S31AFE00E16E39E8916739E03D400001912900043BCAA070916B0019 -S31AFE00E183043FA000003BE000107FC4F378387D39E04BFFFF4967 -S31AFE00E19837FFFFFF3BDE06104082FFEC8001001C7C0803A68311 -S31AFE00E1ADA1000C83C1001083E10014382100184E8000209421CC -S31AFE00E1C2FFF87C0802A69001000C80040000A1240004900300A4 -S31AFE00E1D710B123001480040000A10400043D200000396939F8DA -S31AFE00E1EC900939F83D400000B10B0004906A3A044800001580FE -S31AFE00E20101000C7C0803A6382100084E8000209421FFF87C084B -S31AFE00E21602A69001000C81230000388300108009000038A000DA -S31AFE00E22B007C0803A64E8000218001000C7C0803A638210008A3 -S31AFE00E2404E8000209421FF587C0802A67D800026934100909385 -S31AFE00E2556100949381009893A1009C93C100A093E100A49001A2 -S31AFE00E26A00AC9181008C3D2000003929320083A9004C3D60004B -S31AFE00E27F002C1D00007C7B1B787C9A23787CBC2B7883EB3A047B -S31AFE00E2943BC00005418200547FBFEB78815F0000801F000C81AD -S31AFE00E2A96A00243D2000002C000000392936E4916A0028912AEB -S31AFE00E2BE00244082002C800A00003C800000388439F87FE3FBA5 -S31AFE00E2D37838A000007C0803A64E800021801F000C60000001BA -S31AFE00E2E8901F000C2E1D00004800003C813F00007FE3FB78807E -S31AFE00E2FD09001C7C0803A64E8000213D2000003929320080094D -S31AFE00E31200483C60000360630D407C0803A64E80002137DEFFCB -S31AFE00E327FF408100E4813F00007FE3FB788009000C7C0803A6E2 -S31AFE00E33C4E8000212C0300004182FFB0813F00003D600000815A -S31AFE00E35149001038A0000238EB39F09361000893410010938140 -S31AFE00E36600147FE3FB783881000838DC000E7D4803A63800002C -S31AFE00E37B0E392000009001000C912B39F04E8000213D20000054 -S31AFE00E39080093A003FC000002C000000418200384BFFF6117CBE -S31AFE00E3A57D1B783C60FE0138633EF44BFFD4957F63DB78388047 -S31AFE00E3BA000E4BFFDF617F43D3787F84E3784BFFDF557FA3EBBC -S31AFE00E3CF784BFFF64D801E39F02C000000408200307FFDFB785C -S31AFE00E3E47FDFF378813D00007FA3EB788009001C7C0803A64EF4 -S31AFE00E3F9800021801F39F02C0000004182FFE47FBFEB7841925C -S31AFE00E40E0018813F000038000000816900289009002891690018 -S31AFE00E42324800100AC8181008C7C0803A6834100908361009408 -S31AFE00E4388381009883A1009C83C100A083E100A47D80812038AD -S31AFE00E44D2100A84E8000209421FFF87C0802A69001000C3D202D -S31AFE00E4620000380939F07C0400004082001038000001900939DA -S31AFE00E477F0480000188123000081690028800B00087C0803A6C6 -S31AFE00E48C4E8000218001000C7C0803A6382100084E80002094EB -S31AFE00E4A121FFE07C0802A69361000C9381001093A1001493C176 -S31AFE00E4B6001893E1001C900100243D20000039293200838900F3 -S31AFE00E4CB4C3D6000002C1C00007C7D1B787C9B237883CB3A043D -S31AFE00E4E0418200547F9EE378815E0000801E000C816A00243DBF -S31AFE00E4F52000002C000000392936E4916A0028912A0024408282 -S31AFE00E50A002C800A00003C800000388439F87FC3F37838A00014 -S31AFE00E51F007C0803A64E800021801E000C60000001901E000C02 -S31AFE00E534813E00007FC3F3788009001C7C0803A64E8000213C65 -S31AFE00E549600000386339E84BFFFBC97C7F1B7941820054393F71 -S31AFE00E55E000CA009000C817F000C8149000481090008B01D00AA -S31AFE00E5730C917D0000915D0004911D000880BF00087F63DB7851 -S31AFE00E58838A5FFF2389F001A4BFFCAB13C600000386339E07F27 -S31AFE00E59DE4FB784BFFFB3D807F000848000008386000002C1C55 -S31AFE00E5B2000041820018813E00003800000081690028900900D3 -S31AFE00E5C72891690024800100247C0803A68361000C838100101F -S31AFE00E5DC83A1001483C1001883E1001C382100204E8000209417 -S31AFE00E5F121FFE87C0802A693A1000C93C1001093E10014900120 -S31AFE00E606001C7CA02B797C0903A64081003C7C9F23787FC902F4 -S31AFE00E61BA63FA00000807F000080BF0004809D39F44BFFCA15AC -S31AFE00E630801D39F4813F000437DEFFFF7C004A143BFF00089084 -S31AFE00E6451D39F44082FFD88001001C7C0803A683A1000C83C19B -S31AFE00E65A001083E10014382100184E8000209421FF607C080226 -S31AFE00E66FA69361008C9381009093A1009493C1009893E1009C04 -S31AFE00E684900100A47C7E1B783C6000007C9B2378386339E04B6E -S31AFE00E699FFFA817C7C1B787F89FE707D20E2787C004850817EE3 -S31AFE00E6AE00007C00FE70393C000C7D3F0038800B001493E100E1 -S31AFE00E6C3089361000C7FC3F3783881000838A000017C0803A6C2 -S31AFE00E6D84E8000213D20000080093A002C000000418200384BA8 -S31AFE00E6EDFFF2C57C7D1B783C60FE0138633F044BFFD1497FE393 -S31AFE00E702FB783880000E4BFFDC15387F000E389BFFF24BFFDCDB -S31AFE00E717097FA3EB784BFFF301813E0000800900282C00000081 -S31AFE00E72C4182005C3C60000038633708389F001E38A000044B23 -S31AFE00E741FFD3752C03000041820040815E00007FC3F378812A0F -S31AFE00E75600287F64DB78800900043D60FE017C0803A683AA00C9 -S31AFE00E76B14396BE5F03D20000093E939F4916A00144E80002104 -S31AFE00E780813E000093A900142C1C0000418200183C600000931F -S31AFE00E7957C0008386339E87F84E3784BFFF93D800100A47C08A4 -S31AFE00E7AA03A68361008C8381009083A1009483C1009883E100B1 -S31AFE00E7BF9C382100A04E8000209421FFF87C0802A69001000C49 -S31AFE00E7D43D20000080693A0481630000800B00207C0803A64E9E -S31AFE00E7E98000218001000C7C0803A6382100084E8000209421B8 -S31AFE00E7FEFFF87C0802A69001000C7C641B783C60FE0138633F5A -S31AFE00E813144BFFD0318001000C7C0803A6382100084E80002084 -S31AFE00E8289421FFF07C0802A693E1000C900100143D2000013B49 -S31AFE00E83DE91F1C801F001C2C0000004082002C90691F1C909F66 -S31AFE00E85200044800049D7C631B794082001C801F00083920006F -S31AFE00E867017C0000D0913F001C901F0010386000008001001473 -S31AFE00E87C7C0803A683E1000C382100104E8000203D20000139F8 -S31AFE00E891291F1C8009001C7C6B1B782C0000004082000C386059 -S31AFE00E8A600074E800020800900147C0B004041800014800900A2 -S31AFE00E8BB18386000007C0B00404D800020386000014E80002059 -S31AFE00E8D03D20000139691F1C800B001C2C0000004182001C81C1 -S31AFE00E8E52B00143860000091240000800B0018900500004E8088 -S31AFE00E8FA0020386000074E8000203D20000139691F1C800B0092 -S31AFE00E90F1C7C6A1B782C0000004182001C812B00083860000003 -S31AFE00E924912A0000800B000C900400004E800020386000074E19 -S31AFE00E9398000209421FFD87C0802A69321000C934100109361D5 -S31AFE00E94E00149381001893A1001C93C1002093E1002490010083 -S31AFE00E9632C3D20000180091F387C7F1B782C0000007C9E2378C2 -S31AFE00E9787CBA2B783B8000004082000C38600007480000F83D08 -S31AFE00E98D20000183A91F1C3C80FE013CA0FE013884EF1C38A5AF -S31AFE00E9A2F0447CA428507FA3EB784BFFC6957CBFF214380000ED -S31AFE00E9B7807C0903A639200000612010003D600E007C0004ACD8 -S31AFE00E9CC7D398BA67D788BA67C198BA67D788BA6392900104285 -S31AFE00E9E100FFE03C0004004C00012C7C108BA64C00012C3D20F2 -S31AFE00E9F6000139291F1C800900107CBE2B783C60FE017FFF00DB -S31AFE00EA0B383F20FE017D3B4B7838633F507FE4FB784BFFCE29A0 -S31AFE00EA204800001C801B000838793F685400F87E7C0002147FA3 -S31AFE00EA35FF02144BFFCE0D7C1FF040408000207FE3FB787FA8E7 -S31AFE00EA4A03A64E800021480003657C7C1B794182FFCC93FA00C4 -S31AFE00EA5F003C0002004C00012C7C108BA64C00012C3C60FE0116 -S31AFE00EA7438633F6C4BFFCDCD7F83E3788001002C7C0803A683A5 -S31AFE00EA8921000C83410010836100148381001883A1001C83C1DB -S31AFE00EA9E002083E10024382100284E8000209421FFD07C08023E -S31AFE00EAB3A692E1000C9301001093210014934100189361001CBD -S31AFE00EAC89381002093A1002493C1002893E1002C900100343D8B -S31AFE00EADD600001392B1F1C8009001C7CBE2B782C0000007CD81E -S31AFE00EAF233787C7C1B787C9D23783B4000004082000C38600040 -S31AFE00EB07074800011C836B1F1C3C80FE013CA0FE013884F044DA -S31AFE00EB1C38A5F1887CA428507F63DB784BFFC5197CBDF214381E -S31AFE00EB310000807C0903A639200000612010003D600E007C000C -S31AFE00EB4604AC7D398BA67D788BA67C198BA67D788BA6392900AB -S31AFE00EB5B104200FFE03C0004004C00012C7C108BA64C00012C81 -S31AFE00EB703C60FE0138633F707FA4EB787F86E3784BFFCCC53DA9 -S31AFE00EB852000013EE0FE013B291F1C4800002038773F684BFF92 -S31AFE00EB9ACCAD57E0F87E7C0002147FBD02147FDFF0507F9C029D -S31AFE00EBAF142C1E000040810050801900087FC5F3787F8500008A -S31AFE00EBC47F83E3787FA4EB784FFEE3827D200026552907FE7DE0 -S31AFE00EBD92900D07C0048787CA948387D2503787F6803A67CBF61 -S31AFE00EBEE2B784E800021480001C17C7A1B794182FF9893980063 -S31AFE00EC03003C0002004C00012C7C108BA64C00012C3C60FE0170 -S31AFE00EC1838633F6C4BFFCC297F43D378800100347C0803A682ED -S31AFE00EC2DE1000C8301001083210014834100188361001C8381B5 -S31AFE00EC42002083A1002483C1002883E1002C382100304E8000FE -S31AFE00EC572028030007418100883D60FE01396B40805460103A0A -S31AFE00EC6C7D4B002E3D20FE01392940807D4A4A147D4903A64E39 -S31AFE00EC818004203C60FE0138633F904E8000203C60FE013863AD -S31AFE00EC963FB04E8000203C60FE0138633FC84E8000203C60FEC3 -S31AFE00ECAB0138633FE04E8000203C60FE0138633FFC4E80002048 -S31AFE00ECC03C60FE01386340144E8000203C60FE01386340244EDB -S31AFE00ECD58000203C60FE01386340484E8000203C60FE013863A4 -S31AFE00ECEA406C4E8000209421FFE07C0802A693A1001493C1001B -S31AFE00ECFF1893E1001C900100243D20000183E91F1C3C80FE01DF -S31AFE00ED143CA0FE013884EE8038A5EF1C7CA428507FE3FB784B41 -S31AFE00ED29FFC3193FC000013BA0000838610008380000807C0935 -S31AFE00ED3E03A639200000612010003D600E007C0004AC7D398B11 -S31AFE00ED53A67D788BA67C198BA67D788BA6392900104200FFE05C -S31AFE00ED687FE803A64E8000217D3DF1D63D600001396B1F1C3D58 -S31AFE00ED7D29FE003C00FE00912B0018900B001493CB000893ABF5 -S31AFE00ED92000C38600000800100247C0803A683A1001483C10076 -S31AFE00EDA71883E1001C382100204E8000209421FFF07C0802A684 -S31AFE00EDBC93E1000C900100143C00007E7C7F1B786000007E7F74 -S31AFE00EDD1E90039418200503C60FE01386340A07FE4FB784BFFBE -S31AFE00EDE6CA613C000010600000107FE90039386000044082002E -S31AFE00EDFB303C600020606300207FE318387C6300D07C63FE7082 -S31AFE00EE107C6018F8546307BC540007387C63037848000008380E -S31AFE00EE25600000800100147C0803A683E1000C382100104E800B -S31AFE00EE3A00203D20FE00392920007C0348407C8023783960008B -S31AFE00EE4F004181000C7C0048404181001C3D20FE0138891D4C74 -S31AFE00EE647C032040418100107C00204040810008396000017D28 -S31AFE00EE79635B784E8000207D588AA6554A0FFE2C0A00004182B2 -S31AFE00EE8E0040380000807C0903A639200000612010003D600EB0 -S31AFE00EEA3007C0004AC7D398BA67D788BA67C198BA67D788BA631 -S31AFE00EEB8392900104200FFE03C0004007C0004AC7C188BA63D40 -S31AFE00EECD60FE00380000AA980B055539200055992B02AA380099 -S31AFE00EEE20090980B0555892B00002C0A000099230000880B0051 -S31AFE00EEF701392000FF98030001992B0000418200103D600200D7 -S31AFE00EF0C7C0004AC7D788BA6386000004E8000207C6A1B787C1F -S31AFE00EF21F88AA654E70FFE2C07000041820040380000807C09F4 -S31AFE00EF3603A639200000612010003D600E007C0004AC7D398B17 -S31AFE00EF4BA67D788BA67C198BA67D788BA6392900104200FFE062 -S31AFE00EF603C0004007C0004AC7C188BA655480010396000AA99DE -S31AFE00EF7568055539200055992802AA38000080980805559968F3 -S31AFE00EF8A0555992802AA392000327D2903A62F870000380000DF -S31AFE00EF9F30980A0000396A0001420000003D20004C7D2903A6A9 -S31AFE00EFB4880A00005400067261294B407D2903A65400063E8862 -S31AFE00EFC96A0000546906727C09000041820014706000207D20A7 -S31AFE00EFDE4B78408200084200FFE4380000FF98080000892A00DE -S31AFE00EFF3007D6A5B782C0900FF3D2000014082001C3529FFFF7F -S31AFE00F00840810014880A0000394A00012C0000FF4182FFEC7DAE -S31AFE00F01D2BFE707D604A787C0058507C00FE707C6300384D9E92 -S31AFE00F03200203C0002007C0004AC7C188BA64E8000209421FFD4 -S31AFE00F047F093C1000893E1000C7D588AA6554A0FFE2C0A0000FD -S31AFE00F05C41820040380000807C0903A639200000612010003D8B -S31AFE00F071000E007C0004AC7D398BA67D188BA67C198BA67D1844 -S31AFE00F0868BA6392900104200FFE03D2004007C0004AC7D388BE0 -S31AFE00F09BA62C0500002F8A0000546A0010408100A03BC000AAF8 -S31AFE00F0B03BE00055398000A038C000FF9BCA05559BEA02AA99FE -S31AFE00F0C58A0555880400003920003198030000380000327C09AE -S31AFE00F0DA03A63904000138E300013929FFFF4200FFFC880300F2 -S31AFE00F0EF007D2903A6540006725400063E896300005569067233 -S31AFE00F1047C09000041820014716000207D204B78408200084239 -S31AFE00F11900FFE498CA000089230000880400007D0443787C099F -S31AFE00F12E00007CE33B784182000C396000FF4800000C34A5FF23 -S31AFE00F143FF4181FF787CA8FE707D002A787C0040507C00FE70D4 -S31AFE00F158392000FF992A00007D6B0038419E00103D2002007C99 -S31AFE00F16D0004AC7D388BA67D635B7883C1000883E1000C38212B -S31AFE00F18200104E8000209421FFF87C0802A69001000C3803FFC7 -S31AFE00F197FE2800001D418100A03D60FE01396B40B05400103AEC -S31AFE00F1AC7D4B002E3D20FE01392940B07D4A4A147D4903A64EC4 -S31AFE00F1C18004203860000248000078386000414BFFA29154632A -S31AFE00F1D67F3E2C0300024182004028030002418100102C030001 -S31AFE00F1EB01418200384800004C2C030004418200242C0300082A -S31AFE00F2004082003C38600008480000383860000E480000303881 -S31AFE00F21560000C4800002838600004480000203860000548001B -S31AFE00F22A00183860000A480000103860000B480000083860002E -S31AFE00F23F0F8001000C7C0803A6382100084E8000203D20000041 -S31AFE00F254816939A0806B00985463C23E4E8000209421FFF87C8E -S31AFE00F2690802A69001000C7C641B78386000404BFFA1FD80018B -S31AFE00F27E000C7C0803A6382100084E8000209421FFF87C0802BD -S31AFE00F293A69001000C386000414BFFA1C56064060054800420D4 -S31AFE00F2A83D2000005484045E900936F0386000414BFFA1BD80F6 -S31AFE00F2BD01000C7C0803A6382100084E8000209421FFF87C087F -S31AFE00F2D202A69001000C386000414BFFA1853D200000808936F9 -S31AFE00F2E7F0546305E8380000007C642378900936F0386000412F -S31AFE00F2FC4BFFA1798001000C7C0803A6382100084E8000204E3E -S31AFE00F3118000204E8000209421FFF87C0802A69001000C386048 -S31AFE00F32600404BFFA1393D20FE0139299D387C634A7820030013 -S31AFE00F33B007C6019148001000C7C0803A6382100084E800020A7 -S31AFE00F3509421FFF87C0802A69001000C386000404BFFA1013833 -S31AFE00F365830004386000404BFFA1098001000C7C0803A6382129 -S31AFE00F37A00084E8000209421FFF87C0802A69001000C3D2000B2 -S31AFE00F38F00800936F42C0000004082001038000001900936F4B8 -S31AFE00F3A4480008118001000C7C0803A6382100084E8000203DA9 -S31AFE00F3B9200000800936F82C0000004C82002038000001900978 -S31AFE00F3CE36F87D1E9AA67508FFFF3D2000017D2903A63800803D -S31AFE00F3E301B00809C07C0902A6600086A07C0903A6420000006C -S31AFE00F3F880080ABC3D600001600000C090080ABC81280AB861C6 -S31AFE00F40D6B00A2552906AE91280AB8916809F07CE902A690E8B5 -S31AFE00F4220AE038002800B0083E8039683E8038002808B00B008F -S31AFE00F4370239200091B12809C03940000191480030380000185B -S31AFE00F44C980B0004980B0005B14B0006B0EB0028B0EB002CB01C -S31AFE00F461EB002EB14B003039282800B0E900023800B000B00889 -S31AFE00F476280038082810900900043968280838082820B14B00EB -S31AFE00F48B02900B000439202000B1282808380000FF98080A86DE -S31AFE00F4A03920000599280A8A38004820B0080A8239204823B147 -S31AFE00F4B5280A824E80002039233E80A00900207D4302147D4B1B -S31AFE00F4CA5378A00A00007008800041820028A00A00007008208F -S31AFE00F4DF0041820010A00900027D43021448000008394A0008E5 -S31AFE00F4F47C0A58004082FFD47D495378A0090000700080004022 -S31AFE00F50982FFF87D2A4B787C090378A00A0000700B100041820E -S31AFE00F51E0014A00A00007000EFFFB00A0000B12A0002A12A0056 -S31AFE00F533023900000038090001B00A0002816A00045529043ED7 -S31AFE00F5487C8B49AEA00A000060008000B00A0000A12A0000712C -S31AFE00F55D208000418200647D4B53787D0A43783D00000761084C -S31AFE00F572FFFF394A00017C0A400040820038A1230A8239400075 -S31AFE00F587007129FFFDB1230A82A00B00005400047EB00B000039 -S31AFE00F59CA1230A8261290002B1230A82A00B000060008000B0DF -S31AFE00F5B10B0000A00B0000700980004082FFB87D6A5B787D4999 -S31AFE00F5C65378A0090000700080004082FFF87D2A4B78B00A00EB -S31AFE00F5DB024E80002038E33E80A10700107C03422E7D43421491 -S31AFE00F5F0700680004182000C386000004E800020812A000439CF -S31AFE00F6056000008809000098040000B0CA0002812A0004996932 -S31AFE00F61A00007C03422E600080007C03432E7D388AA655290FA6 -S31AFE00F62FFE2C09000041820028812A0004A00700062C0000001C -S31AFE00F644408100187C004BAC7C0004AC3400FFF039290010415F -S31AFE00F65981FFF0386000014E8000209421FFE87C0802A693E165 -S31AFE00F66E00149001001C7C7F1B787FE3FB78388100084BFFFF55 -S31AFE00F683612C0300004182FFF0886100088001001C7C0803A671 -S31AFE00F69883E10014382100184E8000209421FFE87C0802A69327 -S31AFE00F6ADA1000C93C1001093E100149001001C7CBF2B787FE0C1 -S31AFE00F6C2FB782C0000007C7D1B787C9E23783BFFFFFF41820054 -S31AFE00F6D724889E00007FA3EB784BFFFDDD7FE0FB782C00000029 -S31AFE00F6EC3BDE00013BFFFFFF4082FFE48001001C7C0803A683C1 -S31AFE00F701A1000C83C1001083E10014382100184E800020942162 -S31AFE00F716FFE87C0802A693A1000C93C1001093E100149001000A -S31AFE00F72B1C7CBF2B787FE0FB782C0000007C7D1B787C9E23788C -S31AFE00F7403BFFFFFF418200247FA3EB784BFFFF197FE0FB782CAC -S31AFE00F755000000987E00003BDE00013BFFFFFF4082FFE480010D -S31AFE00F76A001C7C0803A683A1000C83C1001083E10014382100E8 -S31AFE00F77F184E8000209421FFE87C0802A69381000893A1000C47 -S31AFE00F79493C1001093E100149001001C3D200000800936FC3D6E -S31AFE00F7A96000001FE0000A3B8B32007C7D1B787C9E237848005D -S31AFE00F7BE0014813C0048386000647D2803A64E8000217FA3EBD3 -S31AFE00F7D3787FC4F3784BFFFE097C631B79408200102C1F000016 -S31AFE00F7E83BFFFFFF4082FFD48001001C7C0803A68381000883E2 -S31AFE00F7FDA1000C83C1001083E10014382100184E800020942166 -S31AFE00F812FF807C8023782C00000590A1001090C1001490E1007F -S31AFE00F827189101001C91210020914100249081000C3860000085 -S31AFE00F83C4182002C28000005418100102C000004418201444845 -S31AFE00F8510002B42C000006418202782C000007418202784800C1 -S31AFE00F86602A03D60FE01800B41FC3D20FE01392941287D2902B4 -S31AFE00F87B147D2903A64E8004203D20FF0061290014800900009C -S31AFE00F8907C0006AC60000400900900007C0006AC480000E03DA1 -S31AFE00F8A520FF0061290200A00900007C0006AC60000008B009A7 -S31AFE00F8BA00007C0006AC480000C03D20FF0061290200A009006E -S31AFE00F8CF007C0006AC60000004B00900007C0006AC480000A0BF -S31AFE00F8E43D20FF0061290240A00900007C0006AC60000004B0F8 -S31AFE00F8F90900007C0006AC480000803D20FF0061290220A00946 -S31AFE00F90E00007C0006AC60000008B00900007C0006AC4800001B -S31AFE00F923603D20FF0061290220A00900007C0006AC6000000428 -S31AFE00F938B00900007C0006AC480000403D20FF00612909408098 -S31AFE00F94D0900007C0006AC60000080900900007C0006AC48007B -S31AFE00F96200203D20FF0061290948800900007C0006AC6000001E -S31AFE00F97710900900007C0006AC3D20000038000001900937003A -S31AFE00F98C480001783D2000008069370038000000900937003DDF -S31AFE00F9A160FE01800B42E43D20FE01392942107D2902147D29CB -S31AFE00F9B603A64E8004203D20FF0061290014800900007C000698 -S31AFE00F9CBAC540005A8900900007C0006AC4800012C3D20FF00DE -S31AFE00F9E061290200A00900007C0006AC7000FFF75400043EB0FF -S31AFE00F9F50900007C0006AC480001083D20FF0061290200A009E0 -S31AFE00FA0A00007C0006AC7000FFFB5400043EB00900007C00067A -S31AFE00FA1FAC480000E43D20FF0061290240A00900007C0006ACF7 -S31AFE00FA347000FFFB5400043EB00900007C0006AC480000C03D8D -S31AFE00FA4920FF0061290220A00900007C0006AC7000FFF7540048 -S31AFE00FA5E043EB00900007C0006AC4800009C3D20FF006129029A -S31AFE00FA7320A00900007C0006AC7000FFFB5400043EB0090000CA -S31AFE00FA887C0006AC480000783D20FF0061290940800900007C43 -S31AFE00FA9D0006AC5400066E900900007C0006AC480000583D2012 -S31AFE00FAB2FF0061290948800900007C0006AC5400073490090082 -S31AFE00FAC7007C0006AC4800003838600036480000303961000890 -S31AFE00FADC380100883920000398610071992100709001007491CA -S31AFE00FAF16100783D200000800B0008806936FC900936FC3821F4 -S31AFE00FB0600804E8000209421FFE87C0802A693C1001093E100D8 -S31AFE00FB1B149001001C7C9E2378392000007C7F1B78913E0000A5 -S31AFE00FB30881F0A86700B00014182006038000001981F0A86A1C5 -S31AFE00FB453F2800391F2800712080004082003C8128000439408B -S31AFE00FB5A0001880900003960B00098010008B1480002B17F28C3 -S31AFE00FB6F0038610008388000014BFFB3A92C0300004182000C7F -S31AFE00FB8438000001901E000038000010901F094C392000017D5E -S31AFE00FB99234B788001001C7C0803A683C1001083E1001438217E -S31AFE00FBAE00184E8000209421FFF07C0802A693C1000893E10098 -S31AFE00FBC30C900100143D2000003BE93200813F00343860FFFF3B -S31AFE00FBD87D2803A64E8000217C7E1B787C1E9AA67400FFFF3DC1 -S31AFE00FBED200000800937042C00000040820094380000019009C7 -S31AFE00FC0237044BFFF7B5813F0034386000007D2803A64E800010 -S31AFE00FC1721815F00147C1E9AA67400FFFF3D20FE01900A00007D -S31AFE00FC2C3929F6A4912A00043D60FE01396BF7143D20FE0191CC -S31AFE00FC416A00083929F4BC912A000C3D60FE01396BF6643D2068 -S31AFE00FC56FE01916A00103929F810912A00143D60FE01396BFB17 -S31AFE00FC6B0C3D20FE01916A00183929F784912A001C801F00347E -S31AFE00FC807FC3F3787C0803A64E800021800100147C0803A6835D -S31AFE00FC95C1000883E1000C382100104E8000209421FFF07C089E -S31AFE00FCAA02A693E1000C900100143D20000080693A087C9F23AE -S31AFE00FCBF782C030000418200084BFFB379881F00002C0000026F -S31AFE00FCD44082002C3C800000388439F8387F001C38A000064B84 -S31AFE00FCE9FFBDCD2C03000040820010801F00103D2000009009D3 -S31AFE00FCFE3708800100147C0803A683E1000C382100104E800045 -S31AFE00FD13209421FE887C0802A69321015C9341016093610164B1 -S31AFE00FD289381016893A1016C93C1017093E101749001017C3DAB -S31AFE00FD3D20000090693A08386100187C791B783880000038A089 -S31AFE00FD52012C4BFFB3C53D200000808939F8396939F8A06B0034 -S31AFE00FD67043D201234394000003CE0000038C00001612955551A -S31AFE00FD7C396000063907370898C100199961001A9121001C9963 -S31AFE00FD9147370899480003380000FF90810034B0610038980191 -S31AFE00FDA6015198C1001899480001994800023CA0FE017D1D4304 -S31AFE00FDBB7838A5FCA498010148980101499801014A9801014BAC -S31AFE00FDD09801014C9801014D9801014E9801014F98010150385A -S31AFE00FDE561000838800044480000D53B8000023B4101483F6062 -S31AFE00FDFA000048001F0D7C7E1B787F23CB783880012C7F45D38E -S31AFE00FE0F7838C0004338E000444800024948000AA1881B370863 -S31AFE00FE242C00000040820028881D00012C0000004082001C8877 -S31AFE00FE391D00022C000000408200108BFD00032C1F00004182FA -S31AFE00FE4E001438600044480000BD386000004800003848001E28 -S31AFE00FE63A97C7E1850280307CF4081FFB07F80E3782C00000084 -S31AFE00FE783B9CFFFF4181FF80386000444800008D3D20000093BA -S31AFE00FE8DE93A003860FFFF8001017C7C0803A68321015C8341B3 -S31AFE00FEA20160836101648381016883A1016C83C1017083E10185 -S31AFE00FEB774382101784E8000203D20000081293A0C2C0900007C -S31AFE00FECC41820024A00900047C0020004082000C3860FFFF4E3B -S31AFE00FEE1800020812900002C0900004082FFE43D2000008009FE -S31AFE00FEF63A0C90693A0CB083000490A3000890030000386000D1 -S31AFE00FF0B004E8000203D20000081293A0C396000002C090000D4 -S31AFE00FF204D8200207D2A4B78A00900047C0018004082001C2C24 -S31AFE00FF350B00004182001080090000900B000048000008814997 -S31AFE00FF4A00007D2B4B78812900002C0900004082FFD03D200066 -S31AFE00FF5F0091493A0C4E8000209421FFE87C0802A69381000897 -S31AFE00FF7493A1000C93C1001093E100149001001C7C7E1B78838B -S31AFE00FF89FE000838000000A13F00066000FFFF7C090000817E59 -S31AFE00FF9E00047C9C23784082000C38000000B01F0006A01F00F9 -S31AFE00FFB3047D635B78B00B0002A3BF0004480008CD7C651B78CA -S31AFE00FFC87FA4EB787FE3FB78480008512C030000408200603D96 -S31AFE00FFDD20000081693A0C2C0B000041820050A12B0004A01FE2 -S31AFE00FFF200027C09000040820034A0BF0004800B00087D635B48 -S31AFE0100077838A5FFF87F86E378A0FF0000389F00087C0803A688 -S31AFE01001C4E8000217FC3F378480007D948000018816B00002C8E -S31AFE0100310B00004082FFB87FC3F378480007C18001001C7C0853 -S31AFE01004603A68381000883A1000C83C1001083E1001438210096 -S31AFE01005B184E8000209421FFD87C0802A6930100089321000C71 -S31AFE01007093410010936100149381001893A1001C93C100209307 -S31AFE010085E100249001002C7C9C2378281C05C07C791B787CB827 -S31AFE01009A2B787CDA33787CFE3B78418100A8386005EA4800063C -S31AFE0100AFED7C7F1B794182009883BF0008381C0008837F0004B4 -S31AFE0100C4B01F000CB3DD0000B35D0002A01F000C392000007F02 -S31AFE0100D985E378B01D0004B13D00067F24CB78387D00084BFF7B -S31AFE0100EEAF553D2000008009370839600011901B000C813800B5 -S31AFE01010300997B0009913B0010A01D00047F63DB78B01B000226 -S31AFE010118A39F000C480007717C651B787F84E3787FA3EB784820 -S31AFE01012D0006F5B07D00067F05C3787FE3FB78388000114800E5 -S31AFE01014204457FE3FB78480006B58001002C7C0803A683010024 -S31AFE010157088321000C83410010836100148381001883A1001CAE -S31AFE01016C83C1002083E10024382100284E8000209421FFD87C16 -S31AFE0101810802A69381001893A1001C93C1002093E1002490019B -S31AFE010196002C7CBF2B787C7D1B787C9C23787CDE33787FE3FBA4 -S31AFE0101AB783881000848001A252C03000041800024A0DF0004E3 -S31AFE0101C0A0FE00047FA3EB787F84E37838A100084BFFFE9138AE -S31AFE0101D56000004800001C3C60FE013C80FE01386342F8388465 -S31AFE0101EA431C4BFFB6593860FFFF8001002C7C0803A6838100CF -S31AFE0101FF1883A1001C83C1002083E10024382100284E80002033 -S31AFE0102149421FFE87C0802A69381000893A1000C93C1001093B5 -S31AFE010229E100149001001C3F8000007CBF2B783D200000807C23 -S31AFE01023E3A107CDD33787CFE3B7893E93A144BFFADF53D200018 -S31AFE0102530081693A182C0B00004182001CB3CB0004801D000020 -S31AFE01026839200000900B0000913C3A10480000143C60FE013842 -S31AFE01027D63432C7FE4FB784BFFB5C18001001C7C0803A6838131 -S31AFE010292000883A1000C83C1001083E10014382100184E80000F -S31AFE0102A7209421FFD07C0802A6934100189361001C938100203D -S31AFE0102BC93A1002493C1002893E1002C90010034A3A600047C26 -S31AFE0102D1BA2B787C7E1B787C9C23783CA0FE017CFF3B7838A590 -S31AFE0102E60214386100087FA4EB784BFFFBD12C030000408000BC -S31AFE0102FB0C3860FFFF48000084813F00043C001062817F000009 -S31AFE01031060004DD37D2900161D6B03E85529D1BE7F6B4A143D92 -S31AFE0103254000003D2000003D60000093CA3A1093893A14934B95 -S31AFE01033A3A18480019CD7FBAEB787C7E1B783BE0FFFF3FA00008 -S31AFE01034F003F800000480019B57C7E18507C03D84040800018EE -S31AFE01036448000559801D3A102C0000004082FFE483FC3A147FD5 -S31AFE01037943D3784BFFFB957FE3FB78800100347C0803A6834187 -S31AFE01038E00188361001C8381002083A1002483C1002883E10001 -S31AFE0103A32C382100304E8000209421FFF07C0802A693E1000C4D -S31AFE0103B8900100147C691B78880900002C0000FF4082002C88DC -S31AFE0103CD0900012C0000FF40820020880900022C0000FF40827F -S31AFE0103E2001488090003386000012C0000FF418200643FE0004F -S31AFE0103F7007D234B78389F370838A000044BFFB6B12C030000B7 -S31AFE01040C4082000C3860000148000040881F3708389F37082CBF -S31AFE0104210000004082002C880400012C000000408200208804AC -S31AFE01043600022C0000004082001488040003386000012C000054 -S31AFE01044B004182000838600000800100147C0803A683E1000C02 -S31AFE010460382100104E8000209421FFD87C0802A693A1001C9390 -S31AFE010475C1002093E100249001002C7C7E1B7883FE00047C9D0C -S31AFE01048A2378387F00104BFFFF1D2C03000041820020A09F003F -S31AFE01049F007FE3FB785484D6BA38A00000480003752C0300003F -S31AFE0104B4418200107FC3F37848000341480000A8801F000C8106 -S31AFE0104C93D0000A17D0004900100089121000CB1610010A13F61 -S31AFE0104DE0000A01F00025523D6BA7C030050B01E000C881F00EB -S31AFE0104F3092C00000641820038418100102C00000141820014E3 -S31AFE010508480000582C000011418200384800004C7C1F1A149014 -S31AFE01051D1E00087FC3F37838810008480005054800003C7C1FBF -S31AFE0105321A14901E00087FC3F3783881000848000AE5480000DE -S31AFE010547247C1F1A14901E00087FC3F378388100084BFFFA1134 -S31AFE01055C4800000C7FC3F378480002998001002C7C0803A68344 -S31AFE010571A1001C83C1002083E10024382100284E8000209421A3 -S31AFE010586FFE07C0802A69361000C9381001093A1001493C10090 -S31AFE01059B1893E1001C900100247C7C1B7883BC000480FC000897 -S31AFE0105B0A13C000C7CFD38507D293A14B13C000CA01D00005449 -S31AFE0105C5E9352E5400053E600040007000F0FF7C004B78B01D2E -S31AFE0105DA000039200000993D00013D000000A1283A1CA01C00BF -S31AFE0105EF0CB13D0004B01D000239690001B1683A1C394000009A -S31AFE01060438000040989D0009981D0008B15D000AB15D00063D00 -S31AFE010619200000800937087CBB2B78901D000C813B00007CE430 -S31AFE01062E3B78913D00107FA3EB7838A00000480001E5B07D0069 -S31AFE0106430A7F83E378389B000438A0080048000371800100241E -S31AFE0106587C0803A68361000C8381001083A1001483C100188340 -S31AFE01066DE1001C382100204E8000203D000000800837182C00CF -S31AFE01068200004C8200203800000190083718380000047C09038C -S31AFE010697A63C8000003D2000013D60000181443A2038A901C02A -S31AFE0106AC390B017038C005EA38E000007D272A147120000239D2 -S31AFE0106C1690002914800007C00002654001FFE7C0000D07D6B94 -S31AFE0106D600787D2900387D295B78912800107D0A4378B0C800B8 -S31AFE0106EB0E390A001438E705EC4200FFC491443A204E8000205E -S31AFE0107009421FFE87C0802A69381000893A1000C93C1001093C4 -S31AFE010715E100149001001C3D2000013BE901703BC000003F807B -S31AFE01072AFE017FFDFB7880DF0010A0FF000EA11F000C813F001F -S31AFE01073F007FC4F3787FA5EB78387C43584BFFB0F93BDE00010F -S31AFE0107542C1E00033BFF00143BBD00144081FFD03D2000003CBB -S31AFE01076960FE0180893A20386343844BFFB0D18001001C7C0866 -S31AFE01077E03A68381000883A1000C83C1001083E1001438210057 -S31AFE010793184E8000203CA0000080653A202C0300004D8200200D -S31AFE0107A83CE00000814737103D20000080093714394A00017CDB -S31AFE0107BDC050503C8000008164370C8103001080030000392866 -S31AFE0107D2001490053A207C0658009123000891030004380000A4 -S31AFE0107E700B003000C914737104C81002090C4370C4E800020A8 -S31AFE0107FC3D400000812A37103D600000800B3A203929FFFF9101 -S31AFE0108112A3710906B3A20900300004E8000203484FFFE418010 -S31AFE0108260018A00300003484FFFE7CA50214386300024080FFB5 -S31AFE01083BF02C04FFFF40820010880300005400402E7CA502142F -S31AFE01085054AB043E54A9843E380000007CA95A146000FFFF7CE9 -S31AFE0108650500004081000C3D25FFFF38A900017CA928F85523A8 -S31AFE01087AC63E5463402E5520063E7C031B784E800020A12300BE -S31AFE01088F0EA003000CA16300107C004A14A143001289230009F9 -S31AFE0108A47C005A147C005214A06300027C004A147C601A144E37 -S31AFE0108B98000209421FFD87C0802A69381001893A1001C93C1FD -S31AFE0108CE002093E100249001002C3F8000003FA000003FC000FE -S31AFE0108E300386005EA4BFFFEB17C7F1B79408200183C60FE0177 -S31AFE0108F8386343944BFFAF494BFFFE0148000000809F0010383A -S31AFE01090D61000838A005EA4BFFDB8D5460043E2C000000B07F9D -S31AFE010922000C41820074A0010014813C37242C00080039290015 -S31AFE01093701913C3724418200182C000806418200347FE3FB789C -S31AFE01094C4BFFFEB14BFFFF94813D371C801F0010392900019107 -S31AFE0109613D371C901F00047FE3FB783881000E4BFFFAF94BFF16 -S31AFE010976FF70813E3720801F001039290001913E3720901F00FB -S31AFE01098B047FE3FB7848000F9D4BFFFF507FE3FB784BFFFE616E -S31AFE0109A08001002C7C0803A68381001883A1001C83C100208320 -S31AFE0109B5E10024382100284E8000209421FFE87C0802A690015B -S31AFE0109CA001C80040000A144000490010008390100083D200052 -S31AFE0109DF00B1480004396939F8A14B0004B0A10014800939F81F -S31AFE0109F4A0A3000C808300109001000EB14100127D0343784B5E -S31AFE010A09FFD83D3D600000812B372839290001912B3728800118 -S31AFE010A1E001C7C0803A6382100184E8000209421FFF07C0802EC -S31AFE010A33A693C1000893E1000C900100147C7F1B78807F0008ED -S31AFE010A487C9E2378A00300002C00080040820050A09F000C3873 -S31AFE010A5DA000004BFFFDC17C631B794082003C813F000838A0C6 -S31AFE010A72000098690000817F0008B06B0002807F0008A09F00FE -S31AFE010A870C4BFFFD99813F00087FC5F378B06900027FE3FB7802 -S31AFE010A9C388000014BFFFAE57FE3FB784BFFFD55800100147CDC -S31AFE010AB10803A683C1000883E1000C382100104E8000209421B2 -S31AFE010AC6FFD87C0802A693410010936100149381001893A100C7 -S31AFE010ADB1C93C1002093E100249001002C7C9B23787C7E1B78DD -S31AFE010AF0736000023B9E002C83BC000483FC00087CBA2B78412E -S31AFE010B0582004438000018B01C000C813F000C396000065169C3 -S31AFE010B1AE0063C000204913F000C600005B490010008387F0054 -S31AFE010B2F143881000838A000044BFFA50938000000B01E0016E7 -S31AFE010B4448000020A13E00163960000539290014B13C000C80AD -S31AFE010B591F000C5160E006901F000C801F000C39600000516010 -S31AFE010B6EC10E901F000C813E00542C1A0000913F0004801E0018 -S31AFE010B8350B17F0010901F000840820054A01E0012B01F00005C -S31AFE010B98A13E00149B7F000DB13F0002A01E00162C00000041F6 -S31AFE010BAD82000C63600008981F000D380005B4B01F000EB35F31 -S31AFE010BC200123D2000008009370839600006901D000C813E00CB -S31AFE010BD708997D0009913D0010A01C000C7FA3EB78B01D0002E3 -S31AFE010BECA3BC000C4BFFFC9D7C651B787FA4EB787FE3FB784B87 -S31AFE010C01FFFC21B07F00107F83E3783880000638BE00084BFF1B -S31AFE010C16F971801E00042C00000A408200243C8000013CA0FE05 -S31AFE010C2B0138A50E187FC6F378387E00186084D4C048000B5D05 -S31AFE010C4048000034881F000D7009000340820010A01E00162C1C -S31AFE010C550000004182001C3CA0FE0138A50DF07FC6F378387E8B -S31AFE010C6A0018388003E848000B298001002C7C0803A68341009B -S31AFE010C7F10836100148381001883A1001C83C1002083E100240B -S31AFE010C94382100284E8000209421FFE07C0802A69361000C9384 -S31AFE010CA981001093A1001493C1001893E1001C900100247C7CAF -S31AFE010CBE1B7883FC0008815C0004A0DF0000A0FF0002807F0002 -S31AFE010CD30480BF000839000014B11C000C3BEA0014801F000CB2 -S31AFE010CE839200005396000005120E0065160C10E901F000C3930 -S31AFE010CFD200400B13F000EB17F0010B17F0012B0EA0014B0DFFC -S31AFE010D120002991F000D907F000890BF00043D20000080093779 -S31AFE010D27087C9B2378900A000C813B000038000006912A00108D -S31AFE010D3C980A0009A13C000C7D435378B12A0002A3BC000C4BEB -S31AFE010D51FFFB3D7C651B787FA4EB787FE3FB784BFFFAC1B07F4E -S31AFE010D6600107F83E3787F65DB78388000064BFFF8118001003D -S31AFE010D7B247C0803A68361000C8381001083A1001483C1001875 -S31AFE010D9083E1001C382100204E8000203D20000081293A2439C4 -S31AFE010DA56000002C0900004D8200207D2A4B787C0918004082E7 -S31AFE010DBA001C2C0B00004182001080090000900B00004800008D -S31AFE010DCF08814900007D2B4B78812900002C0900004082FFD459 -S31AFE010DE43D20000091493A244E8000209421FFF87C0802A6900A -S31AFE010DF901000C3880000038A000014BFFFCC18001000C7C082A -S31AFE010E0E03A6382100084E8000209421FFF87C0802A690010069 -S31AFE010E230C38000000900300044BFFFF718001000C7C0803A666 -S31AFE010E38382100084E8000209421FFF07C0802A693E1000C9071 -S31AFE010E4D0100147C7F1B784800001080030000901F00404BFFD4 -S31AFE010E62F99D807F00402C0300004082FFEC800100147C0803A9 -S31AFE010E77A683E1000C382100104E8000209421FFE87C0802A62C -S31AFE010E8C93A1000C93C1001093E100149001001C7C7D1B7838AF -S31AFE010EA1000000901D0004387D00184800097D7FA3EB784BFF1C -S31AFE010EB6FF8D7FA3EB784BFFFEE18001001C7C0803A683A100FA -S31AFE010ECB0C83C1001083E10014382100184E8000208124000829 -S31AFE010EE080E30050814900048009000CA164000C7D0750515458 -S31AFE010EF50036BA7D6058507D090214418100707C0A38507D60B5 -S31AFE010F0A58517D08021440810060814300407D275A142C0A001C -S31AFE010F1F0038000000912300509004000041820030800A00006B -S31AFE010F342C0000004182001C7D49537881290000800900002CA8 -S31AFE010F490000004082FFF47D2A4B78908A000048000010910369 -S31AFE010F5E00449083004091630048386000014E80002038600087 -S31AFE010F73004E8000209421FFF07C0802A693C1000893E1000CCA -S31AFE010F8890010014812400087C7F1B7883C90008801F00547DAB -S31AFE010F9D20F0514081006C387F001848000881811F0054A15F18 -S31AFE010FB200167D68F0505549043E7F8B48004FFEE3827C00008A -S31AFE010FC726540007FE7C0000D07D2900787D6B00387D6B4B795B -S31AFE010FDC408100307D2B50505525043E2C0500007C085A149053 -S31AFE010FF11F0054B13F001641820014807F0034386300147C83B5 -S31AFE0110065A144BFFA039800100147C0803A683C1000883E100CD -S31AFE01101B0C382100104E8000209421FFE07C0802A69361000C98 -S31AFE0110309381001093A1001493C1001893E1001C900100247C0D -S31AFE0110457C1B78807C0004A01C000C83FC0008B0030002A3BC1F -S31AFE01105A000C7C9E23784BFFF82D7C651B787FA4EB787FE3FBF5 -S31AFE01106F784BFFF7B12C0300003B600000408203A03D20000071 -S31AFE01108483A93A244800000883BD00002C1D00004182037CA10C -S31AFE0110993D0012A01F00027C0900004082FFE8A13D00142C09D8 -S31AFE0110AE000041820028A01F00007C0900004082FFD07FC3F333 -S31AFE0110C378389D000838A000044BFFA9E92C0300004082FFB85E -S31AFE0110D8801D0004817E0004A13E00082C000002917D000CB17A -S31AFE0110ED3D001041820024881F000D70090004418200187FA387 -S31AFE011102EB784BFFFD817F83E3784BFFF6F14800031C813D00F5 -S31AFE011117043809FFFF28000009418102FC3D60FE01396B43B84F -S31AFE01112C5400103A7D4B002E3D20FE01392943B87D4A4A147DBA -S31AFE0111414903A64E800420881F000D7009000241820040380046 -S31AFE0111560002901D0004813F0004A17F000039290001913D00B7 -S31AFE01116B50B17D0014801E000039200000901D0008B13D004CF2 -S31AFE0111807FA3EB78B13D001638800012480002247FC4F3787F67 -S31AFE01119583E3784BFFFB0548000280387D001848000685881F07 -S31AFE0111AA000D700900044182001038000001901D00044800029A -S31AFE0111BF6070090002408202387009001041820250813D00548F -S31AFE0111D4807F0008392900017C0348004082023C380000049004 -S31AFE0111E97D0054901D00044800022C881F000D83DD0050700917 -S31AFE0111FE0010418200107FA3EB787F84E3784BFFFD6D7FA3EB50 -S31AFE011213787F84E3784BFFFCC5881F000D7C7B1B787009000128 -S31AFE01122841820024807F0004801D00507C030000408200143848 -S31AFE01123D03000139200005901D0050913D0004801D00507C00FD -S31AFE011252F00040820010A01D004C2C000000418201BCA3FD006B -S31AFE011267162C1F000040820024387D0018480005B57FA3EB78D2 -S31AFE01127C3880001038A000004BFFF841B3FD004C480001903828 -S31AFE011291000001B01D004C48000184881F000D7009001041825C -S31AFE0112A601787FA3EB787F84E3784BFFFCC9813D0054801F0012 -S31AFE0112BB08392900017C0048004082015838000000901D0004E6 -S31AFE0112D07FA3EB784BFFFAC948000144881F000D700900104167 -S31AFE0112E58200607FA3EB787F84E3784BFFFC89813D0054801FAA -S31AFE0112FA0008392900017C00480040820040881F000D7009007C -S31AFE01130F014182002C813D00503800000A39290001913D005003 -S31AFE011324901D00047FA3EB783880001038A000004BFFF79148BF -S31AFE01133900000C38000008901D0004881F000D700900014182AC -S31AFE01134E00D0387D0018480004D5813D00503800000939290016 -S31AFE01136301913D0050901D00047FA3EB78388000114800003CCE -S31AFE0113787FA3EB787F84E3784BFFFB5D881F000D7C7B1B787028 -S31AFE01138D0900014182008C813D00503800000A39290001913D6C -S31AFE0113A20050901D00047FA3EB783880001038A000004BFFF7CA -S31AFE0113B71148000064881F000D70090010418200587FA3EB7882 -S31AFE0113CC7F84E3784BFFFBA9813D0054801F0008392900017C23 -S31AFE0113E100480040820038387D00184800043D3800000A901D6B -S31AFE0113F60004480000247FA3EB783880000038A000014BFFF617 -S31AFE01140BBD480000107FC4F3787F83E3784BFFF8852C1B000099 -S31AFE0114204082000C7F83E3784BFFF3D5800100247C0803A68320 -S31AFE01143561000C8381001083A1001483C1001883E1001C3821AF -S31AFE01144A00204E8000209421FFF87C0802A69001000C4BFFF4C7 -S31AFE01145F61480004218001000C7C0803A6382100084E8000209C -S31AFE0114749421FFE87C0802A69381000893A1000C93C100109343 -S31AFE011489E100149001001C7C7D1B787C9C23783880000038A0D8 -S31AFE01149E06444BFF9C793D600000810B3A24381D006C395D00AD -S31AFE0114B358901D0034915D003039200001380005EA93AB3A24AB -S31AFE0114C8913D0004B39D0012B01D003A911D0000915D003C38BF -S31AFE0114DD6000008001001C7C0803A68381000883A1000C83C14B -S31AFE0114F2001083E10014382100184E8000209421FFF07C0802CF -S31AFE011507A693E1000C900100147C7F1B78480000084BFFFF399F -S31AFE01151C801F00042C00000041820010A01F00162C00000040D2 -S31AFE01153182FFE8800100147C0803A683E1000C382100104E80CE -S31AFE01154600209421FFF07C0802A693E1000C900100147C7F1B60 -S31AFE01155B784BFFFFA5817F000469690004200900007D20491413 -S31AFE01157069600002214000007C0A01147D2A037941820020385C -S31AFE011585000007901F00047FE3FB783880001138A000004BFFD2 -S31AFE01159AF52D480000242C0B00054082001C38000006901F00A2 -S31AFE0115AF047FE3FB783880001138A000004BFFF5097FE3FB788B -S31AFE0115C44BFFF87D800100147C0803A683E1000C382100104E65 -S31AFE0115D98000209421FFE87C0802A69381000893A1000C93C1E0 -S31AFE0115EE001093E100149001001C7CBE2B797C7F1B787C9D23F6 -S31AFE0116037840810010801F00482C000000408200143860000003 -S31AFE011618480000B8907F0048480000AC3B800000480000648086 -S31AFE01162D9F00447FA3EB784BFF9A0D807F0040801F0048812380 -S31AFE01164200007FC0F050913F00407F9C02147FBD02144BFFF141 -S31AFE011657A9807F00402C0300004182FFBC81630008A123000C28 -S31AFE01166C800B000C540036BA7D204850913F0048800B000C5451 -S31AFE0116810036BA7D6B0214917F00442C1E00004182003C80BF85 -S31AFE01169600487C1E28004080FF90809F00447FA3EB787FC5F3C2 -S31AFE0116AB784BFF9995813F0044801F00487D29F2147C1E0050B4 -S31AFE0116C0901F0048913F00447F9CF2147F83E3788001001C7C6E -S31AFE0116D50803A68381000883A1000C83C1001083E100143821E9 -S31AFE0116EA00184E8000209421FFF07C0802A693C1000893E10040 -S31AFE0116FF0C900100147CBE2B797C7F1B78807F00344081006C54 -S31AFE011714813F00043929FFFC280900014081000C3860FFFF48BD -S31AFE011729000058A01F00162C00000040820048213E05B47D2985 -S31AFE01173E49107D294BB87D2048F87FC94838700005B47D3E0303 -S31AFE01175378386300147FC5F3784BFF98E57FE3FB78B3DF001662 -S31AFE0117683880001038A000004BFFF3557FC3F378480000083800 -S31AFE01177D600000800100147C0803A683C1000883E1000C38211B -S31AFE01179200104E8000209421FFE87C0802A69381000893A10027 -S31AFE0117A70C93C1001093E100149001001C7C7F1B787CBD2B7819 -S31AFE0117BC7CDC3378909F0004480005453D20000081293A289052 -S31AFE0117D17F00082C09000093BF000C939F0010418200187C0942 -S31AFE0117E6F80041820020812900002C0900004082FFF03D200021 -S31AFE0117FB0080093A2893E93A28901F00008001001C7C0803A692 -S31AFE0118108381000883A1000C83C1001083E10014382100184EF7 -S31AFE0118258000203D20000081293A28394000002C0900004D8223 -S31AFE01183A00207D2B4B787C091800408200202C0A000041820091 -S31AFE01184F1080090000900A00004800001C8169000048000014A2 -S31AFE0118647D2A4B78812900002C0900004082FFD03D20000091A2 -S31AFE011879693A284E8000209421FFE87C0802A693A1000C93C140 -S31AFE01188E001093E100149001001C3D20000083E93A283BC000D5 -S31AFE0118A3002C1F00003FA000004182006448000459801F00088E -S31AFE0118B8813F00047C6018507C0348404180003C2C1E0000417F -S31AFE0118CD820010801F0000901E00004800000C801F0000901D82 -S31AFE0118E23A28801F000C807F00107C0803A63BC000004E8000DA -S31AFE0118F72183FD3A284800000C7FFEFB7883FF00002C1F0000C3 -S31AFE01190C4082FFA48001001C7C0803A683A1000C83C10010838B -S31AFE011921E10014382100184E8000209421FFE87C0802A693817C -S31AFE011936000893A1000C93C1001093E100149001001C7C7D1BA2 -S31AFE01194B7883FD0004A13F0002A01F00006929080021690000C1 -S31AFE0119607D2B491468000001216000007C0B01147C0B48394199 -S31AFE0119758200D83FC00000387F0018389E370838A000044BFFF5 -S31AFE01198AA12D2C030000408200BCA01F00062C00000140820014 -S31AFE01199F64813F000E38000002B01F0006913F0018801F00085E -S31AFE0119B4391F0008A1280004901F0012389F0012B124000480E9 -S31AFE0119C91E37083D200000901F000E814939F8392939F8A169F5 -S31AFE0119DE0004915F0008B16800043800001CB01D000C7FA3EB9C -S31AFE0119F37838A008064BFFEFC9480000502C00000240820048AA -S31AFE011A083FC00001801E19703B9E19702C000000418200348098 -S31AFE011A1D7C0008389F000E38A000044BFFA08D7C631B794082BE -S31AFE011A32001CA01F000C817F0008813C0004B009000491690033 -S31AFE011A4700907E19707FA3EB784BFFEDAD8001001C7C0803A6BB -S31AFE011A5C8381000883A1000C83C1001083E10014382100184EA9 -S31AFE011A718000209421FFD87C0802A6936100149381001893A19B -S31AFE011A86001C93C1002093E100249001002C7C7F1B787C9D2397 -S31AFE011A9B783860002A4BFFECF97C7E1B79408200184800010017 -S31AFE011AB07FC3F3784BFFED4938600000480000F4817E000439DF -S31AFE011AC5200004992B0005394000013900080038000006980B7E -S31AFE011ADA0004B14B0000B14B0006B10B00023D20000080093715 -S31AFE011AEF083D400000900B000E392A39F8A1090004800A39F8B2 -S31AFE011B04B10B000C900B0008813F00003D400001912B00183911 -S31AFE011B196A1970380000FF93EB00089801000D93AB00043920C1 -S31AFE011B2E0001912A197098010008980100099801000A980100D9 -S31AFE011B430B9801000C3BA000073F8000013B60001CB37E000C42 -S31AFE011B587FC3F3783881000838A008064BFFEE5D480001A17C24 -S31AFE011B6D7F1B78480000144BFFED49801C19702C00000041825C -S31AFE011B82FF30480001857C7F1850280300F94081FFE47FA0EB17 -S31AFE011B97782C0000003BBDFFFF4181FFB47FC3F3784BFFEC55ED -S31AFE011BAC3860FFFF8001002C7C0803A683610014838100188318 -S31AFE011BC1A1001C83C1002083E10024382100284E80002094213D -S31AFE011BD6FFD87C0802A6930100089321000C93410010936100BE -S31AFE011BEB149381001893A1001C93C1002093E100249001002C87 -S31AFE011C003D2000013B29197C3B1900967C7B1B787C9C23787FCD -S31AFE011C153DCB783B4000007FBEEB787F63DB787FC4F37838A05F -S31AFE011C2A00044BFF9E892C0300007F5FD378418200383BBE00DF -S31AFE011C3F0A7C1DC0003B5F000A4081FFD4801B00007F63DB7820 -S31AFE011C54901C0000389C00044BFFFE192C030000408000283842 -S31AFE011C6960FFFF4800006C7C1AC82EA13D0008817D0004B13CEE -S31AFE011C7E0008901C0000917C00044800004C3CC0000081263719 -S31AFE011C932C80FC0000390900011D29000A3D600001A15C000859 -S31AFE011CA8801C0004396B197C7CE9592E7D295A142C080010B154 -S31AFE011CBD490008900900049106372C4082000C38000000900689 -S31AFE011CD2372C386000008001002C7C0803A683010008832100F3 -S31AFE011CE70C83410010836100148381001883A1001C83C100204B -S31AFE011CFC83E10024382100284E8000209421FFF87C0802A6906F -S31AFE011D1101000C3D2000003929320080090048386003E87C08E2 -S31AFE011D2603A64E8000213D200000806937303863000190693792 -S316FE011D3B308001000C7C0803A6382100084E80002059 -S31AFE011D503C746F7069633E0048656C702061626F75742068652F -S31AFE011D656C703F0000000068656C70000000005B2D77203C74D1 -S31AFE011D7A696D656F75743E5D205B656E7472795D0000457865F5 -S31AFE011D8F6375746520636F64652061742061206C6F63617469BC -S31AFE011DA46F6E0000676F00002D62203C6C6F636174696F6E3EF0 -S31AFE011DB9205B2D6C203C6C656E6774683E5D00446973706C6126 -S31AFE011DCE7920286865782064756D702920612072616E67652028 -S31AFE011DE36F66206D656D6F72790000000064756D7000000000A2 -S31AFE011DF85B4F4E207C204F46465D00004D616E616765206D61AE -S31AFE011E0D6368696E652063616368657300000063616368650039 -S31AFE011E2200000A526564426F6F7428746D292064656275672074 -S31AFE011E37656E7669726F6E6D656E74202D206275696C7420250A -S31AFE011E4C732C2025730A000031323A33373A3138000000004F22 -S31AFE011E616374203230203230303000506C6174666F726D3A208D -S31AFE011E76257320282573292025730A0000004D6F746F726F6C03 -S31AFE011E8B61204D425800000000506F7765725043203836300077 -S31AFE011EA000000000436F70797269676874202843292032303009 -S31AFE011EB5302C20526564204861742C20496E632E0A0A00524104 -S31AFE011ECA4D3A2025702D25700A003D3D20457865637574696E17 -S31AFE011EDF6720626F6F742073637269707420696E2025642073C6 -S31AFE011EF465636F6E6473202D20656E746572205E4320746F20E9 -S31AFE011F0961626F72740A00526564426F6F743E200000002A2A3B -S31AFE011F1E204572726F723A20496C6C6567616C20636F6D6D613E -S31AFE011F336E643A2025730A00006F6E00006F666600496E766120 -S31AFE011F486C6964206361636865206D6F64653A2025730A00630E -S31AFE011F5D6163686573203F0A00000025730A202020257320251E -S31AFE011F72730A0000000062617365206164647265737300000037 -S31AFE011F87006C656E677468000044756D702077686174205B6C6D -S31AFE011F9C6F636174696F6E5D3F0A0000776169742074696D6514 -S31AFE011FB16F7574000000007374617274696E6720616464726532 -S31AFE011FC673730000000041626F757420746F20737461727420AF -S31AFE011FDB657865637574696F6E206174202570202D2061626FCF -S31AFE011FF072742077697468205E432077697468696E20256420D8 -S31AFE0120057365636F6E64730A0000006574683000000000717571 -S31AFE01201A6963635F657468000000515549434320457468657250 -S31AFE01202F6E65743A204E6F206672656520786D69742062756638 -S31AFE012044666572730A000000000000005B2D765D205B2D725DF6 -S31AFE012059205B2D62203C6D656D5F616464723E5D203C66696C9C -S31AFE01206E655F6E616D653E0000004C6F616420612066696C65F4 -S31AFE012083006C6F616400000000454C4620696D61676573206EA8 -S31AFE0120986F7420737570706F727465640A000000496E76616C41 -S31AFE0120AD696420532D7265636F7264206174206F666673657491 -S31AFE0120C22025702C20696E7075743A2025630A000000426164E0 -S31AFE0120D720532D7265636F726420636F756E74206174206F669D -S31AFE0120EC667365742025700A0000000041646472657373206F14 -S31AFE0121016666736574203D2025700A00000000417474656D7025 -S31AFE0121167420746F206C6F616420532D7265636F726420646174 -S31AFE01212B746120746F20616464726573733A202570205B6E6F75 -S31AFE0121407420696E2052414D5D0A00002A2A2A205761726E6914 -S31AFE0121556E672120436865636B73756D206661696C75726520FF -S31AFE01216A2D20416464723A20256C782C202530326C58203C3EFF -S31AFE01217F202530326C580A0000456E74727920706F696E743A3B -S31AFE0121942025702C20616464726573732072616E67653A20259E -S31AFE0121A9702D25700A0000496E76616C696420532D7265636FD0 -S31AFE0121BE7264206174206F6666736574203078256C782C207404 -S31AFE0121D37970653A2025780A0000000000FFFF3050FFFF2EB445 -S31AFE0121E8FFFF2EB4FFFF2EB4FFFF3038FFFF3038FFFF3038FFEC -S31AFE0121FDFF3000FFFF3000FFFF3000256308000A0000007573BB -S31AFE0122126167653A206C6F6164203C66696C655F6E616D653E51 -S31AFE012227205B2D725D205B2D765D205B2D68203C686F73743E43 -S31AFE01223C5D205B2D6D207B54465450207C205A4D4F44454D7D38 -S31AFE0122515D205B2D62203C626173655F616464726573733E5D35 -S31AFE0122660A00766572626F7365006C6F6164207261772064616F -S31AFE01227B74610000006C6F6164206164647265737300000000CE -S31AFE012290646F776E6C6F6164206D6F6465202854465450206F02 -S31AFE0122A572205A4D4F44454D290000686F7374206E616D6520F9 -S31AFE0122BA284950206164647265737329000066696C65206E618B -S31AFE0122CF6D65000000496E76616C696420495020616464726583 -S31AFE0122E473733A2025730A007A6D6F64656D00007466747000B4 -S31AFE0122F900000054465450206D6F646520726571756972657338 -S31AFE01230E206120776F726B696E67206E6574776F726B0A0000DF -S31AFE01232300496E76616C696420276D6F6465273A2025730A00CA -S31AFE01233846696C65206E616D65206D697373696E670A000043E3 -S31AFE01234D616E2774206C6F616420272573273A2025730A00004A -S31AFE01236200004572726F722072656164696E6720686561646546 -S31AFE012377722076696120544654503A2025730A0000536F72727A -S31AFE01238C792C207A6D6F64656D20646F776E6C6F6164206E6F71 -S31AFE0123A1742079657420617661696C61626C650A0000005261BE -S31AFE0123B677206C6F61642072657175697265732061206D656D66 -S31AFE0123CB6F727920616464726573730A005261772066696C65A4 -S31AFE0123E0206C6F616465642025702D25700A0000454C460055AD -S31AFE0123F56E7265636F676E697A656420696D6167652074797096 -S31AFE01240A653A20256C780A000000000000007B636D64737D0047 -S31AFE01241F004D616E61676520464C41534820696D616765730036 -S31AFE012434666973005B2D6C5D000000004D616E61676520636FC0 -S31AFE0124496E66696775726174696F6E206B65707420696E2046A2 -S31AFE01245E4C415348206D656D6F727900000066636F6E666967A7 -S31AFE012473005B2D665D00000000496E697469616C697A6520468C -S31AFE0124884C41534820496D6167652053797374656D205B464960 -S31AFE01249D535D00696E69740000000000000000446973706C6164 -S31AFE0124B27920636F6E74656E7473206F6620464C41534820491D -S31AFE0124C76D6167652053797374656D205B4649535D0000000002 -S31AFE0124DC6C69737400000000446973706C617920667265652072 -S31AFE0124F15B617661696C61626C655D206C6F636174696F6E738C -S31AFE0125062077697468696E20464C41534820496D616765205304 -S31AFE01251B797374656D205B4649535D0000667265650000000018 -S31AFE0125302D66203C666C6173685F616464723E202D6C203C6CDB -S31AFE012545656E6774683E00457261736520464C41534820636FB8 -S31AFE01255A6E74656E74730000000065726173650000006E616D7F -S31AFE01256F6500000000446973706C617920616E20696D61676505 -S31AFE0125842066726F6D20464C41534820496D6167652053797379 -S31AFE01259974656D205B4649535D000064656C65746500004C6FFA -S31AFE0125AE616420696D6167652066726F6D20464C415348204960 -S31AFE0125C36D6167652053797374656D205B4649535D20696E749A -S31AFE0125D86F2052414D0000006C6F6164000000002D62203C6D82 -S31AFE0125ED656D5F626173653E202D6C203C696D6167655F6C6582 -S31AFE0126026E6774683E205B2D73203C646174615F6C656E677445 -S31AFE012617683E5D205B2D66203C666C6173685F616464723E5D99 -S31AFE01262C205B2D65203C656E7472795F706F696E743E5D205B5A -S31AFE0126412D72203C72616D5F616464723E5D203C6E616D653E74 -S31AFE012656000043726561746520616E20696D61676500637265CA -S31AFE01266B61746500002A2A2A20696E76616C696420276669730D -S31AFE0126802720636F6D6D616E643A2025730A00006669732000BC -S31AFE01269500000066756C6C20696E697469616C697A6174696FDE -S31AFE0126AA6E2C2065726173657320616C6C206F6620666C6173C5 -S31AFE0126BF680000000041626F757420746F20696E697469616C91 -S31AFE0126D4697A65205B666F726D61745D20464C41534820696DBF -S31AFE0126E96167652073797374656D002A2A2041626F72746564B0 -S31AFE0126FE0A002A2A2A20496E697469616C697A6520464C4153C2 -S31AFE0127134820496D6167652053797374656D0A000020202069E9 -S31AFE0127286E697469616C697A6174696F6E206661696C65642073 -S31AFE01273D25703A202578282573290A00000000202020205761CB -S31AFE012752726E696E673A2064657669636520636F6E74656E746A -S31AFE01276773206E6F74206572617365642C20736F6D6520626CF2 -S31AFE01277C6F636B73206D6179206E6F7420626520757361626C9D -S31AFE012791650A00526564426F6F7400526564426F6F745B626143 -S31AFE0127A6636B75705D00526564426F6F7420636F6E66696700C4 -S31AFE0127BB00464953206469726563746F72790000004572726F95 -S31AFE0127D0722077726974696E6720696D61676520646573637205 -S31AFE0127E56970746F72732061742025703A202578282573290AA5 -S31AFE0127FA00004E616D652020202020202020202020202020463E -S31AFE01280F4C41534820616464722020204D656D20616464722072 -S31AFE0128242020204C656E67746820202020456E74727920706F47 -S31AFE012839696E740A000000252D313673202030782530386C58CB -S31AFE01284E20202030782530386C58202030782530366C582020A0 -S31AFE01286330782530386C580A00202030782530386C58202E2EA3 -S31AFE0128782030782530386C580A0000006D656D6F7279206261A7 -S31AFE01288D736520616464726573730072616D20626173652061D7 -S31AFE0128A264647265737300000000656E74727920706F696E741B -S31AFE0128B7206164647265737300464C415348206D656D6F7279DA -S31AFE0128CC20626173652061646472657373000000696D6167652E -S31AFE0128E1206C656E677468205B696E20464C4153485D00696D28 -S31AFE0128F66167652073697A65205B61637475616C206461746111 -S31AFE01290B5D0000000066696C65206E616D65000000696E766146 -S31AFE0129206C696420617267756D656E7473000000726571756948 -S31AFE01293572656420706172616D65746572206D697373696E6752 -S31AFE01294A0000496E76616C696420464C41534820696D616765FB -S31AFE01295F2073697A652F6C656E67746820636F6D62696E617465 -S31AFE012974696F6E00496E76616C696420464C4153482061646465 -S31AFE012989726573733A20257020282573290A0020202076616CD2 -S31AFE01299E69642072616E67652069732025702D25700A000000A8 -S31AFE0129B3002A2A205741524E494E473A2052414D20616464728B -S31AFE0129C86573733A202570206D617920626520696E76616C69CA -S31AFE0129DD640A004E616D6520697320746F6F206C6F6E672C2067 -S31AFE0129F26D757374206265206C657373207468616E20256420B0 -S31AFE012A0763686172730A00000043616E2774206C6F6361746555 -S31AFE012A1C20256C64206279746573206672656520696E20464CD9 -S31AFE012A314153480A000000496D61676520666F756E642C2062D8 -S31AFE012A46757420464C415348206164647265737320696E636F30 -S31AFE012A5B72726563740A000000496D61676520666F756E642CEC -S31AFE012A7020627574204C454E47544820697320696E636F727256 -S31AFE012A856563740A000000416E20696D616765206E616D6564FA -S31AFE012A9A202725732720657869737473000043616E277420701F -S31AFE012AAF726F6772616D207468697320726567696F6E202D209C -S31AFE012AC4636F6E7461696E7320636F646520696E207573652159 -S31AFE012AD90A000043616E277420657261736520726567696F6E58 -S31AFE012AEE2061742025703A202578282573290A00000043616E28 -S31AFE012B0327742070726F6772616D20726567696F6E206174204C -S31AFE012B1825703A202578282573290A004572726F7220657261C2 -S31AFE012B2D73696E672061742025703A202578282573290A000049 -S31AFE012B4200004572726F722070726F6772616D6D696E6720612B -S31AFE012B57742025703A202578282573290A000000006C656E67AB -S31AFE012B6C746800006D697373696E6720617267756D656E7400F6 -S31AFE012B81000000696D616765206E616D65000044656C65746523 -S31AFE012B9620696D61676520272573270000004E6F20696D616781 -S31AFE012BAB65202725732720666F756E640A000000004E6F74200E -S31AFE012BC061206C6F616461626C6520696D6167650A00000046D3 -S31AFE012BD54C4153483A2064726976657220696E697420666169B4 -S31AFE012BEA6C6564212C207374617475733A2025780A00464C41B7 -S31AFE012BFF53483A202570202D2025702C20256420626C6F636B30 -S31AFE012C1473206F662025702062797465732065612E0A000074B0 -S31AFE012C296F6F2066657720617267756D656E7473000000756E78 -S31AFE012C3E7265636F676E697A656420636F6D6D616E6400000053 -S31AFE012C530052756E2073637269707420617420626F6F740000B4 -S31AFE012C68626F6F745F73637269707400426F6F74207363726945 -S31AFE012C7D707400626F6F745F7363726970745F646174610000B8 -S31AFE012C920000426F6F74207363726970742074696D656F7574B8 -S31AFE012CA700626F6F745F7363726970745F74696D656F75740005 -S31AFE012CBC25733A2000000000257320007472756500000000662E -S31AFE012CD1616C73650000002564200030782530325800003A00DA -S31AFE012CE60000200000003F3F00000A0000002E2E2025730A000E -S31AFE012CFB00456E746572207363726970742C207465726D696E31 -S31AFE012D10617465207769746820656D707479206C696E650A0072 -S31AFE012D250000003E3E200000000000FFFF0628FFFF064CFFFF7E -S31AFE012D3A06C8FFFF06D4FFFF0660FFFF067CFFFF07DCFFFF070F -S31AFE012D4FF0FFFF0964FFFF08B4FFFF080CFFFF0850FFFF04A843 -S31AFE012D64FFFF04A8FFFF04B8FFFF04C0FFFF04A8FFFF04B06C67 -S31AFE012D7969737420636F6E66696775726174696F6E206F6E6CEF -S31AFE012D8E79002A2A20696E76616C696420656E7472790A0000FB -S31AFE012DA30055706461746520526564426F6F74206E6F6E2D76D6 -S31AFE012DB86F6C6174696C6520636F6E66696775726174696F6E7F -S31AFE012DCD0000004572726F722077726974696E6720636F6E66F8 -S31AFE012DE2696720646174612061742025703A20257828257329C3 -S31AFE012DF70A0000000000000000FFFF0260FFFF02C0FFFF027820 -S31AFE012E0CFFFF027CFFFF0290FFFF02B052657175657374206681 -S31AFE012E216F7220636F6E6669672076616C7565202725732720BD -S31AFE012E362D2077726F6E6720747970650A0043616E27742066E9 -S31AFE012E4B696E6420636F6E6669672076616C7565202725732759 -S31AFE012E600A00000000000000FFFF0050FFFF0050FFFF00B4FF01 -S31AFE012E75FF0070FFFF0050FFFF005C464C41534820636F6E66F8 -S31AFE012E8A696775726174696F6E20636865636B73756D206572F2 -S31AFE012E9F726F72206F7220696E76616C6964206B65790A00004B -S31AFE012EB400000000FFFF3178FFFF3178FFFF3178FFFF3178FF69 -S31AFE012EC9FF3178FFFF3178FFFF3178FFFF3178FFFF3178FFFFAD -S31AFE012EDE3178FFFF3178FFFF3178FFFF3178FFFF3178FFFF3166 -S31AFE012EF378FFFF3178FFFF3198FFFF31B8FFFF31D8FFFF31F8CA -S31AFE012F08FFFF3218FFFF327CFFFF327CFFFF327CFFFF327CFFB8 -S31AFE012F1DFF3238FFFF3258FFFF3258FFFF3258FFFF3258FFFF13 -S31AFE012F323258FFFF3258FFFF3258FFFF3258FFFF3258FFFF32AB -S31AFE012F4758FFFF3258FFFF3258FFFF3258FFFF3258FFFF325870 -S31AFE012F5CFFFF3258FFFF3258FFFF3258FFFF3258FFFF3258FFB4 -S31AFE012F71FF3258FFFF3258FFFF3258FFFF3258FFFF3258FFFF9F -S31AFE012F863258FFFF3258FFFF3258FFFF3258FFFF3258FFFF3257 -S31AFE012F9B58FFFF3258FFFF3238FFFF3238FFFF3238FFFF32389C -S31AFE012FB0FFFF3238FFFF3238FFFF3238FFFF3238FFFF3238FF00 -S31AFE012FC5FF3238FFFF3238FFFF3238FFFF3238FFFF3238FFFFEB -S31AFE012FDA3238FFFF3238FFFF31B0FFFF31B0FFFF31D4FFFF311B -S31AFE012FEFF8FFFF31F8FFFF3238FFFF3238FFFF3238FFFF323809 -S31AFE013004FFFF321CFFFF3238FFFF3238FFFF3238FFFF3238FFC7 -S31AFE013019FF3238FFFF3238FFFF3238FFFF3238FFFF3238FFFF96 -S31AFE01302E3238FFFF3238FFFF3238FFFF3238FFFF3238FFFF324E -S31AFE01304338FFFF3238FFFF3238FFFF3238FFFF3238FFFF323833 -S31AFE013058FFFF3238FFFF3238FFFF3238FFFF3238FFFF3238FF57 -S31AFE01306DFF3238FFFF3238FFFF3238FFFF3238FFFF3238FFFF42 -S31AFE0130823238FFFF3238FFFF316CFFFF316CFFFF316CFFFF3162 -S31AFE0130976CFFFF316CFFFF316CFFFF316CFFFF316CFFFF316CAC -S31AFE0130ACFFFF316CFFFF316CFFFF316CFFFF316CFFFF316CFF04 -S31AFE0130C1FF316CFFFF316CFFFF318CFFFF31ACFFFF31CCFFFF2F -S31AFE0130D631ECFFFF320CFFFF3270FFFF3270FFFF3270FFFF3277 -S31AFE0130EB70FFFF322CFFFF324CFFFF324CFFFF324CFFFF324C0F -S31AFE013100FFFF324CFFFF324CFFFF324CFFFF324CFFFF324CFF4A -S31AFE013115FF324CFFFF324CFFFF324CFFFF324CFFFF324CFFFF35 -S31AFE01312A324CFFFF324CFFFF324CFFFF324CFFFF324CFFFF32ED -S31AFE01313F4CFFFF324CFFFF324CFFFF324CFFFF324CFFFF324CBE -S31AFE013154FFFF324CFFFF324CFFFF324CFFFF324CFFFF324CFFF6 -S31AFE013169FF324CFFFF324C3031323334353637383961626364BC -S31AFE01317E65660000000000000000503031004F4B000065436F0A -S31AFE0131937320474442207374756273205B7769746820526564FF -S31AFE0131A8426F6F745D202D206275696C74204F637420323020A7 -S31AFE0131BD32303030202F2031313A31343A3530000000004530B2 -S31AFE0131D23100453033004530320042303100FFFF4858FFFF50D4 -S31AFE0131E7E4FFFF4920FFFF4FA4FFFF4DF4FFFF50E4FFFF50E4EF -S31AFE0131FCFFFF50E4FFFF4AACFFFF4F74FFFF50E4FFFF50E4FF6F -S31AFE013211FF50E4FFFF50E4FFFF4BA8FFFF50E4FFFF50E4FFFFEB -S31AFE0132264AACFFFF4904FFFF50E4FFFF4DF4FFFF4F8CFFFF50B5 -S31AFE01323BE4FFFF50E4FFFF50E4FFFF4BA4FFFF50E4FFFF50E4E0 -S31AFE013250FFFF50E4FFFF50E4FFFF50E4FFFF50E4FFFF50E4FF6B -S31AFE013265FF50E4FFFF50E4FFFF5070FFFF4DF4FFFF48C0FFFFE9 -S31AFE01327A50E4FFFF50E4FFFF4910FFFF50E4FFFF50E4FFFF50CB -S31AFE01328FE4FFFF4F54FFFF50E4FFFF4AC0FFFF50E4FFFF50E402 -S31AFE0132A4FFFF50E4FFFF48F8FFFF4F6CFFFF4DF4FFFF50E4FF77 -S31AFE0132B9FF50E4FFFF50E4FFFF50E4FFFF50E4FFFF50E4FFFF02 -S31AFE0132CE489C30313233343536373839616263646566000000A0 -S31AFE0132E30030313233343536373839414243444546000000002F -S31AFE0132F8FFFF7038FFFF7038FFFF7038FFFF7038FFFF7038FF7F -S31AFE01330DFF7038FFFF7038FFFF7038FFFF7038FFFF7038FFFF69 -S31AFE0133227038FFFF7038FFFF7038FFFF7038FFFF7038FFFF70E3 -S31AFE01333738FFFF6F78FFFF6F78FFFF6FACFFFF6FE0FFFF6FE0C7 -S31AFE01334CFFFF7038FFFF7038FFFF7038FFFF7038FFFF7014FF4E -S31AFE013361FF7038FFFF7038FFFF7038FFFF7038FFFF7038FFFF15 -S31AFE0133767038FFFF7038FFFF7038FFFF7038FFFF7038FFFF708F -S31AFE01338B38FFFF7038FFFF7038FFFF7038FFFF7038FFFF7038B2 -S31AFE0133A0FFFF7038FFFF7038FFFF7038FFFF7038FFFF7038FFD6 -S31AFE0133B5FF7038FFFF7038FFFF7038FFFF7038FFFF7038FFFFC1 -S31AFE0133CA7038FFFF7038FFFF7038FFFF7038FFFF7038FFFF703B -S31AFE0133DF38FFFF6FECFFFF6FECFFFF6FECFFFF6FECFFFF6FECDF -S31AFE0133F4FFFF6FECFFFF6FECFFFF6FECFFFF6FECFFFF6FECFF03 -S31AFE013409FF6FECFFFF6FECFFFF6FECFFFF6FECFFFF6FECFFFFED -S31AFE01341E6FECFFFF7014FFFF7038FFFF705CFFFF7080FFFF70EB -S31AFE013433A4FFFF7110FFFF7110FFFF7110FFFF7110FFFF70C8A9 -S31AFE013448FFFF70E8FFFF70E8FFFF70E8FFFF70E8FFFF70E8FFBD -S31AFE01345DFF70E8FFFF70E8FFFF70E8FFFF70E8FFFF70E8FFFFA8 -S31AFE01347270E8FFFF70E8FFFF70E8FFFF70E8FFFF70E8FFFF7022 -S31AFE013487E8FFFF70E8FFFF70E8FFFF70E8FFFF70E8FFFF70E895 -S31AFE01349CFFFF70E8FFFF70E8FFFF70E8FFFF70E8FFFF70E8FF69 -S31AFE0134B1FF70E8FFFF70E8FFFF70E8FFFF70E8FFFF70E8FFFF54 -S31AFE0134C670E8FFFF7068FFFF7068FFFF7068FFFF7068FFFF70CE -S31AFE0134DB68FFFF7068FFFF7068FFFF7068FFFF7068FFFF706841 -S31AFE0134F0FFFF7068FFFF7068FFFF7068FFFF7068FFFF7068FF95 -S31AFE013505FF7068FFFF7090FFFF70B0FFFF70D0FFFF70F0FFFF1F -S31AFE01351A7110FFFF7178FFFF7178FFFF7178FFFF7178FFFF710B -S31AFE01352F30FFFF7150FFFF7150FFFF7150FFFF7150FFFF715097 -S31AFE013544FFFF7150FFFF7150FFFF7150FFFF7150FFFF7150FFB3 -S31AFE013559FF7150FFFF7150FFFF7150FFFF7150FFFF7150FFFF9E -S31AFE01356E7150FFFF7150FFFF7150FFFF7150FFFF7150FFFF7117 -S31AFE01358350FFFF7150FFFF7150FFFF7150FFFF7150FFFF715023 -S31AFE013598FFFF7150FFFF7150FFFF7150FFFF7150FFFF7150FF5F -S31AFE0135ADFF7150FFFF70D0FFFF70D0FFFF70D0FFFF70D0FFFF4E -S31AFE0135C270D0FFFF70D0FFFF70D0FFFF70D0FFFF70D0FFFF7049 -S31AFE0135D7D0FFFF70D0FFFF70D0FFFF70D0FFFF70D0FFFF70D0D4 -S31AFE0135ECFFFF70D0FFFF70F8FFFF7118FFFF7138FFFF7158FF2D -S31AFE013601FF7178FFFF71C0FFFF71C0FFFF71C0FFFF71C0FFFF0D -S31AFE01361671C0FFFF7198FFFF7198FFFF7198FFFF7198FFFF71DE -S31AFE01362B98FFFF7198FFFF7198FFFF7198FFFF7198FFFF7198CA -S31AFE013640FFFF7198FFFF7198FFFF7198FFFF7198FFFF7198FF4E -S31AFE013655FF7198FFFF7198FFFF7198FFFF7198FFFF7198FFFF39 -S31AFE01366A7198FFFF7198FFFF7198FFFF7198FFFF7198FFFF71B2 -S31AFE01367F98FFFF7198FFFF7198FFFF7198FFFF7198FFFF719876 -S31AFE013694FFFF7198FFFF711CFFFF7160FFFF711CFFFF7160FF62 -S31AFE0136A9FF711CFFFF7160FFFF711CFFFF7160FFFF711CFFFFC9 -S31AFE0136BE7160FFFF711CFFFF7160FFFF711CFFFF7160FFFF71FE -S31AFE0136D31CFFFF7160FFFF7160FFFF7160FFFF7160FFFF7160B6 -S31AFE0136E8FFFF7160FFFF7160FFFF7160FFFF7160FFFF7160FFBE -S31AFE0136FDFF7160FFFF7160FFFF7160FFFF7160FFFF7160FFFFA9 -S31AFE0137127160FFFF7160FFFF7160FFFF7160FFFF7160FFFF7121 -S31AFE01372760FFFF7160FFFF7160FFFF7160FFFF7160FFFF71601D -S31AFE01373CFFFF7160FFFF7160FFFF7160FFFF7160FFFF7160FF69 -S31AFE013751FF7160FFFF7160FFFF7160FFFF7160FFFF7160FFFF54 -S31AFE0137667160FFFF7160FFFF7160FFFF7160FFFF7160FFFF71CD -S31AFE01377B60FFFF7160FFFF7178FFFF7178FFFF7178FFFF717869 -S31AFE013790FFFF7178FFFF7178FFFF7178FFFF7178FFFF7178FF9D -S31AFE0137A5FF7178FFFF7178FFFF7178FFFF7178FFFF7178FFFF88 -S31AFE0137BA7178FFFF7178FFFF70B8FFFF70B8FFFF70ECFFFF7110 -S31AFE0137CF20FFFF7120FFFF7178FFFF7178FFFF7178FFFF717895 -S31AFE0137E4FFFF7154FFFF7178FFFF7178FFFF7178FFFF7178FF6D -S31AFE0137F9FF7178FFFF7178FFFF7178FFFF7178FFFF7178FFFF34 -S31AFE01380E7178FFFF7178FFFF7178FFFF7178FFFF7178FFFF71AC -S31AFE01382378FFFF7178FFFF7178FFFF7178FFFF7178FFFF717890 -S31AFE013838FFFF7178FFFF7178FFFF7178FFFF7178FFFF7178FFF4 -S31AFE01384DFF7178FFFF7178FFFF7178FFFF7178FFFF7178FFFFDF -S31AFE0138627178FFFF7178303132333435363738390000303132DC -S31AFE013877333435363738396162636465660000000030313233A2 -S31AFE01388C3435363738394142434445460000000000000000FF47 -S31AFE0138A1FF7B60FFFF7D10FFFF7D10FFFF7D10FFFF7D10FFFF09 -S31AFE0138B67D10FFFF7D10FFFF7D10FFFF7D10FFFF7D10FFFF7DC4 -S31AFE0138CB10FFFF7CA4FFFF7B60FFFF7D10FFFF7D10FFFF7D103B -S31AFE0138E0FFFF7D10FFFF7D10FFFF7D10FFFF7D10FFFF7D10FF18 -S31AFE0138F5FF7D10FFFF7D10FFFF7D10FFFF7B40FFFF7D10FFFFD5 -S31AFE01390A7D10FFFF7C38FFFF7D10FFFF7D10FFFF7D10FFFF7D48 -S31AFE01391F10FFFF7B60000000005E430A003078253038583A2013 -S31AFE0139340000000025303258000000002020000020000000201A -S31AFE0139497C0000256300007C0A0000202D2061726520796F75B8 -S31AFE01395E20737572652028792F6E293F2000556E62616C616EC9 -S31AFE01397363656420737472696E67210A00416D626967756F75F3 -S31AFE0139887320636F6D6D616E6420272573272C2063686F69635B -S31AFE01399D6573206172653A20257300202573000A000000557364 -S31AFE0139B26167653A0A002020257325732025730A00002A2A20E4 -S31AFE0139C74572726F723A20257320616C72656164792073706580 -S31AFE0139DC6369666965640A002A2A204572726F723A20696E763E -S31AFE0139F1616C6964206E756D626572202725732720666F7220EC -S31AFE013A0625730A0000002A2A204572726F723A20696E76616C12 -S31AFE013A1B696420666C616720272563270A000000002A2A204551 -S31AFE013A3072726F723A206E6F2064656661756C742F6E6F6E2DD4 -S31AFE013A45666C616720617267756D656E747320737570706F720E -S31AFE013A5A7465640A00004E45544153434949000000004F4354D5 -S31AFE013A6F4554000000556E6B6E6F776E206572726F720000006A -S31AFE013A8466696C65206E6F7420666F756E6400006163636573DC -S31AFE013A99732076696F6C6174696F6E000000006469736B20667A -S31AFE013AAE756C6C206F7220616C6C6F636174696F6E206578630A -S31AFE013AC3656564656400000000696C6C6567616C2054465450BA -S31AFE013AD8206F7065726174696F6E0000756E6B6E6F776E20743F -S31AFE013AED72616E736665722049440066696C6520616C7265615C -S31AFE013B02647920657869737473006E6F207375636820757365EF -S31AFE013B1772000000006F7065726174696F6E2074696D656420FE -S31AFE013B2C6F757400736F6D6520736F7274206F66206E657477B8 -S31AFE013B416F726B206572726F720000696E76616C6964207061FC -S31AFE013B5672616D6574657200000070726F746F636F6C207669F4 -S31AFE013B6B6F6C6174696F6E000066696C65206973206C617267E8 -S31AFE013B806572207468616E206275666665720000FFFF94F4FF6A -S31AFE013B95FF9500FFFF950CFFFF9518FFFF9524FFFF9530FFFFC0 -S31AFE013BAA953CFFFF9548FFFF9554FFFF9560FFFF956CFFFF95E9 -S31AFE013BBF7847444220636F6E6E656374696F6E20706F72740072 -S31AFE013BD46764625F706F7274000000004E6574776F726B206418 -S31AFE013BE96562756720617420626F6F742074696D6500006E65B4 -S31AFE013BFE745F646562756700000055736520424F4F545020667C -S31AFE013C136F72206E6574776F726B20636F6E666967757261743A -S31AFE013C28696F6E00626F6F74700000004C6F63616C2049502054 -S31AFE013C3D6164647265737300000000626F6F74705F6D795F6956 -S31AFE013C52700044656661756C7420736572766572204950206132 -S31AFE013C67646472657373000000626F6F74705F736572766572A4 -S31AFE013C7C5F69700025732E25640A00006E65745F696F5F7772D7 -S31AFE013C91697465000000006E65745F696F5F726561640000005E -S31AFE013CA60000FFFF99A4FFFF99A4FFFF99A4FFFF99A4FFFF9981 -S31AFE013CBBA4FFFF99A4FFFF99A4FFFF99A4FFFF99A4FFFF99A424 -S31AFE013CD0FFFF99A4FFFF99A4FFFF99A4FFFF99A4FFFF99A4FFB4 -S31AFE013CE5FF99A4FFFF99D0FFFF99F0FFFF9A10FFFF9A30FFFF2D -S31AFE013CFA9A50FFFF9C74FFFF9C74FFFF9C74FFFF9C74FFFF9AF6 -S31AFE013D0F70FFFF9A90FFFF9A90FFFF9A90FFFF9A90FFFF9A9062 -S31AFE013D24FFFF9A90FFFF9A90FFFF9A90FFFF9A90FFFF9A90FFBE -S31AFE013D39FF9A90FFFF9A90FFFF9A90FFFF9A90FFFF9A90FFFFA9 -S31AFE013D4E9A90FFFF9A90FFFF9A90FFFF9A90FFFF9A90FFFF9AF9 -S31AFE013D6390FFFF9A90FFFF9A90FFFF9A90FFFF9A90FFFF9A90EE -S31AFE013D78FFFF9A90FFFF9A90FFFF9A90FFFF9A90FFFF9A90FF6A -S31AFE013D8DFF9A90FFFF9A28FFFF9A28FFFF9A28FFFF9A28FFFFF5 -S31AFE013DA29A28FFFF9A28FFFF9A28FFFF9A28FFFF9A28FFFF9AAD -S31AFE013DB728FFFF9A28FFFF9A28FFFF9A28FFFF9A28FFFF9A280A -S31AFE013DCCFFFF9A28FFFF9A54FFFF9A78FFFF9A9CFFFF9AC0FF96 -S31AFE013DE1FF9AE4FFFF9B8CFFFF9B8CFFFF9B8CFFFF9B8CFFFFB9 -S31AFE013DF69B08FFFF9B28FFFF9B28FFFF9B28FFFF9B28FFFF9B73 -S31AFE013E0B28FFFF9B28FFFF9B28FFFF9B28FFFF9B28FFFF9B28B0 -S31AFE013E20FFFF9B28FFFF9B28FFFF9B28FFFF9B28FFFF9B28FFC4 -S31AFE013E35FF9B28FFFF9B28FFFF9B28FFFF9B28FFFF9B28FFFFAF -S31AFE013E4A9B28FFFF9B28FFFF9B28FFFF9B28FFFF9B28FFFF9BFE -S31AFE013E5F28FFFF9B28FFFF9B28FFFF9B28FFFF9B28FFFF9B285C -S31AFE013E74FFFF9B284E6F206E6574776F726B20696E74657266E4 -S31AFE013E896163657320666F756E640A0000000043616E27742070 -S31AFE013E9E67657420424F4F545020696E666F202D206E6574772F -S31AFE013EB36F726B2064697361626C6564210A00000049503A2033 -S31AFE013EC8257300002C2044656661756C74207365727665723A46 -S31AFE013EDD2025730A0000000000000025642E25642E25642E25BF -S31AFE013EF2640045746865726E65742073656E643A0A00457468E4 -S31AFE013F0765726E657420726563763A0A006574685F6472765F23 -S31AFE013F1C6473722073686F756C64206E6F742062652063616CEB -S31AFE013F316C65643A20766563746F722025642C206461746120A5 -S31AFE013F4625780A000000000000002E2E2E20457261736520669A -S31AFE013F5B726F6D2025702D25703A2000002E0000000A000000F5 -S31AFE013F702E2E2E2050726F6772616D2066726F6D2025702D25DA -S31AFE013F85702061742025703A2000004E6F206572726F72202D5A -S31AFE013F9A206F7065726174696F6E20636F6D706C6574650000A3 -S31AFE013FAF00496E76616C696420464C4153482061646472657310 -S31AFE013FC4730000004572726F7220747279696E6720746F206521 -S31AFE013FD9726173650000004572726F7220747279696E672074C8 -S31AFE013FEE6F206C6F636B2F756E6C6F636B004572726F72207428 -S31AFE0140037279696E6720746F2070726F6772616D0047656E65E0 -S31AFE014018726963206572726F720000004465766963652F7265B0 -S31AFE01402D67696F6E2069732077726974652D70726F7465637457 -S31AFE014042656400000000464C415348207375622D73797374655E -S31AFE0140576D206E6F7420696E697469616C697A656400000000BB -S31AFE01406C556E6B6E6F776E206572726F7200000000000000FF01 -S31AFE014081FFAC04FFFFAC10FFFFAC1CFFFFAC28FFFFAC34FFFF48 -S31AFE014096AC40FFFFAC4CFFFFAC58457272203D2025780A0000DF -S31AFE0140AB0000000000FFFFB184FFFFB184FFFFB17CFFFFB114A7 -S31AFE0140C0FFFFB17CFFFFB11CFFFFB154FFFFB15CFFFFB16CFFC8 -S31AFE0140D5FFB16CFFFFB164FFFFB174FFFFB154FFFFB18CFFFF43 -S31AFE0140EAB16CFFFFB174FFFFB174FFFFB17CFFFFB184FFFFB14C -S31AFE0140FF8CFFFFB18CFFFFB18CFFFFB18CFFFFB18CFFFFB18CF4 -S31AFE014114FFFFB18CFFFFB174FFFFB174FFFFB174FFFFB174FFCB -S31AFE014129FFB75CFFFFB75CFFFFB75CFFFFB75CFFFFB75CFFFF28 -S31AFE01413EB75CFFFFB75CFFFFB75CFFFFB75CFFFFB75CFFFFB75B -S31AFE0141535CFFFFB75CFFFFB75CFFFFB75CFFFFB75CFFFFB75CA1 -S31AFE014168FFFFB77CFFFFB79CFFFFB7BCFFFFB7DCFFFFB7FCFF09 -S31AFE01417DFFB858FFFFB858FFFFB858FFFFB858FFFFB81CFFFF1F -S31AFE014192B83CFFFFB83CFFFFB83CFFFFB83CFFFFB83CFFFFB8A1 -S31AFE0141A73CFFFFB83CFFFFB83CFFFFB83CFFFFB83CFFFFB83C08 -S31AFE0141BCFFFFB83CFFFFB83CFFFFB83CFFFFB83CFFFFB83CFF30 -S31AFE0141D1FFB83CFFFFB83CFFFFB83CFFFFB83CFFFFB83CFFFF1B -S31AFE0141E6B83CFFFFB83CFFFFB83CFFFFB83CFFFFB83CFFFFB84D -S31AFE0141FB3CFFFFB83CFFFFB83CFFFFB83CFFFFB83CFFFFB83CB4 -S31AFE014210FFFFB7ACFFFFB7ACFFFFB7ACFFFFB7ACFFFFB7ACFFB0 -S31AFE014225FFB7ACFFFFB7ACFFFFB7ACFFFFB7ACFFFFB7ACFFFF9B -S31AFE01423AB7ACFFFFB7ACFFFFB7ACFFFFB7ACFFFFB7ACFFFFB7CE -S31AFE01424FACFFFFB7CCFFFFB7F0FFFFB814FFFFB838FFFFB85CB9 -S31AFE014264FFFFB8F4FFFFB8F4FFFFB8F4FFFFB8F4FFFFB880FF63 -S31AFE014279FFB8A0FFFFB8A0FFFFB8A0FFFFB8A0FFFFB8A0FFFF7E -S31AFE01428EB8A0FFFFB8A0FFFFB8A0FFFFB8A0FFFFB8A0FFFFB8B0 -S31AFE0142A3A0FFFFB8A0FFFFB8A0FFFFB8A0FFFFB8A0FFFFB8A0B3 -S31AFE0142B8FFFFB8A0FFFFB8A0FFFFB8A0FFFFB8A0FFFFB8A0FF3F -S31AFE0142CDFFB8A0FFFFB8A0FFFFB8A0FFFFB8A0FFFFB8A0FFFF2A -S31AFE0142E2B8A0FFFFB8A0FFFFB8A0FFFFB8A0FFFFB8A0FFFFB85C -S31AFE0142F7A025733A2043616E27742066696E642061646472658D -S31AFE01430C7373206F66207365727665720A0000005F5F756470F4 -S31AFE0143215F73656E64746F000000007564705F72656376667266 -S31AFE0143366F6D202D2064726F70706564207061636B6574206F0F -S31AFE01434B662025642062797465730A00004275665B25645D2F6B -S31AFE01436025703A206275663A2025702C206C656E3A2025642F8B -S31AFE01437525642C206E6578743A2025700A000046726565206C93 -S31AFE01438A697374203D2025700A005F5F656E65745F706F6C6C2D -S31AFE01439F3A206E6F206D6F726520627566666572730A000000E3 -S31AFE0143B400000000FFFFCD90FFFFCDE8FFFFD064FFFFCE3CFFA8 -S31AFE0143C9FFCE3CFFFFCEE4FFFFCF24FFFFCFC0FFFFD004FFFFD3 -S307FE0143DED044C4 -S31AFE0143E0000000007C2F2D5C7C2D000000003324000079D0FE48 -S31AFE0143F5012010000000000000000000000000FE0058D8FE0051 -S31AFE01440A58F0FE0058C8FE0058B0FE005740FE0055F4FE005CF6 -S31AFE01441FECFE0054B4FE0054AC000036E40000000008003E280B -S31AFE01443479B80000FE005DFCFE00AF98FE00AF98FE00AF98FE19 -S31AFE01444900AF98FE00AF98FE00AF98FE00AF98FE00AF98FE0000 -S31AFE01445EAF98FE00AF98FE00AF98FE00AF98FE00AF98FE00AF3C -S31AFE01447398FE00AF98FE00AF98FE00AF98FE00AF98FE00AF983E -S31AFE014488FE00AF98FE00AF98FE00AF98FE00AF98FE00AF98FEC3 -S31AFE01449D00AF98FE00AF98FE00AF98FE00AF98FE00AF98FE00AC -S31AFE0144B2AF98FE00AF98FE00AF98FE00AF98FE00AF98FE00AFE8 -S31AFE0144C798FE00AF98FE00AF98FE00AF98FE00AF98FE00AF98EA -S31AFE0144DCFE00AF98FE00AF98FE00AF98FE00AF98FE00AF98FE6F -S31AFE0144F100AF98FE00AF98FE00AF98FE00AF98FE00AF98FE0058 -S31AFE014506AF98FE00AF98FE00AF98FE00AF98FE00AF98FE00AF93 -S31AFE01451B98FE00AF98FE00AF9800000000000000000000000064 -S31AFE01453000000000000000000000000000000000000000000071 -S31AFE0145450000000000000000000000000000000000000000005C -S31AFE01455A00000000000000000000000000000000000000000047 -S31AFE01456F00000000000000000000000000000000000000000032 -S31AFE0145840000000000000000000000000000000000000000001D -S31AFE01459900000000000000000000000000000000000000000008 -S31AFE0145AE000000000000000000000000000000000000000000F3 -S31AFE0145C3000000000000000000000000000000000000000000DE -S31AFE0145D8000000000000000000000000000000000000000000C9 -S31AFE0145ED000000000000000000000000000000000000000000B4 -S31AFE0146020000000000000000000000000000000000000000009E -S31AFE01461700000000000000000000000000000000000000000089 -S31AFE01462C00000000000000000000000000000000000000000074 -S31AFE0146410000000000000000000000000000000000000000005F -S31AFE0146560000000000000000000000000000000000000000004A -S31AFE01466B00000000000000000000000000000000000000000035 -S31AFE01468000000000000000000000000000000000000000000020 -S31AFE0146950000000000000000000000000000000000000000000B -S31AFE0146AA000000000000000000000000000000000000000000F6 -S31AFE0146BF000000000000000000000000000000000000000000E1 -S31AFE0146D4000000000000000000000000000000000000000000CC -S31AFE0146E900000000000000000000000000000000000000FE00B9 -S31AFE0146FE0000FE0000000040000000000000FF000000FF000066 -S31AFE014713000010000001000000FA100000FA1000000000000463 -S31AFE014728010000000000000000000000008000000000000000F6 -S31AFE01473D00000000000000000000000000000000000000000062 -S31AFE0147520000FE00834CFE0083A8000000000000000000000057 -S31AFE01476700FFFFFFFF0000000000000000FE0093F400000000B7 -S31AFE01477C0000000000011CE40000000000000000000000000022 -S31AFE01479100000000000000FFFFFFFEFFFFFFFE00000000000018 -S31AFE0147A61E1400001E14000001F40000000000000000000000A0 -S31AFE0147BB000000000000000000FE00E1C0FE00E668FE00E454C3 -S31AFE0147D0000000000000000000000000000003E80000000000E4 -S31AFE0147E5000000000000000000000000000000000000000000BA -S31AFE0147FA000000000000000000000000000000000000000000A5 -S31AFE01480F000000000000000000FE012668FE012658FE0125E879 -S31AFE014824FE003DA4FE0125A4FE012574FE01256CFE0039C8FEAE -S31AFE014839012564FE01254CFE012530FE003BCCFE012528FE01C7 -S31AFE01484E24E4FE0124A8FE004488FE0124A0FE01247CFE01242E -S31AFE01486374FE004658FE0124DCFE0124ACFE0124A8FE004598B7 -S31AFE014878FE0125E0FE0125ACFE01256CFE003880FE011E1CFED5 -S31AFE01488D011E04FE011DF8FE002840FE011DF0FE011DC8FE0185 -S31AFE0148A21DACFE002A30FE012434FE012420FE012418FE0036D2 -S31AFE0148B7ECFE01246CFE012440FE012438FE002F48FE011DA875 -S31AFE0148CCFE011D8CFE011D74FE002B28FE011D6CFE011D58FE4F -S31AFE0148E1011D50FE0029BCFE012084FE012078FE012050FE00C5 -S31AFE0148F64A14FE012C68FE012C54000000000000000100000037 -S31AFE01490B0100000000FE012C80FE012C74FE012C6800000001B3 -S31AFE0149200000000400000000FE012CA8FE012C94FE012C680054 -S31AFE0149350000010000000200000000FE013C2CFE013C080000BB -S31AFE01494A0000000000010000000100000000FE013C48FE013C93 -S31AFE01495F34FE013C2C000000000000000500000000FE013C70F3 -S31AFE014974FE013C54FE013C2C000000000000000500000000FE30 -S31AFE014989013BD4FE013BC0000000000000000100000002000007 -S31AFE01499E0000FE013BFCFE013BE00000000000000001000000AE -S31AFE0149B30100000000FE002CC000000000FE00DD2800000000FC -S31AFE0149C8FE012018FE0059080000330C000000004E8000210011 -S310FE0149DD0000000000000000000000CA +S31AFE002651630D407C0803A63D2000003D60000093893B5893EB6C +S31AFE0026663B784E8000213C000040901B3B5C939A3B74480006D1 +S31AFE00267B6D3C60FE013C80FE013CA0FE01386329A4388429D487 +S31AFE00269038A529E0480094313C60FE013C80FE013CA0FE013CD1 +S31AFE0026A5C0FE0138C62A20386329EC38842A0438A52A14480018 +S31AFE0026BA940D3C60FE0138632A2448009401809A3B7480BB3BC6 +S31AFE0026CF5C3C60FE0138632A48480093ED3D2000003D6000002C +S31AFE0026E438093B383BAB3B287C1D00003D20000093893B6C41E6 +S31AFE0026F98200207C1C0378813D00003BBD00087D2803A64E8039 +S31AFE00270E00217C1DE0004082FFEC3F600000835B3B802C1A00ED +S31AFE002723004182006C3D20000083A93B603C8010621FBD03E855 +S31AFE00273860844DD37C9D20967FA0FE707C8436707C8020501CFA +S31AFE00274DA403E83C60FE0138632A547CA5E850480093693D2036 +S31AFE00276200003B80000093893B807FA5EB7838610008388001EB +S31AFE00277700480099BD2C03FFFE4082000C939B3B804800000878 +S31AFE00278C935B3B807FFDFB787F3CCB787FDBF3782C1D0000414F +S31AFE0027A18200143C60FE0138632A98480093193BA00000386129 +S31AFE0027B600083880010038A000FA480099752C03000040800032 +S31AFE0027CB1C3D20000080093B842C0000004182FFC44800B71D66 +S31AFE0027E04BFFFFBC40820020393C3200800900347F63DB787CE4 +S31AFE0027F50803A64E800021480077C94BFFFF9C386100084800D5 +S31AFE00280A93792C0300004081004C3FA000003F40000138610075 +S31AFE00281F08389D3B7038BA208848009E717C631B794182001CD5 +S31AFE0028348003000C807D3B70389A20887C0803A64E8000214876 +S31AFE0028490000143C60FE0138632AA4388100084800926D3BA07B +S31AFE00285E00014BFFFF3C9421FFF07C0802A693E1000C900100FA +S31AFE002873142C0300027C9F237840820144807F00043C80FE018C +S31AFE00288838842AC4480093852C030000408200447D6000A67DF8 +S31AFE00289D605B7839200000512004207C0001243C0002004C00D6 +S31AFE0028B2012C7C108BA64C00012C3D4002007C0004AC7D588B9F +S31AFE0028C7A67C0000A6516004207C000124480000F8807F000477 +S31AFE0028DC3C80FE0138842AC84800932D2C030000408200C07D44 +S31AFE0028F16000A67D605B7839200000512004207C000124392030 +S31AFE0029060000380000807C0903A6612010003D400E007C000436 +S31AFE00291BAC7D398BA67D588BA67C198BA67D588BA639290010CC +S31AFE0029304200FFE03C0004004C00012C7C108BA64C00012C3D41 +S31AFE0029454004007C0004AC7D588BA639200000380000807C096D +S31AFE00295A03A6612010003D400E007C0004AC7D398BA67D588B2C +S31AFE00296FA67C198BA67D588BA6392900104200FFE03C000C0002 +S31AFE0029844C00012C7C108BA64C00012C3D400C007C0004AC7D59 +S31AFE002999588BA67C0000A6516004207C000124480000243C60FC +S31AFE0029AEFE01809F000438632ACC4800910D480000103C60FE85 +S31AFE0029C30138632AE4480090FD800100147C0803A683E1000C4A +S31AFE0029D8382100104E8000209421FFE87C0802A693A1000C93F4 +S31AFE0029EDC1001093E100149001001C3D6000003D20000039296F +S31AFE002A023A683BEB39F87C1F48004182002C7D3D4B783FC0FE76 +S31AFE002A1701809F000480BF000080DF0008387E2AF04800909D97 +S31AFE002A2C3BFF00107C1FE8004082FFE48001001C7C0803A683D2 +S31AFE002A41A1000C83C1001083E10014382100184E8000209421EF +S31AFE002A56FFA87C0802A69381004893A1004C93C1005093E100A0 +S31AFE002A6B549001005C7C7D1B787C9C23783D20FE0139292B00E9 +S31AFE002A80386100083880006238A0000138C0000038E100383927 +S31AFE002A9501003C48009F293D20FE0139292B1038610020388071 +S31AFE002AAA006C38A0000138C0000038E100403901004448009F18 +S31AFE002ABF053D40FE017FA3EB787F84E378394A2A2038A00001F4 +S31AFE002AD438C1000838E00002390000003920000048009EF92C31 +S31AFE002AE9030000418200408001003C2C000000408200143C6073 +S31AFE002AFEFE0138632B1848008FC148000024800100442C0000ED +S31AFE002B13004082000C3800002090010040806100388081004058 +S31AFE002B2848009A758001005C7C0803A68381004883A1004C83F4 +S31AFE002B3DC1005083E10054382100584E8000209421FFB87C0827 +S31AFE002B5202A69381003893A1003C93C1004093E1004490010029 +S31AFE002B674C3D20000080093B7C7C7D1B787C9C23783D20FE01D1 +S31AFE002B7C9001002839292B30386100083880007738A0000138E9 +S31AFE002B91C0000038E100203901002448009E253D40FE017FA32B +S31AFE002BA6EB787F84E378394A2B4038A0000138C1000838E00075 +S31AFE002BBB01390100283920000048009E192C030000418200F85C +S31AFE002BD0800100242C000000418200343C60FE018081002880E0 +S31AFE002BE5A1002038632B5448008ED980A10020386100301CA582 +S31AFE002BFA03E838800008480095352C03FFFE418200BC81410098 +S31AFE002C0F287D6000A67D605B7839200000512004207C000124C2 +S31AFE002C2439200000380000807C0903A6612010003D600E007CA0 +S31AFE002C390004AC7D398BA67D788BA67C198BA67D788BA6392977 +S31AFE002C4E00104200FFE03C0004004C00012C7C108BA64C000179 +S31AFE002C632C3D6004007C0004AC7D788BA6392000003800008028 +S31AFE002C787C0903A6612010003D600E007C0004AC7D398BA67D49 +S31AFE002C8D788BA67C198BA67D788BA6392900104200FFE03C00CA +S31AFE002CA20C004C00012C7C108BA64C00012C3D600C007C000435 +S31AFE002CB7AC7D788BA67D4803A64E8000218001004C7C0803A6DB +S31AFE002CCC8381003883A1003C83C1004083E10044382100484E38 +S31AFE002CE18000204E8000209421FFE07C0802A693A1001493C1F0 +S31AFE002CF6001893E1001C90010024380000003D2000003FC000D4 +S31AFE002D0B003BA93B8090093B80901E3B6C48000A992C0300004D +S31AFE002D20418200EC3D20000080893B943D600000800B3B903D86 +S31AFE002D352000003BE97C747C8422147C8400507FE3FB7838A01E +S31AFE002D4A0400480085757FE3FB78388003FC480004F9801F03B7 +S31AFE002D5FFC7C030000408200303D20000081697C743C000BADC3 +S31AFE002D746000FACE7C0B000040820018813F03F83C00DEAD60DB +S31AFE002D8900DEAD7C090000418200283C60FE0138633A38480046 +S31AFE002D9E8D293C60000038637C743880000038A00400480085DE +S31AFE002DB3E9480000583C60FE01386338103881000838A0000166 +S31AFE002DC848000061800100082C000000418200303C60FE0138CE +S31AFE002DDD6338287FA4EB7838A00004480000413C60FE013C80D8 +S31AFE002DF200003863386438843B6038A0000248000029380000B7 +S31AFE002E0701901E3B6C800100247C0803A683A1001483C10018F6 +S31AFE002E1C83E1001C382100204E8000209421FFD87C0802A6936B +S31AFE002E3121000C93410010936100149381001893A1001C93C19F +S31AFE002E46002093E100249001002C3D2000003D6000003B493B45 +S31AFE002E5B287C7B1B787C9D23787CB92B783BCB3A6848000945E2 +S31AFE002E702C0300003B800004418200CC7C1ED000418200B43DAE +S31AFE002E8520000039297C74807E00007FFC4A147F64DB7848006D +S31AFE002E9A8D112C0300004082007C807E00107C03C800408200FD +S31AFE002EAF5C3803FFFF280000054181008C3D60FE01396B3A2060 +S31AFE002EC45400103A7D4B002E3D20FE0139293A207D4A4A147DA7 +S31AFE002ED94903A64E800420801F0000901D00004800005CA01F4D +S31AFE002EEE0004813F0000B01D0004913D00004800004893FD0048 +S31AFE002F0300480000403C60FE01386339D07F64DB7848008BB134 +S31AFE002F184800002C807E00103BDE0018480002DD7C1ED0007FDD +S31AFE002F2D9C1A144082FF543C60FE01386339FC7F64DB784800C3 +S31AFE002F428B858001002C7C0803A68321000C8341001083610024 +S31AFE002F57148381001883A1001C83C1002083E100243821002884 +S31AFE002F6C4E8000209421FBB87C0802A6930104289321042C9393 +S31AFE002F81410430936104349381043893A1043C93C1044093E1C6 +S31AFE002F9604449001044C3D2000003D6000003B093A683B2B3B78 +S31AFE002FAB287C7C1B787C9B2378480007FD2C0300003B400000B2 +S31AFE002FC07F1FC3783BC00004418202083C80000038847C7438B3 +S31AFE002FD561000838A00400480082E53BA104083D6000003D200D +S31AFE002FEAFE01934B3B80392939307FA3EB783880006C38A000EA +S31AFE002FFF0038C0000238E1042039000000480099B53D40FE0137 +S31AFE0030147F83E3787F64DB787FA6EB78394A2FB038A000013815 +S31AFE003029E000013900000039200000480099A92C03000041829F +S31AFE00303E01947C1FC800418200A480A104207FE3FB787FC4F3CA +S31AFE003053784800026538030001280000054181FFE03D60FE0197 +S31AFE003068396B39B85400103A7D4B002E3D20FE01392939B87DFA +S31AFE00307D4A4A147D4903A64E8004203C60000038637C74388151 +S31AFE003092000838A0040048008229480001343B400001807F0056 +S31AFE0030A7103BFF0018480001557FDE1A144BFFFF8C7FE9C2780E +S31AFE0030BC3129FFFF7D294910381FFFE87C0048787FE948387DC5 +S31AFE0030D13F03784BFFFF6C3C60FE0138633948480089E54BFFC0 +S31AFE0030E6FF5C2C1A0000418200E43C000BAD3D6000006000FA9E +S31AFE0030FBCE3D20DEAD3B8B7C746129DEAD900B7C74913C03F8E8 +S31AFE0031107F83E378388003FC480001393D2000003FE000008014 +S31AFE0031251F3B9481693B90907C03FC7C0002143C60FE017FC077 +S31AFE00313A58503863395C480094812C03000041820088809F3B73 +S31AFE00314F943BA104247FC3F3787FA5EB784800BA617C7F1B79A9 +S31AFE0031644182002C83A104247FE3FB784800BD697C661B783C23 +S31AFE00317960FE013863321C7FA4EB787FE5FB784800893D480042 +S31AFE00318E00447FC3F3787F84E3787FA6EB7838A004004800BB72 +S31AFE0031A38D7C7F1B794182002883A104247FE3FB784800BD25C1 +S31AFE0031B87C661B783C60FE01386339887FA4EB787FE5FB7848ED +S31AFE0031CD0088F98001044C7C0803A6830104288321042C834122 +S31AFE0031E20430836104348381043883A1043C83C1044083E104F0 +S31AFE0031F744382104484E8000203803FFFF280000054D81002094 +S31AFE00320C3D60FE01396B39185400103A7D4B002E3D20FE0139EF +S31AFE0032212939187D4A4A147D4903A64E800420386000044E802A +S31AFE0032360020386000084E800020386000004E800020386002B1 +S31AFE00324B004E800020388400035484F0BE7C8023782C00000074 +S31AFE00326038C0000038E000003884FFFF40810044816300007C26 +S31AFE0032758A23787D68383038E7000168E900102C0A00007D2A70 +S31AFE00328AFE707D404A787C0050507D6B43787C00FE707CC65AF9 +S31AFE00329F78386300047CE700383884FFFF4181FFC47CC333783B +S31AFE0032B44E8000209421FF707C0802A693010070932100749304 +S31AFE0032C94100789361007C9381008093A1008493C1008893E127 +S31AFE0032DE008C900100947C7B1B78807B00087C9F23782C0300B4 +S31AFE0032F3007CB82B78418200383881006038A000014BFFFB2594 +S31AFE003308801B000C2C00000041820014800100602C00000041B4 +S31AFE00331D82019848000010800100602C000000408201883D206F +S31AFE003332000039297C743C60FE01809B00047FBF4A1438633807 +S31AFE003347784800877D813B00103809FFFF280000054181014866 +S31AFE00335C3D60FE01396B38E85400103A7D4B002E3D20FE0139CF +S31AFE0033712938E87D4A4A147D4903A64E800420801D00002C00AB +S31AFE0033860000418200103D20FE0138893884480000303D20FEAF +S31AFE00339B013889388C480000243C60FE01809D00003863389408 +S31AFE0033B048008715480000EC7FA3EB784800AF457C641B783C7C +S31AFE0033C560FE0138633880480086F9480000D07FBEEB783BE0A3 +S31AFE0033DA00003F80FE013FA0FE017C9EF8AE387C38984800862C +S31AFE0033EFD9281F00044181000C387D38A0480086C93BFF000174 +S31AFE003404281F00054081FFDC3C60FE017FDDF378386338A448A6 +S31AFE0034190086AD480000843C60FE01386338A8480000883C6019 +S31AFE00342EFE01386338AC48008691881D00007FBEEB782C000037 +S31AFE003443007FBFEB78418200583F20FE013B4000003B80000A16 +S31AFE003458881E00002C00000A418200187FEBFB788C0B00012C03 +S31AFE00346D00000A4082FFF87D7F5B787FC4F3789B5F000038795B +S31AFE00348238B0480086413BDF00019B9F0000881E00007FDFF3EE +S31AFE003497782C0000004082FFBC2C180000418200183C60FE0141 +S31AFE0034AC386338AC48008615386000024800022C801B00102CBE +S31AFE0034C100000441820054386100083880005038A0000048000E +S31AFE0034D68C612C0300003860FFFF4180020438610008480086F5 +S31AFE0034EB992C0300004182FFC4880100082C00002E4082000CC1 +S31AFE00350038600000480001E02C00005E4082000C3860000348B6 +S31AFE0035150001D0813B00103809FFFF28000005418101BC3D6078 +S31AFE00352AFE01396B39005400103A7D4B002E3D20FE0139293921 +S31AFE00353F007D4A4A147D4903A64E80042083FD000038610008CC +S31AFE0035547FA4EB784800994D4800003083FD0000386100087F92 +S31AFE003569A4EB7838A0000038C00000480097C14800001483FDF6 +S31AFE00357E0000386100087FA4EB784800AC112C03000041820115 +S31AFE0035933C801D00007FE002787C09FE707D2302787C634850E9 +S31AFE0035A87C63FE707C6018F8546307FE540007BC7C630378485C +S31AFE0035BD000128801D0000A17D00049001005839210058B16958 +S31AFE0035D20004380100087D3A4B78900100683BC000003F60FE90 +S31AFE0035E7013BE100643B810068806100687FE4FB787F85E378A8 +S31AFE0035FC38DB38A0480097352C030000418200B4881F00037CEB +S31AFE0036111DF1AE3BDE0001281E00054081FFD4480000C03C6047 +S31AFE003626FE017FBEEB78386338B84800849548000044880100EB +S31AFE00363B083BE100082C000000418200287FC4F3787FEBFB78A8 +S31AFE003650880B0000980400008D2B0001388400012C0900004047 +S31AFE00366582FFEC7C9E23783800000A981E00003BDE00013800E0 +S31AFE00367A00003C60FE01981E0000386338E44800843D3861008D +S31AFE00368F083880005038A0000048008A9D2C0300003860FFFF06 +S31AFE0036A44180004038610008480084D52C0300004082FF84480E +S31AFE0036B9000028A01A000481210058B01D0004913D00003860E1 +S31AFE0036CE0004480000143C60FE01386338A8480083E938600021 +S31AFE0036E301800100947C0803A683010070832100748341007843 +S31AFE0036F88361007C8381008083A1008483C1008883E1008C3839 +S31AFE00370D2100904E8000209421FFF07C0802A693C1000893E164 +S31AFE003722000C900100147C7E1B782C1E00017C9F23784181008D +S31AFE003737143C60FE01386337D0480013C94800005448000069B7 +S31AFE00374C2C030000418200483C6000003C80000080BF00043857 +S31AFE003761633988388439F8480090957C631B794182001C8003FC +S31AFE003776000C7FC3F3787FE4FB787C0803A64E80002148000047 +S31AFE00378B103C60FE01386337E448001375800100147C0803A632 +S31AFE0037A083C1000883E1000C382100104E8000209421FFE07CED +S31AFE0037B50802A6934100089361000C9381001093A1001493C1AF +S31AFE0037CA001893E1001C900100243D200000800933002C000044 +S31AFE0037DF004082009C3FE00000807F3B5C3800000190093300B9 +S31AFE0037F43C63FFFF3C8000014800B2AD7C641B79418200183C30 +S31AFE00380960FE0138633778480082B538600000480000683F6097 +S31AFE00381E00003F40000038600000389B3B8C38BA3B904800B328 +S31AFE003833213FA000003F800000387D3B94389C3B984800B34156 +S31AFE003848809B3B8C80BA3B9080DC3B983C60FE0180FD3B943832 +S31AFE00385D6337A048008265813D3B94801F3B5C3D2900017C093A +S31AFE00387200503D600000900B3B9C38600001800100247C080319 +S31AFE003887A6834100088361000C8381001083A1001483C100181E +S31AFE00389C83E1001C382100204E8000209421FFA87C0802A69311 +S31AFE0038B181004893A1004C93C1005093E100549001005C380024 +S31AFE0038C600007C7D1B787C9C23783D20FE0190010040392936E5 +S31AFE0038DBDC9001003C386100083880006238A0000138C000009F +S31AFE0038F038E100383901003C480090C93D20FE01392936F83833 +S31AFE0039056100203880006338A0000038C0000238E100403900A9 +S31AFE00391A0000480090A53D40FE017FA3EB787F84E378394A36FF +S31AFE00392FA438A0000238C1000838E0000239010044392000010E +S31AFE003944480090992C030000408200143C60FE013863343C4806 +S31AFE0039590011B1480000E080610044480011ED7C7D1B794082B1 +S31AFE00396E00183C60FE0180810044386336C44800814948000059 +S31AFE003983BC8001003C2C0000004082000C801D0014900100383E +S31AFE0039983D20000080093B74806100387C0300404180001C804C +S31AFE0039ADBD00183D20000081693B5C7C032A147C0058404180BC +S31AFE0039C200143C60FE013863370C480080F94800006C809D00CD +S31AFE0039D710480078E9801D00FC817D001C2C0000003D200000E2 +S31AFE0039EC91693B7C4182004C80610038809D00204800121180C1 +S31AFE003A019D00FC7C7C1B787C1C2000418200143C60FE013863C3 +S31AFE003A1637247F85E378480080A9800100402C000000418200BC +S31AFE003A2B143C60FE01386337647F84E3784800808D8001005C0D +S31AFE003A407C0803A68381004883A1004C83C1005083E100543800 +S31AFE003A552100584E8000209421FFD87C0802A693410010936161 +S31AFE003A6A00149381001893A1001C93C1002093E1002490010016 +S31AFE003A7F2C3D40FE01394A36A438A0000238C0000038E000003F +S31AFE003A94390100083920000148008F412C030000408200143C24 +S31AFE003AA960FE013863343C48001059480001843D6000003D2022 +S31AFE003ABE000080A93B94800B3B903FA000007F650050807D3B56 +S31AFE003AD39C7F64DB78480077E983DD3B9C3BA000003BDE020033 +S31AFE003AE83BE000024800000C3BFF00013BDE01003F4000008000 +S31AFE003AFD1A3B945400C23E7C1F004040800040881E00002C00C6 +S31AFE003B1200FF4182FFDC806100087FC4F378480080892C0300E6 +S31AFE003B27004082FFC83C60FE0180810008386336B048008A897C +S31AFE003B3C2C030000418200F83BA000012C1D0000408200183C4B +S31AFE003B5160FE0180810008386336C448007F69480000D83B8152 +S31AFE003B66000C807E0010809E00187F85E3784800B0497C7F1B40 +S31AFE003B7B794182002883A1000C7FE3FB784800B3517C661B7807 +S31AFE003B903C60FE01386336447FA4EB787FE5FB7848007F257FA4 +S31AFE003BA5C3F378388000FF38A00100480077E9809A3B947F63D6 +S31AFE003BBADB787F85E3784800AFFD7C7F1B794182002C83A100AA +S31AFE003BCF0C7FE3FB784800B3057C661B783C60FE0138633644D7 +S31AFE003BE47FA4EB787FE5FB7848007ED9480000483D200000805F +S31AFE003BF9893B9C80BA3B947F63DB787F86E3784800B1257C7F9C +S31AFE003C0E1B794182002883A1000C7FE3FB784800B2BD7C661B65 +S31AFE003C23783C60FE01386336647FA4EB787FE5FB7848007E918C +S31AFE003C388001002C7C0803A6834100108361001483810018832E +S31AFE003C4DA1001C83C1002083E10024382100284E800020942191 +S31AFE003C62FFA07C0802A69381005093A1005493C1005893E10072 +S31AFE003C775C90010064380000007C7D1B787C9C23783D20FE0110 +S31AFE003C8C90010044392933E09001003C38610008388000663811 +S31AFE003CA1A0000138C0000038E100383901003C48008D113D2067 +S31AFE003CB6FE0139293688386100203880006C38A0000138C00028 +S31AFE003CCB0038E100403901004448008CED3D40FE017FA3EB7847 +S31AFE003CE07F84E378394A2FB038A0000238C1000838E0000239DD +S31AFE003CF50000003920000048008CE12C030000408200143C6007 +S31AFE003D0AFE013863343C48000DF9480001048001003C2C000012 +S31AFE003D1F0041820010800100442C000000408200143C60FE0156 +S31AFE003D343863369048000DD1480000DC806100384800ADC97C78 +S31AFE003D497C1B794082002080610038800100407C630214386305 +S31AFE003D5EFFFF4800ADAD7C7C1B794182004483A100387F83E3D8 +S31AFE003D73784800B1657C651B783C60FE01386334987FA4EB7865 +S31AFE003D8848007D3D3D2000003D6000003C60FE0180893B8C803B +S31AFE003D9DAB3B90386334B848007D2148000070808100388001B8 +S31AFE003DB200407C8323787C8402143884FFFF4800B2FD2C030028 +S31AFE003DC700418200143C60FE01386335C848007CF1480000409C +S31AFE003DDC806100388081004038A100484800ADD57C7C1B7941BC +S31AFE003DF182002883A100487F83E3784800B0DD7C661B783C6060 +S31AFE003E06FE01386336447FA4EB787F85E37848007CB1800100B4 +S31AFE003E1B647C0803A68381005083A1005483C1005883E1005CD5 +S31AFE003E30382100604E8000209421FF187C0802A6934100D093A3 +S31AFE003E456100D4938100D893A100DC93C100E093E100E4900116 +S31AFE003E5A00EC380000007C7D1B787C9C23783D20FE01900100FF +S31AFE003E6FC4392933A49001009C900100A4900100AC900100B459 +S31AFE003E84900100BC386100083880006238A0000138C000003814 +S31AFE003E99E100983901009C48008B213D20FE01392933B838618B +S31AFE003EAE00203880007238A0000138C0000038E100A0390100ED +S31AFE003EC3A448008AFD3D20FE01392933CC3861003838800065C8 +S31AFE003ED838A0000138C0000038E100A8390100AC48008AD93876 +S31AFE003EEDE100B03D20FE017CFE3B78392933E03861005038808C +S31AFE003F02006638A0000138C00000390100B448008AB13D20FEA3 +S31AFE003F1701392933FC386100683880006C38A0000138C0000009 +S31AFE003F2C38E100B8390100BC48008A8D3D20FE01392934143818 +S31AFE003F416100803880007338A0000138C0000038E100C0390177 +S31AFE003F5600C448008A693D40FE017FA3EB787F84E378394A343D +S31AFE003F6B3038A0000238C1000838E00006390100C839200001B8 +S31AFE003F8048008A5D2C030000408200143C60FE013863343C4806 +S31AFE003F95000B75480004B08001009C2C0000004182001C8001EE +S31AFE003FAA00BC2C00000041820010800100C82C0000004082000C +S31AFE003FBF143C60FE013863345048000B414800047C800100C47A +S31AFE003FD4814100B82C00000040820008914100C03D20000080F5 +S31AFE003FE9093B94816100C07D2A02143929FFFF7D2903963F406A +S31AFE003FFE00007D2901D67C095840912100B8408000143C60FE38 +S31AFE004013013863346C48007AAD4800042C800100B42C00000010 +S31AFE00402841820070806100B04800AADD7C7C1B794082002080FE +S31AFE00403D6100B0800100C07C6302143863FFFF4800AAC17C7CDF +S31AFE0040521B794182004483A100B07F83E3784800AE797C651B1E +S31AFE004067783C60FE01386334987FA4EB7848007A513D200000D0 +S31AFE00407C3D6000003C60FE0180893B8C80AB3B90386334B8485E +S31AFE004091007A35480003B43FE0000080810098801F3B747C04E2 +S31AFE0040A600404180001C800100C03D20000081693B5C7C040243 +S31AFE0040BB147C005840418000283C60FE01386334D4480079F9E3 +S31AFE0040D03D2000003C60FE01809F3B7480A93B5C386334B84882 +S31AFE0040E50079E1806100C848007A952803000F408100183C60B9 +S31AFE0040FAFE013863350038800010480079C14800034080010088 +S31AFE00410FB42C0000004082002C808100B87FC3F37848000351C7 +S31AFE0041242C030000408200183C60FE01808100B83863353048DD +S31AFE00413900798D4800030C3F8000003D20000080BC3B94800960 +S31AFE00414E3B903FA000007F650050807D3B9C7F64DB78480071B7 +S31AFE00416361801C3B9483FD3B9C5409C23F3BA000003B8000002C +S31AFE004178418200883FC0FE01881F00002C0000FF418200608070 +S31AFE00418D6100C87FE4FB7848007A152C0300004082004C800185 +S31AFE0041A200B42C00000041820014813F0010800100B07C0900C7 +S31AFE0041B7004082022C813F0018800100B87C0900004082022C79 +S31AFE0041CC808100C8387E35AC480083ED2C0300004182026C3B27 +S31AFE0041E18000014800001C801A3B943BBD00015400C23E7C1D91 +S31AFE0041F600403BFF01004180FF842C1C0000814100C080610046 +S31AFE00420BB04082004C3D20000080093B943D6000005400C23E36 +S31AFE0042207C1C004083EB3B9C3BA000004800001C3D200000804C +S31AFE004235093B943BBD00015400C23E7C1D00403BFF0100408077 +S31AFE00424A0010881F00002C0000FF4082FFDC7C8352143884FFBC +S31AFE00425FFF4800AE5D2C030000418200143C60FE01386335C8BB +S31AFE00427448007851480001D038A100CC806100B0808100B87C9C +S31AFE004289BE2B784800A9317C7C1B793BA000014182002C83A11E +S31AFE00429E00CC7F83E3784800AC357C661B783C60FE017FA4EB97 +S31AFE0042B378386335FC7F85E378480078093BA000002C1D000062 +S31AFE0042C841820044806100B08081009880A100C07FC6F37848D3 +S31AFE0042DD00AA517C7C1B794182002883A100CC7F83E3784800C1 +S31AFE0042F2ABE97C661B783C60FE01386336207FA4EB787F85E3B1 +S31AFE00430778480077BD7FE3FB783880000038A00100480070810A +S31AFE00431C808100C87FE3FB78480078B9800100A4812100B02CCE +S31AFE004331000000913F001040820020800100B42C00000041828D +S31AFE004346000C812100B04800001081210098480000088121007C +S31AFE00435BA0800100AC913F00142C000000408200103D2000003D +S31AFE00437080093B7C48000008800100A8901F001C800100B890E7 +S31AFE0043851F0018812100C0913F002080610098808100C0480014 +S31AFE00439A08753D200000907F00FC80893B947F63DB787FC5F3E1 +S31AFE0043AF784800A80D7C7C1B794182004C83A100CC7F83E37898 +S31AFE0043C44800AB157C661B783C60FE01386336447FA4EB787FAE +S31AFE0043D985E378480076E9480000683C60FE0138633558480089 +S31AFE0043EE76D9480000583C60FE0138633584480076C948000009 +S31AFE004403483D20000080893B9C80BA3B947F63DB787FC6F3782D +S31AFE0044184800A9157C7C1B794182002883A100CC7F83E3784879 +S31AFE00442D00AAAD7C661B783C60FE01386336647FA4EB787F8550 +S31AFE004442E37848007681800100EC7C0803A6834100D0836100B5 +S31AFE004457D4838100D883A100DC83C100E083E100E4382100E8EF +S31AFE00446C4E8000203D20000080E93B943D600000814B3B8C3D47 +S31AFE0044812000007C073A1481093B907D4A02147D4953787C09E9 +S31AFE00449640404080007054E0F0BE7C0603785407103A800A004F +S31AFE0044AB002C00FFFF4182004C7C095000418200147C095050EE +S31AFE0044C07C0016707C002040408000587D4953787C0940404017 +S31AFE0044D580002054CB103A7D295A147C09404040800010800953 +S31AFE0044EA00002C00FFFF4082FFEC7D2A4B78480000087D4A3A27 +S31AFE0044FF147C0A40404180FFA47C095000418200207C09505049 +S31AFE0045147C0016707C0020404180001091230000386000014E44 +S31AFE004529800020386000004E8000209421FFE07C0802A693619F +S31AFE00453E000C9381001093A1001493C1001893E1001C9001005F +S31AFE004553243D20000080093B943D600000814B3B8C3D200000E9 +S31AFE00456883C93B907C0002147FEA02147C1FF0407FE4FB783F32 +S31AFE00457D600000408000883F80FE013FA00000801F00002C0015 +S31AFE004592FFFF4182005C7C04F80041820010387C338C7FE5FBD6 +S31AFE0045A7784800751D7C1FF0407FE4FB7840800034801F000075 +S31AFE0045BC2C00FFFF41820028801D3B945400F0BE5409103A7C40 +S31AFE0045D1844A147C04F04040800010800400002C00FFFF4082FF +S31AFE0045E6FFEC7C9F237848000014801B3B945400F0BE540010EF +S31AFE0045FB3A7FFF02147C1FF0404180FF887C04F8004182001477 +S31AFE0046103C60FE013863338C7FE5FB78480074A9800100247C3F +S31AFE0046250803A68361000C8381001083A1001483C1001883E1CF +S31AFE00463A001C382100204E8000209421FFC87C0802A693810028 +S31AFE00464F2893A1002C93C1003093E100349001003C7C7D1B7845 +S31AFE0046647C9C2378380000003D20FE0190010020392932F43885 +S31AFE0046796100083880006338A0000038C0000238E10020390060 +S31AFE00468E0000480083313D40FE017FA3EB787F84E378394A2F06 +S31AFE0046A3B038A0000238C1000838E000013900000039200000C8 +S31AFE0046B8480083252C030000418200B4810100203D2000003D17 +S31AFE0046CD60000081493B90800B3B942C0800007FA050503FE073 +S31AFE0046E20000418200103D20FE01388933484800000C3D20FEA5 +S31AFE0046F701388933543C60FE0138633308480073C13D20000017 +S31AFE00470C80093B943B8000005409C23F4182005C3FC0FE01887E +S31AFE0047211D00002C0000FF418200348001002080BD00102C0026 +S31AFE00473600004182000C80DD00FC4800000880DD001480FD0004 +S31AFE00474B18811D001C387E33607FA4EB784800736D801F3B941E +S31AFE0047603B9C00015400C23E7C1C00403BBD01004180FFB08053 +S31AFE00477501003C7C0803A68381002883A1002C83C1003083E16D +S31AFE00478A0034382100384E8000209421FFB87C0802A693210017 +S31AFE00479F2C93410030936100349381003893A1003C93C1004059 +S31AFE0047B493E100449001004C7C7D1B787C9C23783BE000003DC0 +S31AFE0047C920FE013929319093E10020386100083880006638A06A +S31AFE0047DE000038C0000238E1002039000000480081D53D40FE3D +S31AFE0047F3017FA3EB787F84E378394A2FB038A0000238C100088C +S31AFE00480838E000013900000039200000480081C92C03000041EA +S31AFE00481D8202C03C60FE01386331BC48007D992C0300004082CC +S31AFE00483200143C60FE01386331EC480072894800029C3C60FE43 +S31AFE00484701386331F848007279800100202C0000004182006C64 +S31AFE00485C3D20000080893B983D600000800B3B943D200000387E +S31AFE00487184FFFC80693B8C7C8401D63BA100247C0002147C63B7 +S31AFE00488602147FA5EB784800A3317C7C1B797FBEEB7841820071 +S31AFE00489B3C83A100247F83E3784800A6357C661B783C60FE01F0 +S31AFE0048B03863321C7FA4EB787F85E37848007209480000143CC6 +S31AFE0048C560FE0138633244480071F93BC100243F400000839AFC +S31AFE0048DA3B943C0000027F9C00003F20000083B93B9C4FFEEBF3 +S31AFE0048EF827C000026540007FE7C0000D07C0900F87F9C003817 +S31AFE0049045529039C7F9C4B787FA3EB783880000038A001004841 +S31AFE004919006A813D20FE013F6000003969328C801B3B8C814913 +S31AFE00492E328C810B0004939D0018915D0000911D0004901D008D +S31AFE00494314901D00103BBD01007FA3EB783880000038A001007B +S31AFE00495848006A413D60FE01801B3B8C810B3294392B32948059 +S31AFE00496DE9000C81690004814900087C00E214939D0018911D14 +S31AFE0049820000917D0004915D000890FD000C901D0014901D000D +S31AFE004997103BBD01007FA3EB783880000038A00100480069F146 +S31AFE0049AC3D20FE01800932A4396932A4812B0008814B0004A19A +S31AFE0049C10B000C913D0008901D0000915D0004B11D000C880BE4 +S31AFE0049D6000E3F800000981D000E817A3B94801C3B907D2B5A05 +S31AFE0049EB147C090050901D0014917D0018901D00103BBD01002D +S31AFE004A007FA3EB783880000038A001004800698D801C3B908062 +S31AFE004A159A3B943D60FE01814B32B47F640050392B32B4A109AA +S31AFE004A2A000C8009000481690008915D0000901D0004917D003B +S31AFE004A3F08B11D000C909D0018937D0010937D00147F63DB78BE +S31AFE004A547FC5F3784800A1653BFF00013BFF00017C7C1B793B0F +S31AFE004A69FF00013BFF00014182002C83A100247F83E37848001D +S31AFE004A7EA45D7C661B783C60FE013863321C7FA4EB787F85E3B8 +S31AFE004A9378480070314800004480993B9C7F63DB7857E5402E4E +S31AFE004AA87FC6F3784800A2817C7C1B794182002883A100247F9C +S31AFE004ABD83E3784800A4197C661B783C60FE01386332C47FA439 +S31AFE004AD2EB787F85E37848006FED8001004C7C0803A6832100C7 +S31AFE004AE72C83410030836100348381003883A1003C83C100405E +S31AFE004AFC83E10044382100484E8000209421FFF87C0802A69002 +S31AFE004B1101000C7C641B783C60FE013863316848006FA53C6044 +S31AFE004B2600003C8000003CA0FE0138633988388439F838A53188 +S31AFE004B3B8848007E018001000C7C0803A6382100084E80002009 +S31AFE004B509421FFE87C0802A69381000893A1000C93C100109331 +S31AFE004B65E100149001001C3F8000003D20000080BC3B94808965 +S31AFE004B7A3B903FA000007C7F1B78807D3B9C7C852050480067F6 +S31AFE004B8F35801C3B9483BD3B9C5409C23F3B8000003FC000003E +S31AFE004BA441820044881D00002C0000FF418200207FE3FB787FEA +S31AFE004BB9A4EB7848006FED2C0300004082000C7FA3EB7848006E +S31AFE004BCE0020801E3B943B9C00015400C23E7C1C00403BBD0144 +S31AFE004BE3004180FFC4386000008001001C7C0803A683810008C7 +S31AFE004BF883A1000C83C1001083E10014382100184E8000203811 +S31AFE004C0D8400035484F0BE7C8023782C00000039600000388469 +S31AFE004C22FFFF408100207C802378812300002C00000038630098 +S31AFE004C37047D6B4A783884FFFF4181FFE87D635B784E800020B2 +S31AFE004C4C9421FF207C0802A67D800026934100C8936100CC933D +S31AFE004C618100D093A100D493C100D893E100DC900100E49181DE +S31AFE004C7600C43BA000007C7B1B787C9A237893A1009893A1004B +S31AFE004C8BB0386100083880000038A0000C480067013D20000115 +S31AFE004CA08149211C3B8100183800000C396000013D20FE017F67 +S31AFE004CB583E378B0010010B161000E91410008B3A1000C39298B +S31AFE004CCA2D703880007638A0000038C0000238E1009039000052 +S31AFE004CDF0048007CE13D20FE0139292D783861003038800072C1 +S31AFE004CF438A0000038C0000238E100943900000048007CBD3D31 +S31AFE004D0920FE0139292D88386100483880006238A0000138C08F +S31AFE004D1E000038E100983901009C48007C993D20FE0139292DAD +S31AFE004D3398386100603880006D38A0000138C0000138E100A026 +S31AFE004D48390100A448007C753D20FE0139292DBC38610078384B +S31AFE004D5D80006838A0000138C0000138E100A8390100AC480094 +S31AFE004D727C513D40FE017F86E3787F63DB787F44D378394A2D8C +S31AFE004D87D438A0000138E00005390100B03920000148007C45FC +S31AFE004D9C2C0300003B8000004182030C800100AC2C00000041A8 +S31AFE004DB182002C806100A838810008480093DD2C030000408248 +S31AFE004DC600183C60FE01808100A838632DE048006CF1480002E1 +S31AFE004DDBD8800100A42C000000418200E883A100A03BBD00012E +S31AFE004DF07FA3EB7848006D8D7C651B783C80FE017FA3EB7838F7 +S31AFE004E05842DF848006EB52C0300004082006C812100A07D2440 +S31AFE004E1A4B78892900003809FFBF280000194181000C380900BB +S31AFE004E2F205409063E7D204B782C0000794182002841810010E7 +S31AFE004E442C00007841820014480000282C00007A4182001848A1 +S31AFE004E5900001C3B8000014800006C3B800002480000643B8090 +S31AFE004E6E00034800005C3C60FE0148000048806100A03C80FE1E +S31AFE004E830138842E1448006D892C030000408200283D20000063 +S31AFE004E9880093B843B8000002C000000408200283C60FE013815 +S31AFE004EAD632E1C48006C15480001FC3C60FE01808100A038635A +S31AFE004EC22E0048006C01480001E82E1C00004092007480610052 +S31AFE004ED7B02C030000408200283C60FE0138632E4448006BDDC1 +S31AFE004EEC3C60FE013C80000038632E583884330C48006BC94876 +S31AFE004F010001B03BA100B43881000838A000017FA6EB784800EC +S31AFE004F16800D7C7B1B7940800014806100B483A100B048008362 +S31AFE004F2BA5480000403C60FE01808100903863D0C8480001C1D7 +S31AFE004F40480000543BA100B4806100B07F84E3787FA5EB78486E +S31AFE004F5500A6797C7B1B7940800028806100B483A100B0480000 +S31AFE004F6AAA017C651B783C60FE0138632E687FA4EB7848006B0A +S31AFE004F7F49480001303C60FE01808100903863F7504800016D93 +S31AFE004F943D2000013BE922343B8000003B4100B84800000C7F6A +S31AFE004FA97CD1AE3B9C0001281C0003418100184800016D7C7B4E +S31AFE004FBE1B794080FFE8801F0110900100B42C1B0000418000A2 +S31AFE004FD3D44800010D800100942C000000418200548001009C26 +S31AFE004FE82C000000408200143C60FE0138632E8048006ACD4803 +S31AFE004FFD0000A8838100984800000C987C00003B9C00014800CF +S31AFE00501201157C631B794080FFF03C60FE018081009838632E50 +S31AFE005027A47F85E37848006A99480000743C80FE0138842EBC05 +S31AFE00503C386100B938A0000348006C2D2C0300003B8100B8406A +S31AFE0050518200143C60FE0038635124480006DD480000448801C6 +S31AFE00506600B82C00005340820028893C00013929FFD0280900E8 +S31AFE00507B09418100183C60FE008081009838635124480001C9E4 +S31AFE005090480000143C60FE01808100B838632EC048006A2540B7 +S31AFE0050A592000C7FA3EB7848008009800100E4818100C47C084F +S31AFE0050BA03A6834100C8836100CC838100D083A100D483C100E8 +S31AFE0050CFD883E100DC7D808120382100E04E8000203D2000018D +S31AFE0050E4392922348009010C3969000490090108916901044ED0 +S31AFE0050F98000203D600001392B22343940000038000100906BF9 +S31AFE00510E2234914901189009010C90890114914901084E8000BA +S31AFE005123209421FFF07C0802A693C1000893E1000C9001001402 +S31AFE0051383D2000013BE9223483DF01082C1E00004080000C38CD +S31AFE00514D60FFFF480000EC408200C4801F01142C00000041828E +S31AFE0051620038817F01183D200000392933047C8958AE396B003E +S31AFE005177013C60FE01917F011838632D6848006941801F011880 +S31AFE00518C280000064081000893DF01183D2000013BE922348030 +S31AFE0051A11F010C2C0000FF41810020801F01142C000000418219 +S31AFE0051B6FF983C60FE0138632D6C480069054BFFFF883D200096 +S31AFE0051CB0181292234381F00047C0303783880010038BF0110B4 +S31AFE0051E07D2803A6901F01044E8000212C030000907F010C90EA +S31AFE0051F57F010841810020801F01142C0000004182FF483C60B1 +S31AFE00520AFE0138632D6C480068B54BFFFF383D400001394A224F +S31AFE00521F34812A0108816A01043929FFFF912A0108886B000087 +S31AFE005234396B0001916A0104800100147C0803A683C10008832B +S31AFE005249E1000C382100104E8000209421FF707C0802A69281A5 +S31AFE00525E006092A1006492C1006892E1006C93010070932100EE +S31AFE00527374934100789361007C9381008093A1008493C10088CA +S31AFE00528893E1008C900100947C7D1B787C9523783B6000003ADB +S31AFE00529D8000013B2000003AC000003AE0FFFF480002602C052F +S31AFE0052B20053418200183C60FE0138632C087F64DB7848006865 +S31AFE0052C701480002547FA803A63B7B00024E80002138A1005887 +S31AFE0052DC38000000547C063E7CBA2B78900100587FA3EB7838EE +S31AFE0052F1800001480002697C7F1B79408000183C60FE013863D3 +S31AFE0053062C347F64DB78480067B94800020C381CFFD0280000EF +S31AFE00531B093B7B0001418101AC3D60FE01396B2D405400103AFF +S31AFE0053307D4B002E3D20FE0139292D407D4A4A147D4903A64E61 +S31AFE0053458004207FA3EB78389CFFD17F45D378480002092C14E0 +S31AFE00535A00007C7E1B78381BFFD17FD8F3787F60E21441820030 +S31AFE00536F2C2C1500004182001C7F3EA8503C60FE0138632C586A +S31AFE0053847F24CB784800673D480000083B2000003A8000003D9C +S31AFE00539920000081693B747FDECA147D39F0507C1748107C00AA +S31AFE0053AE01107C0003B87D2900787C1E58407EE000387C174BDA +S31AFE0053C378418000143D20000080093B5C7C1E00404081001854 +S31AFE0053D83C60FE0138632C707FC4F378480066E14800013438F8 +S31AFE0053ED1F002E7FFC00507FE9FB782C0900007F7BFA143BFF3D +S31AFE005402FFFF408100307F5CD3787FA3EB78388000017F85E357 +S31AFE00541778480001457FE0FB782C000000987E00003BDE000148 +S31AFE00542C3BFFFFFF4181FFDC7FA3EB783880000138A000004834 +S31AFE00544100011D88A1005B7C6318F85466063E7C0628003B7B63 +S31AFE005456000190A10058418200183C60FE0138632CAC7F04C384 +S31AFE00546B7848006659480000AC7D39F0507C09B0107C000110ED +S31AFE0054807C0003B87D2900787EC000387C164B78480000547FD8 +S31AFE005495A3EB78209C003B7F45D378480000BD7C7E1B783D2003 +S31AFE0054AA00003C60FE0193C93B7C38632CE87FC4F3787EE5BBC0 +S31AFE0054BF787EC6B37848006601480000543C60FE0138632D102F +S31AFE0054D47F64DB787F85E378480065E94800003C7F7FDB787F40 +S31AFE0054E9BEEB78480000083BFF00017FC803A64E8000212C03F0 +S31AFE0054FE000A4082FFF07FDDF3787FFBFB787FA803A64E800088 +S31AFE005513217C651B794181FD98800100947C0803A682810060ED +S31AFE00552882A1006482C1006882E1006C830100708321007483DA +S31AFE00553D4100788361007C8381008083A1008483C1008883E1E0 +S31AFE005552008C382100904E8000209421FFE07C0802A693610029 +S31AFE0055670C9381001093A1001493C1001893E1001C9001002402 +S31AFE00557C7C9E23787FC0F3782C0000007C7B1B787CBC2B783BEB +S31AFE005591A000003BDEFFFF408101787F6803A64E8000217F68AA +S31AFE0055A603A6547F063E4E800021393FFFD0381FFFBF21290097 +S31AFE0055BB09392000007D29491420000005380000007C00011484 +S31AFE0055D07D270379546B063E3920000040820010381FFF9F2857 +S31AFE0055E500000541810008392000012C09000041820104392B23 +S31AFE0055FAFFD0380BFFBF7D2A4B787C0803785529063E54000643 +S31AFE00560F3E21290009392000007D294914200000053800000038 +S31AFE0056247C0001147D2703793920000040820010380BFF9F2888 +S31AFE00563900000541810008392000012C090000418200B0393F0F +S31AFE00564EFFD05520063E2800000957BD402E4181000C7D234B4F +S31AFE0056637848000030381FFF9F280000054181000C387FFFA9EF +S31AFE0056784800001C381FFFBF393FFFC9200000057C0001107C32 +S31AFE00568D0003B87C0348385540063E280000094181000C7D49AC +S31AFE0056A2537848000030380BFF9F280000054181000C392BFF6D +S31AFE0056B7A94800001C5500063E392BFFC9200000057C00011056 +S31AFE0056CC7C0003B87C094838546020362C1C00007C034B787F76 +S31AFE0056E1BD1B784182001C801C00007C001A14901C0000480047 +S31AFE0056F6000C3860FFFF480000187FC0F3782C0000003BDEFFAB +S31AFE00570BFF4181FE907FA3EB78800100247C0803A68361000CEF +S31AFE0057208381001083A1001483C1001883E1001C382100204E81 +S31AFE0057358000209421FFF87C0802A69001000C3C60FE01386310 +S31AFE00574A2BEC480063798001000C7C0803A6382100084E800022 +S31AFE00575F203860001C4E8000209421FFE87C0802A693A1000C67 +S31AFE00577493C1001093E100149001001C7C7D1B78813D000483B2 +S31AFE005789C900044800002C73E00012418200107FA3EB787FE4A6 +S31AFE00579EFB784800004973E000084182000C7FA3EB78480001F6 +S31AFE0057B3A9B3FE0010A01E00107000001A541F043E2C1F00001B +S31AFE0057C84082FFC88001001C7C0803A683A1000C83C10010836E +S31AFE0057DDE10014382100184E8000209421FFE87C0802A6938183 +S31AFE0057F2000893A1000C93C1001093E100149001001C7C7D1BA9 +S31AFE0058077883DD000483FE0018A01F0000700090002C00100018 +S31AFE00581C408200683B9E0028813D0000801E0010816900247C52 +S31AFE00583100F850816B00085400F87AA13F00007C9C002E7FA314 +S31AFE005846EB7838A000007D6803A67129EFFFB13F00004E80003A +S31AFE00585B21A01F0000700920004182000C83FE0010480000080B +S31AFE0058703BFF0008A01F0000700090002C0010004182FFA493E9 +S31AFE005885FE00188001001C7C0803A68381000883A1000C83C1AA +S31AFE00589A001083E10014382100184E8000209421FFE87C0802EC +S31AFE0058AFA693A1000C93C1001093E100149001001C81230004B9 +S31AFE0058C48169000C83EB00047C188AA654000FFE2C00000041D1 +S31AFE0058D9820028812B0004A00B00022C000000408100187C002E +S31AFE0058EE4BAC7C0004AC3400FFF0392900104181FFF02C050007 +S31AFE00590300408100387C9E23787CBD2B78807E00002C030000D4 +S31AFE0059184182001880BE00047FE4FB784800599D801E00047F24 +S31AFE00592DFF021437BDFFFF3BDE00084082FFD88001001C7C087F +S31AFE00594203A683A1000C83C1001083E10014382100184E800068 +S31AFE005957209421FFE87C0802A693A1000C93C1001093E1001423 +S31AFE00596C9001001C7C7D1B7883DD000483FE001C4800004881D7 +S31AFE0059813D000093FE000C816900247FA3EB78800B0004A09FD2 +S31AFE00599600027C0803A64E800021A01F000060008000B01F006C +S31AFE0059AB00A13F0000712020004182000C83FE0014480000089E +S31AFE0059C03BFF0008A01F0000700090002C0010004182FFB0938C +S31AFE0059D5FE001C8001001C7C0803A683A1000C83C1001083E1ED +S31AFE0059EA0014382100184E8000209421FFD87C0802A6930100E5 +S31AFE0059FF089321000C93410010936100149381001893A1001C5F +S31AFE005A1493C1002093E100249001002C83C300047C9823788334 +S31AFE005A29BE00087CBB2B78A01D00007CD93378700980007CFA98 +S31AFE005A3E3B78418200447FBFEB783F80FE01A01F0000700920DE +S31AFE005A53004182000C83FE0010480000083BFF00087C1FE800C5 +S31AFE005A684082000C387C2BAC48006055A01F00007009800040D7 +S31AFE005A7D82FFD07FFDFB78A01D00007009200041820010801E09 +S31AFE005A9200107C0903784800000C381D0008813E0010901E00BD +S31AFE005AA7087C09E8502C1B00005400F87A393E0028B33D000283 +S31AFE005ABC7F49012E83FD0004408100307F1EC3787F7CDB7880BF +S31AFE005AD19E000080BE00047FE3FB78480057E5801E0004379C0E +S31AFE005AE6FFFF3BDE00087FFF02144082FFE07C188AA654000F2C +S31AFE005AFBFE2C00000041820028813D0004A01D00022C000000D0 +S31AFE005B10408100187C004BAC7C0004AC3400FFF039290010412E +S31AFE005B2581FFF0A01D00006000DC00B01D00008001002C7C0800 +S31AFE005B3A03A6830100088321000C83410010836100148381009D +S31AFE005B4F1883A1001C83C1002083E10024382100284E8000208A +S31AFE005B648123000481690008A06B000054638BFE686300014E29 +S31AFE005B79800020688401003004FFFF7C6021104E8000208123B5 +S31AFE005B8E000481690004800B000060000030900B00004E800088 +S31AFE005BA3208123000481690004800B000054000732900B000080 +S31AFE005BB84E8000209421FFD87C0802A69321000C9341001093F7 +S31AFE005BCD6100149381001893A1001C93C1002093E10024900131 +S31AFE005BE2002C83230008839900047FDE9AA677DEFFFF3C800004 +S31AFE005BF700388433A03860000838A0000648000D2D7F788AA6DF +S31AFE005C0C577B0FFE39200000380000807C0903A6612010003C94 +S31AFE005C21C00E007C0004AC7D398BA67CD88BA67C198BA67CD8EA +S31AFE005C368BA6392900104200FFE03D2004007C0004AC7D388BC4 +S31AFE005C4BA63FA000003CC0FE003CE0FE013D20000038C65FD01C +S31AFE005C6038E7EA7C391D3B8839297C583860001C388000007F6C +S31AFE005C7525CB7848004811807D3B883BFE3C004800482D386083 +S31AFE005C8A001C48004C393860001C48004AE1801E0A003B5E0AA6 +S31AFE005C9F005400073293FC0000901E0A00935C00047FE3FB7850 +S31AFE005CB43880000038A000A4480056DD38C000047CC903A62F0F +S31AFE005CC99B0000391E2C00395E2C203D2000003D60000038E0AF +S31AFE005CDE000038009000915C001C39294CA0396B6460911C0079 +S31AFE005CF310911C0008911C0018915C0014915C000CB0EA000278 +S31AFE005D08912A0004B00A0000392905F0394A00084200FFECA456 +S31AFE005D1D0AFFF87D09437860002000B00A0000394000047D49AE +S31AFE005D3203A6399F007238000000B009000291690004B00900BB +S31AFE005D4700396B05F0392900084200FFEC7D284B78A408FFF808 +S31AFE005D5C3B60000160002000B0080000A13E09523BA0001061D4 +S31AFE005D71290003B13E0952A01E0950390005F05400043AB01EFE +S31AFE005D860950A13E09543B80FFFF7129FFFDB13E0954A01E090D +S31AFE005D9B623D40DEBB7000FFCFB01E0962A13E0960614A20E30A +S31AFE005DB07129FFCFB13E0960A01E09643960000060000030B016 +S31AFE005DC51E0964A13E09523860888861290A00B13E0952A01EBC +S31AFE005DDA09503880000F7000F5FFB01E0950813E0AEC38C00553 +S31AFE005DEFEE5529002E913E0AEC801E0AEC38E000406000003DB3 +S31AFE005E04901E0AEC813E0AEC38002C20552906B0913E0AEC931C +S31AFE005E197E0030B01F000039202C00B13F00029BBF00049BBFC4 +S31AFE005E2E0005B11F0006939F0030915F0034917F0038917F00A2 +S31AFE005E433C917F0040B07F0044B17F0044B09F0046B17F0048C6 +S31AFE005E58B0DF004AB0FF004CB11F004EB11F005038000006B130 +S31AFE005E6D7F00587C0903A6B17F005A3CA00000B17F005CB17FF5 +S31AFE005E82005E38A533A67D8963788C05FFFF9809000039290080 +S31AFE005E97014200FFF438000000B01F0078B01F0094B01F009675 +S31AFE005EACB01F0098B01F009AB01F009EB01F00A0B01F00A23987 +S31AFE005EC1200001B13E09C0A01E09C070060001418200187FC9CE +S31AFE005ED6F378A00909C0700A00014082FFF87D3E4B783800FFED +S31AFE005EEBFFB01A00103920001AB13A0014396000003C001088E6 +S31AFE005F00917A00046000000C901A00003920D555B13A000E38AF +S31AFE005F1500280AB01A0008392000903D60FA10992B0000A01E5D +S31AFE005F2A096260000001B01E0962A13E09605529043CB13E095B +S31AFE005F3F60419E00103D6002007C0004AC7D788BA6813900004F +S31AFE005F543C800000816900247F23CB78800B0000388433A07CEF +S31AFE005F690803A64E800021386000018001002C7C0803A6832168 +S31AFE005F7E000C83410010836100148381001883A1001C83C10092 +S31AFE005F932083E10024382100284E8000209421FFF87C0802A606 +S31AFE005FA89001000C4BFFF7BD3860001C480049113860001C48F3 +S31AFE005FBD0047B98001000C7C0803A6382100084E80002094210D +S31AFE005FD2FFF87C0802A69001000C3860001C48004631386000EB +S31AFE005FE7038001000C7C0803A6382100084E8000209421FFF0F1 +S31AFE005FFC7C0802A693C1000893E1000C900100143D6000003D05 +S31AFE006011200000392939883BEB39847C1F4840418000207D3E91 +S31AFE0060264B78813F00003BFFFFFC7D2803A64E8000217C1FF0E1 +S31AFE00603B404080FFEC800100147C0803A683C1000883E1000CE3 +S31AFE006050382100104E8000209421FFF87C0802A69001000C3D2E +S31AFE006065200000800937042C00000041820010800937049003E8 +S31AFE00607A0094480000243D20000090693BF0480018197C16027F +S31AFE00608FA628007A124081000C38007A127C1603A68001000C45 +S31AFE0060A47C0803A6382100084E8000204E800020386000004E93 +S31AFE0060B98000209421FFF07C0802A693E1000C900100144800F1 +S31AFE0060CE05F13D2000003889366C800400083BE000002C000030 +S31AFE0060E300418200307FE3FB787C9F2378809F000080BF0004C4 +S31AFE0060F880DF000888FF000C3BFF0010480004C1801F00082C6B +S31AFE00610D0000004082FFE0800100147C0803A683E1000C38214D +S31AFE00612200104E8000203C000A007C0004AC7C108BA67C0004B7 +S31AFE006137AC7C188BA63C000C004C00012C7C108BA64C00012CE7 +S31AFE00614C7C0004AC7C188BA63C0002004C00012C7C108BA64C89 +S31AFE00616100012C7C0004AC7C188BA64E8000209421FFF87C08E9 +S31AFE00617602A69001000C480000ED38007A127C1603A680010016 +S31AFE00618B0C7C0803A6382100084E8000203D20002F6129AF08A6 +S31AFE0061A07C6349D63C00431B6000DE837C0300967C63FE707CAF +S31AFE0061B50096707D6300507D3602A67D605B782C000000396BC0 +S31AFE0061CAFFFF4C810020394BFFFF7C1602A67C0900004182FFCE +S31AFE0061DFF87C0903787D605B782C0000007D4B53784181FFE09F +S31AFE0061F44E8000209421FFF87C0802A69001000C3D20FF006172 +S31AFE00620929093038000001B00900007C0006ACA00900007C00D5 +S31AFE00621E06AC5400AAFF38600000418200302060003A3D6000D6 +S31AFE006233005460103A396B33A87D6B002E3D2000003929349438 +S31AFE0062487C89002E7D6803A64E800021546307FA8001000C7CCC +S31AFE00625D0803A6382100084E8000203D200000394933A8390035 +S31AFE00627200407C0A402E3D20FE00392960B47C00480041820087 +S31AFE00628718800A00403D20FE013929B2187C00480040820034DA +S31AFE00629C3D20FE00392961F83D600000380000007D2A412E6088 +S31AFE0062B100DEAD396B34947C0B412E3D2000003929358038003B +S31AFE0062C600007C09412E3D60FE01800B3AAC3D20FE0139293AC6 +S31AFE0062DB707D2902147D2903A64E8004203D20FF006129001443 +S31AFE0062F0800900007C0006AC64000001900900007C0006AC486A +S31AFE0063050000E83D20FF0061290200A00900007C0006AC600078 +S31AFE00631A0008B00900007C0006AC480000C83D20FF0061290283 +S31AFE00632F00A00900007C0006AC60000004B00900007C0006AC33 +S31AFE006344480000A83D20FF0061290240A00900007C0006AC60F1 +S31AFE006359000004B00900007C0006AC480000883D20FF0061298A +S31AFE00636E0220A00900007C0006AC60000008B00900007C00067A +S31AFE006383AC480000683D20FF0061290220A00900007C0006ACC6 +S31AFE00639860000004B00900007C0006AC480000483D20FF006154 +S31AFE0063AD290940800900007C0006AC60000080900900007C00B9 +S31AFE0063C206AC480000283D20FF0061290948816900007C0006FD +S31AFE0063D7AC3C00800054005D7E7D6B0378916900007C0006AC8B +S31AFE0063EC3D60FE01800B3BBC3D20FE0139293B587D2902147DF0 +S31AFE0064012903A64E8004203D20FF0061290200A00900007C00B1 +S31AFE00641606AC5400063E60000100B00900007C0006AC48000093 +S31AFE00642B683D20FF0061290240A00900007C0006AC5400063E59 +S31AFE00644060000100B00900007C0006AC480000443D20FF0061B2 +S31AFE006455290220A00900007C0006AC5400063E60000100B0095A +S31AFE00646A00007C0006AC480000203D20FF0061290940800900CB +S31AFE00647F007C0006AC6000E000900900007C0006AC3D60FE0133 +S31AFE006494800B3CA43D20FE0139293C407D2902147D2903A64EF1 +S31AFE0064A98004203D20FF0061290014800900007C0006AC600025 +S31AFE0064BE0040900900007C0006AC4E8000203D20FF00612902E8 +S31AFE0064D300A00900007C0006AC60000008B00900007C0006AC8A +S31AFE0064E84E8000203D20FF0061290200A00900007C0006AC608E +S31AFE0064FD000004B00900007C0006AC4E8000203D20FF006129C7 +S31AFE0065120240A00900007C0006AC60000004B00900007C0006B8 +S31AFE006527AC4E8000203D20FF0061290220A00900007C0006ACE2 +S31AFE00653C60000008B00900007C0006AC4E8000203D20FF00614C +S31AFE006551290220A00900007C0006AC60000004B00900007C0076 +S31AFE00656606AC4E8000203D20FF0061290940800900007C000642 +S31AFE00657BAC60000080900900007C0006AC4E8000203D20FF006A +S31AFE00659061290948816900007C0006AC3C00800054000FFE7D65 +S31AFE0065A56B0378916900007C0006AC4E8000207C1E22A660001F +S31AFE0065BA00077C1E23A64E8000209421FFF093E1000C54E0FF19 +S31AFE0065CFFE70FF00012F0000002F8300207CC0FE707D60002697 +S31AFE0065E4556B1FFE54A500267D400026554ADFFE7C0600507DF4 +S31AFE0065F94A00D07CE0002654E7EFFE7D6B00D060A808FF5400AA +S31AFE00660E0FFE7D0858787D4950F860A508FD7CFF00387CAB58C7 +S31AFE00662338714A000D2F9F00007D654378548400267129001D3E +S31AFE0066387D4A4B78608402003960000039000020419E005C5458 +S31AFE00664D6B402E7D55C3A67D70C3A67C93C3A67CB6C3A660A0B7 +S31AFE00666201007D5DC3A67D78C3A67C9BC3A67C1EC3A63863005F +S31AFE006677013CC6FF807F8340007CC0FE707C0600507D20002607 +S31AFE00668C5529EFFE54000FFE7D2700393C8400803CA50080406B +S31AFE0066A182FFAC656020007C10C3A67C18C3A683E1000C382113 +S31AFE0066B600104E800020380000007C19C3A6380000207C0903B7 +S31AFE0066CBA639200000380000007C15C3A67D30C3A67C13C3A677 +S31AFE0066E07C16C3A67C1DC3A67D38C3A67C1BC3A67C1EC3A6394A +S31AFE0066F52901004200FFD83C00200060001F007C10C3A67C18E5 +S31AFE00670AC3A64E8000209421FDE87CDE9AA674C6FFFF3D600016 +S31AFE00671F00812B36BC2C090000408202003940003038000001E8 +S31AFE0067347D4903A6900B36BCB12609C43800000039263C807DDC +S31AFE006749284B789806086038E62E0838A1000838862E0038618C +S31AFE00675E00093981021198090000392900014200FFF839202E88 +S31AFE00677300B1280002396000103940020938002E089968000591 +S31AFE00678899680004B0080000B14800063920A800B1262E0838F6 +S31AFE00679D000101B007000290A700047C8B2378B14B0002380015 +S31AFE0067B200A59801000890AB0004B1262E003800000098060866 +S31AFE0067C7643920005099260868380000019806086039200111D3 +S31AFE0067DCB12609C0A00609C070090001418200187CC93378A0B0 +S31AFE0067F10909C0700A00014082FFF87D264B7838000211B00622 +S31AFE00680609C0A12609C071200001418200187CC93378A0090911 +S31AFE00681BC0700A00014082FFF87D264B78392000007D2903A662 +S31AFE006830380000819806086C7D4902A6614AC3517D4903A6A048 +S31AFE0068450B000070098000418200084200FFF4394001007D49F6 +S31AFE00685A03A63D2000013929807439600000380000FF7C09591A +S31AFE00686FAE396B00014200FFF87D8763787C6B1B787C0B38006C +S31AFE0068844182009C3CA00001880B00002C00004D4082008088E9 +S31AFE0068990B00012C00004F40820074880B00022C000054408252 +S31AFE0068AE00688C0B000839400000892B00015400402E7C084B0B +S31AFE0068C3787C0A4000396B000240800054388580747C651B789F +S31AFE0068D8880B0000396B00017D693A787D23FE707C0451AE7CCE +S31AFE0068ED604A787C0018507C00FE70394A00017CA900787C0AFB +S31AFE00690240007D6000387C0B4B784180FFCC48000010396B0055 +S31AFE006917017C0B38004082FF70380000009806086038210218C5 +S31AFE00692C4E8000209421FFE87C0802A693A1000C93C100109365 +S31AFE006941E100149001001C7C7D1B787C9F23787CBE2B784BFF32 +S31AFE006956FDBD3D20000139698074394B01007C0B50404080001E +S31AFE00696B8457A8063E880B00007C00400040820054886B0001F3 +S31AFE006980396B00027F83F0004FFEE3827C000026540007FE7C3D +S31AFE0069950000D07FC900787C6000387C034B794081004C7C6910 +S31AFE0069AA03A67D695B787FE4FB7888090000392900019804000C +S31AFE0069BF00388400014200FFF048000028886B00013803000230 +S31AFE0069D47D2B00EE5529063E2C0900FF4182000C7C0B504041F7 +S31AFE0069E980FF88386000008001001C7C0803A683A1000C83C1B8 +S31AFE0069FE001083E10014382100184E8000209421FFF87C080267 +S31AFE006A13A69001000C4800463D8001000C7C0803A63821000841 +S31AFE006A284E8000203C80FF00608400007C9E9BA63CA0FA106027 +S31AFE006A3DA500013C60000060630000986500007C788AA63C607E +S31AFE006A520A007C0004AC7C788BA63C600C007C0004AC7C788B7D +S31AFE006A67A63C6004007C0004AC7C788BA63C6001007C0004ACB6 +S31AFE006A7C7C788BA63C6007007C0004AC7C788BA67C708AA63C90 +S31AFE006A91600A007C708BA64C00012C3C600C007C708BA64C00DB +S31AFE006AA6012C3C6004007C708BA64C00012C7C0004AC3C6000AC +S31AFE006ABB6060632400906400003C60FFFF6063FF8890640004AB +S31AFE006AD03C600000606300C2B06402003C6055CC6063AA339089 +S31AFE006AE564032090640324906403289064032C386000C3B06445 +S31AFE006AFA022038600083B06402403CA0FE0060A56C9C3CC0FE0F +S31AFE006B0F0060C66D9C7CE530507CE7167038C000008065000097 +S31AFE006B249064017C90C4016838A5000438C600017C063800414F +S31AFE006B3980FFE838600200B064017A3C601880606310009064B8 +S31AFE006B4E01703C60FE00606304013CA0FF8060A509609064019D +S31AFE006B630090A401043C600000606300813CA0FFC060A504005C +S31AFE006B789064010890A4010C3C600000606300803CA0000060AB +S31AFE006B8DA504009064011090A401143C600000606300803CA03D +S31AFE006BA2000060A504009064011890A4011C3C60FA0060630416 +S31AFE006BB7013CA0FFE060A509309064012090A401243C60800041 +S31AFE006BCC606300013CA0A00060A501089064012890A4012C3CA8 +S31AFE006BE160FA21606300013CA0FFFF60A501089064013090A41B +S31AFE006BF601343C60FC00606300013CA0FF8060A5094090640157 +S31AFE006C0B3890A4013C3C60020060630000906402808064028486 +S31AFE006C205463653E2C030000418200103C605F506063D00048D9 +S31AFE006C3500000C3C6000006063D000906402843C4000003C6079 +S31AFE006C4AFF0060630014904300003C400000604200007C42109C +S31AFE006C5FF87C5603A6384000013C60FF0060630200B0430000DD +S31AFE006C743CA0FA1060A500013C60000060630008986500007C3B +S31AFE006C896802A67063FFFF6463FE007C6803A64E800020CFAF53 +S31AFE006C9EC0040FAFC4040CAF8C0410AF0C04F0AF0C00F3BF48D4 +S31AFE006CB305FFFFC005FFFFC005CFAFC0040FAFC4040CAF8C042A +S31AFE006CC800AF0C0407AF0C080CAF0C0401AF0C040FAF0C080CC1 +S31AFE006CDDAF0C0401AF0C040FAF0C080CAF0C0410AF0C04F0AF14 +S31AFE006CF2C000F3BF4805FFFFC005CFFF00040FFF04040CFF0C08 +S31AFE006D070013FF4804FFFFC004FFFFC005FFFFC005FFFFC0050A +S31AFE006D1CCFFF00040FFF04040CFF0C0003FF0C0C0CFF0C00032B +S31AFE006D31FF0C0C0CFF0C0003FF0C0C0CFF0C0013FF4804FFFF8E +S31AFE006D46C004FFFFC005FFFFC005FFFFC005FFFFC005FFFFC0A6 +S31AFE006D5B05FCFFC004C0FFC00401FFC0040FFFC0041FFFC00460 +S31AFE006D70FFFFC004FFFFC005FFFFC005FFFFC005FFFFC005FF3D +S31AFE006D85FFC005FFFFC005FFFFC007FFFFC007FFFFC007FFFF21 +S31AFE006D9AC0077063000E3C80FA1060840001986400004E8000C3 +S31AFE006DAF203C80FA106084000138A0000A98A400003CA0000AFC +S31AFE006DC47CA903A64200000038A0000C98A400003CA0000A7C24 +S31AFE006DD9A903A6420000003863FFFF2C0300004080FFD038A0DE +S31AFE006DEE000698A400003CA000147CA903A6420000004E80007C +S31AFE006E03203D20FE0139293D285463073E7C6918AE4E8000209E +S31AFE006E189421FFF87C0802A69001000C3D200000806936D82C6C +S31AFE006E2D0300004181000C4800291D4800000C3800FFFF9009CA +S31AFE006E4236D88001000C7C0803A6382100084E8000203803FFE6 +S31AFE006E579F280000054181000C3863FFA94E8000203923FFD02C +S31AFE006E6C5520063E280000094181000C7D234B784E80002038CC +S31AFE006E8103FFBF280000054081000C3860FFFF4E80002038631E +S31AFE006E96FFC94E8000209421FFE07C0802A69001002438000080 +S31AFE006EAB0098010018906100104BFFFF655463063E38810008B2 +S31AFE006EC04800001D2C0300014082FFEC800100247C0803A6386D +S31AFE006ED52100204E8000209421FFF07C0802A693C1000893E1D5 +S31AFE006EEA000C900100147C9F2378897F00102C0B000040820017 +S31AFE006EFF282C03002440820098392000013800FFFF901F000462 +S31AFE006F14993F0010917F0000917F000C4800007C2C0B00014014 +S31AFE006F298200542C03002340820020815F0008817F000C380019 +S31AFE006F3E00007C0A59AE39200002993F001048000050817F00D2 +S31AFE006F530C2C0B0800418200E8801F0000813F00087C001A141E +S31AFE006F68901F00007C6959AE380B0001901F000C480000242CDE +S31AFE006F7D0B0002408200245463063E4BFFFECD546320363800B3 +S31AFE006F920003907F0004981F001038600000480000AC2C0B0046 +S31AFE006FA703408200985463063E4BFFFEA5801F0004893F00031E +S31AFE006FBC7C001B787C090000901F0004418200103860002D4895 +S31AFE006FD10027454800006C3860002B48002739813F00088809C3 +S31AFE006FE600022C00003A4082004C8869000083DF000C4800274E +S31AFE006FFB1D813F00088869000148002711396000037C0BF040D3 +S31AFE007010418100287FCAF3787FE4FB78812400087C0958AE7D3E +S31AFE0070252B4A14396B00017C0B50409809FFFD4081FFE8386030 +S31AFE00703A00014800001038000000981F00103860FFFF800100CE +S31AFE00704F147C0803A683C1000883E1000C382100104E800020D4 +S31AFE0070649421FFE07C0802A69361000C9381001093A100149354 +S31AFE007079C1001893E1001C900100243D20FE013B693D287C7C83 +S31AFE00708E1B7838600024480026818BFC00003BC000002C1F00DE +S31AFE0070A3003BA00000418200247FE3FB78480026657C1DFA14C3 +S31AFE0070B83BDE00017FFCF0AE541D063E2C1F00004082FFE438AF +S31AFE0070CD6000234800264557A0E13E7C7B00AE4800263957A01B +S31AFE0070E2073E7C7B00AE4800262D4BFFFD2D5463067E2C030032 +S31AFE0070F72B4082FF98800100247C0803A68361000C8381001026 +S31AFE00710C83A1001483C1001883E1001C382100204E800020945B +S31AFE00712121FFD87C0802A6936100149381001893A1001C93C159 +S31AFE007136002093E100249001002C3D20000081693BA03D40002C +S31AFE00714B002C0B000038000000900A36DC3F6000003F800000B2 +S31AFE007160408101383FC000003FA000003D20000080093BAC2C45 +S31AFE0071750000004182006C801C3BA03D600000280000034081D2 +S31AFE00718A0018801E3BA4700900034082000C3BE00004480000A6 +S31AFE00719F34801C3BA03BE000012800000140810024800B3BA498 +S31AFE0071B4540007FE7C0000D07C00FE707C0900F8540007FE5508 +S31AFE0071C92907BC7C1F4B78808B3BA4386100087FE5FB784800B9 +S31AFE0071DE312948000014813E3BA43BE0000188090000980100FE +S31AFE0071F3083D200000800936DC2C0000004082009839000000C4 +S31AFE0072087C08F8004080006C3D20FE0138C93D2838A100083CE6 +S31AFE00721DE000003C8000007D6828AE81473BA85560E13E7D26DF +S31AFE00723200AE992A0000800436DC394A00012C00000091473B79 +S31AFE007247A8408200505560073E7D2600AE396A0001992A0000C2 +S31AFE00725C801B36DC91673BA82C00000040820030390800017CB5 +S31AFE00727108F8004180FFB0813D3BA0801E3BA47D3F48502C09F5 +S31AFE00728600007C00FA14901E3BA4913D3BA04181FED880010016 +S31AFE00729B2C7C0803A6836100148381001883A1001C83C10020C9 +S31AFE0072B083E10024382100284E8000209421FFE87C0802A69373 +S31AFE0072C5A1000C93C1001093E100149001001C2C0600003D20DB +S31AFE0072DA00003D6000003D4000003D00000090893BA8906B3B12 +S31AFE0072EFA490AA3BA090C83BAC418200303FA000003800000084 +S31AFE007304901D36DC813D36DC4BFFFE15813D36DC801D36DC2CD9 +S31AFE00731900000041820010386000004800001C4BFFFDF93D60AF +S31AFE00732E0000812B3BA83800000098090000806B3BA88001008F +S31AFE0073431C7C0803A683A1000C83C1001083E10014382100187B +S31AFE0073584E8000209421FFC07C0802A69281001092A100149292 +S31AFE00736DC1001892E1001C930100209321002493410028936123 +S31AFE007382002C9381003093A1003493C1003893E1003C9001004D +S31AFE007397443D20000080093BA03B6000002C0000003D200000B4 +S31AFE0073AC936936DC3E8000003EA00000408101703D200000810E +S31AFE0073C1693BA43F000000880B00002C000000418201583EC053 +S31AFE0073D600003F4000003EE0000080163BAC2C00000041820095 +S31AFE0073EB5880153BA02800000340810018801A3BA870090003C4 +S31AFE0074004082000C3BC000044800003C80153BA03BC00001288E +S31AFE0074150000014081002C801A3BA8540007FE7C0000D07C00D2 +S31AFE00742AFE707C0900F8540007FE552907BC7C1E4B784800001F +S31AFE00743F083BC000013BE000007C1FF000408000743FA0000077 +S31AFE0074543F2000003B810008813D3BA48869000039290001917A +S31AFE0074693D3BA45463063E4BFFF9E5801936DC547B26362C00C9 +S31AFE00747E0000408200A881383BA4886900003929000191383B9B +S31AFE007493A45463063E4BFFF9BD801436DC7F631B782C000000FA +S31AFE0074A8547B063E4082007C7F7FE1AE3BFF00017C1FF00041E6 +S31AFE0074BD80FFA080163BAC2C00000041820018809A3BA838617D +S31AFE0074D200087FC5F37848002E8D4800000C813A3BA89B6900F1 +S31AFE0074E7003D200000800936DC2C0000004082003481373BA0DF +S31AFE0074FC801A3BA87D3E48502C0900007C00F214901A3BA891D2 +S31AFE007511373BA04081001481383BA4880900002C000000408263 +S31AFE007526FEBC800100447C0803A68281001082A1001482C10013 +S31AFE00753B1882E1001C8301002083210024834100288361002C38 +S31AFE0075508381003083A1003483C1003883E1003C382100404E93 +S31AFE0075658000209421FFE87C0802A693A1000C93C1001093E18D +S31AFE00757A00149001001C2C0600003D2000003D6000003D40008E +S31AFE00758F003D00000090693BA4908B3BA890AA3BA090C83BAC7C +S31AFE0075A4418200303FA0000038000000901D36DC813D36DC4BEA +S31AFE0075B9FFFDA5813D36DC801D36DC2C00000041820010386002 +S31AFE0075CE0000480000104BFFFD893D20000080693BA8800100D2 +S31AFE0075E31C7C0803A683A1000C83C1001083E1001438210018D9 +S31AFE0075F84E8000209421FFF87C0802A69001000C480028453D25 +S31AFE00760D20000038000001900936C08001000C7C0803A6382169 +S31AFE00762200084E8000209421FFE87C0802A693A1000C93C100FD +S31AFE0076371093E100149001001C7C9E23783BA000007C7F1B78D7 +S31AFE00764C93BE000048000024801E0000813F0000540020367CE4 +S31AFE007661001B7839290001901E0000913F00003BBD0001813FE3 +S31AFE0076760000886900002C030000418200104BFFF7D17C631BFC +S31AFE00768B794080FFC87FA3EB788001001C7C0803A683A1000C67 +S31AFE0076A083C1001083E10014382100184E8000207C84237939D1 +S31AFE0076B54000004082001838000030980300019803000038606B +S31AFE0076CA00024E800020392500077D20FE7054001F7E7D2902AE +S31AFE0076DF147D251E71418200603D20FE0138C93D2838E5FFFF4D +S31AFE0076F454E018387C88043068A90001200900007D204914315B +S31AFE00770968FFFF7C0B41107C0B4B79418200285508063E5500FD +S31AFE00771EE13E7D6600AE5509073E7C0648AE996300009C0300EC +S31AFE0077330138630001394A00027CE53B794082FFB07D4353780A +S31AFE0077484E8000209421FFF07C0802A693E1000C900100143D08 +S31AFE00775D20000080A93BE07C641B782C050000386000004081B2 +S31AFE00777200843FE00000801F36E42C000000418200103860000B +S31AFE007787017C0803A64E8000212C030001408200103D2000006D +S31AFE00779C986936E048000054801F36E42123FFFF216900007D1F +S31AFE0077B12B4914216000007C0B01147C0B4B79418200343D207B +S31AFE0077C6000080093BBC2C00000041820024386000017C0803F7 +S31AFE0077DBA64E8000212C030000418200103D2000003800000168 +S31AFE0077F0980936E1800100147C0803A683E1000C382100104EDF +S31AFE0078058000209421FFF07C0802A693E1000C900100143FE0B6 +S31AFE00781A0000881F36E02C000000418200343D20000080093659 +S31AFE00782FE42C000000418200243D20000080A93BE03860000010 +S31AFE007844388000007C0803A64E80002138000000981F36E03F13 +S31AFE007859E00000881F36E12C000000418200283D20000080097B +S31AFE00786E3BBC2C00000041820018386000007C0803A64E800070 +S31AFE0078832138000000981F36E1800100147C0803A683E1000C93 +S31AFE007898382100104E8000209421FFF07C0802A693C1000893C1 +S31AFE0078ADE1000C900100143D200000800936D42C000000418251 +S31AFE0078C20010800936D47C0803A64E8000213D20000080093BCD +S31AFE0078D7F42C000000418200143800000090093BF43BE0000284 +S31AFE0078EC48000010480084E5480084197C7F1B78480085A12C6D +S31AFE00790103000041820008480085CD4800858D4BFFFEF9480022 +S31AFE007916853D386000034800288938600003480028192C1F0093 +S31AFE00792B00418200203FC00000813E36C47FE3FB787D2803A685 +S31AFE0079404E8000212C0300004082FFEC480085493D2000008070 +S31AFE0079550936D02C00000041820010800936D07C0803A64E8081 +S31AFE00796A0021800100147C0803A683C1000883E1000C3821000C +S31AFE00797F104E8000209421FFB87C0802A69361003493810038E5 +S31AFE00799493A1003C93C1004093E100449001004C7C7E1B783B79 +S31AFE0079A9E000003F6000003B810028801B3BC03BA000012C00C4 +S31AFE0079BE00004182001C7FE3FB787F84E3787C0803A64E8000A3 +S31AFE0079D3217C7D1B78480000107FE3FB7848001D0D9061002836 +S31AFE0079E8381FFFE02800001F7C0A03782F9D00003BFF00017F82 +S31AFE0079FD83E3784181004C390000047D0903A6386100087C6B91 +S31AFE007A121B7838000000392000007C0B49AE392900014200FF15 +S31AFE007A27F8380000047C0903A67C6943787F8BE378880B00004C +S31AFE007A3C396B000198090000392900014200FFF0419E00302028 +S31AFE007A510A001F7C0001107C0500F85400077A54A507387FC49D +S31AFE007A66F3787C052B7838C000004BFFF84D7C7E1B784800001C +S31AFE007A7B58212A001F7D2949107D2048F8540006F65529073847 +S31AFE007A907D2903782C0900007FCBF378380000783929FFFF4181 +S31AFE007AA58200182C090000980B0000396B00013929FFFF40828F +S31AFE007ABAFFF0280A001F4181000C3BDE0010480000083BDE0013 +S31AFE007ACF082C1F00464081FEE08001004C7C0803A68361003454 +S31AFE007AE48381003883A1003C83C1004083E10044382100484ED2 +S31AFE007AF98000209421FFD07C0802A67D8000269381002093A199 +S31AFE007B0E002493C1002893E1002C900100349181001C880300A0 +S31AFE007B2300386300012C0000507C9D237890610008392000002B +S31AFE007B383BC0004740820070386100083881000C4BFFFAE12C09 +S31AFE007B4D030000418200288121000888090000392900012C0067 +S31AFE007B62003D91210008408200108121000C3BC9000148000046 +S31AFE007B77383D20FE0188093D407FA4EB782C00000039693D4082 +S31AFE007B8C418200D8880B0000980400008D2B0001388400012C74 +S31AFE007BA10900004082FFEC480000BC7D3F4B787C1FF000408047 +S31AFE007BB600803B800000397FFFE020AB001F7CA5291039210046 +S31AFE007BCB103881000C7CA028F87C8428787CA9483854A5077AD1 +S31AFE007BE054000738806100082A0B001F7CA503787D2423789351 +S31AFE007BF581001038C000004BFFF96D808100107FE3FB78480010 +S31AFE007C0A1AF94191001081210008392900104800000C8121005A +S31AFE007C1F0839290008912100083BFF00017C1FF0004180FF8C0E +S31AFE007C343D20FE0188093D447FA4EB782C00000039693D4441B3 +S31AFE007C4982001C880B0000980400008D2B0001388400012C09AA +S31AFE007C5E00004082FFEC380000009804000080010034818100D5 +S31AFE007C731C7C0803A68381002083A1002483C1002883E1002C47 +S31AFE007C887D808120382100304E8000209421FF307C0802A6932B +S31AFE007C9DC100C893E100CC900100D43BC000003D6000017C7F0C +S31AFE007CB21B789BCB8B04893F00003809FFC12800003441810842 +S31AFE007CC7903D60FE01396B3D985400103A7D4B002E3D20FE010F +S31AFE007CDC39293D987D4A4A147D4903A64E800420480080E948D9 +S31AFE007CF100801D3D20FE0139293D285460E73E7D0900AE5463F6 +S31AFE007D06073E7CE918AE3D40000138000053392A8B04980A8BCC +S31AFE007D1B0439600000996900039909000198E900024800083CFB +S31AFE007D303D20FE0188093D483D6000012C000000396B8B043992 +S31AFE007D45493D48418207E8880A00008D2A0001980B00002C0983 +S31AFE007D5A0000396B00014082FFEC480007CC387F000148000B98 +S31AFE007D6F99480007F8387F000148000D5D480007EC3C600001D9 +S31AFE007D8438638B044BFFFBFD480007DC881F00012C000000403B +S31AFE007D998200404800092D3D20FE0188093D443D6000012C0059 +S31AFE007DAE0000396B8B0439493D4441820778880A00008D2A00FB +S31AFE007DC301980B00002C090000396B00014082FFEC4800075CD1 +S31AFE007DD8381F0001900100883BC1008C3BE100887FE3FB787FA1 +S31AFE007DEDC4F3784BFFF8392C030000418200A481210088880982 +S31AFE007E020000392900012C00002C912100884082008C7FE3FBC7 +S31AFE007E1778388100904BFFF80D2C0300004182007881210088AE +S31AFE007E2C88090000392900012C00002C91210088408200608015 +S31AFE007E4181008C2C0400004182003880610090480008B97C6496 +S31AFE007E561B79418200148061008880A1008C38C000004BFFF759 +S31AFE007E6B018001008C812100887C0002147D290214912100883E +S31AFE007E8081210088880900002C00002C40820010380900019032 +S31AFE007E950100884BFFFF5081210088880900002C000000408209 +S31AFE007EAA003C3D20FE0188093D443D6000012C000000396B8B1C +S31AFE007EBF0439493D444182066C880A00008D2A0001980B000081 +S31AFE007ED42C090000396B00014082FFEC480006503D20FE01888C +S31AFE007EE9093D883D6000012C000000396B8B0439493D884182AB +S31AFE007EFE0634880A00008D2A0001980B00002C090000396B006B +S31AFE007F13014082FFEC480006183C8000017FE3FB7838848B0464 +S31AFE007F284BFFFBD54800063C381F00013BE10094900100947FF0 +S31AFE007F3DE3FB78388100984BFFF6E52C0300004182009081213B +S31AFE007F52009488090000392900012C00002C912100944082002E +S31AFE007F67787FE3FB783881009C4BFFF6B92C0300004182006410 +S31AFE007F7C806100983C80000180A1009C38848B0438C000014B6A +S31AFE007F91FFF32D2C030000408205D03D60FE01880B3D8C3D209D +S31AFE007FA600012C00000039498B04396B3D8C4182001C880B00A5 +S31AFE007FBB008D2B0001980A00002C090000394A00014082FFECEC +S31AFE007FD038000000980A0000480005903D20FE0188093D883DF2 +S31AFE007FE56000012C000000396B8B0439493D884182053C880AE6 +S31AFE007FFA00008D2A0001980B00002C090000396B00014082FF78 +S31AFE00800FEC480005203BC00001381F00013BE100A0900100A0BE +S31AFE0080247FE3FB78388100A44BFFF5FD2C030000418201F88169 +S31AFE0080392100A088090000392900012C00002C912100A040820D +S31AFE00804E01E07FE3FB78388100A84BFFF5D12C030000418201FF +S31AFE008063CC806100A088030000386300012C00003A906100A099 +S31AFE008078408201B42C1E000041820124800100A82C00000041B0 +S31AFE00808D8200A8800100A83BE000007C1F004040800054394103 +S31AFE0080A20008816100A0892B0000396B00017D204B782C000056 +S31AFE0080B77D7D2AF9AE916100A040820018880B0000392B000181 +S31AFE0080CC600000207C0AF9AE912100A03BFF0001281F007F415A +S31AFE0080E1810010800100A87C1F00404180FFB8808100A438613B +S31AFE0080F600087FE5FB78480022697C03F80040820024812100C0 +S31AFE00810BA8800100A47D3F48502C0900007C00FA14900100A446 +S31AFE008120912100A84082FF6C800100A82C0000004082003C3D2F +S31AFE00813520FE0188093D443D6000012C000000396B8B04394981 +S31AFE00814A3D44418203E4880A00008D2A0001980B00002C0900CF +S31AFE00815F00396B00014082FFEC480003C83D20FE0188093D8CEC +S31AFE0081743D6000012C000000396B8B0439493D8C418203AC88B0 +S31AFE0081890A00008D2A0001980B00002C090000396B00014082DC +S31AFE00819EFFEC48000390808100A480A100A838C000014BFFF35E +S31AFE0081B3B92C0300004182003C3D20FE0188093D443D600001C0 +S31AFE0081C82C000000396B8B0439493D444182035C880A00008DFB +S31AFE0081DD2A0001980B00002C090000396B00014082FFEC4800EC +S31AFE0081F203403D20FE0188093D8C3D6000012C000000396B8B82 +S31AFE0082070439493D8C41820324880A00008D2A0001980B000038 +S31AFE00821C2C090000396B00014082FFEC480003083D20FE01888B +S31AFE008231093D903D6000012C000000396B8B0439493D9041824F +S31AFE00824602EC880A00008D2A0001980B00002C090000396B006B +S31AFE00825B014082FFEC480002D0881F0000395F0001680900533E +S31AFE008270216900007D2B491468000043216000007C0B01147C22 +S31AFE0082850B4B7939600000914100AC916100B03BC100AC4182ED +S31AFE00829A00287FC3F378388100B04BFFF385812100AC880900EC +S31AFE0082AF002C00003B4082000C38090001900100AC7FC3F37855 +S31AFE0082C4388100B44BFFF3612C0300004182000C806100B448BB +S31AFE0082D9007B113860000348001EC53860000348001E55806103 +S31AFE0082EE00B02C0300004182004C3D200000800936CC2C000075 +S31AFE008303004182001C800936CC7C0803A64E8000217C631B7968 +S31AFE00831840820008906100B0800100B02C000000418200183871 +S31AFE00832D000009900100B03860000948000339480002384800FE +S31AFE00834215852C0300004182001838000063981F00003D2000CF +S31AFE0083570038000001900936F4881F000068090053216900001C +S31AFE00836C7D2B491468000073216000007C0B01147C0B4B79416F +S31AFE008381820024386000004BFFF3C53D200001392923503D60D3 +S31AFE0083960000912B36F048007A754800000C386000014BFFF38B +S31AFE0083ABA53860000348001DF53860000348001D853860FFFF04 +S31AFE0083C0480001B83D200000800936C87C0803A64E800021386B +S31AFE0083D5600001480001A048001BB1480001883C800001387FEC +S31AFE0083EA000138848B0438A0012C48000E0D480001703C800051 +S31AFE0083FF01387F000138848B0438A0012C48000D7D48000158E9 +S31AFE008414381F0001900100B8386100B8388100BC4BFFF2052C7B +S31AFE0084290300004182007C812100B888090000392900012C007E +S31AFE00843E002C912100B84082006488090000392900012C000049 +S31AFE00845343912100B840820010806100BC480027254800000C0C +S31AFE008468806100BC480027113D20FE0188093D443D6000012CA6 +S31AFE00847D000000396B8B0439493D44418200A8880A00008D2AFC +S31AFE0084920001980B00002C090000396B00014082FFEC4800005E +S31AFE0084A78C3D20FE0188093D883D6000012C000000396B8B0481 +S31AFE0084BC39493D8841820070880A00008D2A0001980B00002C14 +S31AFE0084D1090000396B00014082FFEC48000054381F00019001B2 +S31AFE0084E600C0386100C0388100C44BFFF1392C03000040820082 +S31AFE0084FB443D20FE0188093D943D6000012C000000396B8B0469 +S31AFE00851039493D944182001C880A00008D2A0001980B00002C07 +S31AFE008525090000396B00014082FFEC38000000980B00004800BF +S31AFE00853A00303C60FE0138633D444BFFEB21806100C4480012EC +S31AFE00854F3D480000183C8000017FE3FB7838848B0438A0012C94 +S31AFE00856448001E653C60000138638B044BFFEAF538600000802B +S31AFE0085790100D47C0803A683C100C883E100CC382100D04E80B4 +S31AFE00858E00209421FFE87C0802A693A1000C93C1001093E100D4 +S31AFE0085A3149001001C3FA00001389D8B0448001A1D387D8B04F7 +S31AFE0085B84BFFEAAD8001001C7C0803A683A1000C83C1001083F8 +S31AFE0085CDE10014382100184E8000209421FFF07C0802A693E1FD +S31AFE0085E2000C900100143D200000800936D82C000000408000EF +S31AFE0085F7084BFFFF993FE00001387F83044BFFE899387F83041A +S31AFE00860C4BFFF6897C631B794182FFEC7C6318F854630FFE8038 +S31AFE0086210100147C0803A683E1000C382100104E8000204E8069 +S31AFE00863600209421FFF87C0802A69001000C4BFFEFB948001844 +S31AFE00864B493860002B480010C58001000C7C0803A638210008D2 +S31AFE0086604E8000203D200000906936D84E8000209421FFF87C99 +S31AFE0086750802A69001000C3D20FE0139293D285460E73E7D49DD +S31AFE00868A00AE5463073E7D0918AE3D60000138000058386B8B85 +S31AFE00869F04980B8B0439200000994300019903000299230003F9 +S31AFE0086B44BFFE9B18001000C7C0803A6382100084E8000203D83 +S31AFE0086C920000138A00000392993543CC0000038E0FFFF3C8088 +S31AFE0086DE00003D6000013D4000003D0000003800000190E63B41 +S31AFE0086F3B490AB9304912A3BB8900836E890A43BB04E80002077 +S31AFE0087089421FFF07C0802A693C1000893E1000C900100143DCA +S31AFE00871D200000800936E87C7F1B782C0000007C9E237840824B +S31AFE00873200084BFFFF952C1F0012418100243D600000800B3BA2 +S31AFE008747B83D200001392993547C0900507C00F21428000080BB +S31AFE00875C4081000C386000004800006C3CE0000080073BB47CDD +S31AFE0087711F00004182004C3D00000080083BB07C1F00004180B5 +S31AFE0087860020395F00013D20000139299304554B103A380000A8 +S31AFE00879B007C09592E91483BB03D600000814B3BB83D2000013B +S31AFE0087B03929930457E0103A7D49012E93E73BB43D20000080FB +S31AFE0087C5693BB87C03F21490093BB8800100147C0803A683C128 +S31AFE0087DA000883E1000C382100104E8000209421FFD87C0802A5 +S31AFE0087EFA6936100149381001893A1001C93C1002093E100243B +S31AFE0088049001002C3D600000800B36EC7C7D1B782C0000007C20 +S31AFE0088199E23787CBF2B7840820058380000013D20000139291C +S31AFE00882E93D4900B36EC39400000380000087C0903A6390A00E3 +S31AFE00884301554BC00E5547103A2C0B00005560083C4080000CCB +S31AFE0088586C0004C168001DB77C0B03784200FFE87D0A43782805 +S31AFE00886D0A00FF7C09392E4081FFC43D600000380000003D2047 +S31AFE00888200013B6993D4900B36DC3F800000480000248921004F +S31AFE0088970857E0463E7C004A785400103A7D7B002E57E9402E55 +S31AFE0088AC7D3F5A783BBD00012C1E00003BDEFFFF4182002038B0 +S31AFE0088C16100087FA4EB7838A0000148001A39801C36DC2C0061 +S31AFE0088D600004182FFBC7FE3FB788001002C7C0803A683610078 +S31AFE0088EB148381001883A1001C83C1002083E100243821002897 +S31AFE0089004E8000209421FFD87C0802A693A1001C93C100209361 +S31AFE008915E100249001002C3D2000013800000098098B043BA9DD +S31AFE00892A8B047C691B7890610008880900002C00004340820072 +S31AFE00893FF4880900012C000052408200E88BC900022C1E00438E +S31AFE008954408200DC880900032C00003A408200D0380900043B60 +S31AFE008969E10008900100087FE3FB783881000C4BFFECB12C03C3 +S31AFE00897E0000418201388121000888090000392900012C00001A +S31AFE0089932C91210008408201207FE3FB78388100104BFFEC85A9 +S31AFE0089A82C0300004182010C8061000C8081001038A0FFFF4B98 +S31AFE0089BDFFFE2D3D20000083E936DC2C1F0000418200403D20F1 +S31AFE0089D2FE0188093D887FA3EB782C00000039693D884182005C +S31AFE0089E71C880B00008D2B0001980300002C09000038630001A3 +S31AFE0089FC4082FFEC3800000098030000480000B07C641B78383F +S31AFE008A117D000138A000204BFFEC993D2000019BC98B0438631B +S31AFE008A2600017FFD19AE4800008C81210008880900007D2B4BF1 +S31AFE008A3B782C00004C386900017C0903784182002041810010DB +S31AFE008A502C0000434182003C4800004C2C0900504182001C485F +S31AFE008A650000403C80000138848B0438A0012C4800095D4800B5 +S31AFE008A7A00403C80000138848B0438A0012C48000A914800006B +S31AFE008A8F2C3C80000138848B0438A00800480005FD4800001810 +S31AFE008AA43C8000017D635B7838848B0438A0012C480019058013 +S31AFE008AB901002C7C0803A683A1001C83C1002083E100243821C5 +S31AFE008ACE00284E8000209421FFF87C0802A69001000C88030079 +S31AFE008AE3002C000070408200183C80000138848B0438A0012CF7 +S31AFE008AF848000709480000143C80000138848B0438A0012C485C +S31AFE008B0D0018B58001000C7C0803A6382100084E80002039231D +S31AFE008B22011C7C0348404C800020800400003884000490030053 +S31AFE008B3700386300047C0348404180FFEC4E8000203800004568 +S31AFE008B4C98030000392000309D230001380000329C03000138E9 +S31AFE008B616300014E8000203800004F980300003920004B9D2323 +S31AFE008B760001386300014E8000209421FFE87C0802A693A1005F +S31AFE008B8B0C93C1001093E100149001001C7C9E23797C7D1B78EA +S31AFE008BA03BE0000041820038887D00003BBD00014BFFE2A537A0 +S31AFE008BB5DEFFFF7FFF1B7857E920367C00002654001FFE7C0095 +S31AFE008BCA00D07D2900787FE000387C1F4B784082FFD07FE3FBC1 +S31AFE008BDF788001001C7C0803A683A1000C83C1001083E100143F +S31AFE008BF4382100184E8000209421FFE87C0802A6938100089392 +S31AFE008C09A1000C93C1001093E100149001001C7C7D1B787C9C68 +S31AFE008C1E2378388000024BFFFF5D907C0000387D0002800100FE +S31AFE008C331C7C0803A68381000883A1000C83C1001083E10014D7 +S31AFE008C48382100184E8000209421FFE87C0802A693810008933D +S31AFE008C5DA1000C93C1001093E100149001001C7C7D1B787C9C14 +S31AFE008C722378388000084BFFFF09907C0000387D0008800100F2 +S31AFE008C871C7C0803A68381000883A1000C83C1001083E1001483 +S31AFE008C9C382100184E8000203803FF9F2800000541810014384C +S31AFE008CB103FFA990040000386000014E8000203803FFBF2800C3 +S31AFE008CC600054181000C3803FFC94BFFFFE43863FFD05460066E +S31AFE008CDB3E280000094081000C386000004E80002090640000CA +S31AFE008CF0386000014E8000209421FFE87C0802A693A1000C9349 +S31AFE008D05C1001093E100149001001C7C7D1B78887D00003BBDC6 +S31AFE008D1A00014BFFFF897FA3EB788001001C7C0803A683A100FA +S31AFE008D2F0C83C1001083E10014382100184E8000203D20FE0198 +S31AFE008D445480E13E39293E707D6900AE5484073E7C0920AE9976 +S31AFE008D596300009C030001386300014E8000209421FFE07C085C +S31AFE008D6E02A69381001093A1001493C1001893E1001C9001004B +S31AFE008D83247C7F1B787C9C23783BC000003BA100084800001833 +S31AFE008D988001000857DE20365400073E7FDE03783BFF0001887A +S31AFE008DAD7F00007FA4EB784BFFFEF12C0300004082FFDC93DC34 +S31AFE008DC200007FE3FB78800100247C0803A68381001083A100B9 +S31AFE008DD71483C1001883E1001C382100204E8000209421FFE890 +S31AFE008DEC7C0802A69381000893A1000C93C1001093E10014906A +S31AFE008E0101001C7C7F1B783B9F00107C1FE0407C9E2378408093 +S31AFE008E160038887F00004BFFE0398C1F00017C7D1B787C0303E7 +S31AFE008E2B784BFFE02957BD20363BFF00017FBD1B787C1FE04034 +S31AFE008E409BBE00003BDE00014180FFD07FE3FB788001001C7C28 +S31AFE008E550803A68381000883A1000C83C1001083E100143821F2 +S31AFE008E6A00184E8000209421FFE87C0802A693A1000C93C1008D +S31AFE008E7F1093E100149001001C7C9D237857A4463E4BFFFEB169 +S31AFE008E9457A4863E4BFFFEA957A4C63E4BFFFEA157A4063E4BA3 +S31AFE008EA9FFFE998001001C7C0803A683A1000C83C1001083E168 +S31AFE008EBE0014382100184E8000209421FFE87C0802A693A1002C +S31AFE008ED30C93C1001093E100149001001C7C9E2378881E000086 +S31AFE008EE83BE000002C000000393E0001418200207FFDFB788858 +S31AFE008EFD0900003BBD00012C000000392900014082FFF07FBFDC +S31AFE008F12EB782F9F00C97C0000265400EFFE7C0000D07C090098 +S31AFE008F27F87FE00038712900C87C1F4B7857E4063E7FFDFB7874 +S31AFE008F3C4BFFFE052C1D00003BFFFFFF4081005C7FFDFB787FC3 +S31AFE008F51C4F378896400007FAAEB78210B00007C085914696970 +S31AFE008F660023210900007D2849147C004B783000FFFF7C0001B9 +S31AFE008F7B107C0900F87129002A7D6B00387D6B4B782C0A00008B +S31AFE008F909963000038840001386300013BBDFFFF4181FFB48088 +S31AFE008FA501001C7C0803A683A1000C83C1001083E10014382114 +S31AFE008FBA00184E8000209421FFF07C0802A693C1000893E100F8 +S31AFE008FCF0C900100143BC300107C03F0407C9F2378408000188D +S31AFE008FE4889F00003BFF00014BFFFD557C03F0404180FFF08097 +S31AFE008FF90100147C0803A683C1000883E1000C382100104E802A +S31AFE00900E0020392000047D2903A638000000980300003863000F +S31AFE009023014200FFF87C80C670980300007C8986709D23000171 +S31AFE0090387C8046709C030001988300014E8000203963000438EB +S31AFE00904D600000394000037D405378892B00002C000000546012 +S31AFE009062402E7C034B78396B0001394AFFFF4181FFE44E8000AC +S31AFE00907720380000087C0903A68804000038840001980300006E +S31AFE00908C386300014200FFF04E8000209421FFE87C0802A693B5 +S31AFE0090A1C1001093E100149001001C3BC100087C9F23787FC3B4 +S31AFE0090B6F37848001AE12C0300004182003038000051981F0091 +S31AFE0090CB00392000439D3F00017FC3F3784BFFFF717C641B7839 +S31AFE0090E03BFF00017FE3FB784BFFFD894800000C7FE3FB784B23 +S31AFE0090F5FFFA557C7F1B7838000000981F00008001001C7C0876 +S31AFE00910A03A683C1001083E10014382100184E8000209421FFC4 +S31AFE00911FC87C0802A693A1002C93C1003093E100349001003CEA +S31AFE0091343BA100207C641B787FA3EB784BFFFED17FA3EB783858 +S31AFE00914981000848001AF52C03000041820014800100103860FE +S31AFE00915E00012C00000040820008386000008001003C7C080325 +S31AFE009173A683A1002C83C1003083E10034382100384E80002062 +S31AFE0091889421FFE07C0802A693A1001493C1001893E1001C903A +S31AFE00919D0100247C7D1B787C9F2378388100084BFFFBBD7C1DF6 +S31AFE0091B2180041820020806100084BFFFF612C03000041820024 +S31AFE0091C7107FE3FB784BFFF99D4800000C7FE3FB784BFFF971ED +S31AFE0091DC3800000098030000800100247C0803A683A10014831A +S31AFE0091F1C1001883E1001C382100204E8000209421FFD87C0895 +S31AFE00920602A693A1001C93C1002093E100249001002C892300E2 +S31AFE00921B003800FFFF2C0900677C9F237890010008386300017D +S31AFE0092304182008C418100102C09006341820024480000C02C51 +S31AFE009245090070408200B8388100084BFFFAA9388100104BFF5C +S31AFE00925AFB91480000B0880300002C00002D4082002088030026 +S31AFE00926F012C000031408200143D2000003800000090093BE069 +S31AFE009284480000103C80000038843BE04BFFFAD93D20000080EC +S31AFE009299693BE02C030000418200104BFFFE792C030000418283 +S31AFE0092AE00547FE3FB784BFFF8B5480000503FA00000389D3B00 +S31AFE0092C3DC4BFFFAA5809D3BDC386100104BFFFD41801D3BDCB4 +S31AFE0092D82C00FFFF4182000C2C000000408200103800000290BC +S31AFE0092ED0100084800001C3800000190010008480000107FE36F +S31AFE009302FB784BFFF8457C7F1B78800100082C00000041820052 +S31AFE00931728418100102C00FFFF4182008C4800007C2C000001D9 +S31AFE00932C418200242C00000241820060480000683D20000139A9 +S31AFE0093412923503D600000912B36F0480000603FA000013C80B4 +S31AFE009356000138842350387D246C4BFFF7C13861001038800026 +S31AFE00936B4738BD246C480019292C03000041820028381D246C94 +S31AFE0093803D2000007FE3FB78900936F04BFFF7DD480000187FE6 +S31AFE009395E3FB784BFFF7D14800000C7FE3FB784BFFF7A57C7F4D +S31AFE0093AA1B7838000000981F00008001002C7C0803A683A1002A +S31AFE0093BF1C83C1002083E10024382100284E8000209421FFD09A +S31AFE0093D47C0802A693210014934100189361001C9381002093C9 +S31AFE0093E9A1002493C1002893E1002C900100347C9F23787CBDD6 +S31AFE0093FE2B78388100084BFFF8F53881000C3F8000004BFFF7F6 +S31AFE009413ED389C3BCC4BFFF9D1380000513BBDFFE67F3FEA1442 +S31AFE009428981F00003920004D9D3F00013BFF00017FFAFB787F4B +S31AFE00943D43D378388000004BFFF8FD7C7F1B787FFEFB783800DB +S31AFE0094520030389C3BCC981E0000387E00014BFFFB617C7F1BCD +S31AFE009467783B8000003F600000480000247FE3FB78389D3BD4F5 +S31AFE00947C4BFFFB457C7F1B78389D3BD43B9C0001387B3BCC4BFE +S31AFE009491FFFBE97C1FC840408000408001000C7C1C0000408057 +S31AFE0094A60034806100083C8000003FA0000038843BCC38BD3B02 +S31AFE0094BBD4480017292C03000038000000900100084082FFA8D3 +S31AFE0094D038000031981E00007F43D3785784063E4BFFF861385D +S31AFE0094E5000000981F0000800100347C0803A683210014834159 +S31AFE0094FA00188361001C8381002083A1002483C1002883E10005 +S31AFE00950F2C382100304E8000209421FFC07C0802A693A1003498 +S31AFE00952493C1003893E1003C90010044380000007C9F2378909F +S31AFE00953901001C900100109001001490010018388100204BFFEA +S31AFE00954EF7053BA100287FA4EB784BFFF8917FA3EB783881006D +S31AFE00956308480016DD2C030000418200E438000071981F000076 +S31AFE009578392000709D3F000180810020387F00014BFFF8E938F8 +S31AFE00958D8100084BFFFA31800100207C7F1B787009000241825A +S31AFE0095A20020388000024BFFF8C9388000024BFFF79188810036 +S31AFE0095B7134BFFF7897C7F1B7880010020700900044182002827 +S31AFE0095CC800100142C0000004182001C7FE3FB78388000044B0A +S31AFE0095E1FFF891808100144BFFF8E17C7F1B7880010020700909 +S31AFE0095F6000841820028800100182C0000004182001C7FE3FB68 +S31AFE00960B78388000084BFFF861808100184BFFF8B17C7F1B78D1 +S31AFE0096208001002070090010418200348001001C2C0000004106 +S31AFE0096358200287FE3FB78388000104BFFF8318081001C4BFFFB +S31AFE00964AF8814800000C7FE3FB784BFFF4F57C7F1B783800006C +S31AFE00965F00981F0000800100447C0803A683A1003483C1003875 +S31AFE00967483E1003C382100404E8000209421FFD87C0802A6936B +S31AFE0096896100149381001893A1001C93C1002093E1002490013A +S31AFE00969E002C3B8100087C7D1B787C9B23787CA42B787F83E3DD +S31AFE0096B3784BFFF95D7F83E3787FA4EB787F65DB7848001631DD +S31AFE0096C88001002C7C0803A6836100148381001883A1001C83D8 +S31AFE0096DDC1002083E10024382100284E8000203D200000816955 +S31AFE0096F236F05463103A7C63582E4E8000203D20000081693668 +S31AFE009707F05463103A7C83592E4E8000209421FFF87C0802A60C +S31AFE00971C9001000C3D20000039293200816900185464063E8028 +S31AFE0097316B0000800B000C7C0803A64E8000218001000C7C08F0 +S31AFE00974603A6382100084E8000209421FFF87C0802A6900100A9 +S31AFE00975B0C3D2000003929320081690018806B0000800B001070 +S31AFE0097707C0803A64E8000218001000C7C0803A6382100084E5B +S31AFE0097858000209421FFF87C0802A69001000C3D2000003929F7 +S31AFE00979A3200816900187C651B78806B0000800B0014388000CC +S31AFE0097AF007C0803A64E8000218001000C7C0803A6382100086A +S31AFE0097C44E8000209421FFE87C0802A693A1000C93C10010939F +S31AFE0097D9E100149001001C3FC00000817E3BE43D2000002C0B24 +S31AFE0097EE0000380000003BBE3BE4900936F47C7F1B78418200FE +S31AFE009803187D635B7848000055801E3BE42C0000004082002C0D +S31AFE009818813F00003C007D82913D000460001008901F000093B0 +S31AFE00982DFE3BE43860000348000971386000034800090180013A +S31AFE009842001C7C0803A683A1000C83C1001083E100143821006F +S31AFE009857184E8000209421FFF87C0802A69001000C3D20000020 +S31AFE00986C816936F42C0B0000408200183D20000080093BE43980 +S31AFE009881493BE47C0300004182000C3860000048000024800A8A +S31AFE009896000491693BE490030000386000034800090138600084 +S31AFE0098AB0348000891386000018001000C7C0803A6382100080C +S31AFE0098C04E8000203D20000080093BE43120FFFF7C6901104E09 +S31AFE0098D58000209421FFF87C0802A69001000C2C030000418273 +S31AFE0098EA00483D400000812A36F83929FFFF2C090000912A3641 +S31AFE0098FFF8418100683D20000039293200816900183800000003 +S31AFE009914900A36F8806B0000800B0014388000057C0803A64EB0 +S31AFE0099298000214800003C3D600000812B36F8392900012C09F1 +S31AFE00993E0001912B36F8408200243D2000003929320081690064 +S31AFE0099531838800004806B0000800B00147C0803A64E80002181 +S31AFE0099688001000C7C0803A6382100084E8000209421FFF87CB5 +S31AFE00997D0802A69001000C3D2000003929320081690018806BA6 +S31AFE0099920000800B00107C0803A64E8000218001000C7C0803F1 +S31AFE0099A7A6382100084E8000209421FFC87C0802A692C10010A7 +S31AFE0099BC92E10014930100189321001C934100209361002493F0 +S31AFE0099D181002893A1002C93C1003093E100349001003C2C044B +S31AFE0099E6000D418201B43D600000814B36FC3D200001392997F1 +S31AFE0099FBD47C8951AE2C04000A394A0001914B36FC3F40000030 +S31AFE009A104182000C2C0A0064408201843D200000392932008319 +S31AFE009A25C900187EE000A67EE0BB7839600000516004207C00C8 +S31AFE009A3A01243D20FE013AC93E84807E0000813E000C3880004C +S31AFE009A4F247D2803A63B6000003BE0004F4E800021807E00009A +S31AFE009A64813E000C3880004F7D2803A64E800021801A36FC7C92 +S31AFE009A791B0000408000703D2000013D60FE013B0997D43B2B7A +S31AFE009A8E3E847D38D8AE807E00005520E13E7F9900AE817E006B +S31AFE009AA30C7F84E3787D6803A65529073E7FB948AE3B7B00010A +S31AFE009AB84E800021807E0000813E000C7FA4EB787D2803A64EBB +S31AFE009ACD800021801A36FC7F9FE214579F063E7C1B00007FBFF0 +S31AFE009AE2EA1457BF063E4180FFA8807E0000813E000C3880002A +S31AFE009AF7237D2803A64E800021807E0000813E000C57E0E13ED7 +S31AFE009B0C7C9600AE7D2803A64E800021807E0000813E000C5723 +S31AFE009B21E0073E7C9600AE7D2803A64E800021807E0000813E4C +S31AFE009B3600107D2803A64E8000215460063E2C00002B98610081 +S31AFE009B4B08418200383861000838800001480016492C030000CE +S31AFE009B6040820014880100082C00002D4082FFC44BFFFED43D4E +S31AFE009B752000003929320038000001900900443D600000392017 +S31AFE009B8A0000912B36FC7C0000A652E004207C0001248001003A +S31AFE009B9F3C7C0803A682C1001082E10014830100188321001C1E +S31AFE009BB483410020836100248381002883A1002C83C100308339 +S31AFE009BC9E10034382100384E8000209421FFE87C0802A693A1F3 +S31AFE009BDE000C93C1001093E100149001001C7CBF2B787FE0FB91 +S31AFE009BF3782C0000007C7D1B787C9E23783BFFFFFF4182002455 +S31AFE009C08889E00007FA3EB784BFFFDA17FE0FB782C0000003B77 +S31AFE009C1DDE00013BFFFFFF4082FFE48001001C7C0803A683A184 +S31AFE009C32000C83C1001083E10014382100184E8000209421FF2E +S31AFE009C47E87C0802A693A1000C93C1001093E100149001001C17 +S31AFE009C5C7CBF2B787FE0FB782C0000007C7D1B787C9E23783B97 +S31AFE009C71FFFFFF418200247FA3EB784BFFFCFD7FE0FB782C0030 +S31AFE009C860000987E00003BDE00013BFFFFFF4082FFE480010037 +S31AFE009C9B1C7C0803A683A1000C83C1001083E1001438210018FA +S31AFE009CB04E8000209421FF909081000C90A1001090C100149016 +S31AFE009CC5E100189101001C912100209141002438600000382126 +S31AFE009CDA00704E8000209421FFF87C0802A69001000C38600006 +S31AFE009CEF004BFFFBE93D600001380000207C0903A63D200000AD +S31AFE009D0481493BF0396B23503D000000392000007C09502E7C25 +S31AFE009D1909592E392900044200FFF47D6A5B783D200000816905 +S31AFE009D2E3BF0800B0094900A0100812B0090912A0104800B00B0 +S31AFE009D4380900A0108812B0088912A010C800B008C900A011026 +S31AFE009D58812B0084912A01143D4000003D600000800B36F43DE6 +S31AFE009D6D2000012C00000039292350912A36F0418200183800C7 +S31AFE009D820000900836F4386000404BFFF9614BFFFACD386000E1 +S31AFE009D97404BFFF9554BFFFAC13D20000090693BF48001000CC4 +S31AFE009DAC7C0803A6382100084E8000209421FFF87C0802A690BA +S31AFE009DC101000C380000207C0903A63D20000081493BF03D6007 +S31AFE009DD60001396B2350392000007C09582E7C09512E39290092 +S31AFE009DEB044200FFF47D6A5B783D20000081693BF0800A01006F +S31AFE009E00900B0094812A0104912B0090800A0108900B008081EF +S31AFE009E152A010C912B0088800A0110900B008C812A0114912B7B +S31AFE009E2A0084386000014BFFFAA98001000C7C0803A638210002 +S31AFE009E3F084E800020386000004E8000203D20FE0139299E44EE +S31AFE009E543D400000912A36CC3D60FE01396B9F8C3D2000009162 +S31AFE009E696936C83D40FE013D600000394A9CE0914B36D43D201E +S31AFE009E7EFE0139299DB83D600000912B36D04E8000209421FF14 +S31AFE009E93F07C0802A693C1000893E1000C900100143D200000BC +S31AFE009EA8800937002C000000408200C4380000019009370048DE +S31AFE009EBD0060493D2000003BC93200813E00343860FFFF7D2822 +S31AFE009ED203A64E800021813E00347C7F1B783860FFFD7D280322 +S31AFE009EE7A64E800021815E00143D20FE0139299BD4912A0004EE +S31AFE009EFC3D60FE016FE0FFFF396B9C446800FFFE3D20FE01918E +S31AFE009F116A0008392999B03100FFFF7CE80110912A000C3D6012 +S31AFE009F26FE01301FFFFF7D00F910396B99783D20FE017CE040A3 +S31AFE009F3B39916A001039299CB4912A001441820014813E00347E +S31AFE009F507FE3FB787D2803A64E800021801E0030386000007C04 +S31AFE009F650803A64E800021386000044BFFCE2D800100147C0849 +S31AFE009F7A03A683C1000883E1000C382100104E8000209421FF5E +S31AFE009F8FF87C0802A69001000C3D20000039293200800900403E +S31AFE009FA42C0000004182000C7C0803A64E8000218001000C7C84 +S31AFE009FB90803A6382100084E8000207FE000084E800020942185 +S31AFE009FCEFFD87C0802A6936100149381001893A1001C93C1009F +S31AFE009FE32093E100249001002C7C9D23787C7C1B783800005425 +S31AFE009FF8981D00007F8326704BFFCE059C7D00017F83E3784B24 +S31AFE00A00DFFCDF97FBFEB789C7F0001380000749C1F00013920F7 +S31AFE00A02200689D3F0001380000729C1F0001392000659D3F00E0 +S31AFE00A03701380000619C1F0001392000643BA0003A9D3F00010B +S31AFE00A04C9FBF000148000D01906100083BFF00017FE4FB783804 +S31AFE00A06161000838A0000438C000004BFFD2517C7F1B783B80F3 +S31AFE00A076003B9B9F0000386000044BFFCD859C7F000138600070 +S31AFE00A08B404BFFCD799C7F00019FBF0001386000404BFFF65108 +S31AFE00A0A03B61000C9061000C3BFF00017FE4FB787F63DB783884 +S31AFE00A0B5A0000438C000004BFFD2017C7F1B789B9F0000386079 +S31AFE00A0CA00004BFFCD399C7F0001386000014BFFCD2D9C7F0019 +S31AFE00A0DF019FBF0001386000014BFFF6059061000C3BFF0001F2 +S31AFE00A0F47FE4FB787F63DB7838A0000438C000004BFFD1B97C24 +S31AFE00A1097F1B7838000000981F00019B9F00008001002C7C08D0 +S31AFE00A11E03A6836100148381001883A1001C83C1002083E10063 +S31AFE00A13324382100284E8000202C030001418200202803000141 +S31AFE00A148418000502C030002418200242C030003418200304868 +S31AFE00A15D00003C3C0002004C00012C7C108BA64C00012C480078 +S31AFE00A17200283C0004004C00012C7C108BA64C00012C48000075 +S31AFE00A187143C000C004C00012C7C108BA64C00012C7C708AA698 +S31AFE00A19C54630FFE4E8000202C03000141820020280300014178 +S31AFE00A1B18000682C030002418200202C03000341820028480034 +S31AFE00A1C600543C0002007C0004AC7C188BA6480000443D6004D0 +S31AFE00A1DB007C0004AC7D788BA648000034380000807C0903A6B7 +S31AFE00A1F039200000612010003D600E007C0004AC7D398BA67D31 +S31AFE00A205788BA67C198BA67D788BA6392900104200FFE07C7824 +S31AFE00A21A8AA654630FFE4E8000203D60000038000001900B36A2 +S31AFE00A22FDC3D20FE013929A2F43D600000912B37043D400000D5 +S31AFE00A24448000098800A3BEC2800000340810030708000034021 +S31AFE00A259820028706000034082002080030000386300049004D7 +S31AFE00A26E0000812A3BEC388400043929FFFC4800005C3D6000A7 +S31AFE00A28300800B3BEC2800000140810034708000014082002C13 +S31AFE00A2987060000140820024A003000038630002B00400008181 +S31AFE00A2AD2B3BEC388400023929FFFE912B3BEC48000020880353 +S31AFE00A2C200003863000198040000812A3BEC388400013929FF5B +S31AFE00A2D7FF912A3BEC800A3BEC2C0000004082FF643D2000002E +S31AFE00A2EC38000000900936DC3D20000038000000900937044EBF +S31AFE00A3018000209421FFE87C0802A69381000893A1000C93C12B +S31AFE00A316001093E100149001001C7C601B787CBC2B787C83237D +S31AFE00A32B783FA000007C040378939D3BEC4BFFFEED807D3BEC17 +S31AFE00A3407C63E0508001001C7C0803A68381000883A1000C836C +S31AFE00A355C1001083E10014382100184E8000209421FFE87C0827 +S31AFE00A36A02A69381000893A1000C93C1001093E1001490010059 +S31AFE00A37F1C7CBC2B783FA00000939D3BEC4BFFFE99807D3BEC93 +S31AFE00A3947C63E0508001001C7C0803A68381000883A1000C8318 +S31AFE00A3A9C1001083E10014382100184E800020386000004E808D +S31AFE00A3BE0020386000004E800020386000004E8000209421FFA6 +S31AFE00A3D3F07C0802A693C1000893E1000C900100143D20000077 +S31AFE00A3E880093BFC2C000000418200603FE000003BC000007DB6 +S31AFE00A3FD4000A67D40537839200000512004207C000124817F4A +S31AFE00A4123BFC800B0014901F3BFC808B001893CB00187C000060 +S31AFE00A427A6514004207C000124812B000C80AB0010806B000042 +S31AFE00A43C7D2803A64E800021801F3BFC2C0000004082FFB080D7 +S31AFE00A4510100147C0803A683C1000883E1000C382100104E80BD +S31AFE00A46600209421FFF87C0802A69001000C4BFFFF5D80010021 +S31AFE00A47B0C7C0803A6382100084E80002090690000380000000F +S31AFE00A490900900149089000490A90010900900189128000090A6 +S31AFE00A4A5C9000890E9000C4E800020812300002C0900004182BE +S31AFE00A4BA00F8810300043809FFFF28000039418100E83D60FE24 +S31AFE00A4CF01396B3E985400103A7D4B002E3D20FE0139293E98D1 +S31AFE00A4E47D4A4A147D4903A64E8004203D20FF0061290200A150 +S31AFE00A4F96900007C0006AC556B063E38000000600080007C001B +S31AFE00A50E46307D600378540B043EB16900007C0006AC48000035 +S31AFE00A523903D20FF0061290240A16900007C0006AC556B063E2B +S31AFE00A53838000000600080007C0046307D600378540B043EB156 +S31AFE00A54D6900007C0006AC4800005C3D20FF0061290220A169A8 +S31AFE00A56200007C0006AC556B063E38000000600080007C0046D4 +S31AFE00A577307D600378540B043EB16900007C0006AC48000028EA +S31AFE00A58C3D20FF0061290940800900007C0006AC540004DE5545 +S31AFE00A5A10B68247C005B78900900007C0006AC800300003D2014 +S31AFE00A5B60000394933A85408103A7C0A402E3D20FE0039296078 +S31AFE00A5CBB47C004800418200187C0A402E3D20FE013929B218A8 +S31AFE00A5E07C0048004C820020800300083D6000007C0A412E8112 +S31AFE00A5F5430010396B34943D2000007D4B412E392935807C69FE +S31AFE00A60A412E4E8000207C631B794D8200203803FFFF28000017 +S31AFE00A61F397C0803784D8100203D60FE01396B3F805500103A5E +S31AFE00A6347D4B002E3D20FE0139293F807D4A4A147D4903A64EB8 +S31AFE00A6498004203D20FF0061290014816900007C0006AC3C0006 +S31AFE00A65E80007C0044307D6B0078916900007C0006AC4E80001D +S31AFE00A673203D20FF0061290200A00900007C0006AC7000FFF789 +S31AFE00A6885400043EB00900007C0006AC4E8000203D20FF006191 +S31AFE00A69D290200A00900007C0006AC7000FFFB5400043EB009E9 +S31AFE00A6B200007C0006AC4E8000203D20FF0061290240A00900A2 +S31AFE00A6C7007C0006AC7000FFFB5400043EB00900007C0006AC65 +S31AFE00A6DC4E8000203D20FF0061290220A00900007C0006AC7028 +S31AFE00A6F100FFF75400043EB00900007C0006AC4E8000203D2092 +S31AFE00A706FF0061290220A00900007C0006AC7000FFFB540004F6 +S31AFE00A71B3EB00900007C0006AC4E8000203D20FF0061290940E3 +S31AFE00A730800900007C0006AC5400066E900900007C0006AC4E7C +S31AFE00A7458000203D20FF0061290948816900007C0006AC394390 +S31AFE00A75AFFE53C0080007C0054307D6B0078916900007C00066A +S31AFE00A76FAC4E8000207C631B794D8200203803FFFF280000393B +S31AFE00A7847C0803784D8100203D60FE01396B40685500103A7DCB +S31AFE00A7994B002E3D20FE01392940687D4A4A147D4903A64E8066 +S31AFE00A7AE04203D20FF0061290014816900007C0006AC3C0080A0 +S31AFE00A7C3007C0044307D6B0378916900007C0006AC4E80002014 +S31AFE00A7D83D20FF0061290200A00900007C0006AC60000008B091 +S31AFE00A7ED0900007C0006AC4E8000203D20FF0061290200A0099D +S31AFE00A80200007C0006AC60000004B00900007C0006AC4E8000F6 +S31AFE00A817203D20FF0061290240A00900007C0006AC60000004A5 +S31AFE00A82CB00900007C0006AC4E8000203D20FF0061290220A096 +S31AFE00A8410900007C0006AC60000008B00900007C0006AC4E80AA +S31AFE00A85600203D20FF0061290220A00900007C0006AC6000008A +S31AFE00A86B04B00900007C0006AC4E8000203D20FF0061290940CC +S31AFE00A880800900007C0006AC60000080900900007C0006AC4E13 +S31AFE00A8958000203D20FF0061290948816900007C0006AC39433F +S31AFE00A8AAFFE53C0080007C0054307D6B0378916900007C000616 +S31AFE00A8BFAC4E8000207C631B794D8200203803FFFF28000039EA +S31AFE00A8D47C0803784D8100203D60FE01396B41505500103A7D91 +S31AFE00A8E94B002E3D20FE01392941507D4A4A147D4903A64E802C +S31AFE00A8FE04203D20FF0061290010816900007C0006AC3C008053 +S31AFE00A913007C0044307D6B0378916900007C0006AC4E800020C2 +S31AFE00A9283D20FF0061290200A00900007C0006AC60000080B0C7 +S31AFE00A93D0900007C0006AC4E8000203D20FF0061290200A0094B +S31AFE00A95200007C0006AC60000040B00900007C0006AC4E800069 +S31AFE00A967203D20FF0061290240A00900007C0006AC60000080D8 +S31AFE00A97CB00900007C0006AC4E8000203D20FF0061290220A045 +S31AFE00A9910900007C0006AC60000080B00900007C0006AC4E80E1 +S31AFE00A9A600203D20FF0061290220A00900007C0006AC60000039 +S31AFE00A9BB40B00900007C0006AC4E8000203D20FF006129094C33 +S31AFE00A9D0816900007C0006AC3943FFE53C0080007C0054307DBD +S31AFE00A9E56B0378916900007C0006AC4E8000207C8723787C63E0 +S31AFE00A9FA1B794D8200203803FFFF280000397C0803784D81005A +S31AFE00AA0F203D60FE01396B42385500103A7D4B002E3D20FE0163 +S31AFE00AA24392942387D4A4A147D4903A64E8004203C0080007C7F +S31AFE00AA390044303D60FF00616B0018808B00007C0006AC7C84D7 +S31AFE00AA4E00787CEAFE707D493A787D2950507D29FE707C8003D2 +S31AFE00AA63787C0048787C8948387D240378908B00007C0006AC3C +S31AFE00AA784E8000207C8823787C631B794D8200203803FFFF2875 +S31AFE00AA8D0000394D8100203D60FE01396B43205400103A7D4B80 +S31AFE00AAA2002E3D20FE01392943207D4A4A147D4903A64E8004E6 +S31AFE00AAB7203D20FF0061290200A08900007C0006AC5484063E0B +S31AFE00AACC38000000600080007C0046307C8003785404043EB0A6 +S31AFE00AAE18900007C0006AC4E8000203D20FF0061290240A08966 +S31AFE00AAF600007C0006AC5484063E38000000600080007C004623 +S31AFE00AB0B307C8003785404043EB08900007C0006AC4E8000209B +S31AFE00AB203D20FF0061290220A08900007C0006AC5484063E3869 +S31AFE00AB35000000600080007C0046307C8003785404043EB089EB +S31AFE00AB4A00007C0006AC4E8000203D20FF00612909408009001E +S31AFE00AB5F007C0006AC540004DE550B68247C005B7890090000A5 +S31AFE00AB747C0006AC4E800020386000014E800020386000014E3E +S31AFE00AB898000203D20000090693C044E8000209421FFF87C085F +S31AFE00AB9E02A69001000C3D2000003D60000181493C04906B98C1 +S31AFE00ABB338814A0000388B98382C0A0000386000004182001052 +S31AFE00ABC8386000027D4803A64E8000218001000C7C0803A6388B +S31AFE00ABDD2100084E8000209421FFF87C0802A69001000C3D2076 +S31AFE00ABF200013D600000814B3C049069983839099838908800AD +S31AFE00AC070490A80008814A00002C0A00004082000C3860000089 +S31AFE00AC1C480000147D044378386000037D4803A64E800021800F +S31AFE00AC3101000C7C0803A6382100084E8000209421FFF87C0851 +S31AFE00AC4602A69001000C3D2000013D600000814B3C0490699818 +S31AFE00AC5B383909983890880004814A00002C0A00004082000CAB +S31AFE00AC7038600000480000147D044378386000047D4803A64E43 +S31AFE00AC858000218001000C7C0803A6382100084E800020942157 +S31AFE00AC9AFFF87C0802A69001000C3D2000013D600000814B3CDE +S31AFE00ACAF0490699838390998389088000490A80008814A000086 +S31AFE00ACC42C0A00004082000C38600000480000147D044378380B +S31AFE00ACD96000057D4803A64E8000218001000C7C0803A638218D +S31AFE00ACEE00084E8000209421FFF87C0802A69001000C3D200085 +S31AFE00AD03013D600000814B3C0490699838390998389088000496 +S31AFE00AD1890A80008814A00002C0A00004082000C386000004833 +S31AFE00AD2D0000147D044378386000077D4803A64E800021800140 +S31AFE00AD42000C7C0803A6382100084E8000209421FFE87C08024E +S31AFE00AD57A693E100149001001C3BE100087FE3FB784BFFFE3196 +S31AFE00AD6C2C0300004082000C3860000048000008A07F00068044 +S31AFE00AD8101001C7C0803A683E10014382100184E8000209421E3 +S31AFE00AD96FFF87C0802A69001000C4BFFB3F98001000C7C0803DA +S31AFE00ADABA6382100084E8000203C00FE00600001007C0903A6D1 +S31AFE00ADC04E8004209421FFF87C0802A69001000C4BFFFFE538AD +S31AFE00ADD56000008001000C7C0803A6382100084E800020386064 +S31AFE00ADEA00004E8000209421FFE87C0802A693A1000C93C10006 +S31AFE00ADFF1093E100149001001C7C7F1B78386000003BA00001F4 +S31AFE00AE14380000002C1FFFFE41820040418100102C1FFFFD4148 +S31AFE00AE2982004C480000502C1FFFFF408200483D200000812950 +S31AFE00AE3E37082C0900003BA9FFFF4181003C7D3D4B7840820068 +S31AFE00AE53343BA0FFFD4800002C3D200000392932003D600000D9 +S31AFE00AE689069001893EB3708480000143BE00000480000083B01 +S31AFE00AE7DFF0001380000012C000000418200803D2000003BC9B3 +S31AFE00AE923200813E00182C09000041820018806900008009001C +S31AFE00AEA714388000047C0803A64E8000213D200001392998440A +S31AFE00AEBC57E028347C004A143D2000002C030000901E0018932B +S31AFE00AED1E93708813E00184182001C806900008009001438804C +S31AFE00AEE600057C0803A64E800021480000188069000080090060 +S31AFE00AEFB14388000047C0803A64E8000217FA3EB788001001C30 +S31AFE00AF107C0803A683A1000C83C1001083E10014382100184E40 +S31AFE00AF2580002039400001380000002C03FFFE418200404181D0 +S31AFE00AF3A00102C03FFFD4182004C480000502C03FFFF4082002D +S31AFE00AF4F483D2000008129370C2C0900003949FFFF4181003CA4 +S31AFE00AF647D2A4B78408200343940FFFD4800002C3D20000039F5 +S31AFE00AF792932003D60000090090014906B370C480000143860E8 +S31AFE00AF8E00004800000838630001380000012C00000041820096 +S31AFE00AFA3283D20000139299844546028343D6000007C004A144A +S31AFE00AFB8396B32003D200000900B00149069370C7D4353784E89 +S31AFE00AFCD8000204E8000204E8000204E8000209421FFE87C08E1 +S31AFE00AFE202A693E100149001001C3D200000392932008169009E +S31AFE00AFF7183800000090010008812B0000800B00187C651B7895 +S31AFE00B00C7C8623787D234B78388100087C0803A64E80002180CE +S31AFE00B0210100087C7F1B782C000000418200103D20000080693A +S31AFE00B0363C08480001997FE3FB788001001C7C0803A683E100D8 +S31AFE00B04B14382100184E8000209421FFE87C0802A693A1000C71 +S31AFE00B06093C1001093E100149001001C380000407C0903A63D5B +S31AFE00B0752000003D60FE0139293200396BADE8394000007D69DA +S31AFE00B08A512E394A00044200FFF83D2000013D60FE013929987A +S31AFE00B09F44396BADE839000000550A28343808000139000008A5 +S31AFE00B0B47D0903A67D69512E394A00044200FFF87C0803782C04 +S31AFE00B0C90800024081FFDC3FA0000038000013901D32003D6022 +S31AFE00B0DE00003BBD3200396B33A8917D00043D200000392930AF +S31AFE00B0F3003D60FE01913D0008396BADB4917D00403D20FE0123 +S31AFE00B1083929ADC43D60FE01913D0010396BAD94917D00483D69 +S31AFE00B11D20FE013929ADF03D60FE01913D0030396BAF283D4069 +S31AFE00B132FE01917D0034394AAFD03D20FE01915D00203929AF46 +S31AFE00B147D4913D001C3860FFFE4BFFFCA13860FFFE4BFFFDD108 +S31AFE00B15C38000000901D0024901D0028901D004C901D004438DA +S31AFE00B1717D003C4BFFFA193D20FE01392997C8913D008C8001B7 +S31AFE00B186001C7C0803A683A1000C83C1001083E1001438210012 +S31AFE00B19B184E8000207C842379418200243884FFFF7C0320AE0B +S31AFE00B1B02C0000034082000C386000014E8000202C0400004092 +S31AFE00B1C582FFE4386000004E8000209421FFF87C0802A690011D +S31AFE00B1DA000C7C631B793D20FE013809B2084182000880030038 +S31AFE00B1EF943D200000392932008129008C7C0303787D2803A644 +S31AFE00B2044E8000218001000C7C0803A6382100084E80002094A5 +S31AFE00B21921FFF07C0802A693C1000893E1000C900100143D2002 +S31AFE00B22E0000800932007C7F1B782C000014396932007C9E236D +S31AFE00B243783860FFFF4082001C812B001838800006806900009B +S31AFE00B258800900147C0803A64E8000217C1F18004082001C7F14 +S31AFE00B26DE3FB787FC4F3784BFFFD697C601B797C0303784082E8 +S31AFE00B28200287FE3FB787FC4F3784BFFAE257C601B787C09FEF9 +S31AFE00B297707D2302787C6348507C63FE707C03183880010014EC +S31AFE00B2AC7C0803A683C1000883E1000C382100104E8000202821 +S31AFE00B2C10500037C691B78408100107C801B78700B0003418253 +S31AFE00B2D600302C05000038A5FFFF4D820020880400002C050077 +S31AFE00B2EB0098090000388400013929000138A5FFFF4082FFE805 +S31AFE00B3004E8000202805000F7C6B1B78408100388004000038DB +S31AFE00B315A5FFF0900B0000852400042805000F952B00048404BB +S31AFE00B32A0004940B000485240004952B000438840004396B008E +S31AFE00B33F044181FFD028050003408100208004000038A5FFFCF3 +S31AFE00B35428050003900B000038840004396B00044181FFE82CD8 +S31AFE00B3690500007D695B7838A5FFFF4D820020880400002C0586 +S31AFE00B37E000098090000388400013929000138A5FFFF4082FF59 +S31AFE00B393E84E800020280500037C691B784081000C7060000383 +S31AFE00B3A8418200282C05000038A5FFFF4D8200202C05000098DD +S31AFE00B3BD8900003929000138A5FFFF4082FFF04E800020548439 +S31AFE00B3D2063E5480402E7C0023785409801E7C004B787C6B1B89 +S31AFE00B3E7782805000F40810024900B0000940B000438A5FFF0AA +S31AFE00B3FC940B00042805000F940B0004396B00044181FFE42841 +S31AFE00B4110500034081001838A5FFFC28050003900B0000396BFA +S31AFE00B42600044181FFF02C0500007D695B784D8200207CA90357 +S31AFE00B43BA698890000392900014200FFF84E8000209421FFA84B +S31AFE00B4507C631B79394100087D47537839000000408200143818 +S31AFE00B4650000309801000839410009480000247C032B967D2031 +S31AFE00B47A29D67D2918507D6648AE7C030379996A0000394A0052 +S31AFE00B48F014082FFE47C0A3800418200287D0343787CE93B7802 +S31AFE00B4A48C0AFFFF386300017C0A4800980400003884000140F8 +S31AFE00B4B982FFEC7C681B7838000000980400007D03437838212E +S31AFE00B4CE00584E8000209421FF987C0802A67D800026924100B1 +S31AFE00B4E330926100349281003892A1003C92C1004092E10044F5 +S31AFE00B4F8930100489321004C93410050936100549381005893F4 +S31AFE00B50DA1005C93C1006093E100649001006C9181002C7C994C +S31AFE00B52223788BB900003AE100082C1D00007EF2BB787C7B1B10 +S31AFE00B537787CB82B783BC000003AA000003B390001418204801B +S31AFE00B54C2C1D00254082043C8BB900003B3900012C1D002D3A0D +S31AFE00B561C000003BE00000408200108BB900003B3900013AC071 +S31AFE00B57600012C1D0030408200148BB900003B8000013B3900F8 +S31AFE00B58B01480000083B800000381DFFD0280000094181003C48 +S31AFE00B5A07FA3EB787F24CB787FE9FB781D29000A3929FFD07D4E +S31AFE00B5B5291A1488640000388400013803FFD028000009408181 +S31AFE00B5CAFFE47D3F4B787C9923787C7D1B782C1D002E40820091 +S31AFE00B5DF3C8BB900003B390001381DFFD0280000093B9C000131 +S31AFE00B5F4418100247F24CB7888640000388400013803FFD02897 +S31AFE00B6090000094081FFF07C7D1B787C9923782C1D006C3A80C4 +S31AFE00B61E00004082000C8BB900003B390001381DFFA828000068 +S31AFE00B633203A790001418101F83D60FE01396B44405400103A0D +S31AFE00B6487D4B002E3D20FE01392944407D4A4A147D4903A64ECF +S31AFE00B65D800420386000307F6803A63B8000013BE000084E802B +S31AFE00B6720021386000787F6803A64E800021897800005569064A +S31AFE00B6873E38090001280000084181001C801800085529103AB4 +S31AFE00B69C396B00017C604A1499780000480000302809000741B4 +S31AFE00B6B181001C807800043800000839230004981800009138CE +S31AFE00B6C60004480000108078000438030004901800042C1D00DF +S31AFE00B6DB648063000041820028418100102C1D00584182004CA2 +S31AFE00B6F0480000602C1D0070418200342C1D00784182002C48F1 +S31AFE00B70500004C2C0300004080000C3A80002D7C6300D03CC052 +S31AFE00B71AFE0138C644083881000838A0000A480000203CC0FEC8 +S31AFE00B72F0138C644144800000C3CC0FE0138C644283881000830 +S31AFE00B74438A000104BFFFD057C751B787E579378480000EC8997 +S31AFE00B7597800005569063E38090001280000084181001C801875 +S31AFE00B76E00085529103A396B00017C604A1499780000480000BA +S31AFE00B78330280900074181001C807800043800000839230004CB +S31AFE00B798981800009138000448000010807800043803000490F8 +S31AFE00B7AD18000482E300007EE3BB78480003C97C751B7848008E +S31AFE00B7C20080897800005569063E3809000128000008418100B7 +S31AFE00B7D71C801800085529103A396B00017D404A149978000004 +S31AFE00B7EC48000030280900074181001C81580004380000083960 +S31AFE00B8012A000498180000913800044800001081580004380A0C +S31AFE00B816000490180004886A00037F6803A63BDE00014E8000FC +S31AFE00B82B214800018C3860003F7F6803A63BDE00014E8000219E +S31AFE00B8407F55F8503134FFFF7D294910381AFFFF7C0048782FB6 +S31AFE00B8559C00007F4948387D3A03782C140000419E00243BA0A6 +S31AFE00B86A0030418200207E83A3787F6803A63BDE00013A800032 +S31AFE00B87F004E800021480000083BA000202C1400002E160000F2 +S31AFE00B8943AD5FFFF7F8000264092003C7F40D3782C0000003BEA +S31AFE00B8A95AFFFF4081002C7F5FD3787FA3EB787F6803A63BDEEA +S31AFE00B8BE00014E8000217FE0FB782C0000003BFFFFFF4181FF8A +S31AFE00B8D3E47FFAFB787F880120418200147E83A3787F6803A6E1 +S31AFE00B8E83BDE00014E8000217EA0AB782C0000007ED5B3784013 +S31AFE00B8FD8100547EBDAB787EFCBB788BFC00007F6803A67FE3D9 +S31AFE00B912FB783B9C00013BDE00014E8000212C1F000A408200B1 +S31AFE00B927143860000D7F6803A63BDE00014E8000217FA0EB7833 +S31AFE00B93C2C0000003BBDFFFF4181FFC47F97E3787FB5EB784102 +S31AFE00B9519200687F40D3782C0000003B5AFFFF408100587F5F23 +S31AFE00B966D378386000207F6803A63BDE00014E8000217FE0FBD2 +S31AFE00B97B782C0000003BFFFFFF4181FFE4480000307FA3EB7835 +S31AFE00B9907F6803A63BDE00013A7900014E8000212C1D000A40BE +S31AFE00B9A58200143860000D7F6803A63BDE00014E8000218BB971 +S31AFE00B9BA00007E799B782C1D00004082FB887FC3F378800100AE +S31AFE00B9CF6C8181002C7C0803A682410030826100348281003853 +S31AFE00B9E482A1003C82C1004082E10044830100488321004C8382 +S31AFE00B9F9410050836100548381005883A1005C83C1006083E188 +S31AFE00BA0E00647D808120382100684E8000203D20000081693CEB +S31AFE00BA230C38000000986B0000396B000191693C0C980B000039 +S31AFE00BA384E8000209421FF707C0802A693A1008493C100889390 +S31AFE00BA4DE1008C900100943D60000090A10010906B3C0C38A154 +S31AFE00BA6200083BA1009838000002396000003C60FE0190A100B0 +S31AFE00BA77789081000C90C1001490E100189101001C91210020B3 +S31AFE00BA8C91410024980100709961007193A100743863BA1C38E6 +S31AFE00BAA1A100704BFFFA31800100947C0803A683A1008483C1D8 +S31AFE00BAB6008883E1008C382100904E8000209421FF707C08027E +S31AFE00BACBA693A1008493C1008893E1008C9001009490A10010C2 +S31AFE00BAE09081000C7C641B789061000838A100083BA100983837 +S31AFE00BAF5000001396000003C60FE0190A1007890C1001490E184 +S31AFE00BB0A00189101001C91210020914100249801007099610091 +S31AFE00BB1F7193A100743863BD7838A100704BFFF9A980010094DA +S31AFE00BB347C0803A683A1008483C1008883E1008C382100904E30 +S31AFE00BB498000209421FFF87C0802A69001000C7C601B787C855E +S31AFE00BB5E23783C60FE013863BD787C0403784BFFF969800100A0 +S31AFE00BB730C7C0803A6382100084E80002088030000392000004D +S31AFE00BB884800000C88030000392900012C00000038630001405A +S31AFE00BB9D82FFF07D234B784E8000207C691B78480000102C03CE +S31AFE00BBB20000386000004D8200208869000088040000388400BA +S31AFE00BBC7017C030000392900014182FFE07C6018504E800020AE +S31AFE00BBDC880400007C691B784800001098030000880400003895 +S31AFE00BBF16300012C000000388400014082FFEC3800000098036E +S31AFE00BC0600007D234B784E8000207C6B1B78480000102C0300D3 +S31AFE00BC1B00386000004D820020886B0000396B00013803FFBFF8 +S31AFE00BC30280000194181000C380300205403063E892400003811 +S31AFE00BC458400013809FFBF280000194181000C38090020540995 +S31AFE00BC5A063E7D204B787C0300004182FFB47C6018504E800026 +S31AFE00BC6F207CA02B797C691B787C0903A64082001438600000C8 +S31AFE00BC844E8000207C6018504E800020886900008804000038D2 +S31AFE00BC998400017C030000392900014082FFE42C030000418294 +S31AFE00BCAE00084200FFE0386000004E8000207CA02B797C6B1B0C +S31AFE00BCC3787C0903A640820018386000004E8000207C6018501E +S31AFE00BCD84E80002042400050886B0000396B00013803FFBF28DA +S31AFE00BCED0000194181000C380300205403063E892400003884F8 +S31AFE00BD0200013809FFBF280000194181000C3809002054090655 +S31AFE00BD173E7D204B787C0300004082FFB42C0300004082FFB4DD +S31AFE00BD2C386000004E8000204800002C89230000880400003894 +S31AFE00BD418400017C09000038630001418200148803FFFF8864F7 +S31AFE00BD56FFFF7C6300504E8000207CA02B782C00000038A5FFF2 +S31AFE00BD6BFF4082FFCC386000004E8000209421FFE87C0802A6E5 +S31AFE00BD809381000893A1000C93C1001093E100149001001C3D78 +S31AFE00BD9520000080093B587C7D1B782C000000408200743D200E +S31AFE00BDAA000039293200800900343860FFFF7C0803A67D3E4B66 +S31AFE00BDBF783BE000004E8000217C7C1B78813E00347FE3FB7896 +S31AFE00BDD47D2803A64E800021813E00147FA4EB78806900008057 +S31AFE00BDE909000C7C0803A64E80002137FF00014081FFD43D20E8 +S31AFE00BDFE000039293200800900347F83E3787C0803A64E800083 +S31AFE00BE1321480000483D20000039293200816900142C0B00003F +S31AFE00BE284182001C806B0000800B000C7FA4EB787C0803A64E9F +S31AFE00BE3D8000214800001C816900187FA4EB78806B0000800BE9 +S31AFE00BE52000C7C0803A64E8000218001001C7C0803A6838100E1 +S31AFE00BE670883A1000C83C1001083E10014382100184E8000205F +S31AFE00BE7C9421FFF07C0802A693E1000C900100143D2000003922 +S31AFE00BE91293200816900147C7F1B782C0B0000408200088169C6 +S31AFE00BEA60018806B0000800B00107C0803A64E800021987F00B2 +S31AFE00BEBB00800100147C0803A683E1000C382100104E800020E5 +S31AFE00BED09421FFE07C0802A69361000C9381001093A10014939A +S31AFE00BEE5C1001893E1001C900100243D20000080093B587C7DB4 +S31AFE00BEFA1B782C000000408200883D20000039293200800900AC +S31AFE00BF0F343860FFFF7C0803A67D3C4B783BE000004E8000219C +S31AFE00BF247C7B1B78813C00347FE3FB787D2803A64E80002181F6 +S31AFE00BF397C00147FA4EB78806B0000800B001C7C0803A64E804C +S31AFE00BF4E00217C7E1B7941820010881D00002C000000408200C5 +S31AFE00BF634C37FF00014081FFC03D200000392932008009003414 +S31AFE00BF787F63DB787C0803A64E800021480000643D200000391D +S31AFE00BF8D293200816900142C0B000041820034806B0000800B9E +S31AFE00BFA2001C7FA4EB7848000034817C00307FE3FB787D68037E +S31AFE00BFB7A63D2000003800000190093B584E80002148000020B2 +S31AFE00BFCC816900187FA4EB78806B0000800B001C7C0803A64EC7 +S31AFE00BFE18000217C7E1B787FC3F378800100247C0803A68361B6 +S31AFE00BFF6000C8381001083A1001483C1001883E1001C382100A5 +S31AFE00C00B204E8000209421FFE87C0802A69381000893A1000CEA +S31AFE00C02093C1001093E100149001001C3D20000080093B587C79 +S31AFE00C0357D1B782C000000408200803D200000392932008009FA +S31AFE00C04A00343860FFFF7C0803A67D3E4B783BE000004E80007F +S31AFE00C05F217C7C1B78813E00347FE3FB787D2803A64E80002117 +S31AFE00C074813E00142C0900004182001C8069000080090014380E +S31AFE00C0898000077FA5EB787C0803A64E80002137FF000140817C +S31AFE00C09EFFC83D20000039293200800900347F83E3787C080330 +S31AFE00C0B3A64E800021480000303D2000003929320081290014B8 +S31AFE00C0C82C0900004182001C8069000080090014388000077F87 +S31AFE00C0DDA5EB787C0803A64E8000213D2000003929320081298B +S31AFE00C0F200182C0900004182001C80690000800900147FA5EB74 +S31AFE00C10778388000077C0803A64E8000218001001C7C0803A602 +S31AFE00C11C8381000883A1000C83C1001083E10014382100184E43 +S31AFE00C1318000209421FFD07C0802A69301001093210014934165 +S31AFE00C14600189361001C9381002093A1002493C1002893E1003C +S31AFE00C15B2C900100347C7D1B787CBE2B787FBFEB783B60000035 +S31AFE00C1703F2000003F8000003B40000081393B802C0900004132 +S31AFE00C185820020896900002C0B000041820014380900019961C3 +S31AFE00C19A000890193B80480000647FC0FE707C1E005054000F7A +S31AFE00C1AFFE7FE9EA78216900007D2B49147C0B48394182003C19 +S31AFE00C1C4386000324BFFFE49480000083BDEFFCE2C1E00004047 +S31AFE00C1D9810014386100084BFFFCF17C7B1B794182FFE82C1B64 +S31AFE00C1EE0000408200143860FFFF48000180386100084BFFFC1C +S31AFE00C2037D880100089B5F00007C0303785400063E2C00000D4F +S31AFE00C2184182007C418100282C000008418200D4418100102C1B +S31AFE00C22D00000341820038480001142C00000A41820058480004 +S31AFE00C24201082C00002B418200E8418100102C000024418200F3 +S31AFE00C257DC480000F02C00007F41820098480000E47C1FE80005 +S31AFE00C26C408200183C60FE01386344C84BFFF84D3860FFFE4831 +S31AFE00C2810000F8987F00003BFF00013F000000480000DC89214D +S31AFE00C29600083F0000002C09000A40820010881837102C000024 +S31AFE00C2AB0D418200182C09000D40820018881837102C00000A59 +S31AFE00C2C04082000C9B410008480000A4801C3B782C000000410B +S31AFE00C2D58200143860000D4BFFFA9D3860000A4BFFFA95880130 +S31AFE00C2EA00083860000198183710480000847C1FE8003F000015 +S31AFE00C2FF004182006C801C3B782C0000004182001C38600008FD +S31AFE00C3144BFFFA65386000204BFFFA5D386000084BFFFA553B9A +S31AFE00C329FFFFFF480000407C1FE800408200145463063E4BFFD8 +S31AFE00C33EC3293860000048000034801C3B782C000000418200A8 +S31AFE00C3530C886100084BFFFA21880100083F000000981F0000E8 +S31AFE00C3683BFF000188010008981837104BFFFE08800100347C78 +S31AFE00C37D0803A68301001083210014834100188361001C8381CA +S31AFE00C392002083A1002483C1002883E1002C382100304E8000D7 +S31AFE00C3A7209421FFC07C0802A6924100089261000C92810010C0 +S31AFE00C3BC92A1001492C1001892E1001C93010020932100249308 +S31AFE00C3D14100289361002C9381003093A1003493C1003893E11E +S31AFE00C3E6003C900100447C9D23787C7C1B787D3DE0107D294955 +S31AFE00C3FB107D294BB87C1CE8507C0048787FA948387D3D037986 +S31AFE00C4107CB62B78408101403E40FE012C16000041820014386E +S31AFE00C4257244CC7C96E0504BFFF69948000010387244CC7F844C +S31AFE00C43AE3784BFFF6897FBEEB787F9DE3783BE000003E80FED7 +S31AFE00C44F013EA0FE013E60FE013B5EFFF03AFD00103F00FE014C +S31AFE00C4643F60FE013F20FE017C1FF000408000147C9DF8AE386D +S31AFE00C4797844D84BFFF6494800000C387944E04BFFF63D7FFC6C +S31AFE00C48EFE707C1CF8507C000E707C0002147C00F8502C0000CB +S31AFE00C4A3014082000C387B44E44BFFF61957801F7E7C1F021458 +S31AFE00C4B87C001E70540018387C00F8502C0000074082000C38C0 +S31AFE00C4CD7B44E44BFFF5F53BFF00012C1F000F4081FF907FBC5F +S31AFE00C4E2EB787FDDF378387444E84BFFF5D97EBEAB783BE000AD +S31AFE00C4F7007C1FE8004080002C7C9CF8AE3804FFE02000005E66 +S31AFE00C50C7C0001107C0003B87C0900F87C8000387129002E7C5D +S31AFE00C521044B784800000838800020387E44EC4BFFF5953BFF1E +S31AFE00C53600012C1F000F4081FFBC387344F04BFFF5817F5DD3C7 +S31AFE00C54B797EFCBB784181FECC800100447C0803A68241000868 +S31AFE00C5608261000C8281001082A1001482C1001882E1001C832C +S31AFE00C57501002083210024834100288361002C8381003083A170 +S31AFE00C58A003483C1003883E1003C382100404E8000209421FF0D +S31AFE00C59FF87C0802A69001000C38A000004BFFFDFD8001000C19 +S31AFE00C5B47C0803A6382100084E8000209421FF607C0802A6931F +S31AFE00C5C961008C9381009093A1009493C1009893E1009C900173 +S31AFE00C5DE00A49081000C388100A83FA000003B80000038000050 +S31AFE00C5F3013961000890810074837D3B809061000890A1001012 +S31AFE00C60890C1001490E100189101001C9121002091410024981D +S31AFE00C61D010070916100789B810071388100704BFFF5213C6077 +S31AFE00C632FE01386344F44BFFF48D939D3B803861008038800096 +S31AFE00C6470838A000004BFFFAE988610080937D3B806860005978 +S31AFE00C65C212000007C09011468630079212300007C6919147CD4 +S31AFE00C671630378800100A47C0803A68361008C8381009083A158 +S31AFE00C686009483C1009883E1009C382100A04E8000209421FF90 +S31AFE00C69BE87C0802A69381000893A1000C93C1001093E100142A +S31AFE00C6B09001001C7C9C23787CBD2B787C7F1B783BC000004864 +S31AFE00C6C50000C857C0103A7FFD012E881F00003BDE000148007F +S31AFE00C6DA0098881F00002C0000224082008457C0103A7D60EA4C +S31AFE00C6EF14812BFFFC7C09F8004082000C3BFF000193EBFFFC78 +S31AFE00C704893F0000692000227C0000D07D2900D055290FFE5408 +S31AFE00C719000FFE7D2B00394182002C7FE3FB788D23000169201B +S31AFE00C72E00227C0000D07D2900D055290FFE54000FFE7D2B007A +S31AFE00C743394082FFE47C7F1B78881F00002C0000004082002CB0 +S31AFE00C7583C60FE013863450C4BFFF365480000083BFF0001888C +S31AFE00C76D1F00002C0000004182004C2C0000204082FF603800B4 +S31AFE00C7820000981F00003BFF0001881F00002C00000041820016 +S31AFE00C7972C2C000020408200187FE3FB788C0300012C00002086 +S31AFE00C7AC4182FFF87C7F1B78881F00002C0000004082FF0C3C50 +S31AFE00C7C16000003C80000080BD000093DC0000386339F838840F +S31AFE00C7D63A68480000258001001C7C0803A68381000883A10041 +S31AFE00C7EB0C83C1001083E10014382100184E8000209421FFD872 +S31AFE00C8007C0802A6930100089321000C93410010936100149318 +S31AFE00C81581001893A1001C93C1002093E100249001002C7C7F5D +S31AFE00C82A1B787CBC2B787C9A23787F83E3784BFFF3497FFDFB7C +S31AFE00C83F787C1DD0007C7B1B78418200C0809D00007F83E37878 +S31AFE00C8547F65DB784BFFF4652C0300004082009C807D00004B1C +S31AFE00C869FFF3197C03D800408100847C1FD0003BC000014182E5 +S31AFE00C87E00603F00FE013F20FE017C1DF80041820044809F00EE +S31AFE00C893007F83E3787F65DB784BFFF4212C0300004082002C7C +S31AFE00C8A82C1E00004182001880BD0000387845207F84E3784B57 +S31AFE00C8BDFFF2093BC00000809F0000387945484BFFF1F93BFFA2 +S31AFE00C8D200107C1FD0004082FFB02C1E0000408200143C60FEA7 +S31AFE00C8E7013863454C4BFFF1D9480000187FA3EB7848000014B6 +S31AFE00C8FC3BBD00107C1DD0004082FF48386000008001002C7CE8 +S31AFE00C9110803A6830100088321000C8341001083610014838150 +S31AFE00C926001883A1001C83C1002083E10024382100284E800065 +S31AFE00C93B209421FFE87C0802A69381000893A1000C93C100103B +S31AFE00C95093E100149001001C7C601B783C60FE017C9D23787C5F +S31AFE00C9651F03787CBE2B78386345504BFFF1557C1FE80041823C +S31AFE00C97A00283F80FE0180BF000080DF0008387C45587FC4F391 +S31AFE00C98F784BFFF1353BFF00107C1FE8004082FFE48001001C98 +S31AFE00C9A47C0803A68381000883A1000C83C1001083E10014380D +S31AFE00C9B92100184E800020912300149883000090A3000490C3D1 +S31AFE00C9CE000890E3000C910300104E8000209421FFB07C08024D +S31AFE00C9E3A691C1000891E1000C92010010922100149241001868 +S31AFE00C9F89261001C9281002092A1002492C1002892E1002C93E0 +S31AFE00CA0D01003093210034934100389361003C9381004093A133 +S31AFE00CA22004493C1004893E1004C900100547D344B787D16432C +S31AFE00CA37783016FFFF7D20B1106A800001216000007C0B0114C4 +S31AFE00CA4C7D2B00397C701B787C9823787CD133787CF53B787D29 +S31AFE00CA615353783B4000013A40000041820008925600007C1267 +S31AFE00CA76A8007E3F8B78408000507EA903A67FEBFB7839000049 +S31AFE00CA8B00812B00102C0900004182000891090000814B00046C +S31AFE00CAA02C0A000040820020800B00082C0000004182000C2CAB +S31AFE00CAB50000024082000C812B000C91490000396B0018420008 +S31AFE00CACAFFC47CBD2B787C1D8000408002043DC0FE013DE0FEBE +S31AFE00CADF0157BE103A7C9EC02E880400002C00002D4082014CE2 +S31AFE00CAF4396000007C0BA8008AE400017E3F8B78392000003B9E +S31AFE00CB097D0001408001147F9EC2143B200001881F00007C1737 +S31AFE00CB1E0000408200F0813F00102C09000041820020800900DB +S31AFE00CB33002C00000041820014809F0014386E45644BFFEF81AA +S31AFE00CB483B400000801F00042C00000041820080813C00008802 +S31AFE00CB5D0900023BC900032C00003D4182000C83DC00043BBD1A +S31AFE00CB720001801F00082C000000418200102C00000141820013 +S31AFE00CB873C48000040809F000C7FC3F37838A0000038C0000029 +S31AFE00CB9C480001992C0300004082002480BF00147FC4F3783850 +S31AFE00CBB16F45844BFFEF113B4000004800000C813F000C93C9F2 +S31AFE00CBC60000813F00103B7D000148000034801F00082C00007E +S31AFE00CBDB00418200102C0000024182001C48000020817F000CED +S31AFE00CBF0812B000039290001912B00004800000C813F000C93AE +S31AFE00CC052900003960000148000014392900017C09A8003BFF2D +S31AFE00CC1A00184180FEFC2C0B0000408200A83C60FE0138634512 +S31AFE00CC2FAC7EE4BB784BFFEE91480000902C160000418200788D +S31AFE00CC442C12000041820014386E45647E649B784BFFEE713B9A +S31AFE00CC594000002C140000418200102C1400014182003C4800E7 +S31AFE00CC6E00407C7EC02E7EC4B37838A0000038C0000048000000 +S31AFE00CC83B52C030000408200247C9EC02E386F45847E659B7860 +S31AFE00CC984BFFEE2D3B4000004800000C7C1EC02E901600003BE6 +S31AFE00CCAD7D00013A400001480000183C60FE01386345CC3B7D16 +S31AFE00CCC200014BFFEE013B4000007F7DDB787C1D80004180FE7D +S31AFE00CCD70C7F43D378800100547C0803A681C1000881E1000C71 +S31AFE00CCEC8201001082210014824100188261001C828100208266 +S31AFE00CD01A1002482C1002882E1002C830100308321003483410A +S31AFE00CD1600388361003C8381004083A1004483C1004883E10010 +S31AFE00CD2B4C382100504E8000208803000038E000012C0000201C +S31AFE00CD403900000A39800000408200108C0300012C00002041EF +S31AFE00CD5582FFF8880300002C0000004182012C2C0700004182AF +S31AFE00CD6A0038880300002C0000304082002C892300013809FFB6 +S31AFE00CD7FBF280000194181000C380900205409063E2C0900781E +S31AFE00CD944082000C39000010386300028943000038E0000039B5 +S31AFE00CDA92AFFD0380AFFBF21290009392000007D2949142000A9 +S31AFE00CDBE0005380000007C0001147D2B03793863000139200075 +S31AFE00CDD30040820010380AFF9F28000005418100083920000144 +S31AFE00CDE82C09000041820068392AFFD05520063E280000094175 +S31AFE00CDFD81000C7D2B4B7848000030380AFF9F280000054181DE +S31AFE00CE12000C396AFFA94800001C380AFFBF200000057C0001AA +S31AFE00CE27107C0003B8392AFFC97C0B48387C0B40004080001CD6 +S31AFE00CE3C880300007D2C41D62C0000007D895A144082FF1848D1 +S31AFE00CE5100003C2C0600004182002C88060000480000088C06FB +S31AFE00CE6600012C000000418200187C0A00004082FFF0880600E6 +S31AFE00CE7B002C0000004082000C386000004E8000202C050000ED +S31AFE00CE90918400004182000890650000386000014E80002088A5 +S31AFE00CEA50300002C000020408200108C0300012C0000204182B4 +S31AFE00CEBAFFF88863000068690074200900007D2049146860004D +S31AFE00CECF54214000007C0A01147D2B03794182001038000001CA +S31AFE00CEE4900400004800003068690046200900007D2049146887 +S31AFE00CEF9600066214000007C0A01147C0A4B794082000C3860AE +S31AFE00CF0E00004E80002091640000386000014E8000209421FFEC +S31AFE00CF23E07C0802A69361000C9381001093A1001493C1001811 +S31AFE00CF3893E1001C900100243D200001396998D0800BFFD47C59 +S31AFE00CF4D9C23782C0000007CDB33784182000C3800000A48000D +S31AFE00CF62012838000001B00998D088030000396B00022C0000D6 +S31AFE00CF77002F85000041820018980B00008C030001396B00013A +S31AFE00CF8C2C0000004082FFF038000000980B0000396B000140EF +S31AFE00CFA19E00103D20FE01386946004800001C2C05000141822D +S31AFE00CFB6000C3800000A480000CC3D20FE013869460C88030026 +S31AFE00CFCB002C00000041820018980B00008C030001396B00016E +S31AFE00CFE02C0000004082FFF03D2000013BA998B83800000098F9 +S31AFE00CFF50B00007FA3EB783880000038A0000C4BFFE3953D6098 +S31AFE00D00A0000812B37183BFDFFEC38000001B13F0018B01F00DF +S31AFE00D01F1AA01C0004392900012C0000003BC00000912B371889 +S31AFE00D03493DF00144082000C38000045B01C00047F85E37838AB +S31AFE00D0497D0018388002057FA6EB7848003CAD2C0300004180D1 +S31AFE00D05E002838000001901DFFEC3920FFFF93DF0004913F0023 +S31AFE00D0731093DF000C93DF00083860000048000010380000096B +S31AFE00D088901B00003860FFFF800100247C0803A68361000C8309 +S31AFE00D09D81001083A1001483C1001883E1001C382100204E808E +S31AFE00D0B200203D20000138000000900998A4386000004E800074 +S31AFE00D0C7209421FFC87C0802A692C1001092E1001493010018F2 +S31AFE00D0DC9321001C93410020936100249381002893A1002C9330 +S31AFE00D0F1C1003093E100349001003C7C9923783B6000007C1BDE +S31AFE00D106C8003D2000013BC998D07C7A1B787CBC2B7840800159 +S31AFE00D11B783BFEFFD43B0100083AE000043AC00009813F000C46 +S31AFE00D1302C0900004081005C7C1BC8507F890000809F02347F09 +S31AFE00D14543D3784FFEE3827FA0002657BD07FE7FBD00D07C00AB +S31AFE00D15AE8787D3DE8387FBD03787FA5EB784BFFE159801F021F +S31AFE00D16F34813F000C7C00EA147D3D4850901F0234913F000C1A +S31AFE00D1847F7BEA147F5AEA14480000FC801F0010280001FF4068 +S31AFE00D1998100F838000001900100083920000091380004387F55 +S31AFE00D1AE002C3880020538BF002038DF00147F07C37848003CF6 +S31AFE00D1C36D7C631B794080002C813F0004392900012C09000F1C +S31AFE00D1D8913F000441810010801F00082C000000408200443887 +S31AFE00D1ED0000084800008CA81E00002C00000340820064813F72 +S31AFE00D2020008A97E0002392900017C0B48004082001C3863FF38 +S31AFE00D217FC381E0004907F000C901F0234917F0008907F001071 +S31AFE00D22CA01F000AB2FE0000B01E0002387F002C3880000438C9 +S31AFE00D241BF002038DF001448003AB92C0300004080003892DCFA +S31AFE00D25600003860FFFF480000382C00000540820014A81E00DC +S31AFE00D26B023860FFFF901C0000480000203800000B901C00000F +S31AFE00D2803860FFFF480000107C1BC8004180FEA07F63DB788034 +S31AFE00D29501003C7C0803A682C1001082E100148301001883210C +S31AFE00D2AA001C83410020836100248381002883A1002C83C100A3 +S31AFE00D2BF3083E10034382100384E8000203803FFFF2800000BA3 +S31AFE00D2D43D20FE01386946144D8100203D60FE01396B473054F1 +S31AFE00D2E900103A7D4B002E3D20FE01392947307D4A4A147D49CC +S31AFE00D2FE03A64E8004203C60FE01386346244E8000203C60FE54 +S31AFE00D31301386346344E8000203C60FE01386346484E8000204B +S31AFE00D3283C60FE013863466C4E8000203C60FE01386346844EC8 +S31AFE00D33D8000203C60FE01386346984E8000203C60FE013863FF +S31AFE00D35246AC4E8000203C60FE01386346BC4E8000203C60FE22 +S31AFE00D36701386346D04E8000203C60FE01386346EC4E800020B7 +S31AFE00D37C3C60FE01386347004E8000203C60FE01386347144E4E +S31AFE00D3918000209421FFE87C0802A693A1000C93C1001093E103 +S31AFE00D3A600149001001C3D200000800937207C9F23782C00008E +S31AFE00D3BB004082007C48004C153D20000138699ADC8003000476 +S31AFE00D3D02C00000540820018A00300162C0000004082005048FA +S31AFE00D3E5004CE9480000482C00000040820014480008D9380007 +S31AFE00D3FA000A981F0000480000603FA00001389DA12038A00063 +S31AFE00D40F8048004D512C0300003BBDA1203D2000003D600000BC +S31AFE00D42493A93C28906B37204082000C38600000480000303DE2 +S31AFE00D439400000816A3C283D000000880B0000396B0001981F1F +S31AFE00D44E000081283720916A3C283929FFFF912837203860005E +S31AFE00D463018001001C7C0803A683A1000C83C1001083E10014E9 +S31AFE00D478382100184E8000209421FFE07C0802A693A1001493A1 +S31AFE00D48DC1001893E1001C900100243D2000003BA932007C7EFB +S31AFE00D4A21B783BE000644800002837FFFFFF40820010480000A1 +S31AFE00D4B7513BE0006448000014813D0048386000647D2803A6E0 +S31AFE00D4CC4E8000217FC3F378388100084BFFFEBD2C0300004175 +S31AFE00D4E182FFCC88610008800100247C0803A683A1001483C1A6 +S31AFE00D4F6001883E1001C382100204E8000209421FFE87C0802FC +S31AFE00D50BA693A1000C93C1001093E100149001001C3D2000012A +S31AFE00D5203BA9A1A04800003080BE37247FE3FB787FA4EB784819 +S31AFE00D535004D417C631B7940810014801E37247FBD1A147C0325 +S31AFE00D54A0050901E372448004A853FC00000801E37242C000034 +S31AFE00D55F00418200303D2000013BE99ADC801F00042C000005F4 +S31AFE00D5744082000C7FE3FB7848004B51801F00042C0000004008 +S31AFE00D58982FFA0480007413D2000003BC93200801E00443D2006 +S31AFE00D59E00012C0000003929A1A03D6000003D4000003BE0006F +S31AFE00D5B300912B3C2C93EA372441820010386000004BFFDC0DC5 +S31AFE00D5C893FE00448001001C7C0803A683A1000C83C1001083A4 +S31AFE00D5DDE10014382100184E8000209421FFF07C0802A693E19D +S31AFE00D5F2000C900100143D600000812B3C2C2C04002498890049 +S31AFE00D6070039290001912B3C2C40820010380000013D2000001B +S31AFE00D61C90093C103FE00000801F3C10688B0023212B00007D27 +S31AFE00D6316959143140FFFF7D2A01107D2058394182001C3D4059 +S31AFE00D6460000392000013D60000038000000912A3C14900B3CBA +S31AFE00D65B183D600000812B3724392900012C090100912B37244A +S31AFE00D6704182002C3D20000080093C142C000000418200283D28 +S31AFE00D685600000812B3C18392900012C090003912B3C184082BF +S31AFE00D69A00104BFFFE6938000000901F3C10800100147C080367 +S31AFE00D6AFA683E1000C382100104E8000209421FFE87C0802A62D +S31AFE00D6C493A1000C93C1001093E100149001001C4800055D7C4E +S31AFE00D6D97D1B783C60FE013C80FE0138A000EC38844828386347 +S31AFE00D6EE48204BFFE3D57FA3EB78480005A58001001C7C08031E +S31AFE00D703A683A1000C83C1001083E10014382100184E8000200C +S31AFE00D7189421FFE87C0802A693A1000C93C1001093E100149074 +S31AFE00D72D01001C480005017C7D1B783C60FE013C80FE0138A0BE +S31AFE00D74200FE38844838386348204BFFE3797FA3EB7848000519 +S31AFE00D757498001001C7C0803A683A1000C83C1001083E10014AA +S31AFE00D76C382100184E8000209421FFE87C0802A69381000893CE +S31AFE00D781A1000C93C1001093E100149001001C7C7D1B787C9EA3 +S31AFE00D79623784BFFFD6D3D2000008009371C3D6000001FE00056 +S31AFE00D7AB0A3B8B320048000014813C0048386000647D2803A6B8 +S31AFE00D7C04E8000217FA3EB787FC4F3784BFFFBC97C631B79406D +S31AFE00D7D58200102C1F00003BFFFFFF4082FFD48001001C7C0870 +S31AFE00D7EA03A68381000883A1000C83C1001083E100143821001C +S31AFE00D7FF184E8000209421FF787C0802A693C1008093E10084E7 +S31AFE00D8149001008C7C8023782C00000590A1001090C1001490E0 +S31AFE00D829E100189101001C91210020914100249081000C3BC05F +S31AFE00D83E00004182002C28000005418100102C000004418201EF +S31AFE00D85394480003482C000006418203082C0000074182030C90 +S31AFE00D868480003343FE00000801F37283D6000002C0000003909 +S31AFE00D87D200001912B372C40820014480011C1907F37282C03C5 +S31AFE00D892000041820308811F37283808FFFF280000394181024D +S31AFE00D8A7F83D60FE01396B48485400103A7D4B002E3D20FE01B0 +S31AFE00D8BC392948487D4A4A147D4903A64E8004203D20FF00611E +S31AFE00D8D1290014816900007C0006AC3948FFFF3C0080007C0032 +S31AFE00D8E654307D6B0378916900007C0006AC480002A83D20FFCC +S31AFE00D8FB0061290200A00900007C0006AC60000008B009000090 +S31AFE00D9107C0006AC480002883D20FF0061290200A00900007CF1 +S31AFE00D9250006AC60000004B00900007C0006AC480002683D20DD +S31AFE00D93AFF0061290240A00900007C0006AC60000004B0090015 +S31AFE00D94F007C0006AC480002483D20FF0061290220A00900004E +S31AFE00D9647C0006AC60000008B00900007C0006AC480002283D7E +S31AFE00D97920FF0061290220A00900007C0006AC60000004B009D6 +S31AFE00D98E00007C0006AC480002083D20FF006129094080090048 +S31AFE00D9A3007C0006AC60000080900900007C0006AC480001E865 +S31AFE00D9B83D20FF0061290948816900007C0006AC3948FFE53C66 +S31AFE00D9CD0080007C0054307D6B0378916900007C0006AC4800EE +S31AFE00D9E201BC3D60000083CB372C38000000900B372C3D20008E +S31AFE00D9F700814937282C0A00004182019C7D4853783808FFFF8A +S31AFE00DA0C280000394181018C3D60FE01396B49305400103A7D7D +S31AFE00DA214B002E3D20FE01392949307D4A4A147D4903A64E80DA +S31AFE00DA3604203D20FF0061290014816900007C0006AC3948FF21 +S31AFE00DA4BFF3C0080007C0054307D6B0078916900007C0006AC7F +S31AFE00DA604800013C3D20FF0061290200A00900007C0006AC70F9 +S31AFE00DA7500FFF75400043EB00900007C0006AC480001183D2067 +S31AFE00DA8AFF0061290200A00900007C0006AC7000FFFB5400045F +S31AFE00DA9F3EB00900007C0006AC480000F43D20FF0061290240E5 +S31AFE00DAB4A00900007C0006AC7000FFFB5400043EB00900007C4D +S31AFE00DAC90006AC480000D03D20FF0061290220A00900007C004D +S31AFE00DADE06AC7000FFF75400043EB00900007C0006AC48000052 +S31AFE00DAF3AC3D20FF0061290220A00900007C0006AC7000FFFB25 +S31AFE00DB085400043EB00900007C0006AC480000883D20FF0061FA +S31AFE00DB1D290940800900007C0006AC5400066E900900007C00E9 +S31AFE00DB3206AC480000683D20FF0061290948816900007C0006D5 +S31AFE00DB47AC3948FFE53C0080007C0054307D6B0078916900009E +S31AFE00DB5C7C0006AC4800003C3D20000083C93728480000303945 +S31AFE00DB7161000838010090392000039BC1007199210070900185 +S31AFE00DB860074916100783D200000800B000883C9371C90093749 +S31AFE00DB9B1C7FC3F3788001008C7C0803A683C1008083E10084C2 +S31AFE00DBB0382100884E8000209421FFE07C0802A693A1001493F2 +S31AFE00DBC5C1001893E1001C900100247C7D1B787C9F23787CA3C8 +S31AFE00DBDA2B784BFFCCE938000000901F00007FA3EB783881006B +S31AFE00DBEF084BFFF7A52C03000041820018880100082C00000365 +S31AFE00DC044082000C38000001901F000038600001800100247C97 +S31AFE00DC190803A683A1001483C1001883E1001C382100204E80E6 +S31AFE00DC2E00209421FFE87C0802A69381000893A1000C93C10045 +S31AFE00DC431093E100149001001C3FA000003BBD3200813D003488 +S31AFE00DC583860FFFF7D2803A64E800021801D00347C7C1B78384C +S31AFE00DC6D6000007C0803A64E8000217F83E3788001001C7C08A4 +S31AFE00DC8203A68381000883A1000C83C1001083E100143821007F +S31AFE00DC97184E8000209421FFF87C0802A69001000C3D2000009C +S31AFE00DCAC39293200800900347C0803A64E8000218001000C7CE9 +S31AFE00DCC10803A6382100084E8000209421FFE87C0802A693A14E +S31AFE00DCD6000C93C1001093E100149001001C3FA000003BBD3287 +S31AFE00DCEB00817D00343D20000080693C207D6803A63D20000061 +S31AFE00DD003800000090093B584E800021801D00303D200000800D +S31AFE00DD15693C247C0803A64E8000213D200000380000019009E1 +S31AFE00DD2A3B788001001C7C0803A683A1000C83C1001083E1007B +S31AFE00DD3F14382100184E8000209421FFE87C0802A693A1000C50 +S31AFE00DD5493C1001093E100149001001C3FA000003BBD32008193 +S31AFE00DD691D00343860FFFF7D0803A63D400000392000013D6018 +S31AFE00DD7E000038000000912A3B58900B3B784E8000213D20006C +S31AFE00DD930090693C20813D0034386000017D2803A64E8000215A +S31AFE00DDA8813D00303860FFFF7D2803A64E8000213D20000080C4 +S31AFE00DDBD1D003090693C24386000017C0803A64E800021800171 +S31AFE00DDD2001C7C0803A683A1000C83C1001083E100143821009A +S31AFE00DDE7184E8000209421FFE87C0802A69381000893A1000CF9 +S31AFE00DDFC93C1001093E100149001001C3FE00000801F37302C24 +S31AFE00DE11000000408200A03FA000003BBD3200813D0034386003 +S31AFE00DE26FFFF7D2803A64E800021813D00347C7C1B7838600093 +S31AFE00DE3B017D2803A64E800021815D00143D20FE013929D6BC4E +S31AFE00DE50912A00043D60FE01396BD7183D20FE01916A00083933 +S31AFE00DE6529D5E8912A000C3D60FE01396BD4803D20FE01916A0C +S31AFE00DE7A00103929D804912A00143D60FE01396BDBB83D20FE44 +S31AFE00DE8F01916A00183929D774912A001C801D00347F83E378B4 +S31AFE00DEA47C0803A64E80002138000001901F37303D2000003F5E +S31AFE00DEB9A00001A0893B6A387D9ADC480041353BBD9ADC801DED +S31AFE00DECE00043D20000090093C1C8001001C7C0803A68381001B +S31AFE00DEE30883A1000C83C1001083E10014382100184E800020C3 +S31AFE00DEF89421FFF07C0802A693E1000C90010014480040CD3D8A +S31AFE00DF0D2000013BE99ADC3D200000817F000480093C1C7C0082 +S31AFE00DF225800418200602C0B0004408200484BFFFE193C600029 +S31AFE00DF37013D2000013929A1A03C80000038C3A1203CA000007B +S31AFE00DF4C396000013940000D3D0000003CE0000038000000907B +S31AFE00DF61C43C28916537209943A12091283C2C90073724801FE3 +S31AFE00DF7600042C000000408200084BFFFE6D3D20000180099A62 +S31AFE00DF8BE03D600000900B3C1C800100147C0803A683E1000CDB +S31AFE00DFA0382100104E8000209421FFE87C0802A693A1000C9376 +S31AFE00DFB5C1001093E100149001001C3D20000080E93B6C2C07AD +S31AFE00DFCA0000408200283D000000392000013D6000003D4000A3 +S31AFE00DFDF003800232891283B6490EB3C50900A3B684800007C46 +S31AFE00DFF43C60FE013C8000003863479C38843C5038A000014BD3 +S31AFE00E009FF4E213C60FE013C8000003863477438843B6838A0AC +S31AFE00E01E00024BFF4E093C60FE013C800000386347CC38843B4A +S31AFE00E0336438A000014BFF4DF13C60FE013C800000386347E8EE +S31AFE00E0483884395838A000054BFF4DD93C60FE013C8000013895 +S31AFE00E05D6348103884211C38A000054BFF4DC13D20000038002C +S31AFE00E072000090093B844800034D480031813D6000003D2000B1 +S31AFE00E0870039293B483BEB3B387C1F48004182003C7D3D4B78A3 +S31AFE00E09C3BC00001813F00047FE3FB787D2803A64E8000217C1D +S31AFE00E0B1631B794182000C93DF000C48000008907F000C3BFF6D +S31AFE00E0C600107C1FE8004082FFD43D20000080093C542C000077 +S31AFE00E0DB00408200143C60FE0138634A184BFFD9DD48000090E6 +S31AFE00E0F03D20000080093B642C000000418200283C60000138A6 +S31AFE00E105632108480027912C030000418200143C60FE01386339 +S31AFE00E11A4A384BFFD9A9480000103D2000003800000190093BDC +S31AFE00E12F843D20000080093B842C000000418200403C600000E3 +S31AFE00E14438633958480001B97C641B783C60FE0138634A644BF2 +S31AFE00E159FFD96D3C6000013863211C4800019D7C641B783C60FE +S31AFE00E16EFE0138634A6C4BFFD9514BFFFC758001001C7C0803F5 +S31AFE00E183A683A1000C83C1001083E10014382100184E80002082 +S31AFE00E1989421FFF093E1000C380000047C0903A67C9F237838F2 +S31AFE00E1AD800000398000188963000038E000012C0B000038A0F4 +S31AFE00E1C2000038C0000A38630001418201106960003021200098 +S31AFE00E1D7007C0901147CE9003941820030892300003809FFBF59 +S31AFE00E1EC280000194181000C380900205409063E2C090078401C +S31AFE00E2018200108D63000138C0001038630001392BFFD0380B67 +S31AFE00E216FFBF7D2A4B787C0803785529063E5400063E21290024 +S31AFE00E22B09392000007D29491420000005380000007C00011487 +S31AFE00E2407D27037938E000003920000040820010380BFF9F2859 +S31AFE00E25500000541810008392000012C09000041820068554092 +S31AFE00E26A063E280000094181000C7D49537848000030380BFF0D +S31AFE00E27F9F280000054181000C392BFFA94800001C5500063EE3 +S31AFE00E294200000057C0001107C0003B8392BFFC97C0948387CDB +S31AFE00E2A909300040800020896300007C0531D62C0B00007CA07C +S31AFE00E2BE4A14386300014082FF0C480000142C0B002E418200FC +S31AFE00E2D30C386000004800001C7CA060307C840378398CFFF847 +S31AFE00E2E84200FECC909F00003860000183E1000C382100104E22 +S31AFE00E2FD8000209421FFE87C0802A693A1000C93C1001093E188 +S31AFE00E31200149001001C890300033FA0000188A3000088C3004C +S31AFE00E3270188E300023C80FE0138844A88387DA2A04BFFD70509 +S31AFE00E33C387DA2A08001001C7C0803A683A1000C83C100108300 +S31AFE00E351E10014382100184E800020812300007C09180041825B +S31AFE00E366002081230004908900008003000490640000900400AE +S31AFE00E37B04908300044E80002090890004908900009124000095 +S31AFE00E390912400044E8000207C6B1B78806B00007C0358004150 +S31AFE00E3A582001880030000900B000081230000916900044E8037 +S31AFE00E3BA0020386000004E8000209421FFE87C0802A693A100A8 +S31AFE00E3CF0C93C1001093E100149001001C3D0000003CE0000037 +S31AFE00E3E439283C3839673C3091283C3891673C303D400001919F +S31AFE00E3F92900043BCAA2C0916B00043FA000003BE000107FC42A +S31AFE00E40EF378387D3C304BFFFF4937FFFFFF3BDE06104082FFB3 +S31AFE00E423EC8001001C7C0803A683A1000C83C1001083E100142E +S31AFE00E438382100184E8000209421FFF87C0802A69001000C8077 +S31AFE00E44D040000A124000490030010B123001480040000A10435 +S31AFE00E46200043D20000039693C4890093C483D400000B10B00C4 +S31AFE00E47704906A3C54480000158001000C7C0803A63821000886 +S31AFE00E48C4E8000209421FFF87C0802A69001000C812300003838 +S31AFE00E4A18300108009000038A000007C0803A64E8000218001D1 +S31AFE00E4B6000C7C0803A6382100084E8000209421FF587C080233 +S31AFE00E4CBA67D80002693410090936100949381009893A1009C07 +S31AFE00E4E093C100A093E100A4900100AC9181008C3D20000039A6 +S31AFE00E4F529320083A9004C3D6000002C1D00007C7B1B787C9AB5 +S31AFE00E50A23787CBC2B7883EB3C543BC00005418200547FBFEB44 +S31AFE00E51F78815F0000801F000C816A00243D2000002C00000048 +S31AFE00E53439293734916A0028912A00244082002C800A00003C4B +S31AFE00E54980000038843C487FE3FB7838A000007C0803A64E8051 +S31AFE00E55E0021801F000C60000001901F000C2E1D000048000029 +S31AFE00E5733C813F00007FE3FB788009001C7C0803A64E800021FD +S31AFE00E5883D20000039293200800900483C60000360630D407C8D +S31AFE00E59D0803A64E80002137DEFFFF408100E4813F00007FE3EB +S31AFE00E5B2FB788009000C7C0803A64E8000212C0300004182FF3B +S31AFE00E5C7B0813F00003D6000008149001038A0000238EB3C40DB +S31AFE00E5DC9361000893410010938100147FE3FB78388100083850 +S31AFE00E5F1DC000E7D4803A63800000E392000009001000C912BC1 +S31AFE00E6063C404E8000213D20000080093C503FC000002C0000F3 +S31AFE00E61B00418200384BFFF6117C7D1B783C60FE0138634A94FA +S31AFE00E6304BFFD4957F63DB783880000E4BFFDF617F43D3787F0D +S31AFE00E64584E3784BFFDF557FA3EB784BFFF64D801E3C402C0007 +S31AFE00E65A0000408200307FFDFB787FDFF378813D00007FA3EB32 +S31AFE00E66F788009001C7C0803A64E800021801F3C402C00000012 +S31AFE00E6844182FFE47FBFEB7841920018813F00003800000081D2 +S31AFE00E6996900289009002891690024800100AC8181008C7C08B9 +S31AFE00E6AE03A683410090836100948381009883A1009C83C1003E +S31AFE00E6C3A083E100A47D808120382100A84E8000209421FFF85D +S31AFE00E6D87C0802A69001000C3D20000038093C407C0400004086 +S31AFE00E6ED8200103800000190093C404800001881230000816946 +S31AFE00E7020028800B00087C0803A64E8000218001000C7C080313 +S31AFE00E717A6382100084E8000209421FFE07C0802A69361000C34 +S31AFE00E72C9381001093A1001493C1001893E1001C900100243D7A +S31AFE00E741200000392932008389004C3D6000002C1C00007C7DD5 +S31AFE00E7561B787C9B237883CB3C54418200547F9EE378815E0019 +S31AFE00E76B00801E000C816A00243D2000002C0000003929373486 +S31AFE00E780916A0028912A00244082002C800A00003C8000003812 +S31AFE00E795843C487FC3F37838A000007C0803A64E800021801E24 +S31AFE00E7AA000C60000001901E000C813E00007FC3F3788009003A +S31AFE00E7BF1C7C0803A64E8000213C60000038633C384BFFFBC950 +S31AFE00E7D47C7F1B7941820054393F000CA009000C817F000C81C0 +S31AFE00E7E949000481090008B01D000C917D0000915D0004911DB1 +S31AFE00E7FE000880BF00087F63DB7838A5FFF2389F001A4BFFCAAB +S31AFE00E813B13C60000038633C307FE4FB784BFFFB3D807F000839 +S31AFE00E82848000008386000002C1C000041820018813E000038D5 +S31AFE00E83D000000816900289009002891690024800100247C08A8 +S31AFE00E85203A68361000C8381001083A1001483C1001883E10008 +S31AFE00E8671C382100204E8000209421FFE87C0802A693A1000C0D +S31AFE00E87C93C1001093E100149001001C7CA02B797C0903A640BC +S31AFE00E89181003C7C9F23787FC902A63FA00000807F000080BFEE +S31AFE00E8A60004809D3C444BFFCA15801D3C44813F000437DEFF9A +S31AFE00E8BBFF7C004A143BFF0008901D3C444082FFD88001001CC6 +S31AFE00E8D07C0803A683A1000C83C1001083E10014382100184E47 +S31AFE00E8E58000209421FF607C0802A69361008C9381009093A1E2 +S31AFE00E8FA009493C1009893E1009C900100A47C7E1B783C600017 +S31AFE00E90F007C9B237838633C304BFFFA817C7C1B787F89FE7070 +S31AFE00E9247D20E2787C004850817E00007C00FE70393C000C7DE8 +S31AFE00E9393F0038800B001493E100089361000C7FC3F3783881CD +S31AFE00E94E000838A000017C0803A64E8000213D20000080093C91 +S31AFE00E963502C000000418200384BFFF2C57C7D1B783C60FE01FC +S31AFE00E97838634AA44BFFD1497FE3FB783880000E4BFFDC15388B +S31AFE00E98D7F000E389BFFF24BFFDC097FA3EB784BFFF301813E6F +S31AFE00E9A20000800900282C0000004182005C3C600000386339F0 +S31AFE00E9B758389F001E38A000044BFFD3752C030000418200405A +S31AFE00E9CC815E00007FC3F378812A00287F64DB78800900043DD3 +S31AFE00E9E160FE017C0803A683AA0014396BE8703D20000093E97B +S31AFE00E9F63C44916A00144E800021813E000093A900142C1C0033 +S31AFE00EA0B00418200183C600000937C000838633C387F84E378F7 +S31AFE00EA204BFFF93D800100A47C0803A68361008C838100908384 +S31AFE00EA35A1009483C1009883E1009C382100A04E80002094211B +S31AFE00EA4AFFF87C0802A69001000C3D20000080693C5481630039 +S31AFE00EA5F00800B00207C0803A64E8000218001000C7C0803A61D +S31AFE00EA74382100084E8000209421FFF87C0802A69001000C7C49 +S31AFE00EA89641B783C60FE0138634AB44BFFD0318001000C7C08ED +S31AFE00EA9E03A6382100084E8000209421FFF07C0802A693E10023 +S31AFE00EAB30C900100143D2000013BE92588801F001C2C00000083 +S31AFE00EAC84082002C90692588909F00044800049D7C631B7940D2 +S31AFE00EADD82001C801F0008392000017C0000D0913F001C901F9A +S31AFE00EAF2001038600000800100147C0803A683E1000C382100D8 +S31AFE00EB07104E8000203D200001392925888009001C7C6B1B786B +S31AFE00EB1C2C0000004082000C386000074E800020800900147C40 +S31AFE00EB310B00404180001480090018386000007C0B00404D80DE +S31AFE00EB460020386000014E8000203D20000139692588800B00D7 +S31AFE00EB5B1C2C0000004182001C812B001438600000912400006D +S31AFE00EB70800B0018900500004E800020386000074E8000203D9C +S31AFE00EB8520000139692588800B001C7C6A1B782C0000004182F8 +S31AFE00EB9A001C812B000838600000912A0000800B000C90040014 +S31AFE00EBAF004E800020386000074E8000209421FFD87C0802A61A +S31AFE00EBC49321000C93410010936100149381001893A1001C937D +S31AFE00EBD9C1002093E100249001002C3D200001800925A47C7F42 +S31AFE00EBEE1B782C0000007C9E23787CBA2B783B80000040820044 +S31AFE00EC030C38600007480000F83D20000183A925883C80FE011B +S31AFE00EC183CA0FE013884FAA038A5FBC87CA428507FA3EB784BAA +S31AFE00EC2DFFC6957CBFF214380000807C0903A639200000612073 +S31AFE00EC4210003D600E007C0004AC7D398BA67D788BA67C198BA5 +S31AFE00EC57A67D788BA6392900104200FFE03C0004004C00012C8C +S31AFE00EC6C7C108BA64C00012C3D20000139292588800900107CD7 +S31AFE00EC81BE2B783C60FE017FFF00383F20FE017D3B4B78386354 +S31AFE00EC964AF07FE4FB784BFFCE294800001C801B000838794B11 +S31AFE00ECAB085400F87E7C0002147FFF02144BFFCE0D7C1FF04068 +S31AFE00ECC0408000207FE3FB787FA803A64E800021480003657C9B +S31AFE00ECD57C1B794182FFCC93FA00003C0002004C00012C7C10B8 +S31AFE00ECEA8BA64C00012C3C60FE0138634B0C4BFFCDCD7F83E311 +S31AFE00ECFF788001002C7C0803A68321000C83410010836100142E +S31AFE00ED148381001883A1001C83C1002083E10024382100284ECF +S31AFE00ED298000209421FFD07C0802A692E1000C930100109321AA +S31AFE00ED3E0014934100189361001C9381002093A1002493C100CC +S31AFE00ED532893E1002C900100343D600001392B25888009001CC6 +S31AFE00ED687CBE2B782C0000007CD833787C7C1B787C9D23783B10 +S31AFE00ED7D4000004082000C386000074800011C836B25883C8014 +S31AFE00ED92FE013CA0FE013884FBC838A5FD0C7CA428507F63DBD4 +S31AFE00EDA7784BFFC5197CBDF214380000807C0903A63920000035 +S31AFE00EDBC612010003D600E007C0004AC7D398BA67D788BA67C4D +S31AFE00EDD1198BA67D788BA6392900104200FFE03C0004004C009A +S31AFE00EDE6012C7C108BA64C00012C3C60FE0138634B107FA4EB12 +S31AFE00EDFB787F86E3784BFFCCC53D2000013EE0FE013B292588C0 +S31AFE00EE104800002038774B084BFFCCAD57E0F87E7C0002147FFE +S31AFE00EE25BD02147FDFF0507F9C02142C1E00004081005080193E +S31AFE00EE3A00087FC5F3787F8500007F83E3787FA4EB784FFEE3F1 +S31AFE00EE4F827D200026552907FE7D2900D07C0048787CA948388B +S31AFE00EE647D2503787F6803A67CBF2B784E800021480001C17C95 +S31AFE00EE797A1B794182FF98939800003C0002004C00012C7C10AA +S31AFE00EE8E8BA64C00012C3C60FE0138634B0C4BFFCC297F43D360 +S31AFE00EEA378800100347C0803A682E1000C830100108321001441 +S31AFE00EEB8834100188361001C8381002083A1002483C10028830A +S31AFE00EECDE1002C382100304E80002028030007418100883D608F +S31AFE00EEE2FE01396B4C205460103A7D4B002E3D20FE0139294C0A +S31AFE00EEF7207D4A4A147D4903A64E8004203C60FE0138634B30AB +S31AFE00EF0C4E8000203C60FE0138634B504E8000203C60FE01386C +S31AFE00EF21634B684E8000203C60FE0138634B804E8000203C6048 +S31AFE00EF36FE0138634B9C4E8000203C60FE0138634BB44E800050 +S31AFE00EF4B203C60FE0138634BC44E8000203C60FE0138634BE8F1 +S31AFE00EF604E8000203C60FE0138634C0C4E8000209421FFE07C1E +S31AFE00EF750802A693A1001493C1001893E1001C900100243D207D +S31AFE00EF8A000183E925883C80FE013CA0FE013884FA0438A5FA2D +S31AFE00EF9FA07CA428507FE3FB784BFFC3193FC000013BA0000843 +S31AFE00EFB438610008380000807C0903A639200000612010003D96 +S31AFE00EFC9600E007C0004AC7D398BA67D788BA67C198BA67D78CD +S31AFE00EFDE8BA6392900104200FFE07FE803A64E8000217D3DF1AC +S31AFE00EFF3D63D600001396B25883D29FE003C00FE00912B0018CE +S31AFE00F008900B001493CB000893AB000C38600000800100247CD7 +S31AFE00F01D0803A683A1001483C1001883E1001C382100204E80CE +S31AFE00F03200209421FFF07C0802A693E1000C900100143C000074 +S31AFE00F0477E7C7F1B786000007E7FE90039418200503C60FE0177 +S31AFE00F05C38634C407FE4FB784BFFCA613C000010600000107FEE +S31AFE00F071E9003938600004408200303C600020606300207FE3D5 +S31AFE00F08618387C6300D07C63FE707C6018F8546307BC54000764 +S31AFE00F09B387C6303784800000838600000800100147C0803A620 +S31AFE00F0B083E1000C382100104E8000203D20FE00392920007C27 +S31AFE00F0C50348407C802378396000004181000C7C0048404181E3 +S31AFE00F0DA001C3D20FE01388928D07C032040418100107C00209F +S31AFE00F0EF4040810008396000017D635B784E8000209421FF68A8 +S31AFE00F1047C0802A693410080936100849381008893A1008C930B +S31AFE00F119C1009093E100949001009C3FA000003BBD320090615D +S31AFE00F12E0008819D00347C7A1B783860FFFF7D8803A63B8100E5 +S31AFE00F143083B6100A03800000139600000938100789081000CF4 +S31AFE00F15890A1001090C1001490E100189101001C91210020915E +S31AFE00F16D4100249801007099610071936100744E800021813D9B +S31AFE00F18200347C7C1B78386000017D2803A64E80002138810026 +S31AFE00F197707F43D3784BFFC9B1801D00347F83E3787C0803A6C3 +S31AFE00F1AC4E8000218001009C7C0803A6834100808361008483E2 +S31AFE00F1C181008883A1008C83C1009083E10094382100984E80F1 +S31AFE00F1D600209421FFE07C0802A6934100089361000C93810050 +S31AFE00F1EB1093A1001493C1001893E1001C900100243FA0000023 +S31AFE00F2003BBD3200813D00347C7A1B783860FFFF7D2803A67CF0 +S31AFE00F2159C23784E800021813D00347C7B1B78386000017D2800 +S31AFE00F22A03A64E8000217F84E3787F43D3784BFFD365801D00A9 +S31AFE00F23F347F63DB787C0803A64E800021800100247C0803A65F +S31AFE00F254834100088361000C8381001083A1001483C1001883BA +S31AFE00F269E1001C382100204E8000209421FFE87C0802A693E1EC +S31AFE00F27E00149001001C3FE00001813F03C03881000880690069 +S31AFE00F293008009001C7C0803A64E8000212C0300004082FFE4CD +S31AFE00F2A88001001C7C0803A683E10014382100184E8000209418 +S31AFE00F2BD21FFE07C0802A69381001093A1001493C1001893E1C0 +S31AFE00F2D2001C900100243BE000003FA00001813D03C03881001D +S31AFE00F2E708806900008009001C7C0803A64E8000212C0300002D +S31AFE00F2FC418202A4896100082C0B000441820040408100102C63 +S31AFE00F3110B00184182002C480000382C0B000241810030392BC2 +S31AFE00F326FFFF7D694B787D29FE70380900017FE948387D3F032A +S31AFE00F33B78480000143860FFFB480002683860FFFC4800026064 +S31AFE00F3502C1F00004182FF8C3D200001816903C03BC903C080B9 +S31AFE00F3656B0000800B001C389E04087C0803A64E8000212C0350 +S31AFE00F37A000041820224813D03C0389E040980690000800900BB +S31AFE00F38F1C7C0803A64E8000212C0300004182020488010008A4 +S31AFE00F3A43BE00000680000017C0000D07C00FE707C0900F855C4 +S31AFE00F3B92906305400056A7C004B787C1F0000393E0004901E16 +S31AFE00F3CE0410913E0404408000487FDCF3787D3D4B783FC000F1 +S31AFE00F3E301813E03C038810008806900008009001C7C0803A612 +S31AFE00F3F84E8000212C030000418201A0880100087C1DF9AE8128 +S31AFE00F40D3C04103BFF00017C1F48004180FFCC3FC00001813E2D +S31AFE00F42203C03BFE03C0806900008009001C389F040A7C080318 +S31AFE00F437A64E8000212C03000041820160801F04142C000000F1 +S31AFE00F44C41820024813E03C0389F040B806900008009001C7C4E +S31AFE00F4610803A64E8000212C030000418201343D2000013BC969 +S31AFE00F47603C0889E040888BE04097C862A782C0600FF4182009D +S31AFE00F48B283C60FE0138634C504BFFFC6D809E0410387E0004CF +S31AFE00F4A04BFFFD394BFFFDD13860FFFA48000100801E04142CFF +S31AFE00F4B500000041820088801E041038C000007C0600003BE0AC +S31AFE00F4CA0000408000403D2000007FEBFB7839093740387E0080 +S31AFE00F4DF047C0A03787D2358AE54C0C23E7C004A787C00021485 +S31AFE00F4F4396B00017D28022E7C0B500054C0442E7C064A7841A3 +S31AFE00F50980FFDC3D200001392903C08889040A88A9040B5480D8 +S31AFE00F51E402E7C002B787C060000418200803C60FE0138634C00 +S31AFE00F533704BFFFBCD3860FFF948000070801E041038C000004B +S31AFE00F5487C0600003BE00000408000287FEBFB78387E00047C12 +S31AFE00F55D0A03787C0358AE396B00017C0B50007C06021454061D +S31AFE00F572043E4180FFEC3D200001888907CA54C5063E7C04284D +S31AFE00F58700418200203C60FE0138634C9C4BFFFB6D3860FFF928 +S31AFE00F59C480000103860FFFD4800000838600000800100247C61 +S31AFE00F5B10803A68381001083A1001483C1001883E1001C38210F +S31AFE00F5C600204E8000209421FFD87C0802A69301000893210016 +S31AFE00F5DB0C93410010936100149381001893A1001C93C100202F +S31AFE00F5F093E100249001002C2C0400037CBE2B7840820044385F +S31AFE00F60500FFFE901E0000480001103FA00001813D03C03880CF +S31AFE00F61A0006806900008009000C3BBD03C07C0803A64E80009D +S31AFE00F62F2138000001939D0410981D040C38600000480000E09F +S31AFE00F6443FA000003BBD3200813D00343860FFFF7D2803A63F8F +S31AFE00F6598000013B5C03C07FB8EB784E800021813D00347C7B4B +S31AFE00F66E1B787D2803A63BE000133F2000014E800021801D0088 +S31AFE00F68314813D00347F63DB787D2803A6901C03C04E80002187 +S31AFE00F698813C03C038800007806900008009001438A003E87C55 +S31AFE00F6AD0803A64E8000213920000038000001913A0418901A81 +S31AFE00F6C20414913A04104BFFFBF57C7C1B794182FF402C1CFF29 +S31AFE00F6D7FD40820030813800483C6000076063A1207D2803A6B5 +S31AFE00F6EC4E800021813903C038800043806900008009000C7CA4 +S31AFE00F7010803A64E8000217FE0FB782C0000003BFFFFFF418157 +S31AFE00F716FFB4939E00003860FFFF8001002C7C0803A683010002 +S31AFE00F72B088321000C83410010836100148381001883A1001CE5 +S31AFE00F74083C1002083E10024382100284E8000209421FFD07C55 +S31AFE00F7550802A692E1000C930100109321001493410018936120 +S31AFE00F76A001C9381002093A1002493C1002893E1002C90010031 +S31AFE00F77F343D2000017C9B2378396903C0812B04187F60FE70B3 +S31AFE00F7947C1B005054000FFE210900007D2849147D2A00397C8C +S31AFE00F7A97A1B787CB72B783B0000003F200001418201787D7C94 +S31AFE00F7BE5B78801C04102C000000408200F03BC000134BFFFA7F +S31AFE00F7D3ED7C7F1B794082004C3D4000013BAA03C0897D04085B +S31AFE00F7E8893D040C7C0B4800418200A03809FFFF5400063E7CAD +S31AFE00F7FD0B000040820020812A03C03880000680690000800968 +S31AFE00F812000C7C0803A64E800021480000283BE0FFF82C1FFFE9 +S31AFE00F827FC41820044813903C038800043806900008009000CCF +S31AFE00F83C7C0803A64E8000217FC0F3782C0000003BDEFFFF4169 +S31AFE00F85181FF802C1F00004080006093F700003800FFFF901CC7 +S31AFE00F8660410480000C8813903C03880000680690000800900B8 +S31AFE00F87B0C7C0803A64E80002138000001901C04184BFFFFC83A +S31AFE00F890813903C038800006806900008009000C7C0803A64E2B +S31AFE00F8A5800021893D040C39290001993D040C4BFFFFA083BC62 +S31AFE00F8BA0410809C04047F9BE8007F43D3784FFEEB827C0000B8 +S31AFE00F8CF26540007FE7C0000D07F6900787FBD00387FBD4B7882 +S31AFE00F8E47FA5EB784BFFB9D97F7DD850815C04187F60FE707CC2 +S31AFE00F8F91B0050813C0410817C040454000FFE210A00007D4864 +S31AFE00F90E51147D4800397D6BEA147D3D4850913C0410917C0453 +S31AFE00F923047F5AEA147F18EA144082FE947F03C3788001003495 +S31AFE00F9387C0803A682E1000C830100108321001483410018836F +S31AFE00F94D61001C8381002083A1002483C1002883E1002C382163 +S31AFE00F96200304E8000203803000828000007418100883D60FE17 +S31AFE00F97701396B4D705400103A7D4B002E3D20FE0139294D7006 +S31AFE00F98C7D4A4A147D4903A64E8004203C60FE0138634CC84E44 +S31AFE00F9A18000203C60FE0138634CDC4E8000203C60FE0138632B +S31AFE00F9B64CFC4E8000203C60FE0138634D084E8000203C60FEEF +S31AFE00F9CB0138634D144E8000203C60FE0138634D204E800020A7 +S31AFE00F9E03C60FE0138634D304E8000203C60FE0138634D444E58 +S31AFE00F9F58000203C60FE0138634D5C4E8000207D588AA6554AE8 +S31AFE00FA0A0FFE2C0A000041820040380000807C0903A63920005E +S31AFE00FA1F00612010003D600E007C0004AC7D398BA67D788BA659 +S31AFE00FA347C198BA67D788BA6392900104200FFE03C0004007C7E +S31AFE00FA490004AC7C188BA63D60FE00380000AA980B055539205C +S31AFE00FA5E0055992B02AA38000090980B0555892B00002C0A001B +S31AFE00FA730099230000880B0001392000FF98030001992B000072 +S31AFE00FA88418200103D6002007C0004AC7D788BA6386000004EBB +S31AFE00FA9D8000207C6A1B787CF88AA654E70FFE2C070000418255 +S31AFE00FAB20040380000807C0903A639200000612010003D600E80 +S31AFE00FAC7007C0004AC7D398BA67D788BA67C198BA67D788BA601 +S31AFE00FADC392900104200FFE03C0004007C0004AC7C188BA655F8 +S31AFE00FAF1480010396000AA9968055539200055992802AA3800B3 +S31AFE00FB0600809808055599680555992802AA392000327D290370 +S31AFE00FB1BA62F87000038000030980A0000396A00014200000085 +S31AFE00FB303D20004C7D2903A6880A00005400067261294B407DD4 +S31AFE00FB452903A65400063E886A0000546906727C0900004182CE +S31AFE00FB5A0014706000207D204B78408200084200FFE438000007 +S31AFE00FB6FFF98080000892A00007D6A5B782C0900FF3D200001DF +S31AFE00FB844082001C3529FFFF40810014880A0000394A00012C17 +S31AFE00FB990000FF4182FFEC7D2BFE707D604A787C0058507C0051 +S31AFE00FBAEFE707C6300384D9E00203C0002007C0004AC7C188B25 +S31AFE00FBC3A64E8000209421FFF093C1000893E1000C7D588AA610 +S31AFE00FBD8554A0FFE2C0A000041820040380000807C0903A63910 +S31AFE00FBED200000612010003D000E007C0004AC7D398BA67D185B +S31AFE00FC028BA67C198BA67D188BA6392900104200FFE03D200438 +S31AFE00FC17007C0004AC7D388BA62C0500002F8A0000546A00100A +S31AFE00FC2C408100A03BC000AA3BE00055398000A038C000FF9B5E +S31AFE00FC41CA05559BEA02AA998A05558804000039200031980327 +S31AFE00FC560000380000327C0903A63904000138E300013929FF42 +S31AFE00FC6BFF4200FFFC880300007D2903A6540006725400063E06 +S31AFE00FC8089630000556906727C09000041820014716000207D7F +S31AFE00FC95204B78408200084200FFE498CA0000892300008804EA +S31AFE00FCAA00007D0443787C0900007CE33B784182000C39600006 +S31AFE00FCBFFF4800000C34A5FFFF4181FF787CA8FE707D002A7818 +S31AFE00FCD47C0040507C00FE70392000FF992A00007D6B003841A5 +S31AFE00FCE99E00103D2002007C0004AC7D388BA67D635B7883C1EC +S31AFE00FCFE000883E1000C382100104E8000209421FFF87C0802EC +S31AFE00FD13A69001000C3803FFFE2800001D418100A03D60FE0119 +S31AFE00FD28396B4D905400103A7D4B002E3D20FE0139294D907D95 +S31AFE00FD3D4A4A147D4903A64E80042038600002480000783860B2 +S31AFE00FD5200414BFF999954637F3E2C0300024182004028030008 +S31AFE00FD6702418100102C030001418200384800004C2C030004BD +S31AFE00FD7C418200242C0300084082003C386000084800003838FA +S31AFE00FD9160000E480000303860000C480000283860000448007B +S31AFE00FDA6002038600005480000183860000A4800001038600095 +S31AFE00FDBB0B480000083860000F8001000C7C0803A63821000812 +S31AFE00FDD04E8000203D20000081693BF0806B00985463C23E4E32 +S31AFE00FDE58000209421FFF87C0802A69001000C7C641B783860E5 +S31AFE00FDFA00404BFF99058001000C7C0803A6382100084E8000DF +S31AFE00FE0F209421FFF87C0802A69001000C386000414BFF98CDBD +S31AFE00FE2460640600548004203D2000005484045E900939403822 +S31AFE00FE396000414BFF98C58001000C7C0803A6382100084E807F +S31AFE00FE4E00209421FFF87C0802A69001000C386000414BFF984B +S31AFE00FE638D3D20000080893940546305E8380000007C642378C3 +S31AFE00FE7890093940386000414BFF98818001000C7C0803A63831 +S31AFE00FE8D2100084E8000204E8000204E8000209421FFF87C0839 +S31AFE00FEA202A69001000C386000404BFF98413D20FE0139299FAA +S31AFE00FEB7C47C634A78200300007C6019148001000C7C0803A6E7 +S31AFE00FECC382100084E8000209421FFF87C0802A69001000C3821 +S31AFE00FEE16000404BFF980938830004386000404BFF9811800172 +S31AFE00FEF6000C7C0803A6382100084E8000209421FFF87C080239 +S31AFE00FF0BA69001000C3D200000800939442C0000004082001039 +S31AFE00FF203800000190093944480008118001000C7C0803A63826 +S31AFE00FF352100084E8000203D200000800939482C0000004C823B +S31AFE00FF4A002038000001900939487D1E9AA67508FFFF3D200078 +S31AFE00FF5F017D2903A638008001B00809C07C0902A6600086A04C +S31AFE00FF747C0903A64200000080080ABC3D600001600000C09068 +S31AFE00FF89080ABC81280AB8616B00A2552906AE91280AB8916812 +S31AFE00FF9E09F07CE902A690E80AE038002800B0083E8039683E2D +S31AFE00FFB38038002808B00B000239200091B12809C0394000018A +S31AFE00FFC89148003038000018980B0004980B0005B14B0006B0C6 +S31AFE00FFDDEB0028B0EB002CB0EB002EB14B003039282800B0E91A +S31AFE00FFF200023800B000B008280038082810900900043968284E +S31AFE0100070838082820B14B0002900B000439202000B128280830 +S31AFE01001C380000FF98080A863920000599280A8A38004820B060 +S31AFE010031080A8239204823B1280A824E80002039233E80A00947 +S31AFE01004600207D4302147D4B5378A00A000070088000418200B2 +S31AFE01005B28A00A00007008200041820010A00900027D430214CD +S31AFE01007048000008394A00087C0A58004082FFD47D495378A0F7 +S31AFE010085090000700080004082FFF87D2A4B787C090378A00A9B +S31AFE01009A0000700B100041820014A00A00007000EFFFB00A0028 +S31AFE0100AF00B12A0002A12A00023900000038090001B00A000256 +S31AFE0100C4816A00045529043E7C8B49AEA00A000060008000B03B +S31AFE0100D90A0000A12A000071208000418200647D4B53787D0AE6 +S31AFE0100EE43783D0000076108FFFF394A00017C0A400040820086 +S31AFE01010338A1230A82394000007129FFFDB1230A82A00B000040 +S31AFE0101185400047EB00B0000A1230A8261290002B1230A82A060 +S31AFE01012D0B000060008000B00B0000A00B0000700980004082AC +S31AFE010142FFB87D6A5B787D495378A0090000700080004082FF47 +S31AFE010157F87D2A4B78B00A00024E80002038E33E80A1070010F1 +S31AFE01016C7C03422E7D434214700680004182000C386000004EC9 +S31AFE010181800020812A0004396000008809000098040000B0CAD5 +S31AFE0101960002812A0004996900007C03422E600080007C03430B +S31AFE0101AB2E7D388AA655290FFE2C09000041820028812A0004CD +S31AFE0101C0A00700062C000000408100187C004BAC7C0004AC34A0 +S31AFE0101D500FFF0392900104181FFF0386000014E8000209421C2 +S31AFE0101EAFFE87C0802A693E100149001001C7C7F1B787FE3FBC8 +S31AFE0101FF78388100084BFFFF612C0300004182FFF08861000831 +S31AFE0102148001001C7C0803A683E10014382100184E800020949B +S31AFE01022921FFE87C0802A693A1000C93C1001093E100149001CA +S31AFE01023E001C7CBF2B787FE0FB782C0000007C7D1B787C9E23E5 +S31AFE010253783BFFFFFF41820024889E00007FA3EB784BFFFDDD2B +S31AFE0102687FE0FB782C0000003BDE00013BFFFFFF4082FFE48007 +S31AFE01027D01001C7C0803A683A1000C83C1001083E100143821C8 +S31AFE01029200184E8000209421FFE87C0802A693A1000C93C100F0 +S31AFE0102A71093E100149001001C7CBF2B787FE0FB782C0000001C +S31AFE0102BC7C7D1B787C9E23783BFFFFFF418200247FA3EB784BF8 +S31AFE0102D1FFFF197FE0FB782C000000987E00003BDE00013BFF94 +S31AFE0102E6FFFF4082FFE48001001C7C0803A683A1000C83C1001D +S31AFE0102FB1083E10014382100184E8000209421FFE87C0802A63A +S31AFE0103109381000893A1000C93C1001093E100149001001C3DA1 +S31AFE0103252000008009394C3D6000001FE0000A3B8B32007C7DF9 +S31AFE01033A1B787C9E237848000014813C0048386000647D28035C +S31AFE01034FA64E8000217FA3EB787FC4F3784BFFFE097C631B7908 +S31AFE010364408200102C1F00003BFFFFFF4082FFD48001001C7C7C +S31AFE0103790803A68381000883A1000C83C1001083E10014382158 +S31AFE01038E00184E8000209421FF807C8023782C00000590A10022 +S31AFE0103A31090C1001490E100189101001C9121002091410024CC +S31AFE0103B89081000C386000004182002C28000005418100102C5C +S31AFE0103CD00000441820144480002B42C000006418202782C0071 +S31AFE0103E2000741820278480002A03D60FE01800B4EDC3D20FE27 +S31AFE0103F70139294E087D2902147D2903A64E8004203D20FF00DA +S31AFE01040C61290014800900007C0006AC60000400900900007C08 +S31AFE0104210006AC480000E03D20FF0061290200A00900007C00DA +S31AFE01043606AC60000008B00900007C0006AC480000C03D20FF47 +S31AFE01044B0061290200A00900007C0006AC60000004B009000017 +S31AFE0104607C0006AC480000A03D20FF0061290240A00900007C1F +S31AFE0104750006AC60000004B00900007C0006AC480000803D204B +S31AFE01048AFF0061290220A00900007C0006AC60000008B00900B5 +S31AFE01049F007C0006AC480000603D20FF0061290220A0090000BC +S31AFE0104B47C0006AC60000004B00900007C0006AC480000403DF0 +S31AFE0104C920FF0061290940800900007C0006AC600000809009F7 +S31AFE0104DE00007C0006AC480000203D20FF0061290948800900AE +S31AFE0104F3007C0006AC60000010900900007C0006AC3D2000002D +S31AFE0105083800000190093950480001783D2000008069395038B6 +S31AFE01051D000000900939503D60FE01800B4FC43D20FE013929AA +S31AFE0105324EF07D2902147D2903A64E8004203D20FF006129008E +S31AFE01054714800900007C0006AC540005A8900900007C0006AC07 +S31AFE01055C4800012C3D20FF0061290200A00900007C0006AC70E1 +S31AFE01057100FFF75400043EB00900007C0006AC480001083D204F +S31AFE010586FF0061290200A00900007C0006AC7000FFFB54000437 +S31AFE01059B3EB00900007C0006AC480000E43D20FF0061290240CD +S31AFE0105B0A00900007C0006AC7000FFFB5400043EB00900007C25 +S31AFE0105C50006AC480000C03D20FF0061290220A00900007C0035 +S31AFE0105DA06AC7000FFF75400043EB00900007C0006AC4800002A +S31AFE0105EF9C3D20FF0061290220A00900007C0006AC7000FFFB0D +S31AFE0106045400043EB00900007C0006AC480000783D20FF0061E2 +S31AFE010619290940800900007C0006AC5400066E900900007C00C1 +S31AFE01062E06AC480000583D20FF0061290948800900007C00061E +S31AFE010643AC54000734900900007C0006AC48000038386000364D +S31AFE0106584800003039610008380100883920000398610071994E +S31AFE01066D21007090010074916100783D200000800B000880699A +S31AFE010682394C9009394C382100804E8000209421FFE87C0802D2 +S31AFE010697A693C1001093E100149001001C7C9E237839200000FC +S31AFE0106AC7C7F1B78913E0000881F0A86700B00014182006038C9 +S31AFE0106C1000001981F0A86A13F2800391F28007120800040827C +S31AFE0106D6003C8128000439400001880900003960B00098010034 +S31AFE0106EB08B1480002B17F280038610008388000014BFFAAA5A7 +S31AFE0107002C0300004182000C38000001901E0000380000109022 +S31AFE0107151F094C392000017D234B788001001C7C0803A683C18B +S31AFE01072A001083E10014382100184E8000209421FFF07C0802A4 +S31AFE01073FA693C1000893E1000C900100143D2000003BE93200C6 +S31AFE010754813F00343860FFFF7D2803A64E8000217C7E1B787CBB +S31AFE0107691E9AA67400FFFF3D200000800939542C000000408245 +S31AFE01077E009438000001900939544BFFF7B5813F0034386000EC +S31AFE010793007D2803A64E800021815F00147C1E9AA67400FFFFCF +S31AFE0107A83D20FE01900A000039290228912A00043D60FE013921 +S31AFE0107BD6B02983D20FE01916A000839290040912A000C3D60B8 +S31AFE0107D2FE01396B01E83D20FE01916A001039290394912A0066 +S31AFE0107E7143D60FE01396B06903D20FE01916A00183929030832 +S31AFE0107FC912A001C801F00347FC3F3787C0803A64E80002180F0 +S31AFE0108110100147C0803A683C1000883E1000C382100104E8098 +S31AFE01082600209421FFF07C0802A693E1000C900100143D200046 +S31AFE01083B0080693C587C9F23782C030000418200084BFFAA750D +S31AFE010850881F00002C0000024082002C3C80000038843C483897 +S31AFE0108657F001C38A000064BFFB4C92C03000040820010801F99 +S31AFE01087A00103D20000090093958800100147C0803A683E100A7 +S31AFE01088F0C382100104E8000209421FE887C0802A69321015C74 +S31AFE0108A493410160936101649381016893A1016C93C101709336 +S31AFE0108B9E101749001017C3D20000090693C58386100187C7931 +S31AFE0108CE1B783880000038A0012C4BFFAAC13D20000080893C69 +S31AFE0108E34839693C48A06B00043D201234394000003CE0000046 +S31AFE0108F838C0000161295555396000063907395898C10019993E +S31AFE01090D61001A9121001C9947395899480003380000FF9081EA +S31AFE0109220034B06100389801015198C10018994800019948001F +S31AFE010937023CA0FE017D1D437838A508289801014898010149A2 +S31AFE01094C9801014A9801014B9801014C9801014D9801014E987B +S31AFE01096101014F980101503861000838800044480000D53B80CC +S31AFE01097600023B4101483F60000048001F0D7C7E1B787F23CB93 +S31AFE01098B783880012C7F45D37838C0004338E0004448000249BC +S31AFE0109A048000AA1881B39582C00000040820028881D00012C2E +S31AFE0109B50000004082001C881D00022C000000408200108BFD1D +S31AFE0109CA00032C1F00004182001438600044480000BD38600075 +S31AFE0109DF004800003848001EA97C7E1850280307CF4081FFB09C +S31AFE0109F47F80E3782C0000003B9CFFFF4181FF80386000444829 +S31AFE010A0900008D3D20000093E93C503860FFFF8001017C7C08C9 +S31AFE010A1E03A68321015C83410160836101648381016883A10114 +S31AFE010A336C83C1017083E10174382101784E8000203D20000092 +S31AFE010A4881293C5C2C09000041820024A00900047C00200040AD +S31AFE010A5D82000C3860FFFF4E800020812900002C0900004082CC +S31AFE010A72FFE43D20000080093C5C90693C5CB083000490A3000E +S31AFE010A870890030000386000004E8000203D20000081293C5C95 +S31AFE010A9C396000002C0900004D8200207D2A4B78A00900047CF0 +S31AFE010AB10018004082001C2C0B00004182001080090000900B07 +S31AFE010AC6000048000008814900007D2B4B78812900002C0900B2 +S31AFE010ADB004082FFD03D20000091493C5C4E8000209421FFE817 +S31AFE010AF07C0802A69381000893A1000C93C1001093E1001490E8 +S31AFE010B0501001C7C7E1B7883FE000838000000A13F0006600025 +S31AFE010B1AFFFF7C090000817E00047C9C23784082000C38000082 +S31AFE010B2F00B01F0006A01F00047D635B78B00B0002A3BF00043E +S31AFE010B44480008CD7C651B787FA4EB787FE3FB78480008512CDE +S31AFE010B59030000408200603D20000081693C5C2C0B0000418284 +S31AFE010B6E0050A12B0004A01F00027C09000040820034A0BF00B2 +S31AFE010B8304800B00087D635B7838A5FFF87F86E378A0FF00003B +S31AFE010B98389F00087C0803A64E8000217FC3F378480007D9482B +S31AFE010BAD000018816B00002C0B00004082FFB87FC3F378480085 +S31AFE010BC207C18001001C7C0803A68381000883A1000C83C10007 +S31AFE010BD71083E10014382100184E8000209421FFD87C0802A665 +S31AFE010BEC930100089321000C93410010936100149381001893E8 +S31AFE010C01A1001C93C1002093E100249001002C7C9C2378281C5C +S31AFE010C1605C07C791B787CB82B787CDA33787CFE3B78418100B0 +S31AFE010C2BA8386005EA480006ED7C7F1B794182009883BF000811 +S31AFE010C40381C0008837F0004B01F000CB3DD0000B35D0002A01B +S31AFE010C551F000C392000007F85E378B01D0004B13D00067F243A +S31AFE010C6ACB78387D00084BFFA6513D200000800939583960001F +S31AFE010C7F11901B000C81380000997B0009913B0010A01D000420 +S31AFE010C947F63DB78B01B0002A39F000C480007717C651B787F43 +S31AFE010CA984E3787FA3EB78480006F5B07D00067F05C3787FE336 +S31AFE010CBEFB7838800011480004457FE3FB78480006B5800100F6 +S31AFE010CD32C7C0803A6830100088321000C8341001083610014A6 +S31AFE010CE88381001883A1001C83C1002083E10024382100284EDB +S31AFE010CFD8000209421FFD87C0802A69381001893A1001C93C1B5 +S31AFE010D12002093E100249001002C7CBF2B787C7D1B787C9C23AD +S31AFE010D27787CDE33787FE3FB783881000848001A252C030000E9 +S31AFE010D3C41800024A0DF0004A0FE00047FA3EB787F84E3783878 +S31AFE010D51A100084BFFFE91386000004800001C3C60FE013C80B3 +S31AFE010D66FE0138634FD838844FFC4BFFAD553860FFFF80010048 +S31AFE010D7B2C7C0803A68381001883A1001C83C1002083E10024BD +S31AFE010D90382100284E8000209421FFE87C0802A6938100089363 +S31AFE010DA5A1000C93C1001093E100149001001C3F8000007CBFF4 +S31AFE010DBA2B783D200000807C3C607CDD33787CFE3B7893E93C9E +S31AFE010DCF644BFFA4F13D20000081693C682C0B00004182001CC6 +S31AFE010DE4B3CB0004801D000039200000900B0000913C3C604831 +S31AFE010DF90000143C60FE013863500C7FE4FB784BFFACBD800130 +S31AFE010E0E001C7C0803A68381000883A1000C83C1001083E1008D +S31AFE010E2314382100184E8000209421FFD07C0802A693410018A6 +S31AFE010E389361001C9381002093A1002493C1002893E1002C9058 +S31AFE010E4D010034A3A600047CBA2B787C7E1B787C9C23783CA014 +S31AFE010E62FE017CFF3B7838A50D98386100087FA4EB784BFFFB5B +S31AFE010E77D12C0300004080000C3860FFFF48000084813F00046F +S31AFE010E8C3C001062817F000060004DD37D2900161D6B03E8559A +S31AFE010EA129D1BE7F6B4A143D4000003D2000003D60000093CA63 +S31AFE010EB63C6093893C64934B3C68480019CD7FBAEB787C7E1B69 +S31AFE010ECB783BE0FFFF3FA000003F800000480019B57C7E185066 +S31AFE010EE07C03D8404080001848000559801D3C602C000000403E +S31AFE010EF582FFE483FC3C647F43D3784BFFFB957FE3FB78800122 +S31AFE010F0A00347C0803A6834100188361001C8381002083A10048 +S31AFE010F1F2483C1002883E1002C382100304E8000209421FFF07D +S31AFE010F347C0802A693E1000C900100147C691B78880900002C1D +S31AFE010F490000FF4082002C880900012C0000FF40820020880971 +S31AFE010F5E00022C0000FF4082001488090003386000012C00001D +S31AFE010F73FF418200643FE000007D234B78389F395838A0000478 +S31AFE010F884BFFADAD2C0300004082000C38600001480000408805 +S31AFE010F9D1F3958389F39582C0000004082002C880400012C004F +S31AFE010FB2000040820020880400022C0000004082001488040027 +S31AFE010FC703386000012C00000041820008386000008001001450 +S31AFE010FDC7C0803A683E1000C382100104E8000209421FFD87CFF +S31AFE010FF10802A693A1001C93C1002093E100249001002C7C7E23 +S31AFE0110061B7883FE00047C9D2378387F00104BFFFF1D2C0300A8 +S31AFE01101B0041820020A09F00007FE3FB785484D6BA38A0000084 +S31AFE011030480003752C030000418200107FC3F378480003414863 +S31AFE0110450000A8801F000C813D0000A17D000490010008912113 +S31AFE01105A000CB1610010A13F0000A01F00025523D6BA7C030026 +S31AFE01106F50B01E000C881F00092C00000641820038418100108E +S31AFE0110842C00000141820014480000582C00001141820038482E +S31AFE01109900004C7C1F1A14901E00087FC3F378388100084800BC +S31AFE0110AE05054800003C7C1F1A14901E00087FC3F378388100B5 +S31AFE0110C30848000AE5480000247C1F1A14901E00087FC3F3783C +S31AFE0110D8388100084BFFFA114800000C7FC3F378480002998084 +S31AFE0110ED01002C7C0803A683A1001C83C1002083E1002438210A +S31AFE01110200284E8000209421FFE07C0802A69361000C938100E9 +S31AFE0111171093A1001493C1001893E1001C900100247C7C1B782A +S31AFE01112C83BC000480FC0008A13C000C7CFD38507D293A14B153 +S31AFE0111413C000CA01D000054E9352E5400053E60004000700048 +S31AFE011156F0FF7C004B78B01D000039200000993D00013D000017 +S31AFE01116B00A1283C6CA01C000CB13D0004B01D000239690001CD +S31AFE011180B1683C6C3940000038000040989D0009981D0008B1F7 +S31AFE0111955D000AB15D00063D200000800939587CBB2B78901DC7 +S31AFE0111AA000C813B00007CE43B78913D00107FA3EB7838A00015 +S31AFE0111BF00480001E5B07D000A7F83E378389B000438A008009D +S31AFE0111D448000371800100247C0803A68361000C8381001083EC +S31AFE0111E9A1001483C1001883E1001C382100204E8000203D00B7 +S31AFE0111FE0000800839682C0000004C820020380000019008398A +S31AFE01121368380000047C0903A63C8000003D2000013D60000137 +S31AFE01122881443C7038A9082C390B07DC38C005EA38E000007D83 +S31AFE01123D272A147120000239690002914800007C00002654002C +S31AFE0112521FFE7C0000D07D6B00787D2900387D295B78912800A9 +S31AFE011267107D0A4378B0C8000E390A001438E705EC4200FFC429 +S31AFE01127C91443C704E8000209421FFE87C0802A6938100089372 +S31AFE011291A1000C93C1001093E100149001001C3D2000013BE97B +S31AFE0112A607DC3BC000003F80FE017FFDFB7880DF0010A0FF0095 +S31AFE0112BB0EA11F000C813F00007FC4F3787FA5EB78387C50380E +S31AFE0112D04BFFA7F53BDE00012C1E00033BFF00143BBD0014401D +S31AFE0112E581FFD03D2000003C60FE0180893C70386350644BFF59 +S31AFE0112FAA7CD8001001C7C0803A68381000883A1000C83C1001C +S31AFE01130F1083E10014382100184E8000203CA0000080653C7070 +S31AFE0113242C0300004D8200203CE00000814739603D2000008037 +S31AFE011339093964394A00017CC050503C8000008164395C8103DA +S31AFE01134E0010800300003928001490053C707C065800912300AE +S31AFE011363089103000438000000B003000C914739604C8100207B +S31AFE01137890C4395C4E8000203D400000812A39603D60000080A6 +S31AFE01138D0B3C703929FFFF912A3960906B3C70900300004E80D3 +S31AFE0113A200203484FFFE41800018A00300003484FFFE7CA50208 +S31AFE0113B714386300024080FFF02C04FFFF408200108803000031 +S31AFE0113CC5400402E7CA5021454AB043E54A9843E380000007C5A +S31AFE0113E1A95A146000FFFF7C0500004081000C3D25FFFF38A9EE +S31AFE0113F600017CA928F85523C63E5463402E5520063E7C031BA3 +S31AFE01140B784E800020A123000EA003000CA16300107C004A14F2 +S31AFE011420A1430012892300097C005A147C005214A06300027CBA +S31AFE011435004A147C601A144E8000209421FFD87C0802A693817B +S31AFE01144A001893A1001C93C1002093E100249001002C3F800098 +S31AFE01145F003FA000003FC00000386005EA4BFFFEB17C7F1B7986 +S31AFE011474408200183C60FE01386350744BFFA6454BFFFE0148C4 +S31AFE011489000000809F00103861000838A005EA4BFFD289546059 +S31AFE01149E043E2C000000B07F000C41820074A0010014813C39A9 +S31AFE0114B3742C00080039290001913C3974418200182C00080685 +S31AFE0114C8418200347FE3FB784BFFFEB14BFFFF94813D396C8085 +S31AFE0114DD1F001039290001913D396C901F00047FE3FB783881AF +S31AFE0114F2000E4BFFFAF94BFFFF70813E3970801F001039290063 +S31AFE01150701913E3970901F00047FE3FB7848000F9D4BFFFF503C +S31AFE01151C7FE3FB784BFFFE618001002C7C0803A68381001883BE +S31AFE011531A1001C83C1002083E10024382100284E8000209421D3 +S31AFE011546FFE87C0802A69001001C80040000A1440004900100CD +S31AFE01155B08390100083D200000B148000439693C48A14B0004BC +S31AFE011570B0A1001480093C48A0A3000C808300109001000EB13D +S31AFE0115854100127D0343784BFFCF393D600000812B3978392910 +S31AFE01159A0001912B39788001001C7C0803A6382100184E8000C0 +S31AFE0115AF209421FFF07C0802A693C1000893E1000C90010014B1 +S31AFE0115C47C7F1B78807F00087C9E2378A00300002C00080040AC +S31AFE0115D9820050A09F000C38A000004BFFFDC17C631B794082C6 +S31AFE0115EE003C813F000838A0000098690000817F0008B06B00E3 +S31AFE01160302807F0008A09F000C4BFFFD99813F00087FC5F37822 +S31AFE011618B06900027FE3FB78388000014BFFFAE57FE3FB784BC6 +S31AFE01162DFFFD55800100147C0803A683C1000883E1000C38217B +S31AFE01164200104E8000209421FFD87C0802A69341001093610000 +S31AFE011657149381001893A1001C93C1002093E100249001002C20 +S31AFE01166C7C9B23787C7E1B78736000023B9E002C83BC00048385 +S31AFE011681FC00087CBA2B784182004438000018B01C000C813F83 +S31AFE011696000C396000065169E0063C000204913F000C6000056C +S31AFE0116ABB490010008387F00143881000838A000044BFF9C0585 +S31AFE0116C038000000B01E001648000020A13E00163960000539C0 +S31AFE0116D5290014B13C000C801F000C5160E006901F000C801F29 +S31AFE0116EA000C396000005160C10E901F000C813E00542C1A00AD +S31AFE0116FF00913F0004801E0050B17F0010901F00084082005402 +S31AFE011714A01E0012B01F0000A13E00149B7F000DB13F0002A070 +S31AFE0117291E00162C0000004182000C63600008981F000D3800B0 +S31AFE01173E05B4B01F000EB35F00123D20000080093958396000C7 +S31AFE01175306901D000C813E0008997D0009913D0010A01C000C31 +S31AFE0117687FA3EB78B01D0002A3BC000C4BFFFC9D7C651B787FD2 +S31AFE01177DA4EB787FE3FB784BFFFC21B07F00107F83E3783880BB +S31AFE011792000638BE00084BFFF971801E00042C00000A408200EB +S31AFE0117A7243C8000013CA0FE0138A5199C7FC6F378387E00185C +S31AFE0117BC6084D4C048000B5D48000034881F000D7009000340FF +S31AFE0117D1820010A01E00162C0000004182001C3CA0FE0138A5D5 +S31AFE0117E619747FC6F378387E0018388003E848000B298001003E +S31AFE0117FB2C7C0803A683410010836100148381001883A1001C53 +S31AFE01181083C1002083E10024382100284E8000209421FFE07C53 +S31AFE0118250802A69361000C9381001093A1001493C1001893E1AD +S31AFE01183A001C900100247C7C1B7883FC0008815C0004A0DF0051 +S31AFE01184F00A0FF0002807F000480BF000839000014B11C000C6E +S31AFE0118643BEA0014801F000C39200005396000005120E00651E7 +S31AFE01187960C10E901F000C39200400B13F000EB17F0010B17FA0 +S31AFE01188E0012B0EA0014B0DF0002991F000D907F000890BF00C4 +S31AFE0118A3043D200000800939587C9B2378900A000C813B00009C +S31AFE0118B838000006912A0010980A0009A13C000C7D435378B13D +S31AFE0118CD2A0002A3BC000C4BFFFB3D7C651B787FA4EB787FE38C +S31AFE0118E2FB784BFFFAC1B07F00107F83E3787F65DB78388000E9 +S31AFE0118F7064BFFF811800100247C0803A68361000C83810010A8 +S31AFE01190C83A1001483C1001883E1001C382100204E8000203D09 +S31AFE01192120000081293C74396000002C0900004D8200207D2ACE +S31AFE0119364B787C0918004082001C2C0B000041820010800900C6 +S31AFE01194B00900B000048000008814900007D2B4B7881290000B8 +S31AFE0119602C0900004082FFD43D20000091493C744E800020943A +S31AFE01197521FFF87C0802A69001000C3880000038A000014BFF9C +S31AFE01198AFCC18001000C7C0803A6382100084E8000209421FFC9 +S31AFE01199FF87C0802A69001000C38000000900300044BFFFF71E4 +S31AFE0119B48001000C7C0803A6382100084E8000209421FFF07CF0 +S31AFE0119C90802A693E1000C900100147C7F1B78480000108003C6 +S31AFE0119DE0000901F00404BFFF99D807F00402C0300004082FFF1 +S31AFE0119F3EC800100147C0803A683E1000C382100104E80002065 +S31AFE011A089421FFE87C0802A693A1000C93C1001093E100149040 +S31AFE011A1D01001C7C7D1B7838000000901D0004387D0018480008 +S31AFE011A32097D7FA3EB784BFFFF8D7FA3EB784BFFFEE18001008A +S31AFE011A471C7C0803A683A1000C83C1001083E1001438210018CF +S31AFE011A5C4E8000208124000880E30050814900048009000CA11E +S31AFE011A7164000C7D075051540036BA7D6058507D09021441819F +S31AFE011A8600707C0A38507D6058517D08021440810060814300C2 +S31AFE011A9B407D275A142C0A0000380000009123005090040000D9 +S31AFE011AB041820030800A00002C0000004182001C7D4953788182 +S31AFE011AC5290000800900002C0000004082FFF47D2A4B78908AF0 +S31AFE011ADA0000480000109103004490830040916300483860009B +S31AFE011AEF014E800020386000004E8000209421FFF07C0802A698 +S31AFE011B0493C1000893E1000C90010014812400087C7F1B788388 +S31AFE011B19C90008801F00547D20F0514081006C387F00184800CC +S31AFE011B2E0881811F0054A15F00167D68F0505549043E7F8B48B3 +S31AFE011B43004FFEE3827C000026540007FE7C0000D07D29007871 +S31AFE011B587D6B00387D6B4B79408100307D2B50505525043E2C86 +S31AFE011B6D0500007C085A14901F0054B13F001641820014807F88 +S31AFE011B820034386300147C835A144BFF9735800100147C0803C7 +S31AFE011B97A683C1000883E1000C382100104E8000209421FFE0E7 +S31AFE011BAC7C0802A69361000C9381001093A1001493C100189388 +S31AFE011BC1E1001C900100247C7C1B78807C0004A01C000C83FC86 +S31AFE011BD60008B0030002A3BC000C7C9E23784BFFF82D7C651BAD +S31AFE011BEB787FA4EB787FE3FB784BFFF7B12C0300003B60000051 +S31AFE011C00408203A03D20000083A93C744800000883BD00002C70 +S31AFE011C151D00004182037CA13D0012A01F00027C09000040825E +S31AFE011C2AFFE8A13D00142C09000041820028A01F00007C090063 +S31AFE011C3F004082FFD07FC3F378389D000838A000044BFFA0E5C5 +S31AFE011C542C0300004082FFB8801D0004817E0004A13E00082C17 +S31AFE011C69000002917D000CB13D001041820024881F000D700933 +S31AFE011C7E0004418200187FA3EB784BFFFD817F83E3784BFFF683 +S31AFE011C93F14800031C813D00043809FFFF28000009418102FCED +S31AFE011CA83D60FE01396B50985400103A7D4B002E3D20FE0139D1 +S31AFE011CBD2950987D4A4A147D4903A64E800420881F000D700949 +S31AFE011CD200024182004038000002901D0004813F0004A17F0024 +S31AFE011CE70039290001913D0050B17D0014801E00003920000029 +S31AFE011CFC901D0008B13D004C7FA3EB78B13D0016388000124844 +S31AFE011D110002247FC4F3787F83E3784BFFFB0548000280387DBE +S31AFE011D26001848000685881F000D70090004418200103800007C +S31AFE011D3B01901D00044800026070090002408202387009001032 +S31AFE011D5041820250813D0054807F0008392900017C03480040E1 +S31AFE011D6582023C38000004907D0054901D00044800022C881F39 +S31AFE011D7A000D83DD005070090010418200107FA3EB787F84E3CB +S31AFE011D8F784BFFFD6D7FA3EB787F84E3784BFFFCC5881F000D6C +S31AFE011DA47C7B1B787009000141820024807F0004801D00507CCE +S31AFE011DB9030000408200143803000139200005901D0050913DD2 +S31AFE011DCE0004801D00507C00F00040820010A01D004C2C000097 +S31AFE011DE300418201BCA3FD00162C1F000040820024387D0018B2 +S31AFE011DF8480005B57FA3EB783880001038A000004BFFF841B374 +S31AFE011E0DFD004C4800019038000001B01D004C48000184881FD3 +S31AFE011E22000D70090010418201787FA3EB787F84E3784BFFFCAB +S31AFE011E37C9813D0054801F0008392900017C00480040820158CD +S31AFE011E4C38000000901D00047FA3EB784BFFFAC94800014488EC +S31AFE011E611F000D70090010418200607FA3EB787F84E3784BFF62 +S31AFE011E76FC89813D0054801F0008392900017C0048004082002B +S31AFE011E8B40881F000D700900014182002C813D00503800000A90 +S31AFE011EA039290001913D0050901D00047FA3EB78388000103871 +S31AFE011EB5A000004BFFF7914800000C38000008901D0004881FB5 +S31AFE011ECA000D70090001418200D0387D0018480004D5813D0038 +S31AFE011EDF503800000939290001913D0050901D00047FA3EB78A1 +S31AFE011EF4388000114800003C7FA3EB787F84E3784BFFFB5D887A +S31AFE011F091F000D7C7B1B78700900014182008C813D00503800F9 +S31AFE011F1E000A39290001913D0050901D00047FA3EB7838800030 +S31AFE011F331038A000004BFFF71148000064881F000D7009001071 +S31AFE011F48418200587FA3EB787F84E3784BFFFBA9813D00548001 +S31AFE011F5D1F0008392900017C00480040820038387D001848000D +S31AFE011F72043D3800000A901D0004480000247FA3EB7838800078 +S31AFE011F870038A000014BFFF6BD480000107FC4F3787F83E37807 +S31AFE011F9C4BFFF8852C1B00004082000C7F83E3784BFFF3D58060 +S31AFE011FB10100247C0803A68361000C8381001083A1001483C144 +S31AFE011FC6001883E1001C382100204E8000209421FFF87C0802D0 +S31AFE011FDBA69001000C4BFFF461480004218001000C7C0803A6E3 +S31AFE011FF0382100084E8000209421FFE87C0802A6938100089311 +S31AFE012005A1000C93C1001093E100149001001C7C7D1B787C9CD7 +S31AFE01201A23783880000038A006444BFF93753D600000810B3C80 +S31AFE01202F74381D006C395D0058901D0034915D0030392000011B +S31AFE012044380005EA93AB3C74913D0004B39D0012B01D003A91A1 +S31AFE0120591D0000915D003C386000008001001C7C0803A68381C0 +S31AFE01206E000883A1000C83C1001083E10014382100184E800015 +S31AFE012083209421FFF07C0802A693E1000C900100147C7F1B78A0 +S31AFE012098480000084BFFFF39801F00042C00000041820010A01A +S31AFE0120AD1F00162C0000004082FFE8800100147C0803A683E1E9 +S31AFE0120C2000C382100104E8000209421FFF07C0802A693E1005D +S31AFE0120D70C900100147C7F1B784BFFFFA5817F000469690004E8 +S31AFE0120EC200900007D20491469600002214000007C0A01147D73 +S31AFE0121012A03794182002038000007901F00047FE3FB783880BC +S31AFE012116001138A000004BFFF52D480000242C0B0005408200F0 +S31AFE01212B1C38000006901F00047FE3FB783880001138A0000017 +S31AFE0121404BFFF5097FE3FB784BFFF87D800100147C0803A68364 +S31AFE012155E1000C382100104E8000209421FFE87C0802A6938150 +S31AFE01216A000893A1000C93C1001093E100149001001C7CBE2B15 +S31AFE01217F797C7F1B787C9D237840810010801F00482C000000A7 +S31AFE0121944082001438600000480000B8907F0048480000AC3B3D +S31AFE0121A980000048000064809F00447FA3EB784BFF9109807F25 +S31AFE0121BE0040801F0048812300007FC0F050913F00407F9C0290 +S31AFE0121D3147FBD02144BFFF1A9807F00402C0300004182FFBCBC +S31AFE0121E881630008A123000C800B000C540036BA7D2048509180 +S31AFE0121FD3F0048800B000C540036BA7D6B0214917F00442C1ECA +S31AFE01221200004182003C80BF00487C1E28004080FF90809F00FC +S31AFE012227447FA3EB787FC5F3784BFF9091813F0044801F0048CF +S31AFE01223C7D29F2147C1E0050901F0048913F00447F9CF2147F47 +S31AFE01225183E3788001001C7C0803A68381000883A1000C83C14B +S31AFE012266001083E10014382100184E8000209421FFF07C08024D +S31AFE01227BA693C1000893E1000C900100147CBE2B797C7F1B78B6 +S31AFE012290807F00344081006C813F00043929FFFC280900014041 +S31AFE0122A581000C3860FFFF48000058A01F00162C000000408299 +S31AFE0122BA0048213E05B47D2949107D294BB87D2048F87FC94895 +S31AFE0122CF38700005B47D3E0378386300147FC5F3784BFF8FE146 +S31AFE0122E47FE3FB78B3DF00163880001038A000004BFFF3557FB2 +S31AFE0122F9C3F3784800000838600000800100147C0803A683C1AF +S31AFE01230E000883E1000C382100104E8000209421FFE87C0802C4 +S31AFE012323A69381000893A1000C93C1001093E100149001001C05 +S31AFE0123387C7F1B787CBD2B787CDC3378909F0004480005453D1C +S31AFE01234D20000081293C78907F00082C09000093BF000C939F1C +S31AFE0123620010418200187C09F80041820020812900002C090037 +S31AFE012377004082FFF03D20000080093C7893E93C78901F000022 +S31AFE01238C8001001C7C0803A68381000883A1000C83C10010835A +S31AFE0123A1E10014382100184E8000203D20000081293C7839409A +S31AFE0123B600002C0900004D8200207D2B4B787C0918004082001F +S31AFE0123CB202C0A00004182001080090000900A00004800001C48 +S31AFE0123E081690000480000147D2A4B78812900002C0900004014 +S31AFE0123F582FFD03D20000091693C784E8000209421FFE87C0864 +S31AFE01240A02A693A1000C93C1001093E100149001001C3D2000DA +S31AFE01241F0083E93C783BC000002C1F00003FA000004182006437 +S31AFE01243448000459801F0008813F00047C6018507C03484041F2 +S31AFE01244980003C2C1E000041820010801F0000901E000048000B +S31AFE01245E000C801F0000901D3C78801F000C807F00107C080317 +S31AFE012473A63BC000004E80002183FD3C784800000C7FFEFB7847 +S31AFE01248883FF00002C1F00004082FFA48001001C7C0803A683BB +S31AFE01249DA1000C83C1001083E10014382100184E800020942198 +S31AFE0124B2FFE87C0802A69381000893A1000C93C1001093E100C9 +S31AFE0124C7149001001C7C7D1B7883FD0004A13F0002A01F000089 +S31AFE0124DC69290800216900007D2B491468000001216000007C57 +S31AFE0124F10B01147C0B4839418200D83FC00000387F0018389E6A +S31AFE012506395838A000044BFF98292C030000408200BCA01F00D7 +S31AFE01251B062C00000140820064813F000E38000002B01F000670 +S31AFE012530913F0018801F0008391F0008A1280004901F001238DC +S31AFE0125459F0012B1240004801E39583D200000901F000E8149DF +S31AFE01255A3C4839293C48A1690004915F0008B1680004380000A2 +S31AFE01256F1CB01D000C7FA3EB7838A008064BFFEFC94800005058 +S31AFE0125842C000002408200483FC00001801E1FDC3B9E1FDC2C6C +S31AFE01259900000041820034807C0008389F000E38A000044BFF22 +S31AFE0125AE97897C631B794082001CA01F000C817F0008813C0012 +S31AFE0125C304B009000491690000907E1FDC7FA3EB784BFFEDADD1 +S31AFE0125D88001001C7C0803A68381000883A1000C83C10010830C +S31AFE0125EDE10014382100184E8000209421FFD87C0802A69361D4 +S31AFE01260200149381001893A1001C93C1002093E1002490010091 +S31AFE0126172C7C7F1B787C9D23783860002A4BFFECF97C7E1B79BC +S31AFE01262C40820018480001007FC3F3784BFFED49386000004864 +S31AFE0126410000F4817E000439200004992B0005394000013900AF +S31AFE012656080038000006980B0004B14B0000B14B0006B10B00C3 +S31AFE01266B023D200000800939583D400000900B000E392A3C48CF +S31AFE012680A1090004800A3C48B10B000C900B0008813F00003D1C +S31AFE012695400001912B0018396A1FDC380000FF93EB0008980122 +S31AFE0126AA000D93AB000439200001912A1FDC980100089801007D +S31AFE0126BF099801000A9801000B9801000C3BA000073F8000016A +S31AFE0126D43B60001CB37E000C7FC3F3783881000838A008064B59 +S31AFE0126E9FFEE5D480001A17C7F1B78480000144BFFED49801C9D +S31AFE0126FE1FDC2C0000004182FF30480001857C7F18502803004D +S31AFE012713F94081FFE47FA0EB782C0000003BBDFFFF4181FFB4F6 +S31AFE0127287FC3F3784BFFEC553860FFFF8001002C7C0803A6836C +S31AFE01273D6100148381001883A1001C83C1002083E1002438216C +S31AFE01275200284E8000209421FFD87C0802A6930100089321004F +S31AFE0127670C93410010936100149381001893A1001C93C1002070 +S31AFE01277C93E100249001002C3D2000013B291FE83B1900967CBF +S31AFE0127917B1B787C9C23787F3DCB783B4000007FBEEB787F6371 +S31AFE0127A6DB787FC4F37838A000044BFF95852C0300007F5FD3F8 +S31AFE0127BB78418200383BBE000A7C1DC0003B5F000A4081FFD4FD +S31AFE0127D0801B00007F63DB78901C0000389C00044BFFFE192C0E +S31AFE0127E5030000408000283860FFFF4800006C7C1AC82EA13D3B +S31AFE0127FA0008817D0004B13C0008901C0000917C0004480000C1 +S31AFE01280F4C3CC000008126397C80FC0000390900011D29000AFC +S31AFE0128243D600001A15C0008801C0004396B1FE87CE9592E7D43 +S31AFE012839295A142C080010B1490008900900049106397C4082FD +S31AFE01284E000C380000009006397C386000008001002C7C080315 +S31AFE012863A6830100088321000C83410010836100148381001891 +S31AFE01287883A1001C83C1002083E10024382100284E8000209417 +S31AFE01288D21FFF87C0802A69001000C3D200000392932008009D6 +S31AFE0128A20048386003E87C0803A64E8000213D200000806939B6 +S31AFE0128B78038630001906939808001000C7C0803A6382100081E +S309FE0128CC4E80002015 +S31AFE0128D03C746F7069633E0048656C702061626F7574206865A4 +S31AFE0128E56C703F0000000068656C70000000005B2D77203C7446 +S31AFE0128FA696D656F75743E5D205B656E7472795D00004578656A +S31AFE01290F6375746520636F64652061742061206C6F6361746930 +S31AFE0129246F6E0000676F00002D62203C6C6F636174696F6E3E64 +S31AFE012939205B2D6C203C6C656E6774683E5D00446973706C619A +S31AFE01294E7920286865782064756D702920612072616E6765209C +S31AFE0129636F66206D656D6F72790000000064756D700000000016 +S31AFE0129785B4F4E207C204F46465D00004D616E616765206D6122 +S31AFE01298D6368696E6520636163686573000000636163686500AE +S31AFE0129A200000A526564426F6F7428746D2920646562756720E9 +S31AFE0129B7656E7669726F6E6D656E74202D206275696C7420257F +S31AFE0129CC732C2025730A000030373A34303A3038000000004F9A +S31AFE0129E16374203237203230303000506C6174666F726D3A20FB +S31AFE0129F6257320282573292025730A0000004D6F746F726F6C78 +S31AFE012A0B61204D425800000000506F77657250432038363000EB +S31AFE012A2000000000436F7079726967687420284329203230307D +S31AFE012A35302C20526564204861742C20496E632E0A0A00524178 +S31AFE012A4A4D3A2025702D25700A003D3D20457865637574696E8B +S31AFE012A5F6720626F6F742073637269707420696E2025642E257A +S31AFE012A74303364207365636F6E6473202D20656E746572205E69 +S31AFE012A894320746F2061626F72740A00000000526564426F6F70 +S31AFE012A9E743E200000002A2A204572726F723A20496C6C656787 +S31AFE012AB3616C20636F6D6D616E643A2025730A00006F6E000064 +S31AFE012AC86F666600496E76616C6964206361636865206D6F647E +S31AFE012ADD653A2025730A00636163686573203F0A000000257316 +S31AFE012AF20A20202025732025730A000000006261736520616486 +S31AFE012B076472657373000000006C656E677468000044756D707B +S31AFE012B1C2077686174205B6C6F636174696F6E5D3F0A000077DA +S31AFE012B316169742074696D656F7574000000007374617274698E +S31AFE012B466E6720616464726573730000000041626F757420740B +S31AFE012B5B6F20737461727420657865637574696F6E206174209A +S31AFE012B702570202D2061626F72742077697468205E4320776994 +S31AFE012B857468696E202564207365636F6E64730A0000006574E8 +S31AFE012B9A68300000000071756963635F657468000000515549E5 +S31AFE012BAF43432045746865726E65743A204E6F2066726565202E +S31AFE012BC4786D697420627566666572730A000000000000004CD2 +S31AFE012BD96F616420612066696C65006C6F616400000000454C3C +S31AFE012BEE4620696D61676573206E6F7420737570706F727465DE +S31AFE012C03640A000000496E76616C696420532D7265636F726463 +S31AFE012C18206174206F66667365742025702C20696E7075743A9B +S31AFE012C2D2025630A00000042616420532D7265636F7264206332 +S31AFE012C426F756E74206174206F66667365742025700A00000057 +S31AFE012C570041646472657373206F6666736574203D2025700ADA +S31AFE012C6C00000000417474656D707420746F206C6F6164205339 +S31AFE012C812D7265636F7264206461746120746F206164647265B0 +S31AFE012C9673733A202570205B6E6F7420696E2052414D5D0A0025 +S31AFE012CAB002A2A2A205761726E696E672120436865636B737594 +S31AFE012CC06D206661696C757265202D20416464723A20256C783A +S31AFE012CD52C202530326C58203C3E202530326C580A0000456E8C +S31AFE012CEA74727920706F696E743A2025702C2061646472657379 +S31AFE012CFF732072616E67653A2025702D25700A0000496E7661D2 +S31AFE012D146C696420532D7265636F7264206174206F6666736525 +S31AFE012D2974203078256C782C20747970653A2025780A0000003C +S31AFE012D3E0000FFFF27A4FFFF2608FFFF2608FFFF2608FFFF2709 +S31AFE012D538CFFFF278CFFFF278CFFFF2754FFFF2754FFFF27540D +S31AFE012D68256308000A000000766572626F7365006C6F61642001 +S31AFE012D7D72617720646174610000006C6F616420616464726578 +S31AFE012D92737300000000646F776E6C6F6164206D6F64652028DC +S31AFE012DA754465450206F722078797A4D4F44454D2900000000AD +S31AFE012DBC686F7374206E616D6520284950206164647265737397 +S31AFE012DD129000066696C65206E616D65000000496E76616C69FB +S31AFE012DE66420495020616464726573733A2025730A006D6F6474 +S31AFE012DFB656D000000496E76616C696420276D6F6465273A20B8 +S31AFE012E1025730A00746674700000000054465450206D6F646545 +S31AFE012E25207265717569726573206120776F726B696E67206ED3 +S31AFE012E3A6574776F726B0A00000046696C65206E616D65206D0A +S31AFE012E4F697373696E670A000075736167653A206C6F616420A3 +S31AFE012E6425730A0043616E2774206C6F616420272573273A20E5 +S31AFE012E7925730A00000000526177206C6F61642072657175696D +S31AFE012E8E7265732061206D656D6F727920616464726573730A96 +S31AFE012EA3005261772066696C65206C6F616465642025702D259B +S31AFE012EB8700A0000454C4600556E7265636F676E697A656420A2 +S31AFE012ECD696D61676520747970653A20256C780A0000007B63BB +S31AFE012EE26D64737D00004D616E61676520464C41534820696D48 +S31AFE012EF76167657300666973005B2D6C5D000000004D616E6111 +S31AFE012F0C676520636F6E66696775726174696F6E206B65707473 +S31AFE012F2120696E20464C415348206D656D6F727900000066638F +S31AFE012F366F6E666967005B2D665D00000000496E697469616C59 +S31AFE012F4B697A6520464C41534820496D6167652053797374655B +S31AFE012F606D205B4649535D00696E6974000000005B2D635D0034 +S31AFE012F75000000446973706C617920636F6E74656E7473206F4F +S31AFE012F8A6620464C41534820496D6167652053797374656D2071 +S31AFE012F9F5B4649535D000000006C6973740000000000000000C2 +S31AFE012FB4446973706C61792066726565205B617661696C616220 +S31AFE012FC96C655D206C6F636174696F6E732077697468696E2001 +S31AFE012FDE464C41534820496D6167652053797374656D205B4602 +S31AFE012FF349535D000066726565000000002D66203C666C617394 +S31AFE013008685F616464723E202D6C203C6C656E6774683E0045F4 +S31AFE01301D7261736520464C41534820636F6E74656E74730000D2 +S31AFE013032000065726173650000006E616D6500000000446973B3 +S31AFE013047706C617920616E20696D6167652066726F6D20464C21 +S31AFE01305C41534820496D6167652053797374656D205B46495379 +S31AFE0130715D000064656C65746500005B2D62203C6D656D6F720F +S31AFE013086795F6C6F61645F616464726573733E5D205B2D635D70 +S31AFE01309B206E616D65000000004C6F616420696D616765206631 +S31AFE0130B0726F6D20464C41534820496D616765205379737465EF +S31AFE0130C56D205B4649535D20696E746F2052414D0000006C6F15 +S31AFE0130DA6164000000002D62203C6D656D5F626173653E202D68 +S31AFE0130EF6C203C696D6167655F6C656E6774683E205B2D7320A2 +S31AFE0131043C646174615F6C656E6774683E5D205B2D66203C668F +S31AFE0131196C6173685F616464723E5D205B2D65203C656E74723D +S31AFE01312E795F706F696E743E5D205B2D72203C72616D5F616410 +S31AFE01314364723E5D203C6E616D653E00004372656174652061F1 +S31AFE0131586E20696D6167650063726561746500002A2A2A206951 +S31AFE01316D6E76616C696420276669732720636F6D6D616E643AE1 +S31AFE0131822025730A0000666973200000000066756C6C20696E65 +S31AFE013197697469616C697A6174696F6E2C20657261736573201E +S31AFE0131AC616C6C206F6620666C6173680000000041626F7574B2 +S31AFE0131C120746F20696E697469616C697A65205B666F726D610F +S31AFE0131D6745D20464C41534820696D6167652073797374656D98 +S31AFE0131EB002A2A2041626F727465640A002A2A2A20496E697459 +S31AFE01320069616C697A6520464C41534820496D616765205379B9 +S31AFE0132157374656D0A0000202020696E697469616C697A6174DA +S31AFE01322A696F6E206661696C65642025703A202578282573292A +S31AFE01323F0A00000000202020205761726E696E673A206465767C +S31AFE01325469636520636F6E74656E7473206E6F74206572617365 +S31AFE01326965642C20736F6D6520626C6F636B73206D6179206EEF +S31AFE01327E6F7420626520757361626C650A00526564426F6F7417 +S31AFE01329300526564426F6F745B6261636B75705D0052656442E7 +S31AFE0132A86F6F7420636F6E66696700004649532064697265631B +S31AFE0132BD746F72790000004572726F722077726974696E6720DB +S31AFE0132D2696D6167652064657363726970746F727320617420F8 +S31AFE0132E725703A202578282573290A0000646973706C61792038 +S31AFE0132FC636865636B73756D730000004E616D652020202020D1 +S31AFE013311202020202020202020464C4153482061646472202019 +S31AFE013326202573202020204C656E677468202020202020456E80 +S31AFE01333B74727920706F696E740A000000436865636B73756D92 +S31AFE013350000000004D656D206164647200000000252D3136735D +S31AFE013365202030782530386C5820202030782530386C5820207C +S31AFE01337A30782530386C58202030782530386C580A002020308D +S31AFE01338F782530386C58202E2E2030782530386C580A000000BC +S31AFE0133A46D656D6F727920626173652061646472657373007243 +S31AFE0133B9616D2062617365206164647265737300000000656E98 +S31AFE0133CE74727920706F696E74206164647265737300464C4163 +S31AFE0133E35348206D656D6F72792062617365206164647265732E +S31AFE0133F873000000696D616765206C656E677468205B696E2031 +S31AFE01340D464C4153485D00696D6167652073697A65205B6163BD +S31AFE0134227475616C20646174615D0000000066696C65206E6134 +S31AFE0134376D65000000696E76616C696420617267756D656E743F +S31AFE01344C73000000726571756972656420706172616D65746523 +S31AFE01346172206D697373696E670000496E76616C696420464C4C +S31AFE01347641534820696D6167652073697A652F6C656E677468B1 +S31AFE01348B20636F6D62696E6174696F6E00496E76616C6964208D +S31AFE0134A0464C41534820616464726573733A20257020282573CF +S31AFE0134B5290A0020202076616C69642072616E67652069732011 +S31AFE0134CA25702D25700A000000002A2A205741524E494E473AC3 +S31AFE0134DF2052414D20616464726573733A202570206D61792057 +S31AFE0134F4626520696E76616C69640A004E616D652069732074D5 +S31AFE0135096F6F206C6F6E672C206D757374206265206C65737327 +S31AFE01351E207468616E2025642063686172730A00000043616ED2 +S31AFE0135332774206C6F6361746520256C64206279746573206669 +S31AFE01354872656520696E20464C4153480A000000496D616765BB +S31AFE01355D20666F756E642C2062757420464C41534820616464AA +S31AFE0135727265737320696E636F72726563740A000000496D6178 +S31AFE013587676520666F756E642C20627574204C454E4754482089 +S31AFE01359C697320696E636F72726563740A000000416E20696DA1 +S31AFE0135B1616765206E616D6564202725732720657869737473E8 +S31AFE0135C6000043616E27742070726F6772616D2074686973202E +S31AFE0135DB726567696F6E202D20636F6E7461696E7320636F6430 +S31AFE0135F06520696E20757365210A000043616E277420657261C8 +S31AFE013605736520726567696F6E2061742025703A202578282541 +S31AFE01361A73290A00000043616E27742070726F6772616D207299 +S31AFE01362F6567696F6E2061742025703A202578282573290A00DB +S31AFE0136444572726F722065726173696E672061742025703A2055 +S31AFE0136592578282573290A000000004572726F722070726F67E5 +S31AFE01366E72616D6D696E672061742025703A20257828257329CD +S31AFE0136830A000000006C656E67746800006D697373696E672087 +S31AFE013698617267756D656E7400000000696D616765206E616D56 +S31AFE0136AD65000044656C65746520696D61676520272573270022 +S31AFE0136C200004E6F20696D616765202725732720666F756E64CC +S31AFE0136D70A000000006D656D6F7279205B6C6F61645D206261DB +S31AFE0136EC736520616464726573730000646973706C617920636D +S31AFE0137016865636B73756D000000004E6F742061206C6F61644C +S31AFE01371661626C6520696D6167650A0000002A2A205761726ECC +S31AFE01372B696E67202D20636865636B73756D206661696C7572E3 +S31AFE013740652E202073746F7265643A202530386C782C20636F22 +S31AFE0137556D70757465643A202530386C780A00436865636B73A5 +S31AFE01376A756D3A202530386C780A00000000464C4153483A20C6 +S31AFE01377F64726976657220696E6974206661696C6564212C20DE +S31AFE0137947374617475733A2025780A00464C4153483A20257019 +S31AFE0137A9202D2025702C20256420626C6F636B73206F66202557 +S31AFE0137BE7020627974657320656163682E0A00000000746F6FFF +S31AFE0137D32066657720617267756D656E7473000000756E7265CA +S31AFE0137E8636F676E697A656420636F6D6D616E64000000005223 +S31AFE0137FD756E2073637269707420617420626F6F740000626F80 +S31AFE0138126F745F73637269707400426F6F74207363726970747C +S31AFE01382700626F6F745F7363726970745F6461746100000000E6 +S31AFE01383C426F6F74207363726970742074696D656F75742028BA +S31AFE013851313030306D73207265736F6C7574696F6E2900626F4E +S31AFE0138666F745F7363726970745F74696D656F75740025733A39 +S31AFE01387B200000000025732000747275650000000066616C73F5 +S31AFE013890650000002564200030782530325800003A000000202F +S31AFE0138A50000003F3F00000A0000002E2E2025730A0000456EB0 +S31AFE0138BA746572207363726970742C207465726D696E617465DF +S31AFE0138CF207769746820656D707479206C696E650A00000000E2 +S31AFE0138E43E3E2000FFFEFA98FFFEFABCFFFEFB38FFFEFB44FF81 +S31AFE0138F9FEFAD0FFFEFAECFFFEFC4CFFFEFC60FFFEFDD4FFFEA1 +S31AFE01390EFD24FFFEFC7CFFFEFCC0FFFEF918FFFEF918FFFEF93E +S31AFE01392328FFFEF930FFFEF918FFFEF9206C69737420636F6EFC +S31AFE01393866696775726174696F6E206F6E6C79002A2A20696E10 +S31AFE01394D76616C696420656E7472790A00000055706461746591 +S31AFE01396220526564426F6F74206E6F6E2D766F6C6174696C6584 +S31AFE01397720636F6E66696775726174696F6E0000004572726F06 +S31AFE01398C722077726974696E6720636F6E66696720646174613B +S31AFE0139A12061742025703A202578282573290A00000000000078 +S31AFE0139B60000FFFEF6D0FFFEF730FFFEF6E8FFFEF6ECFFFEF762 +S31AFE0139CB00FFFEF7205265717565737420666F7220636F6E66B8 +S31AFE0139E069672076616C75652027257327202D2077726F6E6720 +S31AFE0139F520747970650A0043616E27742066696E6420636F6EFE +S31AFE013A0A6669672076616C756520272573270A0000000000001F +S31AFE013A1F00FFFEF4C0FFFEF4C0FFFEF524FFFEF4E0FFFEF4C093 +S31AFE013A34FFFEF4CC464C41534820636F6E666967757261746992 +S31AFE013A496F6E20636865636B73756D206572726F72206F7220A8 +S31AFE013A5E696E76616C6964206B65790A000000000000FFFF28CE +S31AFE013A7378FFFF2878FFFF2878FFFF2878FFFF2878FFFF2878AB +S31AFE013A88FFFF2878FFFF2878FFFF2878FFFF2878FFFF2878FF0F +S31AFE013A9DFF2878FFFF2878FFFF2878FFFF2878FFFF2878FFFFFA +S31AFE013AB22898FFFF28B8FFFF28D8FFFF28F8FFFF2918FFFF29DA +S31AFE013AC77CFFFF297CFFFF297CFFFF297CFFFF2938FFFF2958A2 +S31AFE013ADCFFFF2958FFFF2958FFFF2958FFFF2958FFFF2958FF56 +S31AFE013AF1FF2958FFFF2958FFFF2958FFFF2958FFFF2958FFFF41 +S31AFE013B062958FFFF2958FFFF2958FFFF2958FFFF2958FFFF2901 +S31AFE013B1B58FFFF2958FFFF2958FFFF2958FFFF2958FFFF2958BD +S31AFE013B30FFFF2958FFFF2958FFFF2958FFFF2958FFFF2958FF01 +S31AFE013B45FF2958FFFF2958FFFF2958FFFF2958FFFF2958FFFFEC +S31AFE013B5A2938FFFF2938FFFF2938FFFF2938FFFF2938FFFF294D +S31AFE013B6F38FFFF2938FFFF2938FFFF2938FFFF2938FFFF293829 +S31AFE013B84FFFF2938FFFF2938FFFF2938FFFF2938FFFF2938FF4D +S31AFE013B99FF28B0FFFF28B0FFFF28D4FFFF28F8FFFF28F8FFFF31 +S31AFE013BAE2938FFFF2938FFFF2938FFFF2938FFFF291CFFFF2915 +S31AFE013BC338FFFF2938FFFF2938FFFF2938FFFF2938FFFF2938D5 +S31AFE013BD8FFFF2938FFFF2938FFFF2938FFFF2938FFFF2938FFF9 +S31AFE013BEDFF2938FFFF2938FFFF2938FFFF2938FFFF2938FFFFE4 +S31AFE013C022938FFFF2938FFFF2938FFFF2938FFFF2938FFFF29A4 +S31AFE013C1738FFFF2938FFFF2938FFFF2938FFFF2938FFFF293880 +S31AFE013C2CFFFF2938FFFF2938FFFF2938FFFF2938FFFF2938FFA4 +S31AFE013C41FF286CFFFF286CFFFF286CFFFF286CFFFF286CFFFF90 +S31AFE013C56286CFFFF286CFFFF286CFFFF286CFFFF286CFFFF2852 +S31AFE013C6B6CFFFF286CFFFF286CFFFF286CFFFF286CFFFF286CF9 +S31AFE013C80FFFF288CFFFF28ACFFFF28CCFFFF28ECFFFF290CFF70 +S31AFE013C95FF2970FFFF2970FFFF2970FFFF2970FFFF292CFFFF67 +S31AFE013CAA294CFFFF294CFFFF294CFFFF294CFFFF294CFFFF2998 +S31AFE013CBF4CFFFF294CFFFF294CFFFF294CFFFF294CFFFF294C60 +S31AFE013CD4FFFF294CFFFF294CFFFF294CFFFF294CFFFF294CFF98 +S31AFE013CE9FF294CFFFF294CFFFF294CFFFF294CFFFF294CFFFF83 +S31AFE013CFE294CFFFF294CFFFF294CFFFF294CFFFF294CFFFF2944 +S31AFE013D134CFFFF294CFFFF294CFFFF294CFFFF294CFFFF294C0B +S31AFE013D283031323334353637383961626364656600000000001F +S31AFE013D3D000000503031004F4B000065436F7320474442207317 +S31AFE013D5274756273205B7769746820526564426F6F745D202DE9 +S31AFE013D67206275696C74204F63742032372032303030202F20E2 +S31AFE013D7C30373A33393A343100000000453031004530330045EE +S31AFE013D9130320042303100FFFF3F54FFFF47BCFFFF3FF8FFFF4E +S31AFE013DA6467CFFFF44CCFFFF47BCFFFF47BCFFFF47BCFFFF41F1 +S31AFE013DBB84FFFF464CFFFF47BCFFFF47BCFFFF47BCFFFF47BCD6 +S31AFE013DD0FFFF4280FFFF47BCFFFF47BCFFFF4184FFFF3FDCFF3C +S31AFE013DE5FF47BCFFFF44CCFFFF4664FFFF47BCFFFF47BCFFFF0C +S31AFE013DFA47BCFFFF427CFFFF47BCFFFF47BCFFFF47BCFFFF47A8 +S31AFE013E0FBCFFFF47BCFFFF47BCFFFF47BCFFFF47BCFFFF47BCD8 +S31AFE013E24FFFF4748FFFF44CCFFFF3F98FFFF47BCFFFF47BCFF13 +S31AFE013E39FF3FE8FFFF47BCFFFF47BCFFFF47BCFFFF462CFFFFD8 +S31AFE013E4E47BCFFFF4198FFFF47BCFFFF47BCFFFF47BCFFFF3F40 +S31AFE013E63D0FFFF4644FFFF44CC00000000303132333435363743 +S31AFE013E7838396162636465660000000030313233343536373896 +S31AFE013E8D3941424344454600000000FFFF6718FFFF6718FFFF55 +S31AFE013EA26718FFFF6718FFFF6718FFFF6718FFFF6718FFFF672E +S31AFE013EB718FFFF6718FFFF6718FFFF6718FFFF6718FFFF671868 +S31AFE013ECCFFFF6718FFFF6718FFFF6718FFFF6658FFFF6658FFEE +S31AFE013EE1FF668CFFFF66C0FFFF66C0FFFF6718FFFF6718FFFF96 +S31AFE013EF66718FFFF6718FFFF66F4FFFF6718FFFF6718FFFF67FF +S31AFE013F0B18FFFF6718FFFF6718FFFF6718FFFF6718FFFF671813 +S31AFE013F20FFFF6718FFFF6718FFFF6718FFFF6718FFFF6718FF17 +S31AFE013F35FF6718FFFF6718FFFF6718FFFF6718FFFF6718FFFF02 +S31AFE013F4A6718FFFF6718FFFF6718FFFF6718FFFF6718FFFF6785 +S31AFE013F5F18FFFF6718FFFF6718FFFF6718FFFF6718FFFF6718BF +S31AFE013F74FFFF6718FFFF6718FFFF6718FFFF66CCFFFF66CCFF5D +S31AFE013F89FF66CCFFFF66CCFFFF66CCFFFF66CCFFFF66CCFFFF2F +S31AFE013F9E66CCFFFF66CCFFFF66CCFFFF66CCFFFF66CCFFFF66B3 +S31AFE013FB3CCFFFF66CCFFFF66CCFFFF66CCFFFF66F4FFFF6718C3 +S31AFE013FC8FFFF673CFFFF6760FFFF6784FFFF67F0FFFF67F0FFE7 +S31AFE013FDDFF67F0FFFF67F0FFFF67A8FFFF67C8FFFF67C8FFFFBA +S31AFE013FF267C8FFFF67C8FFFF67C8FFFF67C8FFFF67C8FFFF676D +S31AFE014007C8FFFF67C8FFFF67C8FFFF67C8FFFF67C8FFFF67C8F6 +S31AFE01401CFFFF67C8FFFF67C8FFFF67C8FFFF67C8FFFF67C8FFAA +S31AFE014031FF67C8FFFF67C8FFFF67C8FFFF67C8FFFF67C8FFFF95 +S31AFE01404667C8FFFF67C8FFFF67C8FFFF67C8FFFF67C8FFFF6718 +S31AFE01405BC8FFFF67C8FFFF67C8FFFF67C8FFFF6748FFFF6748A2 +S31AFE014070FFFF6748FFFF6748FFFF6748FFFF6748FFFF6748FFD6 +S31AFE014085FF6748FFFF6748FFFF6748FFFF6748FFFF6748FFFFC1 +S31AFE01409A6748FFFF6748FFFF6748FFFF6748FFFF6770FFFF671C +S31AFE0140AF90FFFF67B0FFFF67D0FFFF67F0FFFF6858FFFF68584C +S31AFE0140C4FFFF6858FFFF6858FFFF6810FFFF6830FFFF6830FFC5 +S31AFE0140D9FF6830FFFF6830FFFF6830FFFF6830FFFF6830FFFFE0 +S31AFE0140EE6830FFFF6830FFFF6830FFFF6830FFFF6830FFFF6862 +S31AFE01410330FFFF6830FFFF6830FFFF6830FFFF6830FFFF683084 +S31AFE014118FFFF6830FFFF6830FFFF6830FFFF6830FFFF6830FFA0 +S31AFE01412DFF6830FFFF6830FFFF6830FFFF6830FFFF6830FFFF8B +S31AFE0141426830FFFF6830FFFF6830FFFF6830FFFF67B0FFFF678F +S31AFE014157B0FFFF67B0FFFF67B0FFFF67B0FFFF67B0FFFF67B035 +S31AFE01416CFFFF67B0FFFF67B0FFFF67B0FFFF67B0FFFF67B0FFD1 +S31AFE014181FF67B0FFFF67B0FFFF67B0FFFF67B0FFFF67D8FFFF94 +S31AFE01419667F8FFFF6818FFFF6838FFFF6858FFFF68A0FFFF686A +S31AFE0141ABA0FFFF68A0FFFF68A0FFFF68A0FFFF6878FFFF68788C +S31AFE0141C0FFFF6878FFFF6878FFFF6878FFFF6878FFFF6878FF90 +S31AFE0141D5FF6878FFFF6878FFFF6878FFFF6878FFFF6878FFFF7B +S31AFE0141EA6878FFFF6878FFFF6878FFFF6878FFFF6878FFFF68FD +S31AFE0141FF78FFFF6878FFFF6878FFFF6878FFFF6878FFFF6878D8 +S31AFE014214FFFF6878FFFF6878FFFF6878FFFF6878FFFF6878FF3B +S31AFE014229FF6878FFFF6878FFFF6878FFFF6878FFFF67FCFFFFA3 +S31AFE01423E6840FFFF67FCFFFF6840FFFF67FCFFFF6840FFFF674B +S31AFE014253FCFFFF6840FFFF67FCFFFF6840FFFF67FCFFFF6840A1 +S31AFE014268FFFF67FCFFFF6840FFFF67FCFFFF6840FFFF6840FF89 +S31AFE01427DFF6840FFFF6840FFFF6840FFFF6840FFFF6840FFFFEA +S31AFE0142926840FFFF6840FFFF6840FFFF6840FFFF6840FFFF686C +S31AFE0142A740FFFF6840FFFF6840FFFF6840FFFF6840FFFF68407F +S31AFE0142BCFFFF6840FFFF6840FFFF6840FFFF6840FFFF6840FFAB +S31AFE0142D1FF6840FFFF6840FFFF6840FFFF6840FFFF6840FFFF96 +S31AFE0142E66840FFFF6840FFFF6840FFFF6840FFFF6840FFFF6818 +S31AFE0142FB40FFFF6840FFFF6840FFFF6840FFFF6840FFFF68402B +S31AFE014310FFFF6840FFFF6840FFFF6840FFFF6840FFFF6858FF3E +S31AFE014325FF6858FFFF6858FFFF6858FFFF6858FFFF6858FFFFC9 +S31AFE01433A6858FFFF6858FFFF6858FFFF6858FFFF6858FFFF684B +S31AFE01434F58FFFF6858FFFF6858FFFF6858FFFF6858FFFF679807 +S31AFE014364FFFF6798FFFF67CCFFFF6800FFFF6800FFFF6858FF88 +S31AFE014379FF6858FFFF6858FFFF6858FFFF6834FFFF6858FFFF99 +S31AFE01438E6858FFFF6858FFFF6858FFFF6858FFFF6858FFFF68F7 +S31AFE0143A358FFFF6858FFFF6858FFFF6858FFFF6858FFFF6858F2 +S31AFE0143B8FFFF6858FFFF6858FFFF6858FFFF6858FFFF6858FF36 +S31AFE0143CDFF6858FFFF6858FFFF6858FFFF6858FFFF6858FFFF21 +S31AFE0143E26858FFFF6858FFFF6858FFFF6858FFFF6858FFFF68A3 +S31AFE0143F758FFFF6858FFFF6858FFFF6858FFFF68583031323396 +S31AFE01440C3435363738390000303132333435363738396162631C +S31AFE0144216465660000000030313233343536373839414243443B +S31AFE01443645460000000000000000FFFF7240FFFF73F0FFFF735F +S31AFE01444BF0FFFF73F0FFFF73F0FFFF73F0FFFF73F0FFFF73F082 +S31AFE014460FFFF73F0FFFF73F0FFFF73F0FFFF7384FFFF7240FF7B +S31AFE014475FF73F0FFFF73F0FFFF73F0FFFF73F0FFFF73F0FFFF49 +S31AFE01448A73F0FFFF73F0FFFF73F0FFFF73F0FFFF73F0FFFF73C0 +S31AFE01449FF0FFFF7220FFFF73F0FFFF73F0FFFF7318FFFF73F0D7 +S31AFE0144B4FFFF73F0FFFF73F0FFFF73F0FFFF7240000000005EBD +S31AFE0144C9430A003078253038583A2000000000253032580000C6 +S31AFE0144DE00002020000020000000207C0000256300007C0A00BA +S31AFE0144F300202D2061726520796F7520737572652028792F6E50 +S31AFE014508293F2000556E62616C616E63656420737472696E676D +S31AFE01451D210A00416D626967756F757320636F6D6D616E64208E +S31AFE014532272573272C2063686F69636573206172653A20257315 +S31AFE01454700202573000A00000055736167653A0A002020257387 +S31AFE01455C25732025730A00002A2A204572726F723A202573205B +S31AFE014571616C7265616479207370656369666965640A002A2A24 +S31AFE014586204572726F723A20696E76616C6964206E756D626579 +S31AFE01459B72202725732720666F722025730A0000002A2A2045AC +S31AFE0145B072726F723A20696E76616C696420666C6167202725C5 +S31AFE0145C563270A000000002A2A204572726F723A206E6F20640F +S31AFE0145DA656661756C742F6E6F6E2D666C616720617267756DC9 +S31AFE0145EF656E747320737570706F727465640A00004E455441C0 +S31AFE01460453434949000000004F43544554000000556E6B6E6FEA +S31AFE014619776E206572726F7200000066696C65206E6F742066C1 +S31AFE01462E6F756E6400006163636573732076696F6C6174696FC3 +S31AFE0146436E000000006469736B2066756C6C206F7220616C6C17 +S31AFE0146586F636174696F6E20657863656564656400000000699B +S31AFE01466D6C6C6567616C2054465450206F7065726174696F6E73 +S31AFE0146820000756E6B6E6F776E207472616E73666572204944DC +S31AFE0146970066696C6520616C72656164792065786973747300A7 +S31AFE0146AC6E6F20737563682075736572000000006F706572614E +S31AFE0146C174696F6E2074696D6564206F757400736F6D65207333 +S31AFE0146D66F7274206F66206E6574776F726B206572726F72000C +S31AFE0146EB00696E76616C696420706172616D65746572000000ED +S31AFE01470070726F746F636F6C2076696F6C6174696F6E000066D2 +S31AFE014715696C65206973206C6172676572207468616E206275F5 +S31AFE01472A666665720000FFFF8BD4FFFF8BE0FFFF8BECFFFF8B0E +S31AFE01473FF8FFFF8C04FFFF8C10FFFF8C1CFFFF8C28FFFF8C342A +S31AFE014754FFFF8C40FFFF8C4CFFFF8C5847444220636F6E6E65C9 +S31AFE0147696374696F6E20706F7274006764625F706F72740000E3 +S31AFE01477E00004E6574776F726B20646562756720617420626F2A +S31AFE0147936F742074696D6500006E65745F6465627567000000AD +S31AFE0147A855736520424F4F545020666F72206E6574776F726B95 +S31AFE0147BD20636F6E66696775726174696F6E00626F6F74700026 +S31AFE0147D200004C6F63616C204950206164647265737300000023 +S31AFE0147E700626F6F74705F6D795F69700044656661756C742032 +S31AFE0147FC736572766572204950206164647265737300000062EB +S31AFE0148116F6F74705F7365727665725F69700025732E25640A44 +S31AFE01482600006E65745F696F5F7772697465000000006E657429 +S31AFE01483B5F696F5F726561640000000000FFFF9084FFFF90840D +S31AFE014850FFFF9084FFFF9084FFFF9084FFFF9084FFFF9084FFF5 +S31AFE014865FF9084FFFF9084FFFF9084FFFF9084FFFF9084FFFFE0 +S31AFE01487A9084FFFF9084FFFF9084FFFF9084FFFF90B0FFFF900E +S31AFE01488FD0FFFF90F0FFFF9110FFFF9130FFFF9354FFFF935499 +S31AFE0148A4FFFF9354FFFF9354FFFF9150FFFF9170FFFF9170FF54 +S31AFE0148B9FF9170FFFF9170FFFF9170FFFF9170FFFF9170FFFFEB +S31AFE0148CE9170FFFF9170FFFF9170FFFF9170FFFF9170FFFF9144 +S31AFE0148E370FFFF9170FFFF9170FFFF9170FFFF9170FFFF917050 +S31AFE0148F8FFFF9170FFFF9170FFFF9170FFFF9170FFFF9170FFAC +S31AFE01490DFF9170FFFF9170FFFF9170FFFF9170FFFF9170FFFF96 +S31AFE0149229170FFFF9170FFFF9170FFFF9170FFFF9108FFFF9157 +S31AFE01493708FFFF9108FFFF9108FFFF9108FFFF9108FFFF91086B +S31AFE01494CFFFF9108FFFF9108FFFF9108FFFF9108FFFF9108FF5F +S31AFE014961FF9108FFFF9108FFFF9108FFFF9108FFFF9134FFFF1E +S31AFE0149769158FFFF917CFFFF91A0FFFF91C4FFFF926CFFFF9225 +S31AFE01498B6CFFFF926CFFFF926CFFFF91E8FFFF9208FFFF920807 +S31AFE0149A0FFFF9208FFFF9208FFFF9208FFFF9208FFFF9208FF06 +S31AFE0149B5FF9208FFFF9208FFFF9208FFFF9208FFFF9208FFFFF1 +S31AFE0149CA9208FFFF9208FFFF9208FFFF9208FFFF9208FFFF9249 +S31AFE0149DF08FFFF9208FFFF9208FFFF9208FFFF9208FFFF9208BE +S31AFE0149F4FFFF9208FFFF9208FFFF9208FFFF9208FFFF9208FFB2 +S31AFE014A09FF9208FFFF9208FFFF9208FFFF92084E6F206E65740E +S31AFE014A1E776F726B20696E746572666163657320666F756E643B +S31AFE014A330A0000000043616E27742067657420424F4F5450208E +S31AFE014A48696E666F202D206E6574776F726B2064697361626CA2 +S31AFE014A5D6564210A00000049503A20257300002C204465666104 +S31AFE014A72756C74207365727665723A2025730A00000000000022 +S31AFE014A870025642E25642E25642E25640045746865726E657428 +S31AFE014A9C2073656E643A0A0045746865726E65742072656376E3 +S31AFE014AB13A0A006574685F6472765F6473722073686F756C6464 +S31AFE014AC6206E6F742062652063616C6C65643A20766563746F7E +S31AFE014ADB722025642C20646174612025780A00000000000000F9 +S31AFE014AF02E2E2E2045726173652066726F6D2025702D25703A8D +S31AFE014B052000002E0000000A0000002E2E2E2050726F67726129 +S31AFE014B1A6D2066726F6D2025702D25702061742025703A2000C5 +S31AFE014B2F004E6F206572726F72202D206F7065726174696F6E27 +S31AFE014B4420636F6D706C657465000000496E76616C69642046B1 +S31AFE014B594C41534820616464726573730000004572726F7220EA +S31AFE014B6E747279696E6720746F20657261736500000045727234 +S31AFE014B836F7220747279696E6720746F206C6F636B2F756E6C30 +S31AFE014B986F636B004572726F7220747279696E6720746F20706C +S31AFE014BAD726F6772616D0047656E65726963206572726F72005F +S31AFE014BC200004465766963652F726567696F6E206973207772D1 +S31AFE014BD76974652D70726F74656374656400000000464C415365 +S31AFE014BEC48207375622D73797374656D206E6F7420696E6974E6 +S31AFE014C0169616C697A656400000000556E6B6E6F776E206572D0 +S31AFE014C16726F7200000000000000FFFFA2E4FFFFA2F0FFFFA27D +S31AFE014C2BFCFFFFA308FFFFA314FFFFA320FFFFA32CFFFFA338AE +S31AFE014C40457272203D2025780A000000000000004672616D691E +S31AFE014C556E67206572726F72202D20626C6B3A2025782F2578BD +S31AFE014C6A2F25780A0000435243206572726F72202D2072656391 +S31AFE014C7F76643A2025303278253032782C20636F6D70757465A0 +S31AFE014C94643A2025780A0000436865636B73756D206572726F96 +S31AFE014CA972202D2072656376643A2025782C20636F6D70757423 +S31AFE014CBE65643A2025780A00000043616E277420616363657346 +S31AFE014CD3732066696C65000000536F7272792C207A4D6F64652A +S31AFE014CE86D206E6F7420617661696C61626C652079657400544D +S31AFE014CFD696D6564206F7574000000456E64206F662066696C1F +S31AFE014D12650043616E63656C6C6564000000496E76616C6964E0 +S31AFE014D27206672616D696E67004352432F636865636B73756D14 +S31AFE014D3C206572726F720000426C6F636B2073657175656E6314 +S31AFE014D5165206572726F7200000000556E6B6E6F776E206572B2 +S31AFE014D66726F7200000000000000FFFFAC7CFFFFAC70FFFFACF6 +S31AFE014D7B64FFFFAC58FFFFAC4CFFFFAC40FFFFAC34FFFFAC2828 +S31AFE014D90FFFFB028FFFFB028FFFFB020FFFFAFB8FFFFB020FF5D +S31AFE014DA5FFAFC0FFFFAFF8FFFFB000FFFFB010FFFFB010FFFFB9 +S31AFE014DBAB008FFFFB018FFFFAFF8FFFFB030FFFFB010FFFFB072 +S31AFE014DCF18FFFFB018FFFFB020FFFFB028FFFFB030FFFFB0308C +S31AFE014DE4FFFFB030FFFFB030FFFFB030FFFFB030FFFFB030FF60 +S31AFE014DF9FFB018FFFFB018FFFFB018FFFFB018FFFFB600FFFFD5 +S31AFE014E0EB600FFFFB600FFFFB600FFFFB600FFFFB600FFFFB650 +S31AFE014E2300FFFFB600FFFFB600FFFFB600FFFFB600FFFFB600F1 +S31AFE014E38FFFFB600FFFFB600FFFFB600FFFFB600FFFFB620FFBD +S31AFE014E4DFFB640FFFFB660FFFFB680FFFFB6A0FFFFB6FCFFFF0C +S31AFE014E62B6FCFFFFB6FCFFFFB6FCFFFFB6C0FFFFB6E0FFFFB668 +S31AFE014E77E0FFFFB6E0FFFFB6E0FFFFB6E0FFFFB6E0FFFFB6E05D +S31AFE014E8CFFFFB6E0FFFFB6E0FFFFB6E0FFFFB6E0FFFFB6E0FF29 +S31AFE014EA1FFB6E0FFFFB6E0FFFFB6E0FFFFB6E0FFFFB6E0FFFF14 +S31AFE014EB6B6E0FFFFB6E0FFFFB6E0FFFFB6E0FFFFB6E0FFFFB648 +S31AFE014ECBE0FFFFB6E0FFFFB6E0FFFFB6E0FFFFB6E0FFFFB6E009 +S31AFE014EE0FFFFB6E0FFFFB6E0FFFFB6E0FFFFB6E0FFFFB650FF65 +S31AFE014EF5FFB650FFFFB650FFFFB650FFFFB650FFFFB650FFFF90 +S31AFE014F0AB650FFFFB650FFFFB650FFFFB650FFFFB650FFFFB6C3 +S31AFE014F1F50FFFFB650FFFFB650FFFFB650FFFFB650FFFFB670F4 +S31AFE014F34FFFFB694FFFFB6B8FFFFB6DCFFFFB700FFFFB798FF1E +S31AFE014F49FFB798FFFFB798FFFFB798FFFFB724FFFFB744FFFF96 +S31AFE014F5EB744FFFFB744FFFFB744FFFFB744FFFFB744FFFFB7A5 +S31AFE014F7344FFFFB744FFFFB744FFFFB744FFFFB744FFFFB74403 +S31AFE014F88FFFFB744FFFFB744FFFFB744FFFFB744FFFFB744FF33 +S31AFE014F9DFFB744FFFFB744FFFFB744FFFFB744FFFFB744FFFF1E +S31AFE014FB2B744FFFFB744FFFFB744FFFFB744FFFFB744FFFFB751 +S31AFE014FC744FFFFB744FFFFB744FFFFB744FFFFB74425733A20B6 +S31AFE014FDC43616E27742066696E642061646472657373206F6652 +S31AFE014FF1207365727665720A0000005F5F7564705F73656E64D5 +S31AFE015006746F000000007564705F7265637666726F6D202D2034 +S31AFE01501B64726F70706564207061636B6574206F662025642037 +S31AFE01503062797465730A00004275665B25645D2F25703A206257 +S31AFE01504575663A2025702C206C656E3A2025642F25642C206EA7 +S31AFE01505A6578743A2025700A000046726565206C697374203D37 +S31AFE01506F2025700A005F5F656E65745F706F6C6C3A206E6F2091 +S31AFE0150846D6F726520627566666572730A00000000000000FF49 +S31AFE015099FFCC34FFFFCC8CFFFFCF08FFFFCCE0FFFFCCE0FFFF81 +S317FE0150AECD88FFFFCDC8FFFFCE64FFFFCEA8FFFFCEE8AB +S31AFE0150C0000000007C2F2D5C7C2D00005B2D725D205B2D765D27 +S31AFE0150D5205B2D68203C686F73743E5D205B2D6D207B5446545E +S31AFE0150EA50207C2078797A4D4F44454D7D5D205B2D62203C6221 +S31AFE0150FF6173655F616464726573733E5D203C66696C655F6EB5 +S31AFE015114616D653E000000000000337400007C20FE012B98000B +S31AFE0151290000000000000000000000FE005B8CFE005BA4FE008C +S31AFE01513E5B7CFE005B64FE0059F4FE0058A8FE005FA0FE005728 +S31AFE01515368FE005760000037340000000008003E2879B800001B +S31AFE015168FE0060B4FE00B218FE00B218FE00B218FE00B218FEFD +S31AFE01517D00B218FE00B218FE00B218FE00B218FE00B218FE0030 +S31AFE015192B218FE00B218FE00B218FE00B218FE00B218FE00B269 +S31AFE0151A718FE00B218FE00B218FE00B218FE00B218FE00B218EE +S31AFE0151BCFE00B218FE00B218FE00B218FE00B218FE00B218FEF3 +S31AFE0151D100B218FE00B218FE00B218FE00B218FE00B218FE00DC +S31AFE0151E6B218FE00B218FE00B218FE00B218FE00B218FE00B215 +S31AFE0151FB18FE00B218FE00B218FE00B218FE00B218FE00B2189A +S31AFE015210FE00B218FE00B218FE00B218FE00B218FE00B218FE9E +S31AFE01522500B218FE00B218FE00B218FE00B218FE00B218FE0087 +S31AFE01523AB218FE00B218FE00B218FE00B218FE00B218FE00B2C0 +S31AFE01524F18FE00B2180000000000000000000000000000000065 +S31AFE01526400000000000000000000000000000000000000000030 +S31AFE0152790000000000000000000000000000000000000000001B +S31AFE01528E00000000000000000000000000000000000000000006 +S31AFE0152A3000000000000000000000000000000000000000000F1 +S31AFE0152B8000000000000000000000000000000000000000000DC +S31AFE0152CD000000000000000000000000000000000000000000C7 +S31AFE0152E2000000000000000000000000000000000000000000B2 +S31AFE0152F70000000000000000000000000000000000000000009D +S31AFE01530C00000000000000000000000000000000000000000087 +S31AFE01532100000000000000000000000000000000000000000072 +S31AFE0153360000000000000000000000000000000000000000005D +S31AFE01534B00000000000000000000000000000000000000000048 +S31AFE01536000000000000000000000000000000000000000000033 +S31AFE0153750000000000000000000000000000000000000000001E +S31AFE01538A00000000000000000000000000000000000000000009 +S31AFE01539F000000000000000000000000000000000000000000F4 +S31AFE0153B4000000000000000000000000000000000000000000DF +S31AFE0153C9000000000000000000000000000000000000000000CA +S31AFE0153DE000000000000000000000000000000000000000000B5 +S31AFE0153F3000000000000000000000000000000000000000000A0 +S31AFE0154080000000000000000000000000000000000000000008A +S31AFE01541D000000000000000000000000000000FE000000FE0079 +S31AFE01543200000040000000000000FF000000FF00000000100012 +S31AFE0154470001000000FA100000FA100000000000040100000031 +S31AFE01545C000000000000000000800000000000000000000000B6 +S31AFE01547100000000000000000000000000000000000000FE0023 +S31AFE01548685D8FE008634000000000000000000000000FFFFFFFA +S31AFE01549BFF0000000000000000FE0096800000000000000000E4 +S31AFE0154B00001235000000000000000000000000000000000006E +S31AFE0154C5000000FFFFFFFEFFFFFFFE0000000000001E140000A5 +S31AFE0154DA1E14000001F400000000000000000000000000000091 +S31AFE0154EF0000000000FE00E440FE00E8E8FE00E6D400001021CA +S31AFE01550420423063408450A560C670E781089129A14AB16BC157 +S31AFE0155198CD1ADE1CEF1EF123102103273225252B5429472F72B +S31AFE01552E62D693398318B37BA35AD3BDC39CF3FFE3DE2462343D +S31AFE015543430420140164E674C744A45485A56AB54B8528950932 +S31AFE015558E5EEF5CFC5ACD58D365326721611063076D766F65652 +S31AFE01556D9546B4B75BA77A97198738F7DFE7FED79DC7BC48C435 +S31AFE01558258E5688678A70840186128023823C9CCD9EDE98EF9B4 +S31AFE015597AF89489969A90AB92B5AF54AD47AB76A961A710A505E +S31AFE0155AC3A332A12DBFDCBDCFBBFEB9E9B798B58BB3BAB1A6C5C +S31AFE0155C1A67C874CE45CC52C223C030C601C41EDAEFD8FCDECA0 +S31AFE0155D6DDCDAD2ABD0B8D689D497E976EB65ED54EF43E132E6A +S31AFE0155EB321E510E70FF9FEFBEDFDDCFFCBF1BAF3A9F598F78F3 +S31AFE015600918881A9B1CAA1EBD10CC12DF14EE16F108000A1308B +S31AFE015615C220E3500440257046606783B99398A3FBB3DAC33DEE +S31AFE01562AD31CE37FF35E02B1129022F332D2423552146277722E +S31AFE01563F56B5EAA5CB95A88589F56EE54FD52CC50D34E224C33A +S31AFE01565414A004817466644754244405A7DBB7FA879997B8E734 +S31AFE0156695FF77EC71DD73C26D336F2069116B0665776764615DA +S31AFE01567E5634D94CC96DF90EE92F99C889E9B98AA9AB584448C0 +S31AFE015693657806682718C008E1388228A3CB7DDB5CEB3FFB1E83 +S31AFE0156A88BF99BD8ABBBBB9A4A755A546A377A160AF11AD02A89 +S31AFE0156BDB33A92FD2EED0FDD6CCD4DBDAAAD8B9DE88DC97C26AE +S31AFE0156D26C075C644C453CA22C831CE00CC1EF1FFF3ECF5DDF4E +S31AFE0156E77CAF9BBFBA8FD99FF86E177E364E555E742E933EB20C +S31AFE0156FC0ED11EF0000000000000000000000000000003E800BC +S31AFE0157110000000000000000000000000000000000000000007E +S31AFE01572600000000000000000000000000000000000000000069 +S31AFE01573B00000000000000000000000000FE013160FE01315044 +S31AFE015750FE0130E0FE003E38FE013074FE013044FE01303CFE3D +S31AFE015765003A5CFE013034FE01301CFE013000FE003C60FE011E +S31AFE01577A2FF8FE012FB4FE012FB0FE004534FE012F68FE012FF3 +S31AFE01578F44FE012F3CFE004794FE012FA8FE012F78FE012F705F +S31AFE0157A4FE004644FE0130D8FE0130A4FE01307CFE0038A8FE02 +S31AFE0157B901299CFE012984FE012978FE002864FE012970FE01A3 +S31AFE0157CE2948FE01292CFE002A54FE012EFCFE012EE8FE012E15 +S31AFE0157E3E0FE003714FE012F34FE012F08FE012F00FE002F7020 +S31AFE0157F8FE012928FE01290CFE0128F4FE002B4CFE0128ECFE72 +S31AFE01580D0128D8FE0128D0FE0029E0FE012BE4FE012BD8000072 +S31AFE015822330CFE004C4CFE013810FE0137FC000000000000001E +S31AFE015837010000000100000000FE013828FE01381CFE0138105C +S31AFE01584C000000010000000400000000FE013864FE01383CFE31 +S31AFE015861013810000000010000000200000000FE0147CCFE01D0 +S31AFE01587647A800000000000000010000000100000000FE0147E1 +S31AFE01588BE8FE0147D4FE0147CC000000000000000500000000EA +S31AFE0158A0FE014810FE0147F4FE0147CC00000000000000050046 +S31AFE0158B5000000FE014774FE0147600000000000000001000078 +S31AFE0158CA000200000000FE01479CFE014780000000000000001A +S31AFE0158DF010000000100000000FE002CE800000000FE00DFA816 +S31AFE0158F400000000FE012BA0FE005BBC0000335C000000004EDE +S314FE015909800021000000000000000000000000E9 S705FE000100FB
--- a/packages/hal/powerpc/mbx/current/misc/redboot_ROM.cfg +++ b/packages/hal/powerpc/mbx/current/misc/redboot_ROM.cfg @@ -49,12 +49,6 @@ cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SU inferred_value 0 }; -cdl_component CYGBLD_BUILD_REDBOOT { - user_value 1 -}; - - - cdl_option CYGSEM_HAL_ROM_MONITOR { user_value 1 }; @@ -62,3 +56,9 @@ cdl_option CYGSEM_HAL_ROM_MONITOR { cdl_component CYG_HAL_STARTUP { user_value ROM }; + +cdl_component CYGBLD_BUILD_REDBOOT { + user_value 1 +}; + +
new file mode 100644 --- /dev/null +++ b/packages/hal/powerpc/ppc40x/current/ChangeLog @@ -0,0 +1,25 @@ +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//===========================================================================
new file mode 100644 --- /dev/null +++ b/packages/hal/powerpc/ppc40x/current/cdl/hal_powerpc_ppc40x.cdl @@ -0,0 +1,82 @@ +# ==================================================================== +# +# hal_powerpc_ppc40x.cdl +# +# PowerPC/PPC40x variant architectural HAL package configuration data +# +# ==================================================================== +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): jskov +# Contributors: gthomas +# Date: 2000-08-27 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_HAL_POWERPC_PPC40x { + display "PowerPC 40x variant HAL" + parent CYGPKG_HAL_POWERPC + hardware + include_dir cyg/hal + define_header hal_powerpc_ppc40x.h + description " + The PowerPC 40x variant HAL package provides generic support + for this processor variant. It is also necessary to + select a specific target platform HAL package." + + # Note: This should be sub-variant specific to reduce memory use. + define_proc { + puts $cdl_header "#define CYGHWR_HAL_VSR_TABLE (CYGHWR_HAL_POWERPC_VECTOR_BASE + 0x3000)" + puts $cdl_header "#define CYGHWR_HAL_VIRTUAL_VECTOR_TABLE (CYGHWR_HAL_VSR_TABLE + 0x200)" + } + + cdl_component CYGPKG_HAL_POWERPC_PPC403 { + display "PowerPC 403 microprocessor" + default_value 1 + implements CYGINT_HAL_POWERPC_VARIANT + description " + The PowerPC 403 microprocessor." + + cdl_option CYGHWR_HAL_POWERPC_FPU { + display "Variant FPU support" + calculated 1 + } + + cdl_option CYGPKG_HAL_POWERPC_MSBFIRST { + display "CPU Variant big-endian" + calculated 1 + } + } + + define_proc { + puts $::cdl_header "#include <pkgconf/hal_powerpc.h>" + } + + compile var_intr.c var_misc.c variant.S +}
new file mode 100644 --- /dev/null +++ b/packages/hal/powerpc/ppc40x/current/include/var_cache.h @@ -0,0 +1,192 @@ +#ifndef CYGONCE_VAR_CACHE_H +#define CYGONCE_VAR_CACHE_H +//============================================================================= +// +// var_cache.h +// +// Variant HAL cache control API +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributors:nickg, jskov +// Date: 2000-04-02 +// Purpose: Variant cache control API +// Description: The macros defined here provide the HAL APIs for handling +// cache control operations on the PPC60x variant CPUs. +// Usage: Is included via the architecture cache header: +// #include <cyg/hal/hal_cache.h> +// ... +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> +#include <cyg/infra/cyg_type.h> + +#include <cyg/hal/ppc_regs.h> + +#include <cyg/hal/plf_cache.h> + + +//----------------------------------------------------------------------------- +// Cache dimensions + +// Data cache +#define HAL_DCACHE_SIZE 8192 // Size of data cache in bytes +#define HAL_DCACHE_LINE_SIZE 16 // Size of a data cache line +#define HAL_DCACHE_WAYS 2 // Associativity of the cache + +// Instruction cache +#define HAL_ICACHE_SIZE 16384 // Size of cache in bytes +#define HAL_ICACHE_LINE_SIZE 16 // Size of a cache line +#define HAL_ICACHE_WAYS 2 // Associativity of the cache + +#define HAL_DCACHE_SETS (HAL_DCACHE_SIZE/(HAL_DCACHE_LINE_SIZE*HAL_DCACHE_WAYS)) +#define HAL_ICACHE_SETS (HAL_ICACHE_SIZE/(HAL_ICACHE_LINE_SIZE*HAL_ICACHE_WAYS)) + +//----------------------------------------------------------------------------- +// Global control of data cache + +// Enable the data cache - this is implicit whenever the MMU is turned on +#define HAL_DCACHE_ENABLE() + +// Disable the data cache +#define HAL_DCACHE_DISABLE() + +// Invalidate the entire cache +#define HAL_DCACHE_INVALIDATE_ALL() \ + CYG_MACRO_START \ + int _i_, _indx_; \ + _indx_ = 0; \ + for (_i_ = 0; _i_ < HAL_DCACHE_SETS; _i_++) { \ + asm volatile ("dccci 0,%0;" :: "r"(_indx_)); \ + _indx_ += HAL_DCACHE_LINE_SIZE; \ + } \ + CYG_MACRO_END + +// Synchronize the contents of the cache with memory. +#define HAL_DCACHE_SYNC() + +// Query the state of the data cache +#define HAL_DCACHE_IS_ENABLED(_state_) \ + CYG_MACRO_START \ + (_state_) = 0; \ + CYG_MACRO_END + +// Set the data cache refill burst size +//#define HAL_DCACHE_BURST_SIZE(_size_) + +// Set the data cache write mode +//#define HAL_DCACHE_WRITE_MODE( _mode_ ) + +//#define HAL_DCACHE_WRITETHRU_MODE 0 +//#define HAL_DCACHE_WRITEBACK_MODE 1 + +// Load the contents of the given address range into the data cache +// and then lock the cache so that it stays there. +//#define HAL_DCACHE_LOCK(_base_, _size_) + +// Undo a previous lock operation +//#define HAL_DCACHE_UNLOCK(_base_, _size_) + +// Unlock entire cache +#define HAL_DCACHE_UNLOCK_ALL() + +//----------------------------------------------------------------------------- +// Data cache line control + +// Allocate cache lines for the given address range without reading its +// contents from memory. +//#define HAL_DCACHE_ALLOCATE( _base_ , _size_ ) + +// Write dirty cache lines to memory and invalidate the cache entries +// for the given address range. +//#define HAL_DCACHE_FLUSH( _base_ , _size_ ) + +// Invalidate cache lines in the given range without writing to memory. +//#define HAL_DCACHE_INVALIDATE( _base_ , _size_ ) + +// Write dirty cache lines to memory for the given address range. +//#define HAL_DCACHE_STORE( _base_ , _size_ ) + +// Preread the given range into the cache with the intention of reading +// from it later. +//#define HAL_DCACHE_READ_HINT( _base_ , _size_ ) + +// Preread the given range into the cache with the intention of writing +// to it later. +//#define HAL_DCACHE_WRITE_HINT( _base_ , _size_ ) + +// Allocate and zero the cache lines associated with the given range. +//#define HAL_DCACHE_ZERO( _base_ , _size_ ) + +//----------------------------------------------------------------------------- +// Global control of Instruction cache + +// Enable the instruction cache +#define HAL_ICACHE_ENABLE() + +// Disable the instruction cache +#define HAL_ICACHE_DISABLE() + +// Invalidate the entire cache +#define HAL_ICACHE_INVALIDATE_ALL() + +// Synchronize the contents of the cache with memory. +#define HAL_ICACHE_SYNC() + +// Query the state of the instruction cache +#define HAL_ICACHE_IS_ENABLED(_state_) \ + CYG_MACRO_START \ + (_state_) = 0; \ + CYG_MACRO_END + +// Set the instruction cache refill burst size +//#define HAL_ICACHE_BURST_SIZE(_size_) + +// Load the contents of the given address range into the instruction cache +// and then lock the cache so that it stays there. +//#define HAL_ICACHE_LOCK(_base_, _size_) + +// Undo a previous lock operation +//#define HAL_ICACHE_UNLOCK(_base_, _size_) + +// Unlock entire cache +#define HAL_ICACHE_UNLOCK_ALL() + +//----------------------------------------------------------------------------- +// Instruction cache line control + +// Invalidate cache lines in the given range without writing to memory. +//#define HAL_ICACHE_INVALIDATE( _base_ , _size_ ) + +//----------------------------------------------------------------------------- +#endif // ifndef CYGONCE_VAR_CACHE_H +// End of var_cache.h
new file mode 100644 --- /dev/null +++ b/packages/hal/powerpc/ppc40x/current/include/var_intr.h @@ -0,0 +1,54 @@ +#ifndef CYGONCE_VAR_INTR_H +#define CYGONCE_VAR_INTR_H +//============================================================================= +// +// var_intr.h +// +// Variant HAL interrupt and clock support +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributors:nickg, jskov, jlarmour, hmt +// Date: 2000-04-02 +// Purpose: Variant interrupt support +// Description: The macros defined here provide the HAL APIs for handling +// interrupts and the clock on the PPC60x variant CPUs. +// Usage: Is included via the architecture interrupt header: +// #include <cyg/hal/hal_intr.h> +// ... +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +// No builtin interrupt controller in the PPC40x CPUs. + +//----------------------------------------------------------------------------- +#endif // ifndef CYGONCE_VAR_INTR_H +// End of var_intr.h
new file mode 100644 --- /dev/null +++ b/packages/hal/powerpc/ppc40x/current/include/var_regs.h @@ -0,0 +1,90 @@ +#ifndef CYGONCE_HAL_VAR_REGS_H +#define CYGONCE_HAL_VAR_REGS_H + +//========================================================================== +// +// var_regs.h +// +// PowerPC 40x variant CPU definitions +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors: jskov,gthomas +// Date: 2000-08-27 +// Purpose: Provide PPC40x register definitions +// Description: Provide PPC40x register definitions +// The short difinitions (sans CYGARC_REG_) are exported only +// if CYGARC_HAL_COMMON_EXPORT_CPU_MACROS is defined. +// Usage: Included via the acrhitecture register header: +// #include <cyg/hal/ppc_regs.h> +// ... +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +//-------------------------------------------------------------------------- +// Cache +#define CYGARC_REG_HID0 1008 + +#ifdef CYGARC_HAL_COMMON_EXPORT_CPU_MACROS +#define HID0 CYGARC_REG_HID0 +#endif // ifdef CYGARC_HAL_COMMON_EXPORT_CPU_MACROS + +//-------------------------------------------------------------------------- +// MMU control. +#ifdef CYGARC_HAL_COMMON_EXPORT_CPU_MACROS + +#define EVPR 982 // Exception vector prefix +#define M_PID 945 // Process ID + +#define M_EPN_EPNMASK 0xfffff000 // effective page no mask +#define M_EPN_EV 0x00000040 // entry valid +#define M_EPN_SIZE(n) (n<<7) // entry size (0=1K, 1=4K, ... 7=16M) + +#define M_RPN_RPNMASK 0xfffff000 // real page no mask +#define M_RPN_EX 0x00000200 // execute enable +#define M_RPN_WR 0x00000100 // write enable +#define M_RPN_W 0x00000008 // write-through (when cache enabled) +#define M_RPN_I 0x00000004 // cache inhibited +#define M_RPN_M 0x00000002 // memory coherent (not implemented) +#define M_RPN_G 0x00000001 // guarded + +#define CYGARC_TLBWE(_id_, _hi_, _lo_) \ + asm volatile ("tlbwe %1,%0,0; tlbwe %2,%0,1" :: "r"(_id_), "r"(_hi_), "r"(_lo_)); + +#define CYGARC_TLBRE(_id_, _hi_, _lo_) \ + asm volatile ("tlbre %0,%2,0; tlbre %1,%2,1" : "=r"(_hi_), "=r"(_lo_) : "r"(_id_)); + +#endif // ifdef CYGARC_HAL_COMMON_EXPORT_CPU_MACROS + +//----------------------------------------------------------------------------- +#endif // ifdef CYGONCE_HAL_VAR_REGS_H +// End of var_regs.h
new file mode 100644 --- /dev/null +++ b/packages/hal/powerpc/ppc40x/current/include/variant.inc @@ -0,0 +1,176 @@ +#ifndef CYGONCE_HAL_VARIANT_INC +#define CYGONCE_HAL_VARIANT_INC +##============================================================================= +## +## variant.inc +## +## PPC40x family assembler header file +## +##============================================================================= +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +##============================================================================= +#######DESCRIPTIONBEGIN#### +## +## Author(s): jskov +## Contributors:jskov, gthomas +## Date: 2000-08-27 +## Purpose: MPCxxx family definitions. +## Description: This file contains various definitions and macros that are +## useful for writing assembly code for the PPC40x CPU family. +## Usage: +## #include <cyg/hal/variant.inc> +## ... +## +## +######DESCRIPTIONEND#### +## +##============================================================================= + +#include <pkgconf/hal.h> + +#undef CYG_MSR_COMMON +#define CYG_MSR_COMMON (MSR_ME | MSR_RI) + +#include <cyg/hal/arch.inc> + +##----------------------------------------------------------------------------- +## PPC40x defined vectors + + .macro hal_extra_vectors + .endm + +##----------------------------------------------------------------------------- +## PPC40x CPU initialization +## +## Initialize CPU to a post-reset state, ensuring the ground doesn''t +## shift under us while we try to set things up. + + .macro hal_cpu_init + # Set up MSR (disable MMU for now) + lwi r3,(CYG_MSR & ~(MSR_IR | MSR_DR)) + sync + mfmsr r4 + mtmsr r3 + sync + .endm + +##----------------------------------------------------------------------------- +## PPC40x monitor initialization + +#ifndef CYGPKG_HAL_PPC_MON_DEFINED + +#if defined(CYG_HAL_STARTUP_ROM) || \ + ( defined(CYG_HAL_STARTUP_RAM) && \ + !defined(CYGSEM_HAL_USE_ROM_MONITOR)) + + .macro hal_mon_init +#ifdef CYGSEM_HAL_POWERPC_COPY_VECTORS + # If we are starting up from ROM and want vectors in RAM + # or we are starting in RAM and NOT using a ROM monitor, + # copy exception handler code to 0. + lwi r3,rom_vectors # r3 = rom start + lwi r4,0 # r4 = ram start + lwi r5,rom_vectors_end # r5 = rom end + cmplw r3,r5 # skip if no vectors + beq 2f + + subi r3,r3,4 + subi r4,r4,4 + subi r5,r5,4 +1: + lwzu r0,4(r3) # get word from ROM + stwu r0,4(r4) # store in RAM + cmplw r3,r5 # compare + blt 1b # loop if not yet done +2: + + # Ensure that the vectors will come from 0x0000 + lwi r4,0 + mtspr EVPR,r4 +#endif + + # Next initialize the VSR table. This happens whether the + # vectors were copied to RAM or not. + + # First fill with exception handlers + lwi r3,cyg_hal_default_exception_vsr + lwi r4,hal_vsr_table + subi r4,r4,4 + li r5,CYGNUM_HAL_VSR_COUNT +1: stwu r3,4(r4) + subi r5,r5,1 + cmpwi r5,0 + bne 1b + + # Then fill in the special vectors + lwi r3,cyg_hal_default_interrupt_vsr + lwi r4,hal_vsr_table + stw r3,CYGNUM_HAL_VECTOR_INTERRUPT*4(r4) + stw r3,CYGNUM_HAL_VECTOR_DECREMENTER*4(r4) + .endm + +#elif defined(CYG_HAL_STARTUP_RAM) && defined(CYGSEM_HAL_USE_ROM_MONITOR) + + # Initialize the VSR table entries + # We only take control of the interrupt vectors, + # the rest are left to the ROM for now... + + .macro hal_mon_init + lwi r3,cyg_hal_default_interrupt_vsr + lwi r4,hal_vsr_table + stw r3,CYGNUM_HAL_VECTOR_INTERRUPT*4(r4) + stw r3,CYGNUM_HAL_VECTOR_DECREMENTER*4(r4) + .endm + + +#else + + .macro hal_mon_init + + .endm + +#endif + + +#define CYGPKG_HAL_PPC_MON_DEFINED + +#endif // CYGPKG_HAL_PPC_MON_DEFINED + +##----------------------------------------------------------------------------- +## PPC40x exception state handling + .macro hal_variant_save regs + .endm + + .macro hal_variant_load regs + .endm + +##----------------------------------------------------------------------------- +## Indicate that the ISR tables are defined in variant.S + +#define CYG_HAL_PPC_ISR_TABLES_DEFINED + +#------------------------------------------------------------------------------ +#endif // ifndef CYGONCE_HAL_VARIANT_INC +# end of variant.inc
new file mode 100644 --- /dev/null +++ b/packages/hal/powerpc/ppc40x/current/src/var_intr.c @@ -0,0 +1,55 @@ +//========================================================================== +// +// var_intr.c +// +// PowerPC variant interrupt handlers +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors: jskov +// Date: 2000-02-11 +// Purpose: PowerPC variant interrupt handlers +// Description: This file contains code to handle interrupt related issues +// on the PowerPC variant. +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <pkgconf/hal.h> +#include <cyg/infra/cyg_type.h> + +externC void +hal_variant_IRQ_init(void) +{ + // No special init required for 40x series. +} + +// ------------------------------------------------------------------------- +// EOF var_intr.c
new file mode 100644 --- /dev/null +++ b/packages/hal/powerpc/ppc40x/current/src/var_misc.c @@ -0,0 +1,136 @@ +//========================================================================== +// +// var_misc.c +// +// HAL implementation miscellaneous functions +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors: jskov +// Date: 2000-02-04 +// Purpose: HAL miscellaneous functions +// Description: This file contains miscellaneous functions provided by the +// HAL. +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <pkgconf/hal.h> + +#define CYGARC_HAL_COMMON_EXPORT_CPU_MACROS +#include <cyg/hal/ppc_regs.h> +#include <cyg/infra/cyg_type.h> + +#include <cyg/hal/hal_mem.h> + +//-------------------------------------------------------------------------- +void hal_variant_init(void) +{ +} + + +//-------------------------------------------------------------------------- +// Variant specific idle thread action. +bool +hal_variant_idle_thread_action( cyg_uint32 count ) +{ + // Let architecture idle thread action run + return true; +} + +//--------------------------------------------------------------------------- +// Use MMU resources to map memory regions. +// Takes and returns an int used to ID the MMU resource to use. This ID +// is increased as resources are used and should be used for subsequent +// invocations. +// +// The PPC4xx CPUs do not have BATs. Fortunately we don't currently +// use the MMU, so we can simulate BATs by using the TLBs. +int +cyg_hal_map_memory (int id, CYG_ADDRESS virt, CYG_ADDRESS phys, + cyg_int32 size, cyg_uint8 flags) +{ + cyg_uint32 epn, rpn; + int sv, lv, max_tlbs; + + // There are 64 TLBs. + max_tlbs = 64; + + // Use the smallest "size" value which is big enough (round up) + for (sv = 0, lv = 0x400; sv < 8; sv++, lv <<= 2) { + if (lv >= size) break; + } + + // Note: the process ID comes from the PID register (always 0) + epn = (virt & M_EPN_EPNMASK) | M_EPN_EV | M_EPN_SIZE(sv); + rpn = (phys & M_RPN_RPNMASK) | M_RPN_EX | M_RPN_WR; + + if (flags & CYGARC_MEMDESC_CI) { + rpn |= M_RPN_I; + } + + if (flags & CYGARC_MEMDESC_GUARDED) + rpn |= M_RPN_G; + + CYGARC_TLBWE(id, epn, rpn); + id++; + + // Make caches default disabled when MMU is disabled. + + return id; +} + + +// Initialize MMU to a sane (NOP) state. +// +// Initialize TLBs with 0, Valid bits unset. +void +cyg_hal_clear_MMU (void) +{ + cyg_uint32 tlbhi = 0; + cyg_uint32 tlblo = 0; + int id, max_tlbs; + cyg_uint32 tlb[64][2]; + + // There are 64 TLBs. + max_tlbs = 64; + + CYGARC_MTSPR (M_PID, 0); + + for (id = 0; id < max_tlbs; id++) { + CYGARC_TLBRE(id, tlb[id][0], tlb[id][1]); + CYGARC_TLBWE(id, tlbhi, tlblo); + } + + // Make caches default disabled when MMU is disabled. +} + +//-------------------------------------------------------------------------- +// End of var_misc.c
new file mode 100644 --- /dev/null +++ b/packages/hal/powerpc/ppc40x/current/src/variant.S @@ -0,0 +1,77 @@ +##============================================================================= +## +## variant.S +## +## PowerPC PPC40x variant code +## +##============================================================================= +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +##============================================================================= +#######DESCRIPTIONBEGIN#### +## +## Author(s): jskov +## Contributors:jskov,gthomas +## Date: 2000-08-27 +## Purpose: PowerPC PPC40x variant code +## Description: Variant specific code for PowerPC 40x CPUs. +## +######DESCRIPTIONEND#### +## +##============================================================================= + +#include <cyg/hal/variant.inc> + +#--------------------------------------------------------------------------- +# Interrupt vector tables. +# These tables contain the isr, data and object pointers used to deliver +# interrupts to user code. + + .data + + .extern hal_default_decrementer_isr + .extern hal_default_isr + + .globl hal_interrupt_handlers +hal_interrupt_handlers: + .long hal_default_decrementer_isr + .rept CYGNUM_HAL_ISR_COUNT-1 + .long hal_default_isr + .endr + + .globl hal_interrupt_data +hal_interrupt_data: + .rept CYGNUM_HAL_ISR_COUNT + .long 0 + .endr + + .globl hal_interrupt_objects +hal_interrupt_objects: + .rept CYGNUM_HAL_ISR_COUNT + .long 0 + .endr + +##----------------------------------------------------------------------------- +## end of variant.S +
--- a/packages/hal/sh/arch/current/ChangeLog +++ b/packages/hal/sh/arch/current/ChangeLog @@ -1,3 +1,26 @@ +2000-10-31 Jesper Skov <jskov@redhat.com> + + + * include/mod_7707a.h: Moved to SH3 HAL. + * include/mod_7708.h: Same. + * include/mod_7709a.h: Same. + * include/mod_7729.h: Same. + * include/sh3_sci.h: Same. + * include/sh3_scif.h: Same. + * src/sh3_sci.c: Same. + * src/sh3_scif.c: Same. + + * include/hal_cache.h: Moved SH3 code out to new SH3 HAL. + * cdl/hal_sh.cdl: Same. + * include/hal_intr.h: Same. + * include/sh_regs.h: Same. + * src/hal_misc.c: Same. + * src/hal_mk_defs.c: Same. + + * src/vectors.S: Changed to support SH4. Moved CPU post-reset init + code to variant HALs. Moved interrupt decoding to variant HAL + macros. Moved cache code to variant HALs. + 2000-10-24 Jesper Skov <jskov@redhat.com> * src/vectors.S (hal_hw_init): Added errata comment.
--- a/packages/hal/sh/arch/current/cdl/hal_sh.cdl +++ b/packages/hal/sh/arch/current/cdl/hal_sh.cdl @@ -52,13 +52,7 @@ cdl_package CYGPKG_HAL_SH { necessary to select a specific target platform HAL package." - cdl_interface CYGINT_HAL_SH_VARIANT { - display "Number of variant implementations in this configuration" - no_define - requires 1 == CYGINT_HAL_SH_VARIANT - } - - compile hal_misc.c context.S sh_stub.c sh3_sci.c sh3_scif.c + compile hal_misc.c context.S sh_stub.c # The "-o file" is a workaround for CR100958 - without it the # output file would end up in the source directory under CygWin. @@ -111,74 +105,12 @@ cdl_package CYGPKG_HAL_SH { description " CPU type and endian mode can be selected using these option." - cdl_option CYGPKG_HAL_SH_7707A { - display "SH 7707A microprocessor" - implements CYGINT_HAL_SH_VARIANT - implements CYGINT_HAL_SH_CPG_V2 - default_value 0 + cdl_interface CYGINT_HAL_SH_VARIANT { + display "Number of variant implementations in this configuration" no_define - define -file=system.h CYGPKG_HAL_SH_7707A - description " - The SH3 7707A microprocessor. This is an embedded part that in - addition to the SH3 processor core has built in peripherals - such as memory controllers, serial ports, LCD controller and - timers/counters." - define_proc { - puts $cdl_system_header "#define CYGBLD_HAL_CPU_MODULES_H <cyg/hal/mod_7707a.h>" - } - } - - cdl_option CYGPKG_HAL_SH_7708 { - display "SH 7708 microprocessor" - implements CYGINT_HAL_SH_VARIANT - implements CYGINT_HAL_SH_CPG_V1 - default_value 0 - no_define - define -file=system.h CYGPKG_HAL_SH_7708 - description " - The SH3 7708 microprocessor. This is an embedded part that in - addition to the SH3 processor core has built in peripherals - such as memory controllers, serial ports and - timers/counters." - define_proc { - puts $cdl_system_header "#define CYGBLD_HAL_CPU_MODULES_H <cyg/hal/mod_7708.h>" - } + requires 1 == CYGINT_HAL_SH_VARIANT } - - cdl_option CYGPKG_HAL_SH_7709A { - display "SH 7709A microprocessor" - implements CYGINT_HAL_SH_VARIANT - implements CYGINT_HAL_SH_CPG_V3 - default_value 0 - no_define - define -file=system.h CYGPKG_HAL_SH_7709A - description " - The SH3 7709A microprocessor. This is an embedded part that in - addition to the SH3 processor core has built in peripherals - such as memory controllers, DMA controllers, A/D and D/A - converters, serial ports and timers/counters." - define_proc { - puts $cdl_system_header "#define CYGBLD_HAL_CPU_MODULES_H <cyg/hal/mod_7709a.h>" - } - } - - cdl_option CYGPKG_HAL_SH_7729 { - display "SH 7729 microprocessor" - implements CYGINT_HAL_SH_VARIANT - implements CYGINT_HAL_SH_CPG_V3 - default_value 0 - no_define - define -file=system.h CYGPKG_HAL_SH_7729 - description " - The SH3 7729 microprocessor. This is an embedded part that in - addition to the SH3 processor core has built in peripherals - such as memory controllers, serial ports, and timers/counters, - and a DSP engine." - define_proc { - puts $cdl_system_header "#define CYGBLD_HAL_CPU_MODULES_H <cyg/hal/mod_7729.h>" - } - } - + cdl_option CYGHWR_HAL_SH_BIGENDIAN { display "Use big-endian mode" default_value 1 @@ -187,50 +119,6 @@ cdl_package CYGPKG_HAL_SH { } } - cdl_component CYGPKG_HAL_SH_INTERRUPT { - display "Interrupt controls" - flavor none - no_define - description " - Initial interrupt settings can be specified using these option." - - cdl_option CYGHWR_HAL_SH_IRQ_HANDLE_SPURIOUS_INTERRUPTS { - display "Handle spurious interrupts" - default_value 0 - description " - The SH3 may generate spurious interrupts with INTEVT = 0 - when changing the BL bit of the status register. Enabling - this option will cause such interrupts to be identified - very early in the interrupt handler and be ignored. Given - that the SH HAL uses the I-mask to control interrupts, - these spurious interrupts should not occur, and so there - should be no reason to include the special handling code." - } - - cdl_option CYGHWR_HAL_SH_IRQ_USE_IRQLVL { - display "Use IRQ0-3 pins as IRL input" - default_value 0 - description " - It is possible for the IRQ0-3 pins to be used as IRL - inputs by enabling this option." - } - - cdl_option CYGHWR_HAL_SH_IRQ_ENABLE_IRLS_INTERRUPTS { - display "Enable IRLS interrupt pins" - default_value 0 - active_if CYGHWR_HAL_SH_IRQ_USE_IRQLVL - description " - IRLS interrupt pins must be specifically - activated. When they are, they will cause the same - type of interrupt as those caused by the IRL pins. If - IRL and IRLS pins signal an interrupt at the same - time, the highest level interrupt will be generated. - Only available on some cores, and probably share pins - with other interrupt sources (PINT) which cannot be - used in this configuration." - } - } - cdl_component CYGPKG_HAL_SH_CACHE { display "Cache controls" flavor none @@ -244,183 +132,6 @@ cdl_package CYGPKG_HAL_SH { description " Controls whether caches should be enabled on startup." } - - cdl_option CYGHWR_HAL_SH_CACHE_MODE_P0 { - display "Select cache mode set for P0/U0/P3 at startup" - default_value { "WRITE_BACK" } - legal_values { "WRITE_BACK" "WRITE_THROUGH" } - flavor data - description " - Controls what cache mode the cache should be put in at - startup for areas P0, U0 and P3. Write-back mode improves - performance by letting dirty data to be kept in the - cache for a period of time, allowing mutiple writes to - the same cache line to be written back to memory in - one memory transaction. In Write-through mode, each - individual write will cause a memory transaction." - } - - cdl_option CYGHWR_HAL_SH_CACHE_MODE_P1 { - display "Select cache mode set for P1 at startup" - default_value { "WRITE_BACK" } - legal_values { "WRITE_BACK" "WRITE_THROUGH" } - flavor data - description " - Controls what cache mode the cache should be put in at - startup for area P1. Write-back mode improves - performance by letting dirty data to be kept in the - cache for a period of time, allowing mutiple writes to - the same cache line to be written back to memory in - one memory transaction. In Write-through mode, each - individual write will cause a memory transaction." - } - } - - - cdl_component CYGHWR_HAL_SH_CLOCK_SETTINGS { - display "SH on-chip generic clock controls" - description " - The various clocks used by the system are controlled by - these options, some of which are derived from platform - settings." - flavor none - no_define - - cdl_interface CYGINT_HAL_SH_CPG_V1 { - display "Clock pulse generator type 1" - } - - cdl_interface CYGINT_HAL_SH_CPG_V2 { - display "Clock pulse generator type 2" - } - - cdl_interface CYGINT_HAL_SH_CPG_V3 { - display "Clock pulse generator type 3" - } - - - cdl_option CYGHWR_HAL_SH_TMU_PRESCALE_0 { - display "TMU counter 0 prescaling" - description " - The peripheral clock is driving the counter used for - the real-time clock, prescaled by this factor." - flavor data - legal_values { 4 16 64 256 } - default_value 4 - } - - - cdl_option CYGHWR_HAL_SH_CLOCK_CKIO { - display "CKIO clock" - no_define - flavor data - # CKIO is either XTAL or PLL2 output - calculated { CYGINT_HAL_SH_CPG_V1 ? ( - (CYGHWR_HAL_SH_OOC_CLOCK_MODE == 7) - ? (CYGHWR_HAL_SH_OOC_XTAL) - : CYGHWR_HAL_SH_PLL2_OUTPUT - ) - : CYGINT_HAL_SH_CPG_V2 ? ( - (CYGHWR_HAL_SH_OOC_CLOCK_MODE == 2) - ? (CYGHWR_HAL_SH_OOC_XTAL) - : CYGHWR_HAL_SH_PLL2_OUTPUT - ) - : CYGINT_HAL_SH_CPG_V3 ? ( - (CYGHWR_HAL_SH_OOC_CLOCK_MODE == 7) - ? (CYGHWR_HAL_SH_OOC_XTAL) - : CYGHWR_HAL_SH_PLL2_OUTPUT - ) - : 0 } - } - - cdl_option CYGHWR_HAL_SH_PLL1_OUTPUT { - display "The clock output from PLL1" - no_define - flavor data - calculated { CYGHWR_HAL_SH_CLOCK_CKIO * CYGHWR_HAL_SH_OOC_PLL_1 } - } - - cdl_option CYGHWR_HAL_SH_PLL2_OUTPUT { - display "The clock output from PLL2" - no_define - flavor data - calculated { CYGINT_HAL_SH_CPG_V1 ? ( - (CYGHWR_HAL_SH_OOC_XTAL * CYGHWR_HAL_SH_OOC_PLL_2) - ) - : CYGINT_HAL_SH_CPG_V2 ? ( - (CYGHWR_HAL_SH_OOC_CLOCK_MODE == 5) - ? (CYGHWR_HAL_SH_OOC_XTAL / 2) - : (CYGHWR_HAL_SH_OOC_CLOCK_MODE == 6) - ? (14745600) - : (CYGHWR_HAL_SH_OOC_CLOCK_MODE == 7) - ? (11075600) - : (CYGHWR_HAL_SH_OOC_XTAL * CYGHWR_HAL_SH_OOC_PLL_2) - ) - : CYGINT_HAL_SH_CPG_V3 ? ( - (CYGHWR_HAL_SH_OOC_XTAL * CYGHWR_HAL_SH_OOC_PLL_2) - ) - : 0 } - } - - - cdl_option CYGHWR_HAL_SH_DIVIDER1_INPUT { - display "The clock input to divider 1" - no_define - flavor data - # DIV1 input is either PLL2 output or PLL1 output - calculated { (CYGHWR_HAL_SH_OOC_PLL_1 == 0) - ? CYGHWR_HAL_SH_PLL2_OUTPUT - : CYGHWR_HAL_SH_PLL1_OUTPUT } - } - - cdl_option CYGHWR_HAL_SH_DIVIDER2_INPUT { - display "The clock input to divider 2" - no_define - flavor data - # DIV2 input is either PLL2 output or PLL1 output - calculated { CYGINT_HAL_SH_CPG_V1 ? ( - (CYGHWR_HAL_SH_OOC_CLOCK_MODE == 3 || CYGHWR_HAL_SH_OOC_CLOCK_MODE == 4) - ? CYGHWR_HAL_SH_PLL2_OUTPUT - : CYGHWR_HAL_SH_PLL1_OUTPUT - ) - : CYGINT_HAL_SH_CPG_V2 ? ( - (CYGHWR_HAL_SH_OOC_CLOCK_MODE <= 2) - ? CYGHWR_HAL_SH_PLL1_OUTPUT - : CYGHWR_HAL_SH_PLL2_OUTPUT - ) - : CYGINT_HAL_SH_CPG_V3 ? ( - (CYGHWR_HAL_SH_OOC_CLOCK_MODE == 3 || CYGHWR_HAL_SH_OOC_CLOCK_MODE == 4) - ? CYGHWR_HAL_SH_PLL2_OUTPUT - : CYGHWR_HAL_SH_PLL1_OUTPUT - ) - : 0 } - } - - cdl_option CYGHWR_HAL_SH_PROCESSOR_SPEED { - display "Processor clock speed (MHz)" - flavor data - calculated { CYGHWR_HAL_SH_DIVIDER1_INPUT / CYGHWR_HAL_SH_OOC_DIVIDER_1 } - description " - The core (CPU, cache and MMU) speed is computed from - the input clock speed and the divider 1 setting." - } - - cdl_option CYGHWR_HAL_SH_BOARD_SPEED { - display "Platform bus clock speed (MHz)" - flavor data - calculated { CYGHWR_HAL_SH_CLOCK_CKIO } - description " - The platform bus speed is CKIO." - } - - cdl_option CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED { - display "Processor on-chip peripheral clock speed (MHz)" - flavor data - calculated { CYGHWR_HAL_SH_DIVIDER2_INPUT / CYGHWR_HAL_SH_OOC_DIVIDER_2 } - description " - The peripheral speed is computed from the input clock - speed and the divider 2 settings." - } } # Real-time clock/counter specifics
--- a/packages/hal/sh/arch/current/include/hal_cache.h +++ b/packages/hal/sh/arch/current/include/hal_cache.h @@ -50,246 +50,8 @@ //============================================================================= #include <pkgconf/system.h> -#include <pkgconf/hal.h> -#include <cyg/infra/cyg_type.h> -#include <cyg/hal/hal_io.h> // HAL_READ/WRITE macros - -#include CYGBLD_HAL_CPU_MODULES_H // cache module specs - -#include <cyg/hal/sh_regs.h> // CYGARC_REG_ definitions - -//----------------------------------------------------------------------------- -// Cache dimensions - one unified cache - -#define HAL_CACHE_UNIFIED - -#define HAL_UCACHE_SIZE CYGARC_SH_MOD_CAC_SIZE -#define HAL_UCACHE_LINE_SIZE CYGARC_SH_MOD_CAC_LINE_SIZE -#define HAL_UCACHE_WAYS CYGARC_SH_MOD_CAC_WAYS - -// Cache addressing information -#define CYGARC_REG_CACHE_ADDRESS_BASE CYGARC_SH_MOD_CAC_ADDRESS_BASE -#define CYGARC_REG_CACHE_ADDRESS_TOP CYGARC_SH_MOD_CAC_ADDRESS_TOP -#define CYGARC_REG_CACHE_ADDRESS_STEP CYGARC_SH_MOD_CAC_ADDRESS_STEP - -// Writing this to a cache address entry forces a flush of the line if -// it is dirty. -#define CYGARC_REG_CACHE_ADDRESS_FLUSH CYGARC_SH_MOD_CAC_ADDRESS_FLUSH - -#define HAL_UCACHE_SETS (HAL_UCACHE_SIZE/(HAL_UCACHE_LINE_SIZE*HAL_UCACHE_WAYS)) - -//----------------------------------------------------------------------------- -// Global control of cache - -// This is all handled in assembly (see vectors.S) due to a requirement about -// not fiddling the cache from cachable memory. - -externC void cyg_hal_cache_enable(void); -externC void cyg_hal_cache_disable(void); -externC void cyg_hal_cache_invalidate_all(void); -externC void cyg_hal_cache_sync(void); -externC void cyg_hal_cache_sync_region(cyg_haladdress base, - cyg_haladdrword len); -externC void cyg_hal_cache_write_mode(int mode); - -// Enable the cache -#define HAL_UCACHE_ENABLE() cyg_hal_cache_enable() - -// Disable the cache -#define HAL_UCACHE_DISABLE() cyg_hal_cache_disable() - -// Invalidate the entire cache -#define HAL_UCACHE_INVALIDATE_ALL() cyg_hal_cache_invalidate_all() - -// Synchronize the contents of the cache with memory. -#define HAL_UCACHE_SYNC() cyg_hal_cache_sync() - -// Query the state of the cache (does not affect the caching) -#define HAL_UCACHE_IS_ENABLED(_state_) \ - CYG_MACRO_START \ - HAL_READ_UINT32(CYGARC_REG_CCR, (_state_)); \ - (_state_) &= ~CYGARC_REG_CCR_CE; \ - CYG_MACRO_END - -// Set the cache refill burst size -//#define HAL_UCACHE_BURST_SIZE(_size_) - -// Set the cache write mode -#define HAL_UCACHE_WRITE_MODE( _mode_ ) \ - CYG_MACRO_START \ - cyg_uint32 _m_; \ - if (HAL_UCACHE_WRITETHRU_MODE == _mode_) \ - _m_ = CYGARC_REG_CCR_WT; \ - else \ - _m_ = CYGARC_REG_CCR_CB; \ - cyg_hal_cache_write_mode(_m_); \ - CYG_MACRO_END - -#define HAL_UCACHE_WRITETHRU_MODE 0 -#define HAL_UCACHE_WRITEBACK_MODE 1 - -// This macro allows the client to specify separate modes for the two -// regions. -#define HAL_UCACHE_WRITE_MODE_SH( _mode_ ) cyg_hal_cache_write_mode(_mode_) - -// Load the contents of the given address range into the cache -// and then lock the cache so that it stays there. -//#define HAL_UCACHE_LOCK(_base_, _size_) - -// Undo a previous lock operation -//#define HAL_UCACHE_UNLOCK(_base_, _size_) - -// Unlock entire cache -//#define HAL_UCACHE_UNLOCK_ALL() - -//----------------------------------------------------------------------------- -// Cache line control - -// Allocate cache lines for the given address range without reading its -// contents from memory. -//#define HAL_UCACHE_ALLOCATE( _base_ , _size_ ) - -// Write dirty cache lines to memory and invalidate the cache entries -// for the given address range. -#define HAL_UCACHE_FLUSH( _base_ , _size_ ) \ - cyg_hal_cache_sync_region(_base_, _size_) - -// Invalidate cache lines in the given range without writing to memory. -//#define HAL_UCACHE_INVALIDATE( _base_ , _size_ ) - -// Write dirty cache lines to memory for the given address range. -//#define HAL_UCACHE_STORE( _base_ , _size_ ) - - -// Preread the given range into the cache with the intention of reading -// from it later. -//#define HAL_UCACHE_READ_HINT( _base_ , _size_ ) - -// Preread the given range into the cache with the intention of writing -// to it later. -//#define HAL_UCACHE_WRITE_HINT( _base_ , _size_ ) -// Allocate and zero the cache lines associated with the given range. -//#define HAL_UCACHE_ZERO( _base_ , _size_ ) - - -//----------------------------------------------------------------------------- -// Data and instruction cache macros map onto the both-cache macros - -//----------------------------------------------------------------------------- -// Global control of data cache - -#define HAL_DCACHE_SIZE HAL_UCACHE_SIZE -#define HAL_DCACHE_LINE_SIZE HAL_UCACHE_LINE_SIZE -#define HAL_DCACHE_WAYS HAL_UCACHE_WAYS -#define HAL_DCACHE_SETS HAL_UCACHE_SETS - -// Enable the data cache -#define HAL_DCACHE_ENABLE() HAL_UCACHE_ENABLE() - -// Disable the data cache -#define HAL_DCACHE_DISABLE() HAL_UCACHE_DISABLE() - -// Invalidate the entire cache -#define HAL_DCACHE_INVALIDATE_ALL() HAL_UCACHE_INVALIDATE_ALL() - -// Synchronize the contents of the cache with memory. -#define HAL_DCACHE_SYNC() HAL_UCACHE_SYNC() - -// Query the state of the data cache -#define HAL_DCACHE_IS_ENABLED(_state_) HAL_UCACHE_IS_ENABLED(_state_) - -// Set the data cache refill burst size -//#define HAL_DCACHE_BURST_SIZE(_size_) - -// Set the data cache write mode -//#define HAL_DCACHE_WRITE_MODE( _mode_ ) - -//#define HAL_DCACHE_WRITETHRU_MODE 0 -//#define HAL_DCACHE_WRITEBACK_MODE 1 - -// Load the contents of the given address range into the data cache -// and then lock the cache so that it stays there. -//#define HAL_DCACHE_LOCK(_base_, _size_) - -// Undo a previous lock operation -//#define HAL_DCACHE_UNLOCK(_base_, _size_) - -// Unlock entire cache -//#define HAL_DCACHE_UNLOCK_ALL() - -//----------------------------------------------------------------------------- -// Data cache line control - -// Allocate cache lines for the given address range without reading its -// contents from memory. -//#define HAL_DCACHE_ALLOCATE( _base_ , _size_ ) - -// Write dirty cache lines to memory and invalidate the cache entries -// for the given address range. -#define HAL_DCACHE_FLUSH( _base_ , _size_ ) HAL_UCACHE_FLUSH( _base_, _size_ ) +#include <cyg/hal/var_cache.h> // get variant cache handling -// Invalidate cache lines in the given range without writing to memory. -//#define HAL_DCACHE_INVALIDATE( _base_ , _size_ ) - -// Write dirty cache lines to memory for the given address range. -//#define HAL_DCACHE_STORE( _base_ , _size_ ) - -// Preread the given range into the cache with the intention of reading -// from it later. -//#define HAL_DCACHE_READ_HINT( _base_ , _size_ ) - -// Preread the given range into the cache with the intention of writing -// to it later. -//#define HAL_DCACHE_WRITE_HINT( _base_ , _size_ ) - -// Allocate and zero the cache lines associated with the given range. -//#define HAL_DCACHE_ZERO( _base_ , _size_ ) - -//----------------------------------------------------------------------------- -// Global control of Instruction cache - -#define HAL_ICACHE_SIZE HAL_UCACHE_SIZE -#define HAL_ICACHE_LINE_SIZE HAL_UCACHE_LINE_SIZE -#define HAL_ICACHE_WAYS HAL_UCACHE_WAYS -#define HAL_ICACHE_SETS HAL_UCACHE_SETS - -// Enable the instruction cache -#define HAL_ICACHE_ENABLE() HAL_UCACHE_ENABLE() - -// Disable the instruction cache -#define HAL_ICACHE_DISABLE() HAL_UCACHE_DISABLE() - -// Invalidate the entire cache -#define HAL_ICACHE_INVALIDATE_ALL() HAL_UCACHE_INVALIDATE_ALL() - - -// Synchronize the contents of the cache with memory. -#define HAL_ICACHE_SYNC() HAL_UCACHE_SYNC() - -// Query the state of the instruction cache -#define HAL_ICACHE_IS_ENABLED(_state_) HAL_UCACHE_IS_ENABLED(_state_) - -// Set the instruction cache refill burst size -//#define HAL_ICACHE_BURST_SIZE(_size_) - -// Load the contents of the given address range into the instruction cache -// and then lock the cache so that it stays there. - -//#define HAL_ICACHE_LOCK(_base_, _size_) - -// Undo a previous lock operation -//#define HAL_ICACHE_UNLOCK(_base_, _size_) - -// Unlock entire cache -//#define HAL_ICACHE_UNLOCK_ALL() - -//----------------------------------------------------------------------------- -// Instruction cache line control - -// Invalidate cache lines in the given range without writing to memory. -//#define HAL_ICACHE_INVALIDATE( _base_ , _size_ ) - -//----------------------------------------------------------------------------- #endif // ifndef CYGONCE_HAL_CACHE_H // End of hal_cache.h
--- a/packages/hal/sh/arch/current/include/hal_intr.h +++ b/packages/hal/sh/arch/current/include/hal_intr.h @@ -51,13 +51,14 @@ //========================================================================== #include <pkgconf/hal.h> -#include CYGBLD_HAL_CPU_MODULES_H // INTC module selection + +#include <cyg/hal/var_intr.h> // More include statements below. First part of this file must be // usable for both assembly and C files, so only use defines here. //-------------------------------------------------------------------------- -// SH3 exception vectors. These correspond to VSRs and are the values +// SH exception vectors. These correspond to VSRs and are the values // to use for HAL_VSR_GET/SET // // Note that exceptions are decoded - there is a VSR slot for each exception @@ -72,27 +73,29 @@ #define CYGNUM_HAL_VECTOR_TLBERROR_WRITE 6 // TLB prot violation s #define CYGNUM_HAL_VECTOR_DATA_ACCESS 7 // address error (load) #define CYGNUM_HAL_VECTOR_DATA_WRITE 8 // address error (store) -// define CYGNUM_HAL_VECTOR_RESERVED_9 9 -// define CYGNUM_HAL_VECTOR_RESERVED_10 10 +// RESERVED 9-10 #define CYGNUM_HAL_VECTOR_TRAP 11 // unconditional trap #define CYGNUM_HAL_VECTOR_ILLEGAL_INSTRUCTION 12 // reserved instruction #define CYGNUM_HAL_VECTOR_ILLEGAL_SLOT_INSTRUCTION 13 // illegal instruction in delay slot -// define CYGNUM_HAL_VECTOR_RESERVED_14 14 +#define CYGNUM_HAL_VECTOR_NMI 14 // NMI #define CYGNUM_HAL_VECTOR_INSTRUCTION_BP 15 // user breakpoint -#define CYG_VECTOR_IS_INTERRUPT(v) \ - (CYGNUM_HAL_VECTOR_INSTRUCTION_BP < (v)) - #define CYGNUM_HAL_VECTOR_INTERRUPT 16 // all interrupts +#ifndef CYG_VECTOR_IS_INTERRUPT +# define CYG_VECTOR_IS_INTERRUPT(v) (CYGNUM_HAL_VECTOR_INSTRUCTION_BP < (v)) +#endif + #define CYGNUM_HAL_VSR_MIN CYGNUM_HAL_VECTOR_POWERON -#define CYGNUM_HAL_VSR_MAX CYGNUM_HAL_VECTOR_INTERRUPT +#ifndef CYGNUM_HAL_VSR_MAX +# define CYGNUM_HAL_VSR_MAX CYGNUM_HAL_VECTOR_INTERRUPT +#endif #define CYGNUM_HAL_VSR_COUNT ( CYGNUM_HAL_VSR_MAX + 1 ) -#define CYGNUM_HAL_VSR_EXCEPTION_COUNT (CYGNUM_HAL_VECTOR_INSTRUCTION_BP-CYGNUM_HAL_VECTOR_POWERON+1) - - +#ifndef CYGNUM_HAL_VSR_EXCEPTION_COUNT +# define CYGNUM_HAL_VSR_EXCEPTION_COUNT (CYGNUM_HAL_VECTOR_INSTRUCTION_BP-CYGNUM_HAL_VECTOR_POWERON+1) +#endif // The decoded interrupts. #define CYGNUM_HAL_INTERRUPT_NMI 0 @@ -128,74 +131,24 @@ #define CYGNUM_HAL_INTERRUPT_REF_RCMI 30 #define CYGNUM_HAL_INTERRUPT_REF_ROVI 31 -#define CYGNUM_HAL_ISR_MAX CYGNUM_HAL_INTERRUPT_REF_ROVI +#ifndef CYGNUM_HAL_ISR_MAX +# define CYGNUM_HAL_ISR_MAX CYGNUM_HAL_INTERRUPT_REF_ROVI +#endif -//---------------------------------------------------------------------------- -// Additional vectors provided by INTC V2 +#define CYGNUM_HAL_ISR_MIN CYGNUM_HAL_INTERRUPT_NMI +#define CYGNUM_HAL_ISR_COUNT ( CYGNUM_HAL_ISR_MAX - CYGNUM_HAL_ISR_MIN + 1 ) -//#ifdef CYGARC_SH_MOD_INTC_V2 // FIXME -#define CYGNUM_HAL_INTERRUPT_RESERVED_5C0 32 -#define CYGNUM_HAL_INTERRUPT_HUDI_HUDI 33 -#define CYGNUM_HAL_INTERRUPT_IRQ_IRQ0 34 -#define CYGNUM_HAL_INTERRUPT_IRQ_IRQ1 35 -#define CYGNUM_HAL_INTERRUPT_IRQ_IRQ2 36 -#define CYGNUM_HAL_INTERRUPT_IRQ_IRQ3 37 -#define CYGNUM_HAL_INTERRUPT_IRQ_IRQ4 38 -#define CYGNUM_HAL_INTERRUPT_IRQ_IRQ5 39 -#define CYGNUM_HAL_INTERRUPT_RESERVED_6C0 40 -#define CYGNUM_HAL_INTERRUPT_RESERVED_6E0 41 -#define CYGNUM_HAL_INTERRUPT_PINT_PINT07 42 -#define CYGNUM_HAL_INTERRUPT_PINT_PINT8F 43 -#define CYGNUM_HAL_INTERRUPT_RESERVED_740 44 -#define CYGNUM_HAL_INTERRUPT_RESERVED_760 45 -#define CYGNUM_HAL_INTERRUPT_RESERVED_780 46 -#define CYGNUM_HAL_INTERRUPT_RESERVED_7A0 47 -#define CYGNUM_HAL_INTERRUPT_RESERVED_7C0 48 -#define CYGNUM_HAL_INTERRUPT_RESERVED_7E0 59 -#define CYGNUM_HAL_INTERRUPT_DMAC_DEI0 50 -#define CYGNUM_HAL_INTERRUPT_DMAC_DEI1 51 -#define CYGNUM_HAL_INTERRUPT_DMAC_DEI2 52 -#define CYGNUM_HAL_INTERRUPT_DMAC_DEI3 53 -#define CYGNUM_HAL_INTERRUPT_IRDA_ERI1 54 -#define CYGNUM_HAL_INTERRUPT_IRDA_RXI1 55 -#define CYGNUM_HAL_INTERRUPT_IRDA_BRI1 56 -#define CYGNUM_HAL_INTERRUPT_IRDA_TXI1 57 -#define CYGNUM_HAL_INTERRUPT_SCIF_ERI2 58 -#define CYGNUM_HAL_INTERRUPT_SCIF_RXI2 59 -#define CYGNUM_HAL_INTERRUPT_SCIF_BRI2 60 -#define CYGNUM_HAL_INTERRUPT_SCIF_TXI2 61 -#define CYGNUM_HAL_INTERRUPT_ADC_ADI 62 +// The vector used by the Real time clock +#ifndef CYGNUM_HAL_INTERRUPT_RTC +# define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_INTERRUPT_TMU0_TUNI0 +#endif -#ifdef CYGARC_SH_MOD_INTC_V2 // FIXME - -#undef CYGNUM_HAL_ISR_MAX -#define CYGNUM_HAL_ISR_MAX CYGNUM_HAL_INTERRUPT_ADC_ADI - -#endif // CYGARC_SH_MOD_INTC_V2 - -//---------------------------------------------------------------------------- -// Additional vectors provided by INTC V3 - -//#ifdef CYGARC_SH_MOD_INTC_V3 // FIXME -#define CYGNUM_HAL_INTERRUPT_LCDC_LCDI 63 -#define CYGNUM_HAL_INTERRUPT_PCC_PCC0 64 -#define CYGNUM_HAL_INTERRUPT_PCC_PCC1 65 - -#ifdef CYGARC_SH_MOD_INTC_V3 // FIXME - -#undef CYGNUM_HAL_ISR_MAX -#define CYGNUM_HAL_ISR_MAX CYGNUM_HAL_INTERRUPT_PCC_PCC1 - -#endif // CYGARC_SH_MOD_INTC_V3 - -// CYGNUM_HAL_ISR_COUNT must match CYG_ISR_TABLE_SIZE defined in vectors.S. -#define CYGNUM_HAL_ISR_MIN CYGNUM_HAL_INTERRUPT_NMI -#define CYGNUM_HAL_ISR_COUNT ( CYGNUM_HAL_ISR_MAX + 1 ) - +//-------------------------------------------------------------------------- // Exception vectors. These are the values used when passed out to an // external exception handler using cyg_hal_deliver_exception() -// The exception indexes are EXPEVT/0x20 +// The exception indexes are EXPEVT/0x20. Variants may define additional +// exception vectors. #define CYGNUM_HAL_EXCEPTION_POWERON 0 // power-on #define CYGNUM_HAL_EXCEPTION_RESET 1 // reset @@ -206,23 +159,21 @@ #define CYGNUM_HAL_EXCEPTION_TLBERROR_WRITE 6 // TLB prot violation s #define CYGNUM_HAL_EXCEPTION_DATA_ACCESS 7 // address error (load) #define CYGNUM_HAL_EXCEPTION_DATA_WRITE 8 // address error (store) -// define CYGNUM_HAL_EXCEPTION_RESERVED_9 9 -// define CYGNUM_HAL_EXCEPTION_RESERVED_10 10 #define CYGNUM_HAL_EXCEPTION_TRAP 11 // unconditional trap #define CYGNUM_HAL_EXCEPTION_ILLEGAL_INSTRUCTION 12 // reserved instruction #define CYGNUM_HAL_EXCEPTION_ILLEGAL_SLOT_INSTRUCTION 13 // illegal instruction in delay slot -// define CYGNUM_HAL_EXCEPTION_RESERVED_14 14 #define CYGNUM_HAL_EXCEPTION_INSTRUCTION_BP 15 // user breakpoint #define CYGNUM_HAL_EXCEPTION_MIN CYGNUM_HAL_EXCEPTION_POWERON -#define CYGNUM_HAL_EXCEPTION_MAX CYGNUM_HAL_EXCEPTION_INSTRUCTION_BP + +#ifndef CYGNUM_HAL_EXCEPTION_MAX +# define CYGNUM_HAL_EXCEPTION_MAX CYGNUM_HAL_EXCEPTION_INSTRUCTION_BP +#endif + #define CYGNUM_HAL_EXCEPTION_COUNT \ ( CYGNUM_HAL_EXCEPTION_MAX - CYGNUM_HAL_EXCEPTION_MIN + 1 ) -// The vector used by the Real time clock -#define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_INTERRUPT_TMU0_TUNI0 - #ifndef __ASSEMBLER__ #include <cyg/infra/cyg_type.h>
deleted file mode 100644 --- a/packages/hal/sh/arch/current/include/mod_7707a.h +++ /dev/null @@ -1,83 +0,0 @@ -#ifndef CYGONCE_HAL_MOD_77xx_H -#define CYGONCE_HAL_MOD_77xx_H - -//============================================================================= -// -// mod_7707a.h -// -// List modules available on CPU -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jskov -// Contributors:jskov -// Date: 2000-06-08 -// Purpose: Define modules (and versions) available on this CPU. -// Usage: Included from <cyg/hal/sh_regs.h> -// -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -//----------------------------------------------------------------------------- -// Modules provided by the CPU - -#define CYGARC_SH_MOD_BCN_V2 -#define CYGARC_SH_MOD_INTC_V2 -#define CYGARC_SH_MOD_INTC_V3 -#define CYGARC_SH_MOD_IRDA -#define CYGARC_SH_MOD_SCIF -#define CYGARC_SH_MOD_PFC -#define CYGARC_SH_MOD_UBC_V1 -#define CYGARC_SH_MOD_CPG_V2 - -//----------------------------------------------------------------------------- -// Extra details for Cache Module (CAC) - -// Cache dimenions - one unified cache -#define CYGARC_SH_MOD_CAC_SIZE 16384 // Size of cache in bytes -#define CYGARC_SH_MOD_CAC_LINE_SIZE 16 // Size of a cache line -#define CYGARC_SH_MOD_CAC_WAYS 4 // Associativity of the cache - -// Cache addressing information -// way: bits 13 - 12 -// entry: bits 11 - 4 -#define CYGARC_SH_MOD_CAC_ADDRESS_BASE 0xf0000000 -#define CYGARC_SH_MOD_CAC_ADDRESS_TOP 0xf0004000 -#define CYGARC_SH_MOD_CAC_ADDRESS_STEP 0x00000010 -// U : bit 1 -// V : bit 0 -// Writing zero to both forces a flush of the line if it is dirty. -#define CYGARC_SH_MOD_CAC_ADDRESS_FLUSH 0x00000000 - -//----------------------------------------------------------------------------- -// Extra details for interrupt handling -#define CYGARC_SH_SOFTWARE_IP_UPDATE - -#endif // CYGONCE_HAL_MOD_77xx_H
deleted file mode 100644 --- a/packages/hal/sh/arch/current/include/mod_7708.h +++ /dev/null @@ -1,79 +0,0 @@ -#ifndef CYGONCE_HAL_MOD_77xx_H -#define CYGONCE_HAL_MOD_77xx_H - -//============================================================================= -// -// mod_7708.h -// -// List modules available on CPU -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jskov -// Contributors:jskov -// Date: 2000-03-16 -// Purpose: Define modules (and versions) available on this CPU. -// Usage: Included from <cyg/hal/sh_regs.h> -// -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -//----------------------------------------------------------------------------- -// Modules provided by the CPU - -#define CYGARC_SH_MOD_SCI_V2 -#define CYGARC_SH_MOD_UBC_V1 -#define CYGARC_SH_MOD_CPG_V1 - - -//----------------------------------------------------------------------------- -// Extra details for Cache Module (CAC) - -// Cache dimenions - one unified cache -#define CYGARC_SH_MOD_CAC_SIZE 8192 // Size of cache in bytes -#define CYGARC_SH_MOD_CAC_LINE_SIZE 16 // Size of a cache line -#define CYGARC_SH_MOD_CAC_WAYS 4 // Associativity of the cache - -// Cache addressing information -// way: bits 12 - 11 -// entry: bits 10 - 4 -#define CYGARC_SH_MOD_CAC_ADDRESS_BASE 0xf0000000 -#define CYGARC_SH_MOD_CAC_ADDRESS_TOP 0xf0002000 -#define CYGARC_SH_MOD_CAC_ADDRESS_STEP 0x00000010 -// U : bit 1 -// V : bit 0 -// Writing zero to both forces a flush of the line if it is dirty. -#define CYGARC_SH_MOD_CAC_ADDRESS_FLUSH 0x00000000 - -//----------------------------------------------------------------------------- -// Extra details for interrupt handling -#define CYGARC_SH_SOFTWARE_IP_UPDATE - -#endif // CYGONCE_HAL_MOD_77xx_H
deleted file mode 100644 --- a/packages/hal/sh/arch/current/include/mod_7709a.h +++ /dev/null @@ -1,83 +0,0 @@ -#ifndef CYGONCE_HAL_MOD_77xx_H -#define CYGONCE_HAL_MOD_77xx_H - -//============================================================================= -// -// mod_7709a.h -// -// List modules available on CPU -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jskov -// Contributors:jskov -// Date: 2000-03-16 -// Purpose: Define modules (and versions) available on this CPU. -// Usage: Included from <cyg/hal/sh_regs.h> -// -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -//----------------------------------------------------------------------------- -// Modules provided by the CPU - -#define CYGARC_SH_MOD_BCN_V2 -#define CYGARC_SH_MOD_INTC_V2 -#define CYGARC_SH_MOD_IRDA -#define CYGARC_SH_MOD_SCIF -#define CYGARC_SH_MOD_PFC -#define CYGARC_SH_MOD_UBC_V2 -#define CYGARC_SH_MOD_DMAC -#define CYGARC_SH_MOD_CPG_V3 - -//----------------------------------------------------------------------------- -// Extra details for Cache Module (CAC) - -// Cache dimenions - one unified cache -#define CYGARC_SH_MOD_CAC_SIZE 16384 // Size of cache in bytes -#define CYGARC_SH_MOD_CAC_LINE_SIZE 16 // Size of a cache line -#define CYGARC_SH_MOD_CAC_WAYS 4 // Associativity of the cache - -// Cache addressing information -// way: bits 13 - 12 -// entry: bits 11 - 4 -#define CYGARC_SH_MOD_CAC_ADDRESS_BASE 0xf0000000 -#define CYGARC_SH_MOD_CAC_ADDRESS_TOP 0xf0004000 -#define CYGARC_SH_MOD_CAC_ADDRESS_STEP 0x00000010 -// U : bit 1 -// V : bit 0 -// Writing zero to both forces a flush of the line if it is dirty. -#define CYGARC_SH_MOD_CAC_ADDRESS_FLUSH 0x00000000 - -//----------------------------------------------------------------------------- -// Extra details for interrupt handling -#define CYGARC_SH_SOFTWARE_IP_UPDATE - -#endif // CYGONCE_HAL_MOD_77xx_H
deleted file mode 100644 --- a/packages/hal/sh/arch/current/include/mod_7729.h +++ /dev/null @@ -1,83 +0,0 @@ -#ifndef CYGONCE_HAL_MOD_77xx_H -#define CYGONCE_HAL_MOD_77xx_H - -//============================================================================= -// -// mod_7729.h -// -// List modules available on CPU -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jskov -// Contributors:jskov -// Date: 2000-08-29 -// Purpose: Define modules (and versions) available on this CPU. -// Usage: Included from <cyg/hal/sh_regs.h> -// -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -//----------------------------------------------------------------------------- -// Modules provided by the CPU - -#define CYGARC_SH_MOD_BCN_V2 -#define CYGARC_SH_MOD_INTC_V2 -#define CYGARC_SH_MOD_INTC_V3 -#define CYGARC_SH_MOD_PFC -#define CYGARC_SH_MOD_IRDA -#define CYGARC_SH_MOD_SCIF -#define CYGARC_SH_MOD_UBC_V3 -#define CYGARC_SH_MOD_CPG_V3 - -//----------------------------------------------------------------------------- -// Extra details for Cache Module (CAC) - -// Cache dimenions - one unified cache -#define CYGARC_SH_MOD_CAC_SIZE 16384 // Size of cache in bytes -#define CYGARC_SH_MOD_CAC_LINE_SIZE 16 // Size of a cache line -#define CYGARC_SH_MOD_CAC_WAYS 4 // Associativity of the cache - -// Cache addressing information -// way: bits 13 - 12 -// entry: bits 11 - 4 -#define CYGARC_SH_MOD_CAC_ADDRESS_BASE 0xf0000000 -#define CYGARC_SH_MOD_CAC_ADDRESS_TOP 0xf0004000 -#define CYGARC_SH_MOD_CAC_ADDRESS_STEP 0x00000010 -// U : bit 1 -// V : bit 0 -// Writing zero to both forces a flush of the line if it is dirty. -#define CYGARC_SH_MOD_CAC_ADDRESS_FLUSH 0x00000000 - -//----------------------------------------------------------------------------- -// Extra details for interrupt handling -#define CYGARC_SH_SOFTWARE_IP_UPDATE - -#endif // CYGONCE_HAL_MOD_77xx_H
deleted file mode 100644 --- a/packages/hal/sh/arch/current/include/sh3_sci.h +++ /dev/null @@ -1,81 +0,0 @@ -//============================================================================= -// -// sh3_sci.h -// -// Simple driver for the SH Serial Communication Interface (SCI) -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jskov -// Contributors:jskov -// Date: 1999-05-17 -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include <pkgconf/hal.h> - -#ifdef CYGNUM_HAL_SH_SH3_SCI_PORTS - -//-------------------------------------------------------------------------- -// SCI register offsets -#ifdef CYGARC_SH_MOD_SCI_V2 -# define _REG_SCSPTR -0x4 // serial port register -#endif -#define _REG_SCSMR 0x0 // serial mode register -#define _REG_SCBRR 0x2 // bit rate register -#define _REG_SCSCR 0x4 // serial control register -#define _REG_SCTDR 0x6 // transmit data register -#define _REG_SCSSR 0x8 // serial status register -#define _REG_SCRDR 0xa // receive data register - -//-------------------------------------------------------------------------- - -typedef struct { - cyg_uint8* base; - cyg_int32 msec_timeout; - int isr_vector; -} channel_data_t; - -//-------------------------------------------------------------------------- - -#if !defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) -// This one should only be used by old-stub compatibility code! -externC void cyg_hal_plf_sci_init_channel(const channel_data_t* chan); -#endif - -externC cyg_uint8 cyg_hal_plf_sci_getc(void* __ch_data); -externC void cyg_hal_plf_sci_putc(void* __ch_data, cyg_uint8 c); -externC void cyg_hal_plf_sci_init(int sci_index, int comm_index, - int rcv_vect, cyg_uint8* base); - - -#endif // CYGNUM_HAL_SH_SH3_SCI_PORTS -//----------------------------------------------------------------------------- -// end of sh3_sci.h
deleted file mode 100644 --- a/packages/hal/sh/arch/current/include/sh3_scif.h +++ /dev/null @@ -1,88 +0,0 @@ -//============================================================================= -// -// sh3_scif.h -// -// Simple driver for the SH3 Serial Communication Interface with FIFO -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jskov -// Contributors:jskov -// Date: 2000-03-30 -// Description: Simple driver for the SH Serial Communication Interface -// The driver can be used for either the SCIF or the IRDA -// modules (the latter can act as the former). -// Clients of this file can configure the behavior with: -// CYGNUM_SCIF_PORTS: number of SCI ports -// -// Note: It should be possible to configure a channel to IRDA mode. -// Worry about that when some board needs it. -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include <pkgconf/hal.h> - -#ifdef CYGNUM_HAL_SH_SH3_SCIF_PORTS - -//-------------------------------------------------------------------------- -// SCIF register offsets -#define _REG_SCSMR 0x00 -#define _REG_SCBRR 0x02 -#define _REG_SCSCR 0x04 -#define _REG_SCFTDR 0x06 -#define _REG_SCSSR 0x08 -#define _REG_SCFRDR 0x0a -#define _REG_SCFCR 0x0c -#define _REG_SCFDR 0x0e - -//-------------------------------------------------------------------------- - -typedef struct { - cyg_uint8* base; - cyg_int32 msec_timeout; - int isr_vector; -} channel_data_t; - -//-------------------------------------------------------------------------- - -#if !defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) -// This one should only be used by old-stub compatibility code! -externC void cyg_hal_plf_scif_init_channel(const channel_data_t* chan); -#endif - -externC cyg_uint8 cyg_hal_plf_scif_getc(void* __ch_data); -externC void cyg_hal_plf_scif_putc(void* __ch_data, cyg_uint8 c); -void cyg_hal_plf_scif_init(int scif_index, int comm_index, - int rcv_vect, cyg_uint8* base); - - -#endif // CYGNUM_HAL_SH_SH3_SCIF_PORTS -//----------------------------------------------------------------------------- -// end of sh3_scif.h
--- a/packages/hal/sh/arch/current/include/sh_regs.h +++ b/packages/hal/sh/arch/current/include/sh_regs.h @@ -40,7 +40,7 @@ // Usage: #include <cyg/hal/sh_regs.h> // Notes: // This file describes registers for on-core modules found in all -// the SH3 CPUs supported by the HAL. For each CPU is defined a +// the SH CPUs supported by the HAL. For each CPU is defined a // module specification file (mod_<CPU model number>.h) which lists // modules (and their version if applicable) included in that // particular CPU model. Note that the versioning is ad hoc; @@ -50,1026 +50,7 @@ // //============================================================================= -// Find out which modules are supported by the chosen CPU -// Note: At them moment only some modules are conditionalized (the ones -// not in the 7708). For consistency, all modules should be treated -// the same. #include <pkgconf/system.h> -#include CYGBLD_HAL_CPU_MODULES_H - -//========================================================================== -// CPU Definitions -//========================================================================== - -//-------------------------------------------------------------------------- -// Status register -#define CYGARC_REG_SR_MD 0x40000000 -#define CYGARC_REG_SR_RB 0x20000000 -#define CYGARC_REG_SR_BL 0x10000000 -#define CYGARC_REG_SR_M 0x00000200 -#define CYGARC_REG_SR_Q 0x00000100 -#define CYGARC_REG_SR_IMASK 0x000000f0 -#define CYGARC_REG_SR_I3 0x00000080 -#define CYGARC_REG_SR_I2 0x00000040 -#define CYGARC_REG_SR_I1 0x00000020 -#define CYGARC_REG_SR_I0 0x00000010 -#define CYGARC_REG_SR_S 0x00000002 -#define CYGARC_REG_SR_T 0x00000001 - - -//========================================================================== -// Memory Mapped Registers -//========================================================================== - -//++++++ Module MMU ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -//-------------------------------------------------------------------------- -// MMU control registers -#define CYGARC_REG_MMUCR 0xffffffe0 - -#define CYGARC_REG_MMUCR_SV 0x00000100 -#define CYGARC_REG_MMUCR_RC_MASK 0x000000c0 -#define CYGARC_REG_MMUCR_TF 0x00000004 -#define CYGARC_REG_MMUCR_IX 0x00000002 -#define CYGARC_REG_MMUCR_AT 0x00000001 - -//++++++ Module CAC ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -//-------------------------------------------------------------------------- -// Cache registers -#define CYGARC_REG_CCR 0xffffffec - -#define CYGARC_REG_CCR_RA 0x00000020 -#define CYGARC_REG_CCR_CF 0x00000008 -#define CYGARC_REG_CCR_CB 0x00000004 -#define CYGARC_REG_CCR_WT 0x00000002 -#define CYGARC_REG_CCR_CE 0x00000001 - -//-------------------------------------------------------------------------- -// Cache registers -#define CYGARC_REG_CCR 0xffffffec - -#define CYGARC_REG_CCR_RA 0x00000020 -#define CYGARC_REG_CCR_CF 0x00000008 -#define CYGARC_REG_CCR_CB 0x00000004 -#define CYGARC_REG_CCR_WT 0x00000002 -#define CYGARC_REG_CCR_CE 0x00000001 - - -//-------------------------------------------------------------------------- -// Address array access -// Address part (base/top/step specified in mod file) -#define CYGARC_REG_CACHE_ADDRESS_ADDRESS 0x00000008 // compare address - -// Data part -#define CYGARC_REG_CACHE_ADDRESS_TAG_Mask 0x1ffffc00 -#define CYGARC_REG_CACHE_ADDRESS_U 0x00000002 // updated (contains dirty data) -#define CYGARC_REG_CACHE_ADDRESS_V 0x00000001 // valid - - -//++++++ Module BSC ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -//-------------------------------------------------------------------------- -// Bus State Control -#define CYGARC_REG_BCR1 0xffffff60 -#define CYGARC_REG_BCR2 0xffffff62 -#define CYGARC_REG_WCR1 0xffffff64 -#define CYGARC_REG_WCR2 0xffffff66 -#define CYGARC_REG_MCR 0xffffff68 -#define CYGARC_REG_DCR 0xffffff6a -#define CYGARC_REG_PCR 0xffffff6c -#define CYGARC_REG_RTCSR 0xffffff6e -#define CYGARC_REG_RTCNT 0xffffff70 -#define CYGARC_REG_RTCOR 0xffffff72 -#define CYGARC_REG_RFCR 0xffffff74 - -#ifdef CYGARC_SH_MOD_BCN_V2 -# define CYGARC_REG_BCR3 0xffffff7e -#endif - -#define CYGARC_REG_SDMR_AREA2_BASE 0xffffd000 -#define CYGARC_REG_SDMR_AREA3_BASE 0xffffe000 - -#define CYGARC_REG_BCR1_DRAMTP2 0x0010 -#define CYGARC_REG_BCR1_DRAMTP1 0x0008 -#define CYGARC_REG_BCR1_DRAMTP0 0x0004 - -// Bus widths for areas -#define CYGARC_REG_BCR2_A6_8 0x1000 -#define CYGARC_REG_BCR2_A6_16 0x2000 -#define CYGARC_REG_BCR2_A6_32 0x3000 -#define CYGARC_REG_BCR2_A5_8 0x0400 -#define CYGARC_REG_BCR2_A5_16 0x0800 -#define CYGARC_REG_BCR2_A5_32 0x0c00 -#define CYGARC_REG_BCR2_A4_8 0x0100 -#define CYGARC_REG_BCR2_A4_16 0x0200 -#define CYGARC_REG_BCR2_A4_32 0x0300 -#define CYGARC_REG_BCR2_A3_8 0x0040 -#define CYGARC_REG_BCR2_A3_16 0x0080 -#define CYGARC_REG_BCR2_A3_32 0x00c0 -#define CYGARC_REG_BCR2_A2_8 0x0010 -#define CYGARC_REG_BCR2_A2_16 0x0020 -#define CYGARC_REG_BCR2_A2_32 0x0030 - -// Memory type selection and other IO behavior controls -#define CYGARC_REG_BCR1_PULA 0x8000 // Pin A25 to A0 Pull-Up -#define CYGARC_REG_BCR1_PULD 0x4000 // Pin D31 to D0 Pull-Up -#define CYGARC_REG_BCR1_HIZMEM 0x2000 // Hi-Z memory control -#define CYGARC_REG_BCR1_HIZCNT 0x1000 // High-Z Control -#define CYGARC_REG_BCR1_ENDIAN 0x0800 // Endian Flag -#define CYGARC_REG_BCR1_A0_BST_MASK 0x0600 // Area 0 Burst ROM Control -#define CYGARC_REG_BCR1_A0_BST_4 0x0200 -#define CYGARC_REG_BCR1_A0_BST_8 0x0400 -#define CYGARC_REG_BCR1_A0_BST_16 0x0600 -#define CYGARC_REG_BCR1_A5_BST_MASK 0x0180 // Area 5 Burst ROM Control -#define CYGARC_REG_BCR1_A5_BST_4 0x0080 -#define CYGARC_REG_BCR1_A5_BST_8 0x0100 -#define CYGARC_REG_BCR1_A5_BST_16 0x0180 -#define CYGARC_REG_BCR1_A6_BST_MASK 0x0060 // Area 6 Burst ROM Control -#define CYGARC_REG_BCR1_A6_BST_4 0x0020 -#define CYGARC_REG_BCR1_A6_BST_8 0x0040 -#define CYGARC_REG_BCR1_A6_BST_16 0x0060 -#define CYGARC_REG_BCR1_DRAMTP_MASK 0x001c // Area 2, Area 3 Memory Type -#define CYGARC_REG_BCR1_A5PCM 0x0002 // Area 5 Bus Type -#define CYGARC_REG_BCR1_A6PCM 0x0001 // Area 6 Bus Type - -// Intercycle wait states -#define CYGARC_REG_WCR1_WAITSEL 0x8000 // WAIT Sampling Timing Select -#define CYGARC_REG_WCR1_A6I_MASK 0x3000 // Intercycle Idle Specification -#define CYGARC_REG_WCR1_A6I_SHIFT 12 -#define CYGARC_REG_WCR1_A5I_MASK 0x0c00 -#define CYGARC_REG_WCR1_A5I_SHIFT 10 -#define CYGARC_REG_WCR1_A4I_MASK 0x0300 -#define CYGARC_REG_WCR1_A4I_SHIFT 8 -#define CYGARC_REG_WCR1_A3I_MASK 0x00c0 -#define CYGARC_REG_WCR1_A3I_SHIFT 6 -#define CYGARC_REG_WCR1_A2I_MASK 0x0030 -#define CYGARC_REG_WCR1_A2I_SHIFT 4 -#define CYGARC_REG_WCR1_A0I_MASK 0x0003 -#define CYGARC_REG_WCR1_A0I_SHIFT 0 - -#define CYGARC_REG_WCR1_0WS 0 -#define CYGARC_REG_WCR1_1WS 1 -#define CYGARC_REG_WCR1_2WS 2 -#define CYGARC_REG_WCR1_3WS 3 - - -// Wait states -#define CYGARC_REG_WCR2_A6_MASK 0xe000 // Wait states + burst pitch -#define CYGARC_REG_WCR2_A6_SHIFT 13 -#define CYGARC_REG_WCR2_A5_MASK 0x1c00 // Wait states + burst pitch -#define CYGARC_REG_WCR2_A5_SHIFT 10 -#define CYGARC_REG_WCR2_A4_MASK 0x0380 // Wait states -#define CYGARC_REG_WCR2_A4_SHIFT 7 -#define CYGARC_REG_WCR2_A3_MASK 0x0060 // Wait states / CAS latency -#define CYGARC_REG_WCR2_A3_SHIFT 5 -#define CYGARC_REG_WCR2_A2_MASK 0x0018 // Wait states / CAS latency -#define CYGARC_REG_WCR2_A2_SHIFT 3 -#define CYGARC_REG_WCR2_A0_MASK 0x0007 // Wait states + burst pitch -#define CYGARC_REG_WCR2_A0_SHIFT 0 - -#define CYGARC_REG_WCR2_0WS 0 -#define CYGARC_REG_WCR2_1WS 1 -#define CYGARC_REG_WCR2_2WS 2 -#define CYGARC_REG_WCR2_3WS 3 -#define CYGARC_REG_WCR2_4WS 4 -#define CYGARC_REG_WCR2_6WS 5 -#define CYGARC_REG_WCR2_8WS 6 -#define CYGARC_REG_WCR2_10WS 7 - - -//----------------------------------------------------------------------------- -// Calculate constants needed to drive the proper SDRAM refresh rate. Argument -// is delay between required refresh events in microseconds (us). Should be -// available off the SDRAM spec sheet. -// These should be a part of a fully CDLicized memory controller setup. -#define CYGARC_RTCSR_PRESCALE(_r_) \ -(((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(4*1000000))<256) ? 4 : \ - ((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(16*1000000))<256) ? 16 : \ - ((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(64*1000000))<256) ? 64 : \ - ((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(256*1000000))<256) ? 256 : \ - ((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(1024*1000000))<256) ? 1024 : \ - ((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(2048*1000000))<256) ? 2048 : 4096) - -// These two macros provide the static values we need to stuff into the -// registers. -#define CYGARC_RTCSR_CKSx(_r_) \ - (( 4 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x08 : \ - ( 16 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x10 : \ - ( 64 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x18 : \ - ( 256 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x20 : \ - (1024 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x28 : \ - (2048 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x30 : 0x38 ) - -#define CYGARC_RTCSR_N(_r_) \ - (CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(CYGARC_RTCSR_PRESCALE(_r_)*1000000)) - - -//++++++ Module UBC ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -//-------------------------------------------------------------------------- -// User Break Control -#define CYGARC_REG_BRCR 0xffffff98 // 16 bit - -#define CYGARC_REG_BARA 0xffffffb0 // 32 bit -#define CYGARC_REG_BAMRA 0xffffffb4 // 8 bit (v1) / 32 bit -#define CYGARC_REG_BBRA 0xffffffb8 // 16 bit -#define CYGARC_REG_BASRA 0xffffffe4 // 8 bit - -#define CYGARC_REG_BARB 0xffffffa0 // 32 bit -#define CYGARC_REG_BAMRB 0xffffffa4 // 8 bit (v1) / 32 bit -#define CYGARC_REG_BASRB 0xffffffe8 // 8 bit -#define CYGARC_REG_BBRB 0xffffffa8 // 16 bit -#define CYGARC_REG_BDRB 0xffffff90 // 32 bit -#define CYGARC_REG_BDMRB 0xffffff94 // 32 bit - -#ifdef CYGARC_SH_MOD_UBC_V3 -#define CYGARC_REG_BETR 0xffffff9c // 16 bit -#define CYGARC_REG_BRSR 0xffffffac // 32 bit -#define CYGARC_REG_BRDR 0xffffffbc // 32 bit -#endif - -#define CYGARC_REG_BRCR_CMFA 0x8000 // condition match flag A -#define CYGARC_REG_BRCR_CMFB 0x4000 // condition match flag B -#define CYGARC_REG_BRCR_PCBA 0x0400 // post execute channel A -#define CYGARC_REG_BRCR_DBEB 0x0080 // data break enable B -#define CYGARC_REG_BRCR_PCBB 0x0040 // post execute channel B -#define CYGARC_REG_BRCR_SEQ 0x0008 // sequence condition select - -#ifdef CYGARC_SH_MOD_UBC_V1 -#define CYGARC_REG_BAMRA_BASMA 0x04 // BASRA masked -#define CYGARC_REG_BAMRA_BARA_UNMASKED 0x00 // BARA not masked -#define CYGARC_REG_BAMRA_BARA_10BIT 0x01 // Lowest 10 bit masked -#define CYGARC_REG_BAMRA_BARA_12BIT 0x02 // Lowest 12 bit masked -#define CYGARC_REG_BAMRA_BARA_MASKED 0x03 // All bits masked -#else -// mask is fully configurable in other versions of the UBC -#endif - -#ifdef CYGARC_SH_MOD_UBC_V3 -#define CYGARC_REG_BBRA_DMA 0x0080 // Break on DMAC cycle -#define CYGARC_REG_BBRA_CPU 0x0040 // Break on CPU cycle -#endif -#define CYGARC_REG_BBRA_DFETCH 0x0020 // Break on DFETCH -#define CYGARC_REG_BBRA_IFETCH 0x0010 // Break on IFETCH -#define CYGARC_REG_BBRA_WRITE 0x0008 // Break on WRITE -#define CYGARC_REG_BBRA_READ 0x0004 // Break on READ -#define CYGARC_REG_BBRA_SIZE_LONG 0x0003 // Break on long access -#define CYGARC_REG_BBRA_SIZE_WORD 0x0002 // Break on word access -#define CYGARC_REG_BBRA_SIZE_BYTE 0x0001 // Break on byte access -#define CYGARC_REG_BBRA_SIZE_ANY 0x0000 // Break on any size - - -//++++++ Module CPG ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -//-------------------------------------------------------------------------- -// Oscillator control registers -#define CYGARC_REG_FRQCR 0xffffff80 -#define CYGARC_REG_WTCNT 0xffffff84 // read 8bit, write 16bit -#define CYGARC_REG_WTCSR 0xffffff86 // read 8bit, write 16bit - -#define CYGARC_REG_WTCNT_WRITE 0x5a00 // top 8bit value for write - -#define CYGARC_REG_WTCSR_WRITE 0xa500 // top 8bit value for write -#define CYGARC_REG_WTCSR_TME 0x80 // timer enable -#define CYGARC_REG_WTCSR_WT_IT 0x40 // watchdog(1)/interval(0) -#define CYGARC_REG_WTCSR_RSTS 0x20 // manual(1)/poweron(0) -#define CYGARC_REG_WTCSR_WOVF 0x10 // watchdog overflow -#define CYGARC_REG_WTCSR_IOVF 0x08 // interval overflow -#define CYGARC_REG_WTCSR_CKS2 0x04 // clock select 2 -#define CYGARC_REG_WTCSR_CKS1 0x02 // clock select 1 -#define CYGARC_REG_WTCSR_CKS0 0x01 // clock select 0 -#define CYGARC_REG_WTCSR_CKSx_MASK 0x07 // clock select mask -// This is the period (in us) between watchdog reset and overflow. -// Note: We use max timeout delay for now. -#define CYGARC_REG_WTCSR_CKSx_SETTING 0x07 // max delay - -#define CYGARC_REG_WTCSR_PERIOD ((1000000000/(CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED/4096))*256) - -// Translate various CDL clock configurations to register equivalents -// for the various CPG versions -#if defined(CYGARC_SH_MOD_CPG_V1) // ---------------------------- V1 - -// PLL1 -#if (CYGHWR_HAL_SH_OOC_PLL_1 == 0) || (CYGHWR_HAL_SH_OOC_PLL_1 == 1) -# define CYGARC_REG_FRQCR_INIT_PLL1 0x0000 -#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 2) -# define CYGARC_REG_FRQCR_INIT_PLL1 0x0010 -#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 4) -# define CYGARC_REG_FRQCR_INIT_PLL1 0x0020 -#else -# error "Unsupported PLL1 setting" -#endif - -// Divider1 -#if (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 1) -# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0000 -#elif (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 2) -# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0004 -#elif (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 4) -# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0008 -#else -# error "Unsupported Divider1 setting" -#endif - -// Divider2 -#if (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 1) -# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0000 -#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 2) -# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0001 -#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 4) -# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0002 -#else -# error "Unsupported Divider1 setting" -#endif - -// CKOEN - set in all modes but 7 -#if (CYGHWR_HAL_SH_OOC_CLOCK_MODE != 7) -# define CYGARC_REG_FRQCR_INIT_CKOEN 0x0100 -#else -# define CYGARC_REG_FRQCR_INIT_CKOEN 0x0000 -#endif - -#elif defined(CYGARC_SH_MOD_CPG_V2) // ---------------------------- V2 - -// PLL1 -#if (CYGHWR_HAL_SH_OOC_PLL_1 == 0) || (CYGHWR_HAL_SH_OOC_PLL_1 == 1) -# define CYGARC_REG_FRQCR_INIT_PLL1 0x0000 -#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 2) -# define CYGARC_REG_FRQCR_INIT_PLL1 0x0010 -#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 4) -# define CYGARC_REG_FRQCR_INIT_PLL1 0x0020 -#else -# error "Unsupported PLL1 setting" -#endif - -// Divider1 -#if (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 1) -# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0000 -#elif (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 2) -# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0004 -#elif (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 4) -# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0008 -#else -# error "Unsupported Divider1 setting" -#endif - -// Divider2 -#if (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 1) -# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0000 -#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 2) -# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0001 -#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 4) -# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0002 -#else -# error "Unsupported Divider1 setting" -#endif - -// CKOEN - set in all modes but 2 -#if (CYGHWR_HAL_SH_OOC_CLOCK_MODE != 2) -# define CYGARC_REG_FRQCR_INIT_CKOEN 0x0100 -#else -# define CYGARC_REG_FRQCR_INIT_CKOEN 0x0000 -#endif - -#elif defined(CYGARC_SH_MOD_CPG_V3) // ---------------------------- V3 - -// PLL1 -#if (CYGHWR_HAL_SH_OOC_PLL_1 == 0) || (CYGHWR_HAL_SH_OOC_PLL_1 == 1) -# define CYGARC_REG_FRQCR_INIT_PLL1 0x0000 -#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 2) -# define CYGARC_REG_FRQCR_INIT_PLL1 0x0010 -#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 3) -# define CYGARC_REG_FRQCR_INIT_PLL1 0x8000 -#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 4) -# define CYGARC_REG_FRQCR_INIT_PLL1 0x0020 -#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 6) -# define CYGARC_REG_FRQCR_INIT_PLL1 0x8010 -#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 8) -# define CYGARC_REG_FRQCR_INIT_PLL1 0x0030 -#else -# error "Unsupported PLL1 setting" -#endif - -// Divider1 -#if (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 1) -# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0000 -#elif (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 2) -# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0004 -#elif (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 3) -# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x4000 -#elif (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 4) -# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0008 -#else -# error "Unsupported Divider1 setting" -#endif - -// Divider2 -#if (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 1) -# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0000 -#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 2) -# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0001 -#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 3) -# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x2000 -#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 4) -# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0002 -#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 6) -# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x2002 -#else -# error "Unsupported Divider2 setting" -#endif - -// CKOEN - set in modes 0-2 -#if (CYGHWR_HAL_SH_OOC_CLOCK_MODE <= 2) -# define CYGARC_REG_FRQCR_INIT_CKOEN 0x0100 -#else -# define CYGARC_REG_FRQCR_INIT_CKOEN 0x0000 -#endif - -#else - -# error "Unsupported CPG version" - -#endif - -// Init value -#define CYGARC_REG_FRQCR_INIT (CYGARC_REG_FRQCR_INIT_PLL1|CYGARC_REG_FRQCR_INIT_DIVIDER1|CYGARC_REG_FRQCR_INIT_DIVIDER2|CYGARC_REG_FRQCR_INIT_CKOEN) - -//++++++ Module TMU ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -//-------------------------------------------------------------------------- -// TMU registers -#define CYGARC_REG_TOCR 0xfffffe90 // 8 bit -#define CYGARC_REG_TSTR 0xfffffe92 // 8 bit -#define CYGARC_REG_TCOR0 0xfffffe94 // 32 bit -#define CYGARC_REG_TCNT0 0xfffffe98 // 32 bit -#define CYGARC_REG_TCR0 0xfffffe9c // 16 bit -#define CYGARC_REG_TCOR1 0xfffffea0 // 32 bit -#define CYGARC_REG_TCNT1 0xfffffea4 // 32 bit -#define CYGARC_REG_TCR1 0xfffffea8 // 16 bit -#define CYGARC_REG_TCOR2 0xfffffeac // 32 bit -#define CYGARC_REG_TCNT2 0xfffffeb0 // 32 bit -#define CYGARC_REG_TCR2 0xfffffeb4 // 16 bit -#define CYGARC_REG_TCPR2 0xfffffeb8 // 32 bit - -// TSTR -#define CYGARC_REG_TSTR_STR0 0x0001 -#define CYGARC_REG_TSTR_STR1 0x0002 -#define CYGARC_REG_TSTR_STR2 0x0004 - -// TCR0/1/2 -#define CYGARC_REG_TCR_TPSC0 0x0001 -#define CYGARC_REG_TCR_TPSC1 0x0002 -#define CYGARC_REG_TCR_TPSC2 0x0004 -#define CYGARC_REG_TCR_CKEG0 0x0008 -#define CYGARC_REG_TCR_CKEG1 0x0010 -#define CYGARC_REG_TCR_UNIE 0x0020 -#define CYGARC_REG_TCR_UNF 0x0100 - -#define CYGARC_REG_TCR_TPSC_4 (0) -#define CYGARC_REG_TCR_TPSC_16 (CYGARC_REG_TCR_TPSC0) -#define CYGARC_REG_TCR_TPSC_64 (CYGARC_REG_TCR_TPSC1) -#define CYGARC_REG_TCR_TPSC_256 (CYGARC_REG_TCR_TPSC0|CYGARC_REG_TCR_TPSC1) - -// TCR2 additional bits -#define CYGARC_REG_TCR_ICPE0 0x0040 -#define CYGARC_REG_TCR_ICPE1 0x0080 -#define CYGARC_REG_TCR_ICPF 0x0200 - - -//++++++ Module INTC +++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -//-------------------------------------------------------------------------- -// Interrupt registers -#define CYGARC_REG_EXCEVT 0xffffffd4 -#define CYGARC_REG_INTEVT 0xffffffd8 - -#define CYGARC_REG_ICR 0xfffffee0 -#define CYGARC_REG_IPRA 0xfffffee2 -#define CYGARC_REG_IPRB 0xfffffee4 - -//#ifdef CYGARC_SH_MOD_INTC_V2 // FIXME: HAL_INTERRUPT_SET_LEVEL needs these -# define CYGARC_REG_INTEVT2 0xa4000000 -# define CYGARC_REG_IRR0 0xa4000004 -# define CYGARC_REG_IRR1 0xa4000006 -# define CYGARC_REG_IRR2 0xa4000008 -# define CYGARC_REG_ICR0 CYGARC_REG_ICR -# define CYGARC_REG_ICR1 0xa4000010 -# define CYGARC_REG_ICR2 0xa4000012 -# define CYGARC_REG_INTER 0xa4000014 -# define CYGARC_REG_IPRC 0xa4000016 -# define CYGARC_REG_IPRD 0xa4000018 -# define CYGARC_REG_IPRE 0xa400001a -//#endif -//#ifdef CYGARC_SH_MOD_INTC_V3 // FIXME: HAL_INTERRUPT_SET_LEVEL needs these -# define CYGARC_REG_IRR3 0xa400000a -# define CYGARC_REG_IRR4 0xa400000c -# define CYGARC_REG_IPRF 0xa400001c -//#endif - - -#define CYGARC_REG_IPRA_TMU0_MASK 0xf000 -#define CYGARC_REG_IPRA_TMU0_PRI1 0x1000 -#define CYGARC_REG_IPRA_TMU1_MASK 0x0f00 -#define CYGARC_REG_IPRA_TMU1_PRI1 0x0100 -#define CYGARC_REG_IPRA_TMU2_MASK 0x00f0 -#define CYGARC_REG_IPRA_TMU2_PRI1 0x0010 -#define CYGARC_REG_IPRA_RTC_MASK 0x000f -#define CYGARC_REG_IPRA_RTC_PRI1 0x0001 - -#define CYGARC_REG_IPRB_WDT_MASK 0xf000 -#define CYGARC_REG_IPRB_WDT_PRI1 0x1000 -#define CYGARC_REG_IPRB_REF_MASK 0x0f00 -#define CYGARC_REG_IPRB_REF_PRI1 0x0100 -#define CYGARC_REG_IPRB_SCI_MASK 0x00f0 -#define CYGARC_REG_IPRB_SCI_PRI1 0x0010 - -//#ifdef CYGARC_SH_MOD_INTC_V2 // FIXME: HAL_INTERRUPT_SET_LEVEL needs these -#define CYGARC_REG_IPRC_IRQ3_MASK 0xf000 -#define CYGARC_REG_IPRC_IRQ3_PRI1 0x1000 -#define CYGARC_REG_IPRC_IRQ2_MASK 0x0f00 -#define CYGARC_REG_IPRC_IRQ2_PRI1 0x0100 -#define CYGARC_REG_IPRC_IRQ1_MASK 0x00f0 -#define CYGARC_REG_IPRC_IRQ1_PRI1 0x0010 -#define CYGARC_REG_IPRC_IRQ0_MASK 0x000f -#define CYGARC_REG_IPRC_IRQ0_PRI1 0x0001 - -#define CYGARC_REG_IPRD_PINT07_MASK 0xf000 -#define CYGARC_REG_IPRD_PINT07_PRI1 0x1000 -#define CYGARC_REG_IPRD_PINT8F_MASK 0x0f00 -#define CYGARC_REG_IPRD_PINT8F_PRI1 0x0100 -#define CYGARC_REG_IPRD_IRQ5_MASK 0x00f0 -#define CYGARC_REG_IPRD_IRQ5_PRI1 0x0010 -#define CYGARC_REG_IPRD_IRQ4_MASK 0x000f -#define CYGARC_REG_IPRD_IRQ4_PRI1 0x0001 - -#define CYGARC_REG_IPRE_DMAC_MASK 0xf000 -#define CYGARC_REG_IPRE_DMAC_PRI1 0x1000 -#define CYGARC_REG_IPRE_IRDA_MASK 0x0f00 -#define CYGARC_REG_IPRE_IRDA_PRI1 0x0100 -#define CYGARC_REG_IPRE_SCIF_MASK 0x00f0 -#define CYGARC_REG_IPRE_SCIF_PRI1 0x0010 -#define CYGARC_REG_IPRE_ADC_MASK 0x000f -#define CYGARC_REG_IPRE_ADC_PRI1 0x0001 - -#define CYGARC_REG_ICR1_MAI 0x8000 -#define CYGARC_REG_ICR1_IRQLVL 0x4000 -#define CYGARC_REG_ICR1_BLMSK 0x2000 -#define CYGARC_REG_ICR1_IRLSEN 0x1000 -#define CYGARC_REG_ICR1_SENSE_IRQ5_shift 10 -#define CYGARC_REG_ICR1_SENSE_IRQ4_shift 8 -#define CYGARC_REG_ICR1_SENSE_IRQ3_shift 6 -#define CYGARC_REG_ICR1_SENSE_IRQ2_shift 4 -#define CYGARC_REG_ICR1_SENSE_IRQ1_shift 2 -#define CYGARC_REG_ICR1_SENSE_IRQ0_shift 0 -#define CYGARC_REG_ICR1_SENSE_LEVEL 0x2 -#define CYGARC_REG_ICR1_SENSE_UP 0x1 - -// The (initial) IRQ mode is controlled by configuration. -#ifdef CYGHWR_HAL_SH_IRQ_USE_IRQLVL -# ifdef CYGHWR_HAL_SH_IRQ_ENABLE_IRLS_INTERRUPTS -# define CYGARC_REG_ICR1_INIT (CYGARC_REG_ICR1_IRLSEN|CYGARC_REG_ICR1_IRQLVL) -# else -# define CYGARC_REG_ICR1_INIT (CYGARC_REG_ICR1_IRQLVL) -# endif -#else -# define CYGARC_REG_ICR1_INIT 0x0000 -#endif - -#define CYGARC_REG_IRR0_PINT07 0x80 -#define CYGARC_REG_IRR0_PINT8F 0x40 -#define CYGARC_REG_IRR0_IRQ5 0x20 -#define CYGARC_REG_IRR0_IRQ4 0x10 -#define CYGARC_REG_IRR0_IRQ3 0x08 -#define CYGARC_REG_IRR0_IRQ2 0x04 -#define CYGARC_REG_IRR0_IRQ1 0x02 -#define CYGARC_REG_IRR0_IRQ0 0x01 - -//#endif - -//#ifdef CYGARC_SH_MOD_INTC_V3 // FIXME: HAL_INTERRUPT_SET_LEVEL needs these -#define CYGARC_REG_IPRF_LCDI_MASK 0x0f00 -#define CYGARC_REG_IPRF_LCDI_PRI1 0x0100 -#define CYGARC_REG_IPRF_PCC0_MASK 0x00f0 -#define CYGARC_REG_IPRF_PCC0_PRI1 0x0010 -#define CYGARC_REG_IPRF_PCC1_MASK 0x000f -#define CYGARC_REG_IPRF_PCC1_PRI1 0x0001 - -//#endif - -//++++++ Module RTC ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -//-------------------------------------------------------------------------- -// RealTime Clock - -#define CYGARC_REG_RC64CNT 0xfffffec0 -#define CYGARC_REG_RSECCNT 0xfffffec2 -#define CYGARC_REG_RMINCNT 0xfffffec4 -#define CYGARC_REG_RHRCNT 0xfffffec6 -#define CYGARC_REG_RWKCNT 0xfffffec8 -#define CYGARC_REG_RDAYCNT 0xfffffeca -#define CYGARC_REG_RMONCNT 0xfffffecc -#define CYGARC_REG_RYRCNT 0xfffffece -#define CYGARC_REG_RSECAR 0xfffffed0 -#define CYGARC_REG_RMINAR 0xfffffed2 -#define CYGARC_REG_RHRAR 0xfffffed4 -#define CYGARC_REG_RWKAR 0xfffffed6 -#define CYGARC_REG_RDAYAR 0xfffffed8 -#define CYGARC_REG_RMONAR 0xfffffeda -#define CYGARC_REG_RCR1 0xfffffedc -#define CYGARC_REG_RCR2 0xfffffede - - -#define CYGARC_REG_RCR1_CF 0x80 // carry flag -#define CYGARC_REG_RCR1_CIE 0x10 // carry interrupt enable -#define CYGARC_REG_RCR1_AIE 0x08 // alarm interrupt enable -#define CYGARC_REG_RCR1_AF 0x01 // alarm flag - -#define CYGARC_REG_RCR2_PEF 0x80 // periodic interrupt flag -#define CYGARC_REG_RCR2_PES2 0x40 // periodic interrupt setting -#define CYGARC_REG_RCR2_PES1 0x20 -#define CYGARC_REG_RCR2_PES0 0x10 -#define CYGARC_REG_RCR2_RTCEN 0x08 // RTC enable -#define CYGARC_REG_RCR2_ADJ 0x04 // second adjustment -#define CYGARC_REG_RCR2_RESET 0x02 // reset -#define CYGARC_REG_RCR2_START 0x01 // start - - - -//++++++ Module SCI ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -//-------------------------------------------------------------------------- -// Serial registers. All 8 bit registers. -#define CYGARC_REG_SCSMR 0xfffffe80 // serial mode register -#define CYGARC_REG_SCBRR 0xfffffe82 // bit rate register -#define CYGARC_REG_SCSCR 0xfffffe84 // serial control register -#define CYGARC_REG_SCTDR 0xfffffe86 // transmit data register -#define CYGARC_REG_SCSSR 0xfffffe88 // serial status register -#define CYGARC_REG_SCRDR 0xfffffe8a // receive data register - -#ifdef CYGARC_SH_MOD_SCI_V2 -# define CYGARC_REG_SCSPTR 0xfffffe7c // serial port register -#endif - -// Serial Mode Register -#define CYGARC_REG_SCSMR_CA 0x80 // communication mode -#define CYGARC_REG_SCSMR_CHR 0x40 // character length (7 if set) -#define CYGARC_REG_SCSMR_PE 0x20 // parity enable -#define CYGARC_REG_SCSMR_OE 0x10 // parity mode -#define CYGARC_REG_SCSMR_STOP 0x08 // stop bit length -#define CYGARC_REG_SCSMR_MP 0x04 // multiprocessor mode -#define CYGARC_REG_SCSMR_CKS1 0x02 // clock select 1 -#define CYGARC_REG_SCSMR_CKS0 0x01 // clock select 0 -#define CYGARC_REG_SCSMR_CKSx_MASK 0x03 // mask - -// Serial Control Register -#define CYGARC_REG_SCSCR_TIE 0x80 // transmit interrupt enable -#define CYGARC_REG_SCSCR_RIE 0x40 // receive interrupt enable -#define CYGARC_REG_SCSCR_TE 0x20 // transmit enable -#define CYGARC_REG_SCSCR_RE 0x10 // receive enable -#define CYGARC_REG_SCSCR_MPIE 0x08 // multiprocessor interrupt enable -#define CYGARC_REG_SCSCR_TEIE 0x04 // transmit-end interrupt enable -#define CYGARC_REG_SCSCR_CKE1 0x02 // clock enable 1 -#define CYGARC_REG_SCSCR_CKE0 0x01 // clock enable 0 - -// Serial Status Register -#define CYGARC_REG_SCSSR_TDRE 0x80 // transmit data register empty -#define CYGARC_REG_SCSSR_RDRF 0x40 // receive data register full -#define CYGARC_REG_SCSSR_ORER 0x20 // overrun error -#define CYGARC_REG_SCSSR_FER 0x10 // framing error -#define CYGARC_REG_SCSSR_PER 0x08 // parity error -#define CYGARC_REG_SCSSR_TEND 0x04 // transmit end -#define CYGARC_REG_SCSSR_MPB 0x02 // multiprocessor bit -#define CYGARC_REG_SCSSR_MPBT 0x01 // multiprocessor bit transfer - -// When clearing the status register, always write the value: -// CYGARC_REG_SCSSR_CLEARMASK & ~bit -// to prevent other bits than the one of interest to be cleared. -#define CYGARC_REG_SCSSR_CLEARMASK 0xf8 - -// Baud rate values calculation, depending on peripheral clock (Pf) -// n is CKS setting (0-3) -// N = (Pf/(64*2^(2n-1)*B))-1 -// With CYGARC_SCBRR_CKSx providing the values 1, 4, 16, 64 we get -// N = (Pf/(32*_CKS*B))-1 -// -// The CYGARC_SCBRR_OPTIMAL_CKS macro should compute the minimal CKS -// setting for the given baud rate and peripheral clock. -// -// The error of the CKS+count value can be computed by: -// E(%) = ((Pf/((N+1)*B*(64^(n-1)))-1)*100 -// -#define CYGARC_SCBRR_PRESCALE(_b_) \ -((((CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED/32/1/(_b_))-1)<256) ? 1 : \ - (((CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED/32/4/(_b_))-1)<256) ? 4 : \ - (((CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED/32/16/(_b_))-1)<256) ? 16 : 64) - -// These two macros provide the static values we need to stuff into the -// registers. -#define CYGARC_SCBRR_CKSx(_b_) \ - ((1 == CYGARC_SCBRR_PRESCALE(_b_)) ? 0 : \ - (4 == CYGARC_SCBRR_PRESCALE(_b_)) ? 1 : \ - (16 == CYGARC_SCBRR_PRESCALE(_b_)) ? 2 : 3) -#define CYGARC_SCBRR_N(_b_) \ - (((_b_) < 4800) ? 0 : \ - ((_b_) > 115200) ? 0 : \ - ((CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED/32/CYGARC_SCBRR_PRESCALE(_b_)/(_b_))-1)) - -//++++++ Module IRDA +++++++++++++++++++++++++++++++++++++++++++++++++++++++ -#ifdef CYGARC_SH_MOD_IRDA - -//-------------------------------------------------------------------------- -// IrDA (infrared data association). Can also act as regular serial w FIFO - -#define CYGARC_REG_SCSMR1 0xa4000140 -#define CYGARC_REG_SCBRR1 0xa4000142 -#define CYGARC_REG_SCSCR1 0xa4000144 -#define CYGARC_REG_SCFTDR1 0xa4000146 -#define CYGARC_REG_SCSSR1 0xa4000148 -#define CYGARC_REG_SCFRDR1 0xa400014a -#define CYGARC_REG_SCFCR1 0xa400014c -#define CYGARC_REG_SCFDR1 0xa400014e - -// Serial Mode Register -#define CYGARC_REG_SCSMR1_IRMOD 0x80 // IrDA Mode -#define CYGARC_REG_SCSMR1_ICK_MASK 0x78 // IR pulse width -#define CYGARC_REG_SCSMR1_PSEL 0x04 // IR pulse selector(?) -#define CYGARC_REG_SCSMR1_CKS1 0x02 // clock select 1 -#define CYGARC_REG_SCSMR1_CKS0 0x01 // clock select 0 -#define CYGARC_REG_SCSMR1_CKSx_MASK 0x03 // mask - -// Serial Control Register -#define CYGARC_REG_SCSCR1_TIE 0x80 // transmit interrupt enable -#define CYGARC_REG_SCSCR1_RIE 0x40 // receive interrupt enable -#define CYGARC_REG_SCSCR1_TE 0x20 // transmit enable -#define CYGARC_REG_SCSCR1_RE 0x10 // receive enable -#define CYGARC_REG_SCSCR1_CKE1 0x02 // clock enable 1 -#define CYGARC_REG_SCSCR1_CKE0 0x01 // clock enable 0 - -// Serial Status Register -#define CYGARC_REG_SCSSR1_PER_MASK 0xf000 // number of parity errors -#define CYGARC_REG_SCSSR1_PER_shift 12 -#define CYGARC_REG_SCSSR1_FER_MASK 0x0f00 // number of framing errors -#define CYGARC_REG_SCSSR1_FER_shift 8 -#define CYGARC_REG_SCSSR1_ER 0x0080 // receive error -#define CYGARC_REG_SCSSR1_TEND 0x0040 // transmit end -#define CYGARC_REG_SCSSR1_TDFE 0x0020 // transmit fifo data empty -#define CYGARC_REG_SCSSR1_BRK 0x0010 // break detection -#define CYGARC_REG_SCSSR1_FER 0x0008 // framing error -#define CYGARC_REG_SCSSR1_PER 0x0004 // parity error -#define CYGARC_REG_SCSSR1_RDF 0x0002 // receive fifo data full -#define CYGARC_REG_SCSSR1_DR 0x0001 // receive data ready - -// When clearing the status register, always write the value: -// CYGARC_REG_SCSSR2_CLEARMASK & ~bit -// to prevent other bits than the one of interest to be cleared. -#define CYGARC_REG_SCSSR1_CLEARMASK 0xf3 - -// Serial FIFO Control Register -#define CYGARC_REG_SCFCR1_RTRG_MASK 0xc0 // receive fifo data trigger -#define CYGARC_REG_SCFCR1_RTRG_1 0x00 // trigger on 1 char -#define CYGARC_REG_SCFCR1_RTRG_4 0x40 // trigger on 4 chars -#define CYGARC_REG_SCFCR1_RTRG_8 0x80 // trigger on 8 chars -#define CYGARC_REG_SCFCR1_RTRG_14 0xc0 // trigger on 14 chars - -#define CYGARC_REG_SCFCR1_TTRG_MASK 0x30 // transmit fifo data trigger -#define CYGARC_REG_SCFCR1_TTRG_8 0x00 // trigger on 8 chars -#define CYGARC_REG_SCFCR1_TTRG_4 0x10 // trigger on 4 chars -#define CYGARC_REG_SCFCR1_TTRG_2 0x20 // trigger on 2 chars -#define CYGARC_REG_SCFCR1_TTRG_1 0x30 // trigger on 1 char - -#define CYGARC_REG_SCFCR1_MCE 0x08 // modem control enable -#define CYGARC_REG_SCFCR1_TFRST 0x04 // transmit fifo reset -#define CYGARC_REG_SCFCR1_RFRST 0x02 // receive fifo reset -#define CYGARC_REG_SCFCR1_LOOP 0x01 // loop back test - - -// Serial FIFO Data Count Set Register -#define CYGARC_REG_SCFDR1_RCOUNT_MASK 0x001f // number of chars in r fifo -#define CYGARC_REG_SCFDR1_RCOUNT_shift 0 -#define CYGARC_REG_SCFDR1_TCOUNT_MASK 0x1f00 // number of chars in t fifo -#define CYGARC_REG_SCFDR1_TCOUNT_shift 8 - -#endif // CYGARC_SH_MOD_IRDA - -//++++++ Module SCIF +++++++++++++++++++++++++++++++++++++++++++++++++++++++ -#ifdef CYGARC_SH_MOD_SCIF - -//-------------------------------------------------------------------------- -// Serial w FIFO registers - -#define CYGARC_REG_SCSMR2 0xa4000150 // Serial mode -#define CYGARC_REG_SCBRR2 0xa4000152 // Bit rate -#define CYGARC_REG_SCSCR2 0xa4000154 // Serial control -#define CYGARC_REG_SCFTDR2 0xa4000156 // Transmit FIFO data -#define CYGARC_REG_SCSSR2 0xa4000158 // Serial status -#define CYGARC_REG_SCFRDR2 0xa400015a // Receive data FIFO -#define CYGARC_REG_SCFCR2 0xa400015c // FIFO control register -#define CYGARC_REG_SCFDR2 0xa400015e // FIFO data count set - -// Serial Mode Register -#define CYGARC_REG_SCSMR2_CHR 0x40 // character length (7 if set) -#define CYGARC_REG_SCSMR2_PE 0x20 // parity enable -#define CYGARC_REG_SCSMR2_OE 0x10 // parity mode -#define CYGARC_REG_SCSMR2_STOP 0x08 // stop bit length -#define CYGARC_REG_SCSMR2_CKS1 0x02 // clock select 1 -#define CYGARC_REG_SCSMR2_CKS0 0x01 // clock select 0 -#define CYGARC_REG_SCSMR2_CKSx_MASK 0x03 // mask - -// Serial Control Register -#define CYGARC_REG_SCSCR2_TIE 0x80 // transmit interrupt enable -#define CYGARC_REG_SCSCR2_RIE 0x40 // receive interrupt enable -#define CYGARC_REG_SCSCR2_TE 0x20 // transmit enable -#define CYGARC_REG_SCSCR2_RE 0x10 // receive enable -#define CYGARC_REG_SCSCR2_CKE1 0x02 // clock enable 1 -#define CYGARC_REG_SCSCR2_CKE0 0x01 // clock enable 0 - -// Serial Status Register -#define CYGARC_REG_SCSSR2_PER_MASK 0xf000 // number of parity errors -#define CYGARC_REG_SCSSR2_PER_shift 12 -#define CYGARC_REG_SCSSR2_FER_MASK 0x0f00 // number of framing errors -#define CYGARC_REG_SCSSR2_FER_shift 8 -#define CYGARC_REG_SCSSR2_ER 0x0080 // receive error -#define CYGARC_REG_SCSSR2_TEND 0x0040 // transmit end -#define CYGARC_REG_SCSSR2_TDFE 0x0020 // transmit fifo data empty -#define CYGARC_REG_SCSSR2_BRK 0x0010 // break detection -#define CYGARC_REG_SCSSR2_FER 0x0008 // framing error -#define CYGARC_REG_SCSSR2_PER 0x0004 // parity error -#define CYGARC_REG_SCSSR2_RDF 0x0002 // receive fifo data full -#define CYGARC_REG_SCSSR2_DR 0x0001 // receive data ready - -// When clearing the status register, always write the value: -// CYGARC_REG_SCSSR2_CLEARMASK & ~bit -// to prevent other bits than the one of interest to be cleared. -#define CYGARC_REG_SCSSR2_CLEARMASK 0xf3 - -// Serial FIFO Control Register -#define CYGARC_REG_SCFCR2_RTRG_MASK 0xc0 // receive fifo data trigger -#define CYGARC_REG_SCFCR2_RTRG_1 0x00 // trigger on 1 char -#define CYGARC_REG_SCFCR2_RTRG_4 0x40 // trigger on 4 chars -#define CYGARC_REG_SCFCR2_RTRG_8 0x80 // trigger on 8 chars -#define CYGARC_REG_SCFCR2_RTRG_14 0xc0 // trigger on 14 chars - -#define CYGARC_REG_SCFCR2_TTRG_MASK 0x30 // transmit fifo data trigger -#define CYGARC_REG_SCFCR2_TTRG_8 0x00 // trigger on 8 chars -#define CYGARC_REG_SCFCR2_TTRG_4 0x10 // trigger on 4 chars -#define CYGARC_REG_SCFCR2_TTRG_2 0x20 // trigger on 2 chars -#define CYGARC_REG_SCFCR2_TTRG_1 0x30 // trigger on 1 char - -#define CYGARC_REG_SCFCR2_MCE 0x08 // modem control enable -#define CYGARC_REG_SCFCR2_TFRST 0x04 // transmit fifo reset -#define CYGARC_REG_SCFCR2_RFRST 0x02 // receive fifo reset -#define CYGARC_REG_SCFCR2_LOOP 0x01 // loop back test - - -// Serial FIFO Data Count Set Register -#define CYGARC_REG_SCFDR2_RCOUNT_MASK 0x001f // number of chars in r fifo -#define CYGARC_REG_SCFDR2_RCOUNT_shift 0 -#define CYGARC_REG_SCFDR2_TCOUNT_MASK 0x1f00 // number of chars in t fifo -#define CYGARC_REG_SCFDR2_TCOUNT_shift 8 - -#endif // CYGARC_SH_MOD_SCIF - -//++++++ Module DMAC +++++++++++++++++++++++++++++++++++++++++++++++++++++++ -#ifdef CYGARC_SH_MOD_DMAC - -//-------------------------------------------------------------------------- -// DMA Controller registers - -#define CYGARC_REG_SAR0 0xa4000020 -#define CYGARC_REG_DAR0 0xa4000024 -#define CYGARC_REG_DMATCR0 0xa4000028 -#define CYGARC_REG_CHCR0 0xa400002c -#define CYGARC_REG_SAR1 0xa4000030 -#define CYGARC_REG_DAR1 0xa4000034 -#define CYGARC_REG_DMATCR1 0xa4000038 -#define CYGARC_REG_CHCR1 0xa400003c -#define CYGARC_REG_SAR2 0xa4000040 -#define CYGARC_REG_DAR2 0xa4000044 -#define CYGARC_REG_DMATCR2 0xa4000048 -#define CYGARC_REG_CHCR2 0xa400004c -#define CYGARC_REG_SAR3 0xa4000050 -#define CYGARC_REG_DAR3 0xa4000054 -#define CYGARC_REG_DMATCR3 0xa4000058 -#define CYGARC_REG_CHCR3 0xa400005c -#define CYGARC_REG_DMAOR 0xa4000060 - -// Offsets from base register -#define CYGARC_REG_SAR 0x00 -#define CYGARC_REG_DAR 0x04 -#define CYGARC_REG_DMATCR 0x08 -#define CYGARC_REG_CHCR 0x0c - - -// DMA Channel Control Register. If there's a digit suffix to CHCR the flag -// is only valid in the listed channels. -#define CYGARC_REG_CHCR3_DI 0x00100000 // direct/indirect selection -#define CYGARC_REG_CHCR2_RO 0x00080000 // source address reload -#define CYGARC_REG_CHCR01_RL 0x00040000 // request check level -#define CYGARC_REG_CHCR01_AM 0x00020000 // acknowledge mode -#define CYGARC_REG_CHCR01_AL 0x00010000 // acknowledge level -#define CYGARC_REG_CHCR_DM1 0x00008000 // destination address mode -#define CYGARC_REG_CHCR_DM0 0x00004000 -#define CYGARC_REG_CHCR_SM1 0x00002000 // source address mode -#define CYGARC_REG_CHCR_SM0 0x00001000 -#define CYGARC_REG_CHCR_RS3 0x00000800 // resource select -#define CYGARC_REG_CHCR_RS2 0x00000400 -#define CYGARC_REG_CHCR_RS1 0x00000200 -#define CYGARC_REG_CHCR_RS0 0x00000100 -#define CYGARC_REG_CHCR01_DS 0x00000040 // DREQ select -#define CYGARC_REG_CHCR_TM 0x00000020 // transmit mode -#define CYGARC_REG_CHCR_TS1 0x00000010 // transmit size -#define CYGARC_REG_CHCR_TS0 0x00000008 -#define CYGARC_REG_CHCR_IE 0x00000004 // interrupt enable -#define CYGARC_REG_CHCR_TE 0x00000002 // transfer end -#define CYGARC_REG_CHCR_DE 0x00000001 // DMAC enable - -// Resource select options -#define CYGARC_REG_CHCR_RS_EXT_DUAL 0x00000000 -#define CYGARC_REG_CHCR_RS_EXT_EX_DAC 0x00000100 -#define CYGARC_REG_CHCR_RS_EXT_DAC_EX 0x00000300 -#define CYGARC_REG_CHCR_RS_AUTO 0x00000400 -#define CYGARC_REG_CHCR_RS_IRDA_TX 0x00000a00 -#define CYGARC_REG_CHCR_RS_IRDA_RX 0x00000b00 -#define CYGARC_REG_CHCR_RS_SCIF_TX 0x00000c00 -#define CYGARC_REG_CHCR_RS_SCIF_RX 0x00000d00 -#define CYGARC_REG_CHCR_RS_AD 0x00000e00 -#define CYGARC_REG_CHCR_RS_CMT 0x00000f00 - - -// DMA Operation Register -#define CYGARC_REG_DMAOR_PR1 0x0200 // priority level -#define CYGARC_REG_DMAOR_PR0 0x0100 -#define CYGARC_REG_DMAOR_AE 0x0004 // address error flag -#define CYGARC_REG_DMAOR_NMIF 0x0002 // NMI flag -#define CYGARC_REG_DMAOR_DME 0x0001 // DMA master enable - - -#endif // CYGARC_SH_MOD_DMAC - -//++++++ Module PFC +++++++++++++++++++++++++++++++++++++++++++++++++++++++ -#ifdef CYGARC_SH_MOD_PFC - -#define CYGARC_REG_PACR 0xa4000100 // port A control -#define CYGARC_REG_PBCR 0xa4000102 // port B control -#define CYGARC_REG_PCCR 0xa4000104 // port C control -#define CYGARC_REG_PDCR 0xa4000106 // port D control -#define CYGARC_REG_PECR 0xa4000108 // port E control -#define CYGARC_REG_PFCR 0xa400010a // port F control -#define CYGARC_REG_PGCR 0xa400010c // port G control -#define CYGARC_REG_PHCR 0xa400010e // port H control -#define CYGARC_REG_PJCR 0xa4000110 // port J control -#define CYGARC_REG_PKCR 0xa4000112 // port K control -#define CYGARC_REG_PLCR 0xa4000114 // port L control -#define CYGARC_REG_SCPCR 0xa4000116 // SC port control - -#define CYGARC_REG_PADR 0xa4000120 // port A data -#define CYGARC_REG_PBDR 0xa4000122 // port B data -#define CYGARC_REG_PCDR 0xa4000124 // port C data -#define CYGARC_REG_PDDR 0xa4000126 // port D data -#define CYGARC_REG_PEDR 0xa4000128 // port E data -#define CYGARC_REG_PFDR 0xa400012a // port F data -#define CYGARC_REG_PGDR 0xa400012c // port G data -#define CYGARC_REG_PHDR 0xa400012e // port H data -#define CYGARC_REG_PJDR 0xa4000130 // port J data -#define CYGARC_REG_PKDR 0xa4000132 // port K data -#define CYGARC_REG_PLDR 0xa4000134 // port L data -#define CYGARC_REG_SCPDR 0xa4000136 // SC port data - - -// Port C -#define CYGARC_REG_PCCR_PC7_MASK 0xc000 -#define CYGARC_REG_PCCR_PC7_shift 14 -#define CYGARC_REG_PCCR_PC6_MASK 0x3000 -#define CYGARC_REG_PCCR_PC6_shift 12 -#define CYGARC_REG_PCCR_PC5_MASK 0x0c00 -#define CYGARC_REG_PCCR_PC5_shift 10 -#define CYGARC_REG_PCCR_PC4_MASK 0x0300 -#define CYGARC_REG_PCCR_PC4_shift 8 -#define CYGARC_REG_PCCR_PC3_MASK 0x00c0 -#define CYGARC_REG_PCCR_PC3_shift 6 -#define CYGARC_REG_PCCR_PC2_MASK 0x0030 -#define CYGARC_REG_PCCR_PC2_shift 4 -#define CYGARC_REG_PCCR_PC1_MASK 0x000c -#define CYGARC_REG_PCCR_PC1_shift 2 -#define CYGARC_REG_PCCR_PC0_MASK 0x0003 -#define CYGARC_REG_PCCR_PC0_shift 0 - -#define CYGARC_REG_PCCR_MD_OTHER 0x0 -#define CYGARC_REG_PCCR_MD_OUT 0x1 -#define CYGARC_REG_PCCR_MD_IN_ON 0x2 -#define CYGARC_REG_PCCR_MD_IN_OFF 0x3 - -#define CYGARC_REG_PCDR_PC7DT 0x80 -#define CYGARC_REG_PCDR_PC6DT 0x40 -#define CYGARC_REG_PCDR_PC5DT 0x20 -#define CYGARC_REG_PCDR_PC4DT 0x10 -#define CYGARC_REG_PCDR_PC3DT 0x08 -#define CYGARC_REG_PCDR_PC2DT 0x04 -#define CYGARC_REG_PCDR_PC1DT 0x02 -#define CYGARC_REG_PCDR_PC0DT 0x01 - - -#endif // CYGARC_SH_MOD_PFC +#include <cyg/hal/var_regs.h> #endif // ifndef CYGONCE_HAL_SH_REGS_H
--- a/packages/hal/sh/arch/current/src/hal_misc.c +++ b/packages/hal/sh/arch/current/src/hal_misc.c @@ -53,6 +53,8 @@ #include <cyg/hal/hal_cache.h> // HAL cache #include <cyg/hal/hal_intr.h> // HAL interrupts/exceptions +#include <cyg/hal/sh_regs.h> // timer registers + //--------------------------------------------------------------------------- // Functions used during initialization. @@ -193,43 +195,6 @@ hal_idle_thread_action( cyg_uint32 count } //--------------------------------------------------------------------------- -// Initial cache enabling - -#ifdef CYGHWR_HAL_SH_CACHE_MODE_P0_WRITE_BACK -# define CACHE_MODE_P0 0 -#else -# define CACHE_MODE_P0 CYGARC_REG_CCR_WT -#endif - -#ifdef CYGHWR_HAL_SH_CACHE_MODE_P1_WRITE_BACK -# define CACHE_MODE_P1 CYGARC_REG_CCR_CB -#else -# define CACHE_MODE_P1 0 -#endif - -externC void -cyg_hal_enable_caches(void) -{ - // Initialize cache. - HAL_UCACHE_INVALIDATE_ALL(); - - // Set cache modes - HAL_UCACHE_WRITE_MODE_SH(CACHE_MODE_P0|CACHE_MODE_P1); - -#ifdef CYGHWR_HAL_SH_CACHE_ENABLE - // Enable cache. - HAL_UCACHE_ENABLE(); -#endif -} - -//--------------------------------------------------------------------------- -// SH3 variant stuff -// This should be split out... -void -hal_variant_init(void) -{ -} - // Low-level delay (in microseconds) void @@ -259,342 +224,4 @@ hal_delay_us(int usecs) } //--------------------------------------------------------------------------- -// Interrupt function support - -#ifdef CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING -externC cyg_uint8 cyg_hal_ILVL_table[]; -#define HAL_UPDATE_ILVL_TABLE(_vector_, _level_) \ - /* Update the ILVL table, so it is easy for the interrupt entry */ \ - /* code to find out the level of a given interrupt source. */ \ - cyg_hal_ILVL_table[(_vector_)] = (_level_) -#else -#define HAL_UPDATE_ILVL_TABLE(_vector_, _level_) -#endif - -void -hal_interrupt_set_level(int vector, int level) -{ - cyg_uint16 iprX; - - CYG_ASSERT((0 <= (level) && 15 >= (level)), "Illegal level"); - CYG_ASSERT((CYGNUM_HAL_ISR_MIN <= (vector) - && CYGNUM_HAL_ISR_MAX >= (vector)), "Illegal vector"); - - HAL_UPDATE_ILVL_TABLE(vector, level); - - switch( (vector) ) { - case CYGNUM_HAL_INTERRUPT_NMI: - /* fall through */ - case CYGNUM_HAL_INTERRUPT_LVL0...CYGNUM_HAL_INTERRUPT_LVL14: - /* Cannot change levels */ - break; - - /* IPRA */ - case CYGNUM_HAL_INTERRUPT_TMU0_TUNI0: - HAL_READ_UINT16(CYGARC_REG_IPRA, iprX); - iprX &= ~CYGARC_REG_IPRA_TMU0_MASK; - iprX |= (level)*CYGARC_REG_IPRA_TMU0_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRA, iprX); - break; - case CYGNUM_HAL_INTERRUPT_TMU1_TUNI1: - HAL_READ_UINT16(CYGARC_REG_IPRA, iprX); - iprX &= ~CYGARC_REG_IPRA_TMU1_MASK; - iprX |= (level)*CYGARC_REG_IPRA_TMU1_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRA, iprX); - break; - case CYGNUM_HAL_INTERRUPT_TMU2_TUNI2: - case CYGNUM_HAL_INTERRUPT_TMU2_TICPI2: - HAL_READ_UINT16(CYGARC_REG_IPRA, iprX); - iprX &= ~CYGARC_REG_IPRA_TMU2_MASK; - iprX |= (level)*CYGARC_REG_IPRA_TMU2_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRA, iprX); - break; - case CYGNUM_HAL_INTERRUPT_RTC_ATI: - case CYGNUM_HAL_INTERRUPT_RTC_PRI: - case CYGNUM_HAL_INTERRUPT_RTC_CUI: - HAL_READ_UINT16(CYGARC_REG_IPRA, iprX); - iprX &= ~CYGARC_REG_IPRA_RTC_MASK; - iprX |= (level)*CYGARC_REG_IPRA_RTC_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRA, iprX); - break; - - /* IPRB */ - case CYGNUM_HAL_INTERRUPT_SCI_ERI: - case CYGNUM_HAL_INTERRUPT_SCI_RXI: - case CYGNUM_HAL_INTERRUPT_SCI_TXI: - case CYGNUM_HAL_INTERRUPT_SCI_TEI: - HAL_READ_UINT16(CYGARC_REG_IPRB, iprX); - iprX &= ~CYGARC_REG_IPRB_SCI_MASK; - iprX |= (level)*CYGARC_REG_IPRB_SCI_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRB, iprX); - break; - case CYGNUM_HAL_INTERRUPT_WDT_ITI: - HAL_READ_UINT16(CYGARC_REG_IPRB, iprX); - iprX &= ~CYGARC_REG_IPRB_WDT_MASK; - iprX |= (level)*CYGARC_REG_IPRB_WDT_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRB, iprX); - break; - case CYGNUM_HAL_INTERRUPT_REF_RCMI: - case CYGNUM_HAL_INTERRUPT_REF_ROVI: - HAL_READ_UINT16(CYGARC_REG_IPRB, iprX); - iprX &= ~CYGARC_REG_IPRB_REF_MASK; - iprX |= (level)*CYGARC_REG_IPRB_REF_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRB, iprX); - break; - -#ifndef CYGHWR_HAL_SH_IRQ_USE_IRQLVL - /* IPRC */ - case CYGNUM_HAL_INTERRUPT_IRQ_IRQ0: - HAL_READ_UINT16(CYGARC_REG_IPRC, iprX); - iprX &= ~CYGARC_REG_IPRC_IRQ0_MASK; - iprX |= (level)*CYGARC_REG_IPRC_IRQ0_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRC, iprX); - break; - case CYGNUM_HAL_INTERRUPT_IRQ_IRQ1: - HAL_READ_UINT16(CYGARC_REG_IPRC, iprX); - iprX &= ~CYGARC_REG_IPRC_IRQ1_MASK; - iprX |= (level)*CYGARC_REG_IPRC_IRQ1_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRC, iprX); - break; - case CYGNUM_HAL_INTERRUPT_IRQ_IRQ2: - HAL_READ_UINT16(CYGARC_REG_IPRC, iprX); - iprX &= ~CYGARC_REG_IPRC_IRQ2_MASK; - iprX |= (level)*CYGARC_REG_IPRC_IRQ2_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRC, iprX); - break; - case CYGNUM_HAL_INTERRUPT_IRQ_IRQ3: - HAL_READ_UINT16(CYGARC_REG_IPRC, iprX); - iprX &= ~CYGARC_REG_IPRC_IRQ3_MASK; - iprX |= (level)*CYGARC_REG_IPRC_IRQ3_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRC, iprX); - break; -#endif - /* IPRD */ - case CYGNUM_HAL_INTERRUPT_PINT_PINT07: - HAL_READ_UINT16(CYGARC_REG_IPRD, iprX); - iprX &= ~CYGARC_REG_IPRD_PINT07_MASK; - iprX |= (level)*CYGARC_REG_IPRD_PINT07_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRD, iprX); - break; - case CYGNUM_HAL_INTERRUPT_PINT_PINT8F: - HAL_READ_UINT16(CYGARC_REG_IPRD, iprX); - iprX &= ~CYGARC_REG_IPRD_PINT8F_MASK; - iprX |= (level)*CYGARC_REG_IPRD_PINT8F_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRD, iprX); - break; - case CYGNUM_HAL_INTERRUPT_IRQ_IRQ5: - HAL_READ_UINT16(CYGARC_REG_IPRD, iprX); - iprX &= ~CYGARC_REG_IPRD_IRQ5_MASK; - iprX |= (level)*CYGARC_REG_IPRD_IRQ5_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRD, iprX); - break; - case CYGNUM_HAL_INTERRUPT_IRQ_IRQ4: - HAL_READ_UINT16(CYGARC_REG_IPRD, iprX); - iprX &= ~CYGARC_REG_IPRD_IRQ4_MASK; - iprX |= (level)*CYGARC_REG_IPRD_IRQ4_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRD, iprX); - break; - - /* IPRE */ - case CYGNUM_HAL_INTERRUPT_DMAC_DEI0: - case CYGNUM_HAL_INTERRUPT_DMAC_DEI1: - case CYGNUM_HAL_INTERRUPT_DMAC_DEI2: - case CYGNUM_HAL_INTERRUPT_DMAC_DEI3: - HAL_READ_UINT16(CYGARC_REG_IPRE, iprX); - iprX &= ~CYGARC_REG_IPRE_DMAC_MASK; - iprX |= (level)*CYGARC_REG_IPRE_DMAC_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRE, iprX); - break; - case CYGNUM_HAL_INTERRUPT_IRDA_ERI1: - case CYGNUM_HAL_INTERRUPT_IRDA_RXI1: - case CYGNUM_HAL_INTERRUPT_IRDA_BRI1: - case CYGNUM_HAL_INTERRUPT_IRDA_TXI1: - HAL_READ_UINT16(CYGARC_REG_IPRE, iprX); - iprX &= ~CYGARC_REG_IPRE_IRDA_MASK; - iprX |= (level)*CYGARC_REG_IPRE_IRDA_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRE, iprX); - break; - case CYGNUM_HAL_INTERRUPT_SCIF_ERI2: - case CYGNUM_HAL_INTERRUPT_SCIF_RXI2: - case CYGNUM_HAL_INTERRUPT_SCIF_BRI2: - case CYGNUM_HAL_INTERRUPT_SCIF_TXI2: - HAL_READ_UINT16(CYGARC_REG_IPRE, iprX); - iprX &= ~CYGARC_REG_IPRE_SCIF_MASK; - iprX |= (level)*CYGARC_REG_IPRE_SCIF_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRE, iprX); - break; - case CYGNUM_HAL_INTERRUPT_ADC_ADI: - HAL_READ_UINT16(CYGARC_REG_IPRE, iprX); - iprX &= ~CYGARC_REG_IPRE_ADC_MASK; - iprX |= (level)*CYGARC_REG_IPRE_ADC_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRE, iprX); - break; - - /* IPRF */ - case CYGNUM_HAL_INTERRUPT_LCDC_LCDI: - HAL_READ_UINT16(CYGARC_REG_IPRF, iprX); - iprX &= ~CYGARC_REG_IPRF_LCDI_MASK; - iprX |= (level)*CYGARC_REG_IPRF_LCDI_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRF, iprX); - break; - case CYGNUM_HAL_INTERRUPT_PCC_PCC0: - HAL_READ_UINT16(CYGARC_REG_IPRF, iprX); - iprX &= ~CYGARC_REG_IPRF_PCC0_MASK; - iprX |= (level)*CYGARC_REG_IPRF_PCC0_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRF, iprX); - break; - case CYGNUM_HAL_INTERRUPT_PCC_PCC1: - HAL_READ_UINT16(CYGARC_REG_IPRF, iprX); - iprX &= ~CYGARC_REG_IPRF_PCC1_MASK; - iprX |= (level)*CYGARC_REG_IPRF_PCC1_PRI1; - HAL_WRITE_UINT16(CYGARC_REG_IPRF, iprX); - break; - - case CYGNUM_HAL_INTERRUPT_RESERVED_1E0: - case CYGNUM_HAL_INTERRUPT_RESERVED_3E0: - /* Do nothing for these reserved vectors. */ - break; - - default: - CYG_FAIL("Unknown interrupt vector"); - break; - } -} - -void -hal_interrupt_mask(int vector) -{ - switch( (vector) ) { - case CYGNUM_HAL_INTERRUPT_NMI: - /* fall through */ - case CYGNUM_HAL_INTERRUPT_LVL0...CYGNUM_HAL_INTERRUPT_LVL14: - /* Can only be masked by fiddling Imask in SR. */ - break; - case CYGNUM_HAL_INTERRUPT_TMU0_TUNI0...CYGNUM_HAL_ISR_MAX: - HAL_INTERRUPT_SET_LEVEL((vector), 0); - break; - case CYGNUM_HAL_INTERRUPT_RESERVED_1E0: - case CYGNUM_HAL_INTERRUPT_RESERVED_3E0: - /* Do nothing for these reserved vectors. */ - break; - default: - CYG_FAIL("Unknown interrupt vector"); - break; - } -} - -void -hal_interrupt_unmask(int vector) -{ - switch( (vector) ) { - case CYGNUM_HAL_INTERRUPT_NMI: - /* fall through */ - case CYGNUM_HAL_INTERRUPT_LVL0...CYGNUM_HAL_INTERRUPT_LVL14: - /* Can only be unmasked by fiddling Imask in SR. */ - break; - case CYGNUM_HAL_INTERRUPT_TMU0_TUNI0...CYGNUM_HAL_ISR_MAX: - HAL_INTERRUPT_SET_LEVEL((vector), 1); - break; - case CYGNUM_HAL_INTERRUPT_RESERVED_1E0: - case CYGNUM_HAL_INTERRUPT_RESERVED_3E0: - /* Do nothing for these reserved vectors. */ - break; - default: - CYG_FAIL("Unknown interrupt vector"); - break; - } -} - -void -hal_interrupt_acknowledge(int vector) -{ - if ( (vector) >= CYGNUM_HAL_INTERRUPT_IRQ_IRQ0 - && (vector) <= CYGNUM_HAL_INTERRUPT_IRQ_IRQ5) { - - cyg_uint8 irr0; - - HAL_READ_UINT8(CYGARC_REG_IRR0, irr0); - switch ( vector ) { -#ifndef CYGHWR_HAL_SH_IRQ_USE_IRQLVL - case CYGNUM_HAL_INTERRUPT_IRQ_IRQ0: - irr0 &= ~CYGARC_REG_IRR0_IRQ0; - break; - case CYGNUM_HAL_INTERRUPT_IRQ_IRQ1: - irr0 &= ~CYGARC_REG_IRR0_IRQ1; - break; - case CYGNUM_HAL_INTERRUPT_IRQ_IRQ2: - irr0 &= ~CYGARC_REG_IRR0_IRQ2; - break; - case CYGNUM_HAL_INTERRUPT_IRQ_IRQ3: - irr0 &= ~CYGARC_REG_IRR0_IRQ3; - break; -#endif - case CYGNUM_HAL_INTERRUPT_IRQ_IRQ4: - irr0 &= ~CYGARC_REG_IRR0_IRQ4; - break; - case CYGNUM_HAL_INTERRUPT_IRQ_IRQ5: - irr0 &= ~CYGARC_REG_IRR0_IRQ5; - break; - default: - CYG_FAIL("Unhandled interrupt vector"); - } - HAL_WRITE_UINT8(CYGARC_REG_IRR0, irr0); - } -} - -// Note: The PINTs can be masked and configured individually, even -// though there are only two vectors. Maybe add some fake vectors just -// for masking/configuring? -void -hal_interrupt_configure(int vector, int level, int up) -{ - if ( (vector) >= CYGNUM_HAL_INTERRUPT_IRQ_IRQ0 - && (vector) <= CYGNUM_HAL_INTERRUPT_IRQ_IRQ5) { - - cyg_uint16 icr1, ss, mask; - ss = 0; - mask = CYGARC_REG_ICR1_SENSE_UP|CYGARC_REG_ICR1_SENSE_LEVEL; - if (up) ss |= CYGARC_REG_ICR1_SENSE_UP; - if (level) ss |= CYGARC_REG_ICR1_SENSE_LEVEL; - CYG_ASSERT(!(up && level), "Cannot trigger on high level!"); - - switch( (vector) ) { - case CYGNUM_HAL_INTERRUPT_IRQ_IRQ5: - ss <<= CYGARC_REG_ICR1_SENSE_IRQ5_shift; - mask <<= CYGARC_REG_ICR1_SENSE_IRQ5_shift; - break; - case CYGNUM_HAL_INTERRUPT_IRQ_IRQ4: - ss <<= CYGARC_REG_ICR1_SENSE_IRQ4_shift; - mask <<= CYGARC_REG_ICR1_SENSE_IRQ4_shift; - break; -#ifndef CYGHWR_HAL_SH_IRQ_USE_IRQLVL - case CYGNUM_HAL_INTERRUPT_IRQ_IRQ3: - ss <<= CYGARC_REG_ICR1_SENSE_IRQ3_shift; - mask <<= CYGARC_REG_ICR1_SENSE_IRQ3_shift; - break; - case CYGNUM_HAL_INTERRUPT_IRQ_IRQ2: - ss <<= CYGARC_REG_ICR1_SENSE_IRQ2_shift; - mask <<= CYGARC_REG_ICR1_SENSE_IRQ2_shift; - break; - case CYGNUM_HAL_INTERRUPT_IRQ_IRQ1: - ss <<= CYGARC_REG_ICR1_SENSE_IRQ1_shift; - mask <<= CYGARC_REG_ICR1_SENSE_IRQ1_shift; - break; - case CYGNUM_HAL_INTERRUPT_IRQ_IRQ0: - ss <<= CYGARC_REG_ICR1_SENSE_IRQ0_shift; - mask <<= CYGARC_REG_ICR1_SENSE_IRQ0_shift; - break; -#endif - default: - CYG_FAIL("Unhandled interrupt vector"); - } - - HAL_READ_UINT16(CYGARC_REG_ICR1, icr1); - icr1 &= ~mask; - icr1 |= ss; - HAL_WRITE_UINT16(CYGARC_REG_ICR1, icr1); - } -} - -//--------------------------------------------------------------------------- // End of hal_misc.c
--- a/packages/hal/sh/arch/current/src/hal_mk_defs.c +++ b/packages/hal/sh/arch/current/src/hal_mk_defs.c @@ -103,18 +103,6 @@ main(void) DEFINE(CYGNUM_HAL_VSR_MAX, CYGNUM_HAL_VSR_MAX); DEFINE(CYGNUM_HAL_VSR_COUNT, CYGNUM_HAL_VSR_COUNT); DEFINE(CYGNUM_HAL_VSR_EXCEPTION_COUNT, CYGNUM_HAL_VSR_EXCEPTION_COUNT); - - // Caching details - DEFINE(CYGARC_REG_CACHE_ADDRESS_FLUSH, CYGARC_REG_CACHE_ADDRESS_FLUSH); - DEFINE(CYGARC_REG_CACHE_ADDRESS_BASE,CYGARC_REG_CACHE_ADDRESS_BASE); - DEFINE(CYGARC_REG_CACHE_ADDRESS_TOP,CYGARC_REG_CACHE_ADDRESS_TOP); - DEFINE(CYGARC_REG_CACHE_ADDRESS_STEP,CYGARC_REG_CACHE_ADDRESS_STEP); - DEFINE(HAL_UCACHE_SIZE, HAL_UCACHE_SIZE); - DEFINE(HAL_UCACHE_WAYS, HAL_UCACHE_WAYS); - DEFINE(HAL_UCACHE_LINE_SIZE, HAL_UCACHE_LINE_SIZE); - - - // Variant definitions - want these to be included instead. } //--------------------------------------------------------------------------
deleted file mode 100644 --- a/packages/hal/sh/arch/current/src/sh3_sci.c +++ /dev/null @@ -1,307 +0,0 @@ -//============================================================================= -// -// sh3_sci.c -// -// Simple driver for the SH Serial Communication Interface (SCI) -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jskov -// Contributors:jskov -// Date: 1999-05-17 -// Description: Simple driver for the SH Serial Communication Interface -// Clients of this file can configure the behavior with: -// CYGNUM_SCI_PORTS: number of SCI ports -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include <pkgconf/hal.h> - -#ifdef CYGNUM_HAL_SH_SH3_SCI_PORTS - -#include <cyg/hal/hal_io.h> // IO macros -#include <cyg/hal/drv_api.h> // CYG_ISR_HANDLED -#include <cyg/hal/hal_misc.h> // Helper functions -#include <cyg/hal/hal_intr.h> // HAL_ENABLE/MASK/UNMASK_INTERRUPTS -#include <cyg/hal/hal_arch.h> // SAVE/RESTORE GP -#include <cyg/hal/hal_if.h> // Calling-if API -#include <cyg/hal/sh_regs.h> // serial register definitions - -#include <cyg/hal/sh3_sci.h> // our header - -//-------------------------------------------------------------------------- - -#ifndef CYGNUM_HAL_SH_SH3_SCI_DEFAULT_BAUD_RATE -# define CYGNUM_HAL_SH_SH3_SCI_DEFAULT_BAUD_RATE 38400 -#endif - -void -cyg_hal_plf_sci_init_channel(const channel_data_t* chan) -{ - cyg_uint8 tmp; - cyg_uint8* base = chan->base; - - // Disable Tx/Rx interrupts, but enable Tx/Rx - HAL_WRITE_UINT8(base+_REG_SCSCR, - CYGARC_REG_SCSCR_TE|CYGARC_REG_SCSCR_RE); - - // 8-1-no parity. - HAL_WRITE_UINT8(base+_REG_SCSMR, 0); - - // Set speed to CYGNUM_HAL_SH_SH3_SCI_DEFAULT_BAUD_RATE - HAL_READ_UINT8(base+_REG_SCSMR, tmp); - tmp &= ~CYGARC_REG_SCSMR_CKSx_MASK; - tmp |= CYGARC_SCBRR_CKSx(CYGNUM_HAL_SH_SH3_SCI_DEFAULT_BAUD_RATE); - HAL_WRITE_UINT8(base+_REG_SCSMR, tmp); - HAL_WRITE_UINT8(base+_REG_SCBRR, CYGARC_SCBRR_N(CYGNUM_HAL_SH_SH3_SCI_DEFAULT_BAUD_RATE)); -} - -static cyg_bool -cyg_hal_plf_sci_getc_nonblock(void* __ch_data, cyg_uint8* ch) -{ - cyg_uint8* base = ((channel_data_t*)__ch_data)->base; - cyg_uint8 sr; - - HAL_READ_UINT8(base+_REG_SCSSR, sr); - if ((sr & CYGARC_REG_SCSSR_RDRF) == 0) - return false; - - HAL_READ_UINT8(base+_REG_SCRDR, *ch); - - // Clear buffer full flag. - HAL_WRITE_UINT8(base+_REG_SCSSR, sr & ~CYGARC_REG_SCSSR_RDRF); - - return true; -} - -cyg_uint8 -cyg_hal_plf_sci_getc(void* __ch_data) -{ - cyg_uint8 ch; - CYGARC_HAL_SAVE_GP(); - - while(!cyg_hal_plf_sci_getc_nonblock(__ch_data, &ch)); - - CYGARC_HAL_RESTORE_GP(); - return ch; -} - -void -cyg_hal_plf_sci_putc(void* __ch_data, cyg_uint8 c) -{ - cyg_uint8* base = ((channel_data_t*)__ch_data)->base; - cyg_uint8 sr; - CYGARC_HAL_SAVE_GP(); - - do { - HAL_READ_UINT8(base+_REG_SCSSR, sr); - } while ((sr & CYGARC_REG_SCSSR_TDRE) == 0); - - HAL_WRITE_UINT8(base+_REG_SCTDR, c); - - // Clear empty flag. - HAL_WRITE_UINT8(base+_REG_SCSSR, sr & ~CYGARC_REG_SCSSR_TDRE); - - // Hang around until the character has been safely sent. - do { - HAL_READ_UINT8(base+_REG_SCSSR, sr); - } while ((sr & CYGARC_REG_SCSSR_TDRE) == 0); - - CYGARC_HAL_RESTORE_GP(); -} - -#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \ - || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES) - -static channel_data_t channels[CYGNUM_HAL_SH_SH3_SCI_PORTS]; - -static void -cyg_hal_plf_sci_write(void* __ch_data, const cyg_uint8* __buf, - cyg_uint32 __len) -{ - CYGARC_HAL_SAVE_GP(); - - while(__len-- > 0) - cyg_hal_plf_sci_putc(__ch_data, *__buf++); - - CYGARC_HAL_RESTORE_GP(); -} - -static void -cyg_hal_plf_sci_read(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len) -{ - CYGARC_HAL_SAVE_GP(); - - while(__len-- > 0) - *__buf++ = cyg_hal_plf_sci_getc(__ch_data); - - CYGARC_HAL_RESTORE_GP(); -} - -cyg_bool -cyg_hal_plf_sci_getc_timeout(void* __ch_data, cyg_uint8* ch) -{ - channel_data_t* chan = (channel_data_t*)__ch_data; - int delay_count; - cyg_bool res; - CYGARC_HAL_SAVE_GP(); - - delay_count = chan->msec_timeout * 10; // delay in .1 ms steps - - for(;;) { - res = cyg_hal_plf_sci_getc_nonblock(__ch_data, ch); - if (res || 0 == delay_count--) - break; - - CYGACC_CALL_IF_DELAY_US(100); - } - - CYGARC_HAL_RESTORE_GP(); - return res; -} - -static int -cyg_hal_plf_sci_control(void *__ch_data, __comm_control_cmd_t __func, ...) -{ - static int irq_state = 0; - channel_data_t* chan = (channel_data_t*)__ch_data; - cyg_uint8 scr; - int ret = 0; - CYGARC_HAL_SAVE_GP(); - - switch (__func) { - case __COMMCTL_IRQ_ENABLE: - irq_state = 1; - HAL_INTERRUPT_UNMASK(chan->isr_vector); - HAL_READ_UINT8(chan->base+_REG_SCSCR, scr); - scr |= CYGARC_REG_SCSCR_RIE; - HAL_WRITE_UINT8(chan->base+_REG_SCSCR, scr); - break; - case __COMMCTL_IRQ_DISABLE: - ret = irq_state; - irq_state = 0; - HAL_INTERRUPT_UNMASK(chan->isr_vector); - HAL_READ_UINT8(chan->base+_REG_SCSCR, scr); - scr &= ~CYGARC_REG_SCSCR_RIE; - HAL_WRITE_UINT8(chan->base+_REG_SCSCR, scr); - break; - case __COMMCTL_DBG_ISR_VECTOR: - ret = chan->isr_vector; - break; - case __COMMCTL_SET_TIMEOUT: - { - va_list ap; - - va_start(ap, __func); - - ret = chan->msec_timeout; - chan->msec_timeout = va_arg(ap, cyg_uint32); - - va_end(ap); - } - default: - break; - } - CYGARC_HAL_RESTORE_GP(); - return ret; -} - -static int -cyg_hal_plf_sci_isr(void *__ch_data, int* __ctrlc, - CYG_ADDRWORD __vector, CYG_ADDRWORD __data) -{ - cyg_uint8 c, sr; - cyg_uint8* base = ((channel_data_t*)__ch_data)->base; - int res = 0; - CYGARC_HAL_SAVE_GP(); - - *__ctrlc = 0; - HAL_READ_UINT8(base+_REG_SCSSR, sr); - if (sr & CYGARC_REG_SCSSR_RDRF) { - HAL_READ_UINT8(base+_REG_SCRDR, c); - - // Clear buffer full flag. - HAL_WRITE_UINT8(base+_REG_SCSSR, - CYGARC_REG_SCSSR_CLEARMASK & ~CYGARC_REG_SCSSR_RDRF); - - if( cyg_hal_is_break( &c , 1 ) ) - *__ctrlc = 1; - - res = CYG_ISR_HANDLED; - } - - CYGARC_HAL_RESTORE_GP(); - return res; -} - -void -cyg_hal_plf_sci_init(int sci_index, int comm_index, - int rcv_vect, cyg_uint8* base) -{ - channel_data_t* chan = &channels[sci_index]; - hal_virtual_comm_table_t* comm; - int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT); - - // Initialize channel table - chan->base = base; - chan->isr_vector = rcv_vect; - chan->msec_timeout = 1000; - - // Disable interrupts. - HAL_INTERRUPT_MASK(chan->isr_vector); - - // Init channel - - cyg_hal_plf_sci_init_channel(chan); - - // Setup procs in the vector table - - // Initialize channel procs - CYGACC_CALL_IF_SET_CONSOLE_COMM(comm_index); - comm = CYGACC_CALL_IF_CONSOLE_PROCS(); - CYGACC_COMM_IF_CH_DATA_SET(*comm, chan); - CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_plf_sci_write); - CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_plf_sci_read); - CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_plf_sci_putc); - CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_plf_sci_getc); - CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_plf_sci_control); - CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_sci_isr); - CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_plf_sci_getc_timeout); - - // Restore original console - CYGACC_CALL_IF_SET_CONSOLE_COMM(cur); -} - -#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES - -#endif // CYGNUM_HAL_SH_SH3_SCI_PORTS - -//----------------------------------------------------------------------------- -// end of sh_sci.c
deleted file mode 100644 --- a/packages/hal/sh/arch/current/src/sh3_scif.c +++ /dev/null @@ -1,344 +0,0 @@ -//============================================================================= -// -// sh3_scif.c -// -// Simple driver for the SH3 Serial Communication Interface with FIFO -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jskov -// Contributors:jskov -// Date: 2000-03-30 -// Description: Simple driver for the SH Serial Communication Interface -// The driver can be used for either the SCIF or the IRDA -// modules (the latter can act as the former). -// Clients of this file can configure the behavior with: -// CYGNUM_SCIF_PORTS: number of SCI ports -// -// Note: It should be possible to configure a channel to IRDA mode. -// Worry about that when some board needs it. -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include <pkgconf/hal.h> - -#ifdef CYGNUM_HAL_SH_SH3_SCIF_PORTS - -#include <cyg/hal/hal_io.h> // IO macros -#include <cyg/hal/drv_api.h> // CYG_ISR_HANDLED -#include <cyg/hal/hal_misc.h> // Helper functions -#include <cyg/hal/hal_intr.h> // HAL_ENABLE/MASK/UNMASK_INTERRUPTS -#include <cyg/hal/hal_arch.h> // SAVE/RESTORE GP -#include <cyg/hal/hal_if.h> // Calling-if API -#include <cyg/hal/sh_regs.h> // serial register definitions -#include <cyg/hal/sh_stub.h> // target_register_t - -#include <cyg/hal/sh3_scif.h> // our header - -//-------------------------------------------------------------------------- - -#ifndef CYGNUM_HAL_SH_SH3_SCIF_DEFAULT_BAUD_RATE -# define CYGNUM_HAL_SH_SH3_SCIF_DEFAULT_BAUD_RATE 38400 -#endif - -void -cyg_hal_plf_scif_init_channel(const channel_data_t* chan) -{ - cyg_uint8* base = chan->base; - cyg_uint8 tmp; - cyg_uint16 sr; - - // Disable everything. - HAL_WRITE_UINT8(base+_REG_SCSCR, 0); - - // Reset FIFO. - HAL_WRITE_UINT8(base+_REG_SCFCR, - CYGARC_REG_SCFCR2_TFRST|CYGARC_REG_SCFCR2_RFRST); - - // 8-1-no parity. - HAL_WRITE_UINT8(base+_REG_SCSMR, 0); - - // Set speed to CYGNUM_HAL_SH_SH3_SCIF_DEFAULT_BAUD_RATE - HAL_READ_UINT8(base+_REG_SCSMR, tmp); - tmp &= ~CYGARC_REG_SCSMR2_CKSx_MASK; - tmp |= CYGARC_SCBRR_CKSx(CYGNUM_HAL_SH_SH3_SCIF_DEFAULT_BAUD_RATE); - HAL_WRITE_UINT8(base+_REG_SCSMR, tmp); - HAL_WRITE_UINT8(base+_REG_SCBRR, CYGARC_SCBRR_N(CYGNUM_HAL_SH_SH3_SCIF_DEFAULT_BAUD_RATE)); - - // Let things settle: Here we should should wait the equivalent of - // one bit interval, - // i.e. 1/CYGNUM_HAL_SH_SH3_SCIF_DEFAULT_BAUD_RATE second, but - // until we have something like the Linux delay loop, it's hard to - // do reliably. So just move on and hope for the best (this is - // unlikely to cause problems since the CPU has just come out of - // reset anyway). - - // Clear status register (read back first). - HAL_READ_UINT16(base+_REG_SCSSR, sr); - HAL_WRITE_UINT16(base+_REG_SCSSR, 0); - - // Bring FIFO out of reset and set to trigger on every char in - // FIFO (or C-c input would not be processed). - HAL_WRITE_UINT8(base+_REG_SCFCR, - CYGARC_REG_SCFCR2_RTRG_1|CYGARC_REG_SCFCR2_TTRG_1); - - // Leave Tx/Rx interrupts disabled, but enable Tx/Rx - HAL_WRITE_UINT8(base+_REG_SCSCR, - CYGARC_REG_SCSCR2_TE|CYGARC_REG_SCSCR2_RE); -} - -//static -cyg_bool -cyg_hal_plf_scif_getc_nonblock(void* __ch_data, cyg_uint8* ch) -{ - cyg_uint8* base = ((channel_data_t*)__ch_data)->base; - cyg_uint16 fdr, sr; - - HAL_READ_UINT16(base+_REG_SCFDR, fdr); - if (0 == (fdr & CYGARC_REG_SCFDR2_RCOUNT_MASK)) - return false; - - HAL_READ_UINT8(base+_REG_SCFRDR, *ch); - - // Clear DR/RDF flags - HAL_READ_UINT16(base+_REG_SCSSR, sr); - HAL_WRITE_UINT16(base+_REG_SCSSR, - CYGARC_REG_SCSSR2_CLEARMASK & ~(CYGARC_REG_SCSSR2_RDF | CYGARC_REG_SCSSR2_DR)); - - return true; -} - -cyg_uint8 -cyg_hal_plf_scif_getc(void* __ch_data) -{ - cyg_uint8 ch; - CYGARC_HAL_SAVE_GP(); - - while(!cyg_hal_plf_scif_getc_nonblock(__ch_data, &ch)); - - CYGARC_HAL_RESTORE_GP(); - return ch; -} - -void -cyg_hal_plf_scif_putc(void* __ch_data, cyg_uint8 c) -{ - cyg_uint8* base = ((channel_data_t*)__ch_data)->base; - cyg_uint16 fdr, sr; - CYGARC_HAL_SAVE_GP(); - - do { - HAL_READ_UINT16(base+_REG_SCFDR, fdr); - } while (((fdr & CYGARC_REG_SCFDR2_TCOUNT_MASK) >> CYGARC_REG_SCFDR2_TCOUNT_shift) == 16); - - HAL_WRITE_UINT8(base+_REG_SCFTDR, c); - - // Clear FIFO-empty/transmit end flags (read back SR first) - HAL_READ_UINT16(base+_REG_SCSSR, sr); - HAL_WRITE_UINT16(base+_REG_SCSSR, CYGARC_REG_SCSSR2_CLEARMASK - & ~(CYGARC_REG_SCSSR2_TDFE | CYGARC_REG_SCSSR2_TEND )); - - // Hang around until the character has been safely sent. - do { - HAL_READ_UINT16(base+_REG_SCFDR, fdr); - } while ((fdr & CYGARC_REG_SCFDR2_TCOUNT_MASK) != 0); - - CYGARC_HAL_RESTORE_GP(); -} - -#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \ - || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES) - -static channel_data_t channels[CYGNUM_HAL_SH_SH3_SCIF_PORTS]; - -static void -cyg_hal_plf_scif_write(void* __ch_data, const cyg_uint8* __buf, - cyg_uint32 __len) -{ - CYGARC_HAL_SAVE_GP(); - - while(__len-- > 0) - cyg_hal_plf_scif_putc(__ch_data, *__buf++); - - CYGARC_HAL_RESTORE_GP(); -} - -static void -cyg_hal_plf_scif_read(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len) -{ - CYGARC_HAL_SAVE_GP(); - - while(__len-- > 0) - *__buf++ = cyg_hal_plf_scif_getc(__ch_data); - - CYGARC_HAL_RESTORE_GP(); -} - -cyg_bool -cyg_hal_plf_scif_getc_timeout(void* __ch_data, cyg_uint8* ch) -{ - channel_data_t* chan = (channel_data_t*)__ch_data; - int delay_count; - cyg_bool res; - CYGARC_HAL_SAVE_GP(); - - delay_count = chan->msec_timeout * 10; // delay in .1 ms steps - - for(;;) { - res = cyg_hal_plf_scif_getc_nonblock(__ch_data, ch); - if (res || 0 == delay_count--) - break; - - CYGACC_CALL_IF_DELAY_US(100); - } - - CYGARC_HAL_RESTORE_GP(); - return res; -} - -static int -cyg_hal_plf_scif_control(void *__ch_data, __comm_control_cmd_t __func, ...) -{ - static int irq_state = 0; - channel_data_t* chan = (channel_data_t*)__ch_data; - cyg_uint8 scr; - int ret = 0; - CYGARC_HAL_SAVE_GP(); - - switch (__func) { - case __COMMCTL_IRQ_ENABLE: - irq_state = 1; - HAL_INTERRUPT_UNMASK(chan->isr_vector); - HAL_READ_UINT8(chan->base+_REG_SCSCR, scr); - scr |= CYGARC_REG_SCSCR2_RIE; - HAL_WRITE_UINT8(chan->base+_REG_SCSCR, scr); - break; - case __COMMCTL_IRQ_DISABLE: - ret = irq_state; - irq_state = 0; - HAL_INTERRUPT_UNMASK(chan->isr_vector); - HAL_READ_UINT8(chan->base+_REG_SCSCR, scr); - scr &= ~CYGARC_REG_SCSCR2_RIE; - HAL_WRITE_UINT8(chan->base+_REG_SCSCR, scr); - break; - case __COMMCTL_DBG_ISR_VECTOR: - ret = chan->isr_vector; - break; - case __COMMCTL_SET_TIMEOUT: - { - va_list ap; - - va_start(ap, __func); - - ret = chan->msec_timeout; - chan->msec_timeout = va_arg(ap, cyg_uint32); - - va_end(ap); - } - default: - break; - } - CYGARC_HAL_RESTORE_GP(); - return ret; -} - -static int -cyg_hal_plf_scif_isr(void *__ch_data, int* __ctrlc, - CYG_ADDRWORD __vector, CYG_ADDRWORD __data) -{ - cyg_uint8 c; - cyg_uint16 fdr, sr; - cyg_uint8* base = ((channel_data_t*)__ch_data)->base; - int res = 0; - CYGARC_HAL_SAVE_GP(); - - *__ctrlc = 0; - HAL_READ_UINT16(base+_REG_SCFDR, fdr); - if ((fdr & CYGARC_REG_SCFDR2_RCOUNT_MASK) != 0) { - HAL_READ_UINT8(base+_REG_SCFRDR, c); - - // Clear buffer full flag (read back first). - HAL_READ_UINT16(base+_REG_SCSSR, sr); - HAL_WRITE_UINT16(base+_REG_SCSSR, - CYGARC_REG_SCSSR2_CLEARMASK & ~CYGARC_REG_SCSSR2_RDF); - - if( cyg_hal_is_break( &c , 1 ) ) - *__ctrlc = 1; - - res = CYG_ISR_HANDLED; - } - - CYGARC_HAL_RESTORE_GP(); - return res; -} - -void -cyg_hal_plf_scif_init(int scif_index, int comm_index, - int rcv_vect, cyg_uint8* base) -{ - channel_data_t* chan = &channels[scif_index]; - hal_virtual_comm_table_t* comm; - int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT); - - // Initialize channel table - chan->base = base; - chan->isr_vector = rcv_vect; - chan->msec_timeout = 1000; - - // Disable interrupts. - HAL_INTERRUPT_MASK(chan->isr_vector); - - // Init channel - cyg_hal_plf_scif_init_channel(chan); - - // Setup procs in the vector table - - // Initialize channel procs - CYGACC_CALL_IF_SET_CONSOLE_COMM(comm_index); - comm = CYGACC_CALL_IF_CONSOLE_PROCS(); - CYGACC_COMM_IF_CH_DATA_SET(*comm, chan); - CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_plf_scif_write); - CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_plf_scif_read); - CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_plf_scif_putc); - CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_plf_scif_getc); - CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_plf_scif_control); - CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_scif_isr); - CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_plf_scif_getc_timeout); - - // Restore original console - CYGACC_CALL_IF_SET_CONSOLE_COMM(cur); -} - -#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES - -#endif // CYGNUM_HAL_SH_SH3_SCIF_PORTS - -//----------------------------------------------------------------------------- -// end of sh3_scif.c
--- a/packages/hal/sh/arch/current/src/sh_stub.c +++ b/packages/hal/sh/arch/current/src/sh_stub.c @@ -131,7 +131,7 @@ void __single_step (void) // The address of the instruction to execute. HAL_WRITE_UINT32(CYGARC_REG_BARA, get_register(PC)); // Match entire address. -#ifdef CYGARC_SH_MOD_UBC_V1 +#if (CYGARC_SH_MOD_UBC == 1) HAL_WRITE_UINT8(CYGARC_REG_BAMRA, CYGARC_REG_BAMRA_BARA_UNMASKED); #else HAL_WRITE_UINT32(CYGARC_REG_BAMRA, 0xffffffff); @@ -140,7 +140,7 @@ void __single_step (void) HAL_WRITE_UINT16(CYGARC_REG_BRCR, CYGARC_REG_BRCR_PCBA); // Stop on IFETCH/READ HAL_WRITE_UINT16(CYGARC_REG_BBRA, -#ifdef CYGARC_SH_MOD_UBC_V3 +#if (CYGARC_SH_MOD_UBC == 3) CYGARC_REG_BBRA_CPU| // Match on CPU cycle #endif CYGARC_REG_BBRA_IFETCH|CYGARC_REG_BBRA_READ);
--- a/packages/hal/sh/arch/current/src/vectors.S +++ b/packages/hal/sh/arch/current/src/vectors.S @@ -53,6 +53,7 @@ #endif #include <cyg/hal/arch.inc> +#include <cyg/hal/variant.inc> #include <cyg/hal/sh_regs.h> #include <cyg/hal/sh_offsets.inc> @@ -66,22 +67,6 @@ #undef __DEBUG #=========================================================================== -# SR initialization value -# zero all bits except: -# MD = Processor operation mode field (privileged mode) -# I0-3 = Mask out all interrupts but NMI. -# -# When saving or restoring the state of an exception or interrupt, the bit -# CYGARC_REG_SR_RB is also set, switching the register bank. When this bit -# is set, interrupts must be disabled. -# -# Note: We could also use the BL bit to prevent interrupts, but that would -# also prevent the use of breakpoints. - -#define CYG_SR (CYGARC_REG_SR_MD|CYGARC_REG_SR_IMASK) -#define CYG_SR_BANK1 (CYGARC_REG_SR_MD|CYGARC_REG_SR_IMASK|CYGARC_REG_SR_RB) - -#=========================================================================== # Start by defining the exceptions vectors. .section ".vectors","ax" @@ -124,7 +109,7 @@ mov #1,r7 #endif - mov #CYGARC_REG_EXCEVT,r1 + mov.l $nCYGARC_REG_EXCEVT,r1 mov.l @r1,r1 shlr2 r1 shlr r1 ! divide cause by 0x08 @@ -160,7 +145,7 @@ #ifdef __DEBUG mov.l $exc_state_marker,r0 mov.l r0,@-r15 - mov #CYGARC_REG_EXCEVT,r0 + mov.l $nCYGARC_REG_EXCEVT,r0 mov.l @r0,r0 mov.l r0,@-r15 #endif @@ -213,7 +198,7 @@ .globl _cyg_hal_default_exception_vsr_bp_safe _cyg_hal_default_exception_vsr_bp_safe: #endif - mov #CYGARC_REG_EXCEVT,r0 + mov.l $nCYGARC_REG_EXCEVT,r0 mov.l @r0,r4 mov #-5,r0 ! divide cause by 0x20 shld r0,r4 @@ -257,7 +242,7 @@ mov #2,r7 #endif - mov #CYGARC_REG_EXCEVT,r1 + mov.l $nCYGARC_REG_EXCEVT,r1 mov.l @r1,r1 shlr2 r1 shlr r1 ! divide cause by 0x08 @@ -269,6 +254,8 @@ .align 2 $_hal_vsr_table2: .long _hal_vsr_table +$nCYGARC_REG_EXCEVT: + .long CYGARC_REG_EXCEVT #--------------------------------------------------------------------------- # Interrupt entry @@ -279,7 +266,7 @@ #ifdef CYGHWR_HAL_SH_IRQ_HANDLE_SPURIOUS_INTERRUPTS # A spurious interrupt with INTEVT=0 may be caused by # clearing of BL. Those interrupts need to be ignored. - mov #CYGARC_REG_INTEVT,r0 + mov.l $nCYGARC_REG_INTEVT,r0 mov.l @r0,r0 cmp/eq #0,r0 bf 1f @@ -415,31 +402,13 @@ 1: mov.l r8,@-r15 1: #endif - # Decode the interrupt vector -#ifdef CYGARC_SH_MOD_INTC_V2 - mov.l $nCYGARC_REG_INTEVT2,r0 -#else - mov #CYGARC_REG_INTEVT,r0 -#endif - mov.l @r0,r4 - mov #-5,r0 ! divide cause by 0x20 - shld r0,r4 - add #-14,r4 ! adjust so NMI becomes 0 + # Decode the interrupt vector, and find ISR index + hal_intc_decode r0,r4 mov #CYGARC_SHREG_EVENT,r0 mov.l r4,@(r0,r8) ! store decoded vector number back ! to saved state. - - // Find ISR index. -#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN -#define CYG_ISR_TABLE_SIZE 1 - mov #0,r9 ! only one ISR in the table -#else // CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN -#define CYG_ISR_TABLE_SIZE CYGNUM_HAL_ISR_COUNT - mov r4,r9 - shll2 r9 ! get from vector number to ISR index -#endif // CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN - + hal_intc_translate r4,r9 #if defined(CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT) \ || defined(CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT) @@ -640,7 +609,9 @@ restore_state: .long CYG_SR $nCYG_SR_BANK1: .long CYG_SR_BANK1 -#ifdef CYGARC_SH_MOD_INTC_V2 +$nCYGARC_REG_INTEVT: + .long CYGARC_REG_INTEVT +#ifdef CYGARC_REG_INTEVT2 $nCYGARC_REG_INTEVT2: .long CYGARC_REG_INTEVT2 #endif @@ -675,54 +646,8 @@ restore_state: #--------------------------------------------------------------------------- # Platform initialization (reset) __reset_platform: - # Initialize CPU - mov.l $nCYG_SR,r1 ! Put CPU in a well-known state - ldc r1,sr - mov #0,r0 - mov #CYGARC_REG_CCR,r1 ! Disable cache - mov.l r0,@r1 - mov #CYGARC_REG_MMUCR,r1 ! Disable MMU - mov.l r0,@r1 - mov #CYGARC_REG_BBRA,r1 ! Disable UBC Channel A - mov.w r0,@r1 - mov #CYGARC_REG_BBRB,r1 ! Disable UBC Channel B - mov.w r0,@r1 - mov #CYGARC_REG_BRCR,r1 ! Reset UBC common register - mov.w r0,@r1 - mov.l $CYGARC_REG_TSTR,r1 ! Disable timers - mov.b r0,@r1 - mov.l $CYGARC_REG_IPRA,r1 ! Disable interrupt request sources - mov.w r0,@r1 - mov.l $CYGARC_REG_IPRB,r1 - mov.w r0,@r1 -#ifdef CYGARC_SH_MOD_INTC_V2 - mov.l $CYGARC_REG_IPRC,r1 - mov.w r0,@r1 - mov.l $CYGARC_REG_IPRD,r1 - mov.w r0,@r1 - mov.l $CYGARC_REG_IPRE,r1 - mov.w r0,@r1 -#ifdef CYGARC_SH_MOD_INTC_V3 - mov.l $CYGARC_REG_IPRF,r1 - mov.w r0,@r1 -#endif - mov.w $nCYG_ICR1_INIT,r0 - mov.l $CYGARC_REG_ICR1,r1 ! Set interrupt controller to IRQ mode - mov.w r0,@r1 -#endif - mov.w $nCYG_WTCSR,r0 ! Clear watchdog - mov #CYGARC_REG_WTCSR,r1 - mov.w r0,@r1 + hal_post_reset_init - # Initialize VBR if necessary -#if !defined(CYG_HAL_STARTUP_RAM) || \ - ( defined(CYG_HAL_STARTUP_RAM) && \ - !defined(CYGSEM_HAL_USE_ROM_MONITOR)) - mov.l $__reset,r1 ! Set VBR - ldc r1,vbr -#endif - - #ifdef __DEBUG mov #0,r0 mov #1,r1 @@ -740,45 +665,7 @@ restore_state: mov #13,r13 mov #14,r14 #endif - - bra hal_hw_init - nop - -$nCYG_WTCSR: - .word 0xa500 ! clear all CSR bits - - .align 2 - -$nCYG_SR: - .long CYG_SR -$CYGARC_REG_TSTR: - .long CYGARC_REG_TSTR -$CYGARC_REG_IPRA: - .long CYGARC_REG_IPRA -$CYGARC_REG_IPRB: - .long CYGARC_REG_IPRB -#ifdef CYGARC_SH_MOD_INTC_V2 -$CYGARC_REG_IPRC: - .long CYGARC_REG_IPRC -$CYGARC_REG_IPRD: - .long CYGARC_REG_IPRD -$CYGARC_REG_IPRE: - .long CYGARC_REG_IPRE -$CYGARC_REG_ICR1: - .long CYGARC_REG_ICR1 -#endif -#ifdef CYGARC_SH_MOD_INTC_V2 -$CYGARC_REG_IPRF: - .long CYGARC_REG_IPRF -$nCYG_ICR1_INIT: - .word CYGARC_REG_ICR1_INIT - .align 2 -#endif -$__reset: - .long __reset - -hal_hw_init: - + # Call platform specific hardware initialization # This may include memory controller initialization. It is not # safe to access RAM until after this point. @@ -895,7 +782,7 @@ 2: # nop # Enable caches - mov.l $_cyg_hal_enable_caches,r1 + mov.l $_cyg_var_enable_caches,r1 jsr @r1 nop @@ -950,8 +837,8 @@ 9: .long __bss_end $_cyg_hal_invoke_constructors: .long _cyg_hal_invoke_constructors -$_cyg_hal_enable_caches: - .long _cyg_hal_enable_caches +$_cyg_var_enable_caches: + .long _cyg_var_enable_caches $_hal_variant_init: .long _hal_variant_init $_hal_platform_init: @@ -972,151 +859,6 @@ 9: #endif #--------------------------------------------------------------------------- -# Cache operations -# These need to be written in assembly to ensure they do not rely on data -# in cachable space (i.e., code must use registers exclusively, not the stack). - -# This macro must be used at the top of each cache function. It ensures -# that the code gets executed from a shadow region where caching is disabled -# (0xA0000000). - .macro GOTO_NONCACHED_SHADOW - mova 10f,r0 - mov.l $MASK,r1 - and r1,r0 - mov.l $BASE,r1 - or r1,r0 - jmp @r0 - nop - .align 2 -10: - .endm - - .globl _cyg_hal_cache_enable -_cyg_hal_cache_enable: - GOTO_NONCACHED_SHADOW - mov #CYGARC_REG_CCR,r1 - mov.l @r1,r0 - or #CYGARC_REG_CCR_CE,r0 - mov.l r0,@r1 - nop - rts - nop - - .globl _cyg_hal_cache_disable -_cyg_hal_cache_disable: - GOTO_NONCACHED_SHADOW - mov #CYGARC_REG_CCR,r1 - mov.l @r1,r0 - mov #CYGARC_REG_CCR_CE,r2 - not r2,r2 - and r2,r0 - mov.l r0,@r1 - nop - rts - nop - - .globl _cyg_hal_cache_invalidate_all -_cyg_hal_cache_invalidate_all: - GOTO_NONCACHED_SHADOW - mov #CYGARC_REG_CCR,r1 - mov.l @r1,r0 - or #CYGARC_REG_CCR_CF,r0 - mov.l r0,@r1 - nop ! Nothing in the docs suggest we need - nop ! nops here, but without them, the - nop ! CPU crashes. - rts - nop - - .globl _cyg_hal_cache_sync -_cyg_hal_cache_sync: - GOTO_NONCACHED_SHADOW - mov.l $CYGARC_REG_CACHE_ADDRESS_FLUSH,r0 - mov.l $CYGARC_REG_CACHE_ADDRESS_BASE,r1 - mov.l $CYGARC_REG_CACHE_ADDRESS_TOP,r2 - mov.l $CYGARC_REG_CACHE_ADDRESS_STEP,r3 -1: cmp/hi r1,r2 - bf 2f - mov.l r0,@r1 - bra 1b - add r3,r1 ! delay slot! -2: nop - rts - nop - - ! r4 = base - ! r5 = size - .globl _cyg_hal_cache_sync_region -_cyg_hal_cache_sync_region: - GOTO_NONCACHED_SHADOW - mov.l 10f,r0 - and r4,r0 ! array index - mov.l 11f,r1 - add r0,r1 ! base (aligned, A set) - - ! make sure top is aligned to start of _next_ cache line - mov r1,r0 - add r5,r0 ! top (non-aligned) - add #2*HAL_UCACHE_LINE_SIZE-1,r0 - mov.l 13f,r2 - and r0,r2 - - mov.l $CYGARC_REG_CACHE_ADDRESS_STEP,r3 - mov.l 12f,r5 -1: cmp/hi r1,r2 - bf 3f - mov r4,r0 ! create address tag - and r5,r0 - mov.l r0,@r1 ! store tag in array, causing (sync+)invalidate - ! if the tag matches any of the lines - add r3,r4 ! inc address tag - bra 1b - add r3,r1 ! inc array index, delay slot! -3: nop - rts - nop - - .align 2 -10: .long ((HAL_UCACHE_SIZE/HAL_UCACHE_WAYS)-1)&~0xf ! mask -11: .long CYGARC_REG_CACHE_ADDRESS_BASE|CYGARC_REG_CACHE_ADDRESS_ADDRESS -12: .long CYGARC_REG_CACHE_ADDRESS_TAG_Mask -13: .long ~(HAL_UCACHE_LINE_SIZE-1) - - .globl _cyg_hal_cache_write_mode -_cyg_hal_cache_write_mode: - GOTO_NONCACHED_SHADOW - # Mode argument in r4. - # Read current state and mask out the two caching mode bits - mov #CYGARC_REG_CCR,r1 - mov.l @r1,r3 - mov #CYGARC_REG_CCR_CB|CYGARC_REG_CCR_WT,r2 - and r2,r4 - not r2,r2 - and r2,r3 - # Or in the new settings and restore to CCR - or r4,r3 - mov.l r3,@r1 - nop - rts - nop - - .align 2 -$CYGARC_REG_CACHE_ADDRESS_FLUSH: - .long CYGARC_REG_CACHE_ADDRESS_FLUSH -$CYGARC_REG_CACHE_ADDRESS_BASE: - .long CYGARC_REG_CACHE_ADDRESS_BASE -$CYGARC_REG_CACHE_ADDRESS_TOP: - .long CYGARC_REG_CACHE_ADDRESS_TOP -$CYGARC_REG_CACHE_ADDRESS_STEP: - .long CYGARC_REG_CACHE_ADDRESS_STEP - - -$MASK: - .long 0x1fffffff ! mask off top 3 bits -$BASE: - .long 0xa0000000 ! base of non-cachable memory - -#--------------------------------------------------------------------------- # Interrupt vector tables. # These tables contain the isr, data and object pointers used to deliver # interrupts to user code. @@ -1124,6 +866,11 @@ 13: .long ~(HAL_UCACHE_LINE_SIZE-1) .data .extern _hal_default_isr +#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN +#define CYG_ISR_TABLE_SIZE 1 +#else +#define CYG_ISR_TABLE_SIZE CYGNUM_HAL_ISR_COUNT +#endif .globl _hal_interrupt_handlers _hal_interrupt_handlers:
--- a/packages/hal/sh/cq7708/current/ChangeLog +++ b/packages/hal/sh/cq7708/current/ChangeLog @@ -1,3 +1,8 @@ +2000-10-31 Jesper Skov <jskov@redhat.com> + + * include/plf_intr.h: Added. + * include/plf_cache.h: Added. + 2000-10-20 Jonathan Larmour <jlarmour@redhat.com> * include/pkgconf/mlt_sh_sh7708_cq7708_ram.h:
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/cq7708/current/include/plf_cache.h @@ -0,0 +1,61 @@ +#ifndef CYGONCE_PLF_CACHE_H +#define CYGONCE_PLF_CACHE_H + +//============================================================================= +// +// plf_cache.h +// +// Platform specific cache control API +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-31 +// Purpose: Cache control API +// Description: The macros defined here provide the HAL APIs for handling +// cache control operations. +// Usage: +// #include <cyg/hal/plf_cache.h> +// ... +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> + +//============================================================================= + +// Nothing here at present. + +//----------------------------------------------------------------------------- +#endif // ifndef CYGONCE_PLF_CACHE_H +// End of plf_cache.h +
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/cq7708/current/include/plf_intr.h @@ -0,0 +1,60 @@ +#ifndef CYGONCE_HAL_PLF_INTR_H +#define CYGONCE_HAL_PLF_INTR_H + +//========================================================================== +// +// plf_intr.h +// +// Platform specific Interrupt and clock support +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors: jskov, +// Date: 2000-10-31 +// Purpose: Define Interrupt support +// Description: The macros defined here provide the HAL APIs for handling +// interrupts and the clock for the CQ7708 board. +// Usage: +// #include <cyg/hal/plf_intr.h> +// ... +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <pkgconf/hal.h> + +//-------------------------------------------------------------------------- + +// No platform specific stuff at present. + +//-------------------------------------------------------------------------- +#endif // ifndef CYGONCE_HAL_PLF_INTR_H +// End of plf_intr.h
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/cq7750/current/ChangeLog @@ -0,0 +1,37 @@ +2000-11-01 Jesper Skov <jskov@redhat.com> + + * cdl/hal_sh_sh7750_cq7750.cdl: Adding clock options. + +2000-08-16 Haruki Kashiwaya <kashiwaya@redhat.com> + + * Set up directory structure. + +2000-04-18 Ryozaburo Suzuki <ryos@atom-tc.or.jp> + + * Contributed sources for the CqREEK/SH-4 platform. + +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//===========================================================================
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/cq7750/current/cdl/hal_sh_sh7750_cq7750.cdl @@ -0,0 +1,319 @@ +# ==================================================================== +# +# hal_sh_sh7750_cq7750.cdl +# +# CQ7750 board HAL package configuration data +# +# ==================================================================== +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): jskov +# Original data: jskov +# Contributors: Ryozaburo Suzuki +# Date: 1999-10-29 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_HAL_SH_SH7750_CQ7750 { + display "CqREEK SH7750 board" + parent CYGPKG_HAL_SH + requires CYGPKG_HAL_SH_7750 + define_header hal_sh_sh7750_cq7750.h + include_dir cyg/hal + description " + The cq HAL package provides the support needed to run + eCos on a CqREEK SH7750 board." + + compile hal_diag.c plf_misc.c + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT_GUARANTEED + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H <pkgconf/hal_sh.h>" + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H <pkgconf/hal_sh_sh7750_cq7750.h>" + + puts $::cdl_header "#define CYGNUM_HAL_SH_SH4_SCIF_PORTS 1" + puts $::cdl_header "#define CYGHWR_HAL_VSR_TABLE 0x08000000" + puts $::cdl_header "#define CYGHWR_HAL_VECTOR_TABLE 0x08000100" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + legal_values {"RAM" "ROM"} + default_value {"RAM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the CQ7750 board it is possible to build + the system for either RAM bootstrap or ROM bootstrap. + RAM bootstrap generally requires that the board + is equipped with ROMs containing a suitable ROM monitor or + equivalent software that allows GDB to download the eCos + application on to the board. The ROM bootstrap typically + requires that the eCos application be blown into EPROMs or + equivalent technology." + } + + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 1 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The CQ/7750 board has only one serial port. This option + chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The CQ/7750 board has only one serial port. This option + chooses which port will be used for diagnostic output." + } + + cdl_component CYGHWR_HAL_SH_PLF_CLOCK_SETTINGS { + display "SH on-chip platform clock controls" + description " + The various clocks used by the system are derived from + these options." + flavor none + no_define + + cdl_option CYGHWR_HAL_SH_OOC_XTAL { + display "SH clock crystal" + flavor data + legal_values 9000000 to 66000000 + default_value 33000000 + no_define + description " + This option specifies the frequency of the crystal all + other clocks are derived from." + } + + cdl_option CYGHWR_HAL_SH_OOC_CKIO { + display "SH clock CKIO output enable" + default_value 1 + description " + This selects whether CKIO output is enabled." + } + + cdl_option CYGHWR_HAL_SH_OOC_PLL_1 { + display "SH clock PLL circuit 1" + flavor data + default_value 6 + legal_values { 0 6 } + description " + This selects whether PLL1 is enabled." + } + + cdl_option CYGHWR_HAL_SH_OOC_PLL_2 { + display "SH clock PLL circuit 2" + flavor data + default_value 1 + legal_values { 0 1 } + description " + This selects whether PLL2 is enabled." + } + + cdl_option CYGHWR_HAL_SH_OOC_DIVIDER_IFC { + display "SH clock divider, core" + flavor data + default_value 1 + legal_values { 1 2 3 4 6 8 } + description " + This divider option affects the CPU core clock." + } + + cdl_option CYGHWR_HAL_SH_OOC_DIVIDER_BFC { + display "SH clock divider, bus" + flavor data + default_value 8 + legal_values { 1 2 3 4 6 8 } + description " + This divider option affects the bus clock." + } + + cdl_option CYGHWR_HAL_SH_OOC_DIVIDER_PFC { + display "SH clock divider, peripheral" + flavor data + default_value 8 + legal_values { 1 2 3 4 6 8 } + description " + This divider option affects the peripheral clock." + } + + cdl_option CYGHWR_HAL_SH_OOC_CLOCK_MODE { + display "SH clock mode" + flavor data + default_value 2 + legal_values { 0 1 2 3 4 5 } + description " + This option must mirror the clock mode hardwired on + the MD0-MD2 pins of the CPU in order to correctly + initialize the FRQCR register." + } + } + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + parent CYGPKG_NONE + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "sh-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { CYGHWR_HAL_SH_BIGENDIAN ? "-mb -m4 -Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -ggdb -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions -fvtable-gc -finit-priority" : "-ml -m3 -Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -ggdb -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions -fvtable-gc -finit-priority" } + description " + This option controls the global compiler flags which + are used to compile all packages by + default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { CYGHWR_HAL_SH_BIGENDIAN ? "-mb -m4 -ggdb -nostdlib -Wl,--gc-sections -Wl,-static" : "-ml -m3 -ggdb -nostdlib -Wl,--gc-sections -Wl,-static" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + binary data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + <PREFIX>/bin/gdb_module.bin : <PREFIX>/bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "sh_sh7750_cq7750_ram" : \ + "sh_sh7750_cq7750_rom" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "<pkgconf/mlt_sh_sh7750_cq7750_ram.ldi>" : \ + "<pkgconf/mlt_sh_sh7750_cq7750_rom.ldi>" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "<pkgconf/mlt_sh_sh7750_cq7750_ram.h>" : \ + "<pkgconf/mlt_sh_sh7750_cq7750_rom.h>" } + } + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + requires { CYG_HAL_STARTUP == "RAM" } + parent CYGPKG_HAL_ROM_MONITOR + requires !CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + description " + Support can be enabled for boot ROMs or ROM monitors which contain + GDB stubs. This support changes various eCos semantics such as + the encoding of diagnostic output, and the overriding of hardware + interrupt vectors." + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 0 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } +}
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/cq7750/current/include/hal_diag.h @@ -0,0 +1,88 @@ +#ifndef CYGONCE_HAL_HAL_DIAG_H +#define CYGONCE_HAL_HAL_DIAG_H + +//============================================================================= +// +// hal_diag.h +// +// HAL Support for Kernel Diagnostic Routines +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 1999-04-24 +// Purpose: HAL Support for Kernel Diagnostic Routines +// Description: Diagnostic routines for use during kernel development. +// Usage: #include <cyg/hal/hal_diag.h> +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> + +#include <cyg/infra/cyg_type.h> + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) + +#include <cyg/hal/hal_if.h> + +#define HAL_DIAG_INIT() hal_if_diag_init() +#define HAL_DIAG_WRITE_CHAR(_c_) hal_if_diag_write_char(_c_) +#define HAL_DIAG_READ_CHAR(_c_) hal_if_diag_read_char(&_c_) + +#else // everything by steam + +//----------------------------------------------------------------------------- +// functions implemented in hal_diag.c + +externC void hal_diag_init(void); + +externC void hal_diag_write_char(char c); + +externC void hal_diag_read_char(char *c); + +//----------------------------------------------------------------------------- + +#define HAL_DIAG_INIT() hal_diag_init() + +#define HAL_DIAG_WRITE_CHAR(_c_) hal_diag_write_char(_c_) + +#define HAL_DIAG_READ_CHAR(_c_) hal_diag_read_char(&_c_) + +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + +//----------------------------------------------------------------------------- +// Simple LED control. +externC void hal_diag_led_on( void ); +externC void hal_diag_led_off( void ); + +//----------------------------------------------------------------------------- +// end of hal_diag.h +#endif // CYGONCE_HAL_HAL_DIAG_H
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/cq7750/current/include/pkgconf/mlt_sh_sh7750_cq7750_ram.h @@ -0,0 +1,17 @@ +// eCos memory layout - Wed Nov 01 08:48:23 2000 + +// This is a generated file - do not edit + +#ifndef __ASSEMBLER__ +#include <cyg/infra/cyg_type.h> +#include <stddef.h> + +#endif +#define CYGMEM_REGION_ram (0x8008000) +#define CYGMEM_REGION_ram_SIZE (0xff8000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x9000000 - (size_t) CYG_LABEL_NAME (__heap1))
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/cq7750/current/include/pkgconf/mlt_sh_sh7750_cq7750_ram.ldi @@ -0,0 +1,26 @@ +// eCos memory layout - Wed Nov 01 08:48:23 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> + +MEMORY +{ + ram : ORIGIN = 0x8008000, LENGTH = 0xff8000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_vectors (ram, 0x8008000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +}
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/cq7750/current/include/pkgconf/mlt_sh_sh7750_cq7750_ram.mlt @@ -0,0 +1,12 @@ +version 0 +region ram 8008000 ff8000 0 ! +section vectors 0 1 0 1 1 1 1 1 8008000 8008000 text text ! +section text 0 4 0 1 0 1 0 1 fini fini ! +section fini 0 4 0 1 0 1 0 1 rodata1 rodata1 ! +section rodata1 0 8 0 1 0 1 0 1 rodata rodata ! +section rodata 0 8 0 1 0 1 0 1 fixup fixup ! +section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table ! +section gcc_except_table 0 1 0 1 0 1 0 1 data data ! +section data 0 8 0 1 0 1 0 1 bss bss ! +section bss 0 10 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/cq7750/current/include/pkgconf/mlt_sh_sh7750_cq7750_rom.h @@ -0,0 +1,20 @@ +// eCos memory layout - Wed Nov 01 08:47:52 2000 + +// This is a generated file - do not edit + +#ifndef __ASSEMBLER__ +#include <cyg/infra/cyg_type.h> +#include <stddef.h> + +#endif +#define CYGMEM_REGION_ram (0x8000200) +#define CYGMEM_REGION_ram_SIZE (0xfffe00) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0x80000000) +#define CYGMEM_REGION_rom_SIZE (0x100000) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x9000000 - (size_t) CYG_LABEL_NAME (__heap1))
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/cq7750/current/include/pkgconf/mlt_sh_sh7750_cq7750_rom.ldi @@ -0,0 +1,27 @@ +// eCos memory layout - Wed Nov 01 08:47:52 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> + +MEMORY +{ + ram : ORIGIN = 0x8000200, LENGTH = 0xfffe00 + rom : ORIGIN = 0x80000000, LENGTH = 0x100000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_vectors (rom, 0x80000000, LMA_EQ_VMA) + SECTION_text (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_data (ram, 0x8000200, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +}
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/cq7750/current/include/pkgconf/mlt_sh_sh7750_cq7750_rom.mlt @@ -0,0 +1,13 @@ +version 0 +region ram 8000200 fffe00 0 ! +region rom 80000000 100000 1 ! +section data 0 1 1 1 1 1 0 0 8000200 bss ! +section bss 0 10 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 ! +section vectors 0 1 0 1 1 1 1 1 80000000 80000000 text text ! +section text 0 4 0 1 0 1 0 1 fini fini ! +section fini 0 4 0 1 0 1 0 1 rodata1 rodata1 ! +section rodata1 0 8 0 1 0 1 0 1 rodata rodata ! +section rodata 0 8 0 1 0 1 0 1 fixup fixup ! +section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table ! +section gcc_except_table 0 1 0 1 0 0 0 1 data !
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/cq7750/current/include/platform.inc @@ -0,0 +1,228 @@ +#ifndef CYGONCE_HAL_PLATFORM_INC +#define CYGONCE_HAL_PLATFORM_INC +##============================================================================= +## +## platform.inc +## +## SH/CQ7750 board assembler header file +## +##============================================================================= +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.0 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://sourceware.cygnus.com/ecos +# +# Software distributed under the License is distributed on an +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +##============================================================================= +#######DESCRIPTIONBEGIN#### +## +## Author(s): jskov +## Contributors:Ryozaburo Suzuki +## Date: 2000-04-18 +## Purpose: SH/CQ7750 board definitions. +## Description: This file contains various definitions and macros that are +## useful for writing assembly code for the SH/CQ7750 board. +## Usage: +## #include <cyg/hal/platform.inc> +## ... +## +## +######DESCRIPTIONEND#### +## +##============================================================================= + +#include <pkgconf/hal.h> + +#include <cyg/hal/sh_offsets.inc> +#include <cyg/hal/sh_regs.h> + +#------------------------------------------------------------------------------ +# Hardware initialization. + + .macro hal_hardware_init + // Set up the Bus State Controller + mova BSC_settings_table,r0 + mov r0,r3 +1: mov.l @r3+,r0 // Address (or zero) + mov r0,r2 + cmp/eq #0,r0 + bt 4f + mov.l @r3+,r1 // data + mov.l @r3+,r0 // byte or word or long? + + cmp/eq #0,r0 // byte + bt 2f + + cmp/eq #1,r0 // word + bt 3f + + bra 1b // long + mov.l r1,@r2 // delay slot + +2: bra 1b + mov.b r1,@r2 // delay slot + +3: bra 1b + mov.w r1,@r2 // delay slot + + .align 2 + +BSC_settings_table: + # BCR1: + .long CYGARC_REG_BCR1 + .long 0x0020000c + .long 2 + # BCR2: + .long CYGARC_REG_BCR2 + .long 0x35F8 + .long 1 + # WCR1: + .long CYGARC_REG_WCR1 + .long 0x77117121 + .long 2 + # WCR2: + .long CYGARC_REG_WCR2 + .long 0xFC8AE520 + .long 2 + # WCR3: + .long CYGARC_REG_WCR3 + .long 0x07117101 + .long 2 + # PCR: + .long CYGARC_REG_PCR + .long 0x0000 + .long 1 + # RTCNT: + .long CYGARC_REG_RTCNT + .long 0xa500 + .long 1 + # RTCOR: + .long CYGARC_REG_RTCOR + .long 0xa53b + .long 1 + # RFCR: + .long CYGARC_REG_RFCR + .long 0xa400 + .long 1 + # RTCSR: + .long CYGARC_REG_RTCSR + .long 0xa508 + .long 1 + # MCR: + .long CYGARC_REG_MCR + .long 0x10192194 + .long 2 + # SDMR2: + .long CYGARC_REG_SDMR2 + .long 0xaa + .long 0 + # MCR: + .long CYGARC_REG_MCR + .long 0x50192194 + .long 2 + # SDMR2: + .long CYGARC_REG_SDMR2 + .long 0xaa + .long 0 + # Table end + .long 0 + + .align 2 +4: + .endm + +#------------------------------------------------------------------------------ +# Monitor initialization. + +#ifndef CYGPKG_HAL_SH_MON_DEFINED + +#if defined(CYG_HAL_STARTUP_ROM) || \ + ( defined(CYG_HAL_STARTUP_RAM) && \ + !defined(CYGSEM_HAL_USE_ROM_MONITOR)) + + # If we are starting up from ROM, or we are starting in + # RAM and NOT using a ROM monitor, initialize the VSR table. + + .macro hal_mon_init + mov.l $_hal_vsr_table_p,r3 + # Write exception vectors + mov.l $_cyg_hal_default_exception_vsr_p,r4 + mov #CYGNUM_HAL_VSR_EXCEPTION_COUNT,r5 +1: mov.l r4,@r3 + add #4,r3 + dt r5 + bf 1b + # Write interrupt vector + mov.l $_cyg_hal_default_interrupt_vsr_p,r4 + mov.l r4,@r3 + bra 2f + nop + .align 2 + +$_cyg_hal_default_exception_vsr_p: + .long _cyg_hal_default_exception_vsr +$_cyg_hal_default_interrupt_vsr_p: + .long _cyg_hal_default_interrupt_vsr + + .extern _hal_vsr_table +$_hal_vsr_table_p: + .long _hal_vsr_table + +2: + .endm + +#elif defined(CYG_HAL_STARTUP_RAM) && defined(CYGSEM_HAL_USE_ROM_MONITOR) + + # Initialize the VSR table entries + # We only take control of the interrupt vector, + # the rest are left to the ROM for now... + + .macro hal_mon_init + # Write interrupt vector + mov.l $_hal_vsr_table_p,r3 + mov.l $_cyg_hal_default_interrupt_vsr_p,r4 + mov.l r4,@r3 + bra 2f + nop + .align 2 + +$_cyg_hal_default_interrupt_vsr_p: + .long _cyg_hal_default_interrupt_vsr + + .extern _hal_vsr_table +$_hal_vsr_table_p: + .long _hal_vsr_table+CYGNUM_HAL_VECTOR_INTERRUPT*4 + +2: + .endm + +#else + + .macro hal_mon_init + .endm + +#endif + + +#define CYGPKG_HAL_SH_MON_DEFINED + +#endif // CYGPKG_HAL_SH_MON_DEFINED + +#endif // CYGONCE_HAL_PLATFORM_INC
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/cq7750/current/include/plf_cache.h @@ -0,0 +1,61 @@ +#ifndef CYGONCE_PLF_CACHE_H +#define CYGONCE_PLF_CACHE_H + +//============================================================================= +// +// plf_cache.h +// +// Platform specific cache control API +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-31 +// Purpose: Cache control API +// Description: The macros defined here provide the HAL APIs for handling +// cache control operations. +// Usage: +// #include <cyg/hal/plf_cache.h> +// ... +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> + +//============================================================================= + +// Nothing here at present. + +//----------------------------------------------------------------------------- +#endif // ifndef CYGONCE_PLF_CACHE_H +// End of plf_cache.h +
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/cq7750/current/include/plf_intr.h @@ -0,0 +1,60 @@ +#ifndef CYGONCE_HAL_PLF_INTR_H +#define CYGONCE_HAL_PLF_INTR_H + +//========================================================================== +// +// plf_intr.h +// +// Platform specific Interrupt and clock support +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors: jskov, +// Date: 2000-10-31 +// Purpose: Define Interrupt support +// Description: The macros defined here provide the HAL APIs for handling +// interrupts and the clock for the CQ7750 board. +// Usage: +// #include <cyg/hal/plf_intr.h> +// ... +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <pkgconf/hal.h> + +//-------------------------------------------------------------------------- + +// No platform specific stuff at present. + +//-------------------------------------------------------------------------- +#endif // ifndef CYGONCE_HAL_PLF_INTR_H +// End of plf_intr.h
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/cq7750/current/include/plf_stub.h @@ -0,0 +1,90 @@ +#ifndef CYGONCE_HAL_PLF_STUB_H +#define CYGONCE_HAL_PLF_STUB_H + +//============================================================================= +// +// plf_stub.h +// +// Platform header for GDB stub support. +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 1999-05-18 +// Purpose: Platform HAL stub support for Hitachi/CQ boards. +// Usage: #include <cyg/hal/plf_stub.h> +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/system.h> +#include <pkgconf/hal.h> + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include <cyg/infra/cyg_type.h> // CYG_UNUSED_PARAM, externC + +#include <cyg/hal/sh_stub.h> // architecture stub support + +#include <cyg/hal/hal_diag.h> // hal_diag_led_on + +//---------------------------------------------------------------------------- +// Define some platform specific communication details. This is mostly +// handled by hal_if now, but we need to make sure the comms tables are +// properly initialized. + +externC void cyg_hal_plf_comms_init(void); + +#define HAL_STUB_PLATFORM_INIT_SERIAL() cyg_hal_plf_comms_init() + +#define HAL_STUB_PLATFORM_SET_BAUD_RATE(baud) CYG_UNUSED_PARAM(int, (baud)) +#define HAL_STUB_PLATFORM_INTERRUPTIBLE 0 + +//---------------------------------------------------------------------------- +// Stub initializer. +#ifdef CYGSEM_HAL_ROM_MONITOR +# define HAL_STUB_PLATFORM_INIT() hal_diag_led_on() +#else +# define HAL_STUB_PLATFORM_INIT() CYG_EMPTY_STATEMENT +#endif + +#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +//---------------------------------------------------------------------------- +// Reset. +// Block interrupts and cause an exception. This forces a reset. +#define HAL_STUB_PLATFORM_RESET() \ + asm volatile ("ldc %0,sr;trapa #0x00;" : : "r" (CYGARC_REG_SR_BL)) + +#define HAL_STUB_PLATFORM_RESET_ENTRY 0xa0000000 + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_PLF_STUB_H +// End of plf_stub.h
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/cq7750/current/src/hal_diag.c @@ -0,0 +1,218 @@ +//============================================================================= +// +// hal_diag.c +// +// HAL diagnostic output code +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg, jskov +// Contributors: nickg, jskov +// Date: 1999-03-23 +// Purpose: HAL diagnostic output +// Description: Implementations of HAL diagnostic output support. +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> + +#include <cyg/hal/hal_diag.h> // our header. + +#include <cyg/infra/cyg_type.h> // base types, externC +#include <cyg/hal/hal_io.h> // IO macros +#include <cyg/hal/hal_if.h> // calling interface API +#include <cyg/hal/hal_intr.h> // Interrupt macros +#include <cyg/hal/sh4_scif.h> // driver API +#include <cyg/hal/hal_misc.h> // Helper functions + +#define SCI_BASE ((cyg_uint8*)0xffe80000) + +//----------------------------------------------------------------------------- + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \ + || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES) + +void +cyg_hal_plf_comms_init(void) +{ + static int initialized = 0; + + if (initialized) + return; + + initialized = 1; + + cyg_hal_plf_scif_init(0, 0, CYGNUM_HAL_INTERRUPT_SCIF_RXI, SCI_BASE); +} + +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES + +//============================================================================= +// Led control +//============================================================================= +#define LED 0xb4000000 + +void +hal_diag_led_on( void ) +{ + HAL_WRITE_UINT8(LED, 0x18); +} + +void +hal_diag_led_off( void ) +{ + HAL_WRITE_UINT8(LED, 0); +} + +//============================================================================= +// Compatibility with older stubs +//============================================================================= + +#ifndef CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + +static channel_data_t channel = { (cyg_uint8*)SCI_BASE, 0, 0}; + +#if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) +#include <cyg/hal/hal_stub.h> // hal_output_gdb_string +#endif + +#if defined(CYGSEM_HAL_USE_ROM_MONITOR_GDB_stubs) + +#define CYG_HAL_DIAG_GDB + +#elif defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) + +#define CYG_HAL_DIAG_GDB + +#endif + +//----------------------------------------------------------------------------- + +void hal_diag_init(void) +{ + cyg_hal_plf_scif_init_channel(&channel); +} + +void +hal_diag_write_char_serial( char c ) +{ + cyg_hal_plf_scif_putc(&channel, c); +} + +void +hal_diag_read_char(char *c) +{ + *c = (char) cyg_hal_plf_scif_getc(&channel); +} + +// Packet function +void +hal_diag_write_char(char c) +{ +#ifdef CYG_HAL_DIAG_GDB + static char line[100]; + static int pos = 0; + + // No need to send CRs + if( c == '\r' ) return; + + line[pos++] = c; + + if( c == '\n' || pos == sizeof(line) ) + { + CYG_INTERRUPT_STATE old; + + // Disable interrupts. This prevents GDB trying to interrupt us + // while we are in the middle of sending a packet. The serial + // receive interrupt will be seen when we re-enable interrupts + // later. + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION(old); +#else + HAL_DISABLE_INTERRUPTS(old); +#endif + + while(1) + { + char c1; + static char hex[] = "0123456789ABCDEF"; + cyg_uint8 csum = 0; + int i; + + cyg_hal_plf_scif_putc(&channel, '$'); + cyg_hal_plf_scif_putc(&channel, 'O'); + csum += 'O'; + for( i = 0; i < pos; i++ ) + { + char ch = line[i]; + char h = hex[(ch>>4)&0xF]; + char l = hex[ch&0xF]; + cyg_hal_plf_scif_putc(&channel, h); + cyg_hal_plf_scif_putc(&channel, l); + csum += h; + csum += l; + } + cyg_hal_plf_scif_putc(&channel, '#'); + cyg_hal_plf_scif_putc(&channel, hex[(csum>>4)&0xF]); + cyg_hal_plf_scif_putc(&channel, hex[csum&0xF]); + + // Wait for the ACK character '+' from GDB here and handle + // receiving a ^C instead. + c1 = (char) cyg_hal_plf_scif_getc(&channel); + + if( c1 == '+' ) + break; // a good acknowledge + + // Check for user break. + if( cyg_hal_is_break( &c1, 1 ) ) + cyg_hal_user_break( NULL ); + + // otherwise, loop round again + } + + pos = 0; + + // And re-enable interrupts +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + CYG_HAL_GDB_LEAVE_CRITICAL_IO_REGION(old); +#else + HAL_RESTORE_INTERRUPTS(old); +#endif + } +#else // CYG_HAL_DIAG_GDB + cyg_hal_plf_scif_putc(&channel, c); +#endif +} + +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + +//----------------------------------------------------------------------------- +// End of hal_diag.c
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/cq7750/current/src/plf_misc.c @@ -0,0 +1,57 @@ +//========================================================================== +// +// plf_misc.c +// +// HAL platform miscellaneous functions +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors: jskov,nickg, jlarmour +// Date: 1999-10-13 +// Purpose: HAL miscellaneous functions +// Description: This file contains miscellaneous functions provided by the +// HAL. +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <pkgconf/hal.h> + +#include <cyg/hal/hal_if.h> // interfacing API + +//-------------------------------------------------------------------------- +void +hal_platform_init(void) +{ + hal_if_init(); +} + +//-------------------------------------------------------------------------- +// eof plf_misc.c
deleted file mode 100644 --- a/packages/hal/sh/edk/current/ChangeLog +++ /dev/null @@ -1,356 +0,0 @@ -2000-10-20 Jonathan Larmour <jlarmour@redhat.com> - - * include/pkgconf/mlt_sh_edk7708_ram.h: - * include/pkgconf/mlt_sh_edk7708_rom.h: - * include/pkgconf/mlt_sh_edk7708_romram.h: - * include/pkgconf/mlt_sh_edk7708_ram.ldi: - * include/pkgconf/mlt_sh_edk7708_rom.ldi: - * include/pkgconf/mlt_sh_edk7708_romram.ldi: - Regenerated with updated host tools - -2000-10-17 Jesper Skov <jskov@redhat.com> - - * include/pkgconf/mlt_sh_edk7708_ram.h: Adding heap1. - * include/pkgconf/mlt_sh_edk7708_ram.mlt: Ditto. - * include/pkgconf/mlt_sh_edk7708_ram.ldi: Ditto. - * include/pkgconf/mlt_sh_edk7708_rom.h: Ditto. - * include/pkgconf/mlt_sh_edk7708_rom.mlt: Ditto. - * include/pkgconf/mlt_sh_edk7708_rom.ldi: Ditto. - * include/pkgconf/mlt_sh_edk7708_romram.h: Ditto. - * include/pkgconf/mlt_sh_edk7708_romram.mlt: Ditto. - * include/pkgconf/mlt_sh_edk7708_romram.ldi: Ditto. - -2000-10-10 Jesper Skov <jskov@redhat.com> - - * cdl/hal_sh_edk7708.cdl: Fix legal OCC ranges. - -2000-09-26 Jesper Skov <jskov@redhat.com> - - * include/platform.inc: Use calculated FRQCR init value. - - * cdl/hal_sh_edk7708.cdl: Updated clock options. - -2000-07-07 Jesper Skov <jskov@redhat.com> - - * cdl/hal_sh_edk7708.cdl: Require sub-variant package. - -2000-06-29 Jesper Skov <jskov@redhat.com> - - * src/hal_diag.c: serial driver API changes. - -2000-06-28 Jesper Skov <jskov@redhat.com> - - * src/hal_diag.c: Include hal_if file. - -2000-06-28 Jesper Skov <jskov@redhat.com> - - * src/plf_misc.c: - * src/hal_diag.c: - * src/plf_stub.c: [deleted] - * include/pkgconf/mlt_sh_edk7708_ram.h: - * include/pkgconf/mlt_sh_edk7708_ram.ldi: - * include/pkgconf/mlt_sh_edk7708_ram.mlt: - * include/pkgconf/mlt_sh_edk7708_rom.h: - * include/pkgconf/mlt_sh_edk7708_rom.ldi: - * include/pkgconf/mlt_sh_edk7708_rom.mlt: - * include/pkgconf/mlt_sh_edk7708_romram.h: - * include/pkgconf/mlt_sh_edk7708_romram.ldi: - * include/pkgconf/mlt_sh_edk7708_romram.mlt: - * include/plf_stub.h: - * include/hal_diag.h: - * cdl/hal_sh_edk7708.cdl: - Changed to use virtual vector table. - -1999-06-19 John Dallaway <jld@redhat.com> - - * cdl/hal_sh_edk7708.cdl: Tidy display strings. - -2000-04-12 Jesper Skov <jskov@redhat.com> - - * src/hal_diag.c: Output text raw if configuration requires it. - - * include/platform.inc: - * src/edk.S: [deleted] - * cdl/hal_sh_edk7708.cdl: - Hardware init code moved to platform.inc in order to allow ROMRAM - startup. - - * include/pkgconf/mlt_sh_edk7708_romram.h: - * include/pkgconf/mlt_sh_edk7708_romram.mlt: - * include/pkgconf/mlt_sh_edk7708_romram.ldi: - * cdl/hal_sh_edk7708.cdl: - Add ROMRAM startup option. - -2000-04-06 Jonathan Larmour <jlarmour@redhat.co.uk> - - * cdl/hal_sh_edk7708.cdl: Use -g now that toolchains work with that - (and in fact new toolchains no longer work with -ggdb) - -2000-04-06 Jesper Skov <jskov@redhat.com> - - * cdl/hal_sh_edk7708.cdl: Define vsr base location. - -2000-04-04 Jesper Skov <jskov@redhat.com> - - * src/hal_diag.c (hal_diag_write_char): Add GDB critical IO region - handling. - -2000-03-20 Jesper Skov <jskov@redhat.com> - - * cdl/hal_sh_edk7708.cdl: Added board speed variable. - -2000-03-09 Jesper Skov <jskov@redhat.com> - - * src/hal_diag.c: Fix compiler warning. - -2000-02-28 Jesper Skov <jskov@redhat.com> - - * include/platform.inc: Use sh_offsets instead of C header. - -2000-02-18 Jonathan Larmour <jlarmour@redhat.co.uk> - - * cdl/hal_sh_edk7708.cdl (CYGBLD_BUILD_GDB_STUBS): When - building stubs, define every dependency required here rather than - in the template - -2000-02-17 Jesper Skov <jskov@redhat.com> - - * cdl/hal_sh_edk7708.cdl: - Go back to -ggdb. -gstabs don't provide enough info for - source-level debugging. - - * include/pkgconf/mlt_sh_edk7708_rom.h: - * include/pkgconf/mlt_sh_edk7708_rom.ldi: - * include/pkgconf/mlt_sh_edk7708_rom.mlt: - * include/pkgconf/mlt_sh_edk7708_ram.h: - * include/pkgconf/mlt_sh_edk7708_ram.ldi: - * include/pkgconf/mlt_sh_edk7708_ram.mlt: - Don't use . assignment due to tools problem. - -2000-02-16 Jesper Skov <jskov@redhat.com> - - * cdl/hal_sh_edk7708.cdl: Added LE support. - -2000-02-15 Jesper Skov <jskov@redhat.com> - - * misc/STUBS_config: - * include/pkgconf/mlt_sh_edk7708_rom.ldi: - * include/pkgconf/mlt_sh_edk7708_rom.mlt: - * include/pkgconf/mlt_sh_edk7708_ram.h: - * include/pkgconf/mlt_sh_edk7708_ram.ldi: - * include/pkgconf/mlt_sh_edk7708_ram.mlt: - Updated for new stubs scheme. - - * cdl/hal_sh_edk7708.cdl: Removed stubs startup. - Use -gstabs instead of -ggdb to work around problem with GDB. - -2000-02-10 Jesper Skov <jskov@redhat.com> - - * include/plf_stub.h: - HAL_STUB_PLATFORM_STUBS_INIT->HAL_STUB_PLATFORM_INIT - -2000-02-07 Jesper Skov <jskov@redhat.com> - - * cdl/hal_sh_edk7708.cdl: use cpu flags when linking. - -2000-02-03 Jesper Skov <jskov@redhat.com> - - * cdl/hal_sh_edk7708.cdl: Implements stubs. - -2000-01-27 Jesper Skov <jskov@redhat.com> - - * cdl/hal_sh_edk7708.cdl: Moved part of stubs build rule to - common HAL. Changed description. - -2000-01-26 Jesper Skov <jskov@redhat.com> - - * cdl/hal_sh_edk7708.cdl: Fix display string. - -2000-01-24 Jesper Skov <jskov@cygnus.co.uk> - - * cdl/hal_sh_edk7708.cdl: Add stubs build rule. - * include/pkgconf/mlt_sh_edk7708_ram.ldi: - * include/pkgconf/mlt_sh_edk7708_ram.h: - * include/pkgconf/mlt_sh_edk7708_ram.mlt: - * include/pkgconf/mlt_sh_edk7708_stubs.ldi: - * include/pkgconf/mlt_sh_edk7708_stubs.h: - * include/pkgconf/mlt_sh_edk7708_stubs.mlt: - Give stub more RAM. - -2000-01-24 John Dallaway <jld@cygnus.co.uk> - - * cdl/*.cdl: - - Remove obsolete option CYGTST_TESTING_IDENTIFIER. - -2000-01-19 Hugo Tyson <hmt@cygnus.co.uk> - - * cdl/*.cdl: Add descriptions to a number of options &c which were - lacking same, also tidied up other typos as noticed en passant. - -2000-01-18 Jesper Skov <jskov@cygnus.co.uk> - CR 902066 - * include/pkgconf/mlt_sh_edk7708_ram.mlt: - * include/pkgconf/mlt_sh_edk7708_ram.h: - * include/pkgconf/mlt_sh_edk7708_ram.ldi: - Correct RAM size. - -1999-12-21 Jonathan Larmour <jlarmour@cygnus.co.uk> - - * src/plf_misc.c (cyg_hal_user_break): Rename - CYG_HAL_USE_ROM_MONITOR_GDB_STUBS -> CYGSEM_HAL_USE_ROM_MONITOR_GDB_stubs - - * cdl/hal_sh_edk7708.cdl: Don't need to define CYG_HAL_SH_SH7708 any - more - Add new platform-specific CYGSEM_HAL_USE_ROM_MONITOR option to - control ROM monitor support - -1999-12-20 Gary Thomas <gthomas@cygnus.co.uk> - - * cdl/hal_sh_edk7708.cdl: Add -Wl for linker options. - -1999-11-25 Gary Thomas <gthomas@cygnus.co.uk> - - * include/pkgconf/mlt_sh_edk7708_stubs.h: - * include/pkgconf/mlt_sh_edk7708_rom.h: - * include/pkgconf/mlt_sh_edk7708_ram.h: New file(s). - -1999-11-02 Jesper Skov <jskov@cygnus.co.uk> - - * cdl/hal_sh_edk7708.cdl: Use define_proc for CPU define. - -1999-11-01 Jesper Skov <jskov@cygnus.co.uk> - - * cdl/hal_sh_edk7708.cdl: Use define_proc for const header defs. - -1999-10-29 Jesper Skov <jskov@cygnus.co.uk> - - * cdl/hal_sh_edk7708.cdl: Added. - -1999-10-13 Jesper Skov <jskov@cygnus.co.uk> - - * src/hal_diag.c (hal_diag_write_char): - * src/plf_misc.c: - * src/PKGconf.mak (COMPILE): - Added user breakpoint handling. - -1999-09-02 Jesper Skov <jskov@cygnus.co.uk> - - * misc/STUBS_config: Also disable kernel support in HAL. - -1999-08-17 Jesper Skov <jskov@cygnus.co.uk> - - * misc/STUBS_config: Added. - -1999-06-18 Jesper Skov <jskov@cygnus.co.uk> - - * include/pkgconf/hal_sh_edk7708.h: Consistent EDK7708 naming. - -1999-06-01 Jesper Skov <jskov@cygnus.co.uk> - - * src/hal_diag.c (hal_diag_write_char): Don't look for 0x03 - chars. It doesn't work well. Better the dedicated magic handles - C-c. - - * src/edk.S: Cleaned up memory controller setup. - -1999-05-31 Jesper Skov <jskov@cygnus.co.uk> - - * include/pkgconf/hal_sh_edk7708.h: Removed FIX ME. - - * src/edk.S: Fixed delay-slot problem. - -1999-05-28 Jesper Skov <jskov@cygnus.co.uk> - - * include/pkgconf/hal_sh_edk7708.h: Fixed platform name. - - * include/pkgconf/mlt_sh_edk7708_rom.ldi: - * include/pkgconf/mlt_sh_edk7708_rom.mlt: - * include/pkgconf/mlt_sh_edk7708_stubs.ldi: - * include/pkgconf/mlt_sh_edk7708_stubs.mlt: - * include/pkgconf/mlt_sh_edk7708_ram.ldi: - * include/pkgconf/mlt_sh_edk7708_ram.mlt: - Fixed memory layout and generated MLT files. - -1999-05-28 Jesper Skov <jskov@cygnus.co.uk> - - * include/pkgconf/hal_sh_edk.h: [deleted] - * include/pkgconf/mlt_sh_edk_ram.ldi: [deleted] - * include/pkgconf/mlt_sh_edk_ram.mlt: [deleted] - * include/pkgconf/mlt_sh_edk_rom.ldi: [deleted] - * include/pkgconf/mlt_sh_edk_stubs.ldi: [deleted] - * include/pkgconf/hal_sh_edk7708.h: [added] - * include/pkgconf/mlt_sh_edk7708_ram.ldi: [added] - * include/pkgconf/mlt_sh_edk7708_ram.mlt: [added] - * include/pkgconf/mlt_sh_edk7708_rom.ldi: [added] - * include/pkgconf/mlt_sh_edk7708_rom.mlt: [added] - * include/pkgconf/mlt_sh_edk7708_stubs.ldi:[added] - * include/pkgconf/mlt_sh_edk7708_stubs.mlt:[added] - * src/PKGconf.mak: - Renamed SH platform package to edk7708. - -1999-05-21 Jesper Skov <jskov@cygnus.co.uk> - - * include/pkgconf/hal_sh_edk.h (CYGNUM_HAL_RTC_PERIOD): The timer - is running at 1/4 of the peripheral clock. - - * include/plf_stub.h: Added RESET code. - - * include/pkgconf/hal_sh_edk.h: Added RTC data for the edk board. - -1999-05-20 John Dallaway <jld@cygnus.co.uk> - - * include/pkgconf/mlt_sh_edk_ram.mlt: Working MLT-generated - version. - -1999-05-20 Jesper Skov <jskov@cygnus.co.uk> - - * Moved files to CVS trunk. - -1999-05-19 Jesper Skov <jskov@cygnus.co.uk> - - * src/edk.S (_hal_hardware_init): Fix a few mistakes. - - * include/plf_stub.h: Enable led in stub init. - - * include/pkgconf/mlt_sh_edk_stubs.ldi: - * include/pkgconf/mlt_sh_edk_rom.ldi: - Added. - Moved RAM region to the end of the chunk and made it bigger. - - * src/edk.S (_hal_hardware_init): Added Bus State Controller - initialization. - -1999-05-19 Jesper Skov <jskov@cygnus.co.uk> - - * Most things working now. Will start keeping track of changes. - -1999-04-22 Jesper Skov <jskov@lassi.cygnus.co.uk> - - * Set up directory structure. - -//=========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//===========================================================================
deleted file mode 100644 --- a/packages/hal/sh/edk/current/cdl/hal_sh_edk7708.cdl +++ /dev/null @@ -1,312 +0,0 @@ -# ==================================================================== -# -# hal_sh_edk7708.cdl -# -# EDK7708 board HAL package configuration data -# -# ==================================================================== -#####COPYRIGHTBEGIN#### -# -# ------------------------------------------- -# The contents of this file are subject to the Red Hat eCos Public License -# Version 1.1 (the "License"); you may not use this file except in -# compliance with the License. You may obtain a copy of the License at -# http://www.redhat.com/ -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -# License for the specific language governing rights and limitations under -# the License. -# -# The Original Code is eCos - Embedded Configurable Operating System, -# released September 30, 1998. -# -# The Initial Developer of the Original Code is Red Hat. -# Portions created by Red Hat are -# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -# All Rights Reserved. -# ------------------------------------------- -# -#####COPYRIGHTEND#### -# ==================================================================== -######DESCRIPTIONBEGIN#### -# -# Author(s): jskov -# Original data: jskov -# Contributors: -# Date: 1999-10-29 -# -#####DESCRIPTIONEND#### -# -# ==================================================================== - -cdl_package CYGPKG_HAL_SH_EDK7708 { - display "Hitachi EDK/SH7708 board" - parent CYGPKG_HAL_SH - requires CYGPKG_HAL_SH_7708 - define_header hal_sh_edk7708.h - include_dir cyg/hal - description " - The edk HAL package provides the support needed to run - eCos on a Hitachi SH3 EDK7708 board." - - compile hal_diag.c plf_misc.c - - implements CYGINT_HAL_DEBUG_GDB_STUBS - implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK - implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT - - define_proc { - puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H <pkgconf/hal_sh.h>" - puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H <pkgconf/hal_sh_edk7708.h>" - - puts $::cdl_header "#define CYGNUM_HAL_SH_SH3_SCI_PORTS 1" - puts $::cdl_header "#define CYGHWR_HAL_VSR_TABLE 0x08000000" - puts $::cdl_header "#define CYGHWR_HAL_VECTOR_TABLE 0x08000100" - } - - cdl_component CYG_HAL_STARTUP { - display "Startup type" - flavor data - legal_values {"RAM" "ROM" "ROMRAM"} - default_value {"RAM"} - no_define - define -file system.h CYG_HAL_STARTUP - description " - When targetting the EDK7708 board it is possible to build - the system for either RAM bootstrap or ROM bootstrap. - RAM bootstrap generally requires that the board - is equipped with ROMs containing a suitable ROM monitor or - equivalent software that allows GDB to download the eCos - application on to the board. The ROM bootstrap typically - requires that the eCos application be blown into EPROMs or - equivalent technology. ROMRAM bootstrap is similar to ROM - bootstrap, but everything is copied to RAM before execution - starts thus improving performace, but at the cost of an - increased RAM footprint." - } - - cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { - display "Number of communication channels on the board" - flavor data - calculated 1 - } - - cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { - display "Debug serial port" - flavor data - legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 - default_value 0 - description " - The EDK/7708 board has only one serial port. This option - chooses which port will be used to connect to a host - running GDB." - } - - cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { - display "Diagnostic serial port" - flavor data - legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 - default_value 0 - description " - The EDK/7708 board has only one serial port. This option - chooses which port will be used for diagnostic output." - } - - cdl_component CYGHWR_HAL_SH_PLF_CLOCK_SETTINGS { - display "SH on-chip platform clock controls" - description " - The various clocks used by the system are derived from - these options." - flavor none - no_define - - cdl_option CYGHWR_HAL_SH_OOC_XTAL { - display "SH clock crystal" - flavor data - legal_values 8000000 to 50000000 - default_value 15000000 - no_define - description " - This option specifies the frequency of the crystal all - other clocks are derived from." - } - - cdl_option CYGHWR_HAL_SH_OOC_PLL_1 { - display "SH clock PLL circuit 1" - flavor data - default_value 1 - legal_values { 0 1 2 4 } - description " - This selects the multiplication factor provided by - PLL1. If PLL1 is disabled via CAP1, this option should - be set to zero." - } - - cdl_option CYGHWR_HAL_SH_OOC_PLL_2 { - display "SH clock PLL circuit 2" - flavor data - default_value 4 - legal_values { 0 1 4 } - no_define - description " - This selects the multiplication factor provided by - PLL2. If PLL2 is disabled via CAP2, this option should - be set to zero." - } - - cdl_option CYGHWR_HAL_SH_OOC_DIVIDER_1 { - display "SH clock divider 1" - flavor data - default_value 1 - legal_values { 1 2 3 4 } - description " - This divider option affects the CPU core clock." - } - - cdl_option CYGHWR_HAL_SH_OOC_DIVIDER_2 { - display "SH clock divider 2" - flavor data - default_value 4 - legal_values { 1 2 3 4 } - description " - This divider option affects the peripheral clock." - } - - cdl_option CYGHWR_HAL_SH_OOC_CLOCK_MODE { - display "SH clock mode" - flavor data - default_value 2 - legal_values { 0 1 2 3 4 7 } - description " - This option must mirror the clock mode hardwired on - the MD0-MD2 pins of the CPU in order to correctly - initialize the FRQCR register." - } - } - - cdl_component CYGBLD_GLOBAL_OPTIONS { - display "Global build options" - flavor none - parent CYGPKG_NONE - no_define - description " - Global build options including control over - compiler flags, linker flags and choice of toolchain." - - - cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { - display "Global command prefix" - flavor data - no_define - default_value { "sh-elf" } - description " - This option specifies the command prefix used when - invoking the build tools." - } - - cdl_option CYGBLD_GLOBAL_CFLAGS { - display "Global compiler flags" - flavor data - no_define - default_value { CYGHWR_HAL_SH_BIGENDIAN ? "-mb -m3 -Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions -fvtable-gc -finit-priority" : "-ml -m3 -Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions -fvtable-gc -finit-priority" } - description " - This option controls the global compiler flags which - are used to compile all packages by - default. Individual packages may define - options which override these global flags." - } - - cdl_option CYGBLD_GLOBAL_LDFLAGS { - display "Global linker flags" - flavor data - no_define - default_value { CYGHWR_HAL_SH_BIGENDIAN ? "-mb -m3 -nostdlib -Wl,--gc-sections -Wl,-static" : "-ml -m3 -nostdlib -Wl,--gc-sections -Wl,-static" } - description " - This option controls the global linker flags. Individual - packages may define options which override these global flags." - } - - cdl_option CYGBLD_BUILD_GDB_STUBS { - display "Build GDB stub ROM image" - default_value 0 - requires { CYG_HAL_STARTUP == "ROM" } - requires CYGSEM_HAL_ROM_MONITOR - requires CYGBLD_BUILD_COMMON_GDB_STUBS - requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS - requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT - requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT - requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT - requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM - no_define - description " - This option enables the building of the GDB stubs for the - board. The common HAL controls takes care of most of the - build process, but the final conversion from ELF image to - binary data is handled by the platform CDL, allowing - relocation of the data if necessary." - - make -priority 320 { - <PREFIX>/bin/gdb_module.bin : <PREFIX>/bin/gdb_module.img - $(OBJCOPY) -O binary $< $@ - } - } - } - - cdl_component CYGHWR_MEMORY_LAYOUT { - display "Memory layout" - flavor data - no_define - calculated { CYG_HAL_STARTUP == "RAM" ? "sh_edk7708_ram" : \ - CYG_HAL_STARTUP == "ROM" ? "sh_edk7708_rom" : \ - "sh_edk7708_romram" } - - cdl_option CYGHWR_MEMORY_LAYOUT_LDI { - display "Memory layout linker script fragment" - flavor data - no_define - define -file system.h CYGHWR_MEMORY_LAYOUT_LDI - calculated { CYG_HAL_STARTUP == "RAM" ? "<pkgconf/mlt_sh_edk7708_ram.ldi>" : \ - CYG_HAL_STARTUP == "ROM" ? "<pkgconf/mlt_sh_edk7708_rom.ldi>" : \ - "<pkgconf/mlt_sh_edk7708_romram.ldi>" } - } - - cdl_option CYGHWR_MEMORY_LAYOUT_H { - display "Memory layout header file" - flavor data - no_define - define -file system.h CYGHWR_MEMORY_LAYOUT_H - calculated { CYG_HAL_STARTUP == "RAM" ? "<pkgconf/mlt_sh_edk7708_ram.h>" : \ - CYG_HAL_STARTUP == "ROM" ? "<pkgconf/mlt_sh_edk7708_rom.h>" : \ - "<pkgconf/mlt_sh_edk7708_romram.h>" } - } - } - - cdl_option CYGSEM_HAL_USE_ROM_MONITOR { - display "Work with a ROM monitor" - flavor booldata - legal_values { "GDB_stubs" } - default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } - requires { CYG_HAL_STARTUP == "RAM" } - parent CYGPKG_HAL_ROM_MONITOR - description " - Support can be enabled for boot ROMs or ROM monitors which contain - GDB stubs. This support changes various eCos semantics such as - the encoding of diagnostic output, and the overriding of hardware - interrupt vectors." - } - - cdl_option CYGSEM_HAL_ROM_MONITOR { - display "Behave as a ROM monitor" - flavor bool - default_value 0 - parent CYGPKG_HAL_ROM_MONITOR - requires { CYG_HAL_STARTUP == "ROM" } - description " - Enable this option if this program is to be used as a ROM monitor, - i.e. applications will be loaded into RAM on the board, and this - ROM monitor may process exceptions or interrupts generated from the - application. This enables features such as utilizing a separate - interrupt stack when exceptions are generated." - } -}
deleted file mode 100644 --- a/packages/hal/sh/edk/current/include/hal_diag.h +++ /dev/null @@ -1,88 +0,0 @@ -#ifndef CYGONCE_HAL_HAL_DIAG_H -#define CYGONCE_HAL_HAL_DIAG_H - -//============================================================================= -// -// hal_diag.h -// -// HAL Support for Kernel Diagnostic Routines -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jskov -// Contributors:jskov -// Date: 1999-04-24 -// Purpose: HAL Support for Kernel Diagnostic Routines -// Description: Diagnostic routines for use during kernel development. -// Usage: #include <cyg/hal/hal_diag.h> -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include <pkgconf/hal.h> - -#include <cyg/infra/cyg_type.h> - -#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) - -#include <cyg/hal/hal_if.h> - -#define HAL_DIAG_INIT() hal_if_diag_init() -#define HAL_DIAG_WRITE_CHAR(_c_) hal_if_diag_write_char(_c_) -#define HAL_DIAG_READ_CHAR(_c_) hal_if_diag_read_char(&_c_) - -#else // everything by steam - -//----------------------------------------------------------------------------- -// functions implemented in hal_diag.c - -externC void hal_diag_init(void); - -externC void hal_diag_write_char(char c); - -externC void hal_diag_read_char(char *c); - -//----------------------------------------------------------------------------- - -#define HAL_DIAG_INIT() hal_diag_init() - -#define HAL_DIAG_WRITE_CHAR(_c_) hal_diag_write_char(_c_) - -#define HAL_DIAG_READ_CHAR(_c_) hal_diag_read_char(&_c_) - -#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG - -//----------------------------------------------------------------------------- -// Simple LED control. -externC void hal_diag_led_on( void ); -externC void hal_diag_led_off( void ); - -//----------------------------------------------------------------------------- -// end of hal_diag.h -#endif // CYGONCE_HAL_HAL_DIAG_H
deleted file mode 100644 --- a/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_ram.h +++ /dev/null @@ -1,17 +0,0 @@ -// eCos memory layout - Fri Oct 20 09:50:36 2000 - -// This is a generated file - do not edit - -#ifndef __ASSEMBLER__ -#include <cyg/infra/cyg_type.h> -#include <stddef.h> - -#endif -#define CYGMEM_REGION_ram (0x8008000) -#define CYGMEM_REGION_ram_SIZE (0xf8000) -#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) -#ifndef __ASSEMBLER__ -extern char CYG_LABEL_NAME (__heap1) []; -#endif -#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) -#define CYGMEM_SECTION_heap1_SIZE (0x8100000 - (size_t) CYG_LABEL_NAME (__heap1))
deleted file mode 100644 --- a/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_ram.ldi +++ /dev/null @@ -1,26 +0,0 @@ -// eCos memory layout - Fri Oct 20 09:50:36 2000 - -// This is a generated file - do not edit - -#include <cyg/infra/cyg_type.inc> - -MEMORY -{ - ram : ORIGIN = 0x8008000, LENGTH = 0xf8000 -} - -SECTIONS -{ - SECTIONS_BEGIN - SECTION_vectors (ram, 0x8008000, LMA_EQ_VMA) - SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) - SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) - SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA) - SECTION_rodata (ram, ALIGN (0x8), LMA_EQ_VMA) - SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) - SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA) - SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) - SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) - CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); - SECTIONS_END -}
deleted file mode 100644 --- a/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_ram.mlt +++ /dev/null @@ -1,12 +0,0 @@ -version 0 -region ram 8008000 f8000 0 ! -section vectors 0 1 0 1 1 1 1 1 8008000 8008000 text text ! -section text 0 4 0 1 0 1 0 1 fini fini ! -section fini 0 4 0 1 0 1 0 1 rodata1 rodata1 ! -section rodata1 0 8 0 1 0 1 0 1 rodata rodata ! -section rodata 0 8 0 1 0 1 0 1 fixup fixup ! -section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table ! -section gcc_except_table 0 1 0 1 0 1 0 1 data data ! -section data 0 8 0 1 0 1 0 1 bss bss ! -section bss 0 10 0 1 0 1 0 1 heap1 heap1 ! -section heap1 0 8 0 0 0 0 0 0 !
deleted file mode 100644 --- a/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_rom.h +++ /dev/null @@ -1,20 +0,0 @@ -// eCos memory layout - Fri Oct 20 09:51:04 2000 - -// This is a generated file - do not edit - -#ifndef __ASSEMBLER__ -#include <cyg/infra/cyg_type.h> -#include <stddef.h> - -#endif -#define CYGMEM_REGION_ram (0x8000200) -#define CYGMEM_REGION_ram_SIZE (0xffe00) -#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) -#define CYGMEM_REGION_rom (0xa0000000) -#define CYGMEM_REGION_rom_SIZE (0x20000) -#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) -#ifndef __ASSEMBLER__ -extern char CYG_LABEL_NAME (__heap1) []; -#endif -#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) -#define CYGMEM_SECTION_heap1_SIZE (0x8100000 - (size_t) CYG_LABEL_NAME (__heap1))
deleted file mode 100644 --- a/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_rom.ldi +++ /dev/null @@ -1,27 +0,0 @@ -// eCos memory layout - Fri Oct 20 09:51:04 2000 - -// This is a generated file - do not edit - -#include <cyg/infra/cyg_type.inc> - -MEMORY -{ - ram : ORIGIN = 0x8000200, LENGTH = 0xffe00 - rom : ORIGIN = 0xa0000000, LENGTH = 0x20000 -} - -SECTIONS -{ - SECTIONS_BEGIN - SECTION_vectors (rom, 0xa0000000, LMA_EQ_VMA) - SECTION_text (rom, ALIGN (0x4), LMA_EQ_VMA) - SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA) - SECTION_rodata1 (rom, ALIGN (0x8), LMA_EQ_VMA) - SECTION_rodata (rom, ALIGN (0x8), LMA_EQ_VMA) - SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) - SECTION_gcc_except_table (rom, ALIGN (0x1), LMA_EQ_VMA) - SECTION_data (ram, 0x8000200, FOLLOWING (.gcc_except_table)) - SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) - CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); - SECTIONS_END -}
deleted file mode 100644 --- a/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_rom.mlt +++ /dev/null @@ -1,13 +0,0 @@ -version 0 -region ram 8000200 ffe00 0 ! -region rom a0000000 20000 1 ! -section data 0 1 1 1 1 1 0 0 8000200 bss ! -section bss 0 10 0 1 0 1 0 1 heap1 heap1 ! -section heap1 0 8 0 0 0 0 0 0 ! -section vectors 0 1 0 1 1 1 1 1 a0000000 a0000000 text text ! -section text 0 4 0 1 0 1 0 1 fini fini ! -section fini 0 4 0 1 0 1 0 1 rodata1 rodata1 ! -section rodata1 0 8 0 1 0 1 0 1 rodata rodata ! -section rodata 0 8 0 1 0 1 0 1 fixup fixup ! -section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table ! -section gcc_except_table 0 1 0 1 0 0 0 1 data !
deleted file mode 100644 --- a/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_romram.h +++ /dev/null @@ -1,20 +0,0 @@ -// eCos memory layout - Fri Oct 20 09:51:30 2000 - -// This is a generated file - do not edit - -#ifndef __ASSEMBLER__ -#include <cyg/infra/cyg_type.h> -#include <stddef.h> - -#endif -#define CYGMEM_REGION_ram (0x8000200) -#define CYGMEM_REGION_ram_SIZE (0xffe00) -#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) -#define CYGMEM_REGION_rom (0xa0000000) -#define CYGMEM_REGION_rom_SIZE (0x20000) -#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) -#ifndef __ASSEMBLER__ -extern char CYG_LABEL_NAME (__heap1) []; -#endif -#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) -#define CYGMEM_SECTION_heap1_SIZE (0x8100000 - (size_t) CYG_LABEL_NAME (__heap1))
deleted file mode 100644 --- a/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_romram.ldi +++ /dev/null @@ -1,27 +0,0 @@ -// eCos memory layout - Fri Oct 20 09:51:30 2000 - -// This is a generated file - do not edit - -#include <cyg/infra/cyg_type.inc> - -MEMORY -{ - ram : ORIGIN = 0x8000200, LENGTH = 0xffe00 - rom : ORIGIN = 0xa0000000, LENGTH = 0x20000 -} - -SECTIONS -{ - SECTIONS_BEGIN - SECTION_vectors (ram, 0x8000200, AT (0xa0000000)) - SECTION_text (ram, ALIGN (0x10), FOLLOWING (.vectors)) - SECTION_fini (ram, ALIGN (0x10), FOLLOWING (.text)) - SECTION_rodata1 (ram, ALIGN (0x10), FOLLOWING (.fini)) - SECTION_rodata (ram, ALIGN (0x10), FOLLOWING (.rodata1)) - SECTION_fixup (ram, ALIGN (0x10), FOLLOWING (.rodata)) - SECTION_gcc_except_table (ram, ALIGN (0x10), FOLLOWING (.fixup)) - SECTION_data (ram, ALIGN (0x10), FOLLOWING (.gcc_except_table)) - SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) - CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); - SECTIONS_END -}
deleted file mode 100644 --- a/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_romram.mlt +++ /dev/null @@ -1,13 +0,0 @@ -version 0 -region ram 8000200 ffe00 0 ! -region rom a0000000 20000 1 ! -section vectors 0 10 1 1 1 1 1 1 8000200 a0000000 text text ! -section text 0 10 1 1 0 1 0 1 fini fini ! -section fini 0 10 1 1 0 1 0 1 rodata1 rodata1 ! -section rodata1 0 10 1 1 0 1 0 1 rodata rodata ! -section rodata 0 10 1 1 0 1 0 1 fixup fixup ! -section fixup 0 10 1 1 0 1 0 1 gcc_except_table gcc_except_table ! -section gcc_except_table 0 10 1 1 0 1 0 1 data data ! -section data 0 10 1 1 0 1 0 0 bss ! -section bss 0 10 0 1 0 1 0 1 heap1 heap1 ! -section heap1 0 8 0 0 0 0 0 0 !
deleted file mode 100644 --- a/packages/hal/sh/edk/current/include/platform.inc +++ /dev/null @@ -1,196 +0,0 @@ -#ifndef CYGONCE_HAL_PLATFORM_INC -#define CYGONCE_HAL_PLATFORM_INC -##============================================================================= -## -## platform.inc -## -## SH/EDK7708 board assembler header file -## -##============================================================================= -#####COPYRIGHTBEGIN#### -# -# ------------------------------------------- -# The contents of this file are subject to the Red Hat eCos Public License -# Version 1.0 (the "License"); you may not use this file except in -# compliance with the License. You may obtain a copy of the License at -# http://sourceware.cygnus.com/ecos -# -# Software distributed under the License is distributed on an -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -# License for the specific language governing rights and limitations under -# the License. -# -# The Original Code is eCos - Embedded Configurable Operating System, -# released September 30, 1998. -# -# The Initial Developer of the Original Code is Red Hat. -# Portions created by Red Hat are -# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -# All Rights Reserved. -# ------------------------------------------- -# -#####COPYRIGHTEND#### -##============================================================================= -#######DESCRIPTIONBEGIN#### -## -## Author(s): jskov -## Contributors:jskov -## Date: 2000-02-02 -## Purpose: SH/EDK7708 board definitions. -## Description: This file contains various definitions and macros that are -## useful for writing assembly code for the SH/EDK7708 board. -## Usage: -## #include <cyg/hal/platform.inc> -## ... -## -## -######DESCRIPTIONEND#### -## -##============================================================================= - -#include <pkgconf/hal.h> - -#include <cyg/hal/sh_regs.h> -#include <cyg/hal/sh_offsets.inc> - -#------------------------------------------------------------------------------ -# Hardware initialization. - - .macro hal_hardware_init - // Set up the Bus State Controller - mova BSC_settings_table,r0 - mov r0,r3 -1: mov.w @r3+,r0 // Address (or zero) - cmp/eq #0,r0 - bt 2f - mov.w @r3+,r1 // data - bra 1b - mov.w r1,@r0 // delay slot - - .align 2 -BSC_settings_table: - # These are the settings set by the Hitachi ROM Monitor. - - .word CYGARC_REG_FRQCR - .word CYGARC_REG_FRQCR_INIT - - # BCR2: Bus size of areas 1-6 to 32 bits - .word CYGARC_REG_BCR2 - .word 0x3ffc - # BCR1: Areas 2 and 3 are SDRAM - .word CYGARC_REG_BCR1 - .word 0x080c - # BCR2: Bus size of areas 1-6 to 32 bits [note: second write!] - .word CYGARC_REG_BCR2 - .word 0x3ffc - # WCR1: 3 wait-state cycles inserted for all areas - .word CYGARC_REG_WCR1 - .word 0x3fff - # WCR2: extra wait states and full pitch for burst - .word CYGARC_REG_WCR2 - .word 0xffd7 - # MCR: RAS/CAS & burst timing area 2/3 - .word CYGARC_REG_MCR - .word 0x963c - # RTCNT: refresh counter (needs a5 in top byte to accept write) - .word CYGARC_REG_RTCNT - .word (0xa500 | 0x0000) - # RTCOR: refresh time constant (needs a5 in top byte to accept write) - .word CYGARC_REG_RTCOR - .word (0xa500 | 0x003b) - # RFCR: refresh count register (needs a4 in top byte to accept write) - .word CYGARC_REG_RFCR - .word (0xa400 | 0x0000) - # RTCSR: refresh timer control (needs a5 in top byte to accept write) - .word CYGARC_REG_RTCSR - .word (0xa500 | 0x0008) - - # Set SDMR to 0x220 - .word 0xd880 - .word 0 - - # Table end - .word 0 - - .align 2 -2: - .endm - -#------------------------------------------------------------------------------ -# Monitor initialization. - -#ifndef CYGPKG_HAL_SH_MON_DEFINED - -#if !defined(CYG_HAL_STARTUP_RAM) || \ - ( defined(CYG_HAL_STARTUP_RAM) && \ - !defined(CYGSEM_HAL_USE_ROM_MONITOR)) - - # If we are not starting up from RAM, or we are starting in - # RAM and NOT using a ROM monitor, initialize the VSR table. - - .macro hal_mon_init - mov.l $_hal_vsr_table_p,r3 - # Write exception vectors - mov.l $_cyg_hal_default_exception_vsr_p,r4 - mov #CYGNUM_HAL_VSR_EXCEPTION_COUNT,r5 -1: mov.l r4,@r3 - add #4,r3 - dt r5 - bf 1b - # Write interrupt vector - mov.l $_cyg_hal_default_interrupt_vsr_p,r4 - mov.l r4,@r3 - bra 2f - nop - .align 2 - -$_cyg_hal_default_exception_vsr_p: - .long _cyg_hal_default_exception_vsr -$_cyg_hal_default_interrupt_vsr_p: - .long _cyg_hal_default_interrupt_vsr - - .extern _hal_vsr_table -$_hal_vsr_table_p: - .long _hal_vsr_table - -2: - .endm - -#elif defined(CYG_HAL_STARTUP_RAM) && defined(CYGSEM_HAL_USE_ROM_MONITOR) - - # Initialize the VSR table entries - # We only take control of the interrupt vector, - # the rest are left to the ROM for now... - - .macro hal_mon_init - # Write interrupt vector - mov.l $_hal_vsr_table_p,r3 - mov.l $_cyg_hal_default_interrupt_vsr_p,r4 - mov.l r4,@r3 - bra 2f - nop - .align 2 - -$_cyg_hal_default_interrupt_vsr_p: - .long _cyg_hal_default_interrupt_vsr - - .extern _hal_vsr_table -$_hal_vsr_table_p: - .long _hal_vsr_table+CYGNUM_HAL_VECTOR_INTERRUPT*4 - -2: - .endm - -#else - - .macro hal_mon_init - .endm - -#endif - - -#define CYGPKG_HAL_SH_MON_DEFINED - -#endif // CYGPKG_HAL_SH_MON_DEFINED - -#endif // CYGONCE_HAL_PLATFORM_INC
deleted file mode 100644 --- a/packages/hal/sh/edk/current/include/plf_stub.h +++ /dev/null @@ -1,90 +0,0 @@ -#ifndef CYGONCE_HAL_PLF_STUB_H -#define CYGONCE_HAL_PLF_STUB_H - -//============================================================================= -// -// plf_stub.h -// -// Platform header for GDB stub support. -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jskov -// Contributors:jskov -// Date: 1999-05-18 -// Purpose: Platform HAL stub support for Hitachi/EDK boards. -// Usage: #include <cyg/hal/plf_stub.h> -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include <pkgconf/system.h> -#include <pkgconf/hal.h> - -#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS - -#include <cyg/infra/cyg_type.h> // CYG_UNUSED_PARAM, externC - -#include <cyg/hal/sh_stub.h> // architecture stub support - -#include <cyg/hal/hal_diag.h> // hal_diag_led_on - -//---------------------------------------------------------------------------- -// Define some platform specific communication details. This is mostly -// handled by hal_if now, but we need to make sure the comms tables are -// properly initialized. - -externC void cyg_hal_plf_comms_init(void); - -#define HAL_STUB_PLATFORM_INIT_SERIAL() cyg_hal_plf_comms_init() - -#define HAL_STUB_PLATFORM_SET_BAUD_RATE(baud) CYG_UNUSED_PARAM(int, (baud)) -#define HAL_STUB_PLATFORM_INTERRUPTIBLE 0 - -//---------------------------------------------------------------------------- -// Stub initializer. -#ifdef CYGSEM_HAL_ROM_MONITOR -# define HAL_STUB_PLATFORM_INIT() hal_diag_led_on() -#else -# define HAL_STUB_PLATFORM_INIT() CYG_EMPTY_STATEMENT -#endif - -#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS - -//---------------------------------------------------------------------------- -// Reset. -// Block interrupts and cause an exception. This forces a reset. -#define HAL_STUB_PLATFORM_RESET() \ - asm volatile ("ldc %0,sr;trapa #0x00;" : : "r" (CYGARC_REG_SR_BL)) - -#define HAL_STUB_PLATFORM_RESET_ENTRY 0xa0000000 - -//----------------------------------------------------------------------------- -#endif // CYGONCE_HAL_PLF_STUB_H -// End of plf_stub.h
deleted file mode 100644 --- a/packages/hal/sh/edk/current/misc/STUBS_config +++ /dev/null @@ -1,84 +0,0 @@ -#! /bin/sh -# Configure SH/edk7708 eCos to create EDK7708 GDB stubs -# Ensure that PATH include the directory where the SH tools reside. -# -# Run from an empty temporary directory with one argument: the path to -# the packages directory (i.e., where pkgconf.tcl lives). -# -# Output will be ./stubrom.bin which is suitable for burning into ROM. - -if ( echo | tclsh ) 2>/dev/null ; then - TCL=tclsh -elif ( echo | cygtclsh80 ) 2>/dev/null ; then - TCL=cygtclsh80 -else - echo Could not find TCL interpreter - exit 1 -fi - -$TCL $1/pkgconf.tcl \ - --target=sh --platform=edk7708 --startup=rom \ - --disable CYGPKG_KERNEL --disable CYGPKG_UITRON \ - --disable CYGPKG_LIBC --disable CYGPKG_LIBM \ - --disable CYGPKG_ERROR --disable CYGPKG_IO \ - --disable CYGPKG_IO_SERIAL --disable CYGPKG_DEVICES_WALLCLOCK \ - --disable CYGPKG_DEVICES_WATCHDOG - -patch <<END_OF_PATCH -p0 ---- pkgconf/hal.h.orig Thu Feb 10 09:05:07 2000 -+++ pkgconf/hal.h Thu Feb 10 09:04:56 2000 -@@ -122,7 +122,7 @@ - } - - }}CFG_DATA */ --#define CYGFUN_HAL_COMMON_KERNEL_SUPPORT -+#undef CYGFUN_HAL_COMMON_KERNEL_SUPPORT - #undef CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL - - #ifdef CYGDBG_HAL_DIAG_DISABLE_GDB_PROTOCOL -@@ -243,7 +243,7 @@ - #define CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK - #define CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE 4096 - #undef CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING --#define CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT -+#undef CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT - #undef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN - #undef CYGIMP_HAL_COMMON_INTERRUPTS_IGNORE_SPURIOUS - -@@ -272,7 +272,7 @@ - } - - }}CFG_DATA */ --#define CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM -+#undef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM - - /* {{CFG_DATA - -@@ -423,10 +423,10 @@ - - }}CFG_DATA */ - --#undef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS -+#define CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS - #undef CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT --#define CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT --#define CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT -+#undef CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT -+#undef CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT - - /* - * NOTE: -@@ -522,7 +522,7 @@ - - - /* Enable this when configuring as a ROM monitor (i.e., stub) */ --#undef CYGSEM_HAL_ROM_MONITOR -+#define CYGSEM_HAL_ROM_MONITOR - - #include CYGBLD_HAL_TARGET_H - #include CYGBLD_HAL_PLATFORM_H -END_OF_PATCH - -make -make -C hal/common/current/src/stubrom -sh-elf-objcopy -O binary hal/common/current/src/stubrom/stubrom stubrom.bin
deleted file mode 100644 --- a/packages/hal/sh/edk/current/src/edk.S +++ /dev/null @@ -1,117 +0,0 @@ -##============================================================================= -## -## edk.S -## -## EDK board hardware setup -## -##============================================================================= -#####COPYRIGHTBEGIN#### -# -# ------------------------------------------- -# The contents of this file are subject to the Red Hat eCos Public License -# Version 1.1 (the "License"); you may not use this file except in -# compliance with the License. You may obtain a copy of the License at -# http://www.redhat.com/ -# -# Software distributed under the License is distributed on an "AS IS" -# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -# License for the specific language governing rights and limitations under -# the License. -# -# The Original Code is eCos - Embedded Configurable Operating System, -# released September 30, 1998. -# -# The Initial Developer of the Original Code is Red Hat. -# Portions created by Red Hat are -# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -# All Rights Reserved. -# ------------------------------------------- -# -#####COPYRIGHTEND#### -##============================================================================= -#######DESCRIPTIONBEGIN#### -## -## Author(s): jskov -## Contributors:jskov -## Date: 1999-05-03 -## Purpose: EDK7708 board hardware setup -## Description: This file contains any code needed to initialize the -## hardware on a Hitachi SH3 EDK7708 board. -## -######DESCRIPTIONEND#### -## -##============================================================================= - -#include <pkgconf/hal.h> -#include <cyg/hal/sh_regs.h> - - .globl _hal_hardware_init -_hal_hardware_init: - - // Set up the Bus State Controller - mov.l $BSC_settings_table,r3 -1: mov.w @r3+,r0 // Address (or zero) - cmp/eq #0,r0 - bt 2f - mov.w @r3+,r1 // data - bra 1b - mov.w r1,@r0 // delay slot - -2: - rts - nop - - .align 2 -$BSC_settings_table: - .long BSC_settings_table -BSC_settings_table: - # These are the settings set by the Hitachi ROM Monitor. - - # BCR2: Bus size of areas 1-6 to 32 bits - .word CYGARC_REG_BCR2 - .word 0x3ffc - # BCR1: Areas 2 and 3 are SDRAM - .word CYGARC_REG_BCR1 - .word 0x080c - # BCR2: Bus size of areas 1-6 to 32 bits [note: second write!] - .word CYGARC_REG_BCR2 - .word 0x3ffc - # WCR1: 3 wait-state cycles inserted for all areas - .word CYGARC_REG_WCR1 - .word 0x3fff - # WCR2: extra wait states and full pitch for burst - .word CYGARC_REG_WCR2 - .word 0xffd7 - # MCR: RAS/CAS & burst timing area 2/3 - .word CYGARC_REG_MCR - .word 0x963c -#if 0 - # DCR: RAS/CAS & burst timing area 2 - .word CYGARC_REG_DCR - .word 0x0000 - # PCR: PCMCIA disabled - .word CYGARC_REG_PCR - .word 0x0000 -#endif - # RTCNT: refresh counter (needs a5 in top byte to accept write) - .word CYGARC_REG_RTCNT - .word (0xa500 | 0x0000) - # RTCOR: refresh time constant (needs a5 in top byte to accept write) - .word CYGARC_REG_RTCOR - .word (0xa500 | 0x003b) - # RFCR: refresh count register (needs a4 in top byte to accept write) - .word CYGARC_REG_RFCR - .word (0xa400 | 0x0000) - # RTCSR: refresh timer control (needs a5 in top byte to accept write) - .word CYGARC_REG_RTCSR - .word (0xa500 | 0x0008) - - # Set SDMR to 0x220 - .word 0xd880 - .word 0 - - # Table end - .word 0 - -#------------------------------------------------------------------------------ -# end of edk.S
deleted file mode 100644 --- a/packages/hal/sh/edk/current/src/hal_diag.c +++ /dev/null @@ -1,219 +0,0 @@ -//============================================================================= -// -// hal_diag.c -// -// HAL diagnostic output code -// -//============================================================================= -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//============================================================================= -//#####DESCRIPTIONBEGIN#### -// -// Author(s): nickg, jskov -// Contributors: nickg, jskov -// Date: 1999-03-23 -// Purpose: HAL diagnostic output -// Description: Implementations of HAL diagnostic output support. -// -//####DESCRIPTIONEND#### -// -//============================================================================= - -#include <pkgconf/hal.h> - -#include <cyg/hal/hal_diag.h> // our header. - -#include <cyg/infra/cyg_type.h> // base types, externC -#include <cyg/hal/hal_io.h> // IO macros -#include <cyg/hal/hal_if.h> // Calling interface -#include <cyg/hal/hal_intr.h> // Interrupt macros -#include <cyg/hal/sh3_sci.h> // driver API -#include <cyg/hal/hal_misc.h> // Helper functions - -#define SCI_BASE ((cyg_uint8*)0xfffffe80) - -//----------------------------------------------------------------------------- - -#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \ - || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES) - -void -cyg_hal_plf_comms_init(void) -{ - static int initialized = 0; - - if (initialized) - return; - - initialized = 1; - - cyg_hal_plf_sci_init(0, 0, CYGNUM_HAL_INTERRUPT_SCI_RXI, SCI_BASE); -} - -#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES - -//============================================================================= -// Led control -//============================================================================= -#define LED_ON 0x04000000 -#define LED_OFF 0x18000000 - -void -hal_diag_led_on( void ) -{ - HAL_WRITE_UINT8(LED_ON, 0); -} - -void -hal_diag_led_off( void ) -{ - HAL_WRITE_UINT8(LED_OFF, 0); -} - - -//============================================================================= -// Compatibility with older stubs -//============================================================================= - -#ifndef CYGSEM_HAL_VIRTUAL_VECTOR_DIAG - -static channel_data_t channel = { (cyg_uint8*)SCI_BASE, 0, 0}; - -#if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) -#include <cyg/hal/hal_stub.h> // hal_output_gdb_string -#endif - -#if defined(CYGSEM_HAL_USE_ROM_MONITOR_GDB_stubs) - -#define CYG_HAL_DIAG_GDB - -#elif defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) - -#define CYG_HAL_DIAG_GDB - -#endif - -//----------------------------------------------------------------------------- - -void hal_diag_init(void) -{ - cyg_hal_plf_sci_init_channel(&channel); -} - -void -hal_diag_write_char_serial( char c ) -{ - cyg_hal_plf_sci_putc(&channel, c); -} - -void -hal_diag_read_char(char *c) -{ - *c = (char) cyg_hal_plf_sci_getc(&channel); -} - -// Packet function -void -hal_diag_write_char(char c) -{ -#ifdef CYG_HAL_DIAG_GDB - static char line[100]; - static int pos = 0; - - // No need to send CRs - if( c == '\r' ) return; - - line[pos++] = c; - - if( c == '\n' || pos == sizeof(line) ) - { - CYG_INTERRUPT_STATE old; - - // Disable interrupts. This prevents GDB trying to interrupt us - // while we are in the middle of sending a packet. The serial - // receive interrupt will be seen when we re-enable interrupts - // later. - -#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS - CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION(old); -#else - HAL_DISABLE_INTERRUPTS(old); -#endif - - while(1) - { - char c1; - static char hex[] = "0123456789ABCDEF"; - cyg_uint8 csum = 0; - int i; - - cyg_hal_plf_sci_putc(&channel, '$'); - cyg_hal_plf_sci_putc(&channel, 'O'); - csum += 'O'; - for( i = 0; i < pos; i++ ) - { - char ch = line[i]; - char h = hex[(ch>>4)&0xF]; - char l = hex[ch&0xF]; - cyg_hal_plf_sci_putc(&channel, h); - cyg_hal_plf_sci_putc(&channel, l); - csum += h; - csum += l; - } - cyg_hal_plf_sci_putc(&channel, '#'); - cyg_hal_plf_sci_putc(&channel, hex[(csum>>4)&0xF]); - cyg_hal_plf_sci_putc(&channel, hex[csum&0xF]); - - // Wait for the ACK character '+' from GDB here and handle - // receiving a ^C instead. - c1 = (char) cyg_hal_plf_sci_getc(&channel); - - if( c1 == '+' ) - break; // a good acknowledge - - // Check for user break. - if( cyg_hal_is_break( &c1, 1 ) ) - cyg_hal_user_break( NULL ); - - // otherwise, loop round again - } - - pos = 0; - - // And re-enable interrupts -#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS - CYG_HAL_GDB_LEAVE_CRITICAL_IO_REGION(old); -#else - HAL_RESTORE_INTERRUPTS(old); -#endif - } -#else // CYG_HAL_DIAG_GDB - cyg_hal_plf_sci_putc(&channel, c); -#endif -} -#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG - -//----------------------------------------------------------------------------- -// End of hal_diag.c
deleted file mode 100644 --- a/packages/hal/sh/edk/current/src/plf_misc.c +++ /dev/null @@ -1,57 +0,0 @@ -//========================================================================== -// -// plf_misc.c -// -// HAL platform miscellaneous functions -// -//========================================================================== -//####COPYRIGHTBEGIN#### -// -// ------------------------------------------- -// The contents of this file are subject to the Red Hat eCos Public License -// Version 1.1 (the "License"); you may not use this file except in -// compliance with the License. You may obtain a copy of the License at -// http://www.redhat.com/ -// -// Software distributed under the License is distributed on an "AS IS" -// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the -// License for the specific language governing rights and limitations under -// the License. -// -// The Original Code is eCos - Embedded Configurable Operating System, -// released September 30, 1998. -// -// The Initial Developer of the Original Code is Red Hat. -// Portions created by Red Hat are -// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. -// All Rights Reserved. -// ------------------------------------------- -// -//####COPYRIGHTEND#### -//========================================================================== -//#####DESCRIPTIONBEGIN#### -// -// Author(s): jskov -// Contributors: jskov,nickg, jlarmour -// Date: 1999-10-13 -// Purpose: HAL miscellaneous functions -// Description: This file contains miscellaneous functions provided by the -// HAL. -// -//####DESCRIPTIONEND#### -// -//========================================================================== - -#include <pkgconf/hal.h> - -#include <cyg/hal/hal_if.h> // interfacing API - -//-------------------------------------------------------------------------- -void -hal_platform_init(void) -{ - hal_if_init(); -} - -//-------------------------------------------------------------------------- -// eof plf_misc.c
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/edk7708/current/ChangeLog @@ -0,0 +1,365 @@ +2000-11-01 Jesper Skov <jskov@redhat.com> + + * Moved HAL to edk7708. + +2000-10-31 Jesper Skov <jskov@redhat.com> + + * include/plf_intr.h: Added. + * include/plf_cache.h: Added. + +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_sh_edk7708_ram.h: + * include/pkgconf/mlt_sh_edk7708_rom.h: + * include/pkgconf/mlt_sh_edk7708_romram.h: + * include/pkgconf/mlt_sh_edk7708_ram.ldi: + * include/pkgconf/mlt_sh_edk7708_rom.ldi: + * include/pkgconf/mlt_sh_edk7708_romram.ldi: + Regenerated with updated host tools + +2000-10-17 Jesper Skov <jskov@redhat.com> + + * include/pkgconf/mlt_sh_edk7708_ram.h: Adding heap1. + * include/pkgconf/mlt_sh_edk7708_ram.mlt: Ditto. + * include/pkgconf/mlt_sh_edk7708_ram.ldi: Ditto. + * include/pkgconf/mlt_sh_edk7708_rom.h: Ditto. + * include/pkgconf/mlt_sh_edk7708_rom.mlt: Ditto. + * include/pkgconf/mlt_sh_edk7708_rom.ldi: Ditto. + * include/pkgconf/mlt_sh_edk7708_romram.h: Ditto. + * include/pkgconf/mlt_sh_edk7708_romram.mlt: Ditto. + * include/pkgconf/mlt_sh_edk7708_romram.ldi: Ditto. + +2000-10-10 Jesper Skov <jskov@redhat.com> + + * cdl/hal_sh_edk7708.cdl: Fix legal OCC ranges. + +2000-09-26 Jesper Skov <jskov@redhat.com> + + * include/platform.inc: Use calculated FRQCR init value. + + * cdl/hal_sh_edk7708.cdl: Updated clock options. + +2000-07-07 Jesper Skov <jskov@redhat.com> + + * cdl/hal_sh_edk7708.cdl: Require sub-variant package. + +2000-06-29 Jesper Skov <jskov@redhat.com> + + * src/hal_diag.c: serial driver API changes. + +2000-06-28 Jesper Skov <jskov@redhat.com> + + * src/hal_diag.c: Include hal_if file. + +2000-06-28 Jesper Skov <jskov@redhat.com> + + * src/plf_misc.c: + * src/hal_diag.c: + * src/plf_stub.c: [deleted] + * include/pkgconf/mlt_sh_edk7708_ram.h: + * include/pkgconf/mlt_sh_edk7708_ram.ldi: + * include/pkgconf/mlt_sh_edk7708_ram.mlt: + * include/pkgconf/mlt_sh_edk7708_rom.h: + * include/pkgconf/mlt_sh_edk7708_rom.ldi: + * include/pkgconf/mlt_sh_edk7708_rom.mlt: + * include/pkgconf/mlt_sh_edk7708_romram.h: + * include/pkgconf/mlt_sh_edk7708_romram.ldi: + * include/pkgconf/mlt_sh_edk7708_romram.mlt: + * include/plf_stub.h: + * include/hal_diag.h: + * cdl/hal_sh_edk7708.cdl: + Changed to use virtual vector table. + +1999-06-19 John Dallaway <jld@redhat.com> + + * cdl/hal_sh_edk7708.cdl: Tidy display strings. + +2000-04-12 Jesper Skov <jskov@redhat.com> + + * src/hal_diag.c: Output text raw if configuration requires it. + + * include/platform.inc: + * src/edk.S: [deleted] + * cdl/hal_sh_edk7708.cdl: + Hardware init code moved to platform.inc in order to allow ROMRAM + startup. + + * include/pkgconf/mlt_sh_edk7708_romram.h: + * include/pkgconf/mlt_sh_edk7708_romram.mlt: + * include/pkgconf/mlt_sh_edk7708_romram.ldi: + * cdl/hal_sh_edk7708.cdl: + Add ROMRAM startup option. + +2000-04-06 Jonathan Larmour <jlarmour@redhat.co.uk> + + * cdl/hal_sh_edk7708.cdl: Use -g now that toolchains work with that + (and in fact new toolchains no longer work with -ggdb) + +2000-04-06 Jesper Skov <jskov@redhat.com> + + * cdl/hal_sh_edk7708.cdl: Define vsr base location. + +2000-04-04 Jesper Skov <jskov@redhat.com> + + * src/hal_diag.c (hal_diag_write_char): Add GDB critical IO region + handling. + +2000-03-20 Jesper Skov <jskov@redhat.com> + + * cdl/hal_sh_edk7708.cdl: Added board speed variable. + +2000-03-09 Jesper Skov <jskov@redhat.com> + + * src/hal_diag.c: Fix compiler warning. + +2000-02-28 Jesper Skov <jskov@redhat.com> + + * include/platform.inc: Use sh_offsets instead of C header. + +2000-02-18 Jonathan Larmour <jlarmour@redhat.co.uk> + + * cdl/hal_sh_edk7708.cdl (CYGBLD_BUILD_GDB_STUBS): When + building stubs, define every dependency required here rather than + in the template + +2000-02-17 Jesper Skov <jskov@redhat.com> + + * cdl/hal_sh_edk7708.cdl: + Go back to -ggdb. -gstabs don't provide enough info for + source-level debugging. + + * include/pkgconf/mlt_sh_edk7708_rom.h: + * include/pkgconf/mlt_sh_edk7708_rom.ldi: + * include/pkgconf/mlt_sh_edk7708_rom.mlt: + * include/pkgconf/mlt_sh_edk7708_ram.h: + * include/pkgconf/mlt_sh_edk7708_ram.ldi: + * include/pkgconf/mlt_sh_edk7708_ram.mlt: + Don't use . assignment due to tools problem. + +2000-02-16 Jesper Skov <jskov@redhat.com> + + * cdl/hal_sh_edk7708.cdl: Added LE support. + +2000-02-15 Jesper Skov <jskov@redhat.com> + + * misc/STUBS_config: + * include/pkgconf/mlt_sh_edk7708_rom.ldi: + * include/pkgconf/mlt_sh_edk7708_rom.mlt: + * include/pkgconf/mlt_sh_edk7708_ram.h: + * include/pkgconf/mlt_sh_edk7708_ram.ldi: + * include/pkgconf/mlt_sh_edk7708_ram.mlt: + Updated for new stubs scheme. + + * cdl/hal_sh_edk7708.cdl: Removed stubs startup. + Use -gstabs instead of -ggdb to work around problem with GDB. + +2000-02-10 Jesper Skov <jskov@redhat.com> + + * include/plf_stub.h: + HAL_STUB_PLATFORM_STUBS_INIT->HAL_STUB_PLATFORM_INIT + +2000-02-07 Jesper Skov <jskov@redhat.com> + + * cdl/hal_sh_edk7708.cdl: use cpu flags when linking. + +2000-02-03 Jesper Skov <jskov@redhat.com> + + * cdl/hal_sh_edk7708.cdl: Implements stubs. + +2000-01-27 Jesper Skov <jskov@redhat.com> + + * cdl/hal_sh_edk7708.cdl: Moved part of stubs build rule to + common HAL. Changed description. + +2000-01-26 Jesper Skov <jskov@redhat.com> + + * cdl/hal_sh_edk7708.cdl: Fix display string. + +2000-01-24 Jesper Skov <jskov@cygnus.co.uk> + + * cdl/hal_sh_edk7708.cdl: Add stubs build rule. + * include/pkgconf/mlt_sh_edk7708_ram.ldi: + * include/pkgconf/mlt_sh_edk7708_ram.h: + * include/pkgconf/mlt_sh_edk7708_ram.mlt: + * include/pkgconf/mlt_sh_edk7708_stubs.ldi: + * include/pkgconf/mlt_sh_edk7708_stubs.h: + * include/pkgconf/mlt_sh_edk7708_stubs.mlt: + Give stub more RAM. + +2000-01-24 John Dallaway <jld@cygnus.co.uk> + + * cdl/*.cdl: + + Remove obsolete option CYGTST_TESTING_IDENTIFIER. + +2000-01-19 Hugo Tyson <hmt@cygnus.co.uk> + + * cdl/*.cdl: Add descriptions to a number of options &c which were + lacking same, also tidied up other typos as noticed en passant. + +2000-01-18 Jesper Skov <jskov@cygnus.co.uk> + CR 902066 + * include/pkgconf/mlt_sh_edk7708_ram.mlt: + * include/pkgconf/mlt_sh_edk7708_ram.h: + * include/pkgconf/mlt_sh_edk7708_ram.ldi: + Correct RAM size. + +1999-12-21 Jonathan Larmour <jlarmour@cygnus.co.uk> + + * src/plf_misc.c (cyg_hal_user_break): Rename + CYG_HAL_USE_ROM_MONITOR_GDB_STUBS -> CYGSEM_HAL_USE_ROM_MONITOR_GDB_stubs + + * cdl/hal_sh_edk7708.cdl: Don't need to define CYG_HAL_SH_SH7708 any + more + Add new platform-specific CYGSEM_HAL_USE_ROM_MONITOR option to + control ROM monitor support + +1999-12-20 Gary Thomas <gthomas@cygnus.co.uk> + + * cdl/hal_sh_edk7708.cdl: Add -Wl for linker options. + +1999-11-25 Gary Thomas <gthomas@cygnus.co.uk> + + * include/pkgconf/mlt_sh_edk7708_stubs.h: + * include/pkgconf/mlt_sh_edk7708_rom.h: + * include/pkgconf/mlt_sh_edk7708_ram.h: New file(s). + +1999-11-02 Jesper Skov <jskov@cygnus.co.uk> + + * cdl/hal_sh_edk7708.cdl: Use define_proc for CPU define. + +1999-11-01 Jesper Skov <jskov@cygnus.co.uk> + + * cdl/hal_sh_edk7708.cdl: Use define_proc for const header defs. + +1999-10-29 Jesper Skov <jskov@cygnus.co.uk> + + * cdl/hal_sh_edk7708.cdl: Added. + +1999-10-13 Jesper Skov <jskov@cygnus.co.uk> + + * src/hal_diag.c (hal_diag_write_char): + * src/plf_misc.c: + * src/PKGconf.mak (COMPILE): + Added user breakpoint handling. + +1999-09-02 Jesper Skov <jskov@cygnus.co.uk> + + * misc/STUBS_config: Also disable kernel support in HAL. + +1999-08-17 Jesper Skov <jskov@cygnus.co.uk> + + * misc/STUBS_config: Added. + +1999-06-18 Jesper Skov <jskov@cygnus.co.uk> + + * include/pkgconf/hal_sh_edk7708.h: Consistent EDK7708 naming. + +1999-06-01 Jesper Skov <jskov@cygnus.co.uk> + + * src/hal_diag.c (hal_diag_write_char): Don't look for 0x03 + chars. It doesn't work well. Better the dedicated magic handles + C-c. + + * src/edk.S: Cleaned up memory controller setup. + +1999-05-31 Jesper Skov <jskov@cygnus.co.uk> + + * include/pkgconf/hal_sh_edk7708.h: Removed FIX ME. + + * src/edk.S: Fixed delay-slot problem. + +1999-05-28 Jesper Skov <jskov@cygnus.co.uk> + + * include/pkgconf/hal_sh_edk7708.h: Fixed platform name. + + * include/pkgconf/mlt_sh_edk7708_rom.ldi: + * include/pkgconf/mlt_sh_edk7708_rom.mlt: + * include/pkgconf/mlt_sh_edk7708_stubs.ldi: + * include/pkgconf/mlt_sh_edk7708_stubs.mlt: + * include/pkgconf/mlt_sh_edk7708_ram.ldi: + * include/pkgconf/mlt_sh_edk7708_ram.mlt: + Fixed memory layout and generated MLT files. + +1999-05-28 Jesper Skov <jskov@cygnus.co.uk> + + * include/pkgconf/hal_sh_edk.h: [deleted] + * include/pkgconf/mlt_sh_edk_ram.ldi: [deleted] + * include/pkgconf/mlt_sh_edk_ram.mlt: [deleted] + * include/pkgconf/mlt_sh_edk_rom.ldi: [deleted] + * include/pkgconf/mlt_sh_edk_stubs.ldi: [deleted] + * include/pkgconf/hal_sh_edk7708.h: [added] + * include/pkgconf/mlt_sh_edk7708_ram.ldi: [added] + * include/pkgconf/mlt_sh_edk7708_ram.mlt: [added] + * include/pkgconf/mlt_sh_edk7708_rom.ldi: [added] + * include/pkgconf/mlt_sh_edk7708_rom.mlt: [added] + * include/pkgconf/mlt_sh_edk7708_stubs.ldi:[added] + * include/pkgconf/mlt_sh_edk7708_stubs.mlt:[added] + * src/PKGconf.mak: + Renamed SH platform package to edk7708. + +1999-05-21 Jesper Skov <jskov@cygnus.co.uk> + + * include/pkgconf/hal_sh_edk.h (CYGNUM_HAL_RTC_PERIOD): The timer + is running at 1/4 of the peripheral clock. + + * include/plf_stub.h: Added RESET code. + + * include/pkgconf/hal_sh_edk.h: Added RTC data for the edk board. + +1999-05-20 John Dallaway <jld@cygnus.co.uk> + + * include/pkgconf/mlt_sh_edk_ram.mlt: Working MLT-generated + version. + +1999-05-20 Jesper Skov <jskov@cygnus.co.uk> + + * Moved files to CVS trunk. + +1999-05-19 Jesper Skov <jskov@cygnus.co.uk> + + * src/edk.S (_hal_hardware_init): Fix a few mistakes. + + * include/plf_stub.h: Enable led in stub init. + + * include/pkgconf/mlt_sh_edk_stubs.ldi: + * include/pkgconf/mlt_sh_edk_rom.ldi: + Added. + Moved RAM region to the end of the chunk and made it bigger. + + * src/edk.S (_hal_hardware_init): Added Bus State Controller + initialization. + +1999-05-19 Jesper Skov <jskov@cygnus.co.uk> + + * Most things working now. Will start keeping track of changes. + +1999-04-22 Jesper Skov <jskov@lassi.cygnus.co.uk> + + * Set up directory structure. + +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//===========================================================================
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/edk7708/current/cdl/hal_sh_edk7708.cdl @@ -0,0 +1,312 @@ +# ==================================================================== +# +# hal_sh_edk7708.cdl +# +# EDK7708 board HAL package configuration data +# +# ==================================================================== +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): jskov +# Original data: jskov +# Contributors: +# Date: 1999-10-29 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_HAL_SH_EDK7708 { + display "Hitachi EDK/SH7708 board" + parent CYGPKG_HAL_SH + requires CYGPKG_HAL_SH_7708 + define_header hal_sh_edk7708.h + include_dir cyg/hal + description " + The edk HAL package provides the support needed to run + eCos on a Hitachi SH3 EDK7708 board." + + compile hal_diag.c plf_misc.c + + implements CYGINT_HAL_DEBUG_GDB_STUBS + implements CYGINT_HAL_DEBUG_GDB_STUBS_BREAK + implements CYGINT_HAL_VIRTUAL_VECTOR_SUPPORT + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_TARGET_H <pkgconf/hal_sh.h>" + puts $::cdl_system_header "#define CYGBLD_HAL_PLATFORM_H <pkgconf/hal_sh_edk7708.h>" + + puts $::cdl_header "#define CYGNUM_HAL_SH_SH3_SCI_PORTS 1" + puts $::cdl_header "#define CYGHWR_HAL_VSR_TABLE 0x08000000" + puts $::cdl_header "#define CYGHWR_HAL_VECTOR_TABLE 0x08000100" + } + + cdl_component CYG_HAL_STARTUP { + display "Startup type" + flavor data + legal_values {"RAM" "ROM" "ROMRAM"} + default_value {"RAM"} + no_define + define -file system.h CYG_HAL_STARTUP + description " + When targetting the EDK7708 board it is possible to build + the system for either RAM bootstrap or ROM bootstrap. + RAM bootstrap generally requires that the board + is equipped with ROMs containing a suitable ROM monitor or + equivalent software that allows GDB to download the eCos + application on to the board. The ROM bootstrap typically + requires that the eCos application be blown into EPROMs or + equivalent technology. ROMRAM bootstrap is similar to ROM + bootstrap, but everything is copied to RAM before execution + starts thus improving performace, but at the cost of an + increased RAM footprint." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { + display "Number of communication channels on the board" + flavor data + calculated 1 + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { + display "Debug serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The EDK/7708 board has only one serial port. This option + chooses which port will be used to connect to a host + running GDB." + } + + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL { + display "Diagnostic serial port" + flavor data + legal_values 0 to CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS-1 + default_value 0 + description " + The EDK/7708 board has only one serial port. This option + chooses which port will be used for diagnostic output." + } + + cdl_component CYGHWR_HAL_SH_PLF_CLOCK_SETTINGS { + display "SH on-chip platform clock controls" + description " + The various clocks used by the system are derived from + these options." + flavor none + no_define + + cdl_option CYGHWR_HAL_SH_OOC_XTAL { + display "SH clock crystal" + flavor data + legal_values 8000000 to 50000000 + default_value 15000000 + no_define + description " + This option specifies the frequency of the crystal all + other clocks are derived from." + } + + cdl_option CYGHWR_HAL_SH_OOC_PLL_1 { + display "SH clock PLL circuit 1" + flavor data + default_value 1 + legal_values { 0 1 2 4 } + description " + This selects the multiplication factor provided by + PLL1. If PLL1 is disabled via CAP1, this option should + be set to zero." + } + + cdl_option CYGHWR_HAL_SH_OOC_PLL_2 { + display "SH clock PLL circuit 2" + flavor data + default_value 4 + legal_values { 0 1 4 } + no_define + description " + This selects the multiplication factor provided by + PLL2. If PLL2 is disabled via CAP2, this option should + be set to zero." + } + + cdl_option CYGHWR_HAL_SH_OOC_DIVIDER_1 { + display "SH clock divider 1" + flavor data + default_value 1 + legal_values { 1 2 3 4 } + description " + This divider option affects the CPU core clock." + } + + cdl_option CYGHWR_HAL_SH_OOC_DIVIDER_2 { + display "SH clock divider 2" + flavor data + default_value 4 + legal_values { 1 2 3 4 } + description " + This divider option affects the peripheral clock." + } + + cdl_option CYGHWR_HAL_SH_OOC_CLOCK_MODE { + display "SH clock mode" + flavor data + default_value 2 + legal_values { 0 1 2 3 4 7 } + description " + This option must mirror the clock mode hardwired on + the MD0-MD2 pins of the CPU in order to correctly + initialize the FRQCR register." + } + } + + cdl_component CYGBLD_GLOBAL_OPTIONS { + display "Global build options" + flavor none + parent CYGPKG_NONE + no_define + description " + Global build options including control over + compiler flags, linker flags and choice of toolchain." + + + cdl_option CYGBLD_GLOBAL_COMMAND_PREFIX { + display "Global command prefix" + flavor data + no_define + default_value { "sh-elf" } + description " + This option specifies the command prefix used when + invoking the build tools." + } + + cdl_option CYGBLD_GLOBAL_CFLAGS { + display "Global compiler flags" + flavor data + no_define + default_value { CYGHWR_HAL_SH_BIGENDIAN ? "-mb -m3 -Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions -fvtable-gc -finit-priority" : "-ml -m3 -Wall -Wpointer-arith -Wstrict-prototypes -Winline -Wundef -Woverloaded-virtual -g -O2 -ffunction-sections -fdata-sections -fno-rtti -fno-exceptions -fvtable-gc -finit-priority" } + description " + This option controls the global compiler flags which + are used to compile all packages by + default. Individual packages may define + options which override these global flags." + } + + cdl_option CYGBLD_GLOBAL_LDFLAGS { + display "Global linker flags" + flavor data + no_define + default_value { CYGHWR_HAL_SH_BIGENDIAN ? "-mb -m3 -nostdlib -Wl,--gc-sections -Wl,-static" : "-ml -m3 -nostdlib -Wl,--gc-sections -Wl,-static" } + description " + This option controls the global linker flags. Individual + packages may define options which override these global flags." + } + + cdl_option CYGBLD_BUILD_GDB_STUBS { + display "Build GDB stub ROM image" + default_value 0 + requires { CYG_HAL_STARTUP == "ROM" } + requires CYGSEM_HAL_ROM_MONITOR + requires CYGBLD_BUILD_COMMON_GDB_STUBS + requires CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + requires CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT + requires CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT + requires ! CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT + requires ! CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM + no_define + description " + This option enables the building of the GDB stubs for the + board. The common HAL controls takes care of most of the + build process, but the final conversion from ELF image to + binary data is handled by the platform CDL, allowing + relocation of the data if necessary." + + make -priority 320 { + <PREFIX>/bin/gdb_module.bin : <PREFIX>/bin/gdb_module.img + $(OBJCOPY) -O binary $< $@ + } + } + } + + cdl_component CYGHWR_MEMORY_LAYOUT { + display "Memory layout" + flavor data + no_define + calculated { CYG_HAL_STARTUP == "RAM" ? "sh_edk7708_ram" : \ + CYG_HAL_STARTUP == "ROM" ? "sh_edk7708_rom" : \ + "sh_edk7708_romram" } + + cdl_option CYGHWR_MEMORY_LAYOUT_LDI { + display "Memory layout linker script fragment" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_LDI + calculated { CYG_HAL_STARTUP == "RAM" ? "<pkgconf/mlt_sh_edk7708_ram.ldi>" : \ + CYG_HAL_STARTUP == "ROM" ? "<pkgconf/mlt_sh_edk7708_rom.ldi>" : \ + "<pkgconf/mlt_sh_edk7708_romram.ldi>" } + } + + cdl_option CYGHWR_MEMORY_LAYOUT_H { + display "Memory layout header file" + flavor data + no_define + define -file system.h CYGHWR_MEMORY_LAYOUT_H + calculated { CYG_HAL_STARTUP == "RAM" ? "<pkgconf/mlt_sh_edk7708_ram.h>" : \ + CYG_HAL_STARTUP == "ROM" ? "<pkgconf/mlt_sh_edk7708_rom.h>" : \ + "<pkgconf/mlt_sh_edk7708_romram.h>" } + } + } + + cdl_option CYGSEM_HAL_USE_ROM_MONITOR { + display "Work with a ROM monitor" + flavor booldata + legal_values { "GDB_stubs" } + default_value { CYG_HAL_STARTUP == "RAM" ? "GDB_stubs" : 0 } + requires { CYG_HAL_STARTUP == "RAM" } + parent CYGPKG_HAL_ROM_MONITOR + description " + Support can be enabled for boot ROMs or ROM monitors which contain + GDB stubs. This support changes various eCos semantics such as + the encoding of diagnostic output, and the overriding of hardware + interrupt vectors." + } + + cdl_option CYGSEM_HAL_ROM_MONITOR { + display "Behave as a ROM monitor" + flavor bool + default_value 0 + parent CYGPKG_HAL_ROM_MONITOR + requires { CYG_HAL_STARTUP == "ROM" } + description " + Enable this option if this program is to be used as a ROM monitor, + i.e. applications will be loaded into RAM on the board, and this + ROM monitor may process exceptions or interrupts generated from the + application. This enables features such as utilizing a separate + interrupt stack when exceptions are generated." + } +}
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/edk7708/current/include/hal_diag.h @@ -0,0 +1,88 @@ +#ifndef CYGONCE_HAL_HAL_DIAG_H +#define CYGONCE_HAL_HAL_DIAG_H + +//============================================================================= +// +// hal_diag.h +// +// HAL Support for Kernel Diagnostic Routines +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 1999-04-24 +// Purpose: HAL Support for Kernel Diagnostic Routines +// Description: Diagnostic routines for use during kernel development. +// Usage: #include <cyg/hal/hal_diag.h> +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> + +#include <cyg/infra/cyg_type.h> + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) + +#include <cyg/hal/hal_if.h> + +#define HAL_DIAG_INIT() hal_if_diag_init() +#define HAL_DIAG_WRITE_CHAR(_c_) hal_if_diag_write_char(_c_) +#define HAL_DIAG_READ_CHAR(_c_) hal_if_diag_read_char(&_c_) + +#else // everything by steam + +//----------------------------------------------------------------------------- +// functions implemented in hal_diag.c + +externC void hal_diag_init(void); + +externC void hal_diag_write_char(char c); + +externC void hal_diag_read_char(char *c); + +//----------------------------------------------------------------------------- + +#define HAL_DIAG_INIT() hal_diag_init() + +#define HAL_DIAG_WRITE_CHAR(_c_) hal_diag_write_char(_c_) + +#define HAL_DIAG_READ_CHAR(_c_) hal_diag_read_char(&_c_) + +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + +//----------------------------------------------------------------------------- +// Simple LED control. +externC void hal_diag_led_on( void ); +externC void hal_diag_led_off( void ); + +//----------------------------------------------------------------------------- +// end of hal_diag.h +#endif // CYGONCE_HAL_HAL_DIAG_H
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/edk7708/current/include/pkgconf/mlt_sh_edk7708_ram.h @@ -0,0 +1,17 @@ +// eCos memory layout - Fri Oct 20 09:50:36 2000 + +// This is a generated file - do not edit + +#ifndef __ASSEMBLER__ +#include <cyg/infra/cyg_type.h> +#include <stddef.h> + +#endif +#define CYGMEM_REGION_ram (0x8008000) +#define CYGMEM_REGION_ram_SIZE (0xf8000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x8100000 - (size_t) CYG_LABEL_NAME (__heap1))
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/edk7708/current/include/pkgconf/mlt_sh_edk7708_ram.ldi @@ -0,0 +1,26 @@ +// eCos memory layout - Fri Oct 20 09:50:36 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> + +MEMORY +{ + ram : ORIGIN = 0x8008000, LENGTH = 0xf8000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_vectors (ram, 0x8008000, LMA_EQ_VMA) + SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA) + SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +}
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/edk7708/current/include/pkgconf/mlt_sh_edk7708_ram.mlt @@ -0,0 +1,12 @@ +version 0 +region ram 8008000 f8000 0 ! +section vectors 0 1 0 1 1 1 1 1 8008000 8008000 text text ! +section text 0 4 0 1 0 1 0 1 fini fini ! +section fini 0 4 0 1 0 1 0 1 rodata1 rodata1 ! +section rodata1 0 8 0 1 0 1 0 1 rodata rodata ! +section rodata 0 8 0 1 0 1 0 1 fixup fixup ! +section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table ! +section gcc_except_table 0 1 0 1 0 1 0 1 data data ! +section data 0 8 0 1 0 1 0 1 bss bss ! +section bss 0 10 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/edk7708/current/include/pkgconf/mlt_sh_edk7708_rom.h @@ -0,0 +1,20 @@ +// eCos memory layout - Fri Oct 20 09:51:04 2000 + +// This is a generated file - do not edit + +#ifndef __ASSEMBLER__ +#include <cyg/infra/cyg_type.h> +#include <stddef.h> + +#endif +#define CYGMEM_REGION_ram (0x8000200) +#define CYGMEM_REGION_ram_SIZE (0xffe00) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0xa0000000) +#define CYGMEM_REGION_rom_SIZE (0x20000) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x8100000 - (size_t) CYG_LABEL_NAME (__heap1))
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/edk7708/current/include/pkgconf/mlt_sh_edk7708_rom.ldi @@ -0,0 +1,27 @@ +// eCos memory layout - Fri Oct 20 09:51:04 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> + +MEMORY +{ + ram : ORIGIN = 0x8000200, LENGTH = 0xffe00 + rom : ORIGIN = 0xa0000000, LENGTH = 0x20000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_vectors (rom, 0xa0000000, LMA_EQ_VMA) + SECTION_text (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_rodata1 (rom, ALIGN (0x8), LMA_EQ_VMA) + SECTION_rodata (rom, ALIGN (0x8), LMA_EQ_VMA) + SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) + SECTION_gcc_except_table (rom, ALIGN (0x1), LMA_EQ_VMA) + SECTION_data (ram, 0x8000200, FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +}
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/edk7708/current/include/pkgconf/mlt_sh_edk7708_rom.mlt @@ -0,0 +1,13 @@ +version 0 +region ram 8000200 ffe00 0 ! +region rom a0000000 20000 1 ! +section data 0 1 1 1 1 1 0 0 8000200 bss ! +section bss 0 10 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 ! +section vectors 0 1 0 1 1 1 1 1 a0000000 a0000000 text text ! +section text 0 4 0 1 0 1 0 1 fini fini ! +section fini 0 4 0 1 0 1 0 1 rodata1 rodata1 ! +section rodata1 0 8 0 1 0 1 0 1 rodata rodata ! +section rodata 0 8 0 1 0 1 0 1 fixup fixup ! +section fixup 0 4 0 1 0 1 0 1 gcc_except_table gcc_except_table ! +section gcc_except_table 0 1 0 1 0 0 0 1 data !
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/edk7708/current/include/pkgconf/mlt_sh_edk7708_romram.h @@ -0,0 +1,20 @@ +// eCos memory layout - Fri Oct 20 09:51:30 2000 + +// This is a generated file - do not edit + +#ifndef __ASSEMBLER__ +#include <cyg/infra/cyg_type.h> +#include <stddef.h> + +#endif +#define CYGMEM_REGION_ram (0x8000200) +#define CYGMEM_REGION_ram_SIZE (0xffe00) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#define CYGMEM_REGION_rom (0xa0000000) +#define CYGMEM_REGION_rom_SIZE (0x20000) +#define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x8100000 - (size_t) CYG_LABEL_NAME (__heap1))
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/edk7708/current/include/pkgconf/mlt_sh_edk7708_romram.ldi @@ -0,0 +1,27 @@ +// eCos memory layout - Fri Oct 20 09:51:30 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> + +MEMORY +{ + ram : ORIGIN = 0x8000200, LENGTH = 0xffe00 + rom : ORIGIN = 0xa0000000, LENGTH = 0x20000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_vectors (ram, 0x8000200, AT (0xa0000000)) + SECTION_text (ram, ALIGN (0x10), FOLLOWING (.vectors)) + SECTION_fini (ram, ALIGN (0x10), FOLLOWING (.text)) + SECTION_rodata1 (ram, ALIGN (0x10), FOLLOWING (.fini)) + SECTION_rodata (ram, ALIGN (0x10), FOLLOWING (.rodata1)) + SECTION_fixup (ram, ALIGN (0x10), FOLLOWING (.rodata)) + SECTION_gcc_except_table (ram, ALIGN (0x10), FOLLOWING (.fixup)) + SECTION_data (ram, ALIGN (0x10), FOLLOWING (.gcc_except_table)) + SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +}
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/edk7708/current/include/pkgconf/mlt_sh_edk7708_romram.mlt @@ -0,0 +1,13 @@ +version 0 +region ram 8000200 ffe00 0 ! +region rom a0000000 20000 1 ! +section vectors 0 10 1 1 1 1 1 1 8000200 a0000000 text text ! +section text 0 10 1 1 0 1 0 1 fini fini ! +section fini 0 10 1 1 0 1 0 1 rodata1 rodata1 ! +section rodata1 0 10 1 1 0 1 0 1 rodata rodata ! +section rodata 0 10 1 1 0 1 0 1 fixup fixup ! +section fixup 0 10 1 1 0 1 0 1 gcc_except_table gcc_except_table ! +section gcc_except_table 0 10 1 1 0 1 0 1 data data ! +section data 0 10 1 1 0 1 0 0 bss ! +section bss 0 10 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/edk7708/current/include/platform.inc @@ -0,0 +1,196 @@ +#ifndef CYGONCE_HAL_PLATFORM_INC +#define CYGONCE_HAL_PLATFORM_INC +##============================================================================= +## +## platform.inc +## +## SH/EDK7708 board assembler header file +## +##============================================================================= +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.0 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://sourceware.cygnus.com/ecos +# +# Software distributed under the License is distributed on an +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +##============================================================================= +#######DESCRIPTIONBEGIN#### +## +## Author(s): jskov +## Contributors:jskov +## Date: 2000-02-02 +## Purpose: SH/EDK7708 board definitions. +## Description: This file contains various definitions and macros that are +## useful for writing assembly code for the SH/EDK7708 board. +## Usage: +## #include <cyg/hal/platform.inc> +## ... +## +## +######DESCRIPTIONEND#### +## +##============================================================================= + +#include <pkgconf/hal.h> + +#include <cyg/hal/sh_regs.h> +#include <cyg/hal/sh_offsets.inc> + +#------------------------------------------------------------------------------ +# Hardware initialization. + + .macro hal_hardware_init + // Set up the Bus State Controller + mova BSC_settings_table,r0 + mov r0,r3 +1: mov.w @r3+,r0 // Address (or zero) + cmp/eq #0,r0 + bt 2f + mov.w @r3+,r1 // data + bra 1b + mov.w r1,@r0 // delay slot + + .align 2 +BSC_settings_table: + # These are the settings set by the Hitachi ROM Monitor. + + .word CYGARC_REG_FRQCR + .word CYGARC_REG_FRQCR_INIT + + # BCR2: Bus size of areas 1-6 to 32 bits + .word CYGARC_REG_BCR2 + .word 0x3ffc + # BCR1: Areas 2 and 3 are SDRAM + .word CYGARC_REG_BCR1 + .word 0x080c + # BCR2: Bus size of areas 1-6 to 32 bits [note: second write!] + .word CYGARC_REG_BCR2 + .word 0x3ffc + # WCR1: 3 wait-state cycles inserted for all areas + .word CYGARC_REG_WCR1 + .word 0x3fff + # WCR2: extra wait states and full pitch for burst + .word CYGARC_REG_WCR2 + .word 0xffd7 + # MCR: RAS/CAS & burst timing area 2/3 + .word CYGARC_REG_MCR + .word 0x963c + # RTCNT: refresh counter (needs a5 in top byte to accept write) + .word CYGARC_REG_RTCNT + .word (0xa500 | 0x0000) + # RTCOR: refresh time constant (needs a5 in top byte to accept write) + .word CYGARC_REG_RTCOR + .word (0xa500 | 0x003b) + # RFCR: refresh count register (needs a4 in top byte to accept write) + .word CYGARC_REG_RFCR + .word (0xa400 | 0x0000) + # RTCSR: refresh timer control (needs a5 in top byte to accept write) + .word CYGARC_REG_RTCSR + .word (0xa500 | 0x0008) + + # Set SDMR to 0x220 + .word 0xd880 + .word 0 + + # Table end + .word 0 + + .align 2 +2: + .endm + +#------------------------------------------------------------------------------ +# Monitor initialization. + +#ifndef CYGPKG_HAL_SH_MON_DEFINED + +#if !defined(CYG_HAL_STARTUP_RAM) || \ + ( defined(CYG_HAL_STARTUP_RAM) && \ + !defined(CYGSEM_HAL_USE_ROM_MONITOR)) + + # If we are not starting up from RAM, or we are starting in + # RAM and NOT using a ROM monitor, initialize the VSR table. + + .macro hal_mon_init + mov.l $_hal_vsr_table_p,r3 + # Write exception vectors + mov.l $_cyg_hal_default_exception_vsr_p,r4 + mov #CYGNUM_HAL_VSR_EXCEPTION_COUNT,r5 +1: mov.l r4,@r3 + add #4,r3 + dt r5 + bf 1b + # Write interrupt vector + mov.l $_cyg_hal_default_interrupt_vsr_p,r4 + mov.l r4,@r3 + bra 2f + nop + .align 2 + +$_cyg_hal_default_exception_vsr_p: + .long _cyg_hal_default_exception_vsr +$_cyg_hal_default_interrupt_vsr_p: + .long _cyg_hal_default_interrupt_vsr + + .extern _hal_vsr_table +$_hal_vsr_table_p: + .long _hal_vsr_table + +2: + .endm + +#elif defined(CYG_HAL_STARTUP_RAM) && defined(CYGSEM_HAL_USE_ROM_MONITOR) + + # Initialize the VSR table entries + # We only take control of the interrupt vector, + # the rest are left to the ROM for now... + + .macro hal_mon_init + # Write interrupt vector + mov.l $_hal_vsr_table_p,r3 + mov.l $_cyg_hal_default_interrupt_vsr_p,r4 + mov.l r4,@r3 + bra 2f + nop + .align 2 + +$_cyg_hal_default_interrupt_vsr_p: + .long _cyg_hal_default_interrupt_vsr + + .extern _hal_vsr_table +$_hal_vsr_table_p: + .long _hal_vsr_table+CYGNUM_HAL_VECTOR_INTERRUPT*4 + +2: + .endm + +#else + + .macro hal_mon_init + .endm + +#endif + + +#define CYGPKG_HAL_SH_MON_DEFINED + +#endif // CYGPKG_HAL_SH_MON_DEFINED + +#endif // CYGONCE_HAL_PLATFORM_INC
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/edk7708/current/include/plf_cache.h @@ -0,0 +1,61 @@ +#ifndef CYGONCE_PLF_CACHE_H +#define CYGONCE_PLF_CACHE_H + +//============================================================================= +// +// plf_cache.h +// +// Platform specific cache control API +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-31 +// Purpose: Cache control API +// Description: The macros defined here provide the HAL APIs for handling +// cache control operations. +// Usage: +// #include <cyg/hal/plf_cache.h> +// ... +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> + +//============================================================================= + +// Nothing here at present. + +//----------------------------------------------------------------------------- +#endif // ifndef CYGONCE_PLF_CACHE_H +// End of plf_cache.h +
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/edk7708/current/include/plf_intr.h @@ -0,0 +1,60 @@ +#ifndef CYGONCE_HAL_PLF_INTR_H +#define CYGONCE_HAL_PLF_INTR_H + +//========================================================================== +// +// plf_intr.h +// +// Platform specific Interrupt and clock support +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors: jskov, +// Date: 2000-10-31 +// Purpose: Define Interrupt support +// Description: The macros defined here provide the HAL APIs for handling +// interrupts and the clock for the EDK board. +// Usage: +// #include <cyg/hal/plf_intr.h> +// ... +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <pkgconf/hal.h> + +//-------------------------------------------------------------------------- + +// No platform specific stuff at present. + +//-------------------------------------------------------------------------- +#endif // ifndef CYGONCE_HAL_PLF_INTR_H +// End of plf_intr.h
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/edk7708/current/include/plf_stub.h @@ -0,0 +1,90 @@ +#ifndef CYGONCE_HAL_PLF_STUB_H +#define CYGONCE_HAL_PLF_STUB_H + +//============================================================================= +// +// plf_stub.h +// +// Platform header for GDB stub support. +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 1999-05-18 +// Purpose: Platform HAL stub support for Hitachi/EDK boards. +// Usage: #include <cyg/hal/plf_stub.h> +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/system.h> +#include <pkgconf/hal.h> + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +#include <cyg/infra/cyg_type.h> // CYG_UNUSED_PARAM, externC + +#include <cyg/hal/sh_stub.h> // architecture stub support + +#include <cyg/hal/hal_diag.h> // hal_diag_led_on + +//---------------------------------------------------------------------------- +// Define some platform specific communication details. This is mostly +// handled by hal_if now, but we need to make sure the comms tables are +// properly initialized. + +externC void cyg_hal_plf_comms_init(void); + +#define HAL_STUB_PLATFORM_INIT_SERIAL() cyg_hal_plf_comms_init() + +#define HAL_STUB_PLATFORM_SET_BAUD_RATE(baud) CYG_UNUSED_PARAM(int, (baud)) +#define HAL_STUB_PLATFORM_INTERRUPTIBLE 0 + +//---------------------------------------------------------------------------- +// Stub initializer. +#ifdef CYGSEM_HAL_ROM_MONITOR +# define HAL_STUB_PLATFORM_INIT() hal_diag_led_on() +#else +# define HAL_STUB_PLATFORM_INIT() CYG_EMPTY_STATEMENT +#endif + +#endif // ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + +//---------------------------------------------------------------------------- +// Reset. +// Block interrupts and cause an exception. This forces a reset. +#define HAL_STUB_PLATFORM_RESET() \ + asm volatile ("ldc %0,sr;trapa #0x00;" : : "r" (CYGARC_REG_SR_BL)) + +#define HAL_STUB_PLATFORM_RESET_ENTRY 0xa0000000 + +//----------------------------------------------------------------------------- +#endif // CYGONCE_HAL_PLF_STUB_H +// End of plf_stub.h
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/edk7708/current/src/edk.S @@ -0,0 +1,117 @@ +##============================================================================= +## +## edk.S +## +## EDK board hardware setup +## +##============================================================================= +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +##============================================================================= +#######DESCRIPTIONBEGIN#### +## +## Author(s): jskov +## Contributors:jskov +## Date: 1999-05-03 +## Purpose: EDK7708 board hardware setup +## Description: This file contains any code needed to initialize the +## hardware on a Hitachi SH3 EDK7708 board. +## +######DESCRIPTIONEND#### +## +##============================================================================= + +#include <pkgconf/hal.h> +#include <cyg/hal/sh_regs.h> + + .globl _hal_hardware_init +_hal_hardware_init: + + // Set up the Bus State Controller + mov.l $BSC_settings_table,r3 +1: mov.w @r3+,r0 // Address (or zero) + cmp/eq #0,r0 + bt 2f + mov.w @r3+,r1 // data + bra 1b + mov.w r1,@r0 // delay slot + +2: + rts + nop + + .align 2 +$BSC_settings_table: + .long BSC_settings_table +BSC_settings_table: + # These are the settings set by the Hitachi ROM Monitor. + + # BCR2: Bus size of areas 1-6 to 32 bits + .word CYGARC_REG_BCR2 + .word 0x3ffc + # BCR1: Areas 2 and 3 are SDRAM + .word CYGARC_REG_BCR1 + .word 0x080c + # BCR2: Bus size of areas 1-6 to 32 bits [note: second write!] + .word CYGARC_REG_BCR2 + .word 0x3ffc + # WCR1: 3 wait-state cycles inserted for all areas + .word CYGARC_REG_WCR1 + .word 0x3fff + # WCR2: extra wait states and full pitch for burst + .word CYGARC_REG_WCR2 + .word 0xffd7 + # MCR: RAS/CAS & burst timing area 2/3 + .word CYGARC_REG_MCR + .word 0x963c +#if 0 + # DCR: RAS/CAS & burst timing area 2 + .word CYGARC_REG_DCR + .word 0x0000 + # PCR: PCMCIA disabled + .word CYGARC_REG_PCR + .word 0x0000 +#endif + # RTCNT: refresh counter (needs a5 in top byte to accept write) + .word CYGARC_REG_RTCNT + .word (0xa500 | 0x0000) + # RTCOR: refresh time constant (needs a5 in top byte to accept write) + .word CYGARC_REG_RTCOR + .word (0xa500 | 0x003b) + # RFCR: refresh count register (needs a4 in top byte to accept write) + .word CYGARC_REG_RFCR + .word (0xa400 | 0x0000) + # RTCSR: refresh timer control (needs a5 in top byte to accept write) + .word CYGARC_REG_RTCSR + .word (0xa500 | 0x0008) + + # Set SDMR to 0x220 + .word 0xd880 + .word 0 + + # Table end + .word 0 + +#------------------------------------------------------------------------------ +# end of edk.S
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/edk7708/current/src/hal_diag.c @@ -0,0 +1,219 @@ +//============================================================================= +// +// hal_diag.c +// +// HAL diagnostic output code +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg, jskov +// Contributors: nickg, jskov +// Date: 1999-03-23 +// Purpose: HAL diagnostic output +// Description: Implementations of HAL diagnostic output support. +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> + +#include <cyg/hal/hal_diag.h> // our header. + +#include <cyg/infra/cyg_type.h> // base types, externC +#include <cyg/hal/hal_io.h> // IO macros +#include <cyg/hal/hal_if.h> // Calling interface +#include <cyg/hal/hal_intr.h> // Interrupt macros +#include <cyg/hal/sh3_sci.h> // driver API +#include <cyg/hal/hal_misc.h> // Helper functions + +#define SCI_BASE ((cyg_uint8*)0xfffffe80) + +//----------------------------------------------------------------------------- + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \ + || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES) + +void +cyg_hal_plf_comms_init(void) +{ + static int initialized = 0; + + if (initialized) + return; + + initialized = 1; + + cyg_hal_plf_sci_init(0, 0, CYGNUM_HAL_INTERRUPT_SCI_RXI, SCI_BASE); +} + +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES + +//============================================================================= +// Led control +//============================================================================= +#define LED_ON 0x04000000 +#define LED_OFF 0x18000000 + +void +hal_diag_led_on( void ) +{ + HAL_WRITE_UINT8(LED_ON, 0); +} + +void +hal_diag_led_off( void ) +{ + HAL_WRITE_UINT8(LED_OFF, 0); +} + + +//============================================================================= +// Compatibility with older stubs +//============================================================================= + +#ifndef CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + +static channel_data_t channel = { (cyg_uint8*)SCI_BASE, 0, 0}; + +#if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) +#include <cyg/hal/hal_stub.h> // hal_output_gdb_string +#endif + +#if defined(CYGSEM_HAL_USE_ROM_MONITOR_GDB_stubs) + +#define CYG_HAL_DIAG_GDB + +#elif defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) + +#define CYG_HAL_DIAG_GDB + +#endif + +//----------------------------------------------------------------------------- + +void hal_diag_init(void) +{ + cyg_hal_plf_sci_init_channel(&channel); +} + +void +hal_diag_write_char_serial( char c ) +{ + cyg_hal_plf_sci_putc(&channel, c); +} + +void +hal_diag_read_char(char *c) +{ + *c = (char) cyg_hal_plf_sci_getc(&channel); +} + +// Packet function +void +hal_diag_write_char(char c) +{ +#ifdef CYG_HAL_DIAG_GDB + static char line[100]; + static int pos = 0; + + // No need to send CRs + if( c == '\r' ) return; + + line[pos++] = c; + + if( c == '\n' || pos == sizeof(line) ) + { + CYG_INTERRUPT_STATE old; + + // Disable interrupts. This prevents GDB trying to interrupt us + // while we are in the middle of sending a packet. The serial + // receive interrupt will be seen when we re-enable interrupts + // later. + +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + CYG_HAL_GDB_ENTER_CRITICAL_IO_REGION(old); +#else + HAL_DISABLE_INTERRUPTS(old); +#endif + + while(1) + { + char c1; + static char hex[] = "0123456789ABCDEF"; + cyg_uint8 csum = 0; + int i; + + cyg_hal_plf_sci_putc(&channel, '$'); + cyg_hal_plf_sci_putc(&channel, 'O'); + csum += 'O'; + for( i = 0; i < pos; i++ ) + { + char ch = line[i]; + char h = hex[(ch>>4)&0xF]; + char l = hex[ch&0xF]; + cyg_hal_plf_sci_putc(&channel, h); + cyg_hal_plf_sci_putc(&channel, l); + csum += h; + csum += l; + } + cyg_hal_plf_sci_putc(&channel, '#'); + cyg_hal_plf_sci_putc(&channel, hex[(csum>>4)&0xF]); + cyg_hal_plf_sci_putc(&channel, hex[csum&0xF]); + + // Wait for the ACK character '+' from GDB here and handle + // receiving a ^C instead. + c1 = (char) cyg_hal_plf_sci_getc(&channel); + + if( c1 == '+' ) + break; // a good acknowledge + + // Check for user break. + if( cyg_hal_is_break( &c1, 1 ) ) + cyg_hal_user_break( NULL ); + + // otherwise, loop round again + } + + pos = 0; + + // And re-enable interrupts +#ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS + CYG_HAL_GDB_LEAVE_CRITICAL_IO_REGION(old); +#else + HAL_RESTORE_INTERRUPTS(old); +#endif + } +#else // CYG_HAL_DIAG_GDB + cyg_hal_plf_sci_putc(&channel, c); +#endif +} +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG + +//----------------------------------------------------------------------------- +// End of hal_diag.c
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/edk7708/current/src/plf_misc.c @@ -0,0 +1,57 @@ +//========================================================================== +// +// plf_misc.c +// +// HAL platform miscellaneous functions +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors: jskov,nickg, jlarmour +// Date: 1999-10-13 +// Purpose: HAL miscellaneous functions +// Description: This file contains miscellaneous functions provided by the +// HAL. +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <pkgconf/hal.h> + +#include <cyg/hal/hal_if.h> // interfacing API + +//-------------------------------------------------------------------------- +void +hal_platform_init(void) +{ + hal_if_init(); +} + +//-------------------------------------------------------------------------- +// eof plf_misc.c
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/ChangeLog @@ -0,0 +1,35 @@ +2000-11-01 Jesper Skov <jskov@redhat.com> + + * Many changes to bring the Haruki's HAL split up to date. Also + split the register header file into many header files, one for + each CPU module. + +2000-08-15 Haruki Kashiwaya <kashiwaya@redhat.com> + + * Set up directory structure. + +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//===========================================================================
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/cdl/hal_sh_sh3.cdl @@ -0,0 +1,372 @@ +# ==================================================================== +# +# hal_sh_sh3.cdl +# +# SH3 variant HAL package configuration data +# +# ==================================================================== +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): jskov +# Original data: jskov +# Contributors: +# Date: 2000-10-30 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_HAL_SH_SH3 { + display "SH3 variant" + parent CYGPKG_HAL_SH + hardware + include_dir cyg/hal + define_header hal_sh_sh3.h + description " + The SH3 (SuperH 3) variant HAL package provides generic + support for SH3 variant CPUs." + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_VARIANT_H <pkgconf/hal_sh_sh3.h>" + } + + compile sh3_sci.c sh3_scif.c var_misc.c variant.S + + # The "-o file" is a workaround for CR100958 - without it the + # output file would end up in the source directory under CygWin. + # n.b. grep does not behave itself under win32 + make -priority 1 { + <PREFIX>/include/cyg/hal/sh3_offsets.inc : <PACKAGE>/src/var_mk_defs.c + $(CC) $(CFLAGS) $(INCLUDE_PATH) -Wp,-MD,sh3_offsets.tmp -o var_mk_defs.tmp -S $< + fgrep .equ var_mk_defs.tmp | sed s/#// > $@ + @echo $@ ": \\" > $(notdir $@).deps + @tail +2 sh3_offsets.tmp >> $(notdir $@).deps + @echo >> $(notdir $@).deps + @rm sh3_offsets.tmp var_mk_defs.tmp + } + + # CPU variant supported + cdl_option CYGPKG_HAL_SH_7707A { + display "SH 7707A microprocessor" + parent CYGPKG_HAL_SH_CPU + implements CYGINT_HAL_SH_VARIANT + implements CYGINT_HAL_SH_CPG_T2 + default_value 0 + no_define + define -file=system.h CYGPKG_HAL_SH_7707A + description " + The SH3 7707A microprocessor. This is an embedded part that in + addition to the SH3 processor core has built in peripherals + such as memory controllers, serial ports, LCD controller and + timers/counters." + define_proc { + puts $cdl_system_header "#define CYGBLD_HAL_CPU_MODULES_H <cyg/hal/mod_7707a.h>" + } + } + + cdl_option CYGPKG_HAL_SH_7708 { + display "SH 7708 microprocessor" + parent CYGPKG_HAL_SH_CPU + implements CYGINT_HAL_SH_VARIANT + implements CYGINT_HAL_SH_CPG_T1 + default_value 0 + no_define + define -file=system.h CYGPKG_HAL_SH_7708 + description " + The SH3 7708 microprocessor. This is an embedded part that in + addition to the SH3 processor core has built in peripherals + such as memory controllers, serial ports and + timers/counters." + define_proc { + puts $cdl_system_header "#define CYGBLD_HAL_CPU_MODULES_H <cyg/hal/mod_7708.h>" + } + } + + cdl_option CYGPKG_HAL_SH_7709A { + display "SH 7709A microprocessor" + parent CYGPKG_HAL_SH_CPU + implements CYGINT_HAL_SH_VARIANT + implements CYGINT_HAL_SH_CPG_T3 + implements CYGINT_HAL_SH_DMA_CHANNELS + implements CYGINT_HAL_SH_DMA_CHANNELS + implements CYGINT_HAL_SH_DMA_CHANNELS + implements CYGINT_HAL_SH_DMA_CHANNELS + default_value 0 + no_define + define -file=system.h CYGPKG_HAL_SH_7709A + description " + The SH3 7709A microprocessor. This is an embedded part that in + addition to the SH3 processor core has built in peripherals + such as memory controllers, DMA controllers, A/D and D/A + converters, serial ports and timers/counters." + define_proc { + puts $cdl_system_header "#define CYGBLD_HAL_CPU_MODULES_H <cyg/hal/mod_7709a.h>" + } + } + + cdl_option CYGPKG_HAL_SH_7729 { + display "SH 7729 microprocessor" + parent CYGPKG_HAL_SH_CPU + implements CYGINT_HAL_SH_VARIANT + implements CYGINT_HAL_SH_CPG_T3 + default_value 0 + no_define + define -file=system.h CYGPKG_HAL_SH_7729 + description " + The SH3 7729 microprocessor. This is an embedded part that in + addition to the SH3 processor core has built in peripherals + such as memory controllers, serial ports, and timers/counters, + and a DSP engine." + define_proc { + puts $cdl_system_header "#define CYGBLD_HAL_CPU_MODULES_H <cyg/hal/mod_7729.h>" + } + } + + cdl_component CYGHWR_HAL_SH_CLOCK_SETTINGS { + display "SH on-chip generic clock controls" + description " + The various clocks used by the system are controlled by + these options, some of which are derived from platform + settings." + flavor none + no_define + + cdl_interface CYGINT_HAL_SH_CPG_T1 { + display "Clock pulse generator type 1" + } + + cdl_interface CYGINT_HAL_SH_CPG_T2 { + display "Clock pulse generator type 2" + } + + cdl_interface CYGINT_HAL_SH_CPG_T3 { + display "Clock pulse generator type 3" + } + + + cdl_option CYGHWR_HAL_SH_TMU_PRESCALE_0 { + display "TMU counter 0 prescaling" + description " + The peripheral clock is driving the counter used for + the real-time clock, prescaled by this factor." + flavor data + legal_values { 4 16 64 256 } + default_value 4 + } + + + cdl_option CYGHWR_HAL_SH_CLOCK_CKIO { + display "CKIO clock" + no_define + flavor data + # CKIO is either XTAL or PLL2 output + calculated { CYGINT_HAL_SH_CPG_T1 ? ( + (CYGHWR_HAL_SH_OOC_CLOCK_MODE == 7) + ? (CYGHWR_HAL_SH_OOC_XTAL) + : CYGHWR_HAL_SH_PLL2_OUTPUT + ) + : CYGINT_HAL_SH_CPG_T2 ? ( + (CYGHWR_HAL_SH_OOC_CLOCK_MODE == 2) + ? (CYGHWR_HAL_SH_OOC_XTAL) + : CYGHWR_HAL_SH_PLL2_OUTPUT + ) + : CYGINT_HAL_SH_CPG_T3 ? ( + (CYGHWR_HAL_SH_OOC_CLOCK_MODE == 7) + ? (CYGHWR_HAL_SH_OOC_XTAL) + : CYGHWR_HAL_SH_PLL2_OUTPUT + ) + : 0 } + } + + cdl_option CYGHWR_HAL_SH_PLL1_OUTPUT { + display "The clock output from PLL1" + no_define + flavor data + calculated { CYGHWR_HAL_SH_CLOCK_CKIO * CYGHWR_HAL_SH_OOC_PLL_1 } + } + + cdl_option CYGHWR_HAL_SH_PLL2_OUTPUT { + display "The clock output from PLL2" + no_define + flavor data + calculated { CYGINT_HAL_SH_CPG_T1 ? ( + (CYGHWR_HAL_SH_OOC_XTAL * CYGHWR_HAL_SH_OOC_PLL_2) + ) + : CYGINT_HAL_SH_CPG_T2 ? ( + (CYGHWR_HAL_SH_OOC_CLOCK_MODE == 5) + ? (CYGHWR_HAL_SH_OOC_XTAL / 2) + : (CYGHWR_HAL_SH_OOC_CLOCK_MODE == 6) + ? (14745600) + : (CYGHWR_HAL_SH_OOC_CLOCK_MODE == 7) + ? (11075600) + : (CYGHWR_HAL_SH_OOC_XTAL * CYGHWR_HAL_SH_OOC_PLL_2) + ) + : CYGINT_HAL_SH_CPG_T3 ? ( + (CYGHWR_HAL_SH_OOC_XTAL * CYGHWR_HAL_SH_OOC_PLL_2) + ) + : 0 } + } + + + cdl_option CYGHWR_HAL_SH_DIVIDER1_INPUT { + display "The clock input to divider 1" + no_define + flavor data + # DIV1 input is either PLL2 output or PLL1 output + calculated { (CYGHWR_HAL_SH_OOC_PLL_1 == 0) + ? CYGHWR_HAL_SH_PLL2_OUTPUT + : CYGHWR_HAL_SH_PLL1_OUTPUT } + } + + cdl_option CYGHWR_HAL_SH_DIVIDER2_INPUT { + display "The clock input to divider 2" + no_define + flavor data + # DIV2 input is either PLL2 output or PLL1 output + calculated { CYGINT_HAL_SH_CPG_T1 ? ( + (CYGHWR_HAL_SH_OOC_CLOCK_MODE == 3 || CYGHWR_HAL_SH_OOC_CLOCK_MODE == 4) + ? CYGHWR_HAL_SH_PLL2_OUTPUT + : CYGHWR_HAL_SH_PLL1_OUTPUT + ) + : CYGINT_HAL_SH_CPG_T2 ? ( + (CYGHWR_HAL_SH_OOC_CLOCK_MODE <= 2) + ? CYGHWR_HAL_SH_PLL1_OUTPUT + : CYGHWR_HAL_SH_PLL2_OUTPUT + ) + : CYGINT_HAL_SH_CPG_T3 ? ( + (CYGHWR_HAL_SH_OOC_CLOCK_MODE == 3 || CYGHWR_HAL_SH_OOC_CLOCK_MODE == 4) + ? CYGHWR_HAL_SH_PLL2_OUTPUT + : CYGHWR_HAL_SH_PLL1_OUTPUT + ) + : 0 } + } + + cdl_option CYGHWR_HAL_SH_PROCESSOR_SPEED { + display "Processor clock speed (MHz)" + flavor data + calculated { CYGHWR_HAL_SH_DIVIDER1_INPUT / CYGHWR_HAL_SH_OOC_DIVIDER_1 } + description " + The core (CPU, cache and MMU) speed is computed from + the input clock speed and the divider 1 setting." + } + + cdl_option CYGHWR_HAL_SH_BOARD_SPEED { + display "Platform bus clock speed (MHz)" + flavor data + calculated { CYGHWR_HAL_SH_CLOCK_CKIO } + description " + The platform bus speed is CKIO." + } + + cdl_option CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED { + display "Processor on-chip peripheral clock speed (MHz)" + flavor data + calculated { CYGHWR_HAL_SH_DIVIDER2_INPUT / CYGHWR_HAL_SH_OOC_DIVIDER_2 } + description " + The peripheral speed is computed from the input clock + speed and the divider 2 settings." + } + } + + + cdl_component CYGPKG_HAL_SH_INTERRUPT { + display "Interrupt controls" + flavor none + no_define + description " + Initial interrupt settings can be specified using these option." + + cdl_option CYGHWR_HAL_SH_IRQ_HANDLE_SPURIOUS_INTERRUPTS { + display "Handle spurious interrupts" + default_value 0 + description " + The SH3 may generate spurious interrupts with INTEVT = 0 + when changing the BL bit of the status register. Enabling + this option will cause such interrupts to be identified + very early in the interrupt handler and be ignored. Given + that the SH HAL uses the I-mask to control interrupts, + these spurious interrupts should not occur, and so there + should be no reason to include the special handling code." + } + + cdl_option CYGHWR_HAL_SH_IRQ_USE_IRQLVL { + display "Use IRQ0-3 pins as IRL input" + default_value 0 + description " + It is possible for the IRQ0-3 pins to be used as IRL + inputs by enabling this option." + } + + cdl_option CYGHWR_HAL_SH_IRQ_ENABLE_IRLS_INTERRUPTS { + display "Enable IRLS interrupt pins" + default_value 0 + active_if CYGHWR_HAL_SH_IRQ_USE_IRQLVL + description " + IRLS interrupt pins must be specifically + activated. When they are, they will cause the same + type of interrupt as those caused by the IRL pins. If + IRL and IRLS pins signal an interrupt at the same + time, the highest level interrupt will be generated. + Only available on some cores, and probably share pins + with other interrupt sources (PINT) which cannot be + used in this configuration." + } + } + + # Cache settings + cdl_option CYGHWR_HAL_SH_CACHE_MODE_P0 { + display "Select cache mode set for P0/U0/P3 at startup" + parent CYGPKG_HAL_SH_CACHE + default_value { "WRITE_BACK" } + legal_values { "WRITE_BACK" "WRITE_THROUGH" } + flavor data + description " + Controls what cache mode the cache should be put in at + startup for areas P0, U0 and P3. Write-back mode improves + performance by letting dirty data to be kept in the + cache for a period of time, allowing mutiple writes to + the same cache line to be written back to memory in + one memory transaction. In Write-through mode, each + individual write will cause a memory transaction." + } + + cdl_option CYGHWR_HAL_SH_CACHE_MODE_P1 { + display "Select cache mode set for P1 at startup" + parent CYGPKG_HAL_SH_CACHE + default_value { "WRITE_BACK" } + legal_values { "WRITE_BACK" "WRITE_THROUGH" } + flavor data + description " + Controls what cache mode the cache should be put in at + startup for area P1. Write-back mode improves + performance by letting dirty data to be kept in the + cache for a period of time, allowing mutiple writes to + the same cache line to be written back to memory in + one memory transaction. In Write-through mode, each + individual write will cause a memory transaction." + } +}
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/include/mod_7707a.h @@ -0,0 +1,83 @@ +#ifndef CYGONCE_HAL_MOD_77xx_H +#define CYGONCE_HAL_MOD_77xx_H + +//============================================================================= +// +// mod_7707a.h +// +// List modules available on CPU +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-06-08 +// Purpose: Define modules (and versions) available on this CPU. +// Usage: Included from <cyg/hal/sh_regs.h> +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//----------------------------------------------------------------------------- +// Modules provided by the CPU + +#define CYGARC_SH_MOD_BCN 2 +#define CYGARC_SH_MOD_CPG 2 +#define CYGARC_SH_MOD_INTC 3 +#define CYGARC_SH_MOD_IRDA 1 +#define CYGARC_SH_MOD_PFC 1 +#define CYGARC_SH_MOD_SCI 1 +#define CYGARC_SH_MOD_SCIF 1 +#define CYGARC_SH_MOD_UBC 1 + +//----------------------------------------------------------------------------- +// Extra details for Cache Module (CAC) + +// Cache dimenions - one unified cache +#define CYGARC_SH_MOD_CAC_SIZE 16384 // Size of cache in bytes +#define CYGARC_SH_MOD_CAC_LINE_SIZE 16 // Size of a cache line +#define CYGARC_SH_MOD_CAC_WAYS 4 // Associativity of the cache + +// Cache addressing information +// way: bits 13 - 12 +// entry: bits 11 - 4 +#define CYGARC_SH_MOD_CAC_ADDRESS_BASE 0xf0000000 +#define CYGARC_SH_MOD_CAC_ADDRESS_TOP 0xf0004000 +#define CYGARC_SH_MOD_CAC_ADDRESS_STEP 0x00000010 +// U : bit 1 +// V : bit 0 +// Writing zero to both forces a flush of the line if it is dirty. +#define CYGARC_SH_MOD_CAC_ADDRESS_FLUSH 0x00000000 + +//----------------------------------------------------------------------------- +// Extra details for interrupt handling +#define CYGARC_SH_SOFTWARE_IP_UPDATE + +#endif // CYGONCE_HAL_MOD_77xx_H
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/include/mod_7708.h @@ -0,0 +1,81 @@ +#ifndef CYGONCE_HAL_MOD_77xx_H +#define CYGONCE_HAL_MOD_77xx_H + +//============================================================================= +// +// mod_7708.h +// +// List modules available on CPU +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-03-16 +// Purpose: Define modules (and versions) available on this CPU. +// Usage: Included from <cyg/hal/sh_regs.h> +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//----------------------------------------------------------------------------- +// Modules provided by the CPU + +#define CYGARC_SH_MOD_BCN 1 +#define CYGARC_SH_MOD_CPG 1 +#define CYGARC_SH_MOD_INTC 1 +#define CYGARC_SH_MOD_SCI 2 +#define CYGARC_SH_MOD_UBC 1 + + +//----------------------------------------------------------------------------- +// Extra details for Cache Module (CAC) + +// Cache dimenions - one unified cache +#define CYGARC_SH_MOD_CAC_SIZE 8192 // Size of cache in bytes +#define CYGARC_SH_MOD_CAC_LINE_SIZE 16 // Size of a cache line +#define CYGARC_SH_MOD_CAC_WAYS 4 // Associativity of the cache + +// Cache addressing information +// way: bits 12 - 11 +// entry: bits 10 - 4 +#define CYGARC_SH_MOD_CAC_ADDRESS_BASE 0xf0000000 +#define CYGARC_SH_MOD_CAC_ADDRESS_TOP 0xf0002000 +#define CYGARC_SH_MOD_CAC_ADDRESS_STEP 0x00000010 +// U : bit 1 +// V : bit 0 +// Writing zero to both forces a flush of the line if it is dirty. +#define CYGARC_SH_MOD_CAC_ADDRESS_FLUSH 0x00000000 + +//----------------------------------------------------------------------------- +// Extra details for interrupt handling +#define CYGARC_SH_SOFTWARE_IP_UPDATE + +#endif // CYGONCE_HAL_MOD_77xx_H
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/include/mod_7709a.h @@ -0,0 +1,84 @@ +#ifndef CYGONCE_HAL_MOD_77xx_H +#define CYGONCE_HAL_MOD_77xx_H + +//============================================================================= +// +// mod_7709a.h +// +// List modules available on CPU +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-03-16 +// Purpose: Define modules (and versions) available on this CPU. +// Usage: Included from <cyg/hal/sh_regs.h> +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//----------------------------------------------------------------------------- +// Modules provided by the CPU + +#define CYGARC_SH_MOD_BCN 2 +#define CYGARC_SH_MOD_CPG 3 +#define CYGARC_SH_MOD_DMAC 1 +#define CYGARC_SH_MOD_INTC 2 +#define CYGARC_SH_MOD_IRDA 1 +#define CYGARC_SH_MOD_PFC 1 +#define CYGARC_SH_MOD_SCI 1 +#define CYGARC_SH_MOD_SCIF 1 +#define CYGARC_SH_MOD_UBC 2 + +//----------------------------------------------------------------------------- +// Extra details for Cache Module (CAC) + +// Cache dimenions - one unified cache +#define CYGARC_SH_MOD_CAC_SIZE 16384 // Size of cache in bytes +#define CYGARC_SH_MOD_CAC_LINE_SIZE 16 // Size of a cache line +#define CYGARC_SH_MOD_CAC_WAYS 4 // Associativity of the cache + +// Cache addressing information +// way: bits 13 - 12 +// entry: bits 11 - 4 +#define CYGARC_SH_MOD_CAC_ADDRESS_BASE 0xf0000000 +#define CYGARC_SH_MOD_CAC_ADDRESS_TOP 0xf0004000 +#define CYGARC_SH_MOD_CAC_ADDRESS_STEP 0x00000010 +// U : bit 1 +// V : bit 0 +// Writing zero to both forces a flush of the line if it is dirty. +#define CYGARC_SH_MOD_CAC_ADDRESS_FLUSH 0x00000000 + +//----------------------------------------------------------------------------- +// Extra details for interrupt handling +#define CYGARC_SH_SOFTWARE_IP_UPDATE + +#endif // CYGONCE_HAL_MOD_77xx_H
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/include/mod_7729.h @@ -0,0 +1,83 @@ +#ifndef CYGONCE_HAL_MOD_77xx_H +#define CYGONCE_HAL_MOD_77xx_H + +//============================================================================= +// +// mod_7729.h +// +// List modules available on CPU +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-08-29 +// Purpose: Define modules (and versions) available on this CPU. +// Usage: Included from <cyg/hal/sh_regs.h> +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//----------------------------------------------------------------------------- +// Modules provided by the CPU + +#define CYGARC_SH_MOD_BCN 2 +#define CYGARC_SH_MOD_CPG 3 +#define CYGARC_SH_MOD_INTC 3 +#define CYGARC_SH_MOD_IRDA 1 +#define CYGARC_SH_MOD_PFC 1 +#define CYGARC_SH_MOD_SCI 1 +#define CYGARC_SH_MOD_SCIF 1 +#define CYGARC_SH_MOD_UBC 3 + +//----------------------------------------------------------------------------- +// Extra details for Cache Module (CAC) + +// Cache dimenions - one unified cache +#define CYGARC_SH_MOD_CAC_SIZE 16384 // Size of cache in bytes +#define CYGARC_SH_MOD_CAC_LINE_SIZE 16 // Size of a cache line +#define CYGARC_SH_MOD_CAC_WAYS 4 // Associativity of the cache + +// Cache addressing information +// way: bits 13 - 12 +// entry: bits 11 - 4 +#define CYGARC_SH_MOD_CAC_ADDRESS_BASE 0xf0000000 +#define CYGARC_SH_MOD_CAC_ADDRESS_TOP 0xf0004000 +#define CYGARC_SH_MOD_CAC_ADDRESS_STEP 0x00000010 +// U : bit 1 +// V : bit 0 +// Writing zero to both forces a flush of the line if it is dirty. +#define CYGARC_SH_MOD_CAC_ADDRESS_FLUSH 0x00000000 + +//----------------------------------------------------------------------------- +// Extra details for interrupt handling +#define CYGARC_SH_SOFTWARE_IP_UPDATE + +#endif // CYGONCE_HAL_MOD_77xx_H
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/include/mod_regs_bsc.h @@ -0,0 +1,180 @@ +//============================================================================= +// +// mod_regs_bsc.h +// +// BSC (bus state controller) Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//-------------------------------------------------------------------------- +// Register definitions +#define CYGARC_REG_BCR1 0xffffff60 +#define CYGARC_REG_BCR2 0xffffff62 +#define CYGARC_REG_WCR1 0xffffff64 +#define CYGARC_REG_WCR2 0xffffff66 +#define CYGARC_REG_MCR 0xffffff68 +#define CYGARC_REG_DCR 0xffffff6a +#define CYGARC_REG_PCR 0xffffff6c +#define CYGARC_REG_RTCSR 0xffffff6e +#define CYGARC_REG_RTCNT 0xffffff70 +#define CYGARC_REG_RTCOR 0xffffff72 +#define CYGARC_REG_RFCR 0xffffff74 + +#define CYGARC_REG_SDMR_AREA2_BASE 0xffffd000 +#define CYGARC_REG_SDMR_AREA3_BASE 0xffffe000 + +#define CYGARC_REG_BCR1_DRAMTP2 0x0010 +#define CYGARC_REG_BCR1_DRAMTP1 0x0008 +#define CYGARC_REG_BCR1_DRAMTP0 0x0004 + +// Bus widths for areas +#define CYGARC_REG_BCR2_A6_8 0x1000 +#define CYGARC_REG_BCR2_A6_16 0x2000 +#define CYGARC_REG_BCR2_A6_32 0x3000 +#define CYGARC_REG_BCR2_A5_8 0x0400 +#define CYGARC_REG_BCR2_A5_16 0x0800 +#define CYGARC_REG_BCR2_A5_32 0x0c00 +#define CYGARC_REG_BCR2_A4_8 0x0100 +#define CYGARC_REG_BCR2_A4_16 0x0200 +#define CYGARC_REG_BCR2_A4_32 0x0300 +#define CYGARC_REG_BCR2_A3_8 0x0040 +#define CYGARC_REG_BCR2_A3_16 0x0080 +#define CYGARC_REG_BCR2_A3_32 0x00c0 +#define CYGARC_REG_BCR2_A2_8 0x0010 +#define CYGARC_REG_BCR2_A2_16 0x0020 +#define CYGARC_REG_BCR2_A2_32 0x0030 + +// Memory type selection and other IO behavior controls +#define CYGARC_REG_BCR1_PULA 0x8000 // Pin A25 to A0 Pull-Up +#define CYGARC_REG_BCR1_PULD 0x4000 // Pin D31 to D0 Pull-Up +#define CYGARC_REG_BCR1_HIZMEM 0x2000 // Hi-Z memory control +#define CYGARC_REG_BCR1_HIZCNT 0x1000 // High-Z Control +#define CYGARC_REG_BCR1_ENDIAN 0x0800 // Endian Flag +#define CYGARC_REG_BCR1_A0_BST_MASK 0x0600 // Area 0 Burst ROM Control +#define CYGARC_REG_BCR1_A0_BST_4 0x0200 +#define CYGARC_REG_BCR1_A0_BST_8 0x0400 +#define CYGARC_REG_BCR1_A0_BST_16 0x0600 +#define CYGARC_REG_BCR1_A5_BST_MASK 0x0180 // Area 5 Burst ROM Control +#define CYGARC_REG_BCR1_A5_BST_4 0x0080 +#define CYGARC_REG_BCR1_A5_BST_8 0x0100 +#define CYGARC_REG_BCR1_A5_BST_16 0x0180 +#define CYGARC_REG_BCR1_A6_BST_MASK 0x0060 // Area 6 Burst ROM Control +#define CYGARC_REG_BCR1_A6_BST_4 0x0020 +#define CYGARC_REG_BCR1_A6_BST_8 0x0040 +#define CYGARC_REG_BCR1_A6_BST_16 0x0060 +#define CYGARC_REG_BCR1_DRAMTP_MASK 0x001c // Area 2, Area 3 Memory Type +#define CYGARC_REG_BCR1_A5PCM 0x0002 // Area 5 Bus Type +#define CYGARC_REG_BCR1_A6PCM 0x0001 // Area 6 Bus Type + +// Intercycle wait states +#define CYGARC_REG_WCR1_WAITSEL 0x8000 // WAIT Sampling Timing Select +#define CYGARC_REG_WCR1_A6I_MASK 0x3000 // Intercycle Idle Specification +#define CYGARC_REG_WCR1_A6I_SHIFT 12 +#define CYGARC_REG_WCR1_A5I_MASK 0x0c00 +#define CYGARC_REG_WCR1_A5I_SHIFT 10 +#define CYGARC_REG_WCR1_A4I_MASK 0x0300 +#define CYGARC_REG_WCR1_A4I_SHIFT 8 +#define CYGARC_REG_WCR1_A3I_MASK 0x00c0 +#define CYGARC_REG_WCR1_A3I_SHIFT 6 +#define CYGARC_REG_WCR1_A2I_MASK 0x0030 +#define CYGARC_REG_WCR1_A2I_SHIFT 4 +#define CYGARC_REG_WCR1_A0I_MASK 0x0003 +#define CYGARC_REG_WCR1_A0I_SHIFT 0 + +#define CYGARC_REG_WCR1_0WS 0 +#define CYGARC_REG_WCR1_1WS 1 +#define CYGARC_REG_WCR1_2WS 2 +#define CYGARC_REG_WCR1_3WS 3 + + +// Wait states +#define CYGARC_REG_WCR2_A6_MASK 0xe000 // Wait states + burst pitch +#define CYGARC_REG_WCR2_A6_SHIFT 13 +#define CYGARC_REG_WCR2_A5_MASK 0x1c00 // Wait states + burst pitch +#define CYGARC_REG_WCR2_A5_SHIFT 10 +#define CYGARC_REG_WCR2_A4_MASK 0x0380 // Wait states +#define CYGARC_REG_WCR2_A4_SHIFT 7 +#define CYGARC_REG_WCR2_A3_MASK 0x0060 // Wait states / CAS latency +#define CYGARC_REG_WCR2_A3_SHIFT 5 +#define CYGARC_REG_WCR2_A2_MASK 0x0018 // Wait states / CAS latency +#define CYGARC_REG_WCR2_A2_SHIFT 3 +#define CYGARC_REG_WCR2_A0_MASK 0x0007 // Wait states + burst pitch +#define CYGARC_REG_WCR2_A0_SHIFT 0 + +#define CYGARC_REG_WCR2_0WS 0 +#define CYGARC_REG_WCR2_1WS 1 +#define CYGARC_REG_WCR2_2WS 2 +#define CYGARC_REG_WCR2_3WS 3 +#define CYGARC_REG_WCR2_4WS 4 +#define CYGARC_REG_WCR2_6WS 5 +#define CYGARC_REG_WCR2_8WS 6 +#define CYGARC_REG_WCR2_10WS 7 + +//-------------------------------------------------------------------------- +// Additional type definitions +#if (CYGARC_SH_MOD_BCN > 1) +# define CYGARC_REG_BCR3 0xffffff7e +#endif + + + +//----------------------------------------------------------------------------- +// Calculate constants needed to drive the proper SDRAM refresh rate. Argument +// is delay between required refresh events in microseconds (us). Should be +// available off the SDRAM spec sheet. +// These should be a part of a fully CDLicized memory controller setup. +#define CYGARC_RTCSR_PRESCALE(_r_) \ +(((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(4*1000000))<256) ? 4 : \ + ((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(16*1000000))<256) ? 16 : \ + ((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(64*1000000))<256) ? 64 : \ + ((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(256*1000000))<256) ? 256 : \ + ((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(1024*1000000))<256) ? 1024 : \ + ((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(2048*1000000))<256) ? 2048 : 4096) + +// These two macros provide the static values we need to stuff into the +// registers. +#define CYGARC_RTCSR_CKSx(_r_) \ + (( 4 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x08 : \ + ( 16 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x10 : \ + ( 64 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x18 : \ + ( 256 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x20 : \ + (1024 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x28 : \ + (2048 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x30 : 0x38 ) + +#define CYGARC_RTCSR_N(_r_) \ + (CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(CYGARC_RTCSR_PRESCALE(_r_)*1000000)) + +
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/include/mod_regs_cac.h @@ -0,0 +1,66 @@ +//============================================================================= +// +// mod_regs_cac.h +// +// CAC (cache) Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +// Besides the below, cache sizes are defined in the CPU variant module +// headers (mod_77xx.h). + +//-------------------------------------------------------------------------- +// Cache registers +#define CYGARC_REG_CCR 0xffffffec + +#define CYGARC_REG_CCR_RA 0x00000020 +#define CYGARC_REG_CCR_CF 0x00000008 +#define CYGARC_REG_CCR_CB 0x00000004 +#define CYGARC_REG_CCR_WT 0x00000002 +#define CYGARC_REG_CCR_CE 0x00000001 + + +//-------------------------------------------------------------------------- +// Address array access +// Address part (base/top/step specified in mod file) +#define CYGARC_REG_CACHE_ADDRESS_ADDRESS 0x00000008 // compare address + +// Data part +#define CYGARC_REG_CACHE_ADDRESS_TAG_Mask 0x1ffffc00 +#define CYGARC_REG_CACHE_ADDRESS_U 0x00000002 // updated (contains dirty data) +#define CYGARC_REG_CACHE_ADDRESS_V 0x00000001 // valid + +
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/include/mod_regs_cpg.h @@ -0,0 +1,213 @@ +//============================================================================= +// +// mod_regs_cpg.h +// +// CPG (clock pulse generator) Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//-------------------------------------------------------------------------- +// Oscillator control registers +#define CYGARC_REG_FRQCR 0xffffff80 +#define CYGARC_REG_WTCNT 0xffffff84 // read 8bit, write 16bit +#define CYGARC_REG_WTCSR 0xffffff86 // read 8bit, write 16bit + +#define CYGARC_REG_WTCNT_WRITE 0x5a00 // top 8bit value for write + +#define CYGARC_REG_WTCSR_WRITE 0xa500 // top 8bit value for write +#define CYGARC_REG_WTCSR_TME 0x80 // timer enable +#define CYGARC_REG_WTCSR_WT_IT 0x40 // watchdog(1)/interval(0) +#define CYGARC_REG_WTCSR_RSTS 0x20 // manual(1)/poweron(0) +#define CYGARC_REG_WTCSR_WOVF 0x10 // watchdog overflow +#define CYGARC_REG_WTCSR_IOVF 0x08 // interval overflow +#define CYGARC_REG_WTCSR_CKS2 0x04 // clock select 2 +#define CYGARC_REG_WTCSR_CKS1 0x02 // clock select 1 +#define CYGARC_REG_WTCSR_CKS0 0x01 // clock select 0 +#define CYGARC_REG_WTCSR_CKSx_MASK 0x07 // clock select mask +// This is the period (in us) between watchdog reset and overflow. +// Note: We use max timeout delay for now. +#define CYGARC_REG_WTCSR_CKSx_SETTING 0x07 // max delay + +#define CYGARC_REG_WTCSR_PERIOD ((1000000000/(CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED/4096))*256) + +// Translate various CDL clock configurations to register equivalents +// for the various CPG versions +#if (CYGARC_SH_MOD_CPG == 1) // ---------------------------- V1 + +// PLL1 +#if (CYGHWR_HAL_SH_OOC_PLL_1 == 0) || (CYGHWR_HAL_SH_OOC_PLL_1 == 1) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0000 +#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 2) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0010 +#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 4) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0020 +#else +# error "Unsupported PLL1 setting" +#endif + +// Divider1 +#if (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 1) +# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0000 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 2) +# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0004 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 4) +# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0008 +#else +# error "Unsupported Divider1 setting" +#endif + +// Divider2 +#if (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 1) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0000 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 2) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0001 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 4) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0002 +#else +# error "Unsupported Divider1 setting" +#endif + +// CKOEN - set in all modes but 7 +#if (CYGHWR_HAL_SH_OOC_CLOCK_MODE != 7) +# define CYGARC_REG_FRQCR_INIT_CKOEN 0x0100 +#else +# define CYGARC_REG_FRQCR_INIT_CKOEN 0x0000 +#endif + +#elif (CYGARC_SH_MOD_CPG == 2) // ---------------------------- V2 + +// PLL1 +#if (CYGHWR_HAL_SH_OOC_PLL_1 == 0) || (CYGHWR_HAL_SH_OOC_PLL_1 == 1) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0000 +#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 2) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0010 +#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 4) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0020 +#else +# error "Unsupported PLL1 setting" +#endif + +// Divider1 +#if (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 1) +# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0000 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 2) +# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0004 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 4) +# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0008 +#else +# error "Unsupported Divider1 setting" +#endif + +// Divider2 +#if (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 1) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0000 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 2) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0001 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 4) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0002 +#else +# error "Unsupported Divider1 setting" +#endif + +// CKOEN - set in all modes but 2 +#if (CYGHWR_HAL_SH_OOC_CLOCK_MODE != 2) +# define CYGARC_REG_FRQCR_INIT_CKOEN 0x0100 +#else +# define CYGARC_REG_FRQCR_INIT_CKOEN 0x0000 +#endif + +#elif (CYGARC_SH_MOD_CPG == 3) // ---------------------------- V3 + +// PLL1 +#if (CYGHWR_HAL_SH_OOC_PLL_1 == 0) || (CYGHWR_HAL_SH_OOC_PLL_1 == 1) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0000 +#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 2) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0010 +#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 3) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x8000 +#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 4) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0020 +#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 6) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x8010 +#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 8) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0030 +#else +# error "Unsupported PLL1 setting" +#endif + +// Divider1 +#if (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 1) +# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0000 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 2) +# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0004 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 3) +# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x4000 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_1 == 4) +# define CYGARC_REG_FRQCR_INIT_DIVIDER1 0x0008 +#else +# error "Unsupported Divider1 setting" +#endif + +// Divider2 +#if (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 1) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0000 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 2) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0001 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 3) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x2000 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 4) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x0002 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_2 == 6) +# define CYGARC_REG_FRQCR_INIT_DIVIDER2 0x2002 +#else +# error "Unsupported Divider2 setting" +#endif + +// CKOEN - set in modes 0-2 +#if (CYGHWR_HAL_SH_OOC_CLOCK_MODE <= 2) +# define CYGARC_REG_FRQCR_INIT_CKOEN 0x0100 +#else +# define CYGARC_REG_FRQCR_INIT_CKOEN 0x0000 +#endif + +#else + +# error "Unsupported CPG version" + +#endif + +// Init value +#define CYGARC_REG_FRQCR_INIT (CYGARC_REG_FRQCR_INIT_PLL1|CYGARC_REG_FRQCR_INIT_DIVIDER1|CYGARC_REG_FRQCR_INIT_DIVIDER2|CYGARC_REG_FRQCR_INIT_CKOEN)
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/include/mod_regs_dma.h @@ -0,0 +1,111 @@ +//============================================================================= +// +// mod_regs_dma.h +// +// DMA (direct memory access) Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//-------------------------------------------------------------------------- +// DMA Controller registers + +#define CYGARC_REG_SAR0 0xa4000020 +#define CYGARC_REG_DAR0 0xa4000024 +#define CYGARC_REG_DMATCR0 0xa4000028 +#define CYGARC_REG_CHCR0 0xa400002c +#define CYGARC_REG_SAR1 0xa4000030 +#define CYGARC_REG_DAR1 0xa4000034 +#define CYGARC_REG_DMATCR1 0xa4000038 +#define CYGARC_REG_CHCR1 0xa400003c +#define CYGARC_REG_SAR2 0xa4000040 +#define CYGARC_REG_DAR2 0xa4000044 +#define CYGARC_REG_DMATCR2 0xa4000048 +#define CYGARC_REG_CHCR2 0xa400004c +#define CYGARC_REG_SAR3 0xa4000050 +#define CYGARC_REG_DAR3 0xa4000054 +#define CYGARC_REG_DMATCR3 0xa4000058 +#define CYGARC_REG_CHCR3 0xa400005c +#define CYGARC_REG_DMAOR 0xa4000060 + +// Offsets from base register +#define CYGARC_REG_SAR 0x00 +#define CYGARC_REG_DAR 0x04 +#define CYGARC_REG_DMATCR 0x08 +#define CYGARC_REG_CHCR 0x0c + + +// DMA Channel Control Register. If there's a digit suffix to CHCR the flag +// is only valid in the listed channels. +#define CYGARC_REG_CHCR3_DI 0x00100000 // direct/indirect selection +#define CYGARC_REG_CHCR2_RO 0x00080000 // source address reload +#define CYGARC_REG_CHCR01_RL 0x00040000 // request check level +#define CYGARC_REG_CHCR01_AM 0x00020000 // acknowledge mode +#define CYGARC_REG_CHCR01_AL 0x00010000 // acknowledge level +#define CYGARC_REG_CHCR_DM1 0x00008000 // destination address mode +#define CYGARC_REG_CHCR_DM0 0x00004000 +#define CYGARC_REG_CHCR_SM1 0x00002000 // source address mode +#define CYGARC_REG_CHCR_SM0 0x00001000 +#define CYGARC_REG_CHCR_RS3 0x00000800 // resource select +#define CYGARC_REG_CHCR_RS2 0x00000400 +#define CYGARC_REG_CHCR_RS1 0x00000200 +#define CYGARC_REG_CHCR_RS0 0x00000100 +#define CYGARC_REG_CHCR01_DS 0x00000040 // DREQ select +#define CYGARC_REG_CHCR_TM 0x00000020 // transmit mode +#define CYGARC_REG_CHCR_TS1 0x00000010 // transmit size +#define CYGARC_REG_CHCR_TS0 0x00000008 +#define CYGARC_REG_CHCR_IE 0x00000004 // interrupt enable +#define CYGARC_REG_CHCR_TE 0x00000002 // transfer end +#define CYGARC_REG_CHCR_DE 0x00000001 // DMAC enable + +// Resource select options +#define CYGARC_REG_CHCR_RS_EXT_DUAL 0x00000000 +#define CYGARC_REG_CHCR_RS_EXT_EX_DAC 0x00000100 +#define CYGARC_REG_CHCR_RS_EXT_DAC_EX 0x00000300 +#define CYGARC_REG_CHCR_RS_AUTO 0x00000400 +#define CYGARC_REG_CHCR_RS_IRDA_TX 0x00000a00 +#define CYGARC_REG_CHCR_RS_IRDA_RX 0x00000b00 +#define CYGARC_REG_CHCR_RS_SCIF_TX 0x00000c00 +#define CYGARC_REG_CHCR_RS_SCIF_RX 0x00000d00 +#define CYGARC_REG_CHCR_RS_AD 0x00000e00 +#define CYGARC_REG_CHCR_RS_CMT 0x00000f00 + + +// DMA Operation Register +#define CYGARC_REG_DMAOR_PR1 0x0200 // priority level +#define CYGARC_REG_DMAOR_PR0 0x0100 +#define CYGARC_REG_DMAOR_AE 0x0004 // address error flag +#define CYGARC_REG_DMAOR_NMIF 0x0002 // NMI flag +#define CYGARC_REG_DMAOR_DME 0x0001 // DMA master enable
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/include/mod_regs_intc.h @@ -0,0 +1,158 @@ +//============================================================================= +// +// mod_regs_intc.h +// +// INTC (interrupt controller) Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//-------------------------------------------------------------------------- +// Interrupt registers, module type 1 +#define CYGARC_REG_EXCEVT 0xffffffd4 +#define CYGARC_REG_INTEVT 0xffffffd8 + +#define CYGARC_REG_ICR 0xfffffee0 +#define CYGARC_REG_IPRA 0xfffffee2 +#define CYGARC_REG_IPRB 0xfffffee4 + +#define CYGARC_REG_IPRA_TMU0_MASK 0xf000 +#define CYGARC_REG_IPRA_TMU0_PRI1 0x1000 +#define CYGARC_REG_IPRA_TMU1_MASK 0x0f00 +#define CYGARC_REG_IPRA_TMU1_PRI1 0x0100 +#define CYGARC_REG_IPRA_TMU2_MASK 0x00f0 +#define CYGARC_REG_IPRA_TMU2_PRI1 0x0010 +#define CYGARC_REG_IPRA_RTC_MASK 0x000f +#define CYGARC_REG_IPRA_RTC_PRI1 0x0001 + +#define CYGARC_REG_IPRB_WDT_MASK 0xf000 +#define CYGARC_REG_IPRB_WDT_PRI1 0x1000 +#define CYGARC_REG_IPRB_REF_MASK 0x0f00 +#define CYGARC_REG_IPRB_REF_PRI1 0x0100 +#define CYGARC_REG_IPRB_SCI_MASK 0x00f0 +#define CYGARC_REG_IPRB_SCI_PRI1 0x0010 + + +#if (CYGARC_SH_MOD_INTC >= 2) +# define CYGARC_REG_INTEVT2 0xa4000000 +# define CYGARC_REG_IRR0 0xa4000004 +# define CYGARC_REG_IRR1 0xa4000006 +# define CYGARC_REG_IRR2 0xa4000008 +# define CYGARC_REG_ICR0 CYGARC_REG_ICR +# define CYGARC_REG_ICR1 0xa4000010 +# define CYGARC_REG_ICR2 0xa4000012 +# define CYGARC_REG_INTER 0xa4000014 +# define CYGARC_REG_IPRC 0xa4000016 +# define CYGARC_REG_IPRD 0xa4000018 +# define CYGARC_REG_IPRE 0xa400001a + + +#define CYGARC_REG_IPRC_IRQ3_MASK 0xf000 +#define CYGARC_REG_IPRC_IRQ3_PRI1 0x1000 +#define CYGARC_REG_IPRC_IRQ2_MASK 0x0f00 +#define CYGARC_REG_IPRC_IRQ2_PRI1 0x0100 +#define CYGARC_REG_IPRC_IRQ1_MASK 0x00f0 +#define CYGARC_REG_IPRC_IRQ1_PRI1 0x0010 +#define CYGARC_REG_IPRC_IRQ0_MASK 0x000f +#define CYGARC_REG_IPRC_IRQ0_PRI1 0x0001 + +#define CYGARC_REG_IPRD_PINT07_MASK 0xf000 +#define CYGARC_REG_IPRD_PINT07_PRI1 0x1000 +#define CYGARC_REG_IPRD_PINT8F_MASK 0x0f00 +#define CYGARC_REG_IPRD_PINT8F_PRI1 0x0100 +#define CYGARC_REG_IPRD_IRQ5_MASK 0x00f0 +#define CYGARC_REG_IPRD_IRQ5_PRI1 0x0010 +#define CYGARC_REG_IPRD_IRQ4_MASK 0x000f +#define CYGARC_REG_IPRD_IRQ4_PRI1 0x0001 + +#define CYGARC_REG_IPRE_DMAC_MASK 0xf000 +#define CYGARC_REG_IPRE_DMAC_PRI1 0x1000 +#define CYGARC_REG_IPRE_IRDA_MASK 0x0f00 +#define CYGARC_REG_IPRE_IRDA_PRI1 0x0100 +#define CYGARC_REG_IPRE_SCIF_MASK 0x00f0 +#define CYGARC_REG_IPRE_SCIF_PRI1 0x0010 +#define CYGARC_REG_IPRE_ADC_MASK 0x000f +#define CYGARC_REG_IPRE_ADC_PRI1 0x0001 + +#define CYGARC_REG_ICR1_MAI 0x8000 +#define CYGARC_REG_ICR1_IRQLVL 0x4000 +#define CYGARC_REG_ICR1_BLMSK 0x2000 +#define CYGARC_REG_ICR1_IRLSEN 0x1000 +#define CYGARC_REG_ICR1_SENSE_IRQ5_shift 10 +#define CYGARC_REG_ICR1_SENSE_IRQ4_shift 8 +#define CYGARC_REG_ICR1_SENSE_IRQ3_shift 6 +#define CYGARC_REG_ICR1_SENSE_IRQ2_shift 4 +#define CYGARC_REG_ICR1_SENSE_IRQ1_shift 2 +#define CYGARC_REG_ICR1_SENSE_IRQ0_shift 0 +#define CYGARC_REG_ICR1_SENSE_LEVEL 0x2 +#define CYGARC_REG_ICR1_SENSE_UP 0x1 + +// The (initial) IRQ mode is controlled by configuration. +#ifdef CYGHWR_HAL_SH_IRQ_USE_IRQLVL +# ifdef CYGHWR_HAL_SH_IRQ_ENABLE_IRLS_INTERRUPTS +# define CYGARC_REG_ICR1_INIT (CYGARC_REG_ICR1_IRLSEN|CYGARC_REG_ICR1_IRQLVL) +# else +# define CYGARC_REG_ICR1_INIT (CYGARC_REG_ICR1_IRQLVL) +# endif +#else +# define CYGARC_REG_ICR1_INIT 0x0000 +#endif + +#define CYGARC_REG_IRR0_PINT07 0x80 +#define CYGARC_REG_IRR0_PINT8F 0x40 +#define CYGARC_REG_IRR0_IRQ5 0x20 +#define CYGARC_REG_IRR0_IRQ4 0x10 +#define CYGARC_REG_IRR0_IRQ3 0x08 +#define CYGARC_REG_IRR0_IRQ2 0x04 +#define CYGARC_REG_IRR0_IRQ1 0x02 +#define CYGARC_REG_IRR0_IRQ0 0x01 + +#endif + + + +#if (CYGARC_SH_MOD_INTC >= 3) +# define CYGARC_REG_IRR3 0xa400000a +# define CYGARC_REG_IRR4 0xa400000c +# define CYGARC_REG_IPRF 0xa400001c + +#define CYGARC_REG_IPRF_LCDI_MASK 0x0f00 +#define CYGARC_REG_IPRF_LCDI_PRI1 0x0100 +#define CYGARC_REG_IPRF_PCC0_MASK 0x00f0 +#define CYGARC_REG_IPRF_PCC0_PRI1 0x0010 +#define CYGARC_REG_IPRF_PCC1_MASK 0x000f +#define CYGARC_REG_IPRF_PCC1_PRI1 0x0001 + +#endif
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/include/mod_regs_mmu.h @@ -0,0 +1,50 @@ +//============================================================================= +// +// mod_regs_mmu.h +// +// MMU Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//-------------------------------------------------------------------------- +// MMU control registers +#define CYGARC_REG_MMUCR 0xffffffe0 + +#define CYGARC_REG_MMUCR_SV 0x00000100 +#define CYGARC_REG_MMUCR_RC_MASK 0x000000c0 +#define CYGARC_REG_MMUCR_TF 0x00000004 +#define CYGARC_REG_MMUCR_IX 0x00000002 +#define CYGARC_REG_MMUCR_AT 0x00000001
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/include/mod_regs_pfc.h @@ -0,0 +1,100 @@ +//============================================================================= +// +// mod_regs_pfc.h +// +// PFC (pin function controller) Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#define CYGARC_REG_PACR 0xa4000100 // port A control +#define CYGARC_REG_PBCR 0xa4000102 // port B control +#define CYGARC_REG_PCCR 0xa4000104 // port C control +#define CYGARC_REG_PDCR 0xa4000106 // port D control +#define CYGARC_REG_PECR 0xa4000108 // port E control +#define CYGARC_REG_PFCR 0xa400010a // port F control +#define CYGARC_REG_PGCR 0xa400010c // port G control +#define CYGARC_REG_PHCR 0xa400010e // port H control +#define CYGARC_REG_PJCR 0xa4000110 // port J control +#define CYGARC_REG_PKCR 0xa4000112 // port K control +#define CYGARC_REG_PLCR 0xa4000114 // port L control +#define CYGARC_REG_SCPCR 0xa4000116 // SC port control + +#define CYGARC_REG_PADR 0xa4000120 // port A data +#define CYGARC_REG_PBDR 0xa4000122 // port B data +#define CYGARC_REG_PCDR 0xa4000124 // port C data +#define CYGARC_REG_PDDR 0xa4000126 // port D data +#define CYGARC_REG_PEDR 0xa4000128 // port E data +#define CYGARC_REG_PFDR 0xa400012a // port F data +#define CYGARC_REG_PGDR 0xa400012c // port G data +#define CYGARC_REG_PHDR 0xa400012e // port H data +#define CYGARC_REG_PJDR 0xa4000130 // port J data +#define CYGARC_REG_PKDR 0xa4000132 // port K data +#define CYGARC_REG_PLDR 0xa4000134 // port L data +#define CYGARC_REG_SCPDR 0xa4000136 // SC port data + + +// Port C +#define CYGARC_REG_PCCR_PC7_MASK 0xc000 +#define CYGARC_REG_PCCR_PC7_shift 14 +#define CYGARC_REG_PCCR_PC6_MASK 0x3000 +#define CYGARC_REG_PCCR_PC6_shift 12 +#define CYGARC_REG_PCCR_PC5_MASK 0x0c00 +#define CYGARC_REG_PCCR_PC5_shift 10 +#define CYGARC_REG_PCCR_PC4_MASK 0x0300 +#define CYGARC_REG_PCCR_PC4_shift 8 +#define CYGARC_REG_PCCR_PC3_MASK 0x00c0 +#define CYGARC_REG_PCCR_PC3_shift 6 +#define CYGARC_REG_PCCR_PC2_MASK 0x0030 +#define CYGARC_REG_PCCR_PC2_shift 4 +#define CYGARC_REG_PCCR_PC1_MASK 0x000c +#define CYGARC_REG_PCCR_PC1_shift 2 +#define CYGARC_REG_PCCR_PC0_MASK 0x0003 +#define CYGARC_REG_PCCR_PC0_shift 0 + +#define CYGARC_REG_PCCR_MD_OTHER 0x0 +#define CYGARC_REG_PCCR_MD_OUT 0x1 +#define CYGARC_REG_PCCR_MD_IN_ON 0x2 +#define CYGARC_REG_PCCR_MD_IN_OFF 0x3 + +#define CYGARC_REG_PCDR_PC7DT 0x80 +#define CYGARC_REG_PCDR_PC6DT 0x40 +#define CYGARC_REG_PCDR_PC5DT 0x20 +#define CYGARC_REG_PCDR_PC4DT 0x10 +#define CYGARC_REG_PCDR_PC3DT 0x08 +#define CYGARC_REG_PCDR_PC2DT 0x04 +#define CYGARC_REG_PCDR_PC1DT 0x02 +#define CYGARC_REG_PCDR_PC0DT 0x01 +
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/include/mod_regs_rtc.h @@ -0,0 +1,77 @@ +//============================================================================= +// +// mod_regs_rtc.h +// +// RTC (real time clock) Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//-------------------------------------------------------------------------- +// RealTime Clock + +#define CYGARC_REG_RC64CNT 0xfffffec0 +#define CYGARC_REG_RSECCNT 0xfffffec2 +#define CYGARC_REG_RMINCNT 0xfffffec4 +#define CYGARC_REG_RHRCNT 0xfffffec6 +#define CYGARC_REG_RWKCNT 0xfffffec8 +#define CYGARC_REG_RDAYCNT 0xfffffeca +#define CYGARC_REG_RMONCNT 0xfffffecc +#define CYGARC_REG_RYRCNT 0xfffffece +#define CYGARC_REG_RSECAR 0xfffffed0 +#define CYGARC_REG_RMINAR 0xfffffed2 +#define CYGARC_REG_RHRAR 0xfffffed4 +#define CYGARC_REG_RWKAR 0xfffffed6 +#define CYGARC_REG_RDAYAR 0xfffffed8 +#define CYGARC_REG_RMONAR 0xfffffeda +#define CYGARC_REG_RCR1 0xfffffedc +#define CYGARC_REG_RCR2 0xfffffede + + +#define CYGARC_REG_RCR1_CF 0x80 // carry flag +#define CYGARC_REG_RCR1_CIE 0x10 // carry interrupt enable +#define CYGARC_REG_RCR1_AIE 0x08 // alarm interrupt enable +#define CYGARC_REG_RCR1_AF 0x01 // alarm flag + +#define CYGARC_REG_RCR2_PEF 0x80 // periodic interrupt flag +#define CYGARC_REG_RCR2_PES2 0x40 // periodic interrupt setting +#define CYGARC_REG_RCR2_PES1 0x20 +#define CYGARC_REG_RCR2_PES0 0x10 +#define CYGARC_REG_RCR2_RTCEN 0x08 // RTC enable +#define CYGARC_REG_RCR2_ADJ 0x04 // second adjustment +#define CYGARC_REG_RCR2_RESET 0x02 // reset +#define CYGARC_REG_RCR2_START 0x01 // start + +
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/include/mod_regs_ser.h @@ -0,0 +1,278 @@ +//============================================================================= +// +// mod_regs_ser.h +// +// SCI, SCIF, and IRDA (serial) Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// Note: All three serial module definitions kept in the same file +// since they share some of the information. +//####DESCRIPTIONEND#### +// +//============================================================================= + +//++++++ Module SCI ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +//-------------------------------------------------------------------------- +// Serial registers. All 8 bit registers. +#define CYGARC_REG_SCSMR 0xfffffe80 // serial mode register +#define CYGARC_REG_SCBRR 0xfffffe82 // bit rate register +#define CYGARC_REG_SCSCR 0xfffffe84 // serial control register +#define CYGARC_REG_SCTDR 0xfffffe86 // transmit data register +#define CYGARC_REG_SCSSR 0xfffffe88 // serial status register +#define CYGARC_REG_SCRDR 0xfffffe8a // receive data register + +// Serial Mode Register +#define CYGARC_REG_SCSMR_CA 0x80 // communication mode +#define CYGARC_REG_SCSMR_CHR 0x40 // character length (7 if set) +#define CYGARC_REG_SCSMR_PE 0x20 // parity enable +#define CYGARC_REG_SCSMR_OE 0x10 // parity mode +#define CYGARC_REG_SCSMR_STOP 0x08 // stop bit length +#define CYGARC_REG_SCSMR_MP 0x04 // multiprocessor mode +#define CYGARC_REG_SCSMR_CKS1 0x02 // clock select 1 +#define CYGARC_REG_SCSMR_CKS0 0x01 // clock select 0 +#define CYGARC_REG_SCSMR_CKSx_MASK 0x03 // mask + +// Serial Control Register +#define CYGARC_REG_SCSCR_TIE 0x80 // transmit interrupt enable +#define CYGARC_REG_SCSCR_RIE 0x40 // receive interrupt enable +#define CYGARC_REG_SCSCR_TE 0x20 // transmit enable +#define CYGARC_REG_SCSCR_RE 0x10 // receive enable +#define CYGARC_REG_SCSCR_MPIE 0x08 // multiprocessor interrupt enable +#define CYGARC_REG_SCSCR_TEIE 0x04 // transmit-end interrupt enable +#define CYGARC_REG_SCSCR_CKE1 0x02 // clock enable 1 +#define CYGARC_REG_SCSCR_CKE0 0x01 // clock enable 0 + +// Serial Status Register +#define CYGARC_REG_SCSSR_TDRE 0x80 // transmit data register empty +#define CYGARC_REG_SCSSR_RDRF 0x40 // receive data register full +#define CYGARC_REG_SCSSR_ORER 0x20 // overrun error +#define CYGARC_REG_SCSSR_FER 0x10 // framing error +#define CYGARC_REG_SCSSR_PER 0x08 // parity error +#define CYGARC_REG_SCSSR_TEND 0x04 // transmit end +#define CYGARC_REG_SCSSR_MPB 0x02 // multiprocessor bit +#define CYGARC_REG_SCSSR_MPBT 0x01 // multiprocessor bit transfer + +// When clearing the status register, always write the value: +// CYGARC_REG_SCSSR_CLEARMASK & ~bit +// to prevent other bits than the one of interest to be cleared. +#define CYGARC_REG_SCSSR_CLEARMASK 0xf8 + + +#if (CYGARC_SH_MOD_SCI >= 2) +# define CYGARC_REG_SCSPTR 0xfffffe7c // serial port register +#endif + + +// Baud rate values calculation, depending on peripheral clock (Pf) +// n is CKS setting (0-3) +// N = (Pf/(64*2^(2n-1)*B))-1 +// With CYGARC_SCBRR_CKSx providing the values 1, 4, 16, 64 we get +// N = (Pf/(32*_CKS*B))-1 +// +// The CYGARC_SCBRR_OPTIMAL_CKS macro should compute the minimal CKS +// setting for the given baud rate and peripheral clock. +// +// The error of the CKS+count value can be computed by: +// E(%) = ((Pf/((N+1)*B*(64^(n-1)))-1)*100 +// +#define CYGARC_SCBRR_PRESCALE(_b_) \ +((((CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED/32/1/(_b_))-1)<256) ? 1 : \ + (((CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED/32/4/(_b_))-1)<256) ? 4 : \ + (((CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED/32/16/(_b_))-1)<256) ? 16 : 64) + +// These two macros provide the static values we need to stuff into the +// registers. +#define CYGARC_SCBRR_CKSx(_b_) \ + ((1 == CYGARC_SCBRR_PRESCALE(_b_)) ? 0 : \ + (4 == CYGARC_SCBRR_PRESCALE(_b_)) ? 1 : \ + (16 == CYGARC_SCBRR_PRESCALE(_b_)) ? 2 : 3) +#define CYGARC_SCBRR_N(_b_) \ + (((_b_) < 4800) ? 0 : \ + ((_b_) > 115200) ? 0 : \ + ((CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED/32/CYGARC_SCBRR_PRESCALE(_b_)/(_b_))-1)) + + +//++++++ Module IRDA +++++++++++++++++++++++++++++++++++++++++++++++++++++++ +#ifdef CYGARC_SH_MOD_IRDA + +//-------------------------------------------------------------------------- +// IrDA (infrared data association). Can also act as regular serial w FIFO + +#define CYGARC_REG_SCSMR1 0xa4000140 +#define CYGARC_REG_SCBRR1 0xa4000142 +#define CYGARC_REG_SCSCR1 0xa4000144 +#define CYGARC_REG_SCFTDR1 0xa4000146 +#define CYGARC_REG_SCSSR1 0xa4000148 +#define CYGARC_REG_SCFRDR1 0xa400014a +#define CYGARC_REG_SCFCR1 0xa400014c +#define CYGARC_REG_SCFDR1 0xa400014e + +// Serial Mode Register +#define CYGARC_REG_SCSMR1_IRMOD 0x80 // IrDA Mode +#define CYGARC_REG_SCSMR1_ICK_MASK 0x78 // IR pulse width +#define CYGARC_REG_SCSMR1_PSEL 0x04 // IR pulse selector(?) +#define CYGARC_REG_SCSMR1_CKS1 0x02 // clock select 1 +#define CYGARC_REG_SCSMR1_CKS0 0x01 // clock select 0 +#define CYGARC_REG_SCSMR1_CKSx_MASK 0x03 // mask + +// Serial Control Register +#define CYGARC_REG_SCSCR1_TIE 0x80 // transmit interrupt enable +#define CYGARC_REG_SCSCR1_RIE 0x40 // receive interrupt enable +#define CYGARC_REG_SCSCR1_TE 0x20 // transmit enable +#define CYGARC_REG_SCSCR1_RE 0x10 // receive enable +#define CYGARC_REG_SCSCR1_CKE1 0x02 // clock enable 1 +#define CYGARC_REG_SCSCR1_CKE0 0x01 // clock enable 0 + +// Serial Status Register +#define CYGARC_REG_SCSSR1_PER_MASK 0xf000 // number of parity errors +#define CYGARC_REG_SCSSR1_PER_shift 12 +#define CYGARC_REG_SCSSR1_FER_MASK 0x0f00 // number of framing errors +#define CYGARC_REG_SCSSR1_FER_shift 8 +#define CYGARC_REG_SCSSR1_ER 0x0080 // receive error +#define CYGARC_REG_SCSSR1_TEND 0x0040 // transmit end +#define CYGARC_REG_SCSSR1_TDFE 0x0020 // transmit fifo data empty +#define CYGARC_REG_SCSSR1_BRK 0x0010 // break detection +#define CYGARC_REG_SCSSR1_FER 0x0008 // framing error +#define CYGARC_REG_SCSSR1_PER 0x0004 // parity error +#define CYGARC_REG_SCSSR1_RDF 0x0002 // receive fifo data full +#define CYGARC_REG_SCSSR1_DR 0x0001 // receive data ready + +// When clearing the status register, always write the value: +// CYGARC_REG_SCSSR2_CLEARMASK & ~bit +// to prevent other bits than the one of interest to be cleared. +#define CYGARC_REG_SCSSR1_CLEARMASK 0xf3 + +// Serial FIFO Control Register +#define CYGARC_REG_SCFCR1_RTRG_MASK 0xc0 // receive fifo data trigger +#define CYGARC_REG_SCFCR1_RTRG_1 0x00 // trigger on 1 char +#define CYGARC_REG_SCFCR1_RTRG_4 0x40 // trigger on 4 chars +#define CYGARC_REG_SCFCR1_RTRG_8 0x80 // trigger on 8 chars +#define CYGARC_REG_SCFCR1_RTRG_14 0xc0 // trigger on 14 chars + +#define CYGARC_REG_SCFCR1_TTRG_MASK 0x30 // transmit fifo data trigger +#define CYGARC_REG_SCFCR1_TTRG_8 0x00 // trigger on 8 chars +#define CYGARC_REG_SCFCR1_TTRG_4 0x10 // trigger on 4 chars +#define CYGARC_REG_SCFCR1_TTRG_2 0x20 // trigger on 2 chars +#define CYGARC_REG_SCFCR1_TTRG_1 0x30 // trigger on 1 char + +#define CYGARC_REG_SCFCR1_MCE 0x08 // modem control enable +#define CYGARC_REG_SCFCR1_TFRST 0x04 // transmit fifo reset +#define CYGARC_REG_SCFCR1_RFRST 0x02 // receive fifo reset +#define CYGARC_REG_SCFCR1_LOOP 0x01 // loop back test + + +// Serial FIFO Data Count Set Register +#define CYGARC_REG_SCFDR1_RCOUNT_MASK 0x001f // number of chars in r fifo +#define CYGARC_REG_SCFDR1_RCOUNT_shift 0 +#define CYGARC_REG_SCFDR1_TCOUNT_MASK 0x1f00 // number of chars in t fifo +#define CYGARC_REG_SCFDR1_TCOUNT_shift 8 + +#endif // CYGARC_SH_MOD_IRDA + +//++++++ Module SCIF +++++++++++++++++++++++++++++++++++++++++++++++++++++++ +#ifdef CYGARC_SH_MOD_SCIF + +//-------------------------------------------------------------------------- +// Serial w FIFO registers + +#define CYGARC_REG_SCSMR2 0xa4000150 // Serial mode +#define CYGARC_REG_SCBRR2 0xa4000152 // Bit rate +#define CYGARC_REG_SCSCR2 0xa4000154 // Serial control +#define CYGARC_REG_SCFTDR2 0xa4000156 // Transmit FIFO data +#define CYGARC_REG_SCSSR2 0xa4000158 // Serial status +#define CYGARC_REG_SCFRDR2 0xa400015a // Receive data FIFO +#define CYGARC_REG_SCFCR2 0xa400015c // FIFO control register +#define CYGARC_REG_SCFDR2 0xa400015e // FIFO data count set + +// Serial Mode Register +#define CYGARC_REG_SCSMR2_CHR 0x40 // character length (7 if set) +#define CYGARC_REG_SCSMR2_PE 0x20 // parity enable +#define CYGARC_REG_SCSMR2_OE 0x10 // parity mode +#define CYGARC_REG_SCSMR2_STOP 0x08 // stop bit length +#define CYGARC_REG_SCSMR2_CKS1 0x02 // clock select 1 +#define CYGARC_REG_SCSMR2_CKS0 0x01 // clock select 0 +#define CYGARC_REG_SCSMR2_CKSx_MASK 0x03 // mask + +// Serial Control Register +#define CYGARC_REG_SCSCR2_TIE 0x80 // transmit interrupt enable +#define CYGARC_REG_SCSCR2_RIE 0x40 // receive interrupt enable +#define CYGARC_REG_SCSCR2_TE 0x20 // transmit enable +#define CYGARC_REG_SCSCR2_RE 0x10 // receive enable +#define CYGARC_REG_SCSCR2_CKE1 0x02 // clock enable 1 +#define CYGARC_REG_SCSCR2_CKE0 0x01 // clock enable 0 + +// Serial Status Register +#define CYGARC_REG_SCSSR2_PER_MASK 0xf000 // number of parity errors +#define CYGARC_REG_SCSSR2_PER_shift 12 +#define CYGARC_REG_SCSSR2_FER_MASK 0x0f00 // number of framing errors +#define CYGARC_REG_SCSSR2_FER_shift 8 +#define CYGARC_REG_SCSSR2_ER 0x0080 // receive error +#define CYGARC_REG_SCSSR2_TEND 0x0040 // transmit end +#define CYGARC_REG_SCSSR2_TDFE 0x0020 // transmit fifo data empty +#define CYGARC_REG_SCSSR2_BRK 0x0010 // break detection +#define CYGARC_REG_SCSSR2_FER 0x0008 // framing error +#define CYGARC_REG_SCSSR2_PER 0x0004 // parity error +#define CYGARC_REG_SCSSR2_RDF 0x0002 // receive fifo data full +#define CYGARC_REG_SCSSR2_DR 0x0001 // receive data ready + +// When clearing the status register, always write the value: +// CYGARC_REG_SCSSR2_CLEARMASK & ~bit +// to prevent other bits than the one of interest to be cleared. +#define CYGARC_REG_SCSSR2_CLEARMASK 0xf3 + +// Serial FIFO Control Register +#define CYGARC_REG_SCFCR2_RTRG_MASK 0xc0 // receive fifo data trigger +#define CYGARC_REG_SCFCR2_RTRG_1 0x00 // trigger on 1 char +#define CYGARC_REG_SCFCR2_RTRG_4 0x40 // trigger on 4 chars +#define CYGARC_REG_SCFCR2_RTRG_8 0x80 // trigger on 8 chars +#define CYGARC_REG_SCFCR2_RTRG_14 0xc0 // trigger on 14 chars + +#define CYGARC_REG_SCFCR2_TTRG_MASK 0x30 // transmit fifo data trigger +#define CYGARC_REG_SCFCR2_TTRG_8 0x00 // trigger on 8 chars +#define CYGARC_REG_SCFCR2_TTRG_4 0x10 // trigger on 4 chars +#define CYGARC_REG_SCFCR2_TTRG_2 0x20 // trigger on 2 chars +#define CYGARC_REG_SCFCR2_TTRG_1 0x30 // trigger on 1 char + +#define CYGARC_REG_SCFCR2_MCE 0x08 // modem control enable +#define CYGARC_REG_SCFCR2_TFRST 0x04 // transmit fifo reset +#define CYGARC_REG_SCFCR2_RFRST 0x02 // receive fifo reset +#define CYGARC_REG_SCFCR2_LOOP 0x01 // loop back test + + +// Serial FIFO Data Count Set Register +#define CYGARC_REG_SCFDR2_RCOUNT_MASK 0x001f // number of chars in r fifo +#define CYGARC_REG_SCFDR2_RCOUNT_shift 0 +#define CYGARC_REG_SCFDR2_TCOUNT_MASK 0x1f00 // number of chars in t fifo +#define CYGARC_REG_SCFDR2_TCOUNT_shift 8 + +#endif // CYGARC_SH_MOD_SCIF
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/include/mod_regs_tmu.h @@ -0,0 +1,79 @@ +//============================================================================= +// +// mod_regs_tmu.h +// +// TMU (timer unit) Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//-------------------------------------------------------------------------- +// TMU registers +#define CYGARC_REG_TOCR 0xfffffe90 // 8 bit +#define CYGARC_REG_TSTR 0xfffffe92 // 8 bit +#define CYGARC_REG_TCOR0 0xfffffe94 // 32 bit +#define CYGARC_REG_TCNT0 0xfffffe98 // 32 bit +#define CYGARC_REG_TCR0 0xfffffe9c // 16 bit +#define CYGARC_REG_TCOR1 0xfffffea0 // 32 bit +#define CYGARC_REG_TCNT1 0xfffffea4 // 32 bit +#define CYGARC_REG_TCR1 0xfffffea8 // 16 bit +#define CYGARC_REG_TCOR2 0xfffffeac // 32 bit +#define CYGARC_REG_TCNT2 0xfffffeb0 // 32 bit +#define CYGARC_REG_TCR2 0xfffffeb4 // 16 bit +#define CYGARC_REG_TCPR2 0xfffffeb8 // 32 bit + +// TSTR +#define CYGARC_REG_TSTR_STR0 0x0001 +#define CYGARC_REG_TSTR_STR1 0x0002 +#define CYGARC_REG_TSTR_STR2 0x0004 + +// TCR0/1/2 +#define CYGARC_REG_TCR_TPSC0 0x0001 +#define CYGARC_REG_TCR_TPSC1 0x0002 +#define CYGARC_REG_TCR_TPSC2 0x0004 +#define CYGARC_REG_TCR_CKEG0 0x0008 +#define CYGARC_REG_TCR_CKEG1 0x0010 +#define CYGARC_REG_TCR_UNIE 0x0020 +#define CYGARC_REG_TCR_UNF 0x0100 + +#define CYGARC_REG_TCR_TPSC_4 (0) +#define CYGARC_REG_TCR_TPSC_16 (CYGARC_REG_TCR_TPSC0) +#define CYGARC_REG_TCR_TPSC_64 (CYGARC_REG_TCR_TPSC1) +#define CYGARC_REG_TCR_TPSC_256 (CYGARC_REG_TCR_TPSC0|CYGARC_REG_TCR_TPSC1) + +// TCR2 additional bits +#define CYGARC_REG_TCR_ICPE0 0x0040 +#define CYGARC_REG_TCR_ICPE1 0x0080 +#define CYGARC_REG_TCR_ICPF 0x0200
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/include/mod_regs_ubc.h @@ -0,0 +1,95 @@ +//============================================================================= +// +// mod_regs_ubc.h +// +// UBC (user break controller) Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//-------------------------------------------------------------------------- +// User Break Control +#define CYGARC_REG_BRCR 0xffffff98 // 16 bit + +#define CYGARC_REG_BARA 0xffffffb0 // 32 bit +#define CYGARC_REG_BAMRA 0xffffffb4 // 8 bit (v1) / 32 bit +#define CYGARC_REG_BBRA 0xffffffb8 // 16 bit +#define CYGARC_REG_BASRA 0xffffffe4 // 8 bit + +#define CYGARC_REG_BARB 0xffffffa0 // 32 bit +#define CYGARC_REG_BAMRB 0xffffffa4 // 8 bit (v1) / 32 bit +#define CYGARC_REG_BASRB 0xffffffe8 // 8 bit +#define CYGARC_REG_BBRB 0xffffffa8 // 16 bit +#define CYGARC_REG_BDRB 0xffffff90 // 32 bit +#define CYGARC_REG_BDMRB 0xffffff94 // 32 bit + + +#define CYGARC_REG_BRCR_CMFA 0x8000 // condition match flag A +#define CYGARC_REG_BRCR_CMFB 0x4000 // condition match flag B +#define CYGARC_REG_BRCR_PCBA 0x0400 // post execute channel A +#define CYGARC_REG_BRCR_DBEB 0x0080 // data break enable B +#define CYGARC_REG_BRCR_PCBB 0x0040 // post execute channel B +#define CYGARC_REG_BRCR_SEQ 0x0008 // sequence condition select + +#if (CYGARC_SH_MOD_UBC == 1) +#define CYGARC_REG_BAMRA_BASMA 0x04 // BASRA masked +#define CYGARC_REG_BAMRA_BARA_UNMASKED 0x00 // BARA not masked +#define CYGARC_REG_BAMRA_BARA_10BIT 0x01 // Lowest 10 bit masked +#define CYGARC_REG_BAMRA_BARA_12BIT 0x02 // Lowest 12 bit masked +#define CYGARC_REG_BAMRA_BARA_MASKED 0x03 // All bits masked +#else +// mask is fully configurable in other versions of the UBC +#endif + +#define CYGARC_REG_BBRA_DFETCH 0x0020 // Break on DFETCH +#define CYGARC_REG_BBRA_IFETCH 0x0010 // Break on IFETCH +#define CYGARC_REG_BBRA_WRITE 0x0008 // Break on WRITE +#define CYGARC_REG_BBRA_READ 0x0004 // Break on READ +#define CYGARC_REG_BBRA_SIZE_LONG 0x0003 // Break on long access +#define CYGARC_REG_BBRA_SIZE_WORD 0x0002 // Break on word access +#define CYGARC_REG_BBRA_SIZE_BYTE 0x0001 // Break on byte access +#define CYGARC_REG_BBRA_SIZE_ANY 0x0000 // Break on any size + + +//---------------------------------------------------------------------------- +// Other types +#if (CYGARC_SH_MOD_UBC >= 3) +#define CYGARC_REG_BETR 0xffffff9c // 16 bit +#define CYGARC_REG_BRSR 0xffffffac // 32 bit +#define CYGARC_REG_BRDR 0xffffffbc // 32 bit + +#define CYGARC_REG_BBRA_DMA 0x0080 // Break on DMAC cycle +#define CYGARC_REG_BBRA_CPU 0x0040 // Break on CPU cycle +#endif
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/include/sh3_sci.h @@ -0,0 +1,81 @@ +//============================================================================= +// +// sh3_sci.h +// +// Simple driver for the SH Serial Communication Interface (SCI) +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 1999-05-17 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> + +#ifdef CYGNUM_HAL_SH_SH3_SCI_PORTS + +//-------------------------------------------------------------------------- +// SCI register offsets +#if (CYGARC_SH_MOD_SCI >= 2) +# define _REG_SCSPTR -0x4 // serial port register +#endif +#define _REG_SCSMR 0x0 // serial mode register +#define _REG_SCBRR 0x2 // bit rate register +#define _REG_SCSCR 0x4 // serial control register +#define _REG_SCTDR 0x6 // transmit data register +#define _REG_SCSSR 0x8 // serial status register +#define _REG_SCRDR 0xa // receive data register + +//-------------------------------------------------------------------------- + +typedef struct { + cyg_uint8* base; + cyg_int32 msec_timeout; + int isr_vector; +} channel_data_t; + +//-------------------------------------------------------------------------- + +#if !defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) +// This one should only be used by old-stub compatibility code! +externC void cyg_hal_plf_sci_init_channel(const channel_data_t* chan); +#endif + +externC cyg_uint8 cyg_hal_plf_sci_getc(void* __ch_data); +externC void cyg_hal_plf_sci_putc(void* __ch_data, cyg_uint8 c); +externC void cyg_hal_plf_sci_init(int sci_index, int comm_index, + int rcv_vect, cyg_uint8* base); + + +#endif // CYGNUM_HAL_SH_SH3_SCI_PORTS +//----------------------------------------------------------------------------- +// end of sh3_sci.h
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/include/sh3_scif.h @@ -0,0 +1,88 @@ +//============================================================================= +// +// sh3_scif.h +// +// Simple driver for the SH3 Serial Communication Interface with FIFO +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-03-30 +// Description: Simple driver for the SH Serial Communication Interface +// The driver can be used for either the SCIF or the IRDA +// modules (the latter can act as the former). +// Clients of this file can configure the behavior with: +// CYGNUM_SCIF_PORTS: number of SCI ports +// +// Note: It should be possible to configure a channel to IRDA mode. +// Worry about that when some board needs it. +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> + +#ifdef CYGNUM_HAL_SH_SH3_SCIF_PORTS + +//-------------------------------------------------------------------------- +// SCIF register offsets +#define _REG_SCSMR 0x00 +#define _REG_SCBRR 0x02 +#define _REG_SCSCR 0x04 +#define _REG_SCFTDR 0x06 +#define _REG_SCSSR 0x08 +#define _REG_SCFRDR 0x0a +#define _REG_SCFCR 0x0c +#define _REG_SCFDR 0x0e + +//-------------------------------------------------------------------------- + +typedef struct { + cyg_uint8* base; + cyg_int32 msec_timeout; + int isr_vector; +} channel_data_t; + +//-------------------------------------------------------------------------- + +#if !defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) +// This one should only be used by old-stub compatibility code! +externC void cyg_hal_plf_scif_init_channel(const channel_data_t* chan); +#endif + +externC cyg_uint8 cyg_hal_plf_scif_getc(void* __ch_data); +externC void cyg_hal_plf_scif_putc(void* __ch_data, cyg_uint8 c); +void cyg_hal_plf_scif_init(int scif_index, int comm_index, + int rcv_vect, cyg_uint8* base); + + +#endif // CYGNUM_HAL_SH_SH3_SCIF_PORTS +//----------------------------------------------------------------------------- +// end of sh3_scif.h
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/include/var_cache.h @@ -0,0 +1,295 @@ +#ifndef CYGONCE_VAR_CACHE_H +#define CYGONCE_VAR_CACHE_H + +//============================================================================= +// +// var_cache.h +// +// HAL variant cache control API +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 1999-04-23 +// Purpose: Cache control API +// Description: The macros defined here provide the HAL APIs for handling +// cache control operations. +// Usage: +// #include <cyg/hal/hal_cache.h> +// ... +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/system.h> +#include <pkgconf/hal.h> +#include <cyg/infra/cyg_type.h> +#include <cyg/hal/hal_io.h> // HAL_READ/WRITE macros + +#include CYGBLD_HAL_CPU_MODULES_H // cache module specs + +#include <cyg/hal/sh_regs.h> // CYGARC_REG_ definitions + +//----------------------------------------------------------------------------- +// Cache dimensions - one unified cache + +#define HAL_CACHE_UNIFIED + +#define HAL_UCACHE_SIZE CYGARC_SH_MOD_CAC_SIZE +#define HAL_UCACHE_LINE_SIZE CYGARC_SH_MOD_CAC_LINE_SIZE +#define HAL_UCACHE_WAYS CYGARC_SH_MOD_CAC_WAYS + +// Cache addressing information +#define CYGARC_REG_CACHE_ADDRESS_BASE CYGARC_SH_MOD_CAC_ADDRESS_BASE +#define CYGARC_REG_CACHE_ADDRESS_TOP CYGARC_SH_MOD_CAC_ADDRESS_TOP +#define CYGARC_REG_CACHE_ADDRESS_STEP CYGARC_SH_MOD_CAC_ADDRESS_STEP + +// Writing this to a cache address entry forces a flush of the line if +// it is dirty. +#define CYGARC_REG_CACHE_ADDRESS_FLUSH CYGARC_SH_MOD_CAC_ADDRESS_FLUSH + +#define HAL_UCACHE_SETS (HAL_UCACHE_SIZE/(HAL_UCACHE_LINE_SIZE*HAL_UCACHE_WAYS)) + +//----------------------------------------------------------------------------- +// Global control of cache + +// This is all handled in assembly (see variant.S) due to a requirement about +// not fiddling the cache from cachable memory. + +externC void cyg_hal_cache_enable(void); +externC void cyg_hal_cache_disable(void); +externC void cyg_hal_cache_invalidate_all(void); +externC void cyg_hal_cache_sync(void); +externC void cyg_hal_cache_sync_region(cyg_haladdress base, + cyg_haladdrword len); +externC void cyg_hal_cache_write_mode(int mode); + +// Enable the cache +#define HAL_UCACHE_ENABLE() cyg_hal_cache_enable() + +// Disable the cache +#define HAL_UCACHE_DISABLE() cyg_hal_cache_disable() + +// Invalidate the entire cache +#define HAL_UCACHE_INVALIDATE_ALL() cyg_hal_cache_invalidate_all() + +// Synchronize the contents of the cache with memory. +#define HAL_UCACHE_SYNC() cyg_hal_cache_sync() + +// Query the state of the cache (does not affect the caching) +#define HAL_UCACHE_IS_ENABLED(_state_) \ + CYG_MACRO_START \ + HAL_READ_UINT32(CYGARC_REG_CCR, (_state_)); \ + (_state_) &= ~CYGARC_REG_CCR_CE; \ + CYG_MACRO_END + +// Set the cache refill burst size +//#define HAL_UCACHE_BURST_SIZE(_size_) + +// Set the cache write mode +#define HAL_UCACHE_WRITE_MODE( _mode_ ) \ + CYG_MACRO_START \ + cyg_uint32 _m_; \ + if (HAL_UCACHE_WRITETHRU_MODE == _mode_) \ + _m_ = CYGARC_REG_CCR_WT; \ + else \ + _m_ = CYGARC_REG_CCR_CB; \ + cyg_hal_cache_write_mode(_m_); \ + CYG_MACRO_END + +#define HAL_UCACHE_WRITETHRU_MODE 0 +#define HAL_UCACHE_WRITEBACK_MODE 1 + +// This macro allows the client to specify separate modes for the two +// regions. +#define HAL_UCACHE_WRITE_MODE_SH( _mode_ ) cyg_hal_cache_write_mode(_mode_) + +// Load the contents of the given address range into the cache +// and then lock the cache so that it stays there. +//#define HAL_UCACHE_LOCK(_base_, _size_) + +// Undo a previous lock operation +//#define HAL_UCACHE_UNLOCK(_base_, _size_) + +// Unlock entire cache +//#define HAL_UCACHE_UNLOCK_ALL() + +//----------------------------------------------------------------------------- +// Cache line control + +// Allocate cache lines for the given address range without reading its +// contents from memory. +//#define HAL_UCACHE_ALLOCATE( _base_ , _size_ ) + +// Write dirty cache lines to memory and invalidate the cache entries +// for the given address range. +#define HAL_UCACHE_FLUSH( _base_ , _size_ ) \ + cyg_hal_cache_sync_region((cyg_haladdress) _base_, (cyg_haladdrword)_size_) + +// Invalidate cache lines in the given range without writing to memory. +//#define HAL_UCACHE_INVALIDATE( _base_ , _size_ ) + +// Write dirty cache lines to memory for the given address range. +//#define HAL_UCACHE_STORE( _base_ , _size_ ) + + +// Preread the given range into the cache with the intention of reading +// from it later. +//#define HAL_UCACHE_READ_HINT( _base_ , _size_ ) + +// Preread the given range into the cache with the intention of writing +// to it later. +//#define HAL_UCACHE_WRITE_HINT( _base_ , _size_ ) + +// Allocate and zero the cache lines associated with the given range. +//#define HAL_UCACHE_ZERO( _base_ , _size_ ) + + +//----------------------------------------------------------------------------- +// Data and instruction cache macros map onto the both-cache macros + +//----------------------------------------------------------------------------- +// Global control of data cache + +#define HAL_DCACHE_SIZE HAL_UCACHE_SIZE +#define HAL_DCACHE_LINE_SIZE HAL_UCACHE_LINE_SIZE +#define HAL_DCACHE_WAYS HAL_UCACHE_WAYS +#define HAL_DCACHE_SETS HAL_UCACHE_SETS + +// Enable the data cache +#define HAL_DCACHE_ENABLE() HAL_UCACHE_ENABLE() + +// Disable the data cache +#define HAL_DCACHE_DISABLE() HAL_UCACHE_DISABLE() + +// Invalidate the entire cache +#define HAL_DCACHE_INVALIDATE_ALL() HAL_UCACHE_INVALIDATE_ALL() + +// Synchronize the contents of the cache with memory. +#define HAL_DCACHE_SYNC() HAL_UCACHE_SYNC() + +// Query the state of the data cache +#define HAL_DCACHE_IS_ENABLED(_state_) HAL_UCACHE_IS_ENABLED(_state_) + +// Set the data cache refill burst size +//#define HAL_DCACHE_BURST_SIZE(_size_) + +// Set the data cache write mode +//#define HAL_DCACHE_WRITE_MODE( _mode_ ) + +//#define HAL_DCACHE_WRITETHRU_MODE 0 +//#define HAL_DCACHE_WRITEBACK_MODE 1 + +// Load the contents of the given address range into the data cache +// and then lock the cache so that it stays there. +//#define HAL_DCACHE_LOCK(_base_, _size_) + +// Undo a previous lock operation +//#define HAL_DCACHE_UNLOCK(_base_, _size_) + +// Unlock entire cache +//#define HAL_DCACHE_UNLOCK_ALL() + +//----------------------------------------------------------------------------- +// Data cache line control + +// Allocate cache lines for the given address range without reading its +// contents from memory. +//#define HAL_DCACHE_ALLOCATE( _base_ , _size_ ) + +// Write dirty cache lines to memory and invalidate the cache entries +// for the given address range. +#define HAL_DCACHE_FLUSH( _base_ , _size_ ) HAL_UCACHE_FLUSH( _base_, _size_ ) + +// Invalidate cache lines in the given range without writing to memory. +//#define HAL_DCACHE_INVALIDATE( _base_ , _size_ ) + +// Write dirty cache lines to memory for the given address range. +//#define HAL_DCACHE_STORE( _base_ , _size_ ) + +// Preread the given range into the cache with the intention of reading +// from it later. +//#define HAL_DCACHE_READ_HINT( _base_ , _size_ ) + +// Preread the given range into the cache with the intention of writing +// to it later. +//#define HAL_DCACHE_WRITE_HINT( _base_ , _size_ ) + +// Allocate and zero the cache lines associated with the given range. +//#define HAL_DCACHE_ZERO( _base_ , _size_ ) + +//----------------------------------------------------------------------------- +// Global control of Instruction cache + +#define HAL_ICACHE_SIZE HAL_UCACHE_SIZE +#define HAL_ICACHE_LINE_SIZE HAL_UCACHE_LINE_SIZE +#define HAL_ICACHE_WAYS HAL_UCACHE_WAYS +#define HAL_ICACHE_SETS HAL_UCACHE_SETS + +// Enable the instruction cache +#define HAL_ICACHE_ENABLE() HAL_UCACHE_ENABLE() + +// Disable the instruction cache +#define HAL_ICACHE_DISABLE() HAL_UCACHE_DISABLE() + +// Invalidate the entire cache +#define HAL_ICACHE_INVALIDATE_ALL() HAL_UCACHE_INVALIDATE_ALL() + + +// Synchronize the contents of the cache with memory. +#define HAL_ICACHE_SYNC() HAL_UCACHE_SYNC() + +// Query the state of the instruction cache +#define HAL_ICACHE_IS_ENABLED(_state_) HAL_UCACHE_IS_ENABLED(_state_) + +// Set the instruction cache refill burst size +//#define HAL_ICACHE_BURST_SIZE(_size_) + +// Load the contents of the given address range into the instruction cache +// and then lock the cache so that it stays there. + +//#define HAL_ICACHE_LOCK(_base_, _size_) + +// Undo a previous lock operation +//#define HAL_ICACHE_UNLOCK(_base_, _size_) + +// Unlock entire cache +//#define HAL_ICACHE_UNLOCK_ALL() + +//----------------------------------------------------------------------------- +// Instruction cache line control + +// Invalidate cache lines in the given range without writing to memory. +//#define HAL_ICACHE_INVALIDATE( _base_ , _size_ ) + +//----------------------------------------------------------------------------- +#endif // ifndef CYGONCE_VAR_CACHE_H +// End of var_cache.h
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/include/var_intr.h @@ -0,0 +1,113 @@ +#ifndef CYGONCE_VAR_INTR_H +#define CYGONCE_VAR_INTR_H + +//========================================================================== +// +// var_intr.h +// +// HAL variant interrupt and clock support +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors: jskov, +// Date: 1999-04-24 +// Purpose: Define Interrupt support +// Description: The macros defined here provide the HAL APIs for handling +// interrupts and the clock. +// +// Usage: +// #include <cyg/hal/hal_intr.h> +// ... +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <pkgconf/hal.h> +#include CYGBLD_HAL_CPU_MODULES_H // INTC module selection + +//---------------------------------------------------------------------------- +// Additional vectors provided by INTC V2 + +#if (CYGARC_SH_MOD_INTC >= 2) +#define CYGNUM_HAL_INTERRUPT_RESERVED_5C0 32 +#define CYGNUM_HAL_INTERRUPT_HUDI_HUDI 33 +#define CYGNUM_HAL_INTERRUPT_IRQ_IRQ0 34 +#define CYGNUM_HAL_INTERRUPT_IRQ_IRQ1 35 +#define CYGNUM_HAL_INTERRUPT_IRQ_IRQ2 36 +#define CYGNUM_HAL_INTERRUPT_IRQ_IRQ3 37 +#define CYGNUM_HAL_INTERRUPT_IRQ_IRQ4 38 +#define CYGNUM_HAL_INTERRUPT_IRQ_IRQ5 39 +#define CYGNUM_HAL_INTERRUPT_RESERVED_6C0 40 +#define CYGNUM_HAL_INTERRUPT_RESERVED_6E0 41 +#define CYGNUM_HAL_INTERRUPT_PINT_PINT07 42 +#define CYGNUM_HAL_INTERRUPT_PINT_PINT8F 43 +#define CYGNUM_HAL_INTERRUPT_RESERVED_740 44 +#define CYGNUM_HAL_INTERRUPT_RESERVED_760 45 +#define CYGNUM_HAL_INTERRUPT_RESERVED_780 46 +#define CYGNUM_HAL_INTERRUPT_RESERVED_7A0 47 +#define CYGNUM_HAL_INTERRUPT_RESERVED_7C0 48 +#define CYGNUM_HAL_INTERRUPT_RESERVED_7E0 59 +#define CYGNUM_HAL_INTERRUPT_DMAC_DEI0 50 +#define CYGNUM_HAL_INTERRUPT_DMAC_DEI1 51 +#define CYGNUM_HAL_INTERRUPT_DMAC_DEI2 52 +#define CYGNUM_HAL_INTERRUPT_DMAC_DEI3 53 +#define CYGNUM_HAL_INTERRUPT_IRDA_ERI1 54 +#define CYGNUM_HAL_INTERRUPT_IRDA_RXI1 55 +#define CYGNUM_HAL_INTERRUPT_IRDA_BRI1 56 +#define CYGNUM_HAL_INTERRUPT_IRDA_TXI1 57 +#define CYGNUM_HAL_INTERRUPT_SCIF_ERI2 58 +#define CYGNUM_HAL_INTERRUPT_SCIF_RXI2 59 +#define CYGNUM_HAL_INTERRUPT_SCIF_BRI2 60 +#define CYGNUM_HAL_INTERRUPT_SCIF_TXI2 61 +#define CYGNUM_HAL_INTERRUPT_ADC_ADI 62 + +#undef CYGNUM_HAL_ISR_MAX +#define CYGNUM_HAL_ISR_MAX CYGNUM_HAL_INTERRUPT_ADC_ADI + +#endif // CYGARC_SH_MOD_INTC >= 2 + +//---------------------------------------------------------------------------- +// Additional vectors provided by INTC V3 + +#if (CYGARC_SH_MOD_INTC >= 3) +#define CYGNUM_HAL_INTERRUPT_LCDC_LCDI 63 +#define CYGNUM_HAL_INTERRUPT_PCC_PCC0 64 +#define CYGNUM_HAL_INTERRUPT_PCC_PCC1 65 + +#undef CYGNUM_HAL_ISR_MAX +#define CYGNUM_HAL_ISR_MAX CYGNUM_HAL_INTERRUPT_PCC_PCC1 + +#endif // CYGARC_SH_MOD_INTC >= 3 + + +//-------------------------------------------------------------------------- +#endif // ifndef CYGONCE_VAR_INTR_H +// End of var_intr.h
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/include/var_regs.h @@ -0,0 +1,100 @@ +#ifndef CYGONCE_VAR_SH_REGS_H +#define CYGONCE_VAR_SH_REGS_H +//============================================================================= +// +// sh_regs.h +// +// SH CPU definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 1999-04-24 +// Purpose: Define CPU memory mapped registers etc. +// Usage: #include <cyg/hal/sh_regs.h> +// Notes: +// This file describes registers for on-core modules found in all +// the SH3 CPUs supported by the HAL. For each CPU is defined a +// module specification file (mod_<CPU model number>.h) which lists +// modules (and their version if applicable) included in that +// particular CPU model. Note that the versioning is ad hoc; +// it doesn't reflect Hitachi internal versioning in any way. +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +// Find out which modules are supported by the chosen CPU +#include <pkgconf/system.h> +#include CYGBLD_HAL_CPU_MODULES_H + +//========================================================================== +// CPU Definitions +//========================================================================== + +//-------------------------------------------------------------------------- +// Status register +#define CYGARC_REG_SR_MD 0x40000000 +#define CYGARC_REG_SR_RB 0x20000000 +#define CYGARC_REG_SR_BL 0x10000000 +#define CYGARC_REG_SR_M 0x00000200 +#define CYGARC_REG_SR_Q 0x00000100 +#define CYGARC_REG_SR_IMASK 0x000000f0 +#define CYGARC_REG_SR_I3 0x00000080 +#define CYGARC_REG_SR_I2 0x00000040 +#define CYGARC_REG_SR_I1 0x00000020 +#define CYGARC_REG_SR_I0 0x00000010 +#define CYGARC_REG_SR_S 0x00000002 +#define CYGARC_REG_SR_T 0x00000001 + + +//========================================================================== +// Module Definitions +//========================================================================== + +#include <cyg/hal/mod_regs_bsc.h> +#include <cyg/hal/mod_regs_cac.h> +#include <cyg/hal/mod_regs_cpg.h> +#include <cyg/hal/mod_regs_intc.h> +#include <cyg/hal/mod_regs_mmu.h> +#include <cyg/hal/mod_regs_rtc.h> +#include <cyg/hal/mod_regs_ser.h> +#include <cyg/hal/mod_regs_tmu.h> +#include <cyg/hal/mod_regs_ubc.h> + +#ifdef CYGARC_SH_MOD_DMAC +#include <cyg/hal/mod_regs_dma.h> +#endif +#ifdef CYGARC_SH_MOD_PFC +#include <cyg/hal/mod_regs_pfc.h> +#endif + +//-------------------------------------------------------------------------- +#endif // ifndef CYGONCE_VAR_SH_REGS_H +// End of var_regs.h
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/include/variant.inc @@ -0,0 +1,188 @@ +#ifndef CYGONCE_HAL_VARIANT_INC +#define CYGONCE_HAL_VARIANT_INC +##============================================================================= +## +## variant.inc +## +## SH3 variant assembler header file +## +##============================================================================= +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +##============================================================================= +#######DESCRIPTIONBEGIN#### +## +## Author(s): jskov +## Contributors:jskov +## Date: 2000-10-30 +## Purpose: SH3 variant definitions and init code +## Description: This file contains various definitions and macros that are +## useful for writing assembly code for the SH3 CPU family. +## Usage: +## #include <cyg/hal/variant.inc> +## ... +## +## +######DESCRIPTIONEND#### +## +##============================================================================= + +#include <pkgconf/hal.h> +#include <cyg/hal/sh_regs.h> + +#=========================================================================== +# SR initialization value +# zero all bits except: +# MD = Processor operation mode field (privileged mode) +# I0-3 = Mask out all interrupts but NMI. +# +# When saving or restoring the state of an exception or interrupt, the bit +# CYGARC_REG_SR_RB is also set, switching the register bank. When this bit +# is set, interrupts must be disabled. +# +# Note: We could also use the BL bit to prevent interrupts, but that would +# also prevent the use of breakpoints. + +#define CYG_SR (CYGARC_REG_SR_MD|CYGARC_REG_SR_IMASK) +#define CYG_SR_BANK1 (CYGARC_REG_SR_MD|CYGARC_REG_SR_IMASK|CYGARC_REG_SR_RB) + +##----------------------------------------------------------------------------- +## Hardware init macros +#ifndef CYGPKG_HAL_SH_POST_RESET_INIT + .macro hal_post_reset_init + # Initialize CPU + mov.l $nCYG_SR,r1 ! Put CPU in a well-known state + ldc r1,sr + mov #0,r0 + mov #CYGARC_REG_CCR,r1 ! Disable cache + mov.l r0,@r1 + mov #CYGARC_REG_MMUCR,r1 ! Disable MMU + mov.l r0,@r1 + mov #CYGARC_REG_BBRA,r1 ! Disable UBC Channel A + mov.w r0,@r1 + mov #CYGARC_REG_BBRB,r1 ! Disable UBC Channel B + mov.w r0,@r1 + mov #CYGARC_REG_BRCR,r1 ! Reset UBC common register + mov.w r0,@r1 + mov.l $CYGARC_REG_TSTR,r1 ! Disable timers + mov.b r0,@r1 + mov.l $CYGARC_REG_IPRA,r1 ! Disable interrupt request sources + mov.w r0,@r1 + mov.l $CYGARC_REG_IPRB,r1 + mov.w r0,@r1 +#if (CYGARC_SH_MOD_INTC >= 2) + mov.l $CYGARC_REG_IPRC,r1 + mov.w r0,@r1 + mov.l $CYGARC_REG_IPRD,r1 + mov.w r0,@r1 + mov.l $CYGARC_REG_IPRE,r1 + mov.w r0,@r1 +#if (CYGARC_SH_MOD_INTC >= 3) + mov.l $CYGARC_REG_IPRF,r1 + mov.w r0,@r1 +#endif + mov.w $nCYG_ICR1_INIT,r0 + mov.l $CYGARC_REG_ICR1,r1 ! Set interrupt controller to IRQ mode + mov.w r0,@r1 +#endif + mov.w $nCYG_WTCSR,r0 ! Clear watchdog + mov #CYGARC_REG_WTCSR,r1 + mov.w r0,@r1 + + # Initialize VBR if necessary +#if !defined(CYG_HAL_STARTUP_RAM) || \ + ( defined(CYG_HAL_STARTUP_RAM) && \ + !defined(CYGSEM_HAL_USE_ROM_MONITOR)) + mov.l $__reset,r1 ! Set VBR + ldc r1,vbr +#endif + bra 1f + nop + +$nCYG_WTCSR: + .word 0xa500 ! clear all CSR bits + + .align 2 +$nCYG_SR: + .long CYG_SR +$CYGARC_REG_TSTR: + .long CYGARC_REG_TSTR +$CYGARC_REG_IPRA: + .long CYGARC_REG_IPRA +$CYGARC_REG_IPRB: + .long CYGARC_REG_IPRB +#if (CYGARC_SH_MOD_INTC >= 2) +$CYGARC_REG_IPRC: + .long CYGARC_REG_IPRC +$CYGARC_REG_IPRD: + .long CYGARC_REG_IPRD +$CYGARC_REG_IPRE: + .long CYGARC_REG_IPRE +$CYGARC_REG_ICR1: + .long CYGARC_REG_ICR1 +$nCYG_ICR1_INIT: + .word CYGARC_REG_ICR1_INIT + .align 2 +#endif +#if (CYGARC_SH_MOD_INTC >= 3) +$CYGARC_REG_IPRF: + .long CYGARC_REG_IPRF +#endif +$__reset: + .long __reset + +1: + .endm +#define CYGPKG_HAL_SH_POST_RESET_INIT +#endif + +##----------------------------------------------------------------------------- +## Interrupt decode macros + .macro hal_intc_decode tmp,inum +#if (CYGARC_SH_MOD_INTC >= 2) + mov.l $nCYGARC_REG_INTEVT2,\tmp +#else + mov #CYGARC_REG_INTEVT,\tmp +#endif + mov.l @\tmp,\inum + mov #-5,\tmp ! divide cause by 0x20 + shld \tmp,\inum + add #-14,\inum ! adjust so NMI becomes 0 + + .endm + +#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN + .macro hal_intc_translate inum,vnum + mov #0,\vnum ! Just vector zero is supported + .endm +#else + .macro hal_intc_translate inum,vnum + mov \inum,\vnum ! Vector == interrupt number + shll2 \vnum ! get from vector number to ISR index + .endm +#endif + +#------------------------------------------------------------------------------ +#endif // CYGONCE_HAL_VARIANT_INC +# end of variant.inc
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/src/sh3_sci.c @@ -0,0 +1,307 @@ +//============================================================================= +// +// sh3_sci.c +// +// Simple driver for the SH Serial Communication Interface (SCI) +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 1999-05-17 +// Description: Simple driver for the SH Serial Communication Interface +// Clients of this file can configure the behavior with: +// CYGNUM_SCI_PORTS: number of SCI ports +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> + +#ifdef CYGNUM_HAL_SH_SH3_SCI_PORTS + +#include <cyg/hal/hal_io.h> // IO macros +#include <cyg/hal/drv_api.h> // CYG_ISR_HANDLED +#include <cyg/hal/hal_misc.h> // Helper functions +#include <cyg/hal/hal_intr.h> // HAL_ENABLE/MASK/UNMASK_INTERRUPTS +#include <cyg/hal/hal_arch.h> // SAVE/RESTORE GP +#include <cyg/hal/hal_if.h> // Calling-if API +#include <cyg/hal/sh_regs.h> // serial register definitions + +#include <cyg/hal/sh3_sci.h> // our header + +//-------------------------------------------------------------------------- + +#ifndef CYGNUM_HAL_SH_SH3_SCI_DEFAULT_BAUD_RATE +# define CYGNUM_HAL_SH_SH3_SCI_DEFAULT_BAUD_RATE 38400 +#endif + +void +cyg_hal_plf_sci_init_channel(const channel_data_t* chan) +{ + cyg_uint8 tmp; + cyg_uint8* base = chan->base; + + // Disable Tx/Rx interrupts, but enable Tx/Rx + HAL_WRITE_UINT8(base+_REG_SCSCR, + CYGARC_REG_SCSCR_TE|CYGARC_REG_SCSCR_RE); + + // 8-1-no parity. + HAL_WRITE_UINT8(base+_REG_SCSMR, 0); + + // Set speed to CYGNUM_HAL_SH_SH3_SCI_DEFAULT_BAUD_RATE + HAL_READ_UINT8(base+_REG_SCSMR, tmp); + tmp &= ~CYGARC_REG_SCSMR_CKSx_MASK; + tmp |= CYGARC_SCBRR_CKSx(CYGNUM_HAL_SH_SH3_SCI_DEFAULT_BAUD_RATE); + HAL_WRITE_UINT8(base+_REG_SCSMR, tmp); + HAL_WRITE_UINT8(base+_REG_SCBRR, CYGARC_SCBRR_N(CYGNUM_HAL_SH_SH3_SCI_DEFAULT_BAUD_RATE)); +} + +static cyg_bool +cyg_hal_plf_sci_getc_nonblock(void* __ch_data, cyg_uint8* ch) +{ + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + cyg_uint8 sr; + + HAL_READ_UINT8(base+_REG_SCSSR, sr); + if ((sr & CYGARC_REG_SCSSR_RDRF) == 0) + return false; + + HAL_READ_UINT8(base+_REG_SCRDR, *ch); + + // Clear buffer full flag. + HAL_WRITE_UINT8(base+_REG_SCSSR, sr & ~CYGARC_REG_SCSSR_RDRF); + + return true; +} + +cyg_uint8 +cyg_hal_plf_sci_getc(void* __ch_data) +{ + cyg_uint8 ch; + CYGARC_HAL_SAVE_GP(); + + while(!cyg_hal_plf_sci_getc_nonblock(__ch_data, &ch)); + + CYGARC_HAL_RESTORE_GP(); + return ch; +} + +void +cyg_hal_plf_sci_putc(void* __ch_data, cyg_uint8 c) +{ + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + cyg_uint8 sr; + CYGARC_HAL_SAVE_GP(); + + do { + HAL_READ_UINT8(base+_REG_SCSSR, sr); + } while ((sr & CYGARC_REG_SCSSR_TDRE) == 0); + + HAL_WRITE_UINT8(base+_REG_SCTDR, c); + + // Clear empty flag. + HAL_WRITE_UINT8(base+_REG_SCSSR, sr & ~CYGARC_REG_SCSSR_TDRE); + + // Hang around until the character has been safely sent. + do { + HAL_READ_UINT8(base+_REG_SCSSR, sr); + } while ((sr & CYGARC_REG_SCSSR_TDRE) == 0); + + CYGARC_HAL_RESTORE_GP(); +} + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \ + || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES) + +static channel_data_t channels[CYGNUM_HAL_SH_SH3_SCI_PORTS]; + +static void +cyg_hal_plf_sci_write(void* __ch_data, const cyg_uint8* __buf, + cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while(__len-- > 0) + cyg_hal_plf_sci_putc(__ch_data, *__buf++); + + CYGARC_HAL_RESTORE_GP(); +} + +static void +cyg_hal_plf_sci_read(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while(__len-- > 0) + *__buf++ = cyg_hal_plf_sci_getc(__ch_data); + + CYGARC_HAL_RESTORE_GP(); +} + +cyg_bool +cyg_hal_plf_sci_getc_timeout(void* __ch_data, cyg_uint8* ch) +{ + channel_data_t* chan = (channel_data_t*)__ch_data; + int delay_count; + cyg_bool res; + CYGARC_HAL_SAVE_GP(); + + delay_count = chan->msec_timeout * 10; // delay in .1 ms steps + + for(;;) { + res = cyg_hal_plf_sci_getc_nonblock(__ch_data, ch); + if (res || 0 == delay_count--) + break; + + CYGACC_CALL_IF_DELAY_US(100); + } + + CYGARC_HAL_RESTORE_GP(); + return res; +} + +static int +cyg_hal_plf_sci_control(void *__ch_data, __comm_control_cmd_t __func, ...) +{ + static int irq_state = 0; + channel_data_t* chan = (channel_data_t*)__ch_data; + cyg_uint8 scr; + int ret = 0; + CYGARC_HAL_SAVE_GP(); + + switch (__func) { + case __COMMCTL_IRQ_ENABLE: + irq_state = 1; + HAL_INTERRUPT_UNMASK(chan->isr_vector); + HAL_READ_UINT8(chan->base+_REG_SCSCR, scr); + scr |= CYGARC_REG_SCSCR_RIE; + HAL_WRITE_UINT8(chan->base+_REG_SCSCR, scr); + break; + case __COMMCTL_IRQ_DISABLE: + ret = irq_state; + irq_state = 0; + HAL_INTERRUPT_UNMASK(chan->isr_vector); + HAL_READ_UINT8(chan->base+_REG_SCSCR, scr); + scr &= ~CYGARC_REG_SCSCR_RIE; + HAL_WRITE_UINT8(chan->base+_REG_SCSCR, scr); + break; + case __COMMCTL_DBG_ISR_VECTOR: + ret = chan->isr_vector; + break; + case __COMMCTL_SET_TIMEOUT: + { + va_list ap; + + va_start(ap, __func); + + ret = chan->msec_timeout; + chan->msec_timeout = va_arg(ap, cyg_uint32); + + va_end(ap); + } + default: + break; + } + CYGARC_HAL_RESTORE_GP(); + return ret; +} + +static int +cyg_hal_plf_sci_isr(void *__ch_data, int* __ctrlc, + CYG_ADDRWORD __vector, CYG_ADDRWORD __data) +{ + cyg_uint8 c, sr; + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + int res = 0; + CYGARC_HAL_SAVE_GP(); + + *__ctrlc = 0; + HAL_READ_UINT8(base+_REG_SCSSR, sr); + if (sr & CYGARC_REG_SCSSR_RDRF) { + HAL_READ_UINT8(base+_REG_SCRDR, c); + + // Clear buffer full flag. + HAL_WRITE_UINT8(base+_REG_SCSSR, + CYGARC_REG_SCSSR_CLEARMASK & ~CYGARC_REG_SCSSR_RDRF); + + if( cyg_hal_is_break( &c , 1 ) ) + *__ctrlc = 1; + + res = CYG_ISR_HANDLED; + } + + CYGARC_HAL_RESTORE_GP(); + return res; +} + +void +cyg_hal_plf_sci_init(int sci_index, int comm_index, + int rcv_vect, cyg_uint8* base) +{ + channel_data_t* chan = &channels[sci_index]; + hal_virtual_comm_table_t* comm; + int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT); + + // Initialize channel table + chan->base = base; + chan->isr_vector = rcv_vect; + chan->msec_timeout = 1000; + + // Disable interrupts. + HAL_INTERRUPT_MASK(chan->isr_vector); + + // Init channel + + cyg_hal_plf_sci_init_channel(chan); + + // Setup procs in the vector table + + // Initialize channel procs + CYGACC_CALL_IF_SET_CONSOLE_COMM(comm_index); + comm = CYGACC_CALL_IF_CONSOLE_PROCS(); + CYGACC_COMM_IF_CH_DATA_SET(*comm, chan); + CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_plf_sci_write); + CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_plf_sci_read); + CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_plf_sci_putc); + CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_plf_sci_getc); + CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_plf_sci_control); + CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_sci_isr); + CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_plf_sci_getc_timeout); + + // Restore original console + CYGACC_CALL_IF_SET_CONSOLE_COMM(cur); +} + +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES + +#endif // CYGNUM_HAL_SH_SH3_SCI_PORTS + +//----------------------------------------------------------------------------- +// end of sh_sci.c
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/src/sh3_scif.c @@ -0,0 +1,344 @@ +//============================================================================= +// +// sh3_scif.c +// +// Simple driver for the SH3 Serial Communication Interface with FIFO +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-03-30 +// Description: Simple driver for the SH Serial Communication Interface +// The driver can be used for either the SCIF or the IRDA +// modules (the latter can act as the former). +// Clients of this file can configure the behavior with: +// CYGNUM_SCIF_PORTS: number of SCI ports +// +// Note: It should be possible to configure a channel to IRDA mode. +// Worry about that when some board needs it. +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> + +#ifdef CYGNUM_HAL_SH_SH3_SCIF_PORTS + +#include <cyg/hal/hal_io.h> // IO macros +#include <cyg/hal/drv_api.h> // CYG_ISR_HANDLED +#include <cyg/hal/hal_misc.h> // Helper functions +#include <cyg/hal/hal_intr.h> // HAL_ENABLE/MASK/UNMASK_INTERRUPTS +#include <cyg/hal/hal_arch.h> // SAVE/RESTORE GP +#include <cyg/hal/hal_if.h> // Calling-if API +#include <cyg/hal/sh_regs.h> // serial register definitions +#include <cyg/hal/sh_stub.h> // target_register_t + +#include <cyg/hal/sh3_scif.h> // our header + +//-------------------------------------------------------------------------- + +#ifndef CYGNUM_HAL_SH_SH3_SCIF_DEFAULT_BAUD_RATE +# define CYGNUM_HAL_SH_SH3_SCIF_DEFAULT_BAUD_RATE 38400 +#endif + +void +cyg_hal_plf_scif_init_channel(const channel_data_t* chan) +{ + cyg_uint8* base = chan->base; + cyg_uint8 tmp; + cyg_uint16 sr; + + // Disable everything. + HAL_WRITE_UINT8(base+_REG_SCSCR, 0); + + // Reset FIFO. + HAL_WRITE_UINT8(base+_REG_SCFCR, + CYGARC_REG_SCFCR2_TFRST|CYGARC_REG_SCFCR2_RFRST); + + // 8-1-no parity. + HAL_WRITE_UINT8(base+_REG_SCSMR, 0); + + // Set speed to CYGNUM_HAL_SH_SH3_SCIF_DEFAULT_BAUD_RATE + HAL_READ_UINT8(base+_REG_SCSMR, tmp); + tmp &= ~CYGARC_REG_SCSMR2_CKSx_MASK; + tmp |= CYGARC_SCBRR_CKSx(CYGNUM_HAL_SH_SH3_SCIF_DEFAULT_BAUD_RATE); + HAL_WRITE_UINT8(base+_REG_SCSMR, tmp); + HAL_WRITE_UINT8(base+_REG_SCBRR, CYGARC_SCBRR_N(CYGNUM_HAL_SH_SH3_SCIF_DEFAULT_BAUD_RATE)); + + // Let things settle: Here we should should wait the equivalent of + // one bit interval, + // i.e. 1/CYGNUM_HAL_SH_SH3_SCIF_DEFAULT_BAUD_RATE second, but + // until we have something like the Linux delay loop, it's hard to + // do reliably. So just move on and hope for the best (this is + // unlikely to cause problems since the CPU has just come out of + // reset anyway). + + // Clear status register (read back first). + HAL_READ_UINT16(base+_REG_SCSSR, sr); + HAL_WRITE_UINT16(base+_REG_SCSSR, 0); + + // Bring FIFO out of reset and set to trigger on every char in + // FIFO (or C-c input would not be processed). + HAL_WRITE_UINT8(base+_REG_SCFCR, + CYGARC_REG_SCFCR2_RTRG_1|CYGARC_REG_SCFCR2_TTRG_1); + + // Leave Tx/Rx interrupts disabled, but enable Tx/Rx + HAL_WRITE_UINT8(base+_REG_SCSCR, + CYGARC_REG_SCSCR2_TE|CYGARC_REG_SCSCR2_RE); +} + +//static +cyg_bool +cyg_hal_plf_scif_getc_nonblock(void* __ch_data, cyg_uint8* ch) +{ + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + cyg_uint16 fdr, sr; + + HAL_READ_UINT16(base+_REG_SCFDR, fdr); + if (0 == (fdr & CYGARC_REG_SCFDR2_RCOUNT_MASK)) + return false; + + HAL_READ_UINT8(base+_REG_SCFRDR, *ch); + + // Clear DR/RDF flags + HAL_READ_UINT16(base+_REG_SCSSR, sr); + HAL_WRITE_UINT16(base+_REG_SCSSR, + CYGARC_REG_SCSSR2_CLEARMASK & ~(CYGARC_REG_SCSSR2_RDF | CYGARC_REG_SCSSR2_DR)); + + return true; +} + +cyg_uint8 +cyg_hal_plf_scif_getc(void* __ch_data) +{ + cyg_uint8 ch; + CYGARC_HAL_SAVE_GP(); + + while(!cyg_hal_plf_scif_getc_nonblock(__ch_data, &ch)); + + CYGARC_HAL_RESTORE_GP(); + return ch; +} + +void +cyg_hal_plf_scif_putc(void* __ch_data, cyg_uint8 c) +{ + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + cyg_uint16 fdr, sr; + CYGARC_HAL_SAVE_GP(); + + do { + HAL_READ_UINT16(base+_REG_SCFDR, fdr); + } while (((fdr & CYGARC_REG_SCFDR2_TCOUNT_MASK) >> CYGARC_REG_SCFDR2_TCOUNT_shift) == 16); + + HAL_WRITE_UINT8(base+_REG_SCFTDR, c); + + // Clear FIFO-empty/transmit end flags (read back SR first) + HAL_READ_UINT16(base+_REG_SCSSR, sr); + HAL_WRITE_UINT16(base+_REG_SCSSR, CYGARC_REG_SCSSR2_CLEARMASK + & ~(CYGARC_REG_SCSSR2_TDFE | CYGARC_REG_SCSSR2_TEND )); + + // Hang around until the character has been safely sent. + do { + HAL_READ_UINT16(base+_REG_SCFDR, fdr); + } while ((fdr & CYGARC_REG_SCFDR2_TCOUNT_MASK) != 0); + + CYGARC_HAL_RESTORE_GP(); +} + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \ + || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES) + +static channel_data_t channels[CYGNUM_HAL_SH_SH3_SCIF_PORTS]; + +static void +cyg_hal_plf_scif_write(void* __ch_data, const cyg_uint8* __buf, + cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while(__len-- > 0) + cyg_hal_plf_scif_putc(__ch_data, *__buf++); + + CYGARC_HAL_RESTORE_GP(); +} + +static void +cyg_hal_plf_scif_read(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while(__len-- > 0) + *__buf++ = cyg_hal_plf_scif_getc(__ch_data); + + CYGARC_HAL_RESTORE_GP(); +} + +cyg_bool +cyg_hal_plf_scif_getc_timeout(void* __ch_data, cyg_uint8* ch) +{ + channel_data_t* chan = (channel_data_t*)__ch_data; + int delay_count; + cyg_bool res; + CYGARC_HAL_SAVE_GP(); + + delay_count = chan->msec_timeout * 10; // delay in .1 ms steps + + for(;;) { + res = cyg_hal_plf_scif_getc_nonblock(__ch_data, ch); + if (res || 0 == delay_count--) + break; + + CYGACC_CALL_IF_DELAY_US(100); + } + + CYGARC_HAL_RESTORE_GP(); + return res; +} + +static int +cyg_hal_plf_scif_control(void *__ch_data, __comm_control_cmd_t __func, ...) +{ + static int irq_state = 0; + channel_data_t* chan = (channel_data_t*)__ch_data; + cyg_uint8 scr; + int ret = 0; + CYGARC_HAL_SAVE_GP(); + + switch (__func) { + case __COMMCTL_IRQ_ENABLE: + irq_state = 1; + HAL_INTERRUPT_UNMASK(chan->isr_vector); + HAL_READ_UINT8(chan->base+_REG_SCSCR, scr); + scr |= CYGARC_REG_SCSCR2_RIE; + HAL_WRITE_UINT8(chan->base+_REG_SCSCR, scr); + break; + case __COMMCTL_IRQ_DISABLE: + ret = irq_state; + irq_state = 0; + HAL_INTERRUPT_UNMASK(chan->isr_vector); + HAL_READ_UINT8(chan->base+_REG_SCSCR, scr); + scr &= ~CYGARC_REG_SCSCR2_RIE; + HAL_WRITE_UINT8(chan->base+_REG_SCSCR, scr); + break; + case __COMMCTL_DBG_ISR_VECTOR: + ret = chan->isr_vector; + break; + case __COMMCTL_SET_TIMEOUT: + { + va_list ap; + + va_start(ap, __func); + + ret = chan->msec_timeout; + chan->msec_timeout = va_arg(ap, cyg_uint32); + + va_end(ap); + } + default: + break; + } + CYGARC_HAL_RESTORE_GP(); + return ret; +} + +static int +cyg_hal_plf_scif_isr(void *__ch_data, int* __ctrlc, + CYG_ADDRWORD __vector, CYG_ADDRWORD __data) +{ + cyg_uint8 c; + cyg_uint16 fdr, sr; + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + int res = 0; + CYGARC_HAL_SAVE_GP(); + + *__ctrlc = 0; + HAL_READ_UINT16(base+_REG_SCFDR, fdr); + if ((fdr & CYGARC_REG_SCFDR2_RCOUNT_MASK) != 0) { + HAL_READ_UINT8(base+_REG_SCFRDR, c); + + // Clear buffer full flag (read back first). + HAL_READ_UINT16(base+_REG_SCSSR, sr); + HAL_WRITE_UINT16(base+_REG_SCSSR, + CYGARC_REG_SCSSR2_CLEARMASK & ~CYGARC_REG_SCSSR2_RDF); + + if( cyg_hal_is_break( &c , 1 ) ) + *__ctrlc = 1; + + res = CYG_ISR_HANDLED; + } + + CYGARC_HAL_RESTORE_GP(); + return res; +} + +void +cyg_hal_plf_scif_init(int scif_index, int comm_index, + int rcv_vect, cyg_uint8* base) +{ + channel_data_t* chan = &channels[scif_index]; + hal_virtual_comm_table_t* comm; + int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT); + + // Initialize channel table + chan->base = base; + chan->isr_vector = rcv_vect; + chan->msec_timeout = 1000; + + // Disable interrupts. + HAL_INTERRUPT_MASK(chan->isr_vector); + + // Init channel + cyg_hal_plf_scif_init_channel(chan); + + // Setup procs in the vector table + + // Initialize channel procs + CYGACC_CALL_IF_SET_CONSOLE_COMM(comm_index); + comm = CYGACC_CALL_IF_CONSOLE_PROCS(); + CYGACC_COMM_IF_CH_DATA_SET(*comm, chan); + CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_plf_scif_write); + CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_plf_scif_read); + CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_plf_scif_putc); + CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_plf_scif_getc); + CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_plf_scif_control); + CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_scif_isr); + CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_plf_scif_getc_timeout); + + // Restore original console + CYGACC_CALL_IF_SET_CONSOLE_COMM(cur); +} + +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES + +#endif // CYGNUM_HAL_SH_SH3_SCIF_PORTS + +//----------------------------------------------------------------------------- +// end of sh3_scif.c
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/src/var_misc.c @@ -0,0 +1,439 @@ +//========================================================================== +// +// var_misc.c +// +// HAL miscellaneous functions +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors: jskov, jlarmour, nickg +// Date: 1999-04-03 +// Purpose: HAL miscellaneous functions +// Description: This file contains miscellaneous functions provided by the +// HAL. +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +#include <pkgconf/hal.h> + +#include <cyg/infra/cyg_type.h> +#include <cyg/infra/cyg_trac.h> // tracing macros +#include <cyg/infra/cyg_ass.h> // assertion macros +#include <cyg/infra/diag.h> // diag_printf + +#include <cyg/hal/hal_arch.h> // HAL header +#include <cyg/hal/hal_cache.h> // HAL cache +#include <cyg/hal/hal_intr.h> // HAL interrupts/exceptions + +//--------------------------------------------------------------------------- +// Initial cache enabling + +#ifdef CYGHWR_HAL_SH_CACHE_MODE_P0_WRITE_BACK +# define CACHE_MODE_P0 0 +#else +# define CACHE_MODE_P0 CYGARC_REG_CCR_WT +#endif + +#ifdef CYGHWR_HAL_SH_CACHE_MODE_P1_WRITE_BACK +# define CACHE_MODE_P1 CYGARC_REG_CCR_CB +#else +# define CACHE_MODE_P1 0 +#endif + +externC void +cyg_var_enable_caches(void) +{ + // Initialize cache. + HAL_UCACHE_INVALIDATE_ALL(); + + // Set cache modes + HAL_UCACHE_WRITE_MODE_SH(CACHE_MODE_P0|CACHE_MODE_P1); + +#ifdef CYGHWR_HAL_SH_CACHE_ENABLE + // Enable cache. + HAL_UCACHE_ENABLE(); +#endif +} + +//--------------------------------------------------------------------------- +void +hal_variant_init(void) +{ +} + +//--------------------------------------------------------------------------- +// Interrupt function support + +#ifdef CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING +externC cyg_uint8 cyg_hal_ILVL_table[]; +#define HAL_UPDATE_ILVL_TABLE(_vector_, _level_) \ + /* Update the ILVL table, so it is easy for the interrupt entry */ \ + /* code to find out the level of a given interrupt source. */ \ + cyg_hal_ILVL_table[(_vector_)] = (_level_) +#else +#define HAL_UPDATE_ILVL_TABLE(_vector_, _level_) +#endif + +void +hal_interrupt_set_level(int vector, int level) +{ + cyg_uint16 iprX; + + CYG_ASSERT((0 <= (level) && 15 >= (level)), "Illegal level"); + CYG_ASSERT((CYGNUM_HAL_ISR_MIN <= (vector) + && CYGNUM_HAL_ISR_MAX >= (vector)), "Illegal vector"); + + HAL_UPDATE_ILVL_TABLE(vector, level); + + switch( (vector) ) { + case CYGNUM_HAL_INTERRUPT_NMI: + /* fall through */ + case CYGNUM_HAL_INTERRUPT_LVL0...CYGNUM_HAL_INTERRUPT_LVL14: + /* Cannot change levels */ + break; + + /* IPRA */ + case CYGNUM_HAL_INTERRUPT_TMU0_TUNI0: + HAL_READ_UINT16(CYGARC_REG_IPRA, iprX); + iprX &= ~CYGARC_REG_IPRA_TMU0_MASK; + iprX |= (level)*CYGARC_REG_IPRA_TMU0_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRA, iprX); + break; + case CYGNUM_HAL_INTERRUPT_TMU1_TUNI1: + HAL_READ_UINT16(CYGARC_REG_IPRA, iprX); + iprX &= ~CYGARC_REG_IPRA_TMU1_MASK; + iprX |= (level)*CYGARC_REG_IPRA_TMU1_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRA, iprX); + break; + case CYGNUM_HAL_INTERRUPT_TMU2_TUNI2: + case CYGNUM_HAL_INTERRUPT_TMU2_TICPI2: + HAL_READ_UINT16(CYGARC_REG_IPRA, iprX); + iprX &= ~CYGARC_REG_IPRA_TMU2_MASK; + iprX |= (level)*CYGARC_REG_IPRA_TMU2_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRA, iprX); + break; + case CYGNUM_HAL_INTERRUPT_RTC_ATI: + case CYGNUM_HAL_INTERRUPT_RTC_PRI: + case CYGNUM_HAL_INTERRUPT_RTC_CUI: + HAL_READ_UINT16(CYGARC_REG_IPRA, iprX); + iprX &= ~CYGARC_REG_IPRA_RTC_MASK; + iprX |= (level)*CYGARC_REG_IPRA_RTC_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRA, iprX); + break; + + /* IPRB */ + case CYGNUM_HAL_INTERRUPT_SCI_ERI: + case CYGNUM_HAL_INTERRUPT_SCI_RXI: + case CYGNUM_HAL_INTERRUPT_SCI_TXI: + case CYGNUM_HAL_INTERRUPT_SCI_TEI: + HAL_READ_UINT16(CYGARC_REG_IPRB, iprX); + iprX &= ~CYGARC_REG_IPRB_SCI_MASK; + iprX |= (level)*CYGARC_REG_IPRB_SCI_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRB, iprX); + break; + case CYGNUM_HAL_INTERRUPT_WDT_ITI: + HAL_READ_UINT16(CYGARC_REG_IPRB, iprX); + iprX &= ~CYGARC_REG_IPRB_WDT_MASK; + iprX |= (level)*CYGARC_REG_IPRB_WDT_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRB, iprX); + break; + case CYGNUM_HAL_INTERRUPT_REF_RCMI: + case CYGNUM_HAL_INTERRUPT_REF_ROVI: + HAL_READ_UINT16(CYGARC_REG_IPRB, iprX); + iprX &= ~CYGARC_REG_IPRB_REF_MASK; + iprX |= (level)*CYGARC_REG_IPRB_REF_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRB, iprX); + break; + +#if (CYGARC_SH_MOD_INTC >= 2) +#ifndef CYGHWR_HAL_SH_IRQ_USE_IRQLVL + /* IPRC */ + case CYGNUM_HAL_INTERRUPT_IRQ_IRQ0: + HAL_READ_UINT16(CYGARC_REG_IPRC, iprX); + iprX &= ~CYGARC_REG_IPRC_IRQ0_MASK; + iprX |= (level)*CYGARC_REG_IPRC_IRQ0_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRC, iprX); + break; + case CYGNUM_HAL_INTERRUPT_IRQ_IRQ1: + HAL_READ_UINT16(CYGARC_REG_IPRC, iprX); + iprX &= ~CYGARC_REG_IPRC_IRQ1_MASK; + iprX |= (level)*CYGARC_REG_IPRC_IRQ1_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRC, iprX); + break; + case CYGNUM_HAL_INTERRUPT_IRQ_IRQ2: + HAL_READ_UINT16(CYGARC_REG_IPRC, iprX); + iprX &= ~CYGARC_REG_IPRC_IRQ2_MASK; + iprX |= (level)*CYGARC_REG_IPRC_IRQ2_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRC, iprX); + break; + case CYGNUM_HAL_INTERRUPT_IRQ_IRQ3: + HAL_READ_UINT16(CYGARC_REG_IPRC, iprX); + iprX &= ~CYGARC_REG_IPRC_IRQ3_MASK; + iprX |= (level)*CYGARC_REG_IPRC_IRQ3_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRC, iprX); + break; +#endif + /* IPRD */ + case CYGNUM_HAL_INTERRUPT_PINT_PINT07: + HAL_READ_UINT16(CYGARC_REG_IPRD, iprX); + iprX &= ~CYGARC_REG_IPRD_PINT07_MASK; + iprX |= (level)*CYGARC_REG_IPRD_PINT07_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRD, iprX); + break; + case CYGNUM_HAL_INTERRUPT_PINT_PINT8F: + HAL_READ_UINT16(CYGARC_REG_IPRD, iprX); + iprX &= ~CYGARC_REG_IPRD_PINT8F_MASK; + iprX |= (level)*CYGARC_REG_IPRD_PINT8F_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRD, iprX); + break; + case CYGNUM_HAL_INTERRUPT_IRQ_IRQ5: + HAL_READ_UINT16(CYGARC_REG_IPRD, iprX); + iprX &= ~CYGARC_REG_IPRD_IRQ5_MASK; + iprX |= (level)*CYGARC_REG_IPRD_IRQ5_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRD, iprX); + break; + case CYGNUM_HAL_INTERRUPT_IRQ_IRQ4: + HAL_READ_UINT16(CYGARC_REG_IPRD, iprX); + iprX &= ~CYGARC_REG_IPRD_IRQ4_MASK; + iprX |= (level)*CYGARC_REG_IPRD_IRQ4_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRD, iprX); + break; + + /* IPRE */ + case CYGNUM_HAL_INTERRUPT_DMAC_DEI0: + case CYGNUM_HAL_INTERRUPT_DMAC_DEI1: + case CYGNUM_HAL_INTERRUPT_DMAC_DEI2: + case CYGNUM_HAL_INTERRUPT_DMAC_DEI3: + HAL_READ_UINT16(CYGARC_REG_IPRE, iprX); + iprX &= ~CYGARC_REG_IPRE_DMAC_MASK; + iprX |= (level)*CYGARC_REG_IPRE_DMAC_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRE, iprX); + break; + case CYGNUM_HAL_INTERRUPT_IRDA_ERI1: + case CYGNUM_HAL_INTERRUPT_IRDA_RXI1: + case CYGNUM_HAL_INTERRUPT_IRDA_BRI1: + case CYGNUM_HAL_INTERRUPT_IRDA_TXI1: + HAL_READ_UINT16(CYGARC_REG_IPRE, iprX); + iprX &= ~CYGARC_REG_IPRE_IRDA_MASK; + iprX |= (level)*CYGARC_REG_IPRE_IRDA_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRE, iprX); + break; + case CYGNUM_HAL_INTERRUPT_SCIF_ERI2: + case CYGNUM_HAL_INTERRUPT_SCIF_RXI2: + case CYGNUM_HAL_INTERRUPT_SCIF_BRI2: + case CYGNUM_HAL_INTERRUPT_SCIF_TXI2: + HAL_READ_UINT16(CYGARC_REG_IPRE, iprX); + iprX &= ~CYGARC_REG_IPRE_SCIF_MASK; + iprX |= (level)*CYGARC_REG_IPRE_SCIF_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRE, iprX); + break; + case CYGNUM_HAL_INTERRUPT_ADC_ADI: + HAL_READ_UINT16(CYGARC_REG_IPRE, iprX); + iprX &= ~CYGARC_REG_IPRE_ADC_MASK; + iprX |= (level)*CYGARC_REG_IPRE_ADC_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRE, iprX); + break; +#endif // (CYGARC_SH_MOD_INTC >= 2) + +#if (CYGARC_SH_MOD_INTC >= 3) + /* IPRF */ + case CYGNUM_HAL_INTERRUPT_LCDC_LCDI: + HAL_READ_UINT16(CYGARC_REG_IPRF, iprX); + iprX &= ~CYGARC_REG_IPRF_LCDI_MASK; + iprX |= (level)*CYGARC_REG_IPRF_LCDI_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRF, iprX); + break; + case CYGNUM_HAL_INTERRUPT_PCC_PCC0: + HAL_READ_UINT16(CYGARC_REG_IPRF, iprX); + iprX &= ~CYGARC_REG_IPRF_PCC0_MASK; + iprX |= (level)*CYGARC_REG_IPRF_PCC0_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRF, iprX); + break; + case CYGNUM_HAL_INTERRUPT_PCC_PCC1: + HAL_READ_UINT16(CYGARC_REG_IPRF, iprX); + iprX &= ~CYGARC_REG_IPRF_PCC1_MASK; + iprX |= (level)*CYGARC_REG_IPRF_PCC1_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRF, iprX); + break; +#endif // (CYGARC_SH_MOD_INTC >= 3) + + case CYGNUM_HAL_INTERRUPT_RESERVED_1E0: + case CYGNUM_HAL_INTERRUPT_RESERVED_3E0: + /* Do nothing for these reserved vectors. */ + break; + + default: + CYG_FAIL("Unknown interrupt vector"); + break; + } +} + +void +hal_interrupt_mask(int vector) +{ + switch( (vector) ) { + case CYGNUM_HAL_INTERRUPT_NMI: + /* fall through */ + case CYGNUM_HAL_INTERRUPT_LVL0...CYGNUM_HAL_INTERRUPT_LVL14: + /* Can only be masked by fiddling Imask in SR. */ + break; + case CYGNUM_HAL_INTERRUPT_TMU0_TUNI0...CYGNUM_HAL_ISR_MAX: + HAL_INTERRUPT_SET_LEVEL((vector), 0); + break; + case CYGNUM_HAL_INTERRUPT_RESERVED_1E0: + case CYGNUM_HAL_INTERRUPT_RESERVED_3E0: + /* Do nothing for these reserved vectors. */ + break; + default: + CYG_FAIL("Unknown interrupt vector"); + break; + } +} + +void +hal_interrupt_unmask(int vector) +{ + switch( (vector) ) { + case CYGNUM_HAL_INTERRUPT_NMI: + /* fall through */ + case CYGNUM_HAL_INTERRUPT_LVL0...CYGNUM_HAL_INTERRUPT_LVL14: + /* Can only be unmasked by fiddling Imask in SR. */ + break; + case CYGNUM_HAL_INTERRUPT_TMU0_TUNI0...CYGNUM_HAL_ISR_MAX: + HAL_INTERRUPT_SET_LEVEL((vector), 1); + break; + case CYGNUM_HAL_INTERRUPT_RESERVED_1E0: + case CYGNUM_HAL_INTERRUPT_RESERVED_3E0: + /* Do nothing for these reserved vectors. */ + break; + default: + CYG_FAIL("Unknown interrupt vector"); + break; + } +} + +void +hal_interrupt_acknowledge(int vector) +{ +#if (CYGARC_SH_MOD_INTC >= 2) + if ( (vector) >= CYGNUM_HAL_INTERRUPT_IRQ_IRQ0 + && (vector) <= CYGNUM_HAL_INTERRUPT_IRQ_IRQ5) { + + cyg_uint8 irr0; + + HAL_READ_UINT8(CYGARC_REG_IRR0, irr0); + switch ( vector ) { +#ifndef CYGHWR_HAL_SH_IRQ_USE_IRQLVL + case CYGNUM_HAL_INTERRUPT_IRQ_IRQ0: + irr0 &= ~CYGARC_REG_IRR0_IRQ0; + break; + case CYGNUM_HAL_INTERRUPT_IRQ_IRQ1: + irr0 &= ~CYGARC_REG_IRR0_IRQ1; + break; + case CYGNUM_HAL_INTERRUPT_IRQ_IRQ2: + irr0 &= ~CYGARC_REG_IRR0_IRQ2; + break; + case CYGNUM_HAL_INTERRUPT_IRQ_IRQ3: + irr0 &= ~CYGARC_REG_IRR0_IRQ3; + break; +#endif + case CYGNUM_HAL_INTERRUPT_IRQ_IRQ4: + irr0 &= ~CYGARC_REG_IRR0_IRQ4; + break; + case CYGNUM_HAL_INTERRUPT_IRQ_IRQ5: + irr0 &= ~CYGARC_REG_IRR0_IRQ5; + break; + default: + CYG_FAIL("Unhandled interrupt vector"); + } + HAL_WRITE_UINT8(CYGARC_REG_IRR0, irr0); + } +#endif +} + +// Note: The PINTs can be masked and configured individually, even +// though there are only two vectors. Maybe add some fake vectors just +// for masking/configuring? +void +hal_interrupt_configure(int vector, int level, int up) +{ +#if (CYGARC_SH_MOD_INTC >= 2) + if ( (vector) >= CYGNUM_HAL_INTERRUPT_IRQ_IRQ0 + && (vector) <= CYGNUM_HAL_INTERRUPT_IRQ_IRQ5) { + + cyg_uint16 icr1, ss, mask; + ss = 0; + mask = CYGARC_REG_ICR1_SENSE_UP|CYGARC_REG_ICR1_SENSE_LEVEL; + if (up) ss |= CYGARC_REG_ICR1_SENSE_UP; + if (level) ss |= CYGARC_REG_ICR1_SENSE_LEVEL; + CYG_ASSERT(!(up && level), "Cannot trigger on high level!"); + + switch( (vector) ) { + case CYGNUM_HAL_INTERRUPT_IRQ_IRQ5: + ss <<= CYGARC_REG_ICR1_SENSE_IRQ5_shift; + mask <<= CYGARC_REG_ICR1_SENSE_IRQ5_shift; + break; + case CYGNUM_HAL_INTERRUPT_IRQ_IRQ4: + ss <<= CYGARC_REG_ICR1_SENSE_IRQ4_shift; + mask <<= CYGARC_REG_ICR1_SENSE_IRQ4_shift; + break; +#ifndef CYGHWR_HAL_SH_IRQ_USE_IRQLVL + case CYGNUM_HAL_INTERRUPT_IRQ_IRQ3: + ss <<= CYGARC_REG_ICR1_SENSE_IRQ3_shift; + mask <<= CYGARC_REG_ICR1_SENSE_IRQ3_shift; + break; + case CYGNUM_HAL_INTERRUPT_IRQ_IRQ2: + ss <<= CYGARC_REG_ICR1_SENSE_IRQ2_shift; + mask <<= CYGARC_REG_ICR1_SENSE_IRQ2_shift; + break; + case CYGNUM_HAL_INTERRUPT_IRQ_IRQ1: + ss <<= CYGARC_REG_ICR1_SENSE_IRQ1_shift; + mask <<= CYGARC_REG_ICR1_SENSE_IRQ1_shift; + break; + case CYGNUM_HAL_INTERRUPT_IRQ_IRQ0: + ss <<= CYGARC_REG_ICR1_SENSE_IRQ0_shift; + mask <<= CYGARC_REG_ICR1_SENSE_IRQ0_shift; + break; +#endif + default: + CYG_FAIL("Unhandled interrupt vector"); + } + + HAL_READ_UINT16(CYGARC_REG_ICR1, icr1); + icr1 &= ~mask; + icr1 |= ss; + HAL_WRITE_UINT16(CYGARC_REG_ICR1, icr1); + } +#endif +} + +//--------------------------------------------------------------------------- +// End of hal_misc.c
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/src/var_mk_defs.c @@ -0,0 +1,84 @@ +//========================================================================== +// +// var_mk_defs.c +// +// HAL (variant) "make defs" program +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas, jskov +// Date: 2000-02-21 +// Purpose: SH architecture dependent definition generator +// Description: This file contains code that can be compiled by the target +// compiler and used to generate machine specific definitions +// suitable for use in assembly code. +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <pkgconf/hal.h> + +#include <cyg/hal/hal_arch.h> // HAL header +#include <cyg/hal/hal_intr.h> // HAL header +#include <cyg/hal/hal_cache.h> // HAL header +#ifdef CYGPKG_KERNEL +# include <pkgconf/kernel.h> +# include <cyg/kernel/instrmnt.h> +#endif + +/* + * This program is used to generate definitions needed by + * assembly language modules. + * + * This technique was first used in the OSF Mach kernel code: + * generate asm statements containing #defines, + * compile this file to assembler, and then extract the + * #defines from the assembly-language output. + */ + +#define DEFINE(sym, val) \ + asm volatile("\n\t.equ\t" #sym ",%0" : : "i" (val)) + +int +main(void) +{ + // Caching details + DEFINE(CYGARC_REG_CACHE_ADDRESS_FLUSH, CYGARC_REG_CACHE_ADDRESS_FLUSH); + DEFINE(CYGARC_REG_CACHE_ADDRESS_BASE,CYGARC_REG_CACHE_ADDRESS_BASE); + DEFINE(CYGARC_REG_CACHE_ADDRESS_TOP,CYGARC_REG_CACHE_ADDRESS_TOP); + DEFINE(CYGARC_REG_CACHE_ADDRESS_STEP,CYGARC_REG_CACHE_ADDRESS_STEP); + DEFINE(HAL_UCACHE_SIZE, HAL_UCACHE_SIZE); + DEFINE(HAL_UCACHE_WAYS, HAL_UCACHE_WAYS); + DEFINE(HAL_UCACHE_LINE_SIZE, HAL_UCACHE_LINE_SIZE); + +} + +//-------------------------------------------------------------------------- +// EOF var_mk_defs.c
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh3/current/src/variant.S @@ -0,0 +1,192 @@ +##========================================================================== +## +## variant.S +## +## SH3 variant assembly code +## +##========================================================================== +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): jskov +## Contributors: jskov +## Date: 2000-10-30 +## Purpose: SH3 misc assembly code +######DESCRIPTIONEND#### +## +##========================================================================== + +#include <pkgconf/hal.h> +#include <pkgconf/hal_sh.h> + +#include <cyg/hal/sh_regs.h> +#include <cyg/hal/sh3_offsets.inc> + +#--------------------------------------------------------------------------- +# Cache operations +# These need to be written in assembly to ensure they do not rely on data +# in cachable space (i.e., code must use registers exclusively, not the stack). + +# This macro must be used at the top of each cache function. It ensures +# that the code gets executed from a shadow region where caching is disabled +# (0xA0000000). + .macro GOTO_NONCACHED_SHADOW + mova 10f,r0 + mov.l $MASK,r1 + and r1,r0 + mov.l $BASE,r1 + or r1,r0 + jmp @r0 + nop + .align 2 +10: + .endm + + .globl _cyg_hal_cache_enable +_cyg_hal_cache_enable: + GOTO_NONCACHED_SHADOW + mov #CYGARC_REG_CCR,r1 + mov.l @r1,r0 + mov #CYGARC_REG_CCR_CE,r2 + mov.l r2,@r1 + nop + rts + nop + + .globl _cyg_hal_cache_disable +_cyg_hal_cache_disable: + GOTO_NONCACHED_SHADOW + mov #CYGARC_REG_CCR,r1 + mov.l @r1,r0 + mov #CYGARC_REG_CCR_CE,r2 + not r2,r2 + and r2,r0 + mov.l r0,@r1 + nop + rts + nop + + .globl _cyg_hal_cache_invalidate_all +_cyg_hal_cache_invalidate_all: + GOTO_NONCACHED_SHADOW + mov #CYGARC_REG_CCR,r1 + mov.l @r1,r0 + mov #CYGARC_REG_CCR_CF,r2 + or r2,r0 + mov.l r0,@r1 + nop ! Nothing in the docs suggest we need + nop ! nops here, but without them, the + nop ! CPU crashes. + rts + nop + + .globl _cyg_hal_cache_sync +_cyg_hal_cache_sync: + GOTO_NONCACHED_SHADOW + mov.l $CYGARC_REG_CACHE_ADDRESS_FLUSH,r0 + mov.l $CYGARC_REG_CACHE_ADDRESS_BASE,r1 + mov.l $CYGARC_REG_CACHE_ADDRESS_TOP,r2 + mov.l $CYGARC_REG_CACHE_ADDRESS_STEP,r3 +1: cmp/hi r1,r2 + bf 2f + mov.l r0,@r1 + bra 1b + add r3,r1 ! delay slot! +2: nop + rts + nop + + ! r4 = base + ! r5 = size + .globl _cyg_hal_cache_sync_region +_cyg_hal_cache_sync_region: + GOTO_NONCACHED_SHADOW + mov.l 10f,r0 + and r4,r0 ! array index + mov.l 11f,r1 + add r0,r1 ! base (aligned, A set) + + ! make sure top is aligned to start of _next_ cache line + mov r1,r0 + add r5,r0 ! top (non-aligned) + add #2*HAL_UCACHE_LINE_SIZE-1,r0 + mov.l 13f,r2 + and r0,r2 + + mov.l $CYGARC_REG_CACHE_ADDRESS_STEP,r3 + mov.l 12f,r5 +1: cmp/hi r1,r2 + bf 3f + mov r4,r0 ! create address tag + and r5,r0 + mov.l r0,@r1 ! store tag in array, causing (sync+)invalidate + ! if the tag matches any of the lines + add r3,r4 ! inc address tag + bra 1b + add r3,r1 ! inc array index, delay slot! +3: nop + rts + nop + + .align 2 +10: .long ((HAL_UCACHE_SIZE/HAL_UCACHE_WAYS)-1)&~0xf ! mask +11: .long CYGARC_REG_CACHE_ADDRESS_BASE|CYGARC_REG_CACHE_ADDRESS_ADDRESS +12: .long CYGARC_REG_CACHE_ADDRESS_TAG_Mask +13: .long ~(HAL_UCACHE_LINE_SIZE-1) + + .globl _cyg_hal_cache_write_mode +_cyg_hal_cache_write_mode: + GOTO_NONCACHED_SHADOW + # Mode argument in r4. + # Read current state and mask out the two caching mode bits + mov #CYGARC_REG_CCR,r1 + mov.l @r1,r3 + mov #CYGARC_REG_CCR_CB|CYGARC_REG_CCR_WT,r2 + and r2,r4 + not r2,r2 + and r2,r3 + # Or in the new settings and restore to CCR + or r4,r3 + mov.l r3,@r1 + nop + rts + nop + + .align 2 +$CYGARC_REG_CACHE_ADDRESS_FLUSH: + .long CYGARC_REG_CACHE_ADDRESS_FLUSH +$CYGARC_REG_CACHE_ADDRESS_BASE: + .long CYGARC_REG_CACHE_ADDRESS_BASE +$CYGARC_REG_CACHE_ADDRESS_TOP: + .long CYGARC_REG_CACHE_ADDRESS_TOP +$CYGARC_REG_CACHE_ADDRESS_STEP: + .long CYGARC_REG_CACHE_ADDRESS_STEP + + +$MASK: + .long 0x1fffffff ! mask off top 3 bits +$BASE: + .long 0xa0000000 ! base of non-cachable memory
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/ChangeLog @@ -0,0 +1,39 @@ +2000-11-01 Jesper Skov <jskov@redhat.com> + + * Many changes to bring the variant HAL up to date with the later + SH arch HAL changes. Rewrote caching code to handle the split + cache. + +2000-08-16 Haruki Kashiwaya <kashiwaya@redhat.com> + + * Set up directory structure. + +2000-04-18 Ryozaburo Suzuki <ryos@atom-tc.or.jp> + + * Contributed sources for the CqREEK/SH-4 platform. + +//=========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//===========================================================================
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/cdl/hal_sh_sh4.cdl @@ -0,0 +1,145 @@ +# ==================================================================== +# +# hal_sh_sh4.cdl +# +# SH4 architectural HAL package configuration data +# +# ==================================================================== +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): jskov +# Original data: jskov +# Contributors: +# Date: 1999-10-29 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_HAL_SH_SH4 { + display "SH4 architecture" + parent CYGPKG_HAL_SH + hardware + include_dir cyg/hal + define_header hal_sh_sh4.h + description " + The SH4 (SuperH 4) architecture HAL package provides generic + support for this processor architecture. It is also + necessary to select a specific target platform HAL + package." + + compile sh4_scif.c var_misc.c variant.S + + define_proc { + puts $::cdl_system_header "#define CYGBLD_HAL_VARIANT_H <pkgconf/hal_sh_sh4.h>" + } + + # The "-o file" is a workaround for CR100958 - without it the + # output file would end up in the source directory under CygWin. + # n.b. grep does not behave itself under win32 + make -priority 1 { + <PREFIX>/include/cyg/hal/sh4_offsets.inc : <PACKAGE>/src/var_mk_defs.c + $(CC) $(CFLAGS) $(INCLUDE_PATH) -Wp,-MD,sh4_offsets.tmp -o var_mk_defs.tmp -S $< + fgrep .equ var_mk_defs.tmp | sed s/#// > $@ + @echo $@ ": \\" > $(notdir $@).deps + @tail +2 sh4_offsets.tmp >> $(notdir $@).deps + @echo >> $(notdir $@).deps + @rm sh4_offsets.tmp var_mk_defs.tmp + } + + # CPU variant supported + cdl_component CYGPKG_HAL_SH_7750 { + display "SH 7750 microprocessor" + parent CYGPKG_HAL_SH_CPU + implements CYGINT_HAL_SH_VARIANT + default_value 0 + no_define + define -file=system.h CYGPKG_HAL_SH_7750 + description " + The SH4 7750 microprocessor. This is an embedded part that in + addition to the SH4 processor core has built in peripherals + such as memory controllers, DMA controllers, serial ports and + timers/counters." + define_proc { + puts $cdl_system_header "#define CYGBLD_HAL_CPU_MODULES_H <cyg/hal/mod_7750.h>" + } + } + + cdl_component CYGHWR_HAL_SH_CLOCK_SETTINGS { + display "SH on-chip generic clock controls" + description " + The various clocks used by the system are controlled by + these options, some of which are derived from platform + settings." + flavor none + no_define + + cdl_option CYGHWR_HAL_SH_TMU_PRESCALE_0 { + display "TMU counter 0 prescaling" + description " + The peripheral clock is driving the counter used for + the real-time clock, prescaled by this factor." + flavor data + legal_values { 4 16 64 256 } + default_value 4 + } + + cdl_option CYGHWR_HAL_SH_PLL1_OUTPUT { + display "The clock output from PLL1" + no_define + flavor data + calculated { CYGHWR_HAL_SH_OOC_XTAL * CYGHWR_HAL_SH_OOC_PLL_1 } + } + + cdl_option CYGHWR_HAL_SH_PROCESSOR_SPEED { + display "Processor clock speed (MHz)" + flavor data + calculated { CYGHWR_HAL_SH_PLL1_OUTPUT / CYGHWR_HAL_SH_OOC_DIVIDER_IFC } + description " + The core (CPU, cache and MMU) speed is computed from + the input clock speed and the IFC divider setting." + } + + cdl_option CYGHWR_HAL_SH_BOARD_SPEED { + display "Platform bus clock speed (MHz)" + flavor data + calculated { CYGHWR_HAL_SH_PLL1_OUTPUT / CYGHWR_HAL_SH_OOC_DIVIDER_BFC } + description " + The bus speed is computed from + the input clock speed and the BFC divider setting." + } + + cdl_option CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED { + display "Processor on-chip peripheral clock speed (MHz)" + flavor data + calculated { CYGHWR_HAL_SH_PLL1_OUTPUT / CYGHWR_HAL_SH_OOC_DIVIDER_PFC } + description " + The peripheral speed is computed from the input clock + speed and the PFC divider setting." + } + } +}
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/include/mod_7750.h @@ -0,0 +1,96 @@ +#ifndef CYGONCE_HAL_MOD_77xx_H +#define CYGONCE_HAL_MOD_77xx_H + +//============================================================================= +// +// mod_7750.h +// +// List modules available on CPU +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:Haruki Kashiwaya +// Date: 2000-08-09 +// Purpose: Define modules (and versions) available on this CPU. +// Usage: Included from <cyg/hal/sh_regs.h> +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//----------------------------------------------------------------------------- +// Modules provided by the CPU + +#define CYGARC_SH_MOD_CPG 1 +#define CYGARC_SH_MOD_SCIF 1 + + +//----------------------------------------------------------------------------- +// Extra details for Cache Module (CAC) + +//============================================================================= +// Icache +// Cache dimenions +#define CYGARC_SH_MOD_CAC_I_SIZE 8192 // Size of cache in bytes +#define CYGARC_SH_MOD_CAC_I_LINE_SIZE 32 // Size of a cache line +#define CYGARC_SH_MOD_CAC_I_WAYS 1 // Associativity of the cache + +// Cache addressing information +// entry: bits 12 - 5 +#define CYGARC_SH_MOD_ICAC_ADDRESS_BASE 0xf0000000 +#define CYGARC_SH_MOD_ICAC_ADDRESS_TOP 0xf0002000 +#define CYGARC_SH_MOD_ICAC_ADDRESS_STEP 0x00000020 +// V : bit 0 +// Writing zero to V forces an invalidate of the line +#define CYGARC_SH_MOD_ICAC_ADDRESS_FLUSH 0x00000000 + + +//============================================================================= +// Dcache +// Cache dimenions +#define CYGARC_SH_MOD_CAC_D_SIZE 16384 // Size of cache in bytes +#define CYGARC_SH_MOD_CAC_D_LINE_SIZE 32 // Size of a cache line +#define CYGARC_SH_MOD_CAC_D_WAYS 1 // Associativity of the cache + +// Cache addressing information +// entry: bits 13 - 5 +#define CYGARC_SH_MOD_DCAC_ADDRESS_BASE 0xf4000000 +#define CYGARC_SH_MOD_DCAC_ADDRESS_TOP 0xf0004000 +#define CYGARC_SH_MOD_DCAC_ADDRESS_STEP 0x00000020 +// U : bit 1 +// V : bit 0 +// Writing zero to both forces a flush of the line if it is dirty. +#define CYGARC_SH_MOD_DCAC_ADDRESS_FLUSH 0x00000000 + +//----------------------------------------------------------------------------- +// Extra details for interrupt handling +#define CYGARC_SH_SOFTWARE_IP_UPDATE + +#endif // CYGONCE_HAL_MOD_77xx_H
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/include/mod_regs_bsc.h @@ -0,0 +1,176 @@ +//============================================================================= +// +// mod_regs_bsc.h +// +// BSC (bus state controller) Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//-------------------------------------------------------------------------- +// Register definitions +#define CYGARC_REG_BCR1 0xFF800000 +#define CYGARC_REG_BCR2 0xFF800004 +#define CYGARC_REG_WCR1 0xFF800008 +#define CYGARC_REG_WCR2 0xFF80000C +#define CYGARC_REG_WCR3 0xFF800010 +#define CYGARC_REG_MCR 0xFF800014 +#define CYGARC_REG_PCR 0xFF800018 +#define CYGARC_REG_RTCSR 0xFF80001C +#define CYGARC_REG_RTCNT 0xFF800020 +#define CYGARC_REG_RTCOR 0xFF800024 +#define CYGARC_REG_RFCR 0xFF800028 + +#define CYGARC_REG_SDMR2 0xFF90008c + +#define CYGARC_REG_SDMR_AREA2_BASE 0xff900000 +#define CYGARC_REG_SDMR_AREA3_BASE 0xff940000 + +#define CYGARC_REG_BCR1_DRAMTP2 0x0010 +#define CYGARC_REG_BCR1_DRAMTP1 0x0008 +#define CYGARC_REG_BCR1_DRAMTP0 0x0004 + +// Bus widths for areas +#define CYGARC_REG_BCR2_A6_8 0x1000 +#define CYGARC_REG_BCR2_A6_16 0x2000 +#define CYGARC_REG_BCR2_A6_32 0x3000 +#define CYGARC_REG_BCR2_A5_8 0x0400 +#define CYGARC_REG_BCR2_A5_16 0x0800 +#define CYGARC_REG_BCR2_A5_32 0x0c00 +#define CYGARC_REG_BCR2_A4_8 0x0100 +#define CYGARC_REG_BCR2_A4_16 0x0200 +#define CYGARC_REG_BCR2_A4_32 0x0300 +#define CYGARC_REG_BCR2_A3_8 0x0040 +#define CYGARC_REG_BCR2_A3_16 0x0080 +#define CYGARC_REG_BCR2_A3_32 0x00c0 +#define CYGARC_REG_BCR2_A2_8 0x0010 +#define CYGARC_REG_BCR2_A2_16 0x0020 +#define CYGARC_REG_BCR2_A2_32 0x0030 + +// Memory type selection and other IO behavior controls +#define CYGARC_REG_BCR1_PULA 0x8000 // Pin A25 to A0 Pull-Up +#define CYGARC_REG_BCR1_PULD 0x4000 // Pin D31 to D0 Pull-Up +#define CYGARC_REG_BCR1_HIZMEM 0x2000 // Hi-Z memory control +#define CYGARC_REG_BCR1_HIZCNT 0x1000 // High-Z Control +#define CYGARC_REG_BCR1_ENDIAN 0x0800 // Endian Flag +#define CYGARC_REG_BCR1_A0_BST_MASK 0x0600 // Area 0 Burst ROM Control +#define CYGARC_REG_BCR1_A0_BST_4 0x0200 +#define CYGARC_REG_BCR1_A0_BST_8 0x0400 +#define CYGARC_REG_BCR1_A0_BST_16 0x0600 +#define CYGARC_REG_BCR1_A5_BST_MASK 0x0180 // Area 5 Burst ROM Control +#define CYGARC_REG_BCR1_A5_BST_4 0x0080 +#define CYGARC_REG_BCR1_A5_BST_8 0x0100 +#define CYGARC_REG_BCR1_A5_BST_16 0x0180 +#define CYGARC_REG_BCR1_A6_BST_MASK 0x0060 // Area 6 Burst ROM Control +#define CYGARC_REG_BCR1_A6_BST_4 0x0020 +#define CYGARC_REG_BCR1_A6_BST_8 0x0040 +#define CYGARC_REG_BCR1_A6_BST_16 0x0060 +#define CYGARC_REG_BCR1_DRAMTP_MASK 0x001c // Area 2, Area 3 Memory Type +#define CYGARC_REG_BCR1_A5PCM 0x0002 // Area 5 Bus Type +#define CYGARC_REG_BCR1_A6PCM 0x0001 // Area 6 Bus Type + +// Intercycle wait states +#define CYGARC_REG_WCR1_WAITSEL 0x8000 // WAIT Sampling Timing Select +#define CYGARC_REG_WCR1_A6I_MASK 0x3000 // Intercycle Idle Specification +#define CYGARC_REG_WCR1_A6I_SHIFT 12 +#define CYGARC_REG_WCR1_A5I_MASK 0x0c00 +#define CYGARC_REG_WCR1_A5I_SHIFT 10 +#define CYGARC_REG_WCR1_A4I_MASK 0x0300 +#define CYGARC_REG_WCR1_A4I_SHIFT 8 +#define CYGARC_REG_WCR1_A3I_MASK 0x00c0 +#define CYGARC_REG_WCR1_A3I_SHIFT 6 +#define CYGARC_REG_WCR1_A2I_MASK 0x0030 +#define CYGARC_REG_WCR1_A2I_SHIFT 4 +#define CYGARC_REG_WCR1_A0I_MASK 0x0003 +#define CYGARC_REG_WCR1_A0I_SHIFT 0 + +#define CYGARC_REG_WCR1_0WS 0 +#define CYGARC_REG_WCR1_1WS 1 +#define CYGARC_REG_WCR1_2WS 2 +#define CYGARC_REG_WCR1_3WS 3 + + +// Wait states +#define CYGARC_REG_WCR2_A6_MASK 0xe000 // Wait states + burst pitch +#define CYGARC_REG_WCR2_A6_SHIFT 13 +#define CYGARC_REG_WCR2_A5_MASK 0x1c00 // Wait states + burst pitch +#define CYGARC_REG_WCR2_A5_SHIFT 10 +#define CYGARC_REG_WCR2_A4_MASK 0x0380 // Wait states +#define CYGARC_REG_WCR2_A4_SHIFT 7 +#define CYGARC_REG_WCR2_A3_MASK 0x0060 // Wait states / CAS latency +#define CYGARC_REG_WCR2_A3_SHIFT 5 +#define CYGARC_REG_WCR2_A2_MASK 0x0018 // Wait states / CAS latency +#define CYGARC_REG_WCR2_A2_SHIFT 3 +#define CYGARC_REG_WCR2_A0_MASK 0x0007 // Wait states + burst pitch +#define CYGARC_REG_WCR2_A0_SHIFT 0 + +#define CYGARC_REG_WCR2_0WS 0 +#define CYGARC_REG_WCR2_1WS 1 +#define CYGARC_REG_WCR2_2WS 2 +#define CYGARC_REG_WCR2_3WS 3 +#define CYGARC_REG_WCR2_4WS 4 +#define CYGARC_REG_WCR2_6WS 5 +#define CYGARC_REG_WCR2_8WS 6 +#define CYGARC_REG_WCR2_10WS 7 + + + +//----------------------------------------------------------------------------- +// Calculate constants needed to drive the proper SDRAM refresh rate. Argument +// is delay between required refresh events in microseconds (us). Should be +// available off the SDRAM spec sheet. +// These should be a part of a fully CDLicized memory controller setup. +#define CYGARC_RTCSR_PRESCALE(_r_) \ +(((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(4*1000000))<256) ? 4 : \ + ((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(16*1000000))<256) ? 16 : \ + ((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(64*1000000))<256) ? 64 : \ + ((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(256*1000000))<256) ? 256 : \ + ((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(1024*1000000))<256) ? 1024 : \ + ((CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(2048*1000000))<256) ? 2048 : 4096) + +// These two macros provide the static values we need to stuff into the +// registers. +#define CYGARC_RTCSR_CKSx(_r_) \ + (( 4 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x08 : \ + ( 16 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x10 : \ + ( 64 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x18 : \ + ( 256 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x20 : \ + (1024 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x28 : \ + (2048 == CYGARC_RTCSR_PRESCALE(_r_)) ? 0x30 : 0x38 ) + +#define CYGARC_RTCSR_N(_r_) \ + (CYGHWR_HAL_SH_BOARD_SPEED*(_r_)/(CYGARC_RTCSR_PRESCALE(_r_)*1000000)) + +
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/include/mod_regs_cac.h @@ -0,0 +1,61 @@ +//============================================================================= +// +// mod_regs_cac.h +// +// CAC (cache) Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +// Besides the below, cache sizes are defined in the CPU variant module +// headers (mod_77xx.h). + +//-------------------------------------------------------------------------- +// Cache registers +#define CYGARC_REG_CCR 0xFF00001C + +#define CYGARC_REG_CCR_IIX 0x00008000 // IC index enable +#define CYGARC_REG_CCR_ICI 0x00000800 // IC invalidation +#define CYGARC_REG_CCR_ICE 0x00000100 // IC Enable +#define CYGARC_REG_CCR_OIX 0x00000080 // OC index enable +#define CYGARC_REG_CCR_ORA 0x00000020 // OC RAM enable +#define CYGARC_REG_CCR_OCI 0x00000008 // OC Invalidation +#define CYGARC_REG_CCR_CB 0x00000004 // Copy-Back enable +#define CYGARC_REG_CCR_WT 0x00000002 // Write Through enable +#define CYGARC_REG_CCR_OCE 0x00000001 // OC Enable + +#define CYGARC_REG_CCR_CE 0x00000101 // IC, OC Enable +#define CYGARC_REG_CCR_CF 0x00000808 // IC, OC Invalidation +
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/include/mod_regs_cpg.h @@ -0,0 +1,154 @@ +//============================================================================= +// +// mod_regs_cpg.h +// +// CPG (clock pulse generator) Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//-------------------------------------------------------------------------- +// Oscillator control registers +#define CYGARC_REG_FRQCR 0xFFC00000 +#define CYGARC_REG_STBCR 0xFFC00004 +#define CYGARC_REG_WTCNT 0xFFC00008 // read 8bit, write 16bit +#define CYGARC_REG_WTCSR 0xFFC0000C // read 8bit, write 16bit +#define CYGARC_REG_STBCR2 0xFFC00010 + +#define CYGARC_REG_WTCNT_WRITE 0x5a00 // top 8bit value for write + +#define CYGARC_REG_WTCSR_WRITE 0xa500 // top 8bit value for write +#define CYGARC_REG_WTCSR_TME 0x80 // timer enable +#define CYGARC_REG_WTCSR_WT_IT 0x40 // watchdog(1)/interval(0) +#define CYGARC_REG_WTCSR_RSTS 0x20 // manual(1)/poweron(0) +#define CYGARC_REG_WTCSR_WOVF 0x10 // watchdog overflow +#define CYGARC_REG_WTCSR_IOVF 0x08 // interval overflow +#define CYGARC_REG_WTCSR_CKS2 0x04 // clock select 2 +#define CYGARC_REG_WTCSR_CKS1 0x02 // clock select 1 +#define CYGARC_REG_WTCSR_CKS0 0x01 // clock select 0 +#define CYGARC_REG_WTCSR_CKSx_MASK 0x07 // clock select mask +// This is the period (in us) between watchdog reset and overflow. +// Note: We use max timeout delay for now. +#define CYGARC_REG_WTCSR_CKSx_SETTING 0x07 // max delay + +#define CYGARC_REG_WTCSR_PERIOD ((1000000000/(CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED/4096))*256) + +// Translate various CDL clock configurations to register equivalents +// for the various CPG versions +#if (CYGARC_SH_MOD_CPG == 1) // ---------------------------- V1 + +// PLL1 +#if (CYGHWR_HAL_SH_OOC_PLL_1 == 0) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0000 +#elif (CYGHWR_HAL_SH_OOC_PLL_1 == 6) +# define CYGARC_REG_FRQCR_INIT_PLL1 0x0400 +#else +# error "Unsupported PLL1 setting" +#endif + +// PLL2 +#if (CYGHWR_HAL_SH_OOC_PLL_2 == 0) +# define CYGARC_REG_FRQCR_INIT_PLL2 0x0000 +#elif (CYGHWR_HAL_SH_OOC_PLL_2 == 1) +# define CYGARC_REG_FRQCR_INIT_PLL2 0x0200 +#else +# error "Unsupported PLL2 setting" +#endif + +// Divider IFC +#if (CYGHWR_HAL_SH_OOC_DIVIDER_IFC == 1) +# define CYGARC_REG_FRQCR_INIT_DIVIDER_IFC 0x0000 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_IFC == 2) +# define CYGARC_REG_FRQCR_INIT_DIVIDER_IFC 0x0040 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_IFC == 3) +# define CYGARC_REG_FRQCR_INIT_DIVIDER_IFC 0x0080 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_IFC == 4) +# define CYGARC_REG_FRQCR_INIT_DIVIDER_IFC 0x00c0 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_IFC == 6) +# define CYGARC_REG_FRQCR_INIT_DIVIDER_IFC 0x0100 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_IFC == 8) +# define CYGARC_REG_FRQCR_INIT_DIVIDER_IFC 0x0140 +#else +# error "Unsupported Divider IFC setting" +#endif + +// Divider BFC +#if (CYGHWR_HAL_SH_OOC_DIVIDER_BFC == 1) +# define CYGARC_REG_FRQCR_INIT_DIVIDER_BFC 0x0000 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_BFC == 2) +# define CYGARC_REG_FRQCR_INIT_DIVIDER_BFC 0x0008 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_BFC == 3) +# define CYGARC_REG_FRQCR_INIT_DIVIDER_BFC 0x0010 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_BFC == 4) +# define CYGARC_REG_FRQCR_INIT_DIVIDER_BFC 0x0018 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_BFC == 6) +# define CYGARC_REG_FRQCR_INIT_DIVIDER_BFC 0x0020 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_BFC == 8) +# define CYGARC_REG_FRQCR_INIT_DIVIDER_BFC 0x0028 +#else +# error "Unsupported Divider BFC setting" +#endif + +// Divider PFC +#if (CYGHWR_HAL_SH_OOC_DIVIDER_PFC == 2) +# define CYGARC_REG_FRQCR_INIT_DIVIDER_PFC 0x0000 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_PFC == 3) +# define CYGARC_REG_FRQCR_INIT_DIVIDER_PFC 0x0001 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_PFC == 4) +# define CYGARC_REG_FRQCR_INIT_DIVIDER_PFC 0x0002 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_PFC == 6) +# define CYGARC_REG_FRQCR_INIT_DIVIDER_PFC 0x0003 +#elif (CYGHWR_HAL_SH_OOC_DIVIDER_PFC == 8) +# define CYGARC_REG_FRQCR_INIT_DIVIDER_PFC 0x0004 +#else +# error "Unsupported Divider PFC setting" +#endif + + +// CKOEN +#ifdef CYGHWR_HAL_SH_OOC_CKIO +# define CYGARC_REG_FRQCR_INIT_CKOEN 0x0800 +#else +# define CYGARC_REG_FRQCR_INIT_CKOEN 0x0000 +#endif + +#else + +# error "Unsupported CPG version" + +#endif + +// Init value +#define CYGARC_REG_FRQCR_INIT (CYGARC_REG_FRQCR_INIT_PLL1|CYGARC_REG_FRQCR_INIT_PLL2|CYGARC_REG_FRQCR_INIT_DIVIDER_IFC|CYGARC_REG_FRQCR_INIT_DIVIDER_BFC|CYGARC_REG_FRQCR_INIT_DIVIDER_PFC|CYGARC_REG_FRQCR_INIT_CKOEN)
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/include/mod_regs_dma.h @@ -0,0 +1,111 @@ +//============================================================================= +// +// mod_regs_dma.h +// +// DMA (direct memory access) Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//-------------------------------------------------------------------------- +// DMA Controller registers + +#define CYGARC_REG_SAR0 0xa4000020 +#define CYGARC_REG_DAR0 0xa4000024 +#define CYGARC_REG_DMATCR0 0xa4000028 +#define CYGARC_REG_CHCR0 0xa400002c +#define CYGARC_REG_SAR1 0xa4000030 +#define CYGARC_REG_DAR1 0xa4000034 +#define CYGARC_REG_DMATCR1 0xa4000038 +#define CYGARC_REG_CHCR1 0xa400003c +#define CYGARC_REG_SAR2 0xa4000040 +#define CYGARC_REG_DAR2 0xa4000044 +#define CYGARC_REG_DMATCR2 0xa4000048 +#define CYGARC_REG_CHCR2 0xa400004c +#define CYGARC_REG_SAR3 0xa4000050 +#define CYGARC_REG_DAR3 0xa4000054 +#define CYGARC_REG_DMATCR3 0xa4000058 +#define CYGARC_REG_CHCR3 0xa400005c +#define CYGARC_REG_DMAOR 0xa4000060 + +// Offsets from base register +#define CYGARC_REG_SAR 0x00 +#define CYGARC_REG_DAR 0x04 +#define CYGARC_REG_DMATCR 0x08 +#define CYGARC_REG_CHCR 0x0c + + +// DMA Channel Control Register. If there's a digit suffix to CHCR the flag +// is only valid in the listed channels. +#define CYGARC_REG_CHCR3_DI 0x00100000 // direct/indirect selection +#define CYGARC_REG_CHCR2_RO 0x00080000 // source address reload +#define CYGARC_REG_CHCR01_RL 0x00040000 // request check level +#define CYGARC_REG_CHCR01_AM 0x00020000 // acknowledge mode +#define CYGARC_REG_CHCR01_AL 0x00010000 // acknowledge level +#define CYGARC_REG_CHCR_DM1 0x00008000 // destination address mode +#define CYGARC_REG_CHCR_DM0 0x00004000 +#define CYGARC_REG_CHCR_SM1 0x00002000 // source address mode +#define CYGARC_REG_CHCR_SM0 0x00001000 +#define CYGARC_REG_CHCR_RS3 0x00000800 // resource select +#define CYGARC_REG_CHCR_RS2 0x00000400 +#define CYGARC_REG_CHCR_RS1 0x00000200 +#define CYGARC_REG_CHCR_RS0 0x00000100 +#define CYGARC_REG_CHCR01_DS 0x00000040 // DREQ select +#define CYGARC_REG_CHCR_TM 0x00000020 // transmit mode +#define CYGARC_REG_CHCR_TS1 0x00000010 // transmit size +#define CYGARC_REG_CHCR_TS0 0x00000008 +#define CYGARC_REG_CHCR_IE 0x00000004 // interrupt enable +#define CYGARC_REG_CHCR_TE 0x00000002 // transfer end +#define CYGARC_REG_CHCR_DE 0x00000001 // DMAC enable + +// Resource select options +#define CYGARC_REG_CHCR_RS_EXT_DUAL 0x00000000 +#define CYGARC_REG_CHCR_RS_EXT_EX_DAC 0x00000100 +#define CYGARC_REG_CHCR_RS_EXT_DAC_EX 0x00000300 +#define CYGARC_REG_CHCR_RS_AUTO 0x00000400 +#define CYGARC_REG_CHCR_RS_IRDA_TX 0x00000a00 +#define CYGARC_REG_CHCR_RS_IRDA_RX 0x00000b00 +#define CYGARC_REG_CHCR_RS_SCIF_TX 0x00000c00 +#define CYGARC_REG_CHCR_RS_SCIF_RX 0x00000d00 +#define CYGARC_REG_CHCR_RS_AD 0x00000e00 +#define CYGARC_REG_CHCR_RS_CMT 0x00000f00 + + +// DMA Operation Register +#define CYGARC_REG_DMAOR_PR1 0x0200 // priority level +#define CYGARC_REG_DMAOR_PR0 0x0100 +#define CYGARC_REG_DMAOR_AE 0x0004 // address error flag +#define CYGARC_REG_DMAOR_NMIF 0x0002 // NMI flag +#define CYGARC_REG_DMAOR_DME 0x0001 // DMA master enable
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/include/mod_regs_intc.h @@ -0,0 +1,76 @@ +//============================================================================= +// +// mod_regs_intc.h +// +// INTC (interrupt controller) Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//-------------------------------------------------------------------------- +// Interrupt registers, module type 1 +#define CYGARC_REG_EXCEVT 0xFF000024 +#define CYGARC_REG_INTEVT 0xFF000028 + +#define CYGARC_REG_ICR 0xFFD00000 +#define CYGARC_REG_IPRA 0xFFD00004 +#define CYGARC_REG_IPRB 0xFFD00008 +#define CYGARC_REG_IPRC 0xFFD0000C + +#define CYGARC_REG_IPRA_TMU0_MASK 0xf000 +#define CYGARC_REG_IPRA_TMU0_PRI1 0x1000 +#define CYGARC_REG_IPRA_TMU1_MASK 0x0f00 +#define CYGARC_REG_IPRA_TMU1_PRI1 0x0100 +#define CYGARC_REG_IPRA_TMU2_MASK 0x00f0 +#define CYGARC_REG_IPRA_TMU2_PRI1 0x0010 +#define CYGARC_REG_IPRA_RTC_MASK 0x000f +#define CYGARC_REG_IPRA_RTC_PRI1 0x0001 + +#define CYGARC_REG_IPRB_WDT_MASK 0xf000 +#define CYGARC_REG_IPRB_WDT_PRI1 0x1000 +#define CYGARC_REG_IPRB_REF_MASK 0x0f00 +#define CYGARC_REG_IPRB_REF_PRI1 0x0100 +#define CYGARC_REG_IPRB_SCI_MASK 0x00f0 +#define CYGARC_REG_IPRB_SCI_PRI1 0x0010 + +#define CYGARC_REG_IPRC_GPIO_MASK 0xF000 +#define CYGARC_REG_IPRC_GPIO_PRI1 0x1000 +#define CYGARC_REG_IPRC_DMAC_MASK 0x0F00 +#define CYGARC_REG_IPRC_DMAC_PRI1 0x0100 +#define CYGARC_REG_IPRC_SCIF_MASK 0x00F0 +#define CYGARC_REG_IPRC_SCIF_PRI1 0x0010 +#define CYGARC_REG_IPRC_HUDI_MASK 0x000F +#define CYGARC_REG_IPRC_HUDI_PRI1 0x0001 +
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/include/mod_regs_mmu.h @@ -0,0 +1,52 @@ +//============================================================================= +// +// mod_regs_mmu.h +// +// MMU Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//-------------------------------------------------------------------------- +// MMU control registers +#define CYGARC_REG_MMUCR 0xFF000010 + +#define CYGARC_REG_MMUCR_LRUI_MASK 0xFC000000 +#define CYGARC_REG_MMUCR_URB_MASK 0x00FC0000 +#define CYGARC_REG_MMUCR_URC_MASK 0x0000FC00 +#define CYGARC_REG_MMUCR_SQMD 0x00000200 +#define CYGARC_REG_MMUCR_SV 0x00000100 +#define CYGARC_REG_MMUCR_TI 0x00000004 +#define CYGARC_REG_MMUCR_AT 0x00000001
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/include/mod_regs_pfc.h @@ -0,0 +1,100 @@ +//============================================================================= +// +// mod_regs_pfc.h +// +// PFC (pin function controller) Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#define CYGARC_REG_PACR 0xa4000100 // port A control +#define CYGARC_REG_PBCR 0xa4000102 // port B control +#define CYGARC_REG_PCCR 0xa4000104 // port C control +#define CYGARC_REG_PDCR 0xa4000106 // port D control +#define CYGARC_REG_PECR 0xa4000108 // port E control +#define CYGARC_REG_PFCR 0xa400010a // port F control +#define CYGARC_REG_PGCR 0xa400010c // port G control +#define CYGARC_REG_PHCR 0xa400010e // port H control +#define CYGARC_REG_PJCR 0xa4000110 // port J control +#define CYGARC_REG_PKCR 0xa4000112 // port K control +#define CYGARC_REG_PLCR 0xa4000114 // port L control +#define CYGARC_REG_SCPCR 0xa4000116 // SC port control + +#define CYGARC_REG_PADR 0xa4000120 // port A data +#define CYGARC_REG_PBDR 0xa4000122 // port B data +#define CYGARC_REG_PCDR 0xa4000124 // port C data +#define CYGARC_REG_PDDR 0xa4000126 // port D data +#define CYGARC_REG_PEDR 0xa4000128 // port E data +#define CYGARC_REG_PFDR 0xa400012a // port F data +#define CYGARC_REG_PGDR 0xa400012c // port G data +#define CYGARC_REG_PHDR 0xa400012e // port H data +#define CYGARC_REG_PJDR 0xa4000130 // port J data +#define CYGARC_REG_PKDR 0xa4000132 // port K data +#define CYGARC_REG_PLDR 0xa4000134 // port L data +#define CYGARC_REG_SCPDR 0xa4000136 // SC port data + + +// Port C +#define CYGARC_REG_PCCR_PC7_MASK 0xc000 +#define CYGARC_REG_PCCR_PC7_shift 14 +#define CYGARC_REG_PCCR_PC6_MASK 0x3000 +#define CYGARC_REG_PCCR_PC6_shift 12 +#define CYGARC_REG_PCCR_PC5_MASK 0x0c00 +#define CYGARC_REG_PCCR_PC5_shift 10 +#define CYGARC_REG_PCCR_PC4_MASK 0x0300 +#define CYGARC_REG_PCCR_PC4_shift 8 +#define CYGARC_REG_PCCR_PC3_MASK 0x00c0 +#define CYGARC_REG_PCCR_PC3_shift 6 +#define CYGARC_REG_PCCR_PC2_MASK 0x0030 +#define CYGARC_REG_PCCR_PC2_shift 4 +#define CYGARC_REG_PCCR_PC1_MASK 0x000c +#define CYGARC_REG_PCCR_PC1_shift 2 +#define CYGARC_REG_PCCR_PC0_MASK 0x0003 +#define CYGARC_REG_PCCR_PC0_shift 0 + +#define CYGARC_REG_PCCR_MD_OTHER 0x0 +#define CYGARC_REG_PCCR_MD_OUT 0x1 +#define CYGARC_REG_PCCR_MD_IN_ON 0x2 +#define CYGARC_REG_PCCR_MD_IN_OFF 0x3 + +#define CYGARC_REG_PCDR_PC7DT 0x80 +#define CYGARC_REG_PCDR_PC6DT 0x40 +#define CYGARC_REG_PCDR_PC5DT 0x20 +#define CYGARC_REG_PCDR_PC4DT 0x10 +#define CYGARC_REG_PCDR_PC3DT 0x08 +#define CYGARC_REG_PCDR_PC2DT 0x04 +#define CYGARC_REG_PCDR_PC1DT 0x02 +#define CYGARC_REG_PCDR_PC0DT 0x01 +
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/include/mod_regs_rtc.h @@ -0,0 +1,77 @@ +//============================================================================= +// +// mod_regs_rtc.h +// +// RTC (real time clock) Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//-------------------------------------------------------------------------- +// RealTime Clock + +#define CYGARC_REG_RC64CNT 0xfffffec0 +#define CYGARC_REG_RSECCNT 0xfffffec2 +#define CYGARC_REG_RMINCNT 0xfffffec4 +#define CYGARC_REG_RHRCNT 0xfffffec6 +#define CYGARC_REG_RWKCNT 0xfffffec8 +#define CYGARC_REG_RDAYCNT 0xfffffeca +#define CYGARC_REG_RMONCNT 0xfffffecc +#define CYGARC_REG_RYRCNT 0xfffffece +#define CYGARC_REG_RSECAR 0xfffffed0 +#define CYGARC_REG_RMINAR 0xfffffed2 +#define CYGARC_REG_RHRAR 0xfffffed4 +#define CYGARC_REG_RWKAR 0xfffffed6 +#define CYGARC_REG_RDAYAR 0xfffffed8 +#define CYGARC_REG_RMONAR 0xfffffeda +#define CYGARC_REG_RCR1 0xfffffedc +#define CYGARC_REG_RCR2 0xfffffede + + +#define CYGARC_REG_RCR1_CF 0x80 // carry flag +#define CYGARC_REG_RCR1_CIE 0x10 // carry interrupt enable +#define CYGARC_REG_RCR1_AIE 0x08 // alarm interrupt enable +#define CYGARC_REG_RCR1_AF 0x01 // alarm flag + +#define CYGARC_REG_RCR2_PEF 0x80 // periodic interrupt flag +#define CYGARC_REG_RCR2_PES2 0x40 // periodic interrupt setting +#define CYGARC_REG_RCR2_PES1 0x20 +#define CYGARC_REG_RCR2_PES0 0x10 +#define CYGARC_REG_RCR2_RTCEN 0x08 // RTC enable +#define CYGARC_REG_RCR2_ADJ 0x04 // second adjustment +#define CYGARC_REG_RCR2_RESET 0x02 // reset +#define CYGARC_REG_RCR2_START 0x01 // start + +
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/include/mod_regs_ser.h @@ -0,0 +1,277 @@ +//============================================================================= +// +// mod_regs_ser.h +// +// SCI, SCIF, and IRDA (serial) Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// Note: All three serial module definitions kept in the same file +// since they share some of the information. +//####DESCRIPTIONEND#### +// +//============================================================================= + +//++++++ Module SCI ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +//-------------------------------------------------------------------------- +// Serial registers. All 8 bit registers. +#define CYGARC_REG_SCSMR1 0xFFE00000 // serial mode register +#define CYGARC_REG_SCBRR1 0xFFE00004 // bit rate register +#define CYGARC_REG_SCSCR1 0xFFE00008 // serial control register +#define CYGARC_REG_SCTDR1 0xFFE0000C // transmit data register +#define CYGARC_REG_SCSSR1 0xFFE00010 // serial status register +#define CYGARC_REG_SCRDR1 0xFFE00014 // receive data register +#define CYGARC_REG_SCRCMR1 0xFFE00018 +#define CYGARC_REG_SCSPTR1 0xFFE0001C // serial port register + +// Serial Mode Register +#define CYGARC_REG_SCSMR1_CA 0x80 // communication mode +#define CYGARC_REG_SCSMR1_CHR 0x40 // character length (7 if set) +#define CYGARC_REG_SCSMR1_PE 0x20 // parity enable +#define CYGARC_REG_SCSMR1_OE 0x10 // parity mode +#define CYGARC_REG_SCSMR1_STOP 0x08 // stop bit length +#define CYGARC_REG_SCSMR1_MP 0x04 // multiprocessor mode +#define CYGARC_REG_SCSMR1_CKS1 0x02 // clock select 1 +#define CYGARC_REG_SCSMR1_CKS0 0x01 // clock select 0 +#define CYGARC_REG_SCSMR1_CKSx_MASK 0x03 // mask + +// Serial Control Register +#define CYGARC_REG_SCSCR1_TIE 0x80 // transmit interrupt enable +#define CYGARC_REG_SCSCR1_RIE 0x40 // receive interrupt enable +#define CYGARC_REG_SCSCR1_TE 0x20 // transmit enable +#define CYGARC_REG_SCSCR1_RE 0x10 // receive enable +#define CYGARC_REG_SCSCR1_MPIE 0x08 // multiprocessor interrupt enable +#define CYGARC_REG_SCSCR1_TEIE 0x04 // transmit-end interrupt enable +#define CYGARC_REG_SCSCR1_CKE1 0x02 // clock enable 1 +#define CYGARC_REG_SCSCR1_CKE0 0x01 // clock enable 0 + +// Serial Status Register +#define CYGARC_REG_SCSSR1_TDRE 0x80 // transmit data register empty +#define CYGARC_REG_SCSSR1_RDRF 0x40 // receive data register full +#define CYGARC_REG_SCSSR1_ORER 0x20 // overrun error +#define CYGARC_REG_SCSSR1_FER 0x10 // framing error +#define CYGARC_REG_SCSSR1_PER 0x08 // parity error +#define CYGARC_REG_SCSSR1_TEND 0x04 // transmit end +#define CYGARC_REG_SCSSR1_MPB 0x02 // multiprocessor bit +#define CYGARC_REG_SCSSR1_MPBT 0x01 // multiprocessor bit transfer + +// When clearing the status register, always write the value: +// CYGARC_REG_SCSSR_CLEARMASK & ~bit +// to prevent other bits than the one of interest to be cleared. +#define CYGARC_REG_SCSSR1_CLEARMASK 0xf8 + + +// Baud rate values calculation, depending on peripheral clock (Pf) +// n is CKS setting (0-3) +// N = (Pf/(64*2^(2n-1)*B))-1 +// With CYGARC_SCBRR_CKSx providing the values 1, 4, 16, 64 we get +// N = (Pf/(32*_CKS*B))-1 +// +// The CYGARC_SCBRR_OPTIMAL_CKS macro should compute the minimal CKS +// setting for the given baud rate and peripheral clock. +// +// The error of the CKS+count value can be computed by: +// E(%) = ((Pf/((N+1)*B*(64^(n-1)))-1)*100 +// +#define CYGARC_SCBRR_PRESCALE(_b_) \ +((((CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED/32/1/(_b_))-1)<256) ? 1 : \ + (((CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED/32/4/(_b_))-1)<256) ? 4 : \ + (((CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED/32/16/(_b_))-1)<256) ? 16 : 64) + +// These two macros provide the static values we need to stuff into the +// registers. +#define CYGARC_SCBRR_CKSx(_b_) \ + ((1 == CYGARC_SCBRR_PRESCALE(_b_)) ? 0 : \ + (4 == CYGARC_SCBRR_PRESCALE(_b_)) ? 1 : \ + (16 == CYGARC_SCBRR_PRESCALE(_b_)) ? 2 : 3) +#define CYGARC_SCBRR_N(_b_) \ + (((_b_) < 4800) ? 0 : \ + ((_b_) > 115200) ? 0 : \ + ((CYGHWR_HAL_SH_ONCHIP_PERIPHERAL_SPEED/32/CYGARC_SCBRR_PRESCALE(_b_)/(_b_))-1)) + + +//++++++ Module IRDA +++++++++++++++++++++++++++++++++++++++++++++++++++++++ +#ifdef CYGARC_SH_MOD_IRDA + +//-------------------------------------------------------------------------- +// IrDA (infrared data association). Can also act as regular serial w FIFO + +#define CYGARC_REG_SCSMR1 0xFFE00000 // serial mode register +#define CYGARC_REG_SCBRR1 0xFFE00004 // bit rate register +#define CYGARC_REG_SCSCR1 0xFFE00008 // serial control register +#define CYGARC_REG_SCTDR1 0xFFE0000C // transmit data register +#define CYGARC_REG_SCSSR1 0xFFE00010 // serial status register +#define CYGARC_REG_SCRDR1 0xFFE00014 // receive data register +#define CYGARC_REG_SCRCMR1 0xFFE00018 +#define CYGARC_REG_SCSPTR1 0xFFE0001C // serial port register + +// Serial Mode Register +#define CYGARC_REG_SCSMR1_IRMOD 0x80 // IrDA Mode +#define CYGARC_REG_SCSMR1_ICK_MASK 0x78 // IR pulse width +#define CYGARC_REG_SCSMR1_PSEL 0x04 // IR pulse selector(?) +#define CYGARC_REG_SCSMR1_CKS1 0x02 // clock select 1 +#define CYGARC_REG_SCSMR1_CKS0 0x01 // clock select 0 +#define CYGARC_REG_SCSMR1_CKSx_MASK 0x03 // mask + +// Serial Control Register +#define CYGARC_REG_SCSCR1_TIE 0x80 // transmit interrupt enable +#define CYGARC_REG_SCSCR1_RIE 0x40 // receive interrupt enable +#define CYGARC_REG_SCSCR1_TE 0x20 // transmit enable +#define CYGARC_REG_SCSCR1_RE 0x10 // receive enable +#define CYGARC_REG_SCSCR1_CKE1 0x02 // clock enable 1 +#define CYGARC_REG_SCSCR1_CKE0 0x01 // clock enable 0 + +// Serial Status Register +#define CYGARC_REG_SCSSR1_PER_MASK 0xf000 // number of parity errors +#define CYGARC_REG_SCSSR1_PER_shift 12 +#define CYGARC_REG_SCSSR1_FER_MASK 0x0f00 // number of framing errors +#define CYGARC_REG_SCSSR1_FER_shift 8 +#define CYGARC_REG_SCSSR1_ER 0x0080 // receive error +#define CYGARC_REG_SCSSR1_TEND 0x0040 // transmit end +#define CYGARC_REG_SCSSR1_TDFE 0x0020 // transmit fifo data empty +#define CYGARC_REG_SCSSR1_BRK 0x0010 // break detection +#define CYGARC_REG_SCSSR1_FER 0x0008 // framing error +#define CYGARC_REG_SCSSR1_PER 0x0004 // parity error +#define CYGARC_REG_SCSSR1_RDF 0x0002 // receive fifo data full +#define CYGARC_REG_SCSSR1_DR 0x0001 // receive data ready + +// When clearing the status register, always write the value: +// CYGARC_REG_SCSSR2_CLEARMASK & ~bit +// to prevent other bits than the one of interest to be cleared. +#define CYGARC_REG_SCSSR1_CLEARMASK 0xf3 + +// Serial FIFO Control Register +#define CYGARC_REG_SCFCR1_RTRG_MASK 0xc0 // receive fifo data trigger +#define CYGARC_REG_SCFCR1_RTRG_1 0x00 // trigger on 1 char +#define CYGARC_REG_SCFCR1_RTRG_4 0x40 // trigger on 4 chars +#define CYGARC_REG_SCFCR1_RTRG_8 0x80 // trigger on 8 chars +#define CYGARC_REG_SCFCR1_RTRG_14 0xc0 // trigger on 14 chars + +#define CYGARC_REG_SCFCR1_TTRG_MASK 0x30 // transmit fifo data trigger +#define CYGARC_REG_SCFCR1_TTRG_8 0x00 // trigger on 8 chars +#define CYGARC_REG_SCFCR1_TTRG_4 0x10 // trigger on 4 chars +#define CYGARC_REG_SCFCR1_TTRG_2 0x20 // trigger on 2 chars +#define CYGARC_REG_SCFCR1_TTRG_1 0x30 // trigger on 1 char + +#define CYGARC_REG_SCFCR1_MCE 0x08 // modem control enable +#define CYGARC_REG_SCFCR1_TFRST 0x04 // transmit fifo reset +#define CYGARC_REG_SCFCR1_RFRST 0x02 // receive fifo reset +#define CYGARC_REG_SCFCR1_LOOP 0x01 // loop back test + + +// Serial FIFO Data Count Set Register +#define CYGARC_REG_SCFDR1_RCOUNT_MASK 0x001f // number of chars in r fifo +#define CYGARC_REG_SCFDR1_RCOUNT_shift 0 +#define CYGARC_REG_SCFDR1_TCOUNT_MASK 0x1f00 // number of chars in t fifo +#define CYGARC_REG_SCFDR1_TCOUNT_shift 8 + +#endif // CYGARC_SH_MOD_IRDA + +//++++++ Module SCIF +++++++++++++++++++++++++++++++++++++++++++++++++++++++ +#ifdef CYGARC_SH_MOD_SCIF + +//-------------------------------------------------------------------------- +// Serial w FIFO registers + +#define CYGARC_REG_SCSMR2 0xffe80000 // Serial mode +#define CYGARC_REG_SCBRR2 0xffe80004 // Bit rate +#define CYGARC_REG_SCSCR2 0xffe80008 // Serial control +#define CYGARC_REG_SCFTDR2 0xffe8000c // Transmit FIFO data +#define CYGARC_REG_SCFSR2 0xffe80010 // Serial status +#define CYGARC_REG_SCFRDR2 0xffe80014 // Receive data FIFO +#define CYGARC_REG_SCFCR2 0xffe80018 // FIFO control register +#define CYGARC_REG_SCFDR2 0xffe8001c // FIFO data count set +#define CYGARC_REG_SCSPTR2 0xffe80020 // serial port register +#define CYGARC_REG_SCLSR2 0xffe80024 // line status register + +// Serial Mode Register +#define CYGARC_REG_SCSMR2_CHR 0x40 // character length (7 if set) +#define CYGARC_REG_SCSMR2_PE 0x20 // parity enable +#define CYGARC_REG_SCSMR2_OE 0x10 // parity mode +#define CYGARC_REG_SCSMR2_STOP 0x08 // stop bit length +#define CYGARC_REG_SCSMR2_CKS1 0x02 // clock select 1 +#define CYGARC_REG_SCSMR2_CKS0 0x01 // clock select 0 +#define CYGARC_REG_SCSMR2_CKSx_MASK 0x03 // mask + +// Serial Control Register +#define CYGARC_REG_SCSCR2_TIE 0x80 // transmit interrupt enable +#define CYGARC_REG_SCSCR2_RIE 0x40 // receive interrupt enable +#define CYGARC_REG_SCSCR2_TE 0x20 // transmit enable +#define CYGARC_REG_SCSCR2_RE 0x10 // receive enable +#define CYGARC_REG_SCSCR2_CKE1 0x02 // clock enable 1 +#define CYGARC_REG_SCSCR2_CKE0 0x01 // clock enable 0 + +// Serial Status Register +#define CYGARC_REG_SCSSR2_PER_MASK 0xf000 // number of parity errors +#define CYGARC_REG_SCSSR2_PER_shift 12 +#define CYGARC_REG_SCSSR2_FER_MASK 0x0f00 // number of framing errors +#define CYGARC_REG_SCSSR2_FER_shift 8 +#define CYGARC_REG_SCSSR2_ER 0x0080 // receive error +#define CYGARC_REG_SCSSR2_TEND 0x0040 // transmit end +#define CYGARC_REG_SCSSR2_TDFE 0x0020 // transmit fifo data empty +#define CYGARC_REG_SCSSR2_BRK 0x0010 // break detection +#define CYGARC_REG_SCSSR2_FER 0x0008 // framing error +#define CYGARC_REG_SCSSR2_PER 0x0004 // parity error +#define CYGARC_REG_SCSSR2_RDF 0x0002 // receive fifo data full +#define CYGARC_REG_SCSSR2_DR 0x0001 // receive data ready + +// When clearing the status register, always write the value: +// CYGARC_REG_SCSSR2_CLEARMASK & ~bit +// to prevent other bits than the one of interest to be cleared. +#define CYGARC_REG_SCSSR2_CLEARMASK 0xf3 + +// Serial FIFO Control Register +#define CYGARC_REG_SCFCR2_RTRG_MASK 0xc0 // receive fifo data trigger +#define CYGARC_REG_SCFCR2_RTRG_1 0x00 // trigger on 1 char +#define CYGARC_REG_SCFCR2_RTRG_4 0x40 // trigger on 4 chars +#define CYGARC_REG_SCFCR2_RTRG_8 0x80 // trigger on 8 chars +#define CYGARC_REG_SCFCR2_RTRG_14 0xc0 // trigger on 14 chars + +#define CYGARC_REG_SCFCR2_TTRG_MASK 0x30 // transmit fifo data trigger +#define CYGARC_REG_SCFCR2_TTRG_8 0x00 // trigger on 8 chars +#define CYGARC_REG_SCFCR2_TTRG_4 0x10 // trigger on 4 chars +#define CYGARC_REG_SCFCR2_TTRG_2 0x20 // trigger on 2 chars +#define CYGARC_REG_SCFCR2_TTRG_1 0x30 // trigger on 1 char + +#define CYGARC_REG_SCFCR2_MCE 0x08 // modem control enable +#define CYGARC_REG_SCFCR2_TFRST 0x04 // transmit fifo reset +#define CYGARC_REG_SCFCR2_RFRST 0x02 // receive fifo reset +#define CYGARC_REG_SCFCR2_LOOP 0x01 // loop back test + + +// Serial FIFO Data Count Set Register +#define CYGARC_REG_SCFDR2_RCOUNT_MASK 0x001f // number of chars in r fifo +#define CYGARC_REG_SCFDR2_RCOUNT_shift 0 +#define CYGARC_REG_SCFDR2_TCOUNT_MASK 0x1f00 // number of chars in t fifo +#define CYGARC_REG_SCFDR2_TCOUNT_shift 8 + +#endif // CYGARC_SH_MOD_SCIF
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/include/mod_regs_tmu.h @@ -0,0 +1,79 @@ +//============================================================================= +// +// mod_regs_tmu.h +// +// TMU (timer unit) Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//-------------------------------------------------------------------------- +// TMU registers +#define CYGARC_REG_TOCR 0xFFD80000 // 8 bit +#define CYGARC_REG_TSTR 0xFFD80004 // 8 bit +#define CYGARC_REG_TCOR0 0xFFD80008 // 32 bit +#define CYGARC_REG_TCNT0 0xFFD8000C // 32 bit +#define CYGARC_REG_TCR0 0xFFD80010 // 16 bit +#define CYGARC_REG_TCOR1 0xFFD80014 // 32 bit +#define CYGARC_REG_TCNT1 0xFFD80018 // 32 bit +#define CYGARC_REG_TCR1 0xFFD8001C // 16 bit +#define CYGARC_REG_TCOR2 0xFFD80020 // 32 bit +#define CYGARC_REG_TCNT2 0xFFD80024 // 32 bit +#define CYGARC_REG_TCR2 0xFFD80028 // 16 bit +#define CYGARC_REG_TCPR2 0xFFD8002C // 32 bit + +// TSTR +#define CYGARC_REG_TSTR_STR0 0x0001 +#define CYGARC_REG_TSTR_STR1 0x0002 +#define CYGARC_REG_TSTR_STR2 0x0004 + +// TCR0/1/2 +#define CYGARC_REG_TCR_TPSC0 0x0001 +#define CYGARC_REG_TCR_TPSC1 0x0002 +#define CYGARC_REG_TCR_TPSC2 0x0004 +#define CYGARC_REG_TCR_CKEG0 0x0008 +#define CYGARC_REG_TCR_CKEG1 0x0010 +#define CYGARC_REG_TCR_UNIE 0x0020 +#define CYGARC_REG_TCR_UNF 0x0100 + +#define CYGARC_REG_TCR_TPSC_4 (0) +#define CYGARC_REG_TCR_TPSC_16 (CYGARC_REG_TCR_TPSC0) +#define CYGARC_REG_TCR_TPSC_64 (CYGARC_REG_TCR_TPSC1) +#define CYGARC_REG_TCR_TPSC_256 (CYGARC_REG_TCR_TPSC0|CYGARC_REG_TCR_TPSC1) + +// TCR2 additional bits +#define CYGARC_REG_TCR_ICPE0 0x0040 +#define CYGARC_REG_TCR_ICPE1 0x0080 +#define CYGARC_REG_TCR_ICPF 0x0200
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/include/mod_regs_ubc.h @@ -0,0 +1,75 @@ +//============================================================================= +// +// mod_regs_ubc.h +// +// UBC (user break controller) Module register definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:jskov +// Date: 2000-10-30 +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +//-------------------------------------------------------------------------- +// User Break Control +#define CYGARC_REG_BARA 0xFF200000 // 32 bit +#define CYGARC_REG_BAMRA 0xFF200004 // 8 bit +#define CYGARC_REG_BBRA 0xFF200008 // 16 bit + +#define CYGARC_REG_BARB 0xFF20000C // 32 bit +#define CYGARC_REG_BAMRB 0xFF200010 // 8 bit + +#define CYGARC_REG_BBRB 0xFF200014 // 16 bit +#define CYGARC_REG_BDRB 0xFF200018 // 32 bit +#define CYGARC_REG_BDMRB 0xFF20001C // 32 bit + +#define CYGARC_REG_BRCR 0xFF200020 // 16 bit + + +#define CYGARC_REG_BRCR_CMFA 0x8000 // condition match flag A +#define CYGARC_REG_BRCR_CMFB 0x4000 // condition match flag B +#define CYGARC_REG_BRCR_PCBA 0x0400 // post execute channel A +#define CYGARC_REG_BRCR_DBEB 0x0080 // data break enable B +#define CYGARC_REG_BRCR_PCBB 0x0040 // post execute channel B +#define CYGARC_REG_BRCR_SEQ 0x0008 // sequence condition select +#define CYGARC_REG_BRCR_UBDE 0x0001 // User Break Debug Enable + + +#define CYGARC_REG_BBRA_DFETCH 0x0020 // Break on DFETCH +#define CYGARC_REG_BBRA_IFETCH 0x0010 // Break on IFETCH +#define CYGARC_REG_BBRA_WRITE 0x0008 // Break on WRITE +#define CYGARC_REG_BBRA_READ 0x0004 // Break on READ +#define CYGARC_REG_BBRA_SIZE_QUAD 0x0040 // Break on quad word access +#define CYGARC_REG_BBRA_SIZE_LONG 0x0003 // Break on long word access +#define CYGARC_REG_BBRA_SIZE_WORD 0x0002 // Break on word access +#define CYGARC_REG_BBRA_SIZE_BYTE 0x0001 // Break on byte access +#define CYGARC_REG_BBRA_SIZE_ANY 0x0000 // Break on any size
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/include/sh4_scif.h @@ -0,0 +1,86 @@ +//============================================================================= +// +// sh4_scif.h +// +// Simple driver for the sh4 Serial Communication Interface with FIFO +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:Haruki Kashiwaya +// Date: 2000-08-09 +// Description: Simple driver for the SH Serial Communication Interface +// The driver can be used for the SCIF modules. +// Clients of this file can configure the behavior with: +// CYGNUM_SCIF_PORTS: number of SCI ports +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> + +#ifdef CYGNUM_HAL_SH_SH4_SCIF_PORTS + +//-------------------------------------------------------------------------- +// SCIF register offsets +#define _REG_SCSMR 0x00 +#define _REG_SCBRR 0x04 +#define _REG_SCSCR 0x08 +#define _REG_SCFTDR 0x0c +#define _REG_SCFSR 0x10 +#define _REG_SCFRDR 0x14 +#define _REG_SCFCR 0x18 +#define _REG_SCFDR 0x1c +#define _REG_SCSPTR 0x20 +#define _REG_SCLSR 0x24 + +//-------------------------------------------------------------------------- + +typedef struct { + cyg_uint8* base; + cyg_int32 msec_timeout; + int isr_vector; +} channel_data_t; + +//-------------------------------------------------------------------------- + +#if !defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) +// This one should only be used by old-stub compatibility code! +externC void cyg_hal_plf_scif_init_channel(const channel_data_t* chan); +#endif + +externC cyg_uint8 cyg_hal_plf_scif_getc(void* __ch_data); +externC void cyg_hal_plf_scif_putc(void* __ch_data, cyg_uint8 c); +void cyg_hal_plf_scif_init(int scif_index, int comm_index, + int rcv_vect, cyg_uint8* base); + + +#endif // CYGNUM_HAL_SH_SH4_SCIF_PORTS +//----------------------------------------------------------------------------- +// end of sh4_scif.h
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/include/var_cache.h @@ -0,0 +1,234 @@ +#ifndef CYGONCE_VAR_CACHE_H +#define CYGONCE_VAR_CACHE_H +//============================================================================= +// +// var_cache.h +// +// Variant HAL cache control API +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): nickg +// Contributors:nickg, jskov +// Date: 2000-04-02 +// Purpose: Variant cache control API +// Description: The macros defined here provide the HAL APIs for handling +// cache control operations on the SH variant CPUs. +// Usage: Is included via the architecture cache header: +// #include <cyg/hal/hal_cache.h> +// ... +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> + +#include <cyg/hal/sh_regs.h> + +#include <cyg/hal/plf_cache.h> + +//============================================================================= + +#ifndef HAL_DCACHE_DEFINED + +#define HAL_DCACHE_SIZE CYGARC_SH_MOD_CAC_D_SIZE +#define HAL_DCACHE_LINE_SIZE CYGARC_SH_MOD_CAC_D_LINE_SIZE +#define HAL_DCACHE_WAYS CYGARC_SH_MOD_CAC_D_WAYS +#define HAL_DCACHE_SETS (HAL_DCACHE_SIZE/(HAL_DCACHE_LINE_SIZE*HAL_DCACHE_WAYS)) + +// Cache addressing information +#define CYGARC_REG_DCACHE_ADDRESS_BASE CYGARC_SH_MOD_DCAC_ADDRESS_BASE +#define CYGARC_REG_DCACHE_ADDRESS_TOP CYGARC_SH_MOD_DCAC_ADDRESS_TOP +#define CYGARC_REG_DCACHE_ADDRESS_STEP CYGARC_SH_MOD_DCAC_ADDRESS_STEP +#define CYGARC_REG_DCACHE_ADDRESS_FLUSH CYGARC_SH_MOD_DCAC_ADDRESS_FLUSH + +#define HAL_DCACHE_DEFINED +#endif + +#ifndef HAL_ICACHE_DEFINED + +#define HAL_ICACHE_SIZE CYGARC_SH_MOD_CAC_I_SIZE +#define HAL_ICACHE_LINE_SIZE CYGARC_SH_MOD_CAC_I_LINE_SIZE +#define HAL_ICACHE_WAYS CYGARC_SH_MOD_CAC_I_WAYS +#define HAL_ICACHE_SETS (HAL_ICACHE_SIZE/(HAL_ICACHE_LINE_SIZE*HAL_ICACHE_WAYS)) + +// Cache addressing information +#define CYGARC_REG_ICACHE_ADDRESS_BASE CYGARC_SH_MOD_ICAC_ADDRESS_BASE +#define CYGARC_REG_ICACHE_ADDRESS_TOP CYGARC_SH_MOD_ICAC_ADDRESS_TOP +#define CYGARC_REG_ICACHE_ADDRESS_STEP CYGARC_SH_MOD_ICAC_ADDRESS_STEP +#define CYGARC_REG_ICACHE_ADDRESS_FLUSH CYGARC_SH_MOD_ICAC_ADDRESS_FLUSH + +#define HAL_ICACHE_DEFINED +#endif + + +//----------------------------------------------------------------------------- +// Global control of cache + +// This is all handled in assembly (see variant.S) due to a requirement about +// not fiddling the cache from cachable memory. + +externC void cyg_hal_dcache_enable(void); +externC void cyg_hal_dcache_disable(void); +externC void cyg_hal_dcache_invalidate_all(void); +externC void cyg_hal_dcache_sync(void); +externC void cyg_hal_dcache_sync_region(cyg_haladdress base, + cyg_haladdrword len); +externC void cyg_hal_dcache_write_mode(int mode); + +// Enable the cache +#define HAL_DCACHE_ENABLE() cyg_hal_dcache_enable() + +// Disable the cache +#define HAL_DCACHE_DISABLE() cyg_hal_dcache_disable() + +// Invalidate the entire cache +#define HAL_DCACHE_INVALIDATE_ALL() cyg_hal_dcache_invalidate_all() + +// Synchronize the contents of the cache with memory. +#define HAL_DCACHE_SYNC() cyg_hal_dcache_sync() + +// Query the state of the cache (does not affect the caching) +#define HAL_DCACHE_IS_ENABLED(_state_) \ + CYG_MACRO_START \ + HAL_READ_UINT32(CYGARC_REG_CCR, (_state_)); \ + (_state_) &= ~CYGARC_REG_CCR_OCE; \ + CYG_MACRO_END + +// Set the cache refill burst size +//#define HAL_ICACHE_BURST_SIZE(_size_) + +// Set the cache write mode +#define HAL_ICACHE_WRITE_MODE( _mode_ ) \ + CYG_MACRO_START \ + cyg_uint32 _m_; \ + if (HAL_DCACHE_WRITETHRU_MODE == _mode_) \ + _m_ = CYGARC_REG_CCR_WT; \ + else \ + _m_ = CYGARC_REG_CCR_CB; \ + cyg_hal_cache_write_mode(_m_); \ + CYG_MACRO_END + +#define HAL_DCACHE_WRITETHRU_MODE 0 +#define HAL_DCACHE_WRITEBACK_MODE 1 + +// This macro allows the client to specify separate modes for the two +// regions. +#define HAL_DCACHE_WRITE_MODE_SH( _mode_ ) cyg_hal_dcache_write_mode(_mode_) + +// Load the contents of the given address range into the cache +// and then lock the cache so that it stays there. +//#define HAL_DCACHE_LOCK(_base_, _size_) + +// Undo a previous lock operation +//#define HAL_DCACHE_UNLOCK(_base_, _size_) + +// Unlock entire cache +//#define HAL_DCACHE_UNLOCK_ALL() + +//----------------------------------------------------------------------------- +// Cache line control + +// Allocate cache lines for the given address range without reading its +// contents from memory. +//#define HAL_DCACHE_ALLOCATE( _base_ , _size_ ) + +// Write dirty cache lines to memory and invalidate the cache entries +// for the given address range. +#define HAL_DCACHE_FLUSH( _base_ , _size_ ) \ + cyg_hal_dcache_sync_region((cyg_haladdress)_base_, (cyg_haladdrword)_size_) + +// Invalidate cache lines in the given range without writing to memory. +//#define HAL_DCACHE_INVALIDATE( _base_ , _size_ ) + +// Write dirty cache lines to memory for the given address range. +//#define HAL_DCACHE_STORE( _base_ , _size_ ) + + +// Preread the given range into the cache with the intention of reading +// from it later. +//#define HAL_DCACHE_READ_HINT( _base_ , _size_ ) + +// Preread the given range into the cache with the intention of writing +// to it later. +//#define HAL_DCACHE_WRITE_HINT( _base_ , _size_ ) + +// Allocate and zero the cache lines associated with the given range. +//#define HAL_DCACHE_ZERO( _base_ , _size_ ) + + +//----------------------------------------------------------------------------- +// Global control of Instruction cache + +externC void cyg_hal_icache_enable(void); +externC void cyg_hal_icache_disable(void); +externC void cyg_hal_icache_invalidate_all(void); + +// Enable the cache +#define HAL_ICACHE_ENABLE() cyg_hal_dcache_enable() + +// Disable the cache +#define HAL_ICACHE_DISABLE() cyg_hal_dcache_disable() + +// Invalidate the entire cache +#define HAL_ICACHE_INVALIDATE_ALL() cyg_hal_icache_invalidate_all() + +// Synchronize the contents of the cache with memory. +#define HAL_ICACHE_SYNC() HAL_ICACHE_INVALIDATE_ALL() + +// Query the state of the cache (does not affect the caching) +#define HAL_ICACHE_IS_ENABLED(_state_) \ + CYG_MACRO_START \ + HAL_READ_UINT32(CYGARC_REG_CCR, (_state_)); \ + (_state_) &= ~CYGARC_REG_CCR_ICE; \ + CYG_MACRO_END + +// Set the instruction cache refill burst size +//#define HAL_ICACHE_BURST_SIZE(_size_) + +// Load the contents of the given address range into the instruction cache +// and then lock the cache so that it stays there. + +//#define HAL_ICACHE_LOCK(_base_, _size_) + +// Undo a previous lock operation +//#define HAL_ICACHE_UNLOCK(_base_, _size_) + +// Unlock entire cache +//#define HAL_ICACHE_UNLOCK_ALL() + +//----------------------------------------------------------------------------- +// Instruction cache line control + +// Invalidate cache lines in the given range without writing to memory. +//#define HAL_ICACHE_INVALIDATE( _base_ , _size_ ) + +//----------------------------------------------------------------------------- +#endif // ifndef CYGONCE_VAR_CACHE_H +// End of var_cache.h
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/include/var_intr.h @@ -0,0 +1,113 @@ +#ifndef CYGONCE_HAL_VAR_INTR_H +#define CYGONCE_HAL_VAR_INTR_H + +//========================================================================== +// +// var_intr.h +// +// SH4 Interrupt and clock support +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors: jskov, +// Date: 1999-04-24 +// Purpose: Define Interrupt support +// Description: The macros defined here provide the HAL APIs for handling +// interrupts and the clock. +// +// Usage: +// #include <cyg/hal/hal_intr.h> +// ... +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <pkgconf/hal.h> +#include CYGBLD_HAL_CPU_MODULES_H // INTC module selection + +// More include statements below. First part of this file must be +// usable for both assembly and C files, so only use defines here. +#include <cyg/hal/plf_intr.h> + +//-------------------------------------------------------------------------- +// Additional SH4 exception vectors. +// These are identified with event values 0x800 and 0x820, so we need to +// extend the decode macros accordingly. Performance wise it's not an +// issue - these are exceptions, not interrupts. No critical fast path. +#define CYGNUM_HAL_VECTOR_FPU_EXCEPTION 9 // FPU exception +#define CYGNUM_HAL_VECTOR_TLB_MUTI_HIT 10 // mutible TLB hit +#define CYGNUM_HAL_VECTOR_FPU_DISABLE 17 +#define CYGNUM_HAL_VECTOR_SLOT_FPU_DISABLE 18 + +#define CYG_VECTOR_IS_INTERRUPT(v) \ + ((CYGNUM_HAL_VECTOR_INSTRUCTION_BP < (v)) && ((v) < CYGNUM_HAL_VECTOR_FPU_DISABLE)) + +#define CYGNUM_HAL_VSR_MAX CYGNUM_HAL_VECTOR_SLOT_FPU_DISABLE + +#define CYGNUM_HAL_VSR_EXCEPTION_COUNT (CYGNUM_HAL_VSR_MAX-CYGNUM_HAL_VECTOR_POWERON+1) + +#define CYGNUM_HAL_INTERRUPT_RESERVED_5C0 32 +#define CYGNUM_HAL_INTERRUPT_RESERVED_5E0 33 +#define CYGNUM_HAL_INTERRUPT_HUDI 34 +#define CYGNUM_HAL_INTERRUPT_GPIO 35 +#define CYGNUM_HAL_INTERRUPT_DMAC_DMTE0 36 +#define CYGNUM_HAL_INTERRUPT_DMAC_DMTE1 37 +#define CYGNUM_HAL_INTERRUPT_DMAC_DMTE2 38 +#define CYGNUM_HAL_INTERRUPT_DMAC_DMTE3 39 +#define CYGNUM_HAL_INTERRUPT_DMAC_DMAE 40 +#define CYGNUM_HAL_INTERRUPT_RESERVED_6E0 41 +#define CYGNUM_HAL_INTERRUPT_SCIF_ERI 42 +#define CYGNUM_HAL_INTERRUPT_SCIF_RXI 43 +#define CYGNUM_HAL_INTERRUPT_SCIF_BRI 44 +#define CYGNUM_HAL_INTERRUPT_SCIF_TXI 45 + +#define CYGNUM_HAL_ISR_MAX CYGNUM_HAL_INTERRUPT_SCIF_TXI + +// Exception vectors. These are the values used when passed out to an +// external exception handler using cyg_hal_deliver_exception() + +// These are in addition to the exceptions defined by the architecture. + +#define CYGNUM_HAL_EXCEPTION_FPU_EXCEPTION 9 // fpu exception +#define CYGNUM_HAL_EXCEPTION_TLB_MULTI_HIT 10 // TLB multi hit exception +#define CYGNUM_HAL_EXCEPTION_FPU_DISABLE 17 +#define CYGNUM_HAL_EXCEPTION_SLOT_FPU_DISABLE 18 + +#define CYGNUM_HAL_EXCEPTION_MIN CYGNUM_HAL_EXCEPTION_POWERON +#define CYGNUM_HAL_EXCEPTION_MAX CYGNUM_HAL_EXCEPTION_SLOT_FPU_DISABLE + + +// The vector used by the Real time clock +#define CYGNUM_HAL_INTERRUPT_RTC CYGNUM_HAL_INTERRUPT_TMU0_TUNI0 + +//-------------------------------------------------------------------------- +#endif // ifndef CYGONCE_HAL_VAR_INTR_H +// End of hal_intr.h
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/include/var_regs.h @@ -0,0 +1,91 @@ +#ifndef CYGONCE_HAL_VAR_REGS_H +#define CYGONCE_HAL_VAR_REGS_H +//============================================================================= +// +// var_regs.h +// +// SH4 CPU definitions +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:Ryozaburo Suzuki +// Date: 2000-04-18 +// Purpose: Define CPU memory mapped registers etc. +// Usage: Included via the acrhitecture register header: +// #include <cyg/hal/sh_regs.h> +// Notes: +// This file describes registers for on-core modules found in all +// the SH4 CPUs supported by the HAL. For each CPU is defined a +// module specification file (mod_<CPU model number>.h) which lists +// modules (and their version if applicable) included in that +// particular CPU model. Note that the versioning is ad hoc; +// it doesn't reflect Hitachi internal versioning in any way. +// +//####DESCRIPTIONEND#### +// + +// Find out which modules are supported by the chosen CPU +#include <pkgconf/system.h> +#include CYGBLD_HAL_CPU_MODULES_H + +//========================================================================== +// CPU Definitions +//========================================================================== + +//-------------------------------------------------------------------------- +// Status register +#define CYGARC_REG_SR_MD 0x40000000 +#define CYGARC_REG_SR_RB 0x20000000 +#define CYGARC_REG_SR_BL 0x10000000 +#define CYGARC_REG_SR_M 0x00000200 +#define CYGARC_REG_SR_Q 0x00000100 +#define CYGARC_REG_SR_IMASK 0x000000f0 +#define CYGARC_REG_SR_I3 0x00000080 +#define CYGARC_REG_SR_I2 0x00000040 +#define CYGARC_REG_SR_I1 0x00000020 +#define CYGARC_REG_SR_I0 0x00000010 +#define CYGARC_REG_SR_S 0x00000002 +#define CYGARC_REG_SR_T 0x00000001 +#define CYGARC_REG_SR_FD 0x00008000 + +//========================================================================== +// Module Definitions +//========================================================================== + +#include <cyg/hal/mod_regs_bsc.h> +#include <cyg/hal/mod_regs_cac.h> +#include <cyg/hal/mod_regs_cpg.h> +#include <cyg/hal/mod_regs_intc.h> +#include <cyg/hal/mod_regs_mmu.h> +#include <cyg/hal/mod_regs_rtc.h> +#include <cyg/hal/mod_regs_ser.h> +#include <cyg/hal/mod_regs_tmu.h> +#include <cyg/hal/mod_regs_ubc.h> + +#endif // CYGONCE_HAL_VAR_REGS_H
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/include/variant.inc @@ -0,0 +1,167 @@ +#ifndef CYGONCE_HAL_VARIANT_INC +#define CYGONCE_HAL_VARIANT_INC +##============================================================================= +## +## variant.inc +## +## SH4 variant assembler header file +## +##============================================================================= +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +##============================================================================= +#######DESCRIPTIONBEGIN#### +## +## Author(s): jskov +## Contributors:jskov +## Date: 2000-10-30 +## Purpose: SH4 variant definitions and init code +## Description: This file contains various definitions and macros that are +## useful for writing assembly code for the SH3 CPU family. +## Usage: +## #include <cyg/hal/variant.inc> +## ... +## +## +######DESCRIPTIONEND#### +## +##============================================================================= + +#include <pkgconf/hal.h> +#include <cyg/hal/sh_regs.h> + +#=========================================================================== +# SR initialization value +# zero all bits except: +# MD = Processor operation mode field (privileged mode) +# I0-3 = Mask out all interrupts but NMI. +# +# When saving or restoring the state of an exception or interrupt, the bit +# CYGARC_REG_SR_RB is also set, switching the register bank. When this bit +# is set, interrupts must be disabled. +# +# Note: We could also use the BL bit to prevent interrupts, but that would +# also prevent the use of breakpoints. + +#define CYG_SR (CYGARC_REG_SR_MD|CYGARC_REG_SR_IMASK) +#define CYG_SR_BANK1 (CYGARC_REG_SR_MD|CYGARC_REG_SR_IMASK|CYGARC_REG_SR_RB) + +##----------------------------------------------------------------------------- +## Hardware init macros +#ifndef CYGPKG_HAL_SH_POST_RESET_INIT + .macro hal_post_reset_init + # Initialize CPU + mov.l $nCYG_SR,r1 ! Put CPU in a well-known state + ldc r1,sr + mov #0,r0 + mov.l $nCYGARC_REG_CCR,r1 ! Disable cache + mov.l r0,@r1 + mov.l $nCYGARC_REG_MMUCR,r1 ! Disable MMU + mov.l r0,@r1 + mov.l $nCYGARC_REG_BBRA,r1 ! Disable UBC Channel A + mov.w r0,@r1 + mov.l $nCYGARC_REG_BBRB,r1 ! Disable UBC Channel B + mov.w r0,@r1 + mov.l $nCYGARC_REG_BRCR,r1 ! Reset UBC common register + mov.w r0,@r1 + mov.l $CYGARC_REG_TSTR,r1 ! Disable timers + mov.b r0,@r1 + mov.l $CYGARC_REG_IPRA,r1 ! Disable interrupt request sources + mov.w r0,@r1 + mov.l $CYGARC_REG_IPRB,r1 + mov.w r0,@r1 + mov.l $CYGARC_REG_IPRC,r1 + mov.w r0,@r1 + mov.w $nCYG_WTCSR,r0 ! Clear watchdog + mov.l $nCYGARC_REG_WTCSR,r1 + mov.w r0,@r1 + + # Initialize VBR if necessary +#if !defined(CYG_HAL_STARTUP_RAM) || \ + ( defined(CYG_HAL_STARTUP_RAM) && \ + !defined(CYGSEM_HAL_USE_ROM_MONITOR)) + mov.l $__reset,r1 ! Set VBR + ldc r1,vbr +#endif + bra 1f + nop + +$nCYG_WTCSR: + .word 0xa500 ! clear all CSR bits + + .align 2 +$nCYG_SR: + .long CYG_SR +$nCYGARC_REG_CCR: + .long CYGARC_REG_CCR +$nCYGARC_REG_MMUCR: + .long CYGARC_REG_MMUCR +$nCYGARC_REG_BBRA: + .long CYGARC_REG_BBRA +$nCYGARC_REG_BBRB: + .long CYGARC_REG_BBRB +$nCYGARC_REG_BRCR: + .long CYGARC_REG_BRCR +$CYGARC_REG_TSTR: + .long CYGARC_REG_TSTR +$CYGARC_REG_IPRA: + .long CYGARC_REG_IPRA +$CYGARC_REG_IPRB: + .long CYGARC_REG_IPRB +$CYGARC_REG_IPRC: + .long CYGARC_REG_IPRC +$nCYGARC_REG_WTCSR: + .long CYGARC_REG_WTCSR +$__reset: + .long __reset + +1: + .endm +#define CYGPKG_HAL_SH_POST_RESET_INIT +#endif + +##----------------------------------------------------------------------------- +## Interrupt decode macros + .macro hal_intc_decode tmp,inum + mov.l $nCYGARC_REG_INTEVT,\tmp + mov.l @\tmp,\inum + mov #-5,\tmp ! divide cause by 0x20 + shld \tmp,\inum + add #-14,\inum ! adjust so NMI becomes 0 + .endm + +#ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN + .macro hal_intc_translate inum,vnum + mov #0,\vnum ! Just vector zero is supported + .endm +#else + .macro hal_intc_translate inum,vnum + mov \inum,\vnum ! Vector == interrupt number + shll2 \vnum ! get from vector number to ISR index + .endm +#endif + +#------------------------------------------------------------------------------ +#endif // CYGONCE_HAL_VARIANT_INC +# end of variant.inc
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/src/sh4_scif.c @@ -0,0 +1,333 @@ +//============================================================================= +// +// sh4_scif.c +// +// Simple driver for the SH4 Serial Communication Interface with FIFO +// +//============================================================================= +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//============================================================================= +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors:Haruki Kashiwaya +// Date: 2000-08-09 +// Description: Simple driver for the SH Serial Communication Interface +// The driver can be used for the SCIF modules. +// Clients of this file can configure the behavior with: +// CYGNUM_SCIF_PORTS: number of SCI ports +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> + +#ifdef CYGNUM_HAL_SH_SH4_SCIF_PORTS + +#include <cyg/hal/hal_io.h> // IO macros +#include <cyg/hal/drv_api.h> // CYG_ISR_HANDLED +#include <cyg/hal/hal_misc.h> // Helper functions +#include <cyg/hal/hal_intr.h> // HAL_ENABLE/MASK/UNMASK_INTERRUPTS +#include <cyg/hal/hal_arch.h> // SAVE/RESTORE GP +#include <cyg/hal/hal_if.h> // Calling-if API +#include <cyg/hal/sh_regs.h> // serial register definitions +#include <cyg/hal/sh_stub.h> // target_register_t + +#include <cyg/hal/sh4_scif.h> // our header + +//-------------------------------------------------------------------------- + +void +cyg_hal_plf_scif_init_channel(const channel_data_t* chan) +{ + cyg_uint8* base = chan->base; + cyg_uint16 tmp; + cyg_uint16 sr; + + // Disable everything. + HAL_WRITE_UINT16(base+_REG_SCSCR, 0); + + // Reset FIFO. + HAL_WRITE_UINT16(base+_REG_SCFCR, + CYGARC_REG_SCFCR2_TFRST|CYGARC_REG_SCFCR2_RFRST); + + // 8-1-no parity. + HAL_WRITE_UINT16(base+_REG_SCSMR, 0); + + // Set speed to 38400 + HAL_READ_UINT16(base+_REG_SCSMR, tmp); + tmp &= ~CYGARC_REG_SCSMR2_CKSx_MASK; + tmp |= CYGARC_SCBRR_CKSx(38400); + HAL_WRITE_UINT16(base+_REG_SCSMR, tmp); + HAL_WRITE_UINT8(base+_REG_SCBRR, CYGARC_SCBRR_N(38400)); + + // Let things settle: Here we should should wait the equivalent of + // one bit interval, i.e. 1/38400 second, but until we have + // something like the Linux delay loop, it's hard to do reliably. So + // just move on and hope for the best (this is unlikely to cause + // problems since the CPU has just come out of reset anyway). + + // Clear status register (read back first). + HAL_READ_UINT16(base+_REG_SCFSR, sr); + HAL_WRITE_UINT16(base+_REG_SCFSR, 0); + + // Bring FIFO out of reset and set to trigger on every char in + // FIFO (or C-c input would not be processed). + HAL_WRITE_UINT16(base+_REG_SCFCR, + CYGARC_REG_SCFCR2_RTRG_1|CYGARC_REG_SCFCR2_TTRG_1); + + // Leave Tx/Rx interrupts disabled, but enable Tx/Rx + HAL_WRITE_UINT16(base+_REG_SCSCR, + CYGARC_REG_SCSCR2_TE|CYGARC_REG_SCSCR2_RE); +} + +static cyg_bool +cyg_hal_plf_scif_getc_nonblock(void* __ch_data, cyg_uint8* ch) +{ + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + cyg_uint16 fdr, sr; + + HAL_READ_UINT16(base+_REG_SCFDR, fdr); + if ((fdr & CYGARC_REG_SCFDR2_RCOUNT_MASK) == 0) + return false; + + HAL_READ_UINT8(base+_REG_SCFRDR, *ch); + + // Clear FIFO full flag (read before clearing) + HAL_READ_UINT16(base+_REG_SCFSR, sr); + HAL_WRITE_UINT16(base+_REG_SCFSR, + CYGARC_REG_SCSSR2_CLEARMASK & ~CYGARC_REG_SCSSR2_RDF); + + return true; +} + +cyg_uint8 +cyg_hal_plf_scif_getc(void* __ch_data) +{ + cyg_uint8 ch; + CYGARC_HAL_SAVE_GP(); + + while(!cyg_hal_plf_scif_getc_nonblock(__ch_data, &ch)); + + CYGARC_HAL_RESTORE_GP(); + return ch; +} + +void +cyg_hal_plf_scif_putc(void* __ch_data, cyg_uint8 c) +{ + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + cyg_uint16 fdr, sr; + CYGARC_HAL_SAVE_GP(); + + do { + HAL_READ_UINT16(base+_REG_SCFDR, fdr); + } while (((fdr & CYGARC_REG_SCFDR2_TCOUNT_MASK) >> CYGARC_REG_SCFDR2_TCOUNT_shift) == 16); + + HAL_WRITE_UINT8(base+_REG_SCFTDR, c); + + // Clear FIFO-empty/transmit end flags (read back SR first) + HAL_READ_UINT16(base+_REG_SCFSR, sr); + HAL_WRITE_UINT16(base+_REG_SCFSR, CYGARC_REG_SCSSR2_CLEARMASK + & ~(CYGARC_REG_SCSSR2_TDFE | CYGARC_REG_SCSSR2_TEND )); + + // Hang around until the character has been safely sent. + do { + HAL_READ_UINT16(base+_REG_SCFDR, fdr); + } while ((fdr & CYGARC_REG_SCFDR2_TCOUNT_MASK) != 0); + + CYGARC_HAL_RESTORE_GP(); +} + +#if defined(CYGSEM_HAL_VIRTUAL_VECTOR_DIAG) \ + || defined(CYGPRI_HAL_IMPLEMENTS_IF_SERVICES) + +static channel_data_t channels[CYGNUM_HAL_SH_SH4_SCIF_PORTS]; + +static void +cyg_hal_plf_scif_write(void* __ch_data, const cyg_uint8* __buf, + cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while(__len-- > 0) + cyg_hal_plf_scif_putc(__ch_data, *__buf++); + + CYGARC_HAL_RESTORE_GP(); +} + +static void +cyg_hal_plf_scif_read(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len) +{ + CYGARC_HAL_SAVE_GP(); + + while(__len-- > 0) + *__buf++ = cyg_hal_plf_scif_getc(__ch_data); + + CYGARC_HAL_RESTORE_GP(); +} + +cyg_bool +cyg_hal_plf_scif_getc_timeout(void* __ch_data, cyg_uint8* ch) +{ + channel_data_t* chan = (channel_data_t*)__ch_data; + int delay_count; + cyg_bool res; + CYGARC_HAL_SAVE_GP(); + + delay_count = chan->msec_timeout * 10; // delay in .1 ms steps + + for(;;) { + res = cyg_hal_plf_scif_getc_nonblock(__ch_data, ch); + if (res || 0 == delay_count--) + break; + + CYGACC_CALL_IF_DELAY_US(100); + } + + CYGARC_HAL_RESTORE_GP(); + return res; +} + +static int +cyg_hal_plf_scif_control(void *__ch_data, __comm_control_cmd_t __func, ...) +{ + static int irq_state = 0; + channel_data_t* chan = (channel_data_t*)__ch_data; + cyg_uint8 scr; + int ret = 0; + CYGARC_HAL_SAVE_GP(); + + switch (__func) { + case __COMMCTL_IRQ_ENABLE: + irq_state = 1; + HAL_INTERRUPT_UNMASK(chan->isr_vector); + HAL_READ_UINT16(chan->base+_REG_SCSCR, scr); + scr |= CYGARC_REG_SCSCR2_RIE; + HAL_WRITE_UINT16(chan->base+_REG_SCSCR, scr); + break; + case __COMMCTL_IRQ_DISABLE: + ret = irq_state; + irq_state = 0; + HAL_INTERRUPT_UNMASK(chan->isr_vector); + HAL_READ_UINT16(chan->base+_REG_SCSCR, scr); + scr &= ~CYGARC_REG_SCSCR2_RIE; + HAL_WRITE_UINT16(chan->base+_REG_SCSCR, scr); + break; + case __COMMCTL_DBG_ISR_VECTOR: + ret = chan->isr_vector; + break; + case __COMMCTL_SET_TIMEOUT: + { + va_list ap; + + va_start(ap, __func); + + ret = chan->msec_timeout; + chan->msec_timeout = va_arg(ap, cyg_uint32); + + va_end(ap); + } + default: + break; + } + CYGARC_HAL_RESTORE_GP(); + return ret; +} + +static int +cyg_hal_plf_scif_isr(void *__ch_data, int* __ctrlc, + CYG_ADDRWORD __vector, CYG_ADDRWORD __data) +{ + cyg_uint8 c; + cyg_uint16 fdr, sr; + cyg_uint8* base = ((channel_data_t*)__ch_data)->base; + int res = 0; + CYGARC_HAL_SAVE_GP(); + + *__ctrlc = 0; + HAL_READ_UINT16(base+_REG_SCFDR, fdr); + if ((fdr & CYGARC_REG_SCFDR2_RCOUNT_MASK) != 0) { + HAL_READ_UINT8(base+_REG_SCFRDR, c); + + // Clear buffer full flag (read back first). + HAL_READ_UINT16(base+_REG_SCFSR, sr); + HAL_WRITE_UINT16(base+_REG_SCFSR, + CYGARC_REG_SCSSR2_CLEARMASK & ~CYGARC_REG_SCSSR2_RDF); + + if( cyg_hal_is_break( &c , 1 ) ) + *__ctrlc = 1; + + res = CYG_ISR_HANDLED; + } + + CYGARC_HAL_RESTORE_GP(); + return res; +} + +void +cyg_hal_plf_scif_init(int scif_index, int comm_index, + int rcv_vect, cyg_uint8* base) +{ + channel_data_t* chan = &channels[scif_index]; + hal_virtual_comm_table_t* comm; + int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT); + + // Initialize channel table + chan->base = base; + chan->isr_vector = rcv_vect; + chan->msec_timeout = 1000; + + // Disable interrupts. + HAL_INTERRUPT_MASK(chan->isr_vector); + + // Init channel + cyg_hal_plf_scif_init_channel(chan); + + // Setup procs in the vector table + + // Initialize channel procs + CYGACC_CALL_IF_SET_CONSOLE_COMM(comm_index); + comm = CYGACC_CALL_IF_CONSOLE_PROCS(); + CYGACC_COMM_IF_CH_DATA_SET(*comm, chan); + CYGACC_COMM_IF_WRITE_SET(*comm, cyg_hal_plf_scif_write); + CYGACC_COMM_IF_READ_SET(*comm, cyg_hal_plf_scif_read); + CYGACC_COMM_IF_PUTC_SET(*comm, cyg_hal_plf_scif_putc); + CYGACC_COMM_IF_GETC_SET(*comm, cyg_hal_plf_scif_getc); + CYGACC_COMM_IF_CONTROL_SET(*comm, cyg_hal_plf_scif_control); + CYGACC_COMM_IF_DBG_ISR_SET(*comm, cyg_hal_plf_scif_isr); + CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, cyg_hal_plf_scif_getc_timeout); + + // Restore original console + CYGACC_CALL_IF_SET_CONSOLE_COMM(cur); +} + +#endif // CYGSEM_HAL_VIRTUAL_VECTOR_DIAG || CYGPRI_HAL_IMPLEMENTS_IF_SERVICES + +#endif // CYGNUM_HAL_SH_SH4_SCIF_PORTS + +//----------------------------------------------------------------------------- +// end of sh4_scif.c
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/src/var_misc.c @@ -0,0 +1,272 @@ +//========================================================================== +// +// var_misc.c +// +// HAL miscellaneous functions +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): jskov +// Contributors: jskov, jlarmour, nickg +// Date: 1999-04-03 +// Purpose: HAL miscellaneous functions +// Description: This file contains miscellaneous functions provided by the +// HAL. +// +//####DESCRIPTIONEND#### +// +//=========================================================================== + +#include <pkgconf/hal.h> + +#include <cyg/infra/cyg_type.h> +#include <cyg/infra/cyg_trac.h> // tracing macros +#include <cyg/infra/cyg_ass.h> // assertion macros +#include <cyg/infra/diag.h> // diag_printf + +#include <cyg/hal/hal_arch.h> // HAL header +#include <cyg/hal/hal_cache.h> // HAL cache +#include <cyg/hal/hal_intr.h> // HAL interrupts/exceptions + +//--------------------------------------------------------------------------- +// Initial cache enabling + +#ifdef CYGHWR_HAL_SH_CACHE_MODE_P0_WRITE_BACK +# define CACHE_MODE_P0 0 +#else +# define CACHE_MODE_P0 CYGARC_REG_CCR_WT +#endif + +#ifdef CYGHWR_HAL_SH_CACHE_MODE_P1_WRITE_BACK +# define CACHE_MODE_P1 CYGARC_REG_CCR_CB +#else +# define CACHE_MODE_P1 0 +#endif + +externC void +cyg_var_enable_caches(void) +{ + // Initialize cache. + HAL_DCACHE_INVALIDATE_ALL(); + HAL_ICACHE_INVALIDATE_ALL(); + + // Set cache modes + HAL_DCACHE_WRITE_MODE_SH(CACHE_MODE_P0|CACHE_MODE_P1); + +#ifdef CYGHWR_HAL_SH_CACHE_ENABLE + // Enable cache. + HAL_ICACHE_ENABLE(); + HAL_DCACHE_ENABLE(); +#endif +} + +//--------------------------------------------------------------------------- +void +hal_variant_init(void) +{ +} + +//--------------------------------------------------------------------------- + +#ifdef CYGSEM_HAL_COMMON_INTERRUPTS_ALLOW_NESTING +externC cyg_uint8 cyg_hal_ILVL_table[]; +#define HAL_UPDATE_ILVL_TABLE(_vector_, _level_) \ + /* Update the ILVL table, so it is easy for the interrupt entry */ \ + /* code to find out the level of a given interrupt source. */ \ + cyg_hal_ILVL_table[(_vector_)] = (_level_) +#else +#define HAL_UPDATE_ILVL_TABLE(_vector_, _level_) +#endif + +void +hal_interrupt_set_level(int vector, int level) +{ + cyg_uint16 iprX; + + CYG_ASSERT((0 <= (level) && 15 >= (level)), "Illegal level"); + CYG_ASSERT((CYGNUM_HAL_ISR_MIN <= (vector) + && CYGNUM_HAL_ISR_MAX >= (vector)), "Illegal vector"); + + HAL_UPDATE_ILVL_TABLE(vector, level); + + switch( (vector) ) { + case CYGNUM_HAL_INTERRUPT_NMI: + /* fall through */ + case CYGNUM_HAL_INTERRUPT_LVL0...CYGNUM_HAL_INTERRUPT_LVL14: + /* Cannot change levels */ + break; + + /* IPRA */ + case CYGNUM_HAL_INTERRUPT_TMU0_TUNI0: + HAL_READ_UINT16(CYGARC_REG_IPRA, iprX); + iprX &= ~CYGARC_REG_IPRA_TMU0_MASK; + iprX |= (level)*CYGARC_REG_IPRA_TMU0_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRA, iprX); + break; + case CYGNUM_HAL_INTERRUPT_TMU1_TUNI1: + HAL_READ_UINT16(CYGARC_REG_IPRA, iprX); + iprX &= ~CYGARC_REG_IPRA_TMU1_MASK; + iprX |= (level)*CYGARC_REG_IPRA_TMU1_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRA, iprX); + break; + case CYGNUM_HAL_INTERRUPT_TMU2_TUNI2: + case CYGNUM_HAL_INTERRUPT_TMU2_TICPI2: + HAL_READ_UINT16(CYGARC_REG_IPRA, iprX); + iprX &= ~CYGARC_REG_IPRA_TMU2_MASK; + iprX |= (level)*CYGARC_REG_IPRA_TMU2_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRA, iprX); + break; + case CYGNUM_HAL_INTERRUPT_RTC_ATI: + case CYGNUM_HAL_INTERRUPT_RTC_PRI: + case CYGNUM_HAL_INTERRUPT_RTC_CUI: + HAL_READ_UINT16(CYGARC_REG_IPRA, iprX); + iprX &= ~CYGARC_REG_IPRA_RTC_MASK; + iprX |= (level)*CYGARC_REG_IPRA_RTC_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRA, iprX); + break; + + /* IPRB */ + case CYGNUM_HAL_INTERRUPT_SCI_ERI: + case CYGNUM_HAL_INTERRUPT_SCI_RXI: + case CYGNUM_HAL_INTERRUPT_SCI_TXI: + case CYGNUM_HAL_INTERRUPT_SCI_TEI: + HAL_READ_UINT16(CYGARC_REG_IPRB, iprX); + iprX &= ~CYGARC_REG_IPRB_SCI_MASK; + iprX |= (level)*CYGARC_REG_IPRB_SCI_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRB, iprX); + break; + case CYGNUM_HAL_INTERRUPT_WDT_ITI: + HAL_READ_UINT16(CYGARC_REG_IPRB, iprX); + iprX &= ~CYGARC_REG_IPRB_WDT_MASK; + iprX |= (level)*CYGARC_REG_IPRB_WDT_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRB, iprX); + break; + case CYGNUM_HAL_INTERRUPT_REF_RCMI: + case CYGNUM_HAL_INTERRUPT_REF_ROVI: + HAL_READ_UINT16(CYGARC_REG_IPRB, iprX); + iprX &= ~CYGARC_REG_IPRB_REF_MASK; + iprX |= (level)*CYGARC_REG_IPRB_REF_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRB, iprX); + break; + + /* IPRC */ + case CYGNUM_HAL_INTERRUPT_HUDI: + HAL_READ_UINT16(CYGARC_REG_IPRC, iprX); + iprX &= ~CYGARC_REG_IPRC_HUDI_MASK; + iprX |= (level)*CYGARC_REG_IPRC_HUDI_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRC, iprX); + break; + case CYGNUM_HAL_INTERRUPT_GPIO: + HAL_READ_UINT16(CYGARC_REG_IPRC, iprX); + iprX &= ~CYGARC_REG_IPRC_GPIO_MASK; + iprX |= (level)*CYGARC_REG_IPRC_GPIO_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRC, iprX); + break; + case CYGNUM_HAL_INTERRUPT_DMAC_DMTE0: + case CYGNUM_HAL_INTERRUPT_DMAC_DMTE1: + case CYGNUM_HAL_INTERRUPT_DMAC_DMTE2: + case CYGNUM_HAL_INTERRUPT_DMAC_DMTE3: + case CYGNUM_HAL_INTERRUPT_DMAC_DMAE: + HAL_READ_UINT16(CYGARC_REG_IPRC, iprX); + iprX &= ~CYGARC_REG_IPRC_DMAC_MASK; + iprX |= (level)*CYGARC_REG_IPRC_DMAC_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRC, iprX); + break; + case CYGNUM_HAL_INTERRUPT_SCIF_ERI: + case CYGNUM_HAL_INTERRUPT_SCIF_RXI: + case CYGNUM_HAL_INTERRUPT_SCIF_BRI: + case CYGNUM_HAL_INTERRUPT_SCIF_TXI: + HAL_READ_UINT16(CYGARC_REG_IPRC, iprX); + iprX &= ~CYGARC_REG_IPRC_DMAC_MASK; + iprX |= (level)*CYGARC_REG_IPRC_DMAC_PRI1; + HAL_WRITE_UINT16(CYGARC_REG_IPRC, iprX); + break; + case CYGNUM_HAL_INTERRUPT_RESERVED_1E0: + case CYGNUM_HAL_INTERRUPT_RESERVED_3E0: + case CYGNUM_HAL_INTERRUPT_RESERVED_5C0: + case CYGNUM_HAL_INTERRUPT_RESERVED_5E0: + case CYGNUM_HAL_INTERRUPT_RESERVED_6E0: + /* Do nothing for these reserved vectors. */ + break; + } +} + +void +hal_interrupt_mask(int vector) +{ + switch( vector ) { + case CYGNUM_HAL_INTERRUPT_NMI: + /* fall through */ + case CYGNUM_HAL_INTERRUPT_LVL0...CYGNUM_HAL_INTERRUPT_LVL14: + /* Can only be masked by fiddling Imask in SR. */ + break; + case CYGNUM_HAL_INTERRUPT_TMU0_TUNI0...CYGNUM_HAL_ISR_MAX: + HAL_INTERRUPT_SET_LEVEL((vector), 0); + break; + case CYGNUM_HAL_INTERRUPT_RESERVED_1E0: + case CYGNUM_HAL_INTERRUPT_RESERVED_3E0: + /* Do nothing for these reserved vectors. */ + break; + default: + CYG_FAIL("Unknown interrupt vector"); + break; + } +} + +void +hal_interrupt_unmask(int vector) +{ + switch( (vector) ) { + case CYGNUM_HAL_INTERRUPT_NMI: + /* fall through */ + case CYGNUM_HAL_INTERRUPT_LVL0...CYGNUM_HAL_INTERRUPT_LVL14: + /* Can only be unmasked by fiddling Imask in SR. */ + break; + case CYGNUM_HAL_INTERRUPT_TMU0_TUNI0...CYGNUM_HAL_ISR_MAX: + HAL_INTERRUPT_SET_LEVEL((vector), 1); + break; + case CYGNUM_HAL_INTERRUPT_RESERVED_1E0: + case CYGNUM_HAL_INTERRUPT_RESERVED_3E0: + /* Do nothing for these reserved vectors. */ + break; + default: + CYG_FAIL("Unknown interrupt vector"); + break; + } +} + + +void +hal_interrupt_acknowledge(int vector) +{ +} + +void +hal_interrupt_configure(int vector, int level, int up) +{ +}
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/src/var_mk_defs.c @@ -0,0 +1,91 @@ +//========================================================================== +// +// var_mk_defs.c +// +// HAL (variant) "make defs" program +// +//========================================================================== +//####COPYRIGHTBEGIN#### +// +// ------------------------------------------- +// The contents of this file are subject to the Red Hat eCos Public License +// Version 1.1 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://www.redhat.com/ +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations under +// the License. +// +// The Original Code is eCos - Embedded Configurable Operating System, +// released September 30, 1998. +// +// The Initial Developer of the Original Code is Red Hat. +// Portions created by Red Hat are +// Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +// All Rights Reserved. +// ------------------------------------------- +// +//####COPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas, jskov +// Date: 2000-02-21 +// Purpose: SH architecture dependent definition generator +// Description: This file contains code that can be compiled by the target +// compiler and used to generate machine specific definitions +// suitable for use in assembly code. +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <pkgconf/hal.h> + +#include <cyg/hal/hal_arch.h> // HAL header +#include <cyg/hal/hal_intr.h> // HAL header +#include <cyg/hal/hal_cache.h> // HAL header +#ifdef CYGPKG_KERNEL +# include <pkgconf/kernel.h> +# include <cyg/kernel/instrmnt.h> +#endif + +/* + * This program is used to generate definitions needed by + * assembly language modules. + * + * This technique was first used in the OSF Mach kernel code: + * generate asm statements containing #defines, + * compile this file to assembler, and then extract the + * #defines from the assembly-language output. + */ + +#define DEFINE(sym, val) \ + asm volatile("\n\t.equ\t" #sym ",%0" : : "i" (val)) + +int +main(void) +{ + // Caching details + DEFINE(HAL_ICACHE_SIZE, HAL_ICACHE_SIZE); + DEFINE(HAL_ICACHE_WAYS, HAL_ICACHE_WAYS); + DEFINE(HAL_ICACHE_LINE_SIZE, HAL_ICACHE_LINE_SIZE); + DEFINE(CYGARC_REG_ICACHE_ADDRESS_BASE,CYGARC_REG_ICACHE_ADDRESS_BASE); + DEFINE(CYGARC_REG_ICACHE_ADDRESS_TOP,CYGARC_REG_ICACHE_ADDRESS_TOP); + DEFINE(CYGARC_REG_ICACHE_ADDRESS_STEP,CYGARC_REG_ICACHE_ADDRESS_STEP); + DEFINE(CYGARC_REG_ICACHE_ADDRESS_FLUSH, CYGARC_REG_ICACHE_ADDRESS_FLUSH); + + DEFINE(HAL_DCACHE_SIZE, HAL_DCACHE_SIZE); + DEFINE(HAL_DCACHE_WAYS, HAL_DCACHE_WAYS); + DEFINE(HAL_DCACHE_LINE_SIZE, HAL_DCACHE_LINE_SIZE); + DEFINE(CYGARC_REG_DCACHE_ADDRESS_BASE,CYGARC_REG_DCACHE_ADDRESS_BASE); + DEFINE(CYGARC_REG_DCACHE_ADDRESS_TOP,CYGARC_REG_DCACHE_ADDRESS_TOP); + DEFINE(CYGARC_REG_DCACHE_ADDRESS_STEP,CYGARC_REG_DCACHE_ADDRESS_STEP); + DEFINE(CYGARC_REG_DCACHE_ADDRESS_FLUSH, CYGARC_REG_DCACHE_ADDRESS_FLUSH); +} + +//-------------------------------------------------------------------------- +// EOF var_mk_defs.c
new file mode 100644 --- /dev/null +++ b/packages/hal/sh/sh4/current/src/variant.S @@ -0,0 +1,213 @@ +##========================================================================== +## +## variant.S +## +## SH4 variant assembly code +## +##========================================================================== +#####COPYRIGHTBEGIN#### +# +# ------------------------------------------- +# The contents of this file are subject to the Red Hat eCos Public License +# Version 1.1 (the "License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.redhat.com/ +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +# License for the specific language governing rights and limitations under +# the License. +# +# The Original Code is eCos - Embedded Configurable Operating System, +# released September 30, 1998. +# +# The Initial Developer of the Original Code is Red Hat. +# Portions created by Red Hat are +# Copyright (C) 1998, 1999, 2000 Red Hat, Inc. +# All Rights Reserved. +# ------------------------------------------- +# +#####COPYRIGHTEND#### +##========================================================================== +#######DESCRIPTIONBEGIN#### +## +## Author(s): jskov +## Contributors: jskov +## Date: 2000-10-31 +## Purpose: SH4 misc assembly code +######DESCRIPTIONEND#### +## +##========================================================================== + +#include <pkgconf/hal.h> +#include <pkgconf/hal_sh.h> + +#include <cyg/hal/sh_regs.h> +#include <cyg/hal/sh4_offsets.inc> + +#--------------------------------------------------------------------------- +# Cache operations +# These need to be written in assembly to ensure they do not rely on data +# in cachable space (i.e., code must use registers exclusively, not the stack). + +# This macro must be used at the top of each cache function. It ensures +# that the code gets executed from a shadow region where caching is disabled +# (0xA0000000). + .macro GOTO_NONCACHED_SHADOW + mova 10f,r0 + mov.l $MASK,r1 + and r1,r0 + mov.l $BASE,r1 + or r1,r0 + jmp @r0 + nop + .align 2 +10: + .endm + + .globl _cyg_hal_dcache_enable +_cyg_hal_dcache_enable: + GOTO_NONCACHED_SHADOW + mov.l $nCYGARC_REG_CCR,r1 + mov.l @r1,r0 + mov #CYGARC_REG_CCR_OCE,r2 + mov.l r2,@r1 + nop + rts + nop + + .globl _cyg_hal_dcache_disable +_cyg_hal_dcache_disable: + GOTO_NONCACHED_SHADOW + mov.l $nCYGARC_REG_CCR,r1 + mov.l @r1,r0 + mov #CYGARC_REG_CCR_OCE,r2 + not r2,r2 + and r2,r0 + mov.l r0,@r1 + nop + rts + nop + + .globl _cyg_hal_dcache_invalidate_all +_cyg_hal_dcache_invalidate_all: + GOTO_NONCACHED_SHADOW + mov.l $nCYGARC_REG_CCR,r1 + mov.l @r1,r0 + mov #CYGARC_REG_CCR_OCI,r2 + or r2,r0 + mov.l r0,@r1 + nop ! Nothing in the docs suggest we need + nop ! nops here, but without them, the + nop ! CPU crashes. + rts + nop + + .globl _cyg_hal_dcache_sync +_cyg_hal_dcache_sync: + GOTO_NONCACHED_SHADOW + mov.l $CYGARC_REG_DCACHE_ADDRESS_FLUSH,r0 + mov.l $CYGARC_REG_DCACHE_ADDRESS_BASE,r1 + mov.l $CYGARC_REG_DCACHE_ADDRESS_TOP,r2 + mov.l $CYGARC_REG_DCACHE_ADDRESS_STEP,r3 +1: cmp/hi r1,r2 + bf 2f + mov.l r0,@r1 + bra 1b + add r3,r1 ! delay slot! +2: nop + rts + nop + + .align 2 +$CYGARC_REG_DCACHE_ADDRESS_FLUSH: + .long CYGARC_REG_DCACHE_ADDRESS_FLUSH +$CYGARC_REG_DCACHE_ADDRESS_BASE: + .long CYGARC_REG_DCACHE_ADDRESS_BASE +$CYGARC_REG_DCACHE_ADDRESS_TOP: + .long CYGARC_REG_DCACHE_ADDRESS_TOP +$CYGARC_REG_DCACHE_ADDRESS_STEP: + .long CYGARC_REG_DCACHE_ADDRESS_STEP + + + ! r4 = base + ! r5 = size + .globl _cyg_hal_dcache_sync_region +_cyg_hal_dcache_sync_region: + GOTO_NONCACHED_SHADOW +1: ocbp @r4 ! operand cache block purge + add #CYGARC_SH_MOD_DCAC_ADDRESS_STEP,r4 + add #-CYGARC_SH_MOD_DCAC_ADDRESS_STEP,r5 + cmp/pl r5 + bt 1b + rts + nop + + .globl _cyg_hal_dcache_write_mode +_cyg_hal_dcache_write_mode: + GOTO_NONCACHED_SHADOW + # Mode argument in r4. + # Read current state and mask out the two caching mode bits + mov.l $nCYGARC_REG_CCR,r1 + mov.l @r1,r3 + mov #CYGARC_REG_CCR_CB|CYGARC_REG_CCR_WT,r2 + and r2,r4 + not r2,r2 + and r2,r3 + # Or in the new settings and restore to CCR + or r4,r3 + mov.l r3,@r1 + nop + rts + nop + + + .globl _cyg_hal_icache_enable +_cyg_hal_icache_enable: + GOTO_NONCACHED_SHADOW + mov.l $nCYGARC_REG_CCR,r1 + mov.l @r1,r0 + mov.l $nCYGARC_REG_CCR_ICE,r2 + mov.l r2,@r1 + nop + rts + nop + + .globl _cyg_hal_icache_disable +_cyg_hal_icache_disable: + GOTO_NONCACHED_SHADOW + mov.l $nCYGARC_REG_CCR,r1 + mov.l @r1,r0 + mov.l $nCYGARC_REG_CCR_ICE,r2 + not r2,r2 + and r2,r0 + mov.l r0,@r1 + nop + rts + nop + + .globl _cyg_hal_icache_invalidate_all +_cyg_hal_icache_invalidate_all: + GOTO_NONCACHED_SHADOW + mov.l $nCYGARC_REG_CCR,r1 + mov.l @r1,r0 + mov.l $nCYGARC_REG_CCR_ICI,r2 + or r2,r0 + mov.l r0,@r1 + nop ! Nothing in the docs suggest we need + nop ! nops here, but without them, the + nop ! CPU crashes. + rts + nop + + .align 2 +$MASK: + .long 0x1fffffff ! mask off top 3 bits +$BASE: + .long 0xa0000000 ! base of non-cachable memory +$nCYGARC_REG_CCR: + .long CYGARC_REG_CCR +$nCYGARC_REG_CCR_ICE: + .long CYGARC_REG_CCR_ICE +$nCYGARC_REG_CCR_ICI: + .long CYGARC_REG_CCR_ICI
--- a/packages/io/fileio/current/ChangeLog +++ b/packages/io/fileio/current/ChangeLog @@ -1,3 +1,15 @@ +2000-11-01 Jonathan Larmour <jlarmour@redhat.com> + + * src/io.cxx (readwrite): Ensure we call FILEIO_RETURN_VALUE() to + get correct cleanup + (fpathconf): Ditto + (lseek): Ditto + + * src/file.cxx (open): If applicable, refer to stdin, stdout and stderr + here to ensure they are pulled in, in case selective linking would + otherwise eliminate them. This is to ensure they get allocated to + fd's 0, 1 and 2. + 2000-10-13 Nick Garnett <nickg@cygnus.co.uk> * src/io.cxx (readwrite): Merged both read() and write() functions
--- a/packages/io/fileio/current/src/file.cxx +++ b/packages/io/fileio/current/src/file.cxx @@ -47,6 +47,7 @@ #include <pkgconf/hal.h> #include <pkgconf/kernel.h> #include <pkgconf/io_fileio.h> +#include <pkgconf/isoinfra.h> #include <cyg/kernel/ktypes.h> // base kernel types #include <cyg/infra/cyg_trac.h> // tracing macros @@ -54,6 +55,7 @@ #include <string.h> // string functions #include <dirent.h> +#include <stdio.h> // stdin, stdout, stderr #include "fio.h" // Private header @@ -168,6 +170,14 @@ static Cyg_Mutex getcwd_lock CYGBLD_ATTR { FILEIO_ENTRY(); + // we want to be sure we pull in stdin/out/err, so they can be + // assigned to fds 0, 1 and 2 +#ifdef CYGINT_ISO_STDIO_STREAMS + CYG_REFERENCE_OBJECT(stdin); + CYG_REFERENCE_OBJECT(stdout); + CYG_REFERENCE_OBJECT(stderr); +#endif + CYG_CANCELLATION_POINT; int ret = 0;
--- a/packages/io/fileio/current/src/io.cxx +++ b/packages/io/fileio/current/src/io.cxx @@ -126,8 +126,7 @@ static ssize_t readwrite( int fd, void * CYG_CANCELLATION_POINT; - CYG_REPORT_RETVAL(cnt); - return cnt; + FILEIO_RETURN_VALUE(cnt); } //========================================================================== @@ -200,8 +199,7 @@ static ssize_t readwrite( int fd, void * if( ret != 0 ) FILEIO_RETURN(ret); - CYG_REPORT_RETVAL(pos); - return pos; + FILEIO_RETURN_VALUE(pos); } //========================================================================== @@ -347,8 +345,7 @@ static ssize_t readwrite( int fd, void * if( ret != 0 ) FILEIO_RETURN(ret); - CYG_REPORT_RETVAL(info.value); - return info.value; + FILEIO_RETURN_VALUE(info.value); } //==========================================================================
deleted file mode 100644 --- a/packages/io/flash/current/src/flash.h +++ /dev/null @@ -1,19 +0,0 @@ - -#define FLASH_Read_ID 0x90 -#define FLASH_Read_Query 0x98 -#define FLASH_Read_Status 0x70 -#define FLASH_Clear_Status 0x50 -#define FLASH_Status_Ready 0x80 -#define FLASH_Write 0xE8 -#define FLASH_Program 0x10 -#define FLASH_Block_Erase 0x20 -#define FLASH_Clear_Locks 0x60 -#define FLASH_Confirm 0xD0 -#define FLASH_Configure 0xB8 -#define FLASH_Configure_ReadyWait 0x00 -#define FLASH_Configure_PulseOnErase 0x01 -#define FLASH_Configure_PulseOnProgram 0x02 -#define FLASH_Configure_PulseOnBoth 0x03 -#define FLASH_Reset 0xFF - -#define FLASH_BLOCK_SIZE 0x10000
--- a/packages/io/serial/current/ChangeLog +++ b/packages/io/serial/current/ChangeLog @@ -153,6 +153,10 @@ 2000-05-28 Gary Thomas <gthomas@redhat * tests/ser_test_protocol.inl: Rename NEC V85x drivers. +2000-05-25 Jesper Skov <jskov@redhat.com> + + * tests/ser_test_protocol.inl: Added rules for REF4955. + 2000-05-08 Jesper Skov <jskov@redhat.com> * cdl/io_serial.cdl: active_if CYGPKG_IO
--- a/packages/isoinfra/current/ChangeLog +++ b/packages/isoinfra/current/ChangeLog @@ -1,3 +1,11 @@ +2000-11-01 Jonathan Larmour <jlarmour@redhat.com> + + * cdl/isoinfra.cdl: Add CYGINT_ISO_STDIO_STREAMS and + CYGBLD_ISO_STDIO_STREAMS_HEADER. + Change flavor of other stdio interfaces to booldata + * include/stdio.h: Use #ifdefs not #ifs on interfaces to reflect above + Add CYGINT_ISO_STDIO_STREAMS and CYGBLD_ISO_STDIO_STREAMS_HEADER. + 2000-10-05 Nick Garnett <nickg@cygnus.co.uk> * include/sys/types.h: Changed type of pid_t to plain int. It
--- a/packages/isoinfra/current/cdl/isoinfra.cdl +++ b/packages/isoinfra/current/cdl/isoinfra.cdl @@ -149,6 +149,7 @@ cdl_package CYGPKG_ISOINFRA { cdl_interface CYGINT_ISO_STDIO_FILETYPES { display "Number of implementations of stdio file types" + flavor booldata requires { 1 >= CYGINT_ISO_STDIO_FILETYPES } } @@ -158,8 +159,23 @@ cdl_package CYGPKG_ISOINFRA { default_value 0 } + cdl_interface CYGINT_ISO_STDIO_STREAMS { + display "Stdio standard streams implementations" + flavor booldata + requires { 1 >= CYGINT_ISO_STDIO_STREAMS } + } + + cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + display "Stdio standard streams implementation header" + description "This header file must define stdin, stdout + and stderr." + flavor booldata + default_value 0 + } + cdl_interface CYGINT_ISO_STDIO_FILEOPS { display "Number of implementations of stdio file operations" + flavor booldata requires { 1 >= CYGINT_ISO_STDIO_FILEOPS } } @@ -176,6 +192,7 @@ cdl_package CYGPKG_ISOINFRA { cdl_interface CYGINT_ISO_STDIO_FILEACCESS { display "Number of implementations of stdio file access \ functionals" + flavor booldata requires { 1 >= CYGINT_ISO_STDIO_FILEACCESS } } @@ -191,6 +208,7 @@ cdl_package CYGPKG_ISOINFRA { cdl_interface CYGINT_ISO_STDIO_FORMATTED_IO { display "Number of implementations of stdio formatted I/O" + flavor booldata requires { 1 >= CYGINT_ISO_STDIO_FORMATTED_IO } } @@ -202,6 +220,7 @@ cdl_package CYGPKG_ISOINFRA { cdl_interface CYGINT_ISO_STDIO_CHAR_IO { display "Number of implementations of stdio character I/O" + flavor booldata requires { 1 >= CYGINT_ISO_STDIO_CHAR_IO } } @@ -213,6 +232,7 @@ cdl_package CYGPKG_ISOINFRA { cdl_interface CYGINT_ISO_STDIO_DIRECT_IO { display "Number of implementations of stdio direct I/O" + flavor booldata requires { 1 >= CYGINT_ISO_STDIO_DIRECT_IO } } @@ -224,6 +244,7 @@ cdl_package CYGPKG_ISOINFRA { cdl_interface CYGINT_ISO_STDIO_FILEPOS { display "Number of implementations of stdio file positioning" + flavor booldata requires { 1 >= CYGINT_ISO_STDIO_FILEPOS } } @@ -235,6 +256,7 @@ cdl_package CYGPKG_ISOINFRA { cdl_interface CYGINT_ISO_STDIO_ERROR { display "Number of implementations of stdio error handling" + flavor booldata requires { 1 >= CYGINT_ISO_STDIO_ERROR } }
--- a/packages/isoinfra/current/include/stdio.h +++ b/packages/isoinfra/current/include/stdio.h @@ -60,49 +60,55 @@ #define __need_size_t #include <stddef.h> -#if CYGINT_ISO_STDIO_FILETYPES +#ifdef CYGINT_ISO_STDIO_FILETYPES # ifdef CYGBLD_ISO_STDIO_FILETYPES_HEADER # include CYGBLD_ISO_STDIO_FILETYPES_HEADER # endif #endif -#if CYGINT_ISO_STDIO_FILEOPS +#ifdef CYGINT_ISO_STDIO_STREAMS +# ifdef CYGBLD_ISO_STDIO_STREAMS_HEADER +# include CYGBLD_ISO_STDIO_STREAMS_HEADER +# endif +#endif + +#ifdef CYGINT_ISO_STDIO_FILEOPS # ifdef CYGBLD_ISO_STDIO_FILEOPS_HEADER # include CYGBLD_ISO_STDIO_FILEOPS_HEADER # endif #endif -#if CYGINT_ISO_STDIO_FILEACCESS +#ifdef CYGINT_ISO_STDIO_FILEACCESS # ifdef CYGBLD_ISO_STDIO_FILEACCESS_HEADER # include CYGBLD_ISO_STDIO_FILEACCESS_HEADER # endif #endif -#if CYGINT_ISO_STDIO_FORMATTED_IO +#ifdef CYGINT_ISO_STDIO_FORMATTED_IO # ifdef CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER # include CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER # endif #endif -#if CYGINT_ISO_STDIO_CHAR_IO +#ifdef CYGINT_ISO_STDIO_CHAR_IO # ifdef CYGBLD_ISO_STDIO_CHAR_IO_HEADER # include CYGBLD_ISO_STDIO_CHAR_IO_HEADER # endif #endif -#if CYGINT_ISO_STDIO_DIRECT_IO +#ifdef CYGINT_ISO_STDIO_DIRECT_IO # ifdef CYGBLD_ISO_STDIO_DIRECT_IO_HEADER # include CYGBLD_ISO_STDIO_DIRECT_IO_HEADER # endif #endif -#if CYGINT_ISO_STDIO_FILEPOS +#ifdef CYGINT_ISO_STDIO_FILEPOS # ifdef CYGBLD_ISO_STDIO_FILEPOS_HEADER # include CYGBLD_ISO_STDIO_FILEPOS_HEADER # endif #endif -#if CYGINT_ISO_STDIO_ERROR +#ifdef CYGINT_ISO_STDIO_ERROR # ifdef CYGBLD_ISO_STDIO_ERROR_HEADER # include CYGBLD_ISO_STDIO_ERROR_HEADER # endif
--- a/packages/kernel/current/ChangeLog +++ b/packages/kernel/current/ChangeLog @@ -300,6 +300,10 @@ 2000-06-08 Jesper Skov <jskov@redhat.c * src/debug/dbg-thread-demux.c: Use generic HAL feature to allow ROM/RAM intercalling. +2000-06-06 Jesper Skov <jskov@redhat.com> + + * tests/kcache1.c (entry0): Skip invalidate tests on TX49. Too slow. + 2000-05-30 Gary Thomas <gthomas@redhat.com> * tests/dhrystone.c: Increase number of test loops for faster @@ -344,6 +348,10 @@ 2000-05-20 Jonathan Larmour <jlarmour@ (Cyg_SchedulerThreadQueue_Implementation::enqueue): Add, like old one, except make it FIFO instead of LIFO by inserting at end of queue +2000-05-16 Jesper Skov <jskov@redhat.com> + + * tests/dhrystone.c: More loops on the TX49 + 2000-05-15 Jonathan Larmour <jlarmour@redhat.co.uk> * cdl/counters.cdl (CYGVAR_KERNEL_COUNTERS_CLOCK_DSR_LATENCY):
--- a/packages/kernel/current/tests/dhrystone.c +++ b/packages/kernel/current/tests/dhrystone.c @@ -80,6 +80,8 @@ dtime(void) #define PASSES 100000 #elif defined(CYGPKG_HAL_V85X_V850_CEB) #define PASSES 20000 +#elif defined(CYGPKG_HAL_MIPS_TX49_REF4955) +#define PASSES 1000000 #elif defined(CYGPKG_HAL_POWERPC_MPC8xx) #define PASSES 250000 #else
--- a/packages/kernel/current/tests/kcache1.c +++ b/packages/kernel/current/tests/kcache1.c @@ -324,6 +324,12 @@ static void entry0( cyg_addrword_t data if (cyg_test_is_simulator) CYG_TEST_PASS_FINISH("End of test"); +#if defined(CYGPKG_HAL_MIPS_TX49) + // The TX49 has a large cache, and even with reduced loop count, + // 90+ seconds elapses between each INFO output. + CYG_TEST_PASS_FINISH("End of test"); +#endif + cyg_test_is_simulator = 1; #endif #ifdef HAL_ICACHE_INVALIDATE_ALL
--- a/packages/language/c/libc/stdio/current/ChangeLog +++ b/packages/language/c/libc/stdio/current/ChangeLog @@ -1,3 +1,22 @@ +2000-11-01 Jonathan Larmour <jlarmour@redhat.com> + + * include/stdio.h: Make FILE array type larger to be more resistant + against small data sections. + Lose the cyg_libc_stdio_stdin/out/err definitions with macros for + stdin/stdout/err since it can cause problems with libgcc exception + code. Instead just make these extern FILE *s. + * src/common/stderr.cxx: + * src/common/stdin.cxx: + * src/common/stdout.cxx: + Define objects with init priority corresponding to order the fd's + should be allocated where applicable. + Define actual stdin, stdout, stderr externally visible constants to + point to the streams. + + * cdl/stdio.cdl: Support CYGINT_ISO_STDIO_STREAMS interface + + * src/common/fopen.cxx (fdopen): return f as intended + 2000-10-23 Jesper Skov <jskov@redhat.com> * include/streambuf.inl: Adjust assertions to cope with buffers
--- a/packages/language/c/libc/stdio/current/cdl/stdio.cdl +++ b/packages/language/c/libc/stdio/current/cdl/stdio.cdl @@ -56,6 +56,7 @@ cdl_package CYGPKG_LIBC_STDIO { implements CYGINT_ISO_STDIO_CHAR_IO implements CYGINT_ISO_STDIO_DIRECT_IO implements CYGINT_ISO_STDIO_ERROR + implements CYGINT_ISO_STDIO_STREAMS requires { CYGBLD_ISO_STDIO_FILETYPES_HEADER == \ "<cyg/libc/stdio/stdio.h>" } requires { CYGBLD_ISO_STDIO_FILEACCESS_HEADER == \ @@ -68,6 +69,8 @@ cdl_package CYGPKG_LIBC_STDIO { "<cyg/libc/stdio/stdio.h>" } requires { CYGBLD_ISO_STDIO_ERROR_HEADER == \ "<cyg/libc/stdio/stdio.h>" } + requires { CYGBLD_ISO_STDIO_STREAMS_HEADER == \ + "<cyg/libc/stdio/stdio.h>" } requires CYGPKG_ISOINFRA requires CYGINT_ISO_ERRNO_CODES requires CYGINT_ISO_ERRNO
--- a/packages/language/c/libc/stdio/current/include/stdio.h +++ b/packages/language/c/libc/stdio/current/include/stdio.h @@ -91,30 +91,19 @@ typedef cyg_ucount32 fpos_t; // The array size is irrelevant other than being more than 8, and is present // to stop references to FILEs being marked as able to be put in the small // data section. We can't just mark it as in the ".data" section as on some -// targets it may actually be ".common". Maybe this doesn't matter? -// FIXME: This doesn't work if things are larger than 16 are put in sdata, -// e.g. on mips by specifying -G 32 -typedef CYG_ADDRESS FILE[16]; +// targets it may actually be ".common". +typedef CYG_ADDRESS FILE[9999]; // EXTERNAL VARIABLES // Default file streams for input/output. These only need to be // expressions, not l-values - ISO C standard chap. 7.9.1 // -// cyg_libc_stdio_stdin/out/err aren't really files of course, -// but they are only named here so that we can take the address of -// them, in which case it doesn't matter what type they point to really -// // CYGPRI_LIBC_STDIO_NO_DEFAULT_STREAMS is used when initializing -// cyg_libc_stdio_stdin/out/err privately inside the C library +// stdin/out/err privately inside the C library #ifndef CYGPRI_LIBC_STDIO_NO_DEFAULT_STREAMS -extern FILE cyg_libc_stdio_stdin, cyg_libc_stdio_stdout, - cyg_libc_stdio_stderr; - -#define stdin (&cyg_libc_stdio_stdin) -#define stdout (&cyg_libc_stdio_stdout) -#define stderr (&cyg_libc_stdio_stderr) +__externC FILE *stdin, *stdout, *stderr; #endif // FUNCTION PROTOTYPES
--- a/packages/language/c/libc/stdio/current/src/common/fopen.cxx +++ b/packages/language/c/libc/stdio/current/src/common/fopen.cxx @@ -242,6 +242,7 @@ externC FILE *fdopen( int fd, const char Cyg_StdioStream *real_stream = (Cyg_StdioStream *)f; fpos_t pos = 0; real_stream->set_position( pos, SEEK_CUR ); + return f; } #endif // def CYGPKG_LIBC_STDIO_FILEIO
--- a/packages/language/c/libc/stdio/current/src/common/stderr.cxx +++ b/packages/language/c/libc/stdio/current/src/common/stderr.cxx @@ -64,12 +64,18 @@ #include <cyg/libc/stdio/stdiofiles.hxx> // C library files #include <cyg/libc/stdio/stdiosupp.hxx> // Cyg_libc_stdio_find_filename() +// CONSTANTS + +// add 2 to the priority to allow it to be the fd 2 if necessary +#define PRIO (CYG_INIT_LIBC+2) + // STATICS Cyg_StdioStream -cyg_libc_stdio_stderr CYGBLD_ATTRIB_INIT_PRI(CYG_INIT_LIBC) = Cyg_StdioStream( +cyg_libc_stdio_stderr CYGBLD_ATTRIB_INIT_PRI(PRIO) = Cyg_StdioStream( Cyg_libc_stdio_find_filename(CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE, - Cyg_StdioStream::CYG_STREAM_WRITE, false, false), + Cyg_StdioStream::CYG_STREAM_WRITE, + false, false), Cyg_StdioStream::CYG_STREAM_WRITE, false, false, _IONBF, 0, NULL ); // CLASSES @@ -86,6 +92,10 @@ public: // And here's an instance of the class just to make the code run static cyg_libc_dummy_stderr_init_class cyg_libc_dummy_stderr_init - CYGBLD_ATTRIB_INIT_PRI(CYG_INIT_LIBC); + CYGBLD_ATTRIB_INIT_PRI(PRIO); + +// and finally stderr itself +__externC Cyg_StdioStream * const stderr; +Cyg_StdioStream * const stderr=&cyg_libc_stdio_stderr; // EOF stderr.cxx
--- a/packages/language/c/libc/stdio/current/src/common/stdin.cxx +++ b/packages/language/c/libc/stdio/current/src/common/stdin.cxx @@ -64,10 +64,15 @@ #include <cyg/libc/stdio/stdiofiles.hxx> // C library files #include <cyg/libc/stdio/stdiosupp.hxx> // Cyg_libc_stdio_find_filename() +// CONSTANTS + +// Use default libc priority to allow it to be the fd 0 if necessary +#define PRIO (CYG_INIT_LIBC) + // STATICS Cyg_StdioStream -cyg_libc_stdio_stdin CYGBLD_ATTRIB_INIT_PRI(CYG_INIT_LIBC) = Cyg_StdioStream( +cyg_libc_stdio_stdin CYGBLD_ATTRIB_INIT_PRI(PRIO) = Cyg_StdioStream( Cyg_libc_stdio_find_filename(CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE, Cyg_StdioStream::CYG_STREAM_READ, false, false), Cyg_StdioStream::CYG_STREAM_READ, false, false, _IOLBF ); @@ -87,5 +92,10 @@ public: // And here's an instance of the class just to make the code run static cyg_libc_dummy_stdin_init_class cyg_libc_dummy_stdin_init - CYGBLD_ATTRIB_INIT_PRI(CYG_INIT_LIBC); + CYGBLD_ATTRIB_INIT_PRI(PRIO); + +// and finally stdin itself +__externC Cyg_StdioStream * const stdin; +Cyg_StdioStream * const stdin=&cyg_libc_stdio_stdin; + // EOF stdin.cxx
--- a/packages/language/c/libc/stdio/current/src/common/stdout.cxx +++ b/packages/language/c/libc/stdio/current/src/common/stdout.cxx @@ -64,12 +64,18 @@ #include <cyg/libc/stdio/stdiofiles.hxx> // C library files #include <cyg/libc/stdio/stdiosupp.hxx> // Cyg_libc_stdio_find_filename() +// CONSTANTS + +// add 1 to the priority to allow it to be the fd 1 if necessary +#define PRIO (CYG_INIT_LIBC+1) + // STATICS Cyg_StdioStream -cyg_libc_stdio_stdout CYGBLD_ATTRIB_INIT_PRI(CYG_INIT_LIBC) = Cyg_StdioStream( +cyg_libc_stdio_stdout CYGBLD_ATTRIB_INIT_PRI(PRIO) = Cyg_StdioStream( Cyg_libc_stdio_find_filename(CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE, - Cyg_StdioStream::CYG_STREAM_WRITE, false, false), + Cyg_StdioStream::CYG_STREAM_WRITE, + false, false), Cyg_StdioStream::CYG_STREAM_WRITE, false, false, _IOLBF ); // CLASSES @@ -86,6 +92,10 @@ public: // And here's an instance of the class just to make the code run static cyg_libc_dummy_stdout_init_class cyg_libc_dummy_stdout_init - CYGBLD_ATTRIB_INIT_PRI(CYG_INIT_LIBC); + CYGBLD_ATTRIB_INIT_PRI(PRIO); + +// and finally stdout itself +__externC Cyg_StdioStream * const stdout; +Cyg_StdioStream * const stdout=&cyg_libc_stdio_stdout; // EOF stdout.cxx
--- a/packages/services/memalloc/common/current/ChangeLog +++ b/packages/services/memalloc/common/current/ChangeLog @@ -1,3 +1,8 @@ +2000-11-01 Jesper Skov <jskov@redhat.com> + + * tests/realloc.c (main): Use reasonable factor when making too + large realloc (targets with 64MB would cause an overflow). + 2000-10-31 Jonathan Larmour <jlarmour@redhat.com> * tests/testaux.hxx: Prototype cyg_hal_invoke_constructors()
--- a/packages/services/memalloc/common/current/tests/realloc.c +++ b/packages/services/memalloc/common/current/tests/realloc.c @@ -168,7 +168,7 @@ main( int argc, char *argv[] ) CYG_TEST_PASS_FAIL( fill_with_alphabet( str, size/4, 1 ), "reallocation quarter size usability"); - CYG_TEST_PASS_FAIL( realloc( str, size*100 ) == NULL, + CYG_TEST_PASS_FAIL( realloc( str, size*4 ) == NULL, "reallocing allocation that is too large" ); CYG_TEST_PASS_FAIL( compare_with_alphabet( str, size/4, 1 ), "Checking old contents maintained despite failure" );
--- a/packages/templates/all/ChangeLog +++ b/packages/templates/all/ChangeLog @@ -1,3 +1,7 @@ +2000-11-03 Jonathan Larmour <jlarmour@redhat.com> + + * current.ect: Update inferred values for current CDL. + 2000-07-22 Jonathan Larmour <jlarmour@redhat.co.uk> * current.ect: Don't include signals package by default as it conflicts
--- a/packages/templates/all/current.ect +++ b/packages/templates/all/current.ect @@ -165,3 +165,11 @@ cdl_option CYGSEM_KERNEL_SCHED_ASR_GLOBA inferred_value 1 }; +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + inferred_value 1 <cyg/libc/stdio/stdio.h> +}; + +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + inferred_value 1 <cyg/posix/sigsetjmp.h> +}; +
--- a/packages/templates/default/ChangeLog +++ b/packages/templates/default/ChangeLog @@ -1,3 +1,7 @@ +2000-11-03 Jonathan Larmour <jlarmour@redhat.com> + + * current.ect: Update inferred values for stdio streams header + 2000-08-02 Jonathan Larmour <jlarmour@redhat.co.uk> * current.ect: Update inferred values for current CDL
--- a/packages/templates/default/current.ect +++ b/packages/templates/default/current.ect @@ -119,3 +119,7 @@ cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER cdl_option CYGBLD_ISO_SETJMP_HEADER { inferred_value 1 <cyg/libc/setjmp/setjmp.h> }; + +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + inferred_value 1 <cyg/libc/stdio/stdio.h> +};
--- a/packages/templates/elix/ChangeLog +++ b/packages/templates/elix/ChangeLog @@ -1,3 +1,7 @@ +2000-11-03 Jonathan Larmour <jlarmour@redhat.com> + + * current.ect: Update values for current CDL + 2000-10-11 Jonathan Larmour <jlarmour@redhat.com> * current.ect: CYGPKG_NET_ETH_DRIVERS has been renamed to
--- a/packages/templates/elix/current.ect +++ b/packages/templates/elix/current.ect @@ -173,3 +173,15 @@ cdl_option CYGBLD_ISO_PTHREAD_IMPL_HEADE cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADER { inferred_value 1 <cyg/posix/limits.h> }; + +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + inferred_value 1 <cyg/libc/stdio/stdio.h> +}; + +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + inferred_value 1 <cyg/posix/sigsetjmp.h> +}; + +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + inferred_value 1 <cyg/fileio/limits.h> +};
--- a/packages/templates/net/ChangeLog +++ b/packages/templates/net/ChangeLog @@ -1,3 +1,7 @@ +2000-11-03 Jonathan Larmour <jlarmour@redhat.com> + + * current.ect: Update inferred values for current CDL + 2000-08-03 Gary Thomas <gthomas@redhat.com> * current.ect: Ethernet drivers have moved.
--- a/packages/templates/net/current.ect +++ b/packages/templates/net/current.ect @@ -175,5 +175,14 @@ cdl_option CYGSEM_KERNEL_SCHED_ASR_GLOBA inferred_value 1 }; +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + inferred_value 1 <cyg/libc/stdio/stdio.h> +}; +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + inferred_value 1 <cyg/posix/sigsetjmp.h> +}; +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + inferred_value 1 <cyg/fileio/limits.h> +};
--- a/packages/templates/posix/ChangeLog +++ b/packages/templates/posix/ChangeLog @@ -1,3 +1,7 @@ +2000-11-03 Jonathan Larmour <jlarmour@redhat.com> + + * current.ect: Update inferred values for current CDL + 2000-07-24 Jonathan Larmour <jlarmour@redhat.co.uk> * current.ect: Add CYGPKG_LIBC_STARTUP and CYGPKG_LIBC_STARTUP because
--- a/packages/templates/posix/current.ect +++ b/packages/templates/posix/current.ect @@ -112,3 +112,10 @@ cdl_option CYGBLD_ISO_POSIX_LIMITS_HEADE inferred_value 1 <cyg/posix/limits.h> }; +cdl_option CYGBLD_ISO_SIGSETJMP_HEADER { + inferred_value 1 <cyg/posix/sigsetjmp.h> +}; + +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + inferred_value 1 <cyg/fileio/limits.h> +};
--- a/packages/templates/stubs/ChangeLog +++ b/packages/templates/stubs/ChangeLog @@ -1,3 +1,8 @@ +2000-11-03 Jonathan Larmour <jlarmour@redhat.com> + + * current.ect: Add inferred values for CDL that confuses the + config tool inference engine at present. + 2000-07-20 Nick Garnett <nickg@cygnus.co.uk> * current.ect: Added ISOINFRA package.
--- a/packages/templates/stubs/current.ect +++ b/packages/templates/stubs/current.ect @@ -21,3 +21,20 @@ This is the eCos stubs configuration. It cdl_option CYGBLD_BUILD_GDB_STUBS { user_value 1 ; }; + +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + inferred_value 1 <cyg/error/codes.h> +}; + +cdl_option CYGBLD_ISO_ERRNO_HEADER { + inferred_value 1 <cyg/error/errno.h> +}; + +cdl_option CYGBLD_ISO_STRERROR_HEADER { + inferred_value 1 <cyg/error/strerror.h> +}; + +cdl_option CYGSEM_ERROR_PER_THREAD_ERRNO { + inferred_value 0 +}; +
--- a/packages/templates/uitron/ChangeLog +++ b/packages/templates/uitron/ChangeLog @@ -1,3 +1,8 @@ +2000-11-03 Jonathan Larmour <jlarmour@redhat.com> + + * current.ect: Add inferred values for CDL that confuses the + config tool inference engine at present. + 2000-09-07 Jonathan Larmour <jlarmour@redhat.com> * current.ect: Add libc signals package because there's no real reason
--- a/packages/templates/uitron/current.ect +++ b/packages/templates/uitron/current.ect @@ -35,3 +35,96 @@ features." ; }; +cdl_option CYGBLD_ISO_CTYPE_HEADER { + inferred_value 1 <cyg/libc/i18n/ctype.inl> +}; + +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + inferred_value 1 <cyg/error/codes.h> +}; + +cdl_option CYGBLD_ISO_ERRNO_HEADER { + inferred_value 1 <cyg/error/errno.h> +}; + +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + inferred_value 1 <cyg/libc/stdio/stdio.h> +}; + +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + inferred_value 1 <cyg/libc/stdio/stdio.h> +}; + +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + inferred_value 1 <cyg/libc/stdio/stdio.h> +}; + +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + inferred_value 1 <cyg/libc/stdio/stdio.h> +}; + +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + inferred_value 1 <cyg/libc/stdio/stdio.h> +}; + +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + inferred_value 1 <cyg/libc/stdio/stdio.h> +}; + +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + inferred_value 1 <cyg/libc/stdio/stdio.h> +}; + +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + inferred_value 1 <cyg/libc/stdlib/atox.inl> +}; + +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + inferred_value 1 <cyg/libc/stdlib/abs.inl> +}; + +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + inferred_value 1 <cyg/libc/stdlib/div.inl> +}; + +cdl_option CYGBLD_ISO_STRERROR_HEADER { + inferred_value 1 <cyg/error/strerror.h> +}; + +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + inferred_value 1 <cyg/libc/string/string.h> +}; + +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + inferred_value 1 <cyg/libc/string/string.h> +}; + +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + inferred_value 1 <cyg/libc/string/string.h> +}; + +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + inferred_value 1 <cyg/libc/string/string.h> +}; + +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + inferred_value 1 <cyg/libc/time/time.h> +}; + +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + inferred_value 1 <cyg/libc/time/time.h> +}; + +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + inferred_value 1 <cyg/libc/signals/signal.h> +}; + +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + inferred_value 1 <cyg/libc/signals/signal.h> +}; + +cdl_option CYGBLD_ISO_SETJMP_HEADER { + inferred_value 1 <cyg/libc/setjmp/setjmp.h> +}; + +
