Mercurial > ecos
changeset 130:eb9fd8c04db3 ecos-sw-2000-10-23
Merge from eCos master repository on 2000-10-23-17:01:37-BST
line wrap: on
line diff
--- a/host/ChangeLog +++ b/host/ChangeLog @@ -1,3 +1,13 @@ +2000-10-23 Jesper Skov <jskov@redhat.com> + + * configure: Disable ser_filter magic for now - properly this time! + * configure.in: Ditto. + +2000-10-17 Jesper Skov <jskov@redhat.com> + + * configure: Disable ser_filter magic for now. + * configure.in: Ditto. + 2000-09-15 Jesper Skov <jskov@redhat.com> * Makefile.in: Added ser_filter rules.
--- a/host/configure +++ b/host/configure @@ -1673,15 +1673,7 @@ ECOS_DIRS="infra libcdl" -if test -f ${srcdir}/tools/Utils/common/configure; then - ECOS_DIRS="${ECOS_DIRS} tools/Utils/common" - -fi -if test -f ${srcdir}/tools/ecostest/common/configure; then - ECOS_DIRS="${ECOS_DIRS} tools/ecostest/common" - -fi if test -d ${srcdir}/tools/configtool/standalone/common; then ECOS_DIRS="${ECOS_DIRS} tools/configtool/standalone/common" @@ -1972,21 +1964,9 @@ EOF cat >> $CONFIG_STATUS <<EOF - - EOF cat >> $CONFIG_STATUS <<\EOF - test -d tools || mkdir tools - test -d tools/Utils || mkdir tools/Utils - test -d tools/Utils/common || mkdir tools/Utils/common - - - test -d tools || mkdir tools - test -d tools/ecostest || mkdir tools/ecostest - test -d tools/ecostest/common || mkdir tools/ecostest/common - - test -d tools || mkdir tools test -d tools/configtool || mkdir tools/configtool test -d tools/configtool/standalone || mkdir tools/configtool/standalone
--- a/host/configure.in +++ b/host/configure.in @@ -132,23 +132,25 @@ dnl ]) dnl -------------------------------------------------------------------- dnl Add any other directories that are autoconfiscated and present -if test -f ${srcdir}/tools/Utils/common/configure; then - ECOS_DIRS="${ECOS_DIRS} tools/Utils/common" - AC_OUTPUT_COMMANDS([ - test -d tools || mkdir tools - test -d tools/Utils || mkdir tools/Utils - test -d tools/Utils/common || mkdir tools/Utils/common - ]) -fi -if test -f ${srcdir}/tools/ecostest/common/configure; then - ECOS_DIRS="${ECOS_DIRS} tools/ecostest/common" - AC_OUTPUT_COMMANDS([ - test -d tools || mkdir tools - test -d tools/ecostest || mkdir tools/ecostest - test -d tools/ecostest/common || mkdir tools/ecostest/common - ]) -fi +dnl ---- Delete the dnl column below to configure ser_filter on Linux ---- +dnl if test -f ${srcdir}/tools/Utils/common/configure; then +dnl ECOS_DIRS="${ECOS_DIRS} tools/Utils/common" +dnl AC_OUTPUT_COMMANDS([ +dnl test -d tools || mkdir tools +dnl test -d tools/Utils || mkdir tools/Utils +dnl test -d tools/Utils/common || mkdir tools/Utils/common +dnl ]) +dnl fi +dnl +dnl if test -f ${srcdir}/tools/ecostest/common/configure; then +dnl ECOS_DIRS="${ECOS_DIRS} tools/ecostest/common" +dnl AC_OUTPUT_COMMANDS([ +dnl test -d tools || mkdir tools +dnl test -d tools/ecostest || mkdir tools/ecostest +dnl test -d tools/ecostest/common || mkdir tools/ecostest/common +dnl ]) +dnl fi if test -d ${srcdir}/tools/configtool/standalone/common; then ECOS_DIRS="${ECOS_DIRS} tools/configtool/standalone/common"
--- a/host/tools/Utils/win32/CellEdit.cpp +++ b/host/tools/Utils/win32/CellEdit.cpp @@ -27,6 +27,8 @@ #include "stdafx.h" #include "CellEdit.h" +#include "cellview.h" +#include "Configtool.h" #ifdef _DEBUG #define new DEBUG_NEW @@ -51,6 +53,7 @@ BEGIN_MESSAGE_MAP(CCellEdit, CCell) //{{AFX_MSG_MAP(CCellEdit) ON_WM_CREATE() ON_WM_CHAR() + ON_WM_KILLFOCUS() //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -72,6 +75,11 @@ int CCellEdit::OnCreate(LPCREATESTRUCT l return 0; } +void CCellEdit::OnKillFocus(CWnd*) +{ + CConfigTool::GetCellView()->CancelCellEdit(); +} + void CCellEdit::OnEditCopy () { SendMessage(WM_COPY,0,0);
--- a/host/tools/Utils/win32/CellEdit.h +++ b/host/tools/Utils/win32/CellEdit.h @@ -71,6 +71,7 @@ protected: //{{AFX_MSG(CCellEdit) afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags); + afx_msg void OnKillFocus(CWnd* pNewWnd); //}}AFX_MSG DECLARE_MESSAGE_MAP()
--- a/host/tools/Utils/win32/ComboEdit.cpp +++ b/host/tools/Utils/win32/ComboEdit.cpp @@ -27,6 +27,8 @@ #include "stdafx.h" #include "ComboEdit.h" +#include "cellview.h" +#include "Configtool.h" #ifdef _DEBUG #define new DEBUG_NEW @@ -51,6 +53,7 @@ CComboEdit::~CComboEdit() BEGIN_MESSAGE_MAP(CComboEdit, CCell) //{{AFX_MSG_MAP(CComboEdit) ON_WM_CREATE() + ON_WM_KILLFOCUS() //}}AFX_MSG_MAP END_MESSAGE_MAP() @@ -79,3 +82,9 @@ int CComboEdit::OnCreate(LPCREATESTRUCT return 0; } + +void CComboEdit::OnKillFocus(CWnd*) +{ + CConfigTool::GetCellView()->CancelCellEdit(); +} +
--- a/host/tools/Utils/win32/ComboEdit.h +++ b/host/tools/Utils/win32/ComboEdit.h @@ -62,6 +62,7 @@ protected: CStringArray m_arValues; //{{AFX_MSG(CComboEdit) afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); + afx_msg void OnKillFocus(CWnd* pNewWnd); //}}AFX_MSG DECLARE_MESSAGE_MAP()
--- a/host/tools/ecostest/ChangeLog +++ b/host/tools/ecostest/ChangeLog @@ -1,3 +1,9 @@ +2000-09-28 Jesper Skov <jskov@redhat.com> + + * common/eCosTestSerialFilter.cpp (CMD_TestBinary): Reset counter + for each test so the failure data is the same from two different + runs of the test. + 2000-09-15 Jesper Skov <jskov@redhat.com> * common/ser_filter.cpp (main): Don't require ResourceServer.
--- a/host/tools/ecostest/common/eCosTestSerialFilter.cpp +++ b/host/tools/ecostest/common/eCosTestSerialFilter.cpp @@ -736,8 +736,8 @@ CeCosTestSerialFilter::CMD_TestBinary(Ce fprintf(stderr, "Could not allocate %d byte buffer for data!\n", size); throw "data_in malloc failed"; } + int count = 0; for (i = 0; i < size; i++) { - static int count = 0; // Output 255 chars, not 256 so that we aren't a multiple/factor of the // likely buffer sizes in the system, this can mask problems as I've // found to my cost!
--- a/packages/ChangeLog +++ b/packages/ChangeLog @@ -1,3 +1,7 @@ +2000-10-20 Gary Thomas <gthomas@redhat.com> + + * ecos.db: Add FLASH drivers for PowerPC/MBX. + 2000-09-15 Jesper Skov <jskov@redhat.com> * ecos.db: Made PID use generic 16x5x driver.
--- a/packages/NEWS +++ b/packages/NEWS @@ -1,5 +1,6 @@ * SH serial driver cleanup. SCIF driver added. SCI and SCIF drivers are - now separate packages. + now separate packages. SCIF driver uses full FIFO and can utilize + DMA for transmit operations. * Move logical ethernet "driver" into io/eth where the interface can be shared between multiple implementations, e.g. BSD TCP/IP and Red Boot's TCP/IP stacks.
--- a/packages/compat/posix/current/ChangeLog +++ b/packages/compat/posix/current/ChangeLog @@ -1,3 +1,36 @@ +2000-10-16 Jonathan Larmour <jlarmour@redhat.com> + + * include/sigsetjmp.h (sigsetjmp): Various fixes to make portable + across all HALs (by avoiding CYGARC_JMP_BUF_SIZE) and remove warnings. + * src/signal.cxx (siglongjmp): Likewise + +2000-10-12 Nick Garnett <nickg@cygnus.co.uk> + + * include/sigsetjmp.h: Added this header to define + sigjmp_buf,sigsetjmp() and siglongjmp(). + + * cdl/posix.cdl: + Added support for providing sigsetjmp implementation and header. + Added sigsetjmp test. + + * src/signal.cxx: Added siglongjmp(). + + * tests/sigsetjmp.c: Added this test for sigsetjmp(), siglongjmp() + functionality. This is also a test for longjmping out of signal + handlers. + + * tests/signal2.c: + Ifdeffed around cause_* functions to avoid compiler warnings when + they are not needed. + Changed CYG_TEST_NA() calls to CYG_TEST_INFO() and changed + CYG_TEST_FINISH() to CYG_TEST_PASS_FINISH(). With the _NA's there, + the first unsupported exception just terminates the program, and + does not give any subsequent supported ones a chance to run. + +2000-10-12 Jesper Skov <jskov@redhat.com> + + * tests/timer1.c (main): Fix exit check. + 2000-10-11 Nick Garnett <nickg@cygnus.co.uk> * src/pthread.cxx: Fixed cyg_posix_pthread_release_thread() to
--- a/packages/compat/posix/current/cdl/posix.cdl +++ b/packages/compat/posix/current/cdl/posix.cdl @@ -56,12 +56,15 @@ cdl_package CYGPKG_POSIX { implements CYGINT_ISO_SIGNAL_NUMBERS implements CYGINT_ISO_SIGNAL_IMPL implements CYGINT_ISO_POSIX_LIMITS + implements CYGINT_ISO_SIGSETJMP requires { CYGBLD_ISO_SIGNAL_NUMBERS_HEADER == \ "<cyg/posix/signal.h>" } requires { CYGBLD_ISO_SIGNAL_IMPL_HEADER == \ "<cyg/posix/signal.h>" } requires { CYGBLD_ISO_POSIX_LIMITS_HEADER == \ "<cyg/posix/limits.h>" } + requires { CYGBLD_ISO_SIGSETJMP_HEADER == \ + "<cyg/posix/sigsetjmp.h>" } compile pthread.cxx mqueue.cxx sem.cxx time.cxx signal.cxx \ sched.cxx except.cxx misc.cxx @@ -231,7 +234,7 @@ cdl_package CYGPKG_POSIX { display "POSIX tests" flavor data no_define - calculated { "tests/pthread1 tests/pthread2 tests/pthread3 tests/mutex3 tests/signal1 tests/timer1 tests/tm_basic tests/signal2 tests/mqueue1 tests/mqueue2" } + calculated { "tests/pthread1 tests/pthread2 tests/pthread3 tests/mutex3 tests/signal1 tests/timer1 tests/tm_basic tests/signal2 tests/mqueue1 tests/mqueue2 tests/sigsetjmp" } description " This option specifies the set of tests for the POSIX package." }
new file mode 100644 --- /dev/null +++ b/packages/compat/posix/current/include/sigsetjmp.h @@ -0,0 +1,86 @@ +#ifndef CYGONCE_SIGSETJMP_H +#define CYGONCE_SIGSETJMP_H +//============================================================================= +// +// sigsetjmp.h +// +// POSIX sigsetjmp header +// +//============================================================================= +//####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, jlarmour +// Contributors: +// Date: 2000-03-17 +// Purpose: POSIX sigsetjmp header +// Description: This header contains all the definitions needed to support +// the POSIX sigsetjmp/siglongjmp API under eCos. +// +// Usage: This file must be included indirectly via +// the C library setjmp.h header. +// +// +//####DESCRIPTIONEND#### +// +//============================================================================= + +#include <pkgconf/hal.h> +#include <pkgconf/kernel.h> +#include <pkgconf/posix.h> + +#include <signal.h> + +//============================================================================= +// sigjmp_buf structure +// The API requires this to be an array type, but this array actually +// contains three fields: +// 0..sizeof(hal_jmp_buf)-1 HAL jump buffer +// sizeof(hal_jmp_buf) savemask value (an int) +// sizeof(hal_jmp_buf)+sizeof(int)... sigset_t containing saved mask + +typedef cyg_uint8 sigjmp_buf[sizeof(hal_jmp_buf)+sizeof(int)+(sizeof(sigset_t))]; + +//============================================================================= +// sigsetjmp() macro + +#define sigsetjmp( _env_, _savemask_ ) \ +( \ + (*(int *)&((_env_)[sizeof(hal_jmp_buf)])=(_savemask_)), \ + ((_savemask_)?pthread_sigmask(SIG_BLOCK,NULL, \ + (sigset_t *)&(_env_)[sizeof(hal_jmp_buf)+ \ + sizeof(int)]):0), \ + hal_setjmp(*(hal_jmp_buf *)&_env_[0]) \ +) + +//============================================================================= +// siglongjmp function + +__externC void siglongjmp( sigjmp_buf env, int val ); + +//----------------------------------------------------------------------------- +#endif // ifndef CYGONCE_SIGSETJMP_H +// End of sigsetjmp.h
--- a/packages/compat/posix/current/src/signal.cxx +++ b/packages/compat/posix/current/src/signal.cxx @@ -55,6 +55,7 @@ #include "pprivate.h" // POSIX private header #include <signal.h> // our header +#include <setjmp.h> #include <cyg/kernel/clock.hxx> @@ -1046,6 +1047,34 @@ externC int raise(int sig) return kill( 0, sig ); } +// ------------------------------------------------------------------------- +// siglongjmp() +// Restores signal mask and longjumps. + +__externC void siglongjmp( sigjmp_buf env, int val ) +{ + CYG_REPORT_FUNCNAME( "siglongjmp" ); + CYG_REPORT_FUNCARG2( "&env=%08x, val=%d", &env, val ); + + // ISO C says that if we are passed val == 0, then we change it to 1 + if( val == 0 ) + val = 1; + + if( *(int *)&env[sizeof(hal_jmp_buf)] ) + pthread_sigmask( SIG_SETMASK, (sigset_t *)&(env)[sizeof(hal_jmp_buf)+sizeof(int)], NULL ); + + HAL_REORDER_BARRIER(); // prevent any chance of optimisation re-ordering + hal_longjmp( (hal_jmp_buf)env, val ); + HAL_REORDER_BARRIER(); // prevent any chance of optimisation re-ordering + +#ifdef CYGDBG_USE_ASSERTS + CYG_ASSERT( 0, "siglongjmp should not have reached this point!" ); +#else + for (;;) + CYG_EMPTY_STATEMENT; +#endif + +} // ------------------------------------------------------------------------- // EOF signal.cxx
--- a/packages/compat/posix/current/tests/signal2.c +++ b/packages/compat/posix/current/tests/signal2.c @@ -71,6 +71,8 @@ static jmp_buf jbuf; //-------------------------------------------------------------------------- +#ifdef CYGNUM_HAL_EXCEPTION_DATA_UNALIGNED_ACCESS + static void cause_unaligned_access(void) { @@ -81,8 +83,12 @@ cause_unaligned_access(void) } // cause_unaligned_access() +#endif + //-------------------------------------------------------------------------- +#ifdef CYGNUM_HAL_EXCEPTION_DATA_ACCESS + static void cause_illegal_access(void) { @@ -97,8 +103,12 @@ cause_illegal_access(void) } // cause_unaligned_access() +#endif + //-------------------------------------------------------------------------- +#ifdef CYGNUM_HAL_EXCEPTION_FPU_DIV_BY_ZERO + // num must always be 0 - do it this way in case the optimizer tries to // get smart @@ -117,6 +127,8 @@ cause_fpe(int num) // (integer division by zero). } // cause_fpe() +#endif + //-------------------------------------------------------------------------- // Signal handler functions @@ -214,7 +226,7 @@ int main(int argc, char **argv) #else - CYG_TEST_NA("Test 1 - provoke unaligned access - not supported"); + CYG_TEST_INFO("Test 1 - provoke unaligned access - not supported"); #endif @@ -231,7 +243,7 @@ int main(int argc, char **argv) #else - CYG_TEST_NA("Test 1 - provoke illegal access - not supported"); + CYG_TEST_INFO("Test 1 - provoke illegal access - not supported"); #endif @@ -248,11 +260,11 @@ int main(int argc, char **argv) #else - CYG_TEST_NA("Test 3 - provoke FP error - not supported"); + CYG_TEST_INFO("Test 3 - provoke FP error - not supported"); #endif - - CYG_TEST_FINISH( "signal2" ); + + CYG_TEST_PASS_FINISH( "signal2" ); } #endif // ifndef NA_MSG
new file mode 100644 --- /dev/null +++ b/packages/compat/posix/current/tests/sigsetjmp.c @@ -0,0 +1,354 @@ +//========================================================================== +// +// sigsetjmp.c +// +// POSIX sigsetjmp test +// +//========================================================================== +//####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-04-10 +// Description: Tests POSIX sigsetjmp functionality. +// +//####DESCRIPTIONEND#### +//========================================================================== + +#include <sys/types.h> +#include <pthread.h> +#include <signal.h> +#include <semaphore.h> +#include <time.h> +#include <setjmp.h> + +#include <cyg/infra/testcase.h> + +//-------------------------------------------------------------------------- +// Thread stack. + +char thread1_stack[PTHREAD_STACK_MIN*2]; +char thread2_stack[PTHREAD_STACK_MIN*2]; + +//-------------------------------------------------------------------------- +// Local variables + +// Sync semaphore +sem_t sem; + +// Thread IDs +pthread_t thread1; +pthread_t thread2; + +timer_t timer1; +timer_t timer2; + +volatile int sigusr1_called = 0; +volatile int sigusr2_called = 0; + +sigjmp_buf jmpbuf1; +sigjmp_buf jmpbuf2; + +//-------------------------------------------------------------------------- +// Signal handler functions + +static void sigusr1( int signo, siginfo_t *info, void *context ) +{ + CYG_TEST_INFO( "sigusr1() handler called" ); + CYG_TEST_CHECK( signo == SIGUSR1, "Signal not SIGUSR1"); + CYG_TEST_CHECK( signo == info->si_signo, "Bad signal number in siginfo" ); + CYG_TEST_CHECK( info->si_code == SI_TIMER, "Siginfo code not SI_TIMER" ); + CYG_TEST_CHECK( info->si_value.sival_int == 0xABCDEF01, "Siginfo value wrong"); + CYG_TEST_CHECK( pthread_equal(pthread_self(), thread1), "Not called in thread1"); + + sigusr1_called++; + + CYG_TEST_INFO( "sigusr1() handler calling siglongjmp()" ); + + siglongjmp( jmpbuf1, sigusr1_called ); +} + +static void sigusr2( int signo, siginfo_t *info, void *context ) +{ + CYG_TEST_INFO( "sigusr2() handler called" ); + CYG_TEST_CHECK( signo == SIGUSR2, "Signal not SIGUSR2"); + CYG_TEST_CHECK( signo == info->si_signo, "Bad signal number in siginfo" ); + CYG_TEST_CHECK( info->si_code == SI_TIMER, "Siginfo code not SI_TIMER" ); + CYG_TEST_CHECK( info->si_value.sival_int == 0xABCDEF02, "Siginfo value wrong"); + CYG_TEST_CHECK( pthread_equal(pthread_self(), thread2), "Not called in thread2"); + + sigusr2_called++; + + CYG_TEST_INFO( "sigusr2() handler calling siglongjmp()" ); + siglongjmp( jmpbuf2, sigusr2_called ); +} + +//-------------------------------------------------------------------------- + +void *pthread_entry1( void *arg) +{ + sigset_t mask; + + + CYG_TEST_INFO( "Thread 1 running" ); + + // Make a full set + sigfillset( &mask ); + + // remove USR1 signal + sigdelset( &mask, SIGUSR1 ); + + // Set signal mask + pthread_sigmask( SIG_SETMASK, &mask, NULL ); + + // Get main thread going again + sem_post( &sem ); + + do + { + sigset_t curmask; + + CYG_TEST_INFO( "Thread1: calling sigsetjmp()"); + if( sigsetjmp( jmpbuf1, 1 ) != 0 ) + CYG_TEST_INFO( "Thread1: sigsetjmp() returned non-zero"); + + pthread_sigmask( SIG_SETMASK, NULL, &curmask ); + CYG_TEST_CHECK( curmask == mask, "Thread1: Signal masks not equal" ); + + if ( sigusr1_called >= 1 ) + break; + + CYG_TEST_INFO( "Thread1: calling pause()"); + pause(); + + CYG_TEST_INFO( "Thread2: pause() returned"); + } while(1); + + CYG_TEST_INFO( "Thread1: calling pthread_exit()"); + pthread_exit( arg ); +} + +//-------------------------------------------------------------------------- + +void *pthread_entry2( void *arg) +{ + sigset_t mask; + + CYG_TEST_INFO( "Thread 2 running" ); + + // Make a full set + sigfillset( &mask ); + + // remove USR2 signal + sigdelset( &mask, SIGUSR2 ); + + // Set signal mask + pthread_sigmask( SIG_SETMASK, &mask, NULL ); + + // Get main thread going again + sem_post( &sem ); + + do + { + sigset_t curmask; + + CYG_TEST_INFO( "Thread2: calling sigsetjmp()"); + if( sigsetjmp( jmpbuf2, 1 ) != 0 ) + CYG_TEST_INFO( "Thread2: sigsetjmp() returned non-zero"); + + pthread_sigmask( SIG_SETMASK, NULL, &curmask ); + CYG_TEST_CHECK( curmask == mask, "Thread2: Signal masks not equal" ); + + if ( sigusr2_called >= 6 ) + break; + + CYG_TEST_INFO( "Thread2: calling pause()"); + pause(); + + CYG_TEST_INFO( "Thread2: pause() returned"); + } while(1); + + CYG_TEST_INFO( "Thread2: calling pthread_exit()"); + pthread_exit( arg ); +} + +//-------------------------------------------------------------------------- + +int main(int argc, char **argv) +{ + int ret; + sigset_t mask; + pthread_attr_t attr; + void *retval; + + CYG_TEST_INIT(); + + // Make a full signal set + sigfillset( &mask ); + + + // Install signal handlers + { + struct sigaction sa; + + sa.sa_sigaction = sigusr1; + sa.sa_mask = mask; + sa.sa_flags = SA_SIGINFO; + + ret = sigaction( SIGUSR1, &sa, NULL ); + + CYG_TEST_CHECK( ret == 0 , "sigaction returned error"); + } + { + struct sigaction sa; + + sa.sa_sigaction = sigusr2; + sa.sa_mask = mask; + sa.sa_flags = SA_SIGINFO; + + ret = sigaction( SIGUSR2, &sa, NULL ); + + CYG_TEST_CHECK( ret == 0 , "sigaction returned error"); + } + + + // Create the timers + + { + struct sigevent sev; + struct itimerspec value; + + sev.sigev_notify = SIGEV_SIGNAL; + sev.sigev_signo = SIGUSR1; + sev.sigev_value.sival_int = 0xABCDEF01; + + value.it_value.tv_sec = 1; + value.it_value.tv_nsec = 0; + value.it_interval.tv_sec = 0; + value.it_interval.tv_nsec = 0; + + ret = timer_create( CLOCK_REALTIME, &sev, &timer1 ); + + CYG_TEST_CHECK( ret == 0 , "timer_create returned error"); + + ret = timer_settime( timer1, 0, &value, NULL ); + + CYG_TEST_CHECK( ret == 0 , "timer_settime returned error"); + } + + { + struct sigevent sev; + struct itimerspec value; + + sev.sigev_notify = SIGEV_SIGNAL; + sev.sigev_signo = SIGUSR2; + sev.sigev_value.sival_int = 0xABCDEF02; + + value.it_value.tv_sec = 0; + value.it_value.tv_nsec = 500000000; + value.it_interval.tv_sec = 0; + value.it_interval.tv_nsec = 250000000; + + ret = timer_create( CLOCK_REALTIME, &sev, &timer2 ); + + CYG_TEST_CHECK( ret == 0 , "timer_create returned error"); + + ret = timer_settime( timer2, 0, &value, NULL ); + + CYG_TEST_CHECK( ret == 0 , "timer_settime returned error"); + } + + + // Mask all signals + pthread_sigmask( SIG_SETMASK, &mask, NULL ); + + sem_init( &sem, 0, 0 ); + + // Create test threads + + { + pthread_attr_init( &attr ); + + pthread_attr_setstackaddr( &attr, (void *)&thread1_stack[sizeof(thread1_stack)] ); + pthread_attr_setstacksize( &attr, sizeof(thread1_stack) ); + + pthread_create( &thread1, + &attr, + pthread_entry1, + (void *)0x12345671); + } + + { + pthread_attr_init( &attr ); + + pthread_attr_setstackaddr( &attr, (void *)&thread2_stack[sizeof(thread2_stack)] ); + pthread_attr_setstacksize( &attr, sizeof(thread2_stack) ); + + pthread_create( &thread2, + &attr, + pthread_entry2, + (void *)0x12345672); + } + + // Wait for other thread to get started + CYG_TEST_INFO( "Main: calling sem_wait()"); + sem_wait( &sem ); + CYG_TEST_INFO( "Main: calling sem_wait() again"); + sem_wait( &sem ); + + // Now join with thread1 + CYG_TEST_INFO( "Main: calling pthread_join(thread1)"); + pthread_join( thread1, &retval ); + + CYG_TEST_CHECK( retval == (void *)0x12345671, "Thread 1 retval wrong"); + + // And thread 2 + CYG_TEST_INFO( "Main: calling pthread_join(thread2)"); + pthread_join( thread2, &retval ); + + // now delete the timers + CYG_TEST_INFO( "Main: calling timer_delete(timer1)"); + ret = timer_delete( timer1 ); + + CYG_TEST_CHECK( ret == 0 , "timer_delete(timer1) returned error"); + + CYG_TEST_INFO( "Main: calling timer_delete(timer2)"); + ret = timer_delete( timer2 ); + + CYG_TEST_CHECK( ret == 0 , "timer_delete(timer2) returned error"); + + + CYG_TEST_CHECK( retval == (void *)0x12345672, "Thread 2 retval wrong"); + + CYG_TEST_CHECK( sigusr1_called == 1, "SIGUSR1 signal handler not called once" ); + CYG_TEST_CHECK( sigusr2_called == 6, "SIGUSR2 signal handler not called six times" ); + + CYG_TEST_PASS_FINISH( "sigsetjmp" ); +} + +//-------------------------------------------------------------------------- +// end of sigsetjmp.c
--- a/packages/compat/posix/current/tests/timer1.c +++ b/packages/compat/posix/current/tests/timer1.c @@ -301,7 +301,7 @@ int main(int argc, char **argv) CYG_TEST_INFO( "Main: calling timer_delete(timer2)"); ret = timer_delete( timer2 ); - CYG_TEST_CHECK( ret == 0 , "timer_delete(timer2) returned error"); + CYG_TEST_CHECK( ret == 0 , "timer_delete(timer2) returned error"); CYG_TEST_CHECK( retval == (void *)0x12345672, "Thread 2 retval wrong"); @@ -309,12 +309,7 @@ int main(int argc, char **argv) CYG_TEST_CHECK( sigusr1_called == 1, "SIGUSR1 signal handler not called once" ); CYG_TEST_CHECK( sigusr2_called == 6, "SIGUSR2 signal handler not called six times" ); - // check retval - - if( (long)retval == 0 ) - CYG_TEST_PASS_FINISH( "timer1" ); - else - CYG_TEST_FAIL_FINISH( "timer1" ); + CYG_TEST_PASS_FINISH( "timer1" ); } //--------------------------------------------------------------------------
--- a/packages/cygmon/current/ChangeLog +++ b/packages/cygmon/current/ChangeLog @@ -1,3 +1,12 @@ +2000-10-17 Drew Moseley <dmoseley@redhat.com> + + * misc/utils.c: Fix a typo. Also make sure we are ignoring the + '+' characters from gdb. + + * misc/monitor_cmd.c: Add a few cache flushes. + + * misc/monitor.h: Use the debug port for xvprintf. + 2000-08-14 Drew Moseley <dmoseley@redhat.com> * misc/ecos_bsp.c: Added some include files to fix some build
--- a/packages/cygmon/current/misc/monitor.h +++ b/packages/cygmon/current/misc/monitor.h @@ -64,7 +64,7 @@ #ifdef HAVE_BSP #define xprintf bsp_dprintf #define xsprintf bsp_sprintf -#define xvprintf bsp_vprintf +#define xvprintf bsp_dvprintf #define xputchar bsp_debug_putc #define xgetchar bsp_debug_getc #define xungetchar bsp_debug_ungetc
--- a/packages/cygmon/current/misc/monitor_cmd.c +++ b/packages/cygmon/current/misc/monitor_cmd.c @@ -806,6 +806,10 @@ poke (void) { xprintf ("Memory write failed\n"); } +#ifdef HAVE_BSP + bsp_flush_dcache((void *)addr.addr, size); + bsp_flush_icache((void *)addr.addr, size); +#endif } else { @@ -1136,6 +1140,10 @@ load_srec(srec_input_func_t inp_func) MAKE_STD_ADDR (address, &memaddr); write_memory (&memaddr, 1, dcount, data_buf); +#ifdef HAVE_BSP + bsp_flush_dcache((void *)memaddr.addr, dcount); + bsp_flush_icache((void *)memaddr.addr, dcount); +#endif return 0; } @@ -2095,6 +2103,10 @@ Copies 0x300 bytes of memory from 0x1000 xprintf ("Memory write failed\n"); break; } +#ifdef HAVE_BSP + bsp_flush_dcache((void *)dst.addr, msize); + bsp_flush_icache((void *)dst.addr, msize); +#endif ADD_OFFSET (&src, &src, msize); ADD_OFFSET (&dst, &dst, msize); size -= msize; @@ -2458,7 +2470,7 @@ int monitor_loop (void) { int state = 1, return_value = 0; - + while (state == 1) { /* Get a line of input, putting it in the input buffer */ @@ -2466,7 +2478,12 @@ monitor_loop (void) xprintf ("\n"); if (switch_to_stub_flag) - return transfer_to_stub (); + { +#ifndef HAVE_BSP + switch_to_stub_flag = 0; +#endif + return transfer_to_stub (); + } /* Separate off the command from any other stuff on the line */
--- a/packages/cygmon/current/misc/utils.c +++ b/packages/cygmon/current/misc/utils.c @@ -69,7 +69,14 @@ volatile int switch_to_stub_flag = 0; int input_char (void) { - int i = xgetchar (); + int i; + + /* We have to drop the '+' characters on the floor + because gdb will send a '+' as the first character + when connecting to the target. If we waste time + echoing that, slow hw might get a uart overrun. */ + while ((i = xgetchar ()) == '+'); + if (i == '$') { xungetchar ('$'); @@ -264,7 +271,7 @@ int2str (target_register_t number, int b #if HAVE_DOUBLE_REGS static char * -doudble2str(double d) +double2str(double d) { switch(sizeof(double)) {
new file mode 100644 --- /dev/null +++ b/packages/devs/flash/powerpc/mbx/current/ChangeLog @@ -0,0 +1,34 @@ +2000-10-20 Gary Thomas <gthomas@redhat.com> + + * src/mbx_flash.c: + * src/flash_query.c: + * src/flash_program_buf.c: + * src/flash_erase_block.c: + * src/flash.h: + * cdl/flash_mbx.cdl: New package/file(s). + +//=========================================================================== +//####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/powerpc/mbx/current/cdl/flash_mbx.cdl @@ -0,0 +1,84 @@ +# ==================================================================== +# +# flash_mbx.cdl +# +# FLASH memory - Hardware support on Motorola PowerPC/860 +# +# ==================================================================== +#####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 +# Original data: gthomas +# Contributors: +# Date: 2000-07-26 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_DEVS_FLASH_MBX { + display "Motorola PowerPC/860 FLASH memory support" + + parent CYGPKG_IO_FLASH + active_if CYGPKG_IO_FLASH + requires CYGPKG_HAL_POWERPC_MBX + + implements CYGHWR_IO_FLASH_DEVICE + + include_dir . + include_files ; # none _exported_ whatsoever + description "FLASH memory device support for Motorola PowerPC/860 MBX boards" + compile mbx_flash.c + + make -priority 1 { + flash_query.o: $(REPOSITORY)/$(PACKAGE)/src/flash_query.c + $(CC) -S $(INCLUDE_PATH) $(CFLAGS) -g0 -msoft-float -mcpu=860 -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 + } + + make -priority 1 { + flash_erase_block.o: $(REPOSITORY)/$(PACKAGE)/src/flash_erase_block.c + $(CC) -S $(INCLUDE_PATH) $(CFLAGS) -g0 -msoft-float -mcpu=860 -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 -msoft-float -mcpu=860 -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 + } +} +
new file mode 100644 --- /dev/null +++ b/packages/devs/flash/powerpc/mbx/current/src/flash.h @@ -0,0 +1,63 @@ +//========================================================================== +// +// 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 +// Date: 2000-10-20 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#ifndef _FLASH_HWR_H_ +#define _FLASH_HWR_H_ + +#define FLASH_Read_ID 0x90 +#define FLASH_Reset 0xFF +#define FLASH_Program 0xA0 +#define FLASH_Block_Erase 0x30 + +#define FLASH_Busy 0x40 // "Toggle" bit +#define FLASH_Err 0x20 + +#define FLASH_Setup_Addr1 0x555 +#define FLASH_Setup_Addr2 0x2AA +#define FLASH_Setup_Code1 0xAA +#define FLASH_Setup_Code2 0x55 +#define FLASH_Setup_Erase 0x80 + +#define FLASH_BLOCK_SIZE 0x10000 + +#endif // _FLASH_HWR_H_
new file mode 100644 --- /dev/null +++ b/packages/devs/flash/powerpc/mbx/current/src/flash_erase_block.c @@ -0,0 +1,104 @@ +//========================================================================== +// +// 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 +// 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 char *block) +{ + volatile unsigned char *ROM; + int timeout = 50000; + int cache_on; + int len, block_size; + int erase_state, new_state; + + HAL_DCACHE_IS_ENABLED(cache_on); + if (cache_on) { + HAL_DCACHE_SYNC(); + HAL_DCACHE_DISABLE(); + } + + ROM = (volatile unsigned long *)((unsigned long)block & 0xFF800000); + + // Erase block - six step sequence + ROM[FLASH_Setup_Addr1] = FLASH_Setup_Code1; + ROM[FLASH_Setup_Addr2] = FLASH_Setup_Code2; + ROM[FLASH_Setup_Addr1] = FLASH_Setup_Erase; + ROM[FLASH_Setup_Addr1] = FLASH_Setup_Code1; + ROM[FLASH_Setup_Addr2] = FLASH_Setup_Code2; + *block = FLASH_Block_Erase; + for (timeout = 50; timeout--; timeout > 0) ; + erase_state = *block & FLASH_Busy; + timeout = 5000000; + while (true) { + new_state = *block; + if ((new_state & FLASH_Busy) == erase_state) break; // "toggle" stopped + erase_state = new_state & FLASH_Busy; + if (new_state & FLASH_Err) break; + if (--timeout == 0) break; + } + + // Restore ROM to "normal" mode + ROM[0] = FLASH_Reset; + + len = FLASH_BLOCK_SIZE; + while (len > 0) { + if (*block++ != 0xFF) break; + len -= sizeof(*block); + } + if (len == 0) new_state = 0; + + if (cache_on) { + HAL_DCACHE_ENABLE(); + } + + return new_state; +}
new file mode 100644 --- /dev/null +++ b/packages/devs/flash/powerpc/mbx/current/src/flash_program_buf.c @@ -0,0 +1,103 @@ +//========================================================================== +// +// 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 +// 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 char *addr, unsigned char *data, int len) +{ + volatile unsigned char *ROM; + int timeout = 50000; + int cache_on; + int erase_state, new_state; + + HAL_DCACHE_IS_ENABLED(cache_on); + if (cache_on) { + HAL_DCACHE_SYNC(); + HAL_DCACHE_DISABLE(); + } + + ROM = (volatile unsigned long *)((unsigned long)addr & 0xFF800000); + + while (len > 0) { + // Program data [byte] - 4 step sequence + ROM[FLASH_Setup_Addr1] = FLASH_Setup_Code1; + ROM[FLASH_Setup_Addr2] = FLASH_Setup_Code2; + ROM[FLASH_Setup_Addr1] = FLASH_Program; + *addr = *data; + for (timeout = 50; timeout--; timeout > 0) ; + erase_state = *addr & FLASH_Busy; + while (true) { + new_state = *addr; + if ((new_state & FLASH_Busy) == erase_state) break; // "toggle" stopped + erase_state = new_state & FLASH_Busy; + if (new_state & FLASH_Err) break; + if (--timeout == 0) break; + } + ROM[0] = FLASH_Reset; + if (*addr++ != *data++) { + new_state = 0xFF; + break; + } + len -= sizeof(*data); + } + if (len == 0) new_state = 0; // Success + + // Restore ROM to "normal" mode + bad: + ROM[0] = FLASH_Reset; + + if (cache_on) { + HAL_DCACHE_ENABLE(); + } + return new_state; +}
new file mode 100644 --- /dev/null +++ b/packages/devs/flash/powerpc/mbx/current/src/flash_query.c @@ -0,0 +1,87 @@ +//========================================================================== +// +// 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 +// Date: 2000-10-20 +// Purpose: +// Description: +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include "flash.h" + +#include <pkgconf/hal.h> +#include <cyg/hal/hal_arch.h> +#include <cyg/hal/hal_cache.h> +#include CYGHWR_MEMORY_LAYOUT_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_query(unsigned char *data) +{ + volatile unsigned char *ROM; + int cnt; + int cache_on; + + HAL_DCACHE_IS_ENABLED(cache_on); + if (cache_on) { + HAL_DCACHE_SYNC(); + HAL_DCACHE_DISABLE(); + } + + ROM = (volatile unsigned char *)0xFE000000; + + ROM[FLASH_Setup_Addr1] = FLASH_Setup_Code1; + ROM[FLASH_Setup_Addr2] = FLASH_Setup_Code2; + ROM[FLASH_Setup_Addr1] = FLASH_Read_ID; + + // Manufacturers' code + *data++ = ROM[0x00]; + // Part number + *data++ = ROM[0x01]; + + ROM[0] = FLASH_Reset; + + if (cache_on) { + HAL_DCACHE_ENABLE(); + } + + return 0; +}
new file mode 100644 --- /dev/null +++ b/packages/devs/flash/powerpc/mbx/current/src/mbx_flash.c @@ -0,0 +1,112 @@ +//========================================================================== +// +// mbx_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 +// Date: 2000-10-20 +// 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) +{ + int region_size = 0x10000; + int num_regions = 8; + extern char flash_query, flash_query_end; + typedef int code_fun(unsigned char *); + code_fun *_flash_query; + int code_len, stat; + unsigned char info[4]; + + // 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 + + stat = (*_flash_query)(info); +#if 0 + printf("stat = %x\n", stat); + dump_buf(info, sizeof(info)); +#endif + + // Hard wired for now + flash_info.block_size = region_size; + flash_info.blocks = num_regions; + flash_info.start = (void *)0xFE000000; + flash_info.end = (void *)(0xFE000000+(num_regions*region_size)); + return FLASH_ERR_OK; +} + +// Map a hardware status to a package error +int +flash_hwr_map_error(int err) +{ + if (err & 0x007E007E) { + printf("Err = %x\n", err); + if (err & 0x00100010) { + return FLASH_ERR_PROGRAM; + } else + if (err & 0x00200020) { + 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))); +}
--- a/packages/devs/serial/arm/aeb/current/ChangeLog +++ b/packages/devs/serial/arm/aeb/current/ChangeLog @@ -1,3 +1,7 @@ +2000-10-12 Jesper Skov <jskov@redhat.com> + + * cdl/ser_arm_aeb.cdl: Moved testing parameters here. + 2000-09-06 Gary Thomas <gthomas@redhat.com> * src/aeb_serial.h: Define baud rates for 57600 & 115200.
--- a/packages/devs/serial/arm/aeb/current/cdl/ser_arm_aeb.cdl +++ b/packages/devs/serial/arm/aeb/current/cdl/ser_arm_aeb.cdl @@ -175,6 +175,29 @@ cdl_component CYGPKG_IO_SERIAL_ARM_AEB_S the set of global flags if present." } } + + cdl_component CYGPKG_IO_SERIAL_ARM_AEB_TESTING { + display "Testing parameters" + flavor bool + calculated 1 + active_if CYGPKG_IO_SERIAL_ARM_AEB_SERIAL1 + + implements CYGINT_IO_SERIAL_TEST_SKIP_38400 + implements CYGINT_IO_SERIAL_TEST_SKIP_57600 + implements CYGINT_IO_SERIAL_TEST_SKIP_115200 + implements CYGINT_IO_SERIAL_TEST_SKIP_PARITY_EVEN + + cdl_option CYGPRI_SER_TEST_SER_DEV { + display "Serial device used for testing" + flavor data + default_value { CYGDAT_IO_SERIAL_ARM_AEB_SERIAL1_NAME } + } + + define_proc { + puts $::cdl_header "#define CYGPRI_SER_TEST_CRASH_ID \"armaeb\"" + puts $::cdl_header "#define CYGPRI_SER_TEST_TTY_DEV \"/dev/tty1\"" + } + } } # EOF ser_arm_aeb.cdl
--- a/packages/devs/serial/arm/cma230/current/ChangeLog +++ b/packages/devs/serial/arm/cma230/current/ChangeLog @@ -1,3 +1,9 @@ +2000-10-12 Jesper Skov <jskov@redhat.com> + + * src/cma230_serial.c: Fix typo. + + * cdl/ser_arm_cma230.cdl: Testing parameters moved here. + 2000-08-01 Jonathan Larmour <jlarmour@redhat.co.uk> * src/cma230_serial.c (cma230_serial_set_config): Now use keys to make
--- a/packages/devs/serial/arm/cma230/current/cdl/ser_arm_cma230.cdl +++ b/packages/devs/serial/arm/cma230/current/cdl/ser_arm_cma230.cdl @@ -175,6 +175,26 @@ cdl_component CYGPKG_IO_SERIAL_ARM_CMA23 the set of global flags if present." } } + + cdl_component CYGPKG_IO_SERIAL_ARM_CMA230_TESTING { + display "Testing parameters" + flavor bool + calculated 1 + active_if CYGPKG_IO_SERIAL_ARM_CMA230_SERIAL_A + + implements CYGINT_IO_SERIAL_TEST_SKIP_115200 + + cdl_option CYGPRI_SER_TEST_SER_DEV { + display "Serial device used for testing" + flavor data + default_value { CYGDAT_IO_SERIAL_ARM_CMA230_SERIAL_A_NAME } + } + + define_proc { + puts $::cdl_header "#define CYGPRI_SER_TEST_CRASH_ID \"armcma\"" + puts $::cdl_header "#define CYGPRI_SER_TEST_TTY_DEV \"/dev/tty1\"" + } + } } # EOF ser_arm_cma230.cdl
--- a/packages/devs/serial/arm/cma230/current/src/cma230_serial.c +++ b/packages/devs/serial/arm/cma230/current/src/cma230_serial.c @@ -69,7 +69,7 @@ static Cyg_ErrNo cma230_serial_lookup(st const char *name); static unsigned char cma230_serial_getc(serial_channel *chan); static Cyg_ErrNo cma230_serial_set_config(serial_channel *chan, cyg_uint32 key, - const void *xbuf; cyg_uint32 *len); + const void *xbuf, cyg_uint32 *len); static void cma230_serial_start_xmit(serial_channel *chan); static void cma230_serial_stop_xmit(serial_channel *chan);
--- a/packages/devs/serial/arm/ebsa285/current/ChangeLog +++ b/packages/devs/serial/arm/ebsa285/current/ChangeLog @@ -1,7 +1,11 @@ +2000-10-12 Jesper Skov <jskov@redhat.com> + + * cdl/ser_arm_ebsa285.cdl: Testing parameters moved here. + 2000-08-01 Jonathan Larmour <jlarmour@redhat.co.uk> - * src/ebsa285_serial.c (ebsa285_serial_set_config): Now use keys to make - more flexible. + * src/ebsa285_serial.c (ebsa285_serial_set_config): Now use keys + to make more flexible. 2000-06-22 Hugo Tyson <hmt@cygnus.co.uk>
--- a/packages/devs/serial/arm/ebsa285/current/cdl/ser_arm_ebsa285.cdl +++ b/packages/devs/serial/arm/ebsa285/current/cdl/ser_arm_ebsa285.cdl @@ -133,6 +133,24 @@ cdl_package CYGPKG_IO_SERIAL_ARM_EBSA285 the set of global flags if present." } } + + cdl_component CYGPKG_IO_SERIAL_ARM_EBSA285_TESTING { + display "Testing parameters" + flavor bool + calculated 1 + active_if CYGPKG_IO_SERIAL_ARM_EBSA285_SERIAL + + cdl_option CYGPRI_SER_TEST_SER_DEV { + display "Serial device used for testing" + flavor data + default_value { CYGDAT_IO_SERIAL_ARM_EBSA285_SERIAL_NAME } + } + + define_proc { + puts $::cdl_header "#define CYGPRI_SER_TEST_CRASH_ID \"arm285\"" + puts $::cdl_header "#define CYGPRI_SER_TEST_TTY_DEV \"/dev/tty1\"" + } + } } # EOF ser_arm_ebsa285.cdl
--- a/packages/devs/serial/arm/edb7xxx/current/ChangeLog +++ b/packages/devs/serial/arm/edb7xxx/current/ChangeLog @@ -1,3 +1,7 @@ +2000-10-12 Jesper Skov <jskov@redhat.com> + + * cdl/ser_arm_edb7xxx.cdl: Moved testing parameters here. + 2000-08-01 Jonathan Larmour <jlarmour@redhat.co.uk> * src/edb7xxx_serial.c (edb7xxx_serial_set_config): Now use keys to make
--- a/packages/devs/serial/arm/edb7xxx/current/cdl/ser_arm_edb7xxx.cdl +++ b/packages/devs/serial/arm/edb7xxx/current/cdl/ser_arm_edb7xxx.cdl @@ -176,6 +176,26 @@ cdl_component CYGPKG_IO_SERIAL_ARM_EDB7X the set of global flags if present." } } + + cdl_component CYGPKG_IO_SERIAL_ARM_EDB7XXX_TESTING { + display "Testing parameters" + flavor bool + calculated 1 + active_if CYGPKG_IO_SERIAL_ARM_EDB7XXX_SERIAL1 + + implements CYGINT_IO_SERIAL_TEST_SKIP_115200 + + cdl_option CYGPRI_SER_TEST_SER_DEV { + display "Serial device used for testing" + flavor data + default_value { CYGDAT_IO_SERIAL_ARM_EDB7XXX_SERIAL1_NAME } + } + + define_proc { + puts $::cdl_header "#define CYGPRI_SER_TEST_CRASH_ID \"armedb7xxx\"" + puts $::cdl_header "#define CYGPRI_SER_TEST_TTY_DEV \"/dev/tty1\"" + } + } } # EOF ser_arm_edb7xxx.cdl
--- a/packages/devs/serial/arm/sa11x0/current/ChangeLog +++ b/packages/devs/serial/arm/sa11x0/current/ChangeLog @@ -1,3 +1,7 @@ +2000-10-12 Jesper Skov <jskov@redhat.com> + + * cdl/ser_arm_sa11x0.cdl: Testing parameters moved here. + 2000-08-01 Jonathan Larmour <jlarmour@redhat.co.uk> * src/sa11x0_serial.c (sa11x0_serial_set_config): Now use keys to make
--- a/packages/devs/serial/arm/sa11x0/current/cdl/ser_arm_sa11x0.cdl +++ b/packages/devs/serial/arm/sa11x0/current/cdl/ser_arm_sa11x0.cdl @@ -174,6 +174,24 @@ cdl_component CYGPKG_IO_SERIAL_ARM_SA11X the set of global flags if present." } } + + cdl_component CYGPKG_IO_SERIAL_ARM_SA11X0_TESTING { + display "Testing parameters" + flavor bool + calculated 1 + active_if CYGPKG_IO_SERIAL_ARM_SA11X0_SERIAL1 + + cdl_option CYGPRI_SER_TEST_SER_DEV { + display "Serial device used for testing" + flavor data + default_value { CYGDAT_IO_SERIAL_ARM_SA11X0_SERIAL1_NAME } + } + + define_proc { + puts $::cdl_header "#define CYGPRI_SER_TEST_CRASH_ID \"assabet\"" + puts $::cdl_header "#define CYGPRI_SER_TEST_TTY_DEV \"/dev/tty1\"" + } + } } # EOF ser_arm_sa11x0.cdl
--- a/packages/devs/serial/i386/pc/current/ChangeLog +++ b/packages/devs/serial/i386/pc/current/ChangeLog @@ -1,3 +1,7 @@ +2000-10-12 Jesper Skov <jskov@redhat.com> + + * cdl/ser_i386_pc.cdl: Moved testing parameters here. + 2000-08-01 Jonathan Larmour <jlarmour@redhat.co.uk> * src/pc_serial.c (pc_serial_set_config): Now use keys to make
--- a/packages/devs/serial/i386/pc/current/cdl/ser_i386_pc.cdl +++ b/packages/devs/serial/i386/pc/current/cdl/ser_i386_pc.cdl @@ -227,6 +227,24 @@ cdl_component CYGPKG_IO_SERIAL_I386_PC_S the set of global flags if present." } } + + cdl_component CYGPKG_IO_SERIAL_I386_PC_TESTING { + display "Testing parameters" + flavor bool + calculated 1 + active_if CYGPKG_IO_SERIAL_I386_PC_SERIAL0 + + cdl_option CYGPRI_SER_TEST_SER_DEV { + display "Serial device used for testing" + flavor data + default_value { CYGDAT_IO_SERIAL_I386_PC_SERIAL0_NAME } + } + + define_proc { + puts $::cdl_header "#define CYGPRI_SER_TEST_CRASH_ID \"i386pc\"" + puts $::cdl_header "#define CYGPRI_SER_TEST_TTY_DEV \"/dev/tty0\"" + } + } } # EOF ser_i386_pc.cdl
--- a/packages/devs/serial/loop/current/ChangeLog +++ b/packages/devs/serial/loop/current/ChangeLog @@ -1,3 +1,7 @@ +2000-10-12 Jesper Skov <jskov@redhat.com> + + * cdl/ser_loop.cdl: Moved testing parameters here. + 2000-08-01 Jonathan Larmour <jlarmour@redhat.co.uk> * src/loop_serial.c (loop_serial_set_config): Now use keys to make
--- a/packages/devs/serial/loop/current/cdl/ser_loop.cdl +++ b/packages/devs/serial/loop/current/cdl/ser_loop.cdl @@ -176,6 +176,24 @@ cdl_package CYGPKG_IO_SERIAL_LOOP { removed from the set of global flags if present." } } + + cdl_component CYGPKG_IO_SERIAL_LOOP_TESTING { + display "Testing parameters" + flavor bool + calculated 1 + active_if CYGPKG_IO_SERIAL_LOOP_SERIAL0 + + cdl_option CYGPRI_SER_TEST_SER_DEV { + display "Serial device used for testing" + flavor data + default_value { CYGDAT_IO_SERIAL_LOOP_SERIAL1_NAME } + } + + define_proc { + puts $::cdl_header "#define CYGPRI_SER_TEST_CRASH_ID \"loop\"" + puts $::cdl_header "#define CYGPRI_SER_TEST_TTY_DEV \"/dev/tty0\"" + } + } } # EOF ser_loop.cdl
--- a/packages/devs/serial/mips/jmr3904/current/ChangeLog +++ b/packages/devs/serial/mips/jmr3904/current/ChangeLog @@ -1,3 +1,7 @@ +2000-10-12 Jesper Skov <jskov@redhat.com> + + * cdl/ser_mips_jmr3904.cdl: Moved testing parameters here. + 2000-08-01 Jonathan Larmour <jlarmour@redhat.co.uk> * src/tx3904_serial.c (tx3904_serial_set_config): Now use keys to make
--- a/packages/devs/serial/mips/jmr3904/current/cdl/ser_mips_jmr3904.cdl +++ b/packages/devs/serial/mips/jmr3904/current/cdl/ser_mips_jmr3904.cdl @@ -152,7 +152,7 @@ cdl_component CYGPKG_IO_SERIAL_TX39_JMR3 } } - cdl_component CYGPKG_IO_SERIAL_MIPS_JMR3904_OPTIONS { + cdl_component CYGPKG_IO_SERIAL_TX39_JMR3904_OPTIONS { display "Serial device driver build options" flavor none description " @@ -161,7 +161,7 @@ cdl_component CYGPKG_IO_SERIAL_TX39_JMR3 and details of which tests are built." - cdl_option CYGPKG_IO_SERIAL_MIPS_JMR3904_CFLAGS_ADD { + cdl_option CYGPKG_IO_SERIAL_TX39_JMR3904_CFLAGS_ADD { display "Additional compiler flags" flavor data no_define @@ -172,7 +172,7 @@ cdl_component CYGPKG_IO_SERIAL_TX39_JMR3 to the set of global flags." } - cdl_option CYGPKG_IO_SERIAL_MIPS_JMR3904_CFLAGS_REMOVE { + cdl_option CYGPKG_IO_SERIAL_TX39_JMR3904_CFLAGS_REMOVE { display "Suppressed compiler flags" flavor data no_define @@ -183,6 +183,30 @@ cdl_component CYGPKG_IO_SERIAL_TX39_JMR3 the set of global flags if present." } } + + cdl_component CYGPKG_IO_SERIAL_TX39_JMR3904_TESTING { + display "Testing parameters" + flavor bool + calculated 1 + active_if CYGPKG_IO_SERIAL_TX39_JMR3904_SERIAL0 + + implements CYGINT_IO_SERIAL_TEST_SKIP_9600 + implements CYGINT_IO_SERIAL_TEST_SKIP_57600 + implements CYGINT_IO_SERIAL_TEST_SKIP_115200 + implements CYGINT_IO_SERIAL_TEST_SKIP_PARITY_EVEN + implements CYGINT_IO_SERIAL_TEST_SKIP_STOP_2 + + cdl_option CYGPRI_SER_TEST_SER_DEV { + display "Serial device used for testing" + flavor data + default_value { CYGDAT_IO_SERIAL_TX39_JMR3904_SERIAL0_NAME } + } + + define_proc { + puts $::cdl_header "#define CYGPRI_SER_TEST_CRASH_ID \"tx39jmr\"" + puts $::cdl_header "#define CYGPRI_SER_TEST_TTY_DEV \"/dev/tty0\"" + } + } } # EOF ser_mips_jmr3904.cdl
--- a/packages/devs/serial/mips/vrc4373/current/ChangeLog +++ b/packages/devs/serial/mips/vrc4373/current/ChangeLog @@ -1,7 +1,11 @@ +2000-10-12 Jesper Skov <jskov@redhat.com> + + * cdl/ser_mips_vrc4373.cdl: Moved testing parameters here. + 2000-08-01 Jonathan Larmour <jlarmour@redhat.co.uk> - * src/vrc4373_serial.c (vrc4373_serial_set_config): Now use keys to make - more flexible. + * src/vrc4373_serial.c (vrc4373_serial_set_config): Now use keys + to make more flexible. 2000-07-22 Jonathan Larmour <jlarmour@redhat.co.uk>
--- a/packages/devs/serial/mips/vrc4373/current/cdl/ser_mips_vrc4373.cdl +++ b/packages/devs/serial/mips/vrc4373/current/cdl/ser_mips_vrc4373.cdl @@ -172,6 +172,24 @@ cdl_component CYGPKG_IO_SERIAL_MIPS_VRC4 the set of global flags if present." } } + + cdl_component CYGPKG_IO_SERIAL_MIPS_VRC4373_TESTING { + display "Testing parameters" + flavor bool + calculated 1 + active_if CYGPKG_IO_SERIAL_MIPS_VRC4373_SERIAL0 + + cdl_option CYGPRI_SER_TEST_SER_DEV { + display "Serial device used for testing" + flavor data + default_value { CYGDAT_IO_SERIAL_MIPS_VRC4373_SERIAL0_NAME } + } + + define_proc { + puts $::cdl_header "#define CYGPRI_SER_TEST_CRASH_ID \"vrc4373\"" + puts $::cdl_header "#define CYGPRI_SER_TEST_TTY_DEV \"/dev/tty0\"" + } + } } # EOF ser_mips_vrc4373.cdl
--- a/packages/devs/serial/powerpc/cogent/current/ChangeLog +++ b/packages/devs/serial/powerpc/cogent/current/ChangeLog @@ -1,3 +1,7 @@ +2000-10-12 Jesper Skov <jskov@redhat.com> + + * cdl/ser_powerpc_cogent.cdl: Moved testing parameters here. + 2000-08-01 Jonathan Larmour <jlarmour@redhat.co.uk> * src/cogent_serial_with_ints.c (cogent_serial_set_config): Now use
--- a/packages/devs/serial/powerpc/cogent/current/cdl/ser_powerpc_cogent.cdl +++ b/packages/devs/serial/powerpc/cogent/current/cdl/ser_powerpc_cogent.cdl @@ -176,6 +176,24 @@ cdl_component CYGPKG_IO_SERIAL_POWERPC_C the set of global flags if present." } } + + cdl_component CYGPKG_IO_SERIAL_POWERPC_COGENT_TESTING { + display "Testing parameters" + flavor bool + calculated 1 + active_if CYGPKG_IO_SERIAL_POWERPC_COGENT_SERIAL_B + + cdl_option CYGPRI_SER_TEST_SER_DEV { + display "Serial device used for testing" + flavor data + default_value { CYGDAT_IO_SERIAL_POWERPC_COGENT_SERIAL_B_NAME } + } + + define_proc { + puts $::cdl_header "#define CYGPRI_SER_TEST_CRASH_ID \"ppccog\"" + puts $::cdl_header "#define CYGPRI_SER_TEST_TTY_DEV \"/dev/tty2\"" + } + } } # EOF ser_powerpc_cogent.cdl
--- a/packages/devs/serial/sh/scif/current/ChangeLog +++ b/packages/devs/serial/sh/scif/current/ChangeLog @@ -1,3 +1,12 @@ +2000-10-23 Jesper Skov <jskov@redhat.com> + + * src/sh_scif_serial.c: Include cyg_ass.h + +2000-10-12 Jesper Skov <jskov@redhat.com> + + * src/sh_scif_serial.c (sh3_scif_set_config): Changes to the flow + control handling. Renamed DMA variables. + 2000-10-12 Jonathan Larmour <jlarmour@redhat.com> * src/sh_scif_serial.c: return -EINVAL when unsupported flow control @@ -12,6 +21,8 @@ 2000-10-03 Jesper Skov <jskov@redhat.c * src/sh_scif_serial.c: Fixed receive FIFO problem. Added Line Status handling. Don't enable TX interrupts in initialization. + * src/sh_scif_serial.c: Added DMA support. Added RTS/CTS control. + * cdl/ser_sh_scif.cdl: Added DMA interface. 2000-09-26 Jesper Skov <jskov@redhat.com>
--- a/packages/devs/serial/sh/scif/current/cdl/ser_sh_scif.cdl +++ b/packages/devs/serial/sh/scif/current/cdl/ser_sh_scif.cdl @@ -70,6 +70,15 @@ cdl_package CYGPKG_IO_SERIAL_SH_SCIF { puts $::cdl_header "#include CYGDAT_IO_SERIAL_SH_SCIF_CFG"; } + cdl_interface CYGINT_IO_SERIAL_SH_SCIF_DMA { + display "Enable SCIF serial driver DMA support" + implements CYGINT_IO_SERIAL_BLOCK_TRANSFER + description " + The serial driver can use DMA to move data from the + transmit buffer to the serial controller if the CPU + supports it." + } + cdl_component CYGPKG_IO_SERIAL_SH_SCIF_OPTIONS { display "SCIF serial device driver build options" flavor none
--- a/packages/devs/serial/sh/scif/current/src/sh_scif_serial.c +++ b/packages/devs/serial/sh/scif/current/src/sh_scif_serial.c @@ -52,6 +52,7 @@ #include <cyg/hal/hal_intr.h> #include <cyg/io/devtab.h> #include <cyg/infra/diag.h> +#include <cyg/infra/cyg_ass.h> #include <cyg/io/serial.h> #include <cyg/hal/sh_regs.h> @@ -134,6 +135,16 @@ typedef struct sh3_scif_info { volatile bool tx_enabled; // expect tx _serial_ interrupts +#if (CYGINT_IO_SERIAL_SH_SCIF_DMA > 0) + cyg_bool dma_enable; // Set if DMA mode + cyg_uint32 dma_xmt_cr_flags; // CR flags for DMA mode + CYG_WORD dma_xmt_int_num; // DMA xmt completion interrupt + CYG_ADDRWORD dma_xmt_base; // Base address of DMA channel + int dma_xmt_len; // length transferred by DMA + cyg_interrupt dma_xmt_interrupt; + cyg_handle_t dma_xmt_interrupt_handle; + volatile cyg_bool dma_xmt_running; // expect tx _dma_ interrupts +#endif } sh3_scif_info; static bool sh3_scif_init(struct cyg_devtab_entry *tab); @@ -157,6 +168,12 @@ static cyg_uint32 sh3_scif_er_ISR(cyg_ve static void sh3_scif_er_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data); +#if (CYGINT_IO_SERIAL_SH_SCIF_DMA > 0) +static cyg_uint32 sh3_dma_xmt_ISR(cyg_vector_t vector, cyg_addrword_t data); +static void sh3_dma_xmt_DSR(cyg_vector_t vector, cyg_ucount32 count, + cyg_addrword_t data); +#endif + static SERIAL_FUNS(sh3_scif_funs, sh3_scif_putc, sh3_scif_getc, @@ -282,6 +299,32 @@ sh3_scif_init(struct cyg_devtab_entry *t // This unmasks both interrupt sources. cyg_drv_interrupt_unmask(sh_chan->rx_int_num); } + +#if (CYGINT_IO_SERIAL_SH_SCIF_DMA > 0) + // Assign DMA channel and interrupt if requested + if (sh_chan->dma_enable) { + // FIXME: Need a cleaner way to assign DMA channels + static int dma_channel = 0; + sh_chan->dma_xmt_int_num = dma_channel+CYGNUM_HAL_INTERRUPT_DMAC_DEI0; + sh_chan->dma_xmt_base = (dma_channel*0x10)+CYGARC_REG_SAR0; + dma_channel++; + + // Enable the DMA engines. + HAL_WRITE_UINT16(CYGARC_REG_DMAOR, CYGARC_REG_DMAOR_DME); + + cyg_drv_interrupt_create(sh_chan->dma_xmt_int_num, + 3, + (cyg_addrword_t)chan, // Data item passed to interrupt handler + sh3_dma_xmt_ISR, + sh3_dma_xmt_DSR, + &sh_chan->dma_xmt_interrupt_handle, + &sh_chan->dma_xmt_interrupt); + cyg_drv_interrupt_attach(sh_chan->dma_xmt_interrupt_handle); + cyg_drv_interrupt_unmask(sh_chan->dma_xmt_int_num); + } + sh_chan->dma_xmt_running = false; +#endif // CYGINT_IO_SERIAL_SH_SCIF_DMA + sh3_scif_config_port(chan, &chan->config, true); return true; } @@ -365,33 +408,49 @@ sh3_scif_set_config(serial_channel *chan #ifdef CYGOPT_IO_SERIAL_FLOW_CONTROL_HW case CYG_IO_SET_CONFIG_SERIAL_HW_RX_FLOW_THROTTLE: { - cyg_uint8 _scfcr; + // Control RX flow control by disabling/enabling RX interrupt. + // When disabled, FIFO will fill up and clear RTS. + cyg_uint8 _scscr, mask = 0; sh3_scif_info *ser_chan = (sh3_scif_info *)chan->dev_priv; cyg_addrword_t base = ser_chan->ctrl_base; cyg_uint8 *f = (cyg_uint8 *)xbuf; - unsigned char mask=0; if ( *len < *f ) return -EINVAL; if ( chan->config.flags & CYGNUM_SERIAL_FLOW_RTSCTS_RX ) - mask |= CYGARC_REG_SCFCR1_MCE; - HAL_READ_UINT8(base+SCIF_SCFCR, _scfcr); + mask |= CYGARC_REG_SCSCR2_RIE; + HAL_READ_UINT8(base+SCIF_SCSCR, _scscr); if (*f) // we should throttle - _scfcr &= ~mask; + _scscr &= ~mask; else // we should no longer throttle - _scfcr |= mask; - HAL_WRITE_UINT8(base+SCIF_SCFCR, _scfcr); + _scscr |= mask; + HAL_WRITE_UINT8(base+SCIF_SCSCR, _scscr); } break; case CYG_IO_SET_CONFIG_SERIAL_HW_FLOW_CONFIG: { - // Clear DSR/DTR flag as it's not supported. - if (chan->config.flags & - (CYGNUM_SERIAL_FLOW_DSRDTR_RX|CYGNUM_SERIAL_FLOW_DSRDTR_TX)) { - chan->config.flags &= ~(CYGNUM_SERIAL_FLOW_DSRDTR_RX| - CYGNUM_SERIAL_FLOW_DSRDTR_TX); - return -EINVAL; - } + // Handle CTS/RTS flag + if ( chan->config.flags & + (CYGNUM_SERIAL_FLOW_RTSCTS_RX | CYGNUM_SERIAL_FLOW_RTSCTS_TX )){ + cyg_uint8 _scfcr; + sh3_scif_info *ser_chan = (sh3_scif_info *)chan->dev_priv; + cyg_addrword_t base = ser_chan->ctrl_base; + cyg_uint8 *f = (cyg_uint8 *)xbuf; + + HAL_READ_UINT8(base+SCIF_SCFCR, _scfcr); + if (*f) // enable RTS/CTS flow control + _scfcr |= CYGARC_REG_SCFCR1_MCE; + else // disable RTS/CTS flow control + _scfcr &= ~CYGARC_REG_SCFCR1_MCE; + HAL_WRITE_UINT8(base+SCIF_SCFCR, _scfcr); + } + // Clear DSR/DTR flag as it's not supported. + if (chan->config.flags & + (CYGNUM_SERIAL_FLOW_DSRDTR_RX|CYGNUM_SERIAL_FLOW_DSRDTR_TX)) { + chan->config.flags &= ~(CYGNUM_SERIAL_FLOW_DSRDTR_RX| + CYGNUM_SERIAL_FLOW_DSRDTR_TX); + return -EINVAL; + } } break; #endif @@ -402,6 +461,130 @@ sh3_scif_set_config(serial_channel *chan } +#if (CYGINT_IO_SERIAL_SH_SCIF_DMA > 0) + +// Must be called with serial interrupts disabled +static xmt_req_reply_t +sh3_scif_start_dma_xmt(serial_channel *chan) +{ + int chars_avail; + unsigned char* chars; + xmt_req_reply_t res; + + // We can transfer the full buffer - ask how much to transfer + res = (chan->callbacks->data_xmt_req)(chan, chan->out_cbuf.len, + &chars_avail, &chars); + if (CYG_XMT_OK == res) { + sh3_scif_info *sh_chan = (sh3_scif_info *)chan->dev_priv; + cyg_uint32 dma_base = sh_chan->dma_xmt_base; + cyg_uint32 scr; + + // Save the length so it can be used in the DMA DSR + sh_chan->dma_xmt_len = chars_avail; + + // Flush cache for the area + HAL_DCACHE_FLUSH((cyg_haladdress)chars, chars_avail); + + // Program DMA + HAL_WRITE_UINT32(dma_base+CYGARC_REG_CHCR, 0); // disable and clear + HAL_WRITE_UINT32(dma_base+CYGARC_REG_SAR, (cyg_uint32)chars); + HAL_WRITE_UINT32(dma_base+CYGARC_REG_DAR, + (sh_chan->ctrl_base+SCIF_SCFTDR) & 0x0fffffff); + HAL_WRITE_UINT32(dma_base+CYGARC_REG_DMATCR, chars_avail); + // Source increments, dest static, byte transfer, enable + // interrupt on completion. + HAL_WRITE_UINT32(dma_base+CYGARC_REG_CHCR, + sh_chan->dma_xmt_cr_flags | CYGARC_REG_CHCR_SM0 \ + | CYGARC_REG_CHCR_IE | CYGARC_REG_CHCR_DE); + + // Enable serial interrupts + HAL_READ_UINT8(sh_chan->ctrl_base+SCIF_SCSCR, scr); + scr |= CYGARC_REG_SCSCR2_TIE; + HAL_WRITE_UINT8(sh_chan->ctrl_base+SCIF_SCSCR, scr); + } + + return res; +} + +// must be called with serial interrupts masked +static void +sh3_scif_stop_dma_xmt(serial_channel *chan) +{ + sh3_scif_info *sh_chan = (sh3_scif_info *)chan->dev_priv; + cyg_uint32 dma_base = sh_chan->dma_xmt_base; + cyg_uint32 cr; + + // Disable DMA engine and interrupt enable flag. Should be safe + // to do since it's triggered by the serial interrupt which has + // already been disabled. + HAL_READ_UINT32(dma_base+CYGARC_REG_CHCR, cr); + cr &= ~(CYGARC_REG_CHCR_IE | CYGARC_REG_CHCR_DE); + HAL_WRITE_UINT32(dma_base+CYGARC_REG_CHCR, cr); + + // Did transfer complete? + HAL_READ_UINT32(dma_base+CYGARC_REG_CHCR, cr); + if (0 == (cr & CYGARC_REG_CHCR_TE)) { + // Transfer incomplete. Report actually transferred amount of data + // back to the serial driver. + int chars_left; + HAL_READ_UINT32(dma_base+CYGARC_REG_DMATCR, chars_left); + CYG_ASSERT(chars_left > 0, "DMA incomplete, but no data left"); + CYG_ASSERT(chars_left <= sh_chan->dma_xmt_len, + "More data remaining than was attempted transferred"); + + (chan->callbacks->data_xmt_done)(chan, + sh_chan->dma_xmt_len - chars_left); + } + +#ifdef CYGDBG_USE_ASSERTS + { + cyg_uint32 dmaor; + HAL_READ_UINT32(CYGARC_REG_DMAOR, dmaor); + CYG_ASSERT(0== (dmaor & (CYGARC_REG_DMAOR_AE | CYGARC_REG_DMAOR_NMIF)), + "DMA error"); + } +#endif + + // The DMA engine is free again. + sh_chan->dma_xmt_running = false; +} + +// Serial xmt DMA completion interrupt handler (ISR) +static cyg_uint32 +sh3_dma_xmt_ISR(cyg_vector_t vector, cyg_addrword_t data) +{ + serial_channel *chan = (serial_channel *)data; + sh3_scif_info *sh_chan = (sh3_scif_info *)chan->dev_priv; + cyg_uint32 _cr; + + // mask serial interrupt + HAL_READ_UINT8(sh_chan->ctrl_base+SCIF_SCSCR, _cr); + _cr &= ~CYGARC_REG_SCSCR2_TIE; // Disable xmit interrupt + HAL_WRITE_UINT8(sh_chan->ctrl_base+SCIF_SCSCR, _cr); + + // mask DMA interrupt and disable engine + HAL_READ_UINT32(sh_chan->dma_xmt_base+CYGARC_REG_CHCR, _cr); + _cr &= ~(CYGARC_REG_CHCR_IE | CYGARC_REG_CHCR_DE); + HAL_WRITE_UINT32(sh_chan->dma_xmt_base+CYGARC_REG_CHCR, _cr); + + return CYG_ISR_CALL_DSR; // Cause DSR to be run +} + +// Serial xmt DMA completion interrupt handler (DSR) +static void +sh3_dma_xmt_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data) +{ + serial_channel *chan = (serial_channel *)data; + sh3_scif_info *sh_chan = (sh3_scif_info *)chan->dev_priv; + + (chan->callbacks->data_xmt_done)(chan, sh_chan->dma_xmt_len); + + // Try to load the engine again. + sh_chan->dma_xmt_running = + (CYG_XMT_OK == sh3_scif_start_dma_xmt(chan)) ? true : false; +} +#endif // CYGINT_IO_SERIAL_SH_SCIF_DMA + // Enable the transmitter on the device static void @@ -414,6 +597,24 @@ sh3_scif_start_xmit(serial_channel *chan if (sh_chan->tx_enabled) return; +#if (CYGINT_IO_SERIAL_SH_SCIF_DMA > 0) + // Check if the engine is already running. If so, return. Note + // that there will never be a race on this flag - the caller of + // this function is respecting a per-channel lock. + if (sh_chan->dma_xmt_running) + return; + // If the channel uses DMA, try to start a DMA job for this - + // but handle the case where the job doesn't start by falling + // back to the FIFO/interrupt based code. + if (sh_chan->dma_enable) { + _block_status = sh3_scif_start_dma_xmt(chan); + CYG_ASSERT(_block_status != CYG_XMT_EMPTY, + "start_xmit called with empty buffers!"); + sh_chan->dma_xmt_running = + (CYG_XMT_OK == _block_status) ? true : false; + } +#endif // CYGINT_IO_SERIAL_SH_SCIF_DMA + if (CYG_XMT_DISABLED == _block_status) { // Mask interrupts while changing the CR since a rx // interrupt or another thread doing the same in the @@ -447,6 +648,12 @@ sh3_scif_stop_xmit(serial_channel *chan) } cyg_drv_isr_unlock(); +#if (CYGINT_IO_SERIAL_SH_SCIF_DMA > 0) + // If the channel uses DMA, stop the DMA engine. + if (sh_chan->dma_xmt_running) + sh3_scif_stop_dma_xmt(chan); + else // dangling else! +#endif // CYGINT_IO_SERIAL_SH_SCIF_DMA sh_chan->tx_enabled = false; }
--- a/packages/devs/serial/sparclite/sleb/current/ChangeLog +++ b/packages/devs/serial/sparclite/sleb/current/ChangeLog @@ -1,3 +1,9 @@ +2000-10-12 Jesper Skov <jskov@redhat.com> + + * cdl/ser_sparclite_sleb.cdl: Moved testing parameters here. + + * src/sleb_sdtr.c: Removed obsolete sleb_sdtr_set_config function. + 2000-08-01 Jonathan Larmour <jlarmour@redhat.co.uk> * src/sleb_sdtr.c (sleb_sdtr_set_config): Now use keys to make
--- a/packages/devs/serial/sparclite/sleb/current/cdl/ser_sparclite_sleb.cdl +++ b/packages/devs/serial/sparclite/sleb/current/cdl/ser_sparclite_sleb.cdl @@ -173,6 +173,30 @@ cdl_component CYGPKG_IO_SERIAL_SPARCLITE the set of global flags if present." } } + + cdl_component CYGPKG_IO_SERIAL_SPARCLITE_SLEB_TESTING { + display "Testing parameters" + flavor bool + calculated 1 + active_if CYGPKG_IO_SERIAL_SPARCLITE_SLEB_CON1 + + implements CYGINT_IO_SERIAL_TEST_SKIP_38400 + implements CYGINT_IO_SERIAL_TEST_SKIP_57600 + implements CYGINT_IO_SERIAL_TEST_SKIP_115200 + + cdl_option CYGPRI_SER_TEST_SER_DEV { + display "Serial device used for testing" + flavor data + default_value { CYGDAT_IO_SERIAL_SPARCLITE_SLEB_CON1_NAME } + } + + define_proc { + puts $::cdl_header "#define CYGPRI_SER_TEST_CRASH_ID \"sparcl\"" + puts $::cdl_header "#define CYGPRI_SER_TEST_TTY_DEV \"/dev/tty0\"" + puts $::cdl_header "#define CYGPRI_SER_TEST_OVERRIDE_INT_1 CYGNUM_HAL_INTERRUPT_9" + puts $::cdl_header "#define CYGPRI_SER_TEST_OVERRIDE_INT_2 CYGNUM_HAL_INTERRUPT_10" + } + } } # EOF ser_sparclite_sleb.cdl
--- a/packages/devs/serial/sparclite/sleb/current/src/sleb_sdtr.c +++ b/packages/devs/serial/sparclite/sleb/current/src/sleb_sdtr.c @@ -321,11 +321,6 @@ sleb_sdtr_set_config(serial_channel *cha } return ENOERR; } -static bool -sleb_sdtr_set_config(serial_channel *chan, cyg_serial_info_t *config) -{ - return sleb_sdtr_config_port(chan, config, false); -} // Enable the transmitter on the device static void
--- a/packages/devs/serial/v85x/v850/current/ChangeLog +++ b/packages/devs/serial/v85x/v850/current/ChangeLog @@ -1,6 +1,11 @@ +2000-10-12 Jesper Skov <jskov@redhat.com> + + * cdl/ser_v85x_v850.cdl: Moved testing parameters here. + 2000-10-09 Gary Thomas <gthomas@redhat.com> - * src/v85x_v850_serial.c (v850_serial_config_port): Fix baud clock setup. + * src/v85x_v850_serial.c (v850_serial_config_port): Fix baud clock + setup. 2000-10-04 Gary Thomas <gthomas@redhat.com>
--- a/packages/devs/serial/v85x/v850/current/cdl/ser_v85x_v850.cdl +++ b/packages/devs/serial/v85x/v850/current/cdl/ser_v85x_v850.cdl @@ -103,4 +103,22 @@ cdl_package CYGPKG_IO_SERIAL_V85X_V850 { } } + cdl_component CYGPKG_IO_SERIAL_V85X_V850_TESTING { + display "Testing parameters" + flavor bool + calculated 1 + active_if CYGPKG_IO_SERIAL_V85X_V850_SERIAL0 + + cdl_option CYGPRI_SER_TEST_SER_DEV { + display "Serial device used for testing" + flavor data + default_value { CYGDAT_IO_SERIAL_V85X_V850_SERIAL0_NAME } + } + + define_proc { + puts $::cdl_header "#define CYGPRI_SER_TEST_CRASH_ID \"v85x/v850\"" + puts $::cdl_header "#define CYGPRI_SER_TEST_TTY_DEV \"/dev/tty0\"" + } + } + }
--- a/packages/ecos.db +++ b/packages/ecos.db @@ -144,6 +144,16 @@ package CYGPKG_DEVS_FLASH_ASSABET { on the Intel StrongARM SA-1110 Assabet platform." } +package CYGPKG_DEVS_FLASH_MBX { + alias { "FLASH memory support for Motorola PowerPC/860 MBX" flash_mbx } + directory devs/flash/powerpc/mbx + script flash_mbx.cdl + hardware + description " + This package contains hardware support for FLASH memory + on the Motorola PowerPC/860 MBX platform." +} + package CYGPKG_IO_SERIAL_ARM_EBSA285 { alias { "Intel EBSA285 serial driver" devs_serial_arm_ebsa285 ebsa285_serial_driver } @@ -376,6 +386,7 @@ package CYGPKG_SNMPAGENT { script snmpagent.cdl description "UCD SNMP agent." } + package CYGPKG_DEVS_ETH_ARM_EDB7XXX { alias { "Cirrus Logic ethernet driver" edb7xxx_eth_driver } hardware @@ -1350,6 +1361,7 @@ target mbx { CYGPKG_HAL_QUICC CYGPKG_IO_SERIAL_POWERPC_QUICC_SMC CYGPKG_DEVS_ETH_POWERPC_QUICC + CYGPKG_DEVS_FLASH_MBX } description " The mbx target provides the packages needed to run
--- a/packages/hal/arm/aeb/current/ChangeLog +++ b/packages/hal/arm/aeb/current/ChangeLog @@ -1,3 +1,21 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_arm_aebC_ram.mlt: + * include/pkgconf/mlt_arm_aebC_rom.mlt: + * include/pkgconf/mlt_arm_aeb_ram.mlt: + * include/pkgconf/mlt_arm_aeb_rom.mlt: + Add heap1 section + + * include/pkgconf/mlt_arm_aebC_ram.h: + * include/pkgconf/mlt_arm_aebC_rom.h: + * include/pkgconf/mlt_arm_aeb_ram.h: + * include/pkgconf/mlt_arm_aeb_rom.h: + * include/pkgconf/mlt_arm_aebC_ram.ldi: + * include/pkgconf/mlt_arm_aebC_rom.ldi: + * include/pkgconf/mlt_arm_aeb_ram.ldi: + * include/pkgconf/mlt_arm_aeb_rom.ldi: + Regenerate + 2000-07-03 Jesper Skov <jskov@redhat.com> * src/hal_diag.c:
--- a/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_ram.h +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_ram.h @@ -1,19 +1,17 @@ -// eCos memory layout - Tue Feb 29 14:33:50 2000 +// eCos memory layout - Fri Oct 20 05:46:39 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 (0) #define CYGMEM_REGION_ram_SIZE (0x48000) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) -extern char CYG_LABEL_NAME (_reserved_vectors) []; -#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (_reserved_vectors)) -#define CYGMEM_SECTION_reserved_vectors_SIZE (0x1000) -extern char CYG_LABEL_NAME (_reserved_not_mapped) []; -#define CYGMEM_SECTION_reserved_not_mapped (CYG_LABEL_NAME (_reserved_not_mapped)) -#define CYGMEM_SECTION_reserved_not_mapped_SIZE (0x7000) -extern char CYG_LABEL_NAME (_reserved_rom_usage) []; -#define CYGMEM_SECTION_reserved_rom_usage (CYG_LABEL_NAME (_reserved_rom_usage)) -#define CYGMEM_SECTION_reserved_rom_usage_SIZE (0x4000) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x48000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_ram.ldi +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_ram.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Tue Feb 29 14:33:50 2000 +// eCos memory layout - Fri Oct 20 05:46:39 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0, LENGTH = 0x48000 @@ -11,7 +13,7 @@ SECTIONS { SECTIONS_BEGIN SECTION_fixed_vectors (ram, 0x20, LMA_EQ_VMA) - SECTION_rom_vectors (ram, 0xC000, LMA_EQ_VMA) + SECTION_rom_vectors (ram, 0xc000, 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) @@ -20,5 +22,6 @@ SECTIONS 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) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_ram.mlt +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_ram.mlt @@ -1,7 +1,7 @@ version 0 region ram 0 48000 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 C000 C000 text text ! +section rom_vectors 0 1 0 1 1 1 1 1 c000 c000 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 ! @@ -9,4 +9,5 @@ section rodata1 0 4 0 1 0 1 0 1 fixup fi 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 ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_rom.h +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_rom.h @@ -1,19 +1,20 @@ -// eCos memory layout - Tue Feb 29 14:32:38 2000 +// eCos memory layout - Fri Oct 20 05:46:21 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 (0) #define CYGMEM_REGION_ram_SIZE (0x48000) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) #define CYGMEM_REGION_rom (0x4018000) #define CYGMEM_REGION_rom_SIZE (0x8000) #define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) -extern char CYG_LABEL_NAME (_reserved_vectors) []; -#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (_reserved_vectors)) -#define CYGMEM_SECTION_reserved_vectors_SIZE (0x1000) -extern char CYG_LABEL_NAME (_reserved_not_mapped) []; -#define CYGMEM_SECTION_reserved_not_mapped (CYG_LABEL_NAME (_reserved_not_mapped)) -#define CYGMEM_SECTION_reserved_not_mapped_SIZE (0x7000) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x48000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_rom.ldi +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_rom.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Tue Feb 29 14:32:38 2000 +// eCos memory layout - Fri Oct 20 05:46:21 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0, LENGTH = 0x48000 @@ -21,5 +23,6 @@ SECTIONS SECTION_fixed_vectors (ram, 0x20, LMA_EQ_VMA) SECTION_data (ram, 0x8000, FOLLOWING (.gcc_except_table)) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_rom.mlt +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aebC_rom.mlt @@ -3,8 +3,8 @@ region ram 0 48000 0 ! region rom 4018000 8000 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 reserved_not_mapped 7000 4 0 0 0 1 0 0 data ! +section bss 0 4 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 4018000 4018000 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 !
--- a/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_ram.h +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_ram.h @@ -1,19 +1,17 @@ -// eCos memory layout - Tue Feb 29 14:28:13 2000 +// eCos memory layout - Fri Oct 20 05:45:39 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 (0) #define CYGMEM_REGION_ram_SIZE (0x28000) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) -extern char CYG_LABEL_NAME (_reserved_vectors) []; -#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (_reserved_vectors)) -#define CYGMEM_SECTION_reserved_vectors_SIZE (0x1000) -extern char CYG_LABEL_NAME (_reserved_not_mapped) []; -#define CYGMEM_SECTION_reserved_not_mapped (CYG_LABEL_NAME (_reserved_not_mapped)) -#define CYGMEM_SECTION_reserved_not_mapped_SIZE (0x7000) -extern char CYG_LABEL_NAME (_reserved_for_rom) []; -#define CYGMEM_SECTION_reserved_for_rom (CYG_LABEL_NAME (_reserved_for_rom)) -#define CYGMEM_SECTION_reserved_for_rom_SIZE (0x4000) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x28000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_ram.ldi +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_ram.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Tue Feb 29 14:28:13 2000 +// eCos memory layout - Fri Oct 20 05:45:39 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0, LENGTH = 0x28000 @@ -11,7 +13,7 @@ SECTIONS { SECTIONS_BEGIN SECTION_fixed_vectors (ram, 0x20, LMA_EQ_VMA) - SECTION_rom_vectors (ram, 0xC000, LMA_EQ_VMA) + SECTION_rom_vectors (ram, 0xc000, 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) @@ -20,5 +22,6 @@ SECTIONS 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) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_ram.mlt +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_ram.mlt @@ -1,7 +1,7 @@ version 0 region ram 0 28000 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 C000 C000 text text ! +section rom_vectors 0 1 0 1 1 1 1 1 c000 c000 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 ! @@ -9,4 +9,5 @@ section rodata1 0 4 0 1 0 1 0 1 fixup fi 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 ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_rom.h +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_rom.h @@ -1,19 +1,20 @@ -// eCos memory layout - Tue Feb 29 14:30:16 2000 +// eCos memory layout - Fri Oct 20 05:46:01 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 (0) #define CYGMEM_REGION_ram_SIZE (0x28000) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) #define CYGMEM_REGION_rom (0x4018000) #define CYGMEM_REGION_rom_SIZE (0x8000) #define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) -extern char CYG_LABEL_NAME (_reserved_vectors) []; -#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (_reserved_vectors)) -#define CYGMEM_SECTION_reserved_vectors_SIZE (0x1000) -extern char CYG_LABEL_NAME (_reserved_not_mapped) []; -#define CYGMEM_SECTION_reserved_not_mapped (CYG_LABEL_NAME (_reserved_not_mapped)) -#define CYGMEM_SECTION_reserved_not_mapped_SIZE (0x7000) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x28000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_rom.ldi +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_rom.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Tue Feb 29 14:30:16 2000 +// eCos memory layout - Fri Oct 20 05:46:01 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0, LENGTH = 0x28000 @@ -21,5 +23,6 @@ SECTIONS SECTION_fixed_vectors (ram, 0x20, LMA_EQ_VMA) SECTION_data (ram, 0x8000, FOLLOWING (.gcc_except_table)) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_rom.mlt +++ b/packages/hal/arm/aeb/current/include/pkgconf/mlt_arm_aeb_rom.mlt @@ -3,7 +3,8 @@ region ram 0 28000 0 ! region rom 4018000 8000 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 bss 0 4 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 4018000 4018000 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 !
--- a/packages/hal/arm/arch/current/ChangeLog +++ b/packages/hal/arm/arch/current/ChangeLog @@ -1,3 +1,7 @@ +2000-10-20 Jesper Skov <jskov@redhat.com> + + * src/hal_misc.c: Update __mem_fault_handler declaration. + 2000-09-05 Andrew Lunn <andrew.lunn@ascom.ch> * include/basetype.h: Override the alignment macros for the ARM
--- a/packages/hal/arm/arch/current/src/hal_misc.c +++ b/packages/hal/arm/arch/current/src/hal_misc.c @@ -66,7 +66,7 @@ externC void diag_printf(const char *fmt externC void __handle_exception (void); externC HAL_SavedRegisters *_hal_registers; -extern void *__mem_fault_handler; +externC void* volatile __mem_fault_handler; #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS /* Force exception handling into the GDB stubs. This is done by taking over
--- a/packages/hal/arm/cma230/current/ChangeLog +++ b/packages/hal/arm/cma230/current/ChangeLog @@ -1,3 +1,21 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_arm_cma222_ram.mlt: + * include/pkgconf/mlt_arm_cma222_rom.mlt: + * include/pkgconf/mlt_arm_cma230_ram.mlt: + * include/pkgconf/mlt_arm_cma230_rom.mlt: + Add heap1 section + + * include/pkgconf/mlt_arm_cma222_ram.h: + * include/pkgconf/mlt_arm_cma222_rom.h: + * include/pkgconf/mlt_arm_cma230_ram.h: + * include/pkgconf/mlt_arm_cma230_rom.h: + * include/pkgconf/mlt_arm_cma222_ram.ldi: + * include/pkgconf/mlt_arm_cma222_rom.ldi: + * include/pkgconf/mlt_arm_cma230_ram.ldi: + * include/pkgconf/mlt_arm_cma230_rom.ldi: + Regenerate + 2000-07-05 Jesper Skov <jskov@redhat.com> * cdl/hal_arm_cma230.cdl:
--- a/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma222_ram.h +++ b/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma222_ram.h @@ -1,13 +1,17 @@ -// eCos memory layout - Tue Feb 29 14:41:00 2000 +// eCos memory layout - Fri Oct 20 05:35:09 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 (0) #define CYGMEM_REGION_ram_SIZE (0x200000) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) -extern char CYG_LABEL_NAME (_reserved) []; -#define CYGMEM_SECTION_reserved (CYG_LABEL_NAME (_reserved)) -#define CYGMEM_SECTION_reserved_SIZE (0x8000) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x200000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma222_ram.ldi +++ b/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma222_ram.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Tue Feb 29 14:41:00 2000 +// eCos memory layout - Fri Oct 20 05:35:09 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0, LENGTH = 0x200000 @@ -20,5 +22,6 @@ SECTIONS 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) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x4); SECTIONS_END }
--- a/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma222_ram.mlt +++ b/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma222_ram.mlt @@ -9,4 +9,5 @@ section rodata1 0 4 0 1 0 1 0 1 fixup fi 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 ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 4 0 0 0 0 0 0 !
--- a/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma222_rom.h +++ b/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma222_rom.h @@ -1,16 +1,20 @@ -// eCos memory layout - Tue Feb 29 14:40:01 2000 +// eCos memory layout - Fri Oct 20 05:34:42 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 (0) #define CYGMEM_REGION_ram_SIZE (0x200000) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) #define CYGMEM_REGION_rom (0xe000000) #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 (0x1000) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x200000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma222_rom.ldi +++ b/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma222_rom.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Tue Feb 29 14:40:01 2000 +// eCos memory layout - Fri Oct 20 05:34:42 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0, LENGTH = 0x200000 @@ -21,5 +23,6 @@ SECTIONS SECTION_fixed_vectors (ram, 0x20, LMA_EQ_VMA) SECTION_data (ram, 0x1000, FOLLOWING (.gcc_except_table)) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x4); SECTIONS_END }
--- a/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma222_rom.mlt +++ b/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma222_rom.mlt @@ -3,7 +3,8 @@ region ram 0 200000 0 ! region rom e000000 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 1000 bss ! -section bss 0 4 0 1 0 0 0 0 ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 4 0 0 0 0 0 0 ! section rom_vectors 0 1 0 1 1 1 1 1 e000000 e000000 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 !
--- a/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_ram.h +++ b/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_ram.h @@ -1,13 +1,17 @@ -// eCos memory layout - Tue Feb 29 14:36:49 2000 +// eCos memory layout - Fri Oct 20 05:33:25 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 (0) #define CYGMEM_REGION_ram_SIZE (0x200000) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) -extern char CYG_LABEL_NAME (_reserved) []; -#define CYGMEM_SECTION_reserved (CYG_LABEL_NAME (_reserved)) -#define CYGMEM_SECTION_reserved_SIZE (0x8000) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x200000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_ram.ldi +++ b/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_ram.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Tue Feb 29 14:36:49 2000 +// eCos memory layout - Fri Oct 20 05:33:25 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0, LENGTH = 0x200000 @@ -20,5 +22,6 @@ SECTIONS 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) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x4); SECTIONS_END }
--- a/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_ram.mlt +++ b/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_ram.mlt @@ -9,4 +9,5 @@ section rodata1 0 4 0 1 0 1 0 1 fixup fi 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 ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 4 0 0 0 0 0 0 !
--- a/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_rom.h +++ b/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_rom.h @@ -1,16 +1,20 @@ -// eCos memory layout - Tue Feb 29 14:38:29 2000 +// eCos memory layout - Fri Oct 20 05:34: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 (0) #define CYGMEM_REGION_ram_SIZE (0x200000) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) #define CYGMEM_REGION_rom (0xe000000) #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 (0x1000) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x200000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_rom.ldi +++ b/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_rom.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Tue Feb 29 14:38:29 2000 +// eCos memory layout - Fri Oct 20 05:34:02 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0, LENGTH = 0x200000 @@ -21,5 +23,6 @@ SECTIONS SECTION_fixed_vectors (ram, 0x20, LMA_EQ_VMA) SECTION_data (ram, 0x1000, FOLLOWING (.gcc_except_table)) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x4); SECTIONS_END }
--- a/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_rom.mlt +++ b/packages/hal/arm/cma230/current/include/pkgconf/mlt_arm_cma230_rom.mlt @@ -3,7 +3,8 @@ region ram 0 200000 0 ! region rom e000000 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 1000 bss ! -section bss 0 4 0 1 0 0 0 0 ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 4 0 0 0 0 0 0 ! section rom_vectors 0 1 0 1 1 1 1 1 e000000 e000000 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 !
--- a/packages/hal/arm/ebsa285/current/ChangeLog +++ b/packages/hal/arm/ebsa285/current/ChangeLog @@ -1,3 +1,15 @@ +2000-10-18 Gary Thomas <gthomas@redhat.com> + + * src/redboot_cmds.c: New file: only built in redboot, for a + platform specific command to exec code with no MMU intervention. + This is used to execute standard Linux kernels with as little + change/perturbation as possible. + + * include/hal_ebsa285.h (EBSA285_RAM_BANK0_BASE): New symbol for + redboot_cmds.c + + * cdl/hal_arm_ebsa285.cdl: Add build redboot_cmds.c -> libextras. + 2000-09-17 Gary Thomas <gthomas@redhat.com> * cdl/hal_arm_ebsa285.cdl: Add platform/cpu identification strings.
--- a/packages/hal/arm/ebsa285/current/cdl/hal_arm_ebsa285.cdl +++ b/packages/hal/arm/ebsa285/current/cdl/hal_arm_ebsa285.cdl @@ -367,6 +367,8 @@ cdl_package CYGPKG_HAL_ARM_EBSA285 { description "This option enables the conversion of the Redboot ELF image to a binary image suitable for ROM programming." + compile -library=libextras.a redboot_cmds.c + make -priority 325 { <PREFIX>/bin/redboot.bin : <PREFIX>/bin/redboot.elf $(OBJCOPY) --strip-debug $< $(@:.bin=.img)
--- a/packages/hal/arm/ebsa285/current/include/hal_ebsa285.h +++ b/packages/hal/arm/ebsa285/current/include/hal_ebsa285.h @@ -95,6 +95,11 @@ #endif /* __ASSEMBLER__ */ +// +// Memory Layout +// +#define EBSA285_RAM_BANK0_BASE 0xC0000000 + /* * SA-110 Cache and MMU Control Registers *
new file mode 100644 --- /dev/null +++ b/packages/hal/arm/ebsa285/current/src/redboot_cmds.c @@ -0,0 +1,127 @@ +//========================================================================== +// +// redboot_cmds.c +// +// EBSA-285 [platform] specific RedBoot commands +// +//========================================================================== +//####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 +// Date: 2000-07-14 +// Purpose: +// Description: +// +// This code is part of RedBoot (tm). +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <redboot.h> + +#include <cyg/hal/hal_ebsa285.h> // Board definitions +#include <cyg/hal/hal_intr.h> +#include <cyg/hal/hal_cache.h> + + +// Exported CLI function(s) +RedBoot_cmd("exec", + "Execute an image - with MMU off", + "[-w timeout] [<entry_point>]", + do_exec + ); + +typedef void code_fun(void); + +static void +do_exec(int argc, char *argv[]) +{ + unsigned long entry; + unsigned long oldints; + code_fun *fun, *prg; + bool wait_time_set; + int wait_time, res, i; + struct option_info opts[1]; + char line[8]; + unsigned long _prg[32], *ip; + + entry = (unsigned long)entry_address; // Default from last 'load' operation + init_opts(&opts[0], 'w', true, OPTION_ARG_TYPE_NUM, + (void **)&wait_time, (bool *)&wait_time_set, "wait timeout"); + if (!scan_opts(argc, argv, 1, opts, 1, (void *)&entry, OPTION_ARG_TYPE_NUM, "starting address")) + { + return; + } + if (wait_time_set) { + printf("About to start execution at %p - abort with ^C within %d seconds\n", + (void *)entry, wait_time); + res = gets(line, sizeof(line), wait_time*1000); + if (res == -2) { + return; + } + } + ip = (unsigned long *)&&lab1; + for (i = 0; i < (unsigned long)&&end1-(unsigned long)&&lab1; i++) { + _prg[i] = *ip++; + } + HAL_DISABLE_INTERRUPTS(oldints); + HAL_DCACHE_SYNC(); + HAL_ICACHE_DISABLE(); + HAL_DCACHE_DISABLE(); + HAL_DCACHE_SYNC(); + HAL_ICACHE_INVALIDATE_ALL(); + HAL_DCACHE_INVALIDATE_ALL(); + ip = (unsigned long *)_prg; + // Not call this code + fun = (code_fun *)((entry & 0x0FFFFFFF) + EBSA285_RAM_BANK0_BASE); // Absolute address + prg = (code_fun *)((unsigned long)ip + EBSA285_RAM_BANK0_BASE); // Absolute address + asm volatile ("mov r5,%0" : : "r"(fun) : "r5"); + asm volatile ("mov r1,%0; mov pc,r1" : : "r"(prg)); + lab1: + // Tricky code. We are currently running with the MMU on and the + // memory map convoluted from 1-1. This code must be copied to RAM + // and then executed at the non-mapped address. Then when the code + // turns off the MMU, the control flow is unchanged and control can + // be passed safely to the program to be executed. + // This magic was created in order to be able to execute standard + // Linux kernels with as little change/perturberance as possible. + asm volatile ("mrs r0,cpsr;" + "msr spsr,r0;" + "bic r0,r0,#0x1F;" // Put processor in IRQ mode + "orr r0,r0,#0x12;" + "msr cpsr,r0;" + "mov lr,r5;" + "mov sp,r5;" // Give the kernel a stack just below the entry point + "mov r1,#0;" + "mcr p15,0,r1,c1,c0;" + "mov r0,#0;" // Set up EBSA285 load magic + "mov r1,#0x4;" + "movs pc,lr" : : ); + end1: +}
--- a/packages/hal/arm/edb7xxx/current/ChangeLog +++ b/packages/hal/arm/edb7xxx/current/ChangeLog @@ -1,3 +1,30 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_arm_cl7111_ram.mlt: + * include/pkgconf/mlt_arm_cl7111_rom.mlt: + * include/pkgconf/mlt_arm_edb7209_rom.mlt: + * include/pkgconf/mlt_arm_edb7211_ram.mlt: + * include/pkgconf/mlt_arm_edb7211_rom.mlt: + * include/pkgconf/mlt_arm_edb7212_ram.mlt: + * include/pkgconf/mlt_arm_edb7212_rom.mlt: + Add heap1 section + + * include/pkgconf/mlt_arm_cl7111_ram.h: + * include/pkgconf/mlt_arm_cl7111_rom.h: + * include/pkgconf/mlt_arm_edb7209_rom.h: + * include/pkgconf/mlt_arm_edb7211_ram.h: + * include/pkgconf/mlt_arm_edb7211_rom.h: + * include/pkgconf/mlt_arm_edb7212_ram.h: + * include/pkgconf/mlt_arm_edb7212_rom.h: + * include/pkgconf/mlt_arm_cl7111_ram.ldi: + * include/pkgconf/mlt_arm_cl7111_rom.ldi: + * include/pkgconf/mlt_arm_edb7209_rom.ldi: + * include/pkgconf/mlt_arm_edb7211_ram.ldi: + * include/pkgconf/mlt_arm_edb7211_rom.ldi: + * include/pkgconf/mlt_arm_edb7212_ram.ldi: + * include/pkgconf/mlt_arm_edb7212_rom.ldi: + Regenerate + 2000-09-17 Gary Thomas <gthomas@redhat.com> * cdl/hal_arm_edb7xxx.cdl: Update platform/cpu identification strings.
--- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_cl7111_ram.h +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_cl7111_ram.h @@ -1,13 +1,17 @@ -// eCos memory layout - Tue Feb 29 14:53:55 2000 +// eCos memory layout - Fri Oct 20 05:40:55 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 (0) #define CYGMEM_REGION_ram_SIZE (0x1c0000) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) -extern char CYG_LABEL_NAME (_reserved) []; -#define CYGMEM_SECTION_reserved (CYG_LABEL_NAME (_reserved)) -#define CYGMEM_SECTION_reserved_SIZE (0x8000) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x1c0000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_cl7111_ram.ldi +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_cl7111_ram.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Tue Feb 29 14:53:55 2000 +// eCos memory layout - Fri Oct 20 05:40:55 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0, LENGTH = 0x1c0000 @@ -20,5 +22,6 @@ SECTIONS 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) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_cl7111_ram.mlt +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_cl7111_ram.mlt @@ -9,4 +9,5 @@ section rodata1 0 4 0 1 0 1 0 1 fixup fi 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 ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_cl7111_rom.h +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_cl7111_rom.h @@ -1,16 +1,20 @@ -// eCos memory layout - Tue Feb 29 14:52:51 2000 +// eCos memory layout - Fri Oct 20 05:40:29 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 (0) #define CYGMEM_REGION_ram_SIZE (0x1c0000) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) #define CYGMEM_REGION_rom (0xe0000000) #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 (0x1000) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x1c0000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_cl7111_rom.ldi +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_cl7111_rom.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Tue Feb 29 14:52:51 2000 +// eCos memory layout - Fri Oct 20 05:40:29 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0, LENGTH = 0x1c0000 @@ -21,5 +23,6 @@ SECTIONS SECTION_fixed_vectors (ram, 0x20, LMA_EQ_VMA) SECTION_data (ram, 0x1000, FOLLOWING (.gcc_except_table)) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_cl7111_rom.mlt +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_cl7111_rom.mlt @@ -3,7 +3,8 @@ region ram 0 1c0000 0 ! region rom e0000000 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 1000 bss ! -section bss 0 4 0 1 0 0 0 0 ! +section bss 0 4 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 e0000000 e0000000 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 !
--- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7209_rom.h +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7209_rom.h @@ -1,16 +1,20 @@ -// eCos memory layout - Tue Feb 29 15:03:28 2000 +// eCos memory layout - Fri Oct 20 05:41: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 (0) #define CYGMEM_REGION_ram_SIZE (0x9c00) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) #define CYGMEM_REGION_rom (0xe0000000) #define CYGMEM_REGION_rom_SIZE (0x800000) #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 (0x1000) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x9c00 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7209_rom.ldi +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7209_rom.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Tue Feb 29 15:03:28 2000 +// eCos memory layout - Fri Oct 20 05:41:57 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0, LENGTH = 0x9c00 @@ -22,5 +24,6 @@ SECTIONS SECTION_fixed_vectors (ram, 0x20, LMA_EQ_VMA) SECTION_data (ram, 0x1000, FOLLOWING (.mmu_tables)) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7209_rom.mlt +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7209_rom.mlt @@ -3,12 +3,13 @@ region ram 0 9c00 0 ! region rom e0000000 800000 1 !This is ROM bank 0, physical address 0x00000000.When running eCos, this space is remapped to 0xE0000000. section fixed_vectors 0 1 0 1 1 0 1 0 20 20 ! section data 0 1 1 1 1 1 0 0 1000 bss ! -section bss 0 4 0 1 0 0 0 0 ! +section bss 0 4 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 e0000000 e0000000 text text ! -section text 0 1 0 1 0 1 0 1 fini fini ! -section fini 0 1 0 1 0 1 0 1 rodata rodata ! -section rodata 0 1 0 1 0 1 0 1 rodata1 rodata1 ! -section rodata1 0 1 0 1 0 1 0 1 fixup fixup ! -section fixup 0 1 0 1 0 1 0 1 gcc_except_table gcc_except_table ! -section gcc_except_table 0 1 0 1 0 1 0 1 mmu_tables mmu_tables ! +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 mmu_tables mmu_tables ! section mmu_tables 0 4000 0 1 0 0 0 1 data !
--- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7211_ram.h +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7211_ram.h @@ -1,13 +1,17 @@ -// eCos memory layout - Tue Feb 29 14:48:14 2000 +// eCos memory layout - Fri Oct 20 05:38:50 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 (0) #define CYGMEM_REGION_ram_SIZE (0xfd9000) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) -extern char CYG_LABEL_NAME (_reserved) []; -#define CYGMEM_SECTION_reserved (CYG_LABEL_NAME (_reserved)) -#define CYGMEM_SECTION_reserved_SIZE (0x10000 - (size_t) CYG_LABEL_NAME (_reserved)) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0xfd9000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7211_ram.ldi +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7211_ram.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Tue Feb 29 14:48:14 2000 +// eCos memory layout - Fri Oct 20 05:38:50 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0, LENGTH = 0xfd9000 @@ -20,5 +22,6 @@ SECTIONS 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) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7211_ram.mlt +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7211_ram.mlt @@ -9,4 +9,5 @@ section rodata1 0 4 0 1 0 1 0 1 fixup fi 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 ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7211_rom.h +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7211_rom.h @@ -1,10 +1,12 @@ -// eCos memory layout - Tue Feb 29 14:51:45 2000 +// eCos memory layout - Fri Oct 20 05:39:48 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 (0) #define CYGMEM_REGION_ram_SIZE (0xfd7000) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) @@ -14,9 +16,13 @@ #define CYGMEM_REGION_rom (0xe0000000) #define CYGMEM_REGION_rom_SIZE (0x800000) #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 (0x1000 - (size_t) CYG_LABEL_NAME (_reserved)) -extern char CYG_LABEL_NAME (_sram) []; -#define CYGMEM_SECTION_sram (CYG_LABEL_NAME (_sram)) -#define CYGMEM_SECTION_sram_SIZE (0x60009c00 - (size_t) CYG_LABEL_NAME (_sram)) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0xfd7000 - (size_t) CYG_LABEL_NAME (__heap1)) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__sram) []; +#endif +#define CYGMEM_SECTION_sram (CYG_LABEL_NAME (__sram)) +#define CYGMEM_SECTION_sram_SIZE (0x60009c00 - (size_t) CYG_LABEL_NAME (__sram))
--- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7211_rom.ldi +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7211_rom.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Tue Feb 29 14:51:45 2000 +// eCos memory layout - Fri Oct 20 05:39:48 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0, LENGTH = 0xfd7000 @@ -23,6 +25,7 @@ SECTIONS SECTION_fixed_vectors (ram, 0x20, LMA_EQ_VMA) SECTION_data (ram, 0x1000, FOLLOWING (.mmu_tables)) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) - __sram = 0x60000000; + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + CYG_LABEL_DEFN(__sram) = 0x60000000; SECTIONS_END }
--- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7211_rom.mlt +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7211_rom.mlt @@ -4,7 +4,8 @@ region sram 60000000 9c00 0 ! region rom e0000000 800000 1 !This is ROM bank 0, physical address 0x00000000.When running eCos, this space is remapped to 0xE0000000. section fixed_vectors 0 1 0 1 1 0 1 0 20 20 ! section data 0 1 1 1 1 1 0 0 1000 bss ! -section bss 0 4 0 1 0 0 0 0 ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 ! section sram 0 1 0 0 1 0 1 0 60000000 60000000 ! section rom_vectors 0 1 0 1 1 1 1 1 e0000000 e0000000 text text ! section text 0 4 0 1 0 1 0 1 fini fini !
--- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7212_ram.h +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7212_ram.h @@ -1,16 +1,20 @@ -// eCos memory layout - Tue Feb 29 15:05:40 2000 +// eCos memory layout - Fri Oct 20 05:43:59 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 (0) #define CYGMEM_REGION_ram_SIZE (0xfd7000) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) #define CYGMEM_REGION_sram (0x60000000) #define CYGMEM_REGION_sram_SIZE (0x9c00) #define CYGMEM_REGION_sram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) -extern char CYG_LABEL_NAME (_reserved) []; -#define CYGMEM_SECTION_reserved (CYG_LABEL_NAME (_reserved)) -#define CYGMEM_SECTION_reserved_SIZE (0x10000) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0xfd7000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7212_ram.ldi +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7212_ram.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Tue Feb 29 15:05:40 2000 +// eCos memory layout - Fri Oct 20 05:43:59 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0, LENGTH = 0xfd7000 @@ -21,6 +23,7 @@ SECTIONS 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) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTION_sram (sram, 0x60000000, LMA_EQ_VMA) SECTIONS_END }
--- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7212_ram.mlt +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7212_ram.mlt @@ -10,5 +10,6 @@ section rodata1 0 4 0 1 0 1 0 1 fixup fi 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 ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 ! section sram 0 1 0 1 1 0 1 0 60000000 60000000 !
--- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7212_rom.h +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7212_rom.h @@ -1,10 +1,12 @@ -// eCos memory layout - Tue Feb 29 15:04:45 2000 +// eCos memory layout - Fri Oct 20 05:42:50 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 (0) #define CYGMEM_REGION_ram_SIZE (0xfd7000) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) @@ -14,6 +16,8 @@ #define CYGMEM_REGION_rom (0xe0000000) #define CYGMEM_REGION_rom_SIZE (0x800000) #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 (0x1000) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0xfd7000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7212_rom.ldi +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7212_rom.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Tue Feb 29 15:04:45 2000 +// eCos memory layout - Fri Oct 20 05:42:50 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0, LENGTH = 0xfd7000 @@ -23,6 +25,7 @@ SECTIONS SECTION_fixed_vectors (ram, 0x20, LMA_EQ_VMA) SECTION_data (ram, 0x1000, FOLLOWING (.mmu_tables)) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTION_sram (sram, 0x60000000, LMA_EQ_VMA) SECTIONS_END }
--- a/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7212_rom.mlt +++ b/packages/hal/arm/edb7xxx/current/include/pkgconf/mlt_arm_edb7212_rom.mlt @@ -4,7 +4,8 @@ region sram 60000000 9c00 0 ! region rom e0000000 800000 1 !This is ROM bank 0, physical address 0x00000000.When running eCos, this space is remapped to 0xE0000000. section fixed_vectors 0 1 0 1 1 0 1 0 20 20 ! section data 0 1 1 1 1 1 0 0 1000 bss ! -section bss 0 4 0 1 0 0 0 0 ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 ! section sram 0 1 0 1 1 0 1 0 60000000 60000000 ! section rom_vectors 0 1 0 1 1 1 1 1 e0000000 e0000000 text text ! section text 0 4 0 1 0 1 0 1 fini fini !
--- a/packages/hal/arm/pid/current/ChangeLog +++ b/packages/hal/arm/pid/current/ChangeLog @@ -1,3 +1,11 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_arm_pid_ram.h: + * include/pkgconf/mlt_arm_pid_rom.h: + * include/pkgconf/mlt_arm_pid_ram.ldi: + * include/pkgconf/mlt_arm_pid_rom.ldi: + Regenerate + 2000-07-25 Jonathan Larmour <jlarmour@redhat.co.uk> * include/pkgconf/mlt_arm_pid_ram.h:
--- a/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid_ram.h +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid_ram.h @@ -1,13 +1,17 @@ -// eCos memory layout - Tue Jul 25 18:20:21 2000 +// eCos memory layout - Fri Oct 20 05:31:09 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 (0) #define CYGMEM_REGION_ram_SIZE (0x80000) #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 (0x80000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid_ram.ldi +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid_ram.ldi @@ -1,4 +1,4 @@ -// eCos memory layout - Tue Jul 25 18:20:21 2000 +// eCos memory layout - Fri Oct 20 05:31:09 2000 // This is a generated file - do not edit
--- a/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid_rom.h +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid_rom.h @@ -1,16 +1,20 @@ -// eCos memory layout - Tue Jul 25 18:27:20 2000 +// eCos memory layout - Fri Oct 20 05:30: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 (0) #define CYGMEM_REGION_ram_SIZE (0x80000) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) #define CYGMEM_REGION_rom (0x4000000) #define CYGMEM_REGION_rom_SIZE (0x80000) #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 (0x80000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid_rom.ldi +++ b/packages/hal/arm/pid/current/include/pkgconf/mlt_arm_pid_rom.ldi @@ -1,4 +1,4 @@ -// eCos memory layout - Tue Jul 25 18:27:20 2000 +// eCos memory layout - Fri Oct 20 05:30:30 2000 // This is a generated file - do not edit
--- a/packages/hal/arm/sa11x0/assabet/current/ChangeLog +++ b/packages/hal/arm/sa11x0/assabet/current/ChangeLog @@ -1,3 +1,20 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_arm_sa11x0_assabet_ram.mlt: + * include/pkgconf/mlt_arm_sa11x0_assabet_rom.mlt: + Add heap1 section + + * include/pkgconf/mlt_arm_sa11x0_assabet_ram.h: + * include/pkgconf/mlt_arm_sa11x0_assabet_rom.h: + * include/pkgconf/mlt_arm_sa11x0_assabet_ram.ldi: + * include/pkgconf/mlt_arm_sa11x0_assabet_rom.ldi: + Regenerate + +2000-10-17 Gary Thomas <gthomas@redhat.com> + + * include/hal_platform_setup.h: Don't initialize "static" control + registers - power up value works and the values used kill latest boards. + 2000-10-09 Gary Thomas <gthomas@redhat.com> * src/lcd_support.c: Fix compile error if no kernel present.
--- a/packages/hal/arm/sa11x0/assabet/current/include/hal_platform_setup.h +++ b/packages/hal/arm/sa11x0/assabet/current/include/hal_platform_setup.h @@ -198,14 +198,14 @@ dram_table: .word SA11X0_DRAM0_CAS_0, 0xAAAAAA7F .word SA11X0_DRAM0_CAS_1, 0xAAAAAAAA .word SA11X0_DRAM0_CAS_2, 0xAAAAAAAA - .word SA11X0_STATIC_CONTROL_0, 0x4B384B38 - .word SA11X0_STATIC_CONTROL_1, 0x22212419 +// .word SA11X0_STATIC_CONTROL_0, 0x4B384B38 +// .word SA11X0_STATIC_CONTROL_1, 0x22212419 .word SA11X0_EXP_BUS_CONFIGURATION, 0x994A994A .word SA11X0_REFRESH_CONFIGURATION, 0x49FC0327 .word SA11X0_DRAM2_CAS_0, 0xAAAAAA7F .word SA11X0_DRAM2_CAS_1, 0xAAAAAAAA .word SA11X0_DRAM2_CAS_2, 0xAAAAAAAA - .word SA11X0_STATIC_CONTROL_2, 0x42194449 +// .word SA11X0_STATIC_CONTROL_2, 0x42194449 .word SA11X0_SMROM_CONFIGURATION, 0xAFCCAFCC .word SA11X0_DRAM_CONFIGURATION, 0x72547254 // Disabled .word 0, 0
--- a/packages/hal/arm/sa11x0/assabet/current/include/pkgconf/mlt_arm_sa11x0_assabet_ram.h +++ b/packages/hal/arm/sa11x0/assabet/current/include/pkgconf/mlt_arm_sa11x0_assabet_ram.h @@ -1,10 +1,17 @@ -// eCos memory layout - Sun Jun 04 12:17:47 2000 +// eCos memory layout - Fri Oct 20 05:56:24 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 (0) #define CYGMEM_REGION_ram_SIZE (0x2000000) #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 (0x2000000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/arm/sa11x0/assabet/current/include/pkgconf/mlt_arm_sa11x0_assabet_ram.ldi +++ b/packages/hal/arm/sa11x0/assabet/current/include/pkgconf/mlt_arm_sa11x0_assabet_ram.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Sun Jun 04 12:17:47 2000 +// eCos memory layout - Fri Oct 20 05:56:24 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0, LENGTH = 0x2000000 @@ -20,5 +22,6 @@ SECTIONS 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) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/arm/sa11x0/assabet/current/include/pkgconf/mlt_arm_sa11x0_assabet_ram.mlt +++ b/packages/hal/arm/sa11x0/assabet/current/include/pkgconf/mlt_arm_sa11x0_assabet_ram.mlt @@ -9,4 +9,5 @@ section rodata1 0 4 0 1 0 1 0 1 fixup fi 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 ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/arm/sa11x0/assabet/current/include/pkgconf/mlt_arm_sa11x0_assabet_rom.h +++ b/packages/hal/arm/sa11x0/assabet/current/include/pkgconf/mlt_arm_sa11x0_assabet_rom.h @@ -1,13 +1,20 @@ -// eCos memory layout - Sun Jun 04 12:19:07 2000 +// eCos memory layout - Fri Oct 20 05:56:55 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 (0) #define CYGMEM_REGION_ram_SIZE (0x2000000) #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) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x2000000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/arm/sa11x0/assabet/current/include/pkgconf/mlt_arm_sa11x0_assabet_rom.ldi +++ b/packages/hal/arm/sa11x0/assabet/current/include/pkgconf/mlt_arm_sa11x0_assabet_rom.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Sun Jun 04 12:19:07 2000 +// eCos memory layout - Fri Oct 20 05:56:55 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0, LENGTH = 0x2000000 @@ -21,5 +23,6 @@ SECTIONS SECTION_fixed_vectors (ram, 0x20, LMA_EQ_VMA) SECTION_data (ram, 0x8000, FOLLOWING (.gcc_except_table)) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/arm/sa11x0/assabet/current/include/pkgconf/mlt_arm_sa11x0_assabet_rom.mlt +++ b/packages/hal/arm/sa11x0/assabet/current/include/pkgconf/mlt_arm_sa11x0_assabet_rom.mlt @@ -3,7 +3,8 @@ region ram 0 2000000 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 bss 0 4 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 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 !
--- a/packages/hal/arm/sa11x0/brutus/current/ChangeLog +++ b/packages/hal/arm/sa11x0/brutus/current/ChangeLog @@ -1,3 +1,15 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_arm_sa11x0_brutus_ram.mlt: + * include/pkgconf/mlt_arm_sa11x0_brutus_rom.mlt: + Add heap1 section + + * include/pkgconf/mlt_arm_sa11x0_brutus_ram.h: + * include/pkgconf/mlt_arm_sa11x0_brutus_rom.h: + * include/pkgconf/mlt_arm_sa11x0_brutus_ram.ldi: + * include/pkgconf/mlt_arm_sa11x0_brutus_rom.ldi: + Regenerate + 2000-09-17 Gary Thomas <gthomas@redhat.com> * cdl/hal_arm_sa11x0_brutus.cdl: Add platform/cpu identification strings.
--- a/packages/hal/arm/sa11x0/brutus/current/include/pkgconf/mlt_arm_sa11x0_brutus_ram.h +++ b/packages/hal/arm/sa11x0/brutus/current/include/pkgconf/mlt_arm_sa11x0_brutus_ram.h @@ -1,13 +1,17 @@ -// eCos memory layout - Tue Apr 04 20:19:06 2000 +// eCos memory layout - Fri Oct 20 05:47:38 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 (0) -#define CYGMEM_REGION_ram_SIZE (0xBFFFFF) +#define CYGMEM_REGION_ram_SIZE (0xbfffff) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) -extern char CYG_LABEL_NAME (_reserved) []; -#define CYGMEM_SECTION_reserved (CYG_LABEL_NAME (_reserved)) -#define CYGMEM_SECTION_reserved_SIZE (0x10000) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0xbfffff - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/arm/sa11x0/brutus/current/include/pkgconf/mlt_arm_sa11x0_brutus_ram.ldi +++ b/packages/hal/arm/sa11x0/brutus/current/include/pkgconf/mlt_arm_sa11x0_brutus_ram.ldi @@ -1,10 +1,12 @@ -// eCos memory layout - Tue Apr 04 20:19:06 2000 +// eCos memory layout - Fri Oct 20 05:47:38 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { - ram : ORIGIN = 0, LENGTH = 0xBFFFFF + ram : ORIGIN = 0, LENGTH = 0xbfffff } SECTIONS @@ -20,5 +22,6 @@ SECTIONS 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) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/arm/sa11x0/brutus/current/include/pkgconf/mlt_arm_sa11x0_brutus_ram.mlt +++ b/packages/hal/arm/sa11x0/brutus/current/include/pkgconf/mlt_arm_sa11x0_brutus_ram.mlt @@ -1,5 +1,5 @@ version 0 -region ram 0 BFFFFF 0 ! +region ram 0 bfffff 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 ! @@ -9,4 +9,5 @@ section rodata1 0 4 0 1 0 1 0 1 fixup fi 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 ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/arm/sa11x0/brutus/current/include/pkgconf/mlt_arm_sa11x0_brutus_rom.h +++ b/packages/hal/arm/sa11x0/brutus/current/include/pkgconf/mlt_arm_sa11x0_brutus_rom.h @@ -1,16 +1,20 @@ -// eCos memory layout - Tue Apr 04 20:19:06 2000 +// eCos memory layout - Fri Oct 20 05:48:15 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 (0) -#define CYGMEM_REGION_ram_SIZE (0xBFFFFF) +#define CYGMEM_REGION_ram_SIZE (0xbfffff) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) #define CYGMEM_REGION_rom (0x40000000) #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) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0xbfffff - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/arm/sa11x0/brutus/current/include/pkgconf/mlt_arm_sa11x0_brutus_rom.ldi +++ b/packages/hal/arm/sa11x0/brutus/current/include/pkgconf/mlt_arm_sa11x0_brutus_rom.ldi @@ -1,10 +1,12 @@ -// eCos memory layout - Tue Apr 04 20:19:06 2000 +// eCos memory layout - Fri Oct 20 05:48:15 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { - ram : ORIGIN = 0, LENGTH = 0xBFFFFF + ram : ORIGIN = 0, LENGTH = 0xbfffff rom : ORIGIN = 0x40000000, LENGTH = 0x40000 } @@ -21,5 +23,6 @@ SECTIONS SECTION_fixed_vectors (ram, 0x20, LMA_EQ_VMA) SECTION_data (ram, 0x8000, FOLLOWING (.gcc_except_table)) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/arm/sa11x0/brutus/current/include/pkgconf/mlt_arm_sa11x0_brutus_rom.mlt +++ b/packages/hal/arm/sa11x0/brutus/current/include/pkgconf/mlt_arm_sa11x0_brutus_rom.mlt @@ -1,9 +1,10 @@ version 0 -region ram 0 BFFFFF 0 ! +region ram 0 bfffff 0 ! region rom 40000000 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 bss 0 4 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 40000000 40000000 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 !
--- a/packages/hal/common/current/ChangeLog +++ b/packages/hal/common/current/ChangeLog @@ -1,3 +1,32 @@ +2000-10-23 Jesper Skov <jskov@redhat.com> + + * src/hal_stub.c: Made __mem_fault_handler pointer volatile. + +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/drv_api.h (cyg_interrupt): Make dsr_count volatile to + prevent compilers optimizing accesses in the wrong place. + +2000-10-20 Jesper Skov <jskov@redhat.com> + + * include/drv_api.h: Correct location of volatile keyword. + * src/drv_api.c: Same. + +2000-10-19 Gary Thomas <gthomas@redhat.com> + + * src/generic-stub.c (__process_packet): Add RedBoot identifier + in maintenance 'd' packet reply. + +2000-10-18 Jesper Skov <jskov@redhat.com> + + * include/hal_if.h (CYGPRI_HAL_IMPLEMENTS_IF_SERVICES): Set for + all non-RAM startup types. + +2000-10-13 Jonathan Larmour <jlarmour@redhat.com> + + * src/stubrom/stubrom.c (cyg_start): Remove unnecessary call to + initialize_stub() + 2000-09-11 Jonathan Larmour <jlarmour@redhat.com> * include/hal_tables.h (CYG_HAL_TABLE_EXTRA): Use new definition of
--- a/packages/hal/common/current/include/drv_api.h +++ b/packages/hal/common/current/include/drv_api.h @@ -151,8 +151,8 @@ typedef struct cyg_interrupt cyg_DSR_t *dsr; CYG_ADDRWORD data; - volatile struct cyg_interrupt *next_dsr; - cyg_int32 dsr_count; + struct cyg_interrupt* volatile next_dsr; + volatile cyg_int32 dsr_count; #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN struct cyg_interrupt *next;
--- a/packages/hal/common/current/include/hal_if.h +++ b/packages/hal/common/current/include/hal_if.h @@ -396,7 +396,7 @@ externC void hal_if_init(void); // Configuration control for the interface services. // When this is set, code should initialize the vector table wherever // appropriate. -#if defined(CYG_HAL_STARTUP_ROM) || \ +#if !defined(CYG_HAL_STARTUP_RAM) || \ ( defined(CYG_HAL_STARTUP_RAM) && \ !defined(CYGSEM_HAL_USE_ROM_MONITOR)) # define CYGPRI_HAL_IMPLEMENTS_IF_SERVICES
--- a/packages/hal/common/current/src/drv_api.c +++ b/packages/hal/common/current/src/drv_api.c @@ -64,7 +64,7 @@ static volatile cyg_int32 isr_disable_co volatile cyg_int32 dsr_disable_counter asm("cyg_scheduler_sched_lock"); // DSR disable counter -static volatile cyg_interrupt *dsr_list; // List of pending DSRs +static cyg_interrupt* volatile dsr_list; // List of pending DSRs #ifdef CYGIMP_HAL_COMMON_INTERRUPTS_CHAIN @@ -85,7 +85,7 @@ static void post_dsr( cyg_interrupt *int HAL_DISABLE_INTERRUPTS(old_intr); - if( intr->dsr_count++ == 0 ) + if( intr->dsr_count++ == 0 ) { intr->next_dsr = dsr_list; dsr_list = intr; @@ -102,7 +102,7 @@ static void call_dsrs(void) while( dsr_list != NULL ) { - volatile cyg_interrupt *intr; + cyg_interrupt *intr; cyg_int32 count; CYG_INTERRUPT_STATE old_intr;
--- a/packages/hal/common/current/src/generic-stub.c +++ b/packages/hal/common/current/src/generic-stub.c @@ -1019,7 +1019,11 @@ int } case 'd': /* toggle debug flag */ - strcpy(remcomOutBuffer, "eCos GDB stubs - built " __DATE__ " / " __TIME__); + strcpy(remcomOutBuffer, "eCos GDB stubs" +#ifdef CYGPKG_REDBOOT + " [with RedBoot]" +#endif + " - built " __DATE__ " / " __TIME__); break; #endif #endif // __ECOS__
--- a/packages/hal/common/current/src/hal_stub.c +++ b/packages/hal/common/current/src/hal_stub.c @@ -769,7 +769,14 @@ int //----------------------------------------------------------------------------- // Memory accessor functions. -volatile void *__mem_fault_handler = (void *)0; +// The __mem_fault_handler pointer is volatile since it is only +// set/cleared by the function below - which does not rely on any +// other functions, so the compiler may decide to not bother updating +// the pointer at all. If any of the memory accesses cause an +// exception, the pointer must be set to ensure the exception handler +// can make use of it. + +void* volatile __mem_fault_handler = (void *)0; /* These are the "arguments" to __do_read_mem and __do_write_mem, which are passed as globals to avoid squeezing them thru
--- a/packages/hal/common/current/src/stubrom/stubrom.c +++ b/packages/hal/common/current/src/stubrom/stubrom.c @@ -46,8 +46,6 @@ void cyg_start (void) { - initialize_stub(); - for(;;) breakpoint(); }
--- a/packages/hal/i386/arch/current/ChangeLog +++ b/packages/hal/i386/arch/current/ChangeLog @@ -1,3 +1,9 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * src/vectors.S (_start): call constructors after initializing + stub so that they can be debugged. Reported to work okay + by Fabrice Gautier. + 2000-09-05 Jonathan Larmour <jlarmour@redhat.com> * include/basetype.h: Use 32-byte alignment
--- a/packages/hal/i386/arch/current/src/vectors.S +++ b/packages/hal/i386/arch/current/src/vectors.S @@ -109,14 +109,14 @@ .extern hal_platform_init call hal_platform_init - .extern cyg_hal_invoke_constructors - call cyg_hal_invoke_constructors - #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS .extern initialize_stub call initialize_stub #endif /* CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS */ + .extern cyg_hal_invoke_constructors + call cyg_hal_invoke_constructors + # Unused IRQ vector 15 points to our 'struct'... popl %eax movl %eax, (15 * 8)
--- a/packages/hal/i386/linux/current/ChangeLog +++ b/packages/hal/i386/linux/current/ChangeLog @@ -1,3 +1,16 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_i386_linux_ram.mlt: + Add heap1 section + + * include/pkgconf/mlt_i386_linux_ram.h: + * include/pkgconf/mlt_i386_linux_ram.ldi: + Regenerated + +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * cdl/hal_i386_linux.cdl: Correct memory layout file name + 2000-03-03 John Dallaway <jld@cygnus.co.uk> * cdl/hal_i386_linux.cdl (CYGBLD_GLOBAL_COMMAND_PREFIX):
--- a/packages/hal/i386/linux/current/cdl/hal_i386_linux.cdl +++ b/packages/hal/i386/linux/current/cdl/hal_i386_linux.cdl @@ -156,7 +156,7 @@ cdl_package CYGPKG_HAL_I386_LINUX { display "Memory layout" flavor data no_define - calculated { "mlt_i386_linux_ram" } + calculated { "i386_linux_ram" } cdl_option CYGHWR_MEMORY_LAYOUT_LDI { display "Memory layout linker script fragment"
--- a/packages/hal/i386/linux/current/include/pkgconf/mlt_i386_linux_ram.h +++ b/packages/hal/i386/linux/current/include/pkgconf/mlt_i386_linux_ram.h @@ -1,10 +1,17 @@ -// eCos memory layout - Wed Nov 24 12:01:42 1999 +// eCos memory layout - Fri Oct 20 08:40:39 2000 -// This is a generated file - changes will be lost if ConfigTool(MLT) is run +// This is a generated file - do not edit +#ifndef __ASSEMBLER__ #include <cyg/infra/cyg_type.h> #include <stddef.h> +#endif #define CYGMEM_REGION_ram (0) #define CYGMEM_REGION_ram_SIZE (0x800000) #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 (0x800000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/i386/linux/current/include/pkgconf/mlt_i386_linux_ram.ldi +++ b/packages/hal/i386/linux/current/include/pkgconf/mlt_i386_linux_ram.ldi @@ -1,42 +1,18 @@ -//=========================================================================== -// -// MLT linker script export -// -//=========================================================================== -//####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#### -//=========================================================================== +// eCos memory layout - Fri Oct 20 08:40:39 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> MEMORY { - ram : ORIGIN = 0x00000000, LENGTH = 0x800000 + ram : ORIGIN = 0, LENGTH = 0x800000 } SECTIONS { SECTIONS_BEGIN - SECTION_vectors (ram, 0x0, LMA_EQ_VMA) + SECTION_vectors (ram, 0, 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) @@ -47,5 +23,6 @@ SECTIONS SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) SECTION_sbss (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x10); SECTIONS_END }
--- a/packages/hal/i386/linux/current/include/pkgconf/mlt_i386_linux_ram.mlt +++ b/packages/hal/i386/linux/current/include/pkgconf/mlt_i386_linux_ram.mlt @@ -10,4 +10,5 @@ section gcc_except_table 0 1 0 1 0 1 0 1 section rel__got 0 1 0 1 0 1 0 1 data data ! section data 0 8 0 1 0 1 0 1 sbss sbss ! section sbss 0 4 0 1 0 1 0 1 bss bss ! -section bss 0 10 0 1 0 0 0 0 ! +section bss 0 10 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 10 0 0 0 0 0 0 !
--- a/packages/hal/i386/pc/current/ChangeLog +++ b/packages/hal/i386/pc/current/ChangeLog @@ -1,3 +1,20 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_i386_pc_floppy.mlt: + Add heap1 section + + * include/pkgconf/mlt_i386_pc_floppy.h: + * include/pkgconf/mlt_i386_pc_ram.h: + * include/pkgconf/mlt_i386_pc_floppy.ldi: + * include/pkgconf/mlt_i386_pc_ram.ldi: + Regenerated + +2000-10-19 Jesper Skov <jskov@redhat.com> + + * include/pkgconf/mlt_i386_pc_ram.h: Added heap1 label. + * include/pkgconf/mlt_i386_pc_ram.mlt: Same. + * include/pkgconf/mlt_i386_pc_ram.ldi: Same. + 2000-08-18 Nick Garnett <nickg@cygnus.co.uk> * include/platform.inc:
--- a/packages/hal/i386/pc/current/include/pkgconf/mlt_i386_pc_floppy.h +++ b/packages/hal/i386/pc/current/include/pkgconf/mlt_i386_pc_floppy.h @@ -1,10 +1,17 @@ -// eCos memory layout - Wed Nov 24 12:01:42 1999 +// eCos memory layout - Fri Oct 20 08:16:03 2000 -// This is a generated file - changes will be lost if ConfigTool(MLT) is run +// This is a generated file - do not edit +#ifndef __ASSEMBLER__ #include <cyg/infra/cyg_type.h> #include <stddef.h> +#endif #define CYGMEM_REGION_ram (0) -#define CYGMEM_REGION_ram_SIZE (0xA0000) +#define CYGMEM_REGION_ram_SIZE (0xa0000) #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 (0xa0000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/i386/pc/current/include/pkgconf/mlt_i386_pc_floppy.ldi +++ b/packages/hal/i386/pc/current/include/pkgconf/mlt_i386_pc_floppy.ldi @@ -1,36 +1,12 @@ -//=========================================================================== -// -// MLT linker script export -// -//=========================================================================== -//####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#### -//=========================================================================== +// eCos memory layout - Fri Oct 20 08:16:03 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> MEMORY { - ram : ORIGIN = 0x0, LENGTH = 0xA0000 + ram : ORIGIN = 0, LENGTH = 0xa0000 } SECTIONS @@ -47,5 +23,6 @@ SECTIONS SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) SECTION_sbss (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/i386/pc/current/include/pkgconf/mlt_i386_pc_floppy.mlt +++ b/packages/hal/i386/pc/current/include/pkgconf/mlt_i386_pc_floppy.mlt @@ -10,4 +10,5 @@ section gcc_except_table 0 1 0 1 0 1 0 1 section rel.got 0 1 0 1 0 1 0 1 data data ! section data 0 8 0 1 0 1 0 1 sbss sbss ! section sbss 0 4 0 1 0 1 0 1 bss bss ! -section bss 0 10 0 1 0 0 0 0 ! +section bss 0 10 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/i386/pc/current/include/pkgconf/mlt_i386_pc_ram.h +++ b/packages/hal/i386/pc/current/include/pkgconf/mlt_i386_pc_ram.h @@ -1,10 +1,17 @@ -// eCos memory layout - Wed Nov 24 12:01:42 1999 +// eCos memory layout - Fri Oct 20 08:15:20 2000 -// This is a generated file - changes will be lost if ConfigTool(MLT) is run +// This is a generated file - do not edit +#ifndef __ASSEMBLER__ #include <cyg/infra/cyg_type.h> #include <stddef.h> +#endif #define CYGMEM_REGION_ram (0) -#define CYGMEM_REGION_ram_SIZE (0xA0000) +#define CYGMEM_REGION_ram_SIZE (0xa0000) #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 (0xa0000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/i386/pc/current/include/pkgconf/mlt_i386_pc_ram.ldi +++ b/packages/hal/i386/pc/current/include/pkgconf/mlt_i386_pc_ram.ldi @@ -1,36 +1,12 @@ -//=========================================================================== -// -// MLT linker script export -// -//=========================================================================== -//####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#### -//=========================================================================== +// eCos memory layout - Fri Oct 20 08:15:20 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> MEMORY { - ram : ORIGIN = 0x0, LENGTH = 0xA0000 + ram : ORIGIN = 0, LENGTH = 0xa0000 } SECTIONS @@ -47,5 +23,6 @@ SECTIONS SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) SECTION_sbss (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/i386/pc/current/include/pkgconf/mlt_i386_pc_ram.mlt +++ b/packages/hal/i386/pc/current/include/pkgconf/mlt_i386_pc_ram.mlt @@ -10,4 +10,5 @@ section gcc_except_table 0 1 0 1 0 1 0 1 section rel.got 0 1 0 1 0 1 0 1 data data ! section data 0 8 0 1 0 1 0 1 sbss sbss ! section sbss 0 4 0 1 0 1 0 1 bss bss ! -section bss 0 10 0 1 0 0 0 0 ! +section bss 0 10 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/mips/arch/current/ChangeLog +++ b/packages/hal/mips/arch/current/ChangeLog @@ -1,3 +1,7 @@ +2000-10-20 Jesper Skov <jskov@redhat.com> + + * src/hal_misc.c: Update __mem_fault_handler declaration. + 2000-09-15 Jesper Skov <jskov@redhat.com> * include/hal_intr.h (HAL_DEFAULT_ISR): Fix warning.
--- a/packages/hal/mips/arch/current/src/hal_misc.c +++ b/packages/hal/mips/arch/current/src/hal_misc.c @@ -73,7 +73,7 @@ externC void __handle_exception (void); externC HAL_SavedRegisters *_hal_registers; -externC void *__mem_fault_handler; +externC void* volatile __mem_fault_handler; externC cyg_uint8 cyg_hal_mips_process_fpe( HAL_SavedRegisters *regs );
--- a/packages/hal/mips/jmr3904/current/ChangeLog +++ b/packages/hal/mips/jmr3904/current/ChangeLog @@ -1,3 +1,15 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_mips_tx39_jmr3904_ram.mlt: + * include/pkgconf/mlt_mips_tx39_jmr3904_rom.mlt: + Add heap1 section + + * include/pkgconf/mlt_mips_tx39_jmr3904_ram.h: + * include/pkgconf/mlt_mips_tx39_jmr3904_rom.h: + * include/pkgconf/mlt_mips_tx39_jmr3904_ram.ldi: + * include/pkgconf/mlt_mips_tx39_jmr3904_rom.ldi: + Regenerated + 2000-09-11 Jesper Skov <jskov@redhat.com> * cdl/hal_mips_tx39_jmr3904.cdl: Fix startup type description.
--- a/packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_ram.h +++ b/packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_ram.h @@ -1,10 +1,17 @@ -// eCos memory layout - Thu Mar 16 16:19:05 2000 +// eCos memory layout - Fri Oct 20 06:19:41 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 (0x80008000) #define CYGMEM_REGION_ram_SIZE (0x78000) #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 (0x80080000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_ram.ldi +++ b/packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_ram.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Mon Apr 03 21:03:12 2000 +// eCos memory layout - Fri Oct 20 06:19:41 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0x80008000, LENGTH = 0x78000 @@ -32,5 +34,6 @@ SECTIONS 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 }
--- a/packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_ram.mlt +++ b/packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_ram.mlt @@ -21,4 +21,5 @@ 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 0 0 0 ! +section bss 0 8 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_rom.h +++ b/packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_rom.h @@ -1,13 +1,20 @@ -// eCos memory layout - Thu Mar 16 16:47:52 2000 +// eCos memory layout - Fri Oct 20 06:20: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 (0x80000200) #define CYGMEM_REGION_ram_SIZE (0x7fe00) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) #define CYGMEM_REGION_rom (0xbfc00000) #define CYGMEM_REGION_rom_SIZE (0x80000) #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 (0x80080000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_rom.ldi +++ b/packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_rom.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Wed May 10 18:37:59 2000 +// eCos memory layout - Fri Oct 20 06:20:57 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0x80000200, LENGTH = 0x7fe00 @@ -33,5 +35,6 @@ SECTIONS 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 }
--- a/packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_rom.mlt +++ b/packages/hal/mips/jmr3904/current/include/pkgconf/mlt_mips_tx39_jmr3904_rom.mlt @@ -14,7 +14,8 @@ 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 0 0 0 ! +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 !
--- a/packages/hal/mips/sim/current/ChangeLog +++ b/packages/hal/mips/sim/current/ChangeLog @@ -1,3 +1,15 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_mips_tx39_sim_ram.mlt: + * include/pkgconf/mlt_mips_vr4300_sim_ram.mlt: + Add heap1 section + + * include/pkgconf/mlt_mips_tx39_sim_ram.h: + * include/pkgconf/mlt_mips_vr4300_sim_ram.h: + * include/pkgconf/mlt_mips_tx39_sim_ram.ldi: + * include/pkgconf/mlt_mips_vr4300_sim_ram.ldi: + Regenerated + 2000-05-22 Jesper Skov <jskov@redhat.com> * cdl/hal_mips_sim.cdl: Doesn't support CTRLC.
--- a/packages/hal/mips/sim/current/include/pkgconf/mlt_mips_tx39_sim_ram.h +++ b/packages/hal/mips/sim/current/include/pkgconf/mlt_mips_tx39_sim_ram.h @@ -1,10 +1,17 @@ -// eCos memory layout - Thu Mar 16 16:55:45 2000 +// eCos memory layout - Fri Oct 20 06:24:07 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 (0x80000) #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 (0x80080000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/mips/sim/current/include/pkgconf/mlt_mips_tx39_sim_ram.ldi +++ b/packages/hal/mips/sim/current/include/pkgconf/mlt_mips_tx39_sim_ram.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Mon Apr 03 21:10:37 2000 +// eCos memory layout - Fri Oct 20 06:24:07 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0x80000000, LENGTH = 0x80000 @@ -33,5 +35,6 @@ SECTIONS 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 }
--- a/packages/hal/mips/sim/current/include/pkgconf/mlt_mips_tx39_sim_ram.mlt +++ b/packages/hal/mips/sim/current/include/pkgconf/mlt_mips_tx39_sim_ram.mlt @@ -22,4 +22,5 @@ section sdata 0 8 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 0 0 0 ! +section bss 0 8 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/mips/sim/current/include/pkgconf/mlt_mips_vr4300_sim_ram.h +++ b/packages/hal/mips/sim/current/include/pkgconf/mlt_mips_vr4300_sim_ram.h @@ -1,10 +1,17 @@ -// eCos memory layout - Thu Nov 25 22:16:12 1999 +// eCos memory layout - Fri Oct 20 06:25:00 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 (0x80000) #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 (0x80080000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/mips/sim/current/include/pkgconf/mlt_mips_vr4300_sim_ram.ldi +++ b/packages/hal/mips/sim/current/include/pkgconf/mlt_mips_vr4300_sim_ram.ldi @@ -1,32 +1,8 @@ -//=========================================================================== -// -// MLT linker script export - Wed Jan 13 10:41:43 1999 -// -//=========================================================================== -//####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#### -//=========================================================================== +// eCos memory layout - Fri Oct 20 06:25:00 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> MEMORY { @@ -49,5 +25,6 @@ SECTIONS SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA) SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/mips/sim/current/include/pkgconf/mlt_mips_vr4300_sim_ram.mlt +++ b/packages/hal/mips/sim/current/include/pkgconf/mlt_mips_vr4300_sim_ram.mlt @@ -12,4 +12,5 @@ section fixup 0 1 0 1 0 1 0 1 rel.dyn re section rel.dyn 0 1 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 4 0 1 0 0 0 0 ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/mips/tx39/current/ChangeLog +++ b/packages/hal/mips/tx39/current/ChangeLog @@ -1,3 +1,8 @@ +2000-10-20 Jesper Skov <jskov@redhat.com> + + * include/var_cache.h (HAL_DCACHE_INVALIDATE_ALL): Move volatile + keyword before type. + 2000-08-03 Jonathan Larmour <jlarmour@redhat.co.uk> * src/mips_tx39.ld: Revert below change. It was correct before.
--- a/packages/hal/mips/tx39/current/include/var_cache.h +++ b/packages/hal/mips/tx39/current/include/var_cache.h @@ -117,15 +117,15 @@ // otherwise. Hence we read bytes from the ROM space since this is // most likely to be code, and will not get out of sync even if it is not. #define HAL_DCACHE_INVALIDATE_ALL_DEFINED -#define HAL_DCACHE_INVALIDATE_ALL() \ -{ \ - CYG_BYTE volatile *addr = (CYG_BYTE *)(0x9fc00000); \ - CYG_BYTE volatile tmp = 0; \ - int i; \ - for( i = 0; i < (HAL_DCACHE_SIZE*2); i += HAL_DCACHE_LINE_SIZE ) \ - { \ - tmp = addr[i]; \ - } \ +#define HAL_DCACHE_INVALIDATE_ALL() \ +{ \ + volatile CYG_BYTE *addr = (CYG_BYTE *)(0x9fc00000); \ + volatile CYG_BYTE tmp = 0; \ + int i; \ + for( i = 0; i < (HAL_DCACHE_SIZE*2); i += HAL_DCACHE_LINE_SIZE ) \ + { \ + tmp = addr[i]; \ + } \ } // Synchronize the contents of the cache with memory.
--- a/packages/hal/mips/vrc4373/current/ChangeLog +++ b/packages/hal/mips/vrc4373/current/ChangeLog @@ -1,3 +1,18 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_mips_vr4300_vrc4373_ram.mlt: + * include/pkgconf/mlt_mips_vr4300_vrc4373_rom.mlt: + * include/pkgconf/mlt_mips_vr4300_vrc4373_romram.mlt: + Add heap1 section + + * include/pkgconf/mlt_mips_vr4300_vrc4373_ram.h: + * include/pkgconf/mlt_mips_vr4300_vrc4373_rom.h: + * include/pkgconf/mlt_mips_vr4300_vrc4373_romram.h: + * include/pkgconf/mlt_mips_vr4300_vrc4373_ram.ldi: + * include/pkgconf/mlt_mips_vr4300_vrc4373_rom.ldi: + * include/pkgconf/mlt_mips_vr4300_vrc4373_romram.ldi: + Regenerated + 2000-09-15 Nick Garnett <nickg@cygnus.co.uk> * include/platform.inc: Added some extra ifdefs and code to try
--- a/packages/hal/mips/vrc4373/current/include/pkgconf/mlt_mips_vr4300_vrc4373_ram.h +++ b/packages/hal/mips/vrc4373/current/include/pkgconf/mlt_mips_vr4300_vrc4373_ram.h @@ -1,10 +1,17 @@ -// eCos memory layout - Wed Nov 24 13:39:59 1999 +// eCos memory layout - Fri Oct 20 06:25:55 2000 -// This is a generated file - changes will be lost if ConfigTool(MLT) is run +// This is a generated file - do not edit +#ifndef __ASSEMBLER__ #include <cyg/infra/cyg_type.h> #include <stddef.h> +#endif #define CYGMEM_REGION_ram (0x80100000) #define CYGMEM_REGION_ram_SIZE (0x500000) #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 (0x80600000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/mips/vrc4373/current/include/pkgconf/mlt_mips_vr4300_vrc4373_ram.ldi +++ b/packages/hal/mips/vrc4373/current/include/pkgconf/mlt_mips_vr4300_vrc4373_ram.ldi @@ -1,32 +1,8 @@ -//=========================================================================== -// -// MLT linker script export - Wed Jan 13 17:05:29 1999 -// -//=========================================================================== -//####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#### -//=========================================================================== +// eCos memory layout - Fri Oct 20 06:25:55 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> MEMORY { @@ -48,5 +24,6 @@ SECTIONS SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA) SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/mips/vrc4373/current/include/pkgconf/mlt_mips_vr4300_vrc4373_ram.mlt +++ b/packages/hal/mips/vrc4373/current/include/pkgconf/mlt_mips_vr4300_vrc4373_ram.mlt @@ -11,4 +11,5 @@ section fixup 0 1 0 1 0 1 0 1 rel.dyn re section rel.dyn 0 1 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 4 0 1 0 0 0 0 ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/mips/vrc4373/current/include/pkgconf/mlt_mips_vr4300_vrc4373_rom.h +++ b/packages/hal/mips/vrc4373/current/include/pkgconf/mlt_mips_vr4300_vrc4373_rom.h @@ -1,16 +1,20 @@ -// eCos memory layout - Wed Nov 24 13:41:30 1999 +// eCos memory layout - Fri Oct 20 07:10:03 2000 -// This is a generated file - changes will be lost if ConfigTool(MLT) is run +// This is a generated file - do not edit +#ifndef __ASSEMBLER__ #include <cyg/infra/cyg_type.h> #include <stddef.h> -#define CYGMEM_REGION_ram (0x80000200) -#define CYGMEM_REGION_ram_SIZE (0x7fe00) +#endif +#define CYGMEM_REGION_ram (0x80000800) +#define CYGMEM_REGION_ram_SIZE (0x7f800) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) #define CYGMEM_REGION_rom (0xbfc00000) #define CYGMEM_REGION_rom_SIZE (0x80000) #define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) -/* */ -/* {{CFG_DATA */ -/* }}CFG_DATA */ +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x80080000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/mips/vrc4373/current/include/pkgconf/mlt_mips_vr4300_vrc4373_rom.ldi +++ b/packages/hal/mips/vrc4373/current/include/pkgconf/mlt_mips_vr4300_vrc4373_rom.ldi @@ -1,43 +1,19 @@ -//=========================================================================== -// -// MLT linker script export - Wed Jan 13 10:44:34 1999 -// -//=========================================================================== -//####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#### -//=========================================================================== +// eCos memory layout - Fri Oct 20 07:10:03 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> MEMORY { - ram : ORIGIN = 0x80000800, LENGTH = 0x7F800 - rom : ORIGIN = 0xBFC00000, LENGTH = 0x80000 + ram : ORIGIN = 0x80000800, LENGTH = 0x7f800 + rom : ORIGIN = 0xbfc00000, LENGTH = 0x80000 } SECTIONS { SECTIONS_BEGIN - SECTION_rom_vectors (rom, 0xBFC00000, LMA_EQ_VMA) + SECTION_rom_vectors (rom, 0xbfc00000, LMA_EQ_VMA) SECTION_text (rom, ALIGN (0x1), LMA_EQ_VMA) SECTION_fini (rom, ALIGN (0x1), LMA_EQ_VMA) SECTION_ctors (rom, ALIGN (0x1), LMA_EQ_VMA) @@ -49,5 +25,6 @@ SECTIONS SECTION_gcc_except_table (rom, ALIGN (0x1), LMA_EQ_VMA) SECTION_data (ram, 0x80000800, FOLLOWING (.gcc_except_table)) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/mips/vrc4373/current/include/pkgconf/mlt_mips_vr4300_vrc4373_rom.mlt +++ b/packages/hal/mips/vrc4373/current/include/pkgconf/mlt_mips_vr4300_vrc4373_rom.mlt @@ -1,8 +1,9 @@ version 0 -region ram 80000200 7fe00 0 ! +region ram 80000800 7f800 0 ! region rom bfc00000 80000 1 ! -section data 0 1 1 1 1 1 0 0 80000200 bss ! -section bss 0 4 0 1 0 0 0 0 ! +section data 0 1 1 1 1 1 0 0 80000800 bss ! +section bss 0 4 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 text text ! section text 0 1 0 1 0 1 0 1 fini fini ! section fini 0 1 0 1 0 1 0 1 ctors ctors !
--- a/packages/hal/mips/vrc4373/current/include/pkgconf/mlt_mips_vr4300_vrc4373_romram.h +++ b/packages/hal/mips/vrc4373/current/include/pkgconf/mlt_mips_vr4300_vrc4373_romram.h @@ -1,10 +1,17 @@ -// eCos memory layout - Thu Nov 25 06:54:39 1999 +// eCos memory layout - Fri Oct 20 06:27:12 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 (0x500000) #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 (0x80500000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/mips/vrc4373/current/include/pkgconf/mlt_mips_vr4300_vrc4373_romram.ldi +++ b/packages/hal/mips/vrc4373/current/include/pkgconf/mlt_mips_vr4300_vrc4373_romram.ldi @@ -1,6 +1,8 @@ -// eCos memory layout - Thu Nov 25 06:54:39 1999 +// eCos memory layout - Fri Oct 20 06:27:12 2000 -// This is a generated file - changes will be lost if ConfigTool(MLT) is run +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> MEMORY { @@ -22,5 +24,6 @@ SECTIONS SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA) SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/mips/vrc4373/current/include/pkgconf/mlt_mips_vr4300_vrc4373_romram.mlt +++ b/packages/hal/mips/vrc4373/current/include/pkgconf/mlt_mips_vr4300_vrc4373_romram.mlt @@ -11,4 +11,5 @@ section fixup 0 1 0 1 0 1 0 1 rel.dyn re section rel.dyn 0 1 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 4 0 1 0 0 0 0 ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/mn10300/arch/current/ChangeLog +++ b/packages/hal/mn10300/arch/current/ChangeLog @@ -1,3 +1,7 @@ +2000-10-20 Jesper Skov <jskov@redhat.com> + + * src/hal_misc.c: Update __mem_fault_handler declaration. + 2000-09-04 Jonathan Larmour <jlarmour@redhat.com> * include/basetype.h (CYGARC_ALIGNMENT): mn10300 has 4 byte alignment
--- a/packages/hal/mn10300/arch/current/src/hal_misc.c +++ b/packages/hal/mn10300/arch/current/src/hal_misc.c @@ -156,7 +156,7 @@ externC void __handle_exception (void); externC HAL_SavedRegisters *_hal_registers; -externC void *__mem_fault_handler; +externC void* volatile __mem_fault_handler; externC cyg_uint32 cyg_hal_exception_handler(HAL_SavedRegisters *regs, CYG_WORD32 isr)
--- a/packages/hal/mn10300/sim/current/ChangeLog +++ b/packages/hal/mn10300/sim/current/ChangeLog @@ -1,3 +1,12 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_mn10300_am31_sim_ram.mlt: + Add heap1 section + + * include/pkgconf/mlt_mn10300_am31_sim_ram.h: + * include/pkgconf/mlt_mn10300_am31_sim_ram.ldi: + Regenerated + 2000-02-16 Jesper Skov <jskov@redhat.com> * cdl/hal_mn10300_am31_sim.cdl: removed fix me
--- a/packages/hal/mn10300/sim/current/include/pkgconf/mlt_mn10300_am31_sim_ram.h +++ b/packages/hal/mn10300/sim/current/include/pkgconf/mlt_mn10300_am31_sim_ram.h @@ -1,10 +1,17 @@ -// eCos memory layout - Wed Nov 24 13:10:23 1999 +// eCos memory layout - Fri Oct 20 08:25:16 2000 -// This is a generated file - changes will be lost if ConfigTool(MLT) is run +// This is a generated file - do not edit +#ifndef __ASSEMBLER__ #include <cyg/infra/cyg_type.h> #include <stddef.h> +#endif #define CYGMEM_REGION_ram (0x48000000) -#define CYGMEM_REGION_ram_SIZE (0x200000) +#define CYGMEM_REGION_ram_SIZE (0x400000) #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 (0x48400000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/mn10300/sim/current/include/pkgconf/mlt_mn10300_am31_sim_ram.ldi +++ b/packages/hal/mn10300/sim/current/include/pkgconf/mlt_mn10300_am31_sim_ram.ldi @@ -1,42 +1,18 @@ -//=========================================================================== -// -// MLT linker script export - Tue Jan 12 11:09:07 1999 -// -//=========================================================================== -//####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#### -//=========================================================================== +// eCos memory layout - Fri Oct 20 08:25:16 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> MEMORY { - ram : ORIGIN = 0x40000000, LENGTH = 0x200000 + ram : ORIGIN = 0x48000000, LENGTH = 0x400000 } SECTIONS { SECTIONS_BEGIN - SECTION_rom_vectors (ram, 0x40000000, LMA_EQ_VMA) + SECTION_rom_vectors (ram, 0x48000000, LMA_EQ_VMA) SECTION_text (ram, ALIGN (0x1), LMA_EQ_VMA) SECTION_fini (ram, ALIGN (0x1), LMA_EQ_VMA) SECTION_rodata (ram, ALIGN (0x1), LMA_EQ_VMA) @@ -45,5 +21,6 @@ SECTIONS SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA) SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/mn10300/sim/current/include/pkgconf/mlt_mn10300_am31_sim_ram.mlt +++ b/packages/hal/mn10300/sim/current/include/pkgconf/mlt_mn10300_am31_sim_ram.mlt @@ -1,5 +1,5 @@ version 0 -region ram 48000000 200000 0 ! +region ram 48000000 400000 0 ! section rom_vectors 0 1 0 1 1 1 1 1 48000000 48000000 text text ! section text 0 1 0 1 0 1 0 1 fini fini ! section fini 0 1 0 1 0 1 0 1 rodata rodata ! @@ -8,4 +8,5 @@ section rodata1 0 1 0 1 0 1 0 1 fixup fi section fixup 0 1 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 4 0 1 0 1 0 1 bss bss ! -section bss 0 4 0 1 0 0 0 0 ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/mn10300/stb/current/ChangeLog +++ b/packages/hal/mn10300/stb/current/ChangeLog @@ -1,3 +1,15 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_mn10300_am33_stb_ram.mlt: + * include/pkgconf/mlt_mn10300_am33_stb_rom.mlt: + Add heap1 section + + * include/pkgconf/mlt_mn10300_am33_stb_ram.h: + * include/pkgconf/mlt_mn10300_am33_stb_rom.h: + * include/pkgconf/mlt_mn10300_am33_stb_ram.ldi: + * include/pkgconf/mlt_mn10300_am33_stb_rom.ldi: + Regenerated + 2000-03-20 Jonathan Larmour <jlarmour@redhat.co.uk> * src/plf_stub.c (cyg_hal_gdb_isr): Use serial 0 interrupt macros
--- a/packages/hal/mn10300/stb/current/include/pkgconf/mlt_mn10300_am33_stb_ram.h +++ b/packages/hal/mn10300/stb/current/include/pkgconf/mlt_mn10300_am33_stb_ram.h @@ -1,10 +1,17 @@ -// eCos memory layout - Wed Nov 24 15:32:18 1999 +// eCos memory layout - Fri Oct 20 09:08:16 2000 -// This is a generated file - changes will be lost if ConfigTool(MLT) is run +// This is a generated file - do not edit +#ifndef __ASSEMBLER__ #include <cyg/infra/cyg_type.h> #include <stddef.h> -#define CYGMEM_REGION_ram (0x48008000) -#define CYGMEM_REGION_ram_SIZE (0x1f8000) +#endif +#define CYGMEM_REGION_ram (0x50080000) +#define CYGMEM_REGION_ram_SIZE (0x400000) #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 (0x50480000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/mn10300/stb/current/include/pkgconf/mlt_mn10300_am33_stb_ram.ldi +++ b/packages/hal/mn10300/stb/current/include/pkgconf/mlt_mn10300_am33_stb_ram.ldi @@ -1,32 +1,8 @@ -//=========================================================================== -// -// MLT linker script export - Tue Jan 12 10:55:38 1999 -// -//=========================================================================== -//####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#### -//=========================================================================== +// eCos memory layout - Fri Oct 20 09:08:16 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> MEMORY { @@ -45,5 +21,6 @@ SECTIONS SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA) SECTION_data (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/mn10300/stb/current/include/pkgconf/mlt_mn10300_am33_stb_ram.mlt +++ b/packages/hal/mn10300/stb/current/include/pkgconf/mlt_mn10300_am33_stb_ram.mlt @@ -1,6 +1,6 @@ version 0 -region ram 48008000 1f8000 0 ! -section rom_vectors 0 1 0 1 1 1 1 1 48008000 48008000 text text ! +region ram 50080000 400000 0 ! +section rom_vectors 0 1 0 1 1 1 1 1 50080000 50080000 text text ! section text 0 1 0 1 0 1 0 1 fini fini ! section fini 0 1 0 1 0 1 0 1 rodata rodata ! section rodata 0 1 0 1 0 1 0 1 rodata1 rodata1 ! @@ -8,4 +8,5 @@ section rodata1 0 1 0 1 0 1 0 1 fixup fi section fixup 0 1 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 4 0 1 0 1 0 1 bss bss ! -section bss 0 4 0 1 0 0 0 0 ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/mn10300/stb/current/include/pkgconf/mlt_mn10300_am33_stb_rom.h +++ b/packages/hal/mn10300/stb/current/include/pkgconf/mlt_mn10300_am33_stb_rom.h @@ -1,13 +1,20 @@ -// eCos memory layout - Wed Nov 24 13:00:37 1999 +// eCos memory layout - Fri Oct 20 09:14:22 2000 -// This is a generated file - changes will be lost if ConfigTool(MLT) is run +// This is a generated file - do not edit +#ifndef __ASSEMBLER__ #include <cyg/infra/cyg_type.h> #include <stddef.h> +#endif #define CYGMEM_REGION_rom (0x40000000) -#define CYGMEM_REGION_rom_SIZE (0x80000) +#define CYGMEM_REGION_rom_SIZE (0x400000) #define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) -#define CYGMEM_REGION_ram (0x48000000) -#define CYGMEM_REGION_ram_SIZE (0x200000) +#define CYGMEM_REGION_ram (0x50000400) +#define CYGMEM_REGION_ram_SIZE (0x800000) #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 (0x50800400 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/mn10300/stb/current/include/pkgconf/mlt_mn10300_am33_stb_rom.ldi +++ b/packages/hal/mn10300/stb/current/include/pkgconf/mlt_mn10300_am33_stb_rom.ldi @@ -1,32 +1,8 @@ -//=========================================================================== -// -// MLT linker script export - Tue Jan 13 10:14:27 1999 -// -//=========================================================================== -//####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#### -//=========================================================================== +// eCos memory layout - Fri Oct 20 09:14:22 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> MEMORY { @@ -46,5 +22,6 @@ SECTIONS SECTION_gcc_except_table (rom, ALIGN (0x1), LMA_EQ_VMA) SECTION_data (ram, 0x50000400, FOLLOWING (.gcc_except_table)) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/mn10300/stb/current/include/pkgconf/mlt_mn10300_am33_stb_rom.mlt +++ b/packages/hal/mn10300/stb/current/include/pkgconf/mlt_mn10300_am33_stb_rom.mlt @@ -1,6 +1,6 @@ version 0 -region rom 40000000 80000 1 ! -region ram 48000000 200000 0 ! +region rom 40000000 400000 1 ! +region ram 50000400 800000 0 ! section rom_vectors 0 1 0 1 1 1 1 1 40000000 40000000 text text ! section text 0 1 0 1 0 1 0 1 fini fini ! section fini 0 1 0 1 0 1 0 1 rodata rodata ! @@ -8,5 +8,6 @@ section rodata 0 1 0 1 0 1 0 1 rodata1 r section rodata1 0 1 0 1 0 1 0 1 fixup fixup ! section fixup 0 1 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 ! -section data 0 1 1 1 1 1 0 0 48000000 bss ! -section bss 0 4 0 1 0 0 0 0 ! +section data 0 1 1 1 1 1 0 0 50000400 bss ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/mn10300/stdeval1/current/ChangeLog +++ b/packages/hal/mn10300/stdeval1/current/ChangeLog @@ -1,3 +1,11 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_mn10300_am31_stdeval1_ram.h: + * include/pkgconf/mlt_mn10300_am31_stdeval1_rom.h: + * include/pkgconf/mlt_mn10300_am31_stdeval1_ram.ldi: + * include/pkgconf/mlt_mn10300_am31_stdeval1_rom.ldi: + Regenerated + 2000-07-25 Jonathan Larmour <jlarmour@redhat.co.uk> * include/pkgconf/mlt_mn10300_am31_stdeval1_ram.mlt: Add user-defined
--- a/packages/hal/mn10300/stdeval1/current/include/pkgconf/mlt_mn10300_am31_stdeval1_ram.h +++ b/packages/hal/mn10300/stdeval1/current/include/pkgconf/mlt_mn10300_am31_stdeval1_ram.h @@ -1,13 +1,17 @@ -// eCos memory layout - Tue Jul 25 19:35:27 2000 +// eCos memory layout - Fri Oct 20 08:26: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 (0x48008000) #define CYGMEM_REGION_ram_SIZE (0x1f8000) #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 (0x48200000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/mn10300/stdeval1/current/include/pkgconf/mlt_mn10300_am31_stdeval1_ram.ldi +++ b/packages/hal/mn10300/stdeval1/current/include/pkgconf/mlt_mn10300_am31_stdeval1_ram.ldi @@ -1,4 +1,4 @@ -// eCos memory layout - Tue Jul 25 19:35:27 2000 +// eCos memory layout - Fri Oct 20 08:26:30 2000 // This is a generated file - do not edit
--- a/packages/hal/mn10300/stdeval1/current/include/pkgconf/mlt_mn10300_am31_stdeval1_rom.h +++ b/packages/hal/mn10300/stdeval1/current/include/pkgconf/mlt_mn10300_am31_stdeval1_rom.h @@ -1,16 +1,20 @@ -// eCos memory layout - Tue Jul 25 19:36:26 2000 +// eCos memory layout - Fri Oct 20 08:27:18 2000 // This is a generated file - do not edit +#ifndef __ASSEMBLER__ #include <cyg/infra/cyg_type.h> #include <stddef.h> +#endif #define CYGMEM_REGION_rom (0x40000000) #define CYGMEM_REGION_rom_SIZE (0x80000) #define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) #define CYGMEM_REGION_ram (0x48000000) #define CYGMEM_REGION_ram_SIZE (0x200000) #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 (0x48200000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/mn10300/stdeval1/current/include/pkgconf/mlt_mn10300_am31_stdeval1_rom.ldi +++ b/packages/hal/mn10300/stdeval1/current/include/pkgconf/mlt_mn10300_am31_stdeval1_rom.ldi @@ -1,4 +1,4 @@ -// eCos memory layout - Tue Jul 25 19:36:26 2000 +// eCos memory layout - Fri Oct 20 08:27:18 2000 // This is a generated file - do not edit
--- a/packages/hal/powerpc/arch/current/ChangeLog +++ b/packages/hal/powerpc/arch/current/ChangeLog @@ -1,3 +1,17 @@ +2000-10-20 Jesper Skov <jskov@redhat.com> + + * src/hal_misc.c: Update __mem_fault_handler declaration. + +2000-10-20 Gary Thomas <gthomas@redhat.com> + + * src/hal_intr.c (hal_delay_us): + * include/hal_intr.h (HAL_DELAY_US): New function. + +2000-10-16 Jonathan Larmour <jlarmour@redhat.com> + + * include/hal_arch.h (CYGARC_JMP_BUF_SIZE): Define hal_jmp_buf + in terms of this. + 2000-08-15 Gary Thomas <gthomas@redhat.com> * src/hal_mk_defs.c: Export memory layout for use by assembly code.
--- a/packages/hal/powerpc/arch/current/include/hal_arch.h +++ b/packages/hal/powerpc/arch/current/include/hal_arch.h @@ -254,7 +254,9 @@ typedef struct { cyg_uint32 cr; } hal_jmp_buf_t; -typedef cyg_uint32 hal_jmp_buf[sizeof(hal_jmp_buf_t) / sizeof(cyg_uint32)]; +#define CYGARC_JMP_BUF_SIZE (sizeof(hal_jmp_buf_t) / sizeof(cyg_uint32)) + +typedef cyg_uint32 hal_jmp_buf[ CYGARC_JMP_BUF_SIZE ]; externC int hal_setjmp(hal_jmp_buf env); externC void hal_longjmp(hal_jmp_buf env, int val);
--- a/packages/hal/powerpc/arch/current/include/hal_intr.h +++ b/packages/hal/powerpc/arch/current/include/hal_intr.h @@ -392,6 +392,9 @@ externC void cyg_hal_default_exception_v CYG_MACRO_END #endif +extern void hal_delay_us(int); +#define HAL_DELAY_US(n) hal_delay_us(n) + //-------------------------------------------------------------------------- // Variant functions externC void hal_variant_IRQ_init(void);
--- a/packages/hal/powerpc/arch/current/src/hal_intr.c +++ b/packages/hal/powerpc/arch/current/src/hal_intr.c @@ -52,6 +52,31 @@ hal_IRQ_init(void) // No architecture general initialization, but the variant may have // provided some. hal_variant_IRQ_init(); + + // Initialize real-time clock (for delays, etc, even if kernel doesn't use it) + HAL_CLOCK_INITIALIZE(CYGNUM_HAL_RTC_PERIOD); +} + +// Delay for some number of useconds. +externC void +hal_delay_us(int us) +{ + cyg_uint32 old_dec, new_dec; + long ticks; + // Note: the system constant CYGNUM_HAL_RTC_PERIOD corresponds to 10,000us + // Scale the desired number of microseconds to be a number of decrementer ticks + if (CYGNUM_HAL_RTC_PERIOD > 10000) { + ticks = us * (CYGNUM_HAL_RTC_PERIOD * 100) / 1000000; + } else { + ticks = us / (CYGNUM_HAL_RTC_PERIOD * 100) / 1000000; + } + asm volatile("mfdec %0;" : "=r"(old_dec) : ); + while (ticks-- > 0) { + do { + asm volatile("mfdec %0;" : "=r"(new_dec) : ); + } while (old_dec == new_dec); + old_dec = new_dec; + } } // -------------------------------------------------------------------------
--- a/packages/hal/powerpc/arch/current/src/hal_misc.c +++ b/packages/hal/powerpc/arch/current/src/hal_misc.c @@ -105,7 +105,7 @@ externC void __handle_exception (void); externC HAL_SavedRegisters *_hal_registers; -externC void *__mem_fault_handler; +externC void* volatile __mem_fault_handler; void cyg_hal_exception_handler(HAL_SavedRegisters *regs)
--- a/packages/hal/powerpc/cogent/current/ChangeLog +++ b/packages/hal/powerpc/cogent/current/ChangeLog @@ -1,3 +1,20 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_powerpc_cogent_ram.h: + * include/pkgconf/mlt_powerpc_cogent_rom.h: + * include/pkgconf/mlt_powerpc_cogent_ram.ldi: + * include/pkgconf/mlt_powerpc_cogent_rom.ldi: + Regenerated with updated host tools + +2000-10-19 Jesper Skov <jskov@redhat.com> + + * include/pkgconf/mlt_powerpc_cogent_ram.h: Added heap1 label. + * include/pkgconf/mlt_powerpc_cogent_ram.mlt: Same. + * include/pkgconf/mlt_powerpc_cogent_ram.ldi: Same. + * include/pkgconf/mlt_powerpc_cogent_rom.h: Same. + * include/pkgconf/mlt_powerpc_cogent_rom.mlt: Same. + * include/pkgconf/mlt_powerpc_cogent_rom.ldi: Same. + 2000-06-30 Jesper Skov <jskov@redhat.com> * src/plf_stub.c (hal_plf_stub_init): calling i/f macro
--- a/packages/hal/powerpc/cogent/current/include/pkgconf/mlt_powerpc_cogent_ram.h +++ b/packages/hal/powerpc/cogent/current/include/pkgconf/mlt_powerpc_cogent_ram.h @@ -1,22 +1,37 @@ -// eCos memory layout - Tue Jun 20 10:13:16 2000 +// eCos memory layout - Fri Oct 20 10:25:48 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 (0) #define CYGMEM_REGION_ram_SIZE (0x800000) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) -extern char CYG_LABEL_NAME (_reserved_vectors) []; -#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (_reserved_vectors)) +#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 (0x3000) -extern char CYG_LABEL_NAME (_reserved_vsr_table) []; -#define CYGMEM_SECTION_reserved_vsr_table (CYG_LABEL_NAME (_reserved_vsr_table)) +#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 (0x200) -extern char CYG_LABEL_NAME (_reserved_virtual_table) []; -#define CYGMEM_SECTION_reserved_virtual_table (CYG_LABEL_NAME (_reserved_virtual_table)) +#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) -extern char CYG_LABEL_NAME (_reserved_for_rom) []; -#define CYGMEM_SECTION_reserved_for_rom (CYG_LABEL_NAME (_reserved_for_rom)) +#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 (0xcd00) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x800000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/powerpc/cogent/current/include/pkgconf/mlt_powerpc_cogent_ram.ldi +++ b/packages/hal/powerpc/cogent/current/include/pkgconf/mlt_powerpc_cogent_ram.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Tue Jun 20 10:13:16 2000 +// eCos memory layout - Fri Oct 20 10:25:48 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0, LENGTH = 0x800000 @@ -10,10 +12,10 @@ MEMORY SECTIONS { SECTIONS_BEGIN - __reserved_vectors = 0; . = __reserved_vectors + 0x3000; - __reserved_vsr_table = ALIGN (0x10); . = __reserved_vsr_table + 0x200; - __reserved_virtual_table = ALIGN (0x10); . = __reserved_virtual_table + 0x100; - __reserved_for_rom = ALIGN (0x10); . = __reserved_for_rom + 0xcd00; + CYG_LABEL_DEFN(__reserved_vectors) = 0; . = CYG_LABEL_DEFN(__reserved_vectors) + 0x3000; + CYG_LABEL_DEFN(__reserved_vsr_table) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_vsr_table) + 0x200; + 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) + 0xcd00; SECTION_vectors (ram, ALIGN (0x10), LMA_EQ_VMA) SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) @@ -24,5 +26,6 @@ SECTIONS SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) SECTION_sbss (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/powerpc/cogent/current/include/pkgconf/mlt_powerpc_cogent_ram.mlt +++ b/packages/hal/powerpc/cogent/current/include/pkgconf/mlt_powerpc_cogent_ram.mlt @@ -13,4 +13,5 @@ section fixup 0 4 0 1 0 1 0 1 gcc_except section gcc_except_table 0 1 0 1 0 1 0 1 data data ! section data 0 8 0 1 0 1 0 1 sbss sbss ! section sbss 0 4 0 1 0 1 0 1 bss bss ! -section bss 0 10 0 1 0 0 0 0 ! +section bss 0 10 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/powerpc/cogent/current/include/pkgconf/mlt_powerpc_cogent_rom.h +++ b/packages/hal/powerpc/cogent/current/include/pkgconf/mlt_powerpc_cogent_rom.h @@ -1,22 +1,35 @@ -// eCos memory layout - Tue Jun 20 10:15:36 2000 +// eCos memory layout - Fri Oct 20 10:26:12 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 (0) #define CYGMEM_REGION_ram_SIZE (0x800000) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) #define CYGMEM_REGION_rom (0xfff00000) #define CYGMEM_REGION_rom_SIZE (0x40000) #define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) -extern char CYG_LABEL_NAME (_reserved_vectors) []; -#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (_reserved_vectors)) +#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 (0x3000) -extern char CYG_LABEL_NAME (_reserved_vsr_table) []; -#define CYGMEM_SECTION_reserved_vsr_table (CYG_LABEL_NAME (_reserved_vsr_table)) +#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 (0x200) -extern char CYG_LABEL_NAME (_reserved_virtual_table) []; -#define CYGMEM_SECTION_reserved_virtual_table (CYG_LABEL_NAME (_reserved_virtual_table)) +#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 (0x800000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/powerpc/cogent/current/include/pkgconf/mlt_powerpc_cogent_rom.ldi +++ b/packages/hal/powerpc/cogent/current/include/pkgconf/mlt_powerpc_cogent_rom.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Tue Jun 20 10:15:36 2000 +// eCos memory layout - Fri Oct 20 10:26:12 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0, LENGTH = 0x800000 @@ -18,11 +20,12 @@ SECTIONS SECTION_rodata (rom, ALIGN (0x4), LMA_EQ_VMA) SECTION_fixup (rom, ALIGN (0x4), LMA_EQ_VMA) SECTION_gcc_except_table (rom, ALIGN (0x1), LMA_EQ_VMA) - __reserved_vectors = 0; . = __reserved_vectors + 0x3000; - __reserved_vsr_table = ALIGN (0x10); . = __reserved_vsr_table + 0x200; - __reserved_virtual_table = ALIGN (0x10); . = __reserved_virtual_table + 0x100; + CYG_LABEL_DEFN(__reserved_vectors) = 0; . = CYG_LABEL_DEFN(__reserved_vectors) + 0x3000; + CYG_LABEL_DEFN(__reserved_vsr_table) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_vsr_table) + 0x200; + CYG_LABEL_DEFN(__reserved_virtual_table) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_virtual_table) + 0x100; SECTION_data (ram, ALIGN (0x10), FOLLOWING (.gcc_except_table)) SECTION_sbss (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/powerpc/cogent/current/include/pkgconf/mlt_powerpc_cogent_rom.mlt +++ b/packages/hal/powerpc/cogent/current/include/pkgconf/mlt_powerpc_cogent_rom.mlt @@ -6,7 +6,8 @@ section reserved_vsr_table 200 10 0 0 0 section reserved_virtual_table 100 10 0 0 0 1 0 0 data ! section data 0 10 1 1 0 1 0 0 sbss ! section sbss 0 4 0 1 0 1 0 1 bss bss ! -section bss 0 10 0 1 0 0 0 0 ! +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 fff00000 fff00000 text text ! section text 0 4 0 1 0 1 0 1 fini fini ! section fini 0 8 0 1 0 1 0 1 rodata1 rodata1 !
--- a/packages/hal/powerpc/fads/current/ChangeLog +++ b/packages/hal/powerpc/fads/current/ChangeLog @@ -1,3 +1,18 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_powerpc_fads_ram.mlt: + Repair RAM layout + + * include/pkgconf/mlt_powerpc_fads_ram.mlt: + * include/pkgconf/mlt_powerpc_fads_rom.mlt: + Add heap1 section + + * include/pkgconf/mlt_powerpc_fads_ram.h: + * include/pkgconf/mlt_powerpc_fads_rom.h: + * include/pkgconf/mlt_powerpc_fads_ram.ldi: + * include/pkgconf/mlt_powerpc_fads_rom.ldi: + Regenerated + 2000-07-17 Jesper Skov <jskov@redhat.com> * src/hal_aux.c (hal_platform_init): Don't call hal_if_init just
--- a/packages/hal/powerpc/fads/current/include/pkgconf/mlt_powerpc_fads_ram.h +++ b/packages/hal/powerpc/fads/current/include/pkgconf/mlt_powerpc_fads_ram.h @@ -1,10 +1,37 @@ -// eCos memory layout - Wed Nov 24 15:24:30 1999 +// eCos memory layout - Fri Oct 20 11:13:03 2000 -// This is a generated file - changes will be lost if ConfigTool(MLT) is run +// This is a generated file - do not edit +#ifndef __ASSEMBLER__ #include <cyg/infra/cyg_type.h> #include <stddef.h> +#endif #define CYGMEM_REGION_ram (0) #define CYGMEM_REGION_ram_SIZE (0x800000) #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 (0x3000) +#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 (0x200) +#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 (0xcd00) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x800000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/powerpc/fads/current/include/pkgconf/mlt_powerpc_fads_ram.ldi +++ b/packages/hal/powerpc/fads/current/include/pkgconf/mlt_powerpc_fads_ram.ldi @@ -1,45 +1,21 @@ -//=========================================================================== -// -// RAM startup linker control script -// -//=========================================================================== -//####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#### -//=========================================================================== +// eCos memory layout - Fri Oct 20 11:13:03 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> MEMORY { - ram : ORIGIN = 0x00000000, LENGTH = 0x800000 + ram : ORIGIN = 0, LENGTH = 0x800000 } SECTIONS { SECTIONS_BEGIN - __reserved_vectors = 0; . = __reserved_vectors + 0x3000; - __reserved_vsr_table = ALIGN (0x1); . = __reserved_vsr_table + 0x200; - __reserved_virtual_table = ALIGN (0x1); . = __reserved_virtual_table + 0x100; - __reserved_for_rom = ALIGN (0x1); . = __reserved_for_rom + 0xcd00; + CYG_LABEL_DEFN(__reserved_vectors) = 0; . = CYG_LABEL_DEFN(__reserved_vectors) + 0x3000; + CYG_LABEL_DEFN(__reserved_vsr_table) = ALIGN (0x1); . = CYG_LABEL_DEFN(__reserved_vsr_table) + 0x200; + CYG_LABEL_DEFN(__reserved_virtual_table) = ALIGN (0x1); . = CYG_LABEL_DEFN(__reserved_virtual_table) + 0x100; + CYG_LABEL_DEFN(__reserved_for_rom) = ALIGN (0x1); . = CYG_LABEL_DEFN(__reserved_for_rom) + 0xcd00; SECTION_vectors (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) @@ -50,5 +26,6 @@ SECTIONS SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) SECTION_sbss (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/powerpc/fads/current/include/pkgconf/mlt_powerpc_fads_ram.mlt +++ b/packages/hal/powerpc/fads/current/include/pkgconf/mlt_powerpc_fads_ram.mlt @@ -1,9 +1,9 @@ version 0 region ram 0 800000 0 ! section reserved_vectors 3000 1 0 0 1 1 1 1 0 0 reserved_vsr_table reserved_vsr_table ! -section reserved_vsr_table 200 1 0 0 1 1 1 1 0 0 reserved_virtual_table reserved_virtual_table ! -section reserved_virtual_table 100 1 0 0 1 1 1 1 0 0 reserved_for_rom reserved_for_rom ! -section reserved_for_rom cd00 1 0 0 0 1 0 1 vectors vectors ! +section reserved_vsr_table 200 1 0 0 0 1 0 1 reserved_virtual_table reserved_virtual_table ! +section reserved_virtual_table 100 1 0 0 0 1 0 1 reserved_for_rom reserved_for_rom ! +section reserved_for_rom cd00 1 0 0 0 1 0 1 vectors vectors ! section vectors 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 rodata1 rodata1 ! @@ -13,4 +13,5 @@ section fixup 0 4 0 1 0 1 0 1 gcc_except section gcc_except_table 0 1 0 1 0 1 0 1 data data ! section data 0 8 0 1 0 1 0 1 sbss sbss ! section sbss 0 4 0 1 0 1 0 1 bss bss ! -section bss 0 10 0 1 0 0 0 0 ! +section bss 0 10 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/powerpc/fads/current/include/pkgconf/mlt_powerpc_fads_rom.h +++ b/packages/hal/powerpc/fads/current/include/pkgconf/mlt_powerpc_fads_rom.h @@ -1,19 +1,20 @@ -// eCos memory layout - Wed Nov 24 11:43:46 1999 +// eCos memory layout - Fri Oct 20 11:14:08 2000 -// This is a generated file - changes will be lost if ConfigTool(MLT) is run +// This is a generated file - do not edit +#ifndef __ASSEMBLER__ #include <cyg/infra/cyg_type.h> #include <stddef.h> +#endif #define CYGMEM_REGION_ram (0x100000) #define CYGMEM_REGION_ram_SIZE (0x700000) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) #define CYGMEM_REGION_rom (0x2800000) #define CYGMEM_REGION_rom_SIZE (0x40000) #define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) -/* */ -/* */ -/* */ -/* */ -/* {{CFG_DATA */ -/* }}CFG_DATA */ +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x800000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/powerpc/fads/current/include/pkgconf/mlt_powerpc_fads_rom.ldi +++ b/packages/hal/powerpc/fads/current/include/pkgconf/mlt_powerpc_fads_rom.ldi @@ -1,37 +1,13 @@ -//=========================================================================== -// -// ROM startup linker control script -// -//=========================================================================== -//####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#### -//=========================================================================== +// eCos memory layout - Fri Oct 20 11:14:08 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> MEMORY { - rom : ORIGIN = 0x02800000, LENGTH = 0x40000 // kevinh - FADS flash base - ram : ORIGIN = 0x00100000, LENGTH = 0x700000 + ram : ORIGIN = 0x100000, LENGTH = 0x700000 + rom : ORIGIN = 0x2800000, LENGTH = 0x40000 } SECTIONS @@ -47,5 +23,6 @@ SECTIONS SECTION_data (ram, 0x100000, FOLLOWING (.gcc_except_table)) SECTION_sbss (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/powerpc/fads/current/include/pkgconf/mlt_powerpc_fads_rom.mlt +++ b/packages/hal/powerpc/fads/current/include/pkgconf/mlt_powerpc_fads_rom.mlt @@ -3,7 +3,8 @@ region ram 100000 700000 0 ! region rom 2800000 40000 1 ! section data 0 1 1 1 1 1 0 0 100000 sbss ! section sbss 0 4 0 1 0 1 0 1 bss bss ! -section bss 0 10 0 1 0 0 0 0 ! +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 2800000 2800000 text text ! section text 0 4 0 1 0 1 0 1 fini fini ! section fini 0 8 0 1 0 1 0 1 rodata1 rodata1 !
--- a/packages/hal/powerpc/mbx/current/ChangeLog +++ b/packages/hal/powerpc/mbx/current/ChangeLog @@ -1,3 +1,43 @@ +2000-10-20 Gary Thomas <gthomas@redhat.com> + + * include/pkgconf/mlt_powerpc_mbx_ram.mlt: + * include/pkgconf/mlt_powerpc_mbx_ram.ldi: + * include/pkgconf/mlt_powerpc_mbx_ram.h: + Increase reserved memory - required by RedBoot. + + * misc/redboot_ROM.cfg: + * misc/redboot_RAM.cfg: + * images/redboot_ROM.srec: + * images/redboot_ROM.img: + * images/redboot_ROM.bin: + * images/redboot_RAM.bin: + * images/redboot_RAM.img: + * images/redboot_RAM.srec: New file(s). + + * cdl/hal_powerpc_mbx.cdl: Add RedBoot configuration rules. + +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * tests/mbxtime.cxx: Ensure default priority constructors + are called. + +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_powerpc_mbx_ram.h: + * include/pkgconf/mlt_powerpc_mbx_rom.h: + * include/pkgconf/mlt_powerpc_mbx_ram.ldi: + * include/pkgconf/mlt_powerpc_mbx_rom.ldi: + Regenerated with updated host tools + +2000-10-19 Jesper Skov <jskov@redhat.com> + + * include/pkgconf/mlt_powerpc_mbx_ram.h: Added heap1 label. + * include/pkgconf/mlt_powerpc_mbx_ram.mlt: Same. + * include/pkgconf/mlt_powerpc_mbx_ram.ldi: Same. + * include/pkgconf/mlt_powerpc_mbx_rom.h: Same. + * include/pkgconf/mlt_powerpc_mbx_rom.mlt: Same. + * include/pkgconf/mlt_powerpc_mbx_rom.ldi: Same. + 2000-09-17 Gary Thomas <gthomas@redhat.com> * cdl/hal_powerpc_mbx.cdl: Add platform/cpu identification strings.
--- a/packages/hal/powerpc/mbx/current/cdl/hal_powerpc_mbx.cdl +++ b/packages/hal/powerpc/mbx/current/cdl/hal_powerpc_mbx.cdl @@ -321,4 +321,33 @@ cdl_package CYGPKG_HAL_POWERPC_MBX { application. This enables features such as utilizing a separate interrupt stack when exceptions are generated." } + + cdl_component CYGPKG_REDBOOT_HAL_OPTIONS { + display "Redboot HAL options" + flavor none + no_define + parent CYGPKG_REDBOOT + active_if CYGPKG_REDBOOT + description " + This option lists the target's requirements for a valid Redboot + configuration." + + 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." + +# compile -library=libextras.a redboot_cmds.c + + 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 index 0000000000000000000000000000000000000000..9463a5c92321e18b78aa1c8fa38f51581ae69523 GIT binary patch literal 79848 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
new file mode 100644 index 0000000000000000000000000000000000000000..a1dae2045a17c44ca38c7e3377c053edf9b02eeb GIT binary patch literal 181215 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 J$kay9{{dLjoofI9
new file mode 100644 --- /dev/null +++ b/packages/hal/powerpc/mbx/current/images/redboot_RAM.srec @@ -0,0 +1,3807 @@ +S02B00002F776F726B2F6D62782F726564626F6F742F52414D2F696E7374616C6C2F62696E2F726564626F6F07 +S2190200007C7143A67C9243A67CB343A67C80002638A0000054B1 +S219020015A5D1BE3C600000606330007C63282E7CA802A67C6827 +S21902002A03A6386000004E80002000000000000000000000008B +S21902003F000000000000000000000000000000000000000000A5 +S21902005400000000000000000000000000000000000000000090 +S2190200690000000000000000000000000000000000000000007B +S21902007E00000000000000000000000000000000000000000066 +S21902009300000000000000000000000000000000000000000051 +S2190200A80000000000000000000000000000000000000000003C +S2190200BD00000000000000000000000000000000000000000027 +S2190200D200000000000000000000000000000000000000000012 +S2190200E7000000000000000000000000000000000000000000FD +S2190200FC000000003C600002606320007C6803A64E80002000EC +S219020111000000000000000000000000000000000000000000D2 +S219020126000000000000000000000000000000000000000000BD +S21902013B000000000000000000000000000000000000000000A8 +S21902015000000000000000000000000000000000000000000093 +S2190201650000000000000000000000000000000000000000007E +S21902017A00000000000000000000000000000000000000000069 +S21902018F00000000000000000000000000000000000000000054 +S2190201A40000000000000000000000000000000000000000003F +S2190201B90000000000000000000000000000000000000000002A +S2190201CE00000000000000000000000000000000000000000015 +S2190201E300000000000000000000000000000000000000000000 +S2190201F800000000000000007C7143A67C9243A67CB343A67C8A +S21902020D80002638A0020054A5D1BE3C600000606330007C635F +S219020222282E7CA802A67C6803A6386002004E80002000000089 +S219020237000000000000000000000000000000000000000000AB +S21902024C00000000000000000000000000000000000000000096 +S21902026100000000000000000000000000000000000000000081 +S2190202760000000000000000000000000000000000000000006C +S21902028B00000000000000000000000000000000000000000057 +S2190202A000000000000000000000000000000000000000000042 +S2190202B50000000000000000000000000000000000000000002D +S2190202CA00000000000000000000000000000000000000000018 +S2190202DF00000000000000000000000000000000000000000003 +S2190202F40000000000000000000000007C7143A67C9243A67CA5 +S219020309B343A67C80002638A0030054A5D1BE3C600000606358 +S21902031E30007C63282E7CA802A67C6803A6386003004E80009C +S2190203332000000000000000000000000000000000000000008E +S21902034800000000000000000000000000000000000000000099 +S21902035D00000000000000000000000000000000000000000084 +S2190203720000000000000000000000000000000000000000006F +S2190203870000000000000000000000000000000000000000005A +S21902039C00000000000000000000000000000000000000000045 +S2190203B100000000000000000000000000000000000000000030 +S2190203C60000000000000000000000000000000000000000001B +S2190203DB00000000000000000000000000000000000000000006 +S2190203F0000000000000000000000000000000007C7143A67C9F +S2190204059243A67CB343A67C80002638A0040054A5D1BE3C6026 +S21902041A0000606330007C63282E7CA802A67C6803A6386004A9 +S21902042F004E80002000000000000000000000000000000000C3 +S2190204440000000000000000000000000000000000000000009C +S21902045900000000000000000000000000000000000000000087 +S21902046E00000000000000000000000000000000000000000072 +S2190204830000000000000000000000000000000000000000005D +S21902049800000000000000000000000000000000000000000048 +S2190204AD00000000000000000000000000000000000000000033 +S2190204C20000000000000000000000000000000000000000001E +S2190204D700000000000000000000000000000000000000000009 +S2190204EC00000000000000000000000000000000000000007C78 +S2190205017143A67C9243A67CB343A67C80002638A0050054A57D +S219020516D1BE3C600000606330007C63282E7CA802A67C6803C3 +S21902052BA6386005004E80002000000000000000000000000083 +S2190205400000000000000000000000000000000000000000009F +S2190205550000000000000000000000000000000000000000008A +S21902056A00000000000000000000000000000000000000000075 +S21902057F00000000000000000000000000000000000000000060 +S2190205940000000000000000000000000000000000000000004B +S2190205A900000000000000000000000000000000000000000036 +S2190205BE00000000000000000000000000000000000000000021 +S2190205D30000000000000000000000000000000000000000000C +S2190205E8000000000000000000000000000000000000000000F7 +S2190205FD0000007C7143A67C9243A67CB343A67C80002638A003 +S219020612060054A5D1BE3C600000606330007C63282E7CA80254 +S219020627A67C6803A6386006004E8000200000000000000000F8 +S21902063C000000000000000000000000000000000000000000A2 +S2190206510000000000000000000000000000000000000000008D +S21902066600000000000000000000000000000000000000000078 +S21902067B00000000000000000000000000000000000000000063 +S2190206900000000000000000000000000000000000000000004E +S2190206A500000000000000000000000000000000000000000039 +S2190206BA00000000000000000000000000000000000000000024 +S2190206CF0000000000000000000000000000000000000000000F +S2190206E4000000000000000000000000000000000000000000FA +S2190206F9000000000000007C7143A67C9243A67CB343A67C8004 +S21902070E002638A0070054A5D1BE3C600000606330007C6328AC +S2190207232E7CA802A67C6803A6386007004E80002000000000A6 +S219020738000000000000000000000000000000000000000000A5 +S21902074D00000000000000000000000000000000000000000090 +S2190207620000000000000000000000000000000000000000007B +S21902077700000000000000000000000000000000000000000066 +S21902078C00000000000000000000000000000000000000000051 +S2190207A10000000000000000000000000000000000000000003C +S2190207B600000000000000000000000000000000000000000027 +S2190207CB00000000000000000000000000000000000000000012 +S2190207E0000000000000000000000000000000000000000000FD +S2190207F500000000000000000000007C7143A67C9243A67CB3EC +S21902080A43A67C80002638A0080054A5D1BE3C600000606330D0 +S21902081F007C63282E7CA802A67C6803A6386008004E800020A1 +S219020834000000000000000000000000000000000000000000A8 +S21902084900000000000000000000000000000000000000000093 +S21902085E0000000000000000000000000000000000000000007E +S21902087300000000000000000000000000000000000000000069 +S21902088800000000000000000000000000000000000000000054 +S21902089D0000000000000000000000000000000000000000003F +S2190208B20000000000000000000000000000000000000000002A +S2190208C700000000000000000000000000000000000000000015 +S2190208DC00000000000000000000000000000000000000000000 +S2190208F10000000000000000000000000000007C7143A67C9207 +S21902090643A67CB343A67C80002638A0090054A5D1BE3C6000AD +S21902091B00606330007C63282E7CA802A67C6803A6386009009E +S2190209304E8000200000000000000000000000000000000000BD +S21902094500000000000000000000000000000000000000000096 +S21902095A00000000000000000000000000000000000000000081 +S21902096F0000000000000000000000000000000000000000006C +S21902098400000000000000000000000000000000000000000057 +S21902099900000000000000000000000000000000000000000042 +S2190209AE0000000000000000000000000000000000000000002D +S2190209C300000000000000000000000000000000000000000018 +S2190209D800000000000000000000000000000000000000000003 +S2190209ED000000000000000000000000000000000000007C7101 +S219020A0243A67C9243A67CB343A67C80002638A00A0054A5D112 +S219020A17BE3C600000606330007C63282E7CA802A67C6803A6E8 +S219020A2C38600A004E800020000000000000000000000000001E +S219020A4100000000000000000000000000000000000000000099 +S219020A5600000000000000000000000000000000000000000084 +S219020A6B0000000000000000000000000000000000000000006F +S219020A800000000000000000000000000000000000000000005A +S219020A9500000000000000000000000000000000000000000045 +S219020AAA00000000000000000000000000000000000000000030 +S219020ABF0000000000000000000000000000000000000000001B +S219020AD400000000000000000000000000000000000000000006 +S219020AE9000000000000000000000000000000000000000000F1 +S219020AFE00007C7143A67C9243A67CB343A67C80002638A00BF2 +S219020B130054A5D1BE3C600000606330007C63282E7CA802A6AE +S219020B287C6803A638600B004E80002000000000000000000093 +S219020B3D0000000000000000000000000000000000000000009C +S219020B5200000000000000000000000000000000000000000087 +S219020B6700000000000000000000000000000000000000000072 +S219020B7C0000000000000000000000000000000000000000005D +S219020B9100000000000000000000000000000000000000000048 +S219020BA600000000000000000000000000000000000000000033 +S219020BBB0000000000000000000000000000000000000000001E +S219020BD000000000000000000000000000000000000000000009 +S219020BE5000000000000000000000000000000000000000000F4 +S219020BFA0000000000007C7143A67C9243A67CB343A67C8000FE +S219020C0F2638A00C0054A5D1BE3C600000606330007C63282E73 +S219020C247CA802A67C6803A638600C004E8000200000000000C9 +S219020C390000000000000000000000000000000000000000009F +S219020C4E0000000000000000000000000000000000000000008A +S219020C6300000000000000000000000000000000000000000075 +S219020C7800000000000000000000000000000000000000000060 +S219020C8D0000000000000000000000000000000000000000004B +S219020CA200000000000000000000000000000000000000000036 +S219020CB700000000000000000000000000000000000000000021 +S219020CCC0000000000000000000000000000000000000000000C +S219020CE1000000000000000000000000000000000000000000F7 +S219020CF6000000000000000000007C7143A67C9243A67CB343A3 +S219020D0BA67C80002638A00D0054A5D1BE3C6000006063300008 +S219020D207C63282E7CA802A67C6803A638600D004E8000200096 +S219020D35000000000000000000000000000000000000000000A2 +S219020D4A0000000000000000000000000000000000000000008D +S219020D5F00000000000000000000000000000000000000000078 +S219020D7400000000000000000000000000000000000000000063 +S219020D890000000000000000000000000000000000000000004E +S219020D9E00000000000000000000000000000000000000000039 +S219020DB300000000000000000000000000000000000000000024 +S219020DC80000000000000000000000000000000000000000000F +S219020DDD000000000000000000000000000000000000000000FA +S219020DF200000000000000000000000000007C7143A67C9243BE +S219020E07A67CB343A67C80002638A00E0054A5D1BE3C600000E5 +S219020E1C606330007C63282E7CA802A67C6803A638600E004E45 +S219020E3180002000000000000000000000000000000000000005 +S219020E4600000000000000000000000000000000000000000090 +S219020E5B0000000000000000000000000000000000000000007B +S219020E7000000000000000000000000000000000000000000066 +S219020E8500000000000000000000000000000000000000000051 +S219020E9A0000000000000000000000000000000000000000003C +S219020EAF00000000000000000000000000000000000000000027 +S219020EC400000000000000000000000000000000000000000012 +S219020ED9000000000000000000000000000000000000000000FD +S219020EEE0000000000000000000000000000000000007C7143B8 +S219020F03A67C9243A67CB343A67C80002638A00F0054A5D1BE8C +S219020F183C600000606330007C63282E7CA802A67C6803A63868 +S219020F2D600F004E80002000000000000000000000000000004B +S219020F4200000000000000000000000000000000000000000093 +S219020F570000000000000000000000000000000000000000007E +S219020F6C00000000000000000000000000000000000000000069 +S219020F8100000000000000000000000000000000000000000054 +S219020F960000000000000000000000000000000000000000003F +S219020FAB0000000000000000000000000000000000000000002A +S219020FC000000000000000000000000000000000000000000015 +S219020FD500000000000000000000000000000000000000000000 +S219020FEA000000000000000000000000000000000000000000EB +S219020FFF007C7143A67C9243A67CB343A67C80002638A01000E7 +S21902101454A5D1BE3C600000606330007C63282E7CA802A67C2C +S2190210296803A6386010004E8000200000000000000000000004 +S21902103E00000000000000000000000000000000000000000096 +S21902105300000000000000000000000000000000000000000081 +S2190210680000000000000000000000000000000000000000006C +S21902107D00000000000000000000000000000000000000000057 +S21902109200000000000000000000000000000000000000000042 +S2190210A70000000000000000000000000000000000000000002D +S2190210BC00000000000000000000000000000000000000000018 +S2190210D100000000000000000000000000000000000000000003 +S2190210E6000000000000000000000000000000000000000000EE +S2190210FB00000000007C7143A67C9243A67CB343A67C800026D2 +S21902111038A0110054A5D1BE3C600000606330007C63282E7C12 +S219021125A802A67C6803A6386011004E8000200000000000003A +S21902113A00000000000000000000000000000000000000000099 +S21902114F00000000000000000000000000000000000000000084 +S2190211640000000000000000000000000000000000000000006F +S2190211790000000000000000000000000000000000000000005A +S21902118E00000000000000000000000000000000000000000045 +S2190211A300000000000000000000000000000000000000000030 +S2190211B80000000000000000000000000000000000000000001B +S2190211CD00000000000000000000000000000000000000000006 +S2190211E2000000000000000000000000000000000000000000F1 +S2190211F70000000000000000007C7143A67C9243A67CB343A6F7 +S21902120C7C80002638A0120054A5D1BE3C600000606330007C27 +S21902122163282E7CA802A67C6803A6386012004E800020000007 +S2190212360000000000000000000000000000000000000000009C +S21902124B00000000000000000000000000000000000000000087 +S21902126000000000000000000000000000000000000000000072 +S2190212750000000000000000000000000000000000000000005D +S21902128A00000000000000000000000000000000000000000048 +S21902129F00000000000000000000000000000000000000000033 +S2190212B40000000000000000000000000000000000000000001E +S2190212C900000000000000000000000000000000000000000009 +S2190212DE000000000000000000000000000000000000000000F4 +S2190212F3000000000000000000000000007C7143A67C9243A612 +S2190213087CB343A67C80002638A0130054A5D1BE3C6000006020 +S21902131D6330007C63282E7CA802A67C6803A6386013004E801A +S2190213320020000000000000000000000000000000000000007F +S2190213470000000000000000000000000000000000000000008A +S21902135C00000000000000000000000000000000000000000075 +S21902137100000000000000000000000000000000000000000060 +S2190213860000000000000000000000000000000000000000004B +S21902139B00000000000000000000000000000000000000000036 +S2190213B000000000000000000000000000000000000000000021 +S2190213C50000000000000000000000000000000000000000000C +S2190213DA000000000000000000000000000000000000000000F7 +S2190213EF00000000000000000000000000000000007C7143A60C +S2190214047C9243A67CB343A67C80002638A0140054A5D1BE3CEB +S219021419600000606330007C63282E7CA802A67C6803A638603E +S21902142E14004E800020000000000000000000000000000000A0 +S2190214430000000000000000000000000000000000000000008D +S21902145800000000000000000000000000000000000000000078 +S21902146D00000000000000000000000000000000000000000063 +S2190214820000000000000000000000000000000000000000004E +S21902149700000000000000000000000000000000000000000039 +S2190214AC00000000000000000000000000000000000000000024 +S2190214C10000000000000000000000000000000000000000000F +S2190214D6000000000000000000000000000000000000000000FA +S2190214EB000000000000000000000000000000000000000000E5 +S2190215007C7143A67C9243A67CB343A67C80002638A015005487 +S219021515A5D1BE3C600000606330007C63282E7CA802A67C6812 +S21902152A03A6386015004E800020000000000000000000000061 +S21902153F00000000000000000000000000000000000000000090 +S2190215540000000000000000000000000000000000000000007B +S21902156900000000000000000000000000000000000000000066 +S21902157E00000000000000000000000000000000000000000051 +S2190215930000000000000000000000000000000000000000003C +S2190215A800000000000000000000000000000000000000000027 +S2190215BD00000000000000000000000000000000000000000012 +S2190215D2000000000000000000000000000000000000000000FD +S2190215E7000000000000000000000000000000000000000000E8 +S2190215FC000000007C7143A67C9243A67CB343A67C8000263894 +S219021611A0160054A5D1BE3C600000606330007C63282E7CA897 +S21902162602A67C6803A6386016004E80002000000000000000D7 +S21902163B00000000000000000000000000000000000000000093 +S2190216500000000000000000000000000000000000000000007E +S21902166500000000000000000000000000000000000000000069 +S21902167A00000000000000000000000000000000000000000054 +S21902168F0000000000000000000000000000000000000000003F +S2190216A40000000000000000000000000000000000000000002A +S2190216B900000000000000000000000000000000000000000015 +S2190216CE00000000000000000000000000000000000000000000 +S2190216E3000000000000000000000000000000000000000000EB +S2190216F800000000000000007C7143A67C9243A67CB343A67C75 +S21902170D80002638A0170054A5D1BE3C600000606330007C6335 +S219021722282E7CA802A67C6803A6386017004E8000200000005F +S21902173700000000000000000000000000000000000000000096 +S21902174C00000000000000000000000000000000000000000081 +S2190217610000000000000000000000000000000000000000006C +S21902177600000000000000000000000000000000000000000057 +S21902178B00000000000000000000000000000000000000000042 +S2190217A00000000000000000000000000000000000000000002D +S2190217B500000000000000000000000000000000000000000018 +S2190217CA00000000000000000000000000000000000000000003 +S2190217DF000000000000000000000000000000000000000000EE +S2190217F40000000000000000000000007C7143A67C9243A67C90 +S219021809B343A67C80002638A0180054A5D1BE3C60000060632E +S21902181E30007C63282E7CA802A67C6803A6386018004E800072 +S21902183320000000000000000000000000000000000000000079 +S21902184800000000000000000000000000000000000000000084 +S21902185D0000000000000000000000000000000000000000006F +S2190218720000000000000000000000000000000000000000005A +S21902188700000000000000000000000000000000000000000045 +S21902189C00000000000000000000000000000000000000000030 +S2190218B10000000000000000000000000000000000000000001B +S2190218C600000000000000000000000000000000000000000006 +S2190218DB000000000000000000000000000000000000000000F1 +S2190218F0000000000000000000000000000000007C7143A67C8A +S2190219059243A67CB343A67C80002638A0190054A5D1BE3C60FC +S21902191A0000606330007C63282E7CA802A67C6803A63860197F +S21902192F004E80002000000000000000000000000000000000AE +S21902194400000000000000000000000000000000000000000087 +S21902195900000000000000000000000000000000000000000072 +S21902196E0000000000000000000000000000000000000000005D +S21902198300000000000000000000000000000000000000000048 +S21902199800000000000000000000000000000000000000000033 +S2190219AD0000000000000000000000000000000000000000001E +S2190219C200000000000000000000000000000000000000000009 +S2190219D7000000000000000000000000000000000000000000F4 +S2190219EC00000000000000000000000000000000000000007C63 +S219021A017143A67C9243A67CB343A67C80002638A01A0054A553 +S219021A16D1BE3C600000606330007C63282E7CA802A67C6803AE +S219021A2BA638601A004E80002000000000000000000000000059 +S219021A400000000000000000000000000000000000000000008A +S219021A5500000000000000000000000000000000000000000075 +S219021A6A00000000000000000000000000000000000000000060 +S219021A7F0000000000000000000000000000000000000000004B +S219021A9400000000000000000000000000000000000000000036 +S219021AA900000000000000000000000000000000000000000021 +S219021ABE0000000000000000000000000000000000000000000C +S219021AD3000000000000000000000000000000000000000000F7 +S219021AE8000000000000000000000000000000000000000000E2 +S219021AFD0000007C7143A67C9243A67CB343A67C80002638A0EE +S219021B121B0054A5D1BE3C600000606330007C63282E7CA8022A +S219021B27A67C6803A638601B004E8000200000000000000000CE +S219021B3C0000000000000000000000000000000000000000008D +S219021B5100000000000000000000000000000000000000000078 +S219021B6600000000000000000000000000000000000000000063 +S219021B7B0000000000000000000000000000000000000000004E +S219021B9000000000000000000000000000000000000000000039 +S219021BA500000000000000000000000000000000000000000024 +S219021BBA0000000000000000000000000000000000000000000F +S219021BCF000000000000000000000000000000000000000000FA +S219021BE4000000000000000000000000000000000000000000E5 +S219021BF9000000000000007C7143A67C9243A67CB343A67C80EF +S219021C0E002638A01C0054A5D1BE3C600000606330007C632882 +S219021C232E7CA802A67C6803A638601C004E800020000000007C +S219021C3800000000000000000000000000000000000000000090 +S219021C4D0000000000000000000000000000000000000000007B +S219021C6200000000000000000000000000000000000000000066 +S219021C7700000000000000000000000000000000000000000051 +S219021C8C0000000000000000000000000000000000000000003C +S219021CA100000000000000000000000000000000000000000027 +S219021CB600000000000000000000000000000000000000000012 +S219021CCB000000000000000000000000000000000000000000FD +S219021CE0000000000000000000000000000000000000000000E8 +S219021CF500000000000000000000007C7143A67C9243A67CB3D7 +S219021D0A43A67C80002638A01D0054A5D1BE3C600000606330A6 +S219021D1F007C63282E7CA802A67C6803A638601D004E80002077 +S219021D3400000000000000000000000000000000000000000093 +S219021D490000000000000000000000000000000000000000007E +S219021D5E00000000000000000000000000000000000000000069 +S219021D7300000000000000000000000000000000000000000054 +S219021D880000000000000000000000000000000000000000003F +S219021D9D0000000000000000000000000000000000000000002A +S219021DB200000000000000000000000000000000000000000015 +S219021DC700000000000000000000000000000000000000000000 +S219021DDC000000000000000000000000000000000000000000EB +S219021DF10000000000000000000000000000007C7143A67C92F2 +S219021E0643A67CB343A67C80002638A01E0054A5D1BE3C600083 +S219021E1B00606330007C63282E7CA802A67C6803A638601E0074 +S219021E304E8000200000000000000000000000000000000000A8 +S219021E4500000000000000000000000000000000000000000081 +S219021E5A0000000000000000000000000000000000000000006C +S219021E6F00000000000000000000000000000000000000000057 +S219021E8400000000000000000000000000000000000000000042 +S219021E990000000000000000000000000000000000000000002D +S219021EAE00000000000000000000000000000000000000000018 +S219021EC300000000000000000000000000000000000000000003 +S219021ED8000000000000000000000000000000000000000000EE +S219021EED000000000000000000000000000000000000007C71EC +S219021F0243A67C9243A67CB343A67C80002638A01F0054A5D1E8 +S219021F17BE3C600000606330007C63282E7CA802A67C6803A6D3 +S219021F2C38601F004E80002000000000000000000000000000F4 +S219021F4100000000000000000000000000000000000000000084 +S219021F560000000000000000000000000000000000000000006F +S219021F6B0000000000000000000000000000000000000000005A +S219021F8000000000000000000000000000000000000000000045 +S219021F9500000000000000000000000000000000000000000030 +S219021FAA0000000000000000000000000000000000000000001B +S219021FBF00000000000000000000000000000000000000000006 +S219021FD4000000000000000000000000000000000000000000F1 +S219021FE9000000000000000000000000000000000000000000DC +S206021FFE0000DA +S2190220003C600000606300077C7E23A6386000007C7523A63C0D +S219022015600400606300007C0004AC7C788BA63C6004006063D4 +S21902202A00004C00012C7C708BA64C00012C7C70C2A664632050 +S21902203F007C70C3A67C78C2A6646320007C78C3A63C600000F4 +S219022054606330027C0004AC7C6001247C0004AC3C6000016025 +S21902206963FFFC3C80FFFF6084FFFC3CA0000260A51F308403AB +S21902207E0004940400047C0328404082FFF43C4000036042B732 +S219022093D87C631A787C7C43A67C8422787C9D43A64800467D60 +S2190220A83C200003602148F07C3043A63C600002606300003CD2 +S2190220BD800000608400003CA0000260A51F347C0328404182C3 +S2190220D200203863FFFC3884FFFC38A5FFFC840300049404008A +S2190220E7047C0328404180FFF43C600002606321D43C8000002C +S2190220FC608430003884FFFC38A000209464000438A5FFFF2C02 +S2190221110500004082FFF43C600002606322DC3C8000006084F9 +S219022126300090640014906400243C600003606338F03C800007 +S21902213B0460841DF0380000007C032040418200149003000012 +S219022150386300047C0320404180FFF43C600003606337E83C84 +S219022165800003608438E47C03204041820014900300003863F7 +S21902217A00047C0320404180FFF43821FFF4380000009001009D +S21902218F00900100089421FFC8480041114800456548003C55BA +S2190221A43C600000606330327C0004AC7C6001247C0004AC48BD +S2190221B9003CA948003B7948003CA548005E75480079BD48001F +S2190221CE0405480000003821FF64906100989081008090A1009D +S2190221E3883C600000606330327C0004AC7C6001247C0004AC3E +S2190221F87C7142A69061000C7C9242A6908100107CB342A6903B +S21902220DA1001490010000904100087C230B783863009C90614C +S219022222000490C1001890E1001C91010020912100249141004C +S219022237289161002C9181003091A1003491C1003891E1003C65 +S21902224C9201004092210044924100489261004C92810050925D +S219022261A1005492C1005892E1005C9301006093210064934112 +S21902227600689361006C9381007093A1007493C1007893E10018 +S21902228B7C91C1003891E1003C7C6102A67C8902A67CBA02A673 +S2190222A07CDB02A6906100849081008C90A1009490C100907CEF +S2190222B5230B783821FFC8380000009001000090010008942130 +S2190222CAFFC83CA0000260A5246C7CA803A648003ABC3821FF5B +S2190222DF64906100989081008090A100883C60000060633032EB +S2190222F47C0004AC7C6001247C0004AC7C7142A69061000C7C27 +S2190223099242A6908100107CB342A690A100149001000090415F +S21902231E00087C230B783863009C9061000490C1001890E10073 +S2190223331C9101002091210024914100289161002C9181003090 +S21902234891A1003491C1003891E1003C9201004092210044927F +S21902235D4100489261004C9281005092A1005492C1005892E194 +S219022372005C9301006093210064934100689361006C93810037 +S2190223877093A1007493C1007893E1007C91C1003891E1003C2E +S21902239C7C6102A67C8902A67CBA02A67CDB02A6906100849011 +S2190223B181008C90A1009490C100907C2E0B783C6000036063CE +S2190223C648F03C800003608438F07CA408514180000C7CA1187D +S2190223DB51418100087C611B7895C1FFFC3821FFC838000000B2 +S2190223F090010000900100089421FFC881EE009855EFB7FF41E9 +S2190224058200183DE0FF0061EF001C89EF000055EFF0BE39EF07 +S21902241A000191EE009855EF103A3C6000036063387091C300A2 +S21902242F00806E00983CC0000360C632407CC6782E3C800003CD +S2190224446084332C7C84782E7CC903A64E800421802100703869 +S21902245921FFC83800000090010000900100089421FFC8382148 +S21902246E0070806100848081008880A1008C7C6103A67C8803BA +S219022483A67CA903A681C1003881E1003C80C1001880E1001CDB +S2190224988101002081210024814100288161002C818100308115 +S2190224ADA1003481C1003881E1003C82010040822100448241B9 +S2190224C200488261004C8281005082A1005482C1005882E100BF +S2190224D75C8301006083210064834100688361006C83810070B1 +S2190224EC83A1007483C1007883E1007C7C0000A6386000005096 +S2190225016004207C0004AC7C0001247C0004AC800100008041FF +S2190225160008806100808081009480A100907C6FF1207C9A03E5 +S21902252BA67CBB03A68061000C8081001080A100148021000436 +S2190225407C0004AC4C00012C4C0000647C230B783C80000360E9 +S2190225558448F03884FFE87C8123789061000C7C6000A6906103 +S21902256A00107C6802A69061001438000000900100009001005A +S21902257F087C0000A660638000506004207C0004AC7C00012432 +S2190225947C0004AC9421FFC848006C8138210038806100147C4C +S2190225A96803A680A1000C806100107C0000A6506004207C0075 +S2190225BE04AC7C0001247C0004AC7CA12B784E8000209421FE23 +S2190225D3D87C0802A69321010C9341011093610114938101180C +S2190225E893A1011C93C1012093E101249001012C3FA000003BA0 +S2190225FDBD3200813D00343860FFFF7D2803A63B8000003BE027 +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 +S804020100F8
new file mode 100644 index 0000000000000000000000000000000000000000..b09cd39d08160b6bf2a98b04079f7c0830a99dff GIT binary patch literal 84456 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
new file mode 100644 index 0000000000000000000000000000000000000000..98b37c3b6b2fc98a7c85be94de209878f07a7c42 GIT binary patch literal 314264 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 I&)z)$0}%eR6951J
new file mode 100644 --- /dev/null +++ b/packages/hal/powerpc/mbx/current/images/redboot_ROM.srec @@ -0,0 +1,4026 @@ +S02B00002F776F726B2F6D62782F726564626F6F742F524F4D2F696E7374616C6C2F62696E2F726564626F6FF9 +S31AFE0000007C7143A67C9243A67CB343A67C80002638A0000054B4 +S31AFE000015A5D1BE3C600000606330007C63282E7CA802A67C682A +S31AFE00002A03A6386000004E80002000000000000000000000008E +S31AFE00003F000000000000000000000000000000000000000000A8 +S31AFE00005400000000000000000000000000000000000000000093 +S31AFE0000690000000000000000000000000000000000000000007E +S31AFE00007E00000000000000000000000000000000000000000069 +S31AFE00009300000000000000000000000000000000000000000054 +S31AFE0000A80000000000000000000000000000000000000000003F +S31AFE0000BD0000000000000000000000000000000000000000002A +S31AFE0000D200000000000000000000000000000000000000000015 +S31AFE0000E700000000000000000000000000000000000000000000 +S31AFE0000FC000000003C60FE00606320007C6803A64E80002000F3 +S31AFE000111000000000000000000000000000000000000000000D5 +S31AFE000126000000000000000000000000000000000000000000C0 +S31AFE00013B000000000000000000000000000000000000000000AB +S31AFE00015000000000000000000000000000000000000000000096 +S31AFE00016500000000000000000000000000000000000000000081 +S31AFE00017A0000000000000000000000000000000000000000006C +S31AFE00018F00000000000000000000000000000000000000000057 +S31AFE0001A400000000000000000000000000000000000000000042 +S31AFE0001B90000000000000000000000000000000000000000002D +S31AFE0001CE00000000000000000000000000000000000000000018 +S31AFE0001E300000000000000000000000000000000000000000003 +S31AFE0001F800000000000000007C7143A67C9243A67CB343A67C8D +S31AFE00020D80002638A0020054A5D1BE3C600000606330007C6362 +S31AFE000222282E7CA802A67C6803A6386002004E8000200000008C +S31AFE000237000000000000000000000000000000000000000000AE +S31AFE00024C00000000000000000000000000000000000000000099 +S31AFE00026100000000000000000000000000000000000000000084 +S31AFE0002760000000000000000000000000000000000000000006F +S31AFE00028B0000000000000000000000000000000000000000005A +S31AFE0002A000000000000000000000000000000000000000000045 +S31AFE0002B500000000000000000000000000000000000000000030 +S31AFE0002CA0000000000000000000000000000000000000000001B +S31AFE0002DF00000000000000000000000000000000000000000006 +S31AFE0002F40000000000000000000000007C7143A67C9243A67CA8 +S31AFE000309B343A67C80002638A0030054A5D1BE3C60000060635B +S31AFE00031E30007C63282E7CA802A67C6803A6386003004E80009F +S31AFE00033320000000000000000000000000000000000000000091 +S31AFE0003480000000000000000000000000000000000000000009C +S31AFE00035D00000000000000000000000000000000000000000087 +S31AFE00037200000000000000000000000000000000000000000072 +S31AFE0003870000000000000000000000000000000000000000005D +S31AFE00039C00000000000000000000000000000000000000000048 +S31AFE0003B100000000000000000000000000000000000000000033 +S31AFE0003C60000000000000000000000000000000000000000001E +S31AFE0003DB00000000000000000000000000000000000000000009 +S31AFE0003F0000000000000000000000000000000007C7143A67CA2 +S31AFE0004059243A67CB343A67C80002638A0040054A5D1BE3C6029 +S31AFE00041A0000606330007C63282E7CA802A67C6803A6386004AC +S31AFE00042F004E80002000000000000000000000000000000000C6 +S31AFE0004440000000000000000000000000000000000000000009F +S31AFE0004590000000000000000000000000000000000000000008A +S31AFE00046E00000000000000000000000000000000000000000075 +S31AFE00048300000000000000000000000000000000000000000060 +S31AFE0004980000000000000000000000000000000000000000004B +S31AFE0004AD00000000000000000000000000000000000000000036 +S31AFE0004C200000000000000000000000000000000000000000021 +S31AFE0004D70000000000000000000000000000000000000000000C +S31AFE0004EC00000000000000000000000000000000000000007C7B +S31AFE0005017143A67C9243A67CB343A67C80002638A0050054A580 +S31AFE000516D1BE3C600000606330007C63282E7CA802A67C6803C6 +S31AFE00052BA6386005004E80002000000000000000000000000086 +S31AFE000540000000000000000000000000000000000000000000A2 +S31AFE0005550000000000000000000000000000000000000000008D +S31AFE00056A00000000000000000000000000000000000000000078 +S31AFE00057F00000000000000000000000000000000000000000063 +S31AFE0005940000000000000000000000000000000000000000004E +S31AFE0005A900000000000000000000000000000000000000000039 +S31AFE0005BE00000000000000000000000000000000000000000024 +S31AFE0005D30000000000000000000000000000000000000000000F +S31AFE0005E8000000000000000000000000000000000000000000FA +S31AFE0005FD0000007C7143A67C9243A67CB343A67C80002638A006 +S31AFE000612060054A5D1BE3C600000606330007C63282E7CA80257 +S31AFE000627A67C6803A6386006004E8000200000000000000000FB +S31AFE00063C000000000000000000000000000000000000000000A5 +S31AFE00065100000000000000000000000000000000000000000090 +S31AFE0006660000000000000000000000000000000000000000007B +S31AFE00067B00000000000000000000000000000000000000000066 +S31AFE00069000000000000000000000000000000000000000000051 +S31AFE0006A50000000000000000000000000000000000000000003C +S31AFE0006BA00000000000000000000000000000000000000000027 +S31AFE0006CF00000000000000000000000000000000000000000012 +S31AFE0006E4000000000000000000000000000000000000000000FD +S31AFE0006F9000000000000007C7143A67C9243A67CB343A67C8007 +S31AFE00070E002638A0070054A5D1BE3C600000606330007C6328AF +S31AFE0007232E7CA802A67C6803A6386007004E80002000000000A9 +S31AFE000738000000000000000000000000000000000000000000A8 +S31AFE00074D00000000000000000000000000000000000000000093 +S31AFE0007620000000000000000000000000000000000000000007E +S31AFE00077700000000000000000000000000000000000000000069 +S31AFE00078C00000000000000000000000000000000000000000054 +S31AFE0007A10000000000000000000000000000000000000000003F +S31AFE0007B60000000000000000000000000000000000000000002A +S31AFE0007CB00000000000000000000000000000000000000000015 +S31AFE0007E000000000000000000000000000000000000000000000 +S31AFE0007F500000000000000000000007C7143A67C9243A67CB3EF +S31AFE00080A43A67C80002638A0080054A5D1BE3C600000606330D3 +S31AFE00081F007C63282E7CA802A67C6803A6386008004E800020A4 +S31AFE000834000000000000000000000000000000000000000000AB +S31AFE00084900000000000000000000000000000000000000000096 +S31AFE00085E00000000000000000000000000000000000000000081 +S31AFE0008730000000000000000000000000000000000000000006C +S31AFE00088800000000000000000000000000000000000000000057 +S31AFE00089D00000000000000000000000000000000000000000042 +S31AFE0008B20000000000000000000000000000000000000000002D +S31AFE0008C700000000000000000000000000000000000000000018 +S31AFE0008DC00000000000000000000000000000000000000000003 +S31AFE0008F10000000000000000000000000000007C7143A67C920A +S31AFE00090643A67CB343A67C80002638A0090054A5D1BE3C6000B0 +S31AFE00091B00606330007C63282E7CA802A67C6803A638600900A1 +S31AFE0009304E8000200000000000000000000000000000000000C0 +S31AFE00094500000000000000000000000000000000000000000099 +S31AFE00095A00000000000000000000000000000000000000000084 +S31AFE00096F0000000000000000000000000000000000000000006F +S31AFE0009840000000000000000000000000000000000000000005A +S31AFE00099900000000000000000000000000000000000000000045 +S31AFE0009AE00000000000000000000000000000000000000000030 +S31AFE0009C30000000000000000000000000000000000000000001B +S31AFE0009D800000000000000000000000000000000000000000006 +S31AFE0009ED000000000000000000000000000000000000007C7104 +S31AFE000A0243A67C9243A67CB343A67C80002638A00A0054A5D115 +S31AFE000A17BE3C600000606330007C63282E7CA802A67C6803A6EB +S31AFE000A2C38600A004E8000200000000000000000000000000021 +S31AFE000A410000000000000000000000000000000000000000009C +S31AFE000A5600000000000000000000000000000000000000000087 +S31AFE000A6B00000000000000000000000000000000000000000072 +S31AFE000A800000000000000000000000000000000000000000005D +S31AFE000A9500000000000000000000000000000000000000000048 +S31AFE000AAA00000000000000000000000000000000000000000033 +S31AFE000ABF0000000000000000000000000000000000000000001E +S31AFE000AD400000000000000000000000000000000000000000009 +S31AFE000AE9000000000000000000000000000000000000000000F4 +S31AFE000AFE00007C7143A67C9243A67CB343A67C80002638A00BF5 +S31AFE000B130054A5D1BE3C600000606330007C63282E7CA802A6B1 +S31AFE000B287C6803A638600B004E80002000000000000000000096 +S31AFE000B3D0000000000000000000000000000000000000000009F +S31AFE000B520000000000000000000000000000000000000000008A +S31AFE000B6700000000000000000000000000000000000000000075 +S31AFE000B7C00000000000000000000000000000000000000000060 +S31AFE000B910000000000000000000000000000000000000000004B +S31AFE000BA600000000000000000000000000000000000000000036 +S31AFE000BBB00000000000000000000000000000000000000000021 +S31AFE000BD00000000000000000000000000000000000000000000C +S31AFE000BE5000000000000000000000000000000000000000000F7 +S31AFE000BFA0000000000007C7143A67C9243A67CB343A67C800001 +S31AFE000C0F2638A00C0054A5D1BE3C600000606330007C63282E76 +S31AFE000C247CA802A67C6803A638600C004E8000200000000000CC +S31AFE000C39000000000000000000000000000000000000000000A2 +S31AFE000C4E0000000000000000000000000000000000000000008D +S31AFE000C6300000000000000000000000000000000000000000078 +S31AFE000C7800000000000000000000000000000000000000000063 +S31AFE000C8D0000000000000000000000000000000000000000004E +S31AFE000CA200000000000000000000000000000000000000000039 +S31AFE000CB700000000000000000000000000000000000000000024 +S31AFE000CCC0000000000000000000000000000000000000000000F +S31AFE000CE1000000000000000000000000000000000000000000FA +S31AFE000CF6000000000000000000007C7143A67C9243A67CB343A6 +S31AFE000D0BA67C80002638A00D0054A5D1BE3C600000606330000B +S31AFE000D207C63282E7CA802A67C6803A638600D004E8000200099 +S31AFE000D35000000000000000000000000000000000000000000A5 +S31AFE000D4A00000000000000000000000000000000000000000090 +S31AFE000D5F0000000000000000000000000000000000000000007B +S31AFE000D7400000000000000000000000000000000000000000066 +S31AFE000D8900000000000000000000000000000000000000000051 +S31AFE000D9E0000000000000000000000000000000000000000003C +S31AFE000DB300000000000000000000000000000000000000000027 +S31AFE000DC800000000000000000000000000000000000000000012 +S31AFE000DDD000000000000000000000000000000000000000000FD +S31AFE000DF200000000000000000000000000007C7143A67C9243C1 +S31AFE000E07A67CB343A67C80002638A00E0054A5D1BE3C600000E8 +S31AFE000E1C606330007C63282E7CA802A67C6803A638600E004E48 +S31AFE000E3180002000000000000000000000000000000000000008 +S31AFE000E4600000000000000000000000000000000000000000093 +S31AFE000E5B0000000000000000000000000000000000000000007E +S31AFE000E7000000000000000000000000000000000000000000069 +S31AFE000E8500000000000000000000000000000000000000000054 +S31AFE000E9A0000000000000000000000000000000000000000003F +S31AFE000EAF0000000000000000000000000000000000000000002A +S31AFE000EC400000000000000000000000000000000000000000015 +S31AFE000ED900000000000000000000000000000000000000000000 +S31AFE000EEE0000000000000000000000000000000000007C7143BB +S31AFE000F03A67C9243A67CB343A67C80002638A00F0054A5D1BE8F +S31AFE000F183C600000606330007C63282E7CA802A67C6803A6386B +S31AFE000F2D600F004E80002000000000000000000000000000004E +S31AFE000F4200000000000000000000000000000000000000000096 +S31AFE000F5700000000000000000000000000000000000000000081 +S31AFE000F6C0000000000000000000000000000000000000000006C +S31AFE000F8100000000000000000000000000000000000000000057 +S31AFE000F9600000000000000000000000000000000000000000042 +S31AFE000FAB0000000000000000000000000000000000000000002D +S31AFE000FC000000000000000000000000000000000000000000018 +S31AFE000FD500000000000000000000000000000000000000000003 +S31AFE000FEA000000000000000000000000000000000000000000EE +S31AFE000FFF007C7143A67C9243A67CB343A67C80002638A01000EA +S31AFE00101454A5D1BE3C600000606330007C63282E7CA802A67C2F +S31AFE0010296803A6386010004E8000200000000000000000000007 +S31AFE00103E00000000000000000000000000000000000000000099 +S31AFE00105300000000000000000000000000000000000000000084 +S31AFE0010680000000000000000000000000000000000000000006F +S31AFE00107D0000000000000000000000000000000000000000005A +S31AFE00109200000000000000000000000000000000000000000045 +S31AFE0010A700000000000000000000000000000000000000000030 +S31AFE0010BC0000000000000000000000000000000000000000001B +S31AFE0010D100000000000000000000000000000000000000000006 +S31AFE0010E6000000000000000000000000000000000000000000F1 +S31AFE0010FB00000000007C7143A67C9243A67CB343A67C800026D5 +S31AFE00111038A0110054A5D1BE3C600000606330007C63282E7C15 +S31AFE001125A802A67C6803A6386011004E8000200000000000003D +S31AFE00113A0000000000000000000000000000000000000000009C +S31AFE00114F00000000000000000000000000000000000000000087 +S31AFE00116400000000000000000000000000000000000000000072 +S31AFE0011790000000000000000000000000000000000000000005D +S31AFE00118E00000000000000000000000000000000000000000048 +S31AFE0011A300000000000000000000000000000000000000000033 +S31AFE0011B80000000000000000000000000000000000000000001E +S31AFE0011CD00000000000000000000000000000000000000000009 +S31AFE0011E2000000000000000000000000000000000000000000F4 +S31AFE0011F70000000000000000007C7143A67C9243A67CB343A6FA +S31AFE00120C7C80002638A0120054A5D1BE3C600000606330007C2A +S31AFE00122163282E7CA802A67C6803A6386012004E80002000000A +S31AFE0012360000000000000000000000000000000000000000009F +S31AFE00124B0000000000000000000000000000000000000000008A +S31AFE00126000000000000000000000000000000000000000000075 +S31AFE00127500000000000000000000000000000000000000000060 +S31AFE00128A0000000000000000000000000000000000000000004B +S31AFE00129F00000000000000000000000000000000000000000036 +S31AFE0012B400000000000000000000000000000000000000000021 +S31AFE0012C90000000000000000000000000000000000000000000C +S31AFE0012DE000000000000000000000000000000000000000000F7 +S31AFE0012F3000000000000000000000000007C7143A67C9243A615 +S31AFE0013087CB343A67C80002638A0130054A5D1BE3C6000006023 +S31AFE00131D6330007C63282E7CA802A67C6803A6386013004E801D +S31AFE00133200200000000000000000000000000000000000000082 +S31AFE0013470000000000000000000000000000000000000000008D +S31AFE00135C00000000000000000000000000000000000000000078 +S31AFE00137100000000000000000000000000000000000000000063 +S31AFE0013860000000000000000000000000000000000000000004E +S31AFE00139B00000000000000000000000000000000000000000039 +S31AFE0013B000000000000000000000000000000000000000000024 +S31AFE0013C50000000000000000000000000000000000000000000F +S31AFE0013DA000000000000000000000000000000000000000000FA +S31AFE0013EF00000000000000000000000000000000007C7143A60F +S31AFE0014047C9243A67CB343A67C80002638A0140054A5D1BE3CEE +S31AFE001419600000606330007C63282E7CA802A67C6803A6386041 +S31AFE00142E14004E800020000000000000000000000000000000A3 +S31AFE00144300000000000000000000000000000000000000000090 +S31AFE0014580000000000000000000000000000000000000000007B +S31AFE00146D00000000000000000000000000000000000000000066 +S31AFE00148200000000000000000000000000000000000000000051 +S31AFE0014970000000000000000000000000000000000000000003C +S31AFE0014AC00000000000000000000000000000000000000000027 +S31AFE0014C100000000000000000000000000000000000000000012 +S31AFE0014D6000000000000000000000000000000000000000000FD +S31AFE0014EB000000000000000000000000000000000000000000E8 +S31AFE0015007C7143A67C9243A67CB343A67C80002638A01500548A +S31AFE001515A5D1BE3C600000606330007C63282E7CA802A67C6815 +S31AFE00152A03A6386015004E800020000000000000000000000064 +S31AFE00153F00000000000000000000000000000000000000000093 +S31AFE0015540000000000000000000000000000000000000000007E +S31AFE00156900000000000000000000000000000000000000000069 +S31AFE00157E00000000000000000000000000000000000000000054 +S31AFE0015930000000000000000000000000000000000000000003F +S31AFE0015A80000000000000000000000000000000000000000002A +S31AFE0015BD00000000000000000000000000000000000000000015 +S31AFE0015D200000000000000000000000000000000000000000000 +S31AFE0015E7000000000000000000000000000000000000000000EB +S31AFE0015FC000000007C7143A67C9243A67CB343A67C8000263897 +S31AFE001611A0160054A5D1BE3C600000606330007C63282E7CA89A +S31AFE00162602A67C6803A6386016004E80002000000000000000DA +S31AFE00163B00000000000000000000000000000000000000000096 +S31AFE00165000000000000000000000000000000000000000000081 +S31AFE0016650000000000000000000000000000000000000000006C +S31AFE00167A00000000000000000000000000000000000000000057 +S31AFE00168F00000000000000000000000000000000000000000042 +S31AFE0016A40000000000000000000000000000000000000000002D +S31AFE0016B900000000000000000000000000000000000000000018 +S31AFE0016CE00000000000000000000000000000000000000000003 +S31AFE0016E3000000000000000000000000000000000000000000EE +S31AFE0016F800000000000000007C7143A67C9243A67CB343A67C78 +S31AFE00170D80002638A0170054A5D1BE3C600000606330007C6338 +S31AFE001722282E7CA802A67C6803A6386017004E80002000000062 +S31AFE00173700000000000000000000000000000000000000000099 +S31AFE00174C00000000000000000000000000000000000000000084 +S31AFE0017610000000000000000000000000000000000000000006F +S31AFE0017760000000000000000000000000000000000000000005A +S31AFE00178B00000000000000000000000000000000000000000045 +S31AFE0017A000000000000000000000000000000000000000000030 +S31AFE0017B50000000000000000000000000000000000000000001B +S31AFE0017CA00000000000000000000000000000000000000000006 +S31AFE0017DF000000000000000000000000000000000000000000F1 +S31AFE0017F40000000000000000000000007C7143A67C9243A67C93 +S31AFE001809B343A67C80002638A0180054A5D1BE3C600000606331 +S31AFE00181E30007C63282E7CA802A67C6803A6386018004E800075 +S31AFE0018332000000000000000000000000000000000000000007C +S31AFE00184800000000000000000000000000000000000000000087 +S31AFE00185D00000000000000000000000000000000000000000072 +S31AFE0018720000000000000000000000000000000000000000005D +S31AFE00188700000000000000000000000000000000000000000048 +S31AFE00189C00000000000000000000000000000000000000000033 +S31AFE0018B10000000000000000000000000000000000000000001E +S31AFE0018C600000000000000000000000000000000000000000009 +S31AFE0018DB000000000000000000000000000000000000000000F4 +S31AFE0018F0000000000000000000000000000000007C7143A67C8D +S31AFE0019059243A67CB343A67C80002638A0190054A5D1BE3C60FF +S31AFE00191A0000606330007C63282E7CA802A67C6803A638601982 +S31AFE00192F004E80002000000000000000000000000000000000B1 +S31AFE0019440000000000000000000000000000000000000000008A +S31AFE00195900000000000000000000000000000000000000000075 +S31AFE00196E00000000000000000000000000000000000000000060 +S31AFE0019830000000000000000000000000000000000000000004B +S31AFE00199800000000000000000000000000000000000000000036 +S31AFE0019AD00000000000000000000000000000000000000000021 +S31AFE0019C20000000000000000000000000000000000000000000C +S31AFE0019D7000000000000000000000000000000000000000000F7 +S31AFE0019EC00000000000000000000000000000000000000007C66 +S31AFE001A017143A67C9243A67CB343A67C80002638A01A0054A556 +S31AFE001A16D1BE3C600000606330007C63282E7CA802A67C6803B1 +S31AFE001A2BA638601A004E8000200000000000000000000000005C +S31AFE001A400000000000000000000000000000000000000000008D +S31AFE001A5500000000000000000000000000000000000000000078 +S31AFE001A6A00000000000000000000000000000000000000000063 +S31AFE001A7F0000000000000000000000000000000000000000004E +S31AFE001A9400000000000000000000000000000000000000000039 +S31AFE001AA900000000000000000000000000000000000000000024 +S31AFE001ABE0000000000000000000000000000000000000000000F +S31AFE001AD3000000000000000000000000000000000000000000FA +S31AFE001AE8000000000000000000000000000000000000000000E5 +S31AFE001AFD0000007C7143A67C9243A67CB343A67C80002638A0F1 +S31AFE001B121B0054A5D1BE3C600000606330007C63282E7CA8022D +S31AFE001B27A67C6803A638601B004E8000200000000000000000D1 +S31AFE001B3C00000000000000000000000000000000000000000090 +S31AFE001B510000000000000000000000000000000000000000007B +S31AFE001B6600000000000000000000000000000000000000000066 +S31AFE001B7B00000000000000000000000000000000000000000051 +S31AFE001B900000000000000000000000000000000000000000003C +S31AFE001BA500000000000000000000000000000000000000000027 +S31AFE001BBA00000000000000000000000000000000000000000012 +S31AFE001BCF000000000000000000000000000000000000000000FD +S31AFE001BE4000000000000000000000000000000000000000000E8 +S31AFE001BF9000000000000007C7143A67C9243A67CB343A67C80F2 +S31AFE001C0E002638A01C0054A5D1BE3C600000606330007C632885 +S31AFE001C232E7CA802A67C6803A638601C004E800020000000007F +S31AFE001C3800000000000000000000000000000000000000000093 +S31AFE001C4D0000000000000000000000000000000000000000007E +S31AFE001C6200000000000000000000000000000000000000000069 +S31AFE001C7700000000000000000000000000000000000000000054 +S31AFE001C8C0000000000000000000000000000000000000000003F +S31AFE001CA10000000000000000000000000000000000000000002A +S31AFE001CB600000000000000000000000000000000000000000015 +S31AFE001CCB00000000000000000000000000000000000000000000 +S31AFE001CE0000000000000000000000000000000000000000000EB +S31AFE001CF500000000000000000000007C7143A67C9243A67CB3DA +S31AFE001D0A43A67C80002638A01D0054A5D1BE3C600000606330A9 +S31AFE001D1F007C63282E7CA802A67C6803A638601D004E8000207A +S31AFE001D3400000000000000000000000000000000000000000096 +S31AFE001D4900000000000000000000000000000000000000000081 +S31AFE001D5E0000000000000000000000000000000000000000006C +S31AFE001D7300000000000000000000000000000000000000000057 +S31AFE001D8800000000000000000000000000000000000000000042 +S31AFE001D9D0000000000000000000000000000000000000000002D +S31AFE001DB200000000000000000000000000000000000000000018 +S31AFE001DC700000000000000000000000000000000000000000003 +S31AFE001DDC000000000000000000000000000000000000000000EE +S31AFE001DF10000000000000000000000000000007C7143A67C92F5 +S31AFE001E0643A67CB343A67C80002638A01E0054A5D1BE3C600086 +S31AFE001E1B00606330007C63282E7CA802A67C6803A638601E0077 +S31AFE001E304E8000200000000000000000000000000000000000AB +S31AFE001E4500000000000000000000000000000000000000000084 +S31AFE001E5A0000000000000000000000000000000000000000006F +S31AFE001E6F0000000000000000000000000000000000000000005A +S31AFE001E8400000000000000000000000000000000000000000045 +S31AFE001E9900000000000000000000000000000000000000000030 +S31AFE001EAE0000000000000000000000000000000000000000001B +S31AFE001EC300000000000000000000000000000000000000000006 +S31AFE001ED8000000000000000000000000000000000000000000F1 +S31AFE001EED000000000000000000000000000000000000007C71EF +S31AFE001F0243A67C9243A67CB343A67C80002638A01F0054A5D1EB +S31AFE001F17BE3C600000606330007C63282E7CA802A67C6803A6D6 +S31AFE001F2C38601F004E80002000000000000000000000000000F7 +S31AFE001F4100000000000000000000000000000000000000000087 +S31AFE001F5600000000000000000000000000000000000000000072 +S31AFE001F6B0000000000000000000000000000000000000000005D +S31AFE001F8000000000000000000000000000000000000000000048 +S31AFE001F9500000000000000000000000000000000000000000033 +S31AFE001FAA0000000000000000000000000000000000000000001E +S31AFE001FBF00000000000000000000000000000000000000000009 +S31AFE001FD4000000000000000000000000000000000000000000F4 +S31AFE001FE9000000000000000000000000000000000000000000DF +S307FE001FFE0000DD +S31AFE0020003C600000606300077C7E23A6386000007C7523A63C10 +S31AFE002015600400606300007C0004AC7C788BA63C6004006063D7 +S31AFE00202A00004C00012C7C708BA64C00012C7C70C2A664632053 +S31AFE00203F007C70C3A67C78C2A6646320007C78C3A63C600000F7 +S31AFE002054606330027C0004AC7C6001247C0004AC3C4000006049 +S31AFE00206942B8F87C631A787C7C43A67C8422787C9D43A6480036 +S31AFE00207E46F93C20000060214A307C3043A63C60FE00606300C1 +S31AFE002093003C800000608400003CA0FE0060A51F347C0328407B +S31AFE0020A8418200203863FFFC3884FFFC38A5FFFC8403000494F8 +S31AFE0020BD0400047C0328404180FFF43C60FE00606321E43C8049 +S31AFE0020D20000608430003884FFFC38A000209464000438A5FF5A +S31AFE0020E7FF2C0500004082FFF43C60FE00606322EC3C800000D4 +S31AFE0020FC6084300090640014906400243C60FE01606343E03CDA +S31AFE002111800000608433003CA0000060A539087C042840418251 +S31AFE002126001C800300009004000038630004388400047C042866 +S31AFE00213B404180FFEC3C60000060633A303C80000160841F3CDA +S31AFE002150380000007C0320404182001490030000386300047CDA +S31AFE0021650320404180FFF43C600000606339083C80000060840A +S31AFE00217A3A2C7C0320404182001490030000386300047C03205F +S31AFE00218F404180FFF43821FFF438000000900100009001000895 +S31AFE0021A49421FFC848004155480045A948003C553C60000060BD +S31AFE0021B96330327C0004AC7C6001247C0004AC48003CA948007A +S31AFE0021CE3B7948003CE9480061D948008B814800040548000068 +S31AFE0021E3003821FF64906100989081008090A100883C600000B8 +S31AFE0021F8606330327C0004AC7C6001247C0004AC7C7142A690EB +S31AFE00220D61000C7C9242A6908100107CB342A690A10014900147 +S31AFE0022220000904100087C230B783863009C9061000490C1002B +S31AFE0022371890E1001C9101002091210024914100289161002C49 +S31AFE00224C9181003091A1003491C1003891E1003C920100409234 +S31AFE002261210044924100489261004C9281005092A1005492C168 +S31AFE002276005892E1005C930100609321006493410068936100EC +S31AFE00228B6C9381007093A1007493C1007893E1007C91C100385C +S31AFE0022A091E1003C7C6102A67C8902A67CBA02A67CDB02A690D8 +S31AFE0022B56100849081008C90A1009490C100907C230B7838216D +S31AFE0022CAFFC83800000090010000900100089421FFC83CA0FE7C +S31AFE0022DF0060A5247C7CA803A648003ABC3821FF6490610098F1 +S31AFE0022F49081008090A100883C600000606330327C0004AC7C1E +S31AFE0023096001247C0004AC7C7142A69061000C7C9242A6908131 +S31AFE00231E00107CB342A690A1001490010000904100087C230B26 +S31AFE002333783863009C9061000490C1001890E1001C9101002045 +S31AFE00234891210024914100289161002C9181003091A100349155 +S31AFE00235DC1003891E1003C9201004092210044924100489261E8 +S31AFE002372004C9281005092A1005492C1005892E1005C9301000E +S31AFE0023876093210064934100689361006C9381007093A10074FD +S31AFE00239C93C1007893E1007C91C1003891E1003C7C6102A67C33 +S31AFE0023B18902A67CBA02A67CDB02A6906100849081008C90A1C2 +S31AFE0023C6009490C100907C2E0B783C60000060634A303C8000C7 +S31AFE0023DB0060843A307CA408514180000C7CA118514181000805 +S31AFE0023F07C611B7895C1FFFC3821FFC83800000090010000909A +S31AFE0024050100089421FFC881EE009855EFB7FF418200183DE040 +S31AFE00241AFF0061EF001C89EF000055EFF0BE39EF000191EE002C +S31AFE00242F9855EF103A3C600000606339B891C30000806E009844 +S31AFE0024443CC0000060C633587CC6782E3C800000608434447C56 +S31AFE00245984782E7CC903A64E800421802100703821FFC83800F6 +S31AFE00246E000090010000900100089421FFC83821007080610005 +S31AFE002483848081008880A1008C7C6103A67C8803A67CA903A685 +S31AFE00249881C1003881E1003C80C1001880E1001C81010020811A +S31AFE0024AD210024814100288161002C8181003081A1003481C10F +S31AFE0024C2003881E1003C82010040822100448241004882610093 +S31AFE0024D74C8281005082A1005482C1005882E1005C8301006098 +S31AFE0024EC83210064834100688361006C8381007083A1007483C4 +S31AFE002501C1007883E1007C7C0000A638600000506004207C009E +S31AFE00251604AC7C0001247C0004AC800100008041000880610004 +S31AFE00252B808081009480A100907C6FF1207C9A03A67CBB03A636 +S31AFE0025408061000C8081001080A10014802100047C0004AC4C32 +S31AFE00255500012C4C0000647C230B783C80000060844A30388498 +S31AFE00256AFFE87C8123789061000C7C6000A6906100107C680273 +S31AFE00257FA6906100143800000090010000900100087C0000A614 +S31AFE00259460638000506004207C0004AC7C0001247C0004AC948A +S31AFE0025A921FFC848007C3D38210038806100147C6803A680A1FC +S31AFE0025BE000C806100107C0000A6506004207C0004AC7C000168 +S31AFE0025D3247C0004AC7CA12B784E8000209421FED87C0802A63A +S31AFE0025E89321010C93410110936101149381011893A1011C931A +S31AFE0025FDC1012093E101249001012C3FA000003BBD3200813DC5 +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 +S705FE000100FB
--- a/packages/hal/powerpc/mbx/current/include/pkgconf/mlt_powerpc_mbx_ram.h +++ b/packages/hal/powerpc/mbx/current/include/pkgconf/mlt_powerpc_mbx_ram.h @@ -1,22 +1,37 @@ -// eCos memory layout - Thu Jun 15 15:44:21 2000 +// eCos memory layout - Fri Oct 20 10:35: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 (0) #define CYGMEM_REGION_ram_SIZE (0x400000) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) -extern char CYG_LABEL_NAME (_reserved_vectors) []; -#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (_reserved_vectors)) +#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 (0x3000) -extern char CYG_LABEL_NAME (_reserved_vsr_table) []; -#define CYGMEM_SECTION_reserved_vsr_table (CYG_LABEL_NAME (_reserved_vsr_table)) +#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 (0x200) -extern char CYG_LABEL_NAME (_reserved_virtual_table) []; -#define CYGMEM_SECTION_reserved_virtual_table (CYG_LABEL_NAME (_reserved_virtual_table)) +#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) -extern char CYG_LABEL_NAME (_reserved_for_rom) []; -#define CYGMEM_SECTION_reserved_for_rom (CYG_LABEL_NAME (_reserved_for_rom)) -#define CYGMEM_SECTION_reserved_for_rom_SIZE (0xcd00) +#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 (0x1cd00) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x400000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/powerpc/mbx/current/include/pkgconf/mlt_powerpc_mbx_ram.ldi +++ b/packages/hal/powerpc/mbx/current/include/pkgconf/mlt_powerpc_mbx_ram.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Thu Jun 15 15:44:21 2000 +// eCos memory layout - Fri Oct 20 10:35:23 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0, LENGTH = 0x400000 @@ -10,10 +12,10 @@ MEMORY SECTIONS { SECTIONS_BEGIN - __reserved_vectors = 0; . = __reserved_vectors + 0x3000; - __reserved_vsr_table = ALIGN (0x10); . = __reserved_vsr_table + 0x200; - __reserved_virtual_table = ALIGN (0x10); . = __reserved_virtual_table + 0x100; - __reserved_for_rom = ALIGN (0x10); . = __reserved_for_rom + 0xcd00; + CYG_LABEL_DEFN(__reserved_vectors) = 0; . = CYG_LABEL_DEFN(__reserved_vectors) + 0x3000; + CYG_LABEL_DEFN(__reserved_vsr_table) = ALIGN (0x10); . = CYG_LABEL_DEFN(__reserved_vsr_table) + 0x200; + 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) + 0x1cd00; SECTION_vectors (ram, ALIGN (0x10), LMA_EQ_VMA) SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) @@ -24,5 +26,6 @@ SECTIONS SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) SECTION_sbss (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/powerpc/mbx/current/include/pkgconf/mlt_powerpc_mbx_ram.mlt +++ b/packages/hal/powerpc/mbx/current/include/pkgconf/mlt_powerpc_mbx_ram.mlt @@ -3,7 +3,7 @@ region ram 0 400000 0 ! section reserved_vectors 3000 1 0 0 1 1 1 1 0 0 reserved_vsr_table reserved_vsr_table ! section reserved_vsr_table 200 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 cd00 10 0 0 0 1 0 1 vectors vectors ! +section reserved_for_rom 1cd00 10 0 0 0 1 0 1 vectors vectors ! section vectors 0 10 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 rodata1 rodata1 ! @@ -13,4 +13,5 @@ section fixup 0 4 0 1 0 1 0 1 gcc_except section gcc_except_table 0 1 0 1 0 1 0 1 data data ! section data 0 8 0 1 0 1 0 1 sbss sbss ! section sbss 0 4 0 1 0 1 0 1 bss bss ! -section bss 0 10 0 1 0 0 0 0 ! +section bss 0 10 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/powerpc/mbx/current/include/pkgconf/mlt_powerpc_mbx_rom.h +++ b/packages/hal/powerpc/mbx/current/include/pkgconf/mlt_powerpc_mbx_rom.h @@ -1,22 +1,35 @@ -// eCos memory layout - Thu Jun 15 15:46:43 2000 +// eCos memory layout - Fri Oct 20 10:35:48 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 (0) #define CYGMEM_REGION_ram_SIZE (0x400000) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) #define CYGMEM_REGION_rom (0xfe000000) #define CYGMEM_REGION_rom_SIZE (0x800000) #define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) -extern char CYG_LABEL_NAME (_reserved_vectors) []; -#define CYGMEM_SECTION_reserved_vectors (CYG_LABEL_NAME (_reserved_vectors)) +#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 (0x3000) -extern char CYG_LABEL_NAME (_reserved_vsr_table) []; -#define CYGMEM_SECTION_reserved_vsr_table (CYG_LABEL_NAME (_reserved_vsr_table)) +#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 (0x200) -extern char CYG_LABEL_NAME (_reserved_virtual_table) []; -#define CYGMEM_SECTION_reserved_virtual_table (CYG_LABEL_NAME (_reserved_virtual_table)) +#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 (0x400000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/powerpc/mbx/current/include/pkgconf/mlt_powerpc_mbx_rom.ldi +++ b/packages/hal/powerpc/mbx/current/include/pkgconf/mlt_powerpc_mbx_rom.ldi @@ -1,54 +1,31 @@ -//=========================================================================== -// -// ROM startup linker control script -// -//=========================================================================== -//####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#### -//=========================================================================== - -MEMORY -{ - rom : ORIGIN = 0xfe000000, LENGTH = 0x800000 - ram : ORIGIN = 0x00000000, LENGTH = 0x400000 -} - -SECTIONS -{ - SECTIONS_BEGIN - SECTION_vectors (rom, 0xfe000000, 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) - __reserved_vectors = 0; . = __reserved_vectors + 0x3000; - __reserved_vsr_table = ALIGN (0x1); . = __reserved_vsr_table + 0x200; - __reserved_virtual_table = ALIGN (0x1); . = __reserved_virtual_table + 0x100; - SECTION_data (ram, ALIGN (0x10), FOLLOWING (.gcc_except_table)) - SECTION_sbss (ram, ALIGN (0x4), LMA_EQ_VMA) - SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) - SECTIONS_END -} +// eCos memory layout - Fri Oct 20 10:35:48 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> + +MEMORY +{ + ram : ORIGIN = 0, LENGTH = 0x400000 + rom : ORIGIN = 0xfe000000, LENGTH = 0x800000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_vectors (rom, 0xfe000000, 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) + CYG_LABEL_DEFN(__reserved_vectors) = 0; . = CYG_LABEL_DEFN(__reserved_vectors) + 0x3000; + CYG_LABEL_DEFN(__reserved_vsr_table) = ALIGN (0x1); . = CYG_LABEL_DEFN(__reserved_vsr_table) + 0x200; + CYG_LABEL_DEFN(__reserved_virtual_table) = ALIGN (0x1); . = CYG_LABEL_DEFN(__reserved_virtual_table) + 0x100; + SECTION_data (ram, ALIGN (0x10), FOLLOWING (.gcc_except_table)) + SECTION_sbss (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +}
--- a/packages/hal/powerpc/mbx/current/include/pkgconf/mlt_powerpc_mbx_rom.mlt +++ b/packages/hal/powerpc/mbx/current/include/pkgconf/mlt_powerpc_mbx_rom.mlt @@ -1,16 +1,17 @@ -version 0 -region ram 0 400000 0 ! -region rom fe000000 800000 1 ! -section reserved_vectors 3000 1 0 0 1 1 1 1 0 0 reserved_vsr_table reserved_vsr_table ! -section reserved_vsr_table 200 1 0 0 0 1 0 1 reserved_virtual_table reserved_virtual_table ! -section reserved_virtual_table 100 1 0 0 0 1 0 0 data ! -section data 0 10 1 1 0 1 0 0 sbss ! -section sbss 0 4 0 1 0 1 0 1 bss bss ! -section bss 0 10 0 1 0 0 0 0 ! -section vectors 0 1 0 1 1 1 1 1 fe000000 fe000000 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 ! +version 0 +region ram 0 400000 0 ! +region rom fe000000 800000 1 ! +section reserved_vectors 3000 1 0 0 1 1 1 1 0 0 reserved_vsr_table reserved_vsr_table ! +section reserved_vsr_table 200 1 0 0 0 1 0 1 reserved_virtual_table reserved_virtual_table ! +section reserved_virtual_table 100 1 0 0 0 1 0 0 data ! +section data 0 10 1 1 0 1 0 0 sbss ! +section sbss 0 4 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 ! +section vectors 0 1 0 1 1 1 1 1 fe000000 fe000000 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/powerpc/mbx/current/misc/STUBS_config +++ /dev/null @@ -1,85 +0,0 @@ -#! /bin/sh -# Configure PowerPC/cogent eCos to create Cogent GDB stubs -# Ensure that PATH include the directory where the PPC 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. -# Remember to be careful with byte-endianess in the ROM programmer. - -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=powerpc --platform=mbx --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 -powerpc-eabi-objcopy -O binary hal/common/current/src/stubrom/stubrom stubrom.bin
new file mode 100644 --- /dev/null +++ b/packages/hal/powerpc/mbx/current/misc/redboot_RAM.cfg @@ -0,0 +1,56 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "" ; + hardware mbx ; + template redboot ; + package -hardware CYGPKG_HAL_POWERPC current ; + package -hardware CYGPKG_HAL_POWERPC_MPC8xx current ; + package -hardware CYGPKG_HAL_POWERPC_MBX current ; + package -hardware CYGPKG_HAL_QUICC current ; + package -hardware CYGPKG_IO_SERIAL_POWERPC_QUICC_SMC current ; + package -hardware CYGPKG_DEVS_ETH_POWERPC_QUICC current ; + package -template CYGPKG_HAL current ; + package -template CYGPKG_INFRA current ; + package -template CYGPKG_REDBOOT current ; + package CYGPKG_IO_ETH_DRIVERS current ; + package CYGPKG_IO_FLASH current ; + package CYGPKG_DEVS_FLASH_MBX current ; +}; + +cdl_option CYGBLD_BUILD_GDB_STUBS { + user_value 0 +}; + +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + inferred_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + inferred_value 1 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + inferred_value 1 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + inferred_value 0 +}; + +cdl_component CYGBLD_BUILD_REDBOOT { + user_value 1 +}; + +
new file mode 100644 --- /dev/null +++ b/packages/hal/powerpc/mbx/current/misc/redboot_ROM.cfg @@ -0,0 +1,64 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "" ; + hardware mbx ; + template redboot ; + package -hardware CYGPKG_HAL_POWERPC current ; + package -hardware CYGPKG_HAL_POWERPC_MPC8xx current ; + package -hardware CYGPKG_HAL_POWERPC_MBX current ; + package -hardware CYGPKG_HAL_QUICC current ; + package -hardware CYGPKG_IO_SERIAL_POWERPC_QUICC_SMC current ; + package -hardware CYGPKG_DEVS_ETH_POWERPC_QUICC current ; + package -template CYGPKG_HAL current ; + package -template CYGPKG_INFRA current ; + package -template CYGPKG_REDBOOT current ; + package CYGPKG_IO_ETH_DRIVERS current ; + package CYGPKG_IO_FLASH current ; + package CYGPKG_DEVS_FLASH_MBX current ; +}; + +cdl_option CYGBLD_BUILD_GDB_STUBS { + user_value 0 +}; + +cdl_option CYGDBG_HAL_COMMON_INTERRUPTS_SAVE_MINIMUM_CONTEXT { + user_value 0 +}; + +cdl_option CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM { + inferred_value 0 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS { + inferred_value 1 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_BREAK_SUPPORT { + inferred_value 1 +}; + +cdl_option CYGDBG_HAL_DEBUG_GDB_CTRLC_SUPPORT { + inferred_value 0 +}; + +cdl_component CYGBLD_BUILD_REDBOOT { + user_value 1 +}; + + + +cdl_option CYGSEM_HAL_ROM_MONITOR { + user_value 1 +}; + +cdl_component CYG_HAL_STARTUP { + user_value ROM +};
--- a/packages/hal/powerpc/mbx/current/tests/mbxtime.cxx +++ b/packages/hal/powerpc/mbx/current/tests/mbxtime.cxx @@ -163,9 +163,17 @@ static Cyg_Thread thread2 CYG_INIT_P // ------------------------------------------------------------------------- +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG +externC void +cyg_hal_invoke_constructors(); +#endif + externC void cyg_user_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif CYG_TEST_INIT(); CYG_TEST_INFO( "cyg_user_start()" ); thread1.resume();
--- a/packages/hal/powerpc/sim/current/ChangeLog +++ b/packages/hal/powerpc/sim/current/ChangeLog @@ -1,3 +1,15 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_powerpc_sim_ram.h: + * include/pkgconf/mlt_powerpc_sim_ram.ldi: + Regenerated with updated host tools + +2000-10-19 Jesper Skov <jskov@redhat.com> + + * include/pkgconf/mlt_powerpc_sim_ram.h: Added heap1 label. + * include/pkgconf/mlt_powerpc_sim_ram.mlt: Same. + * include/pkgconf/mlt_powerpc_sim_ram.ldi: Same. + 2000-06-27 Jesper Skov <jskov@redhat.com> * src/hal_aux.c (hal_platform_init): Added.
--- a/packages/hal/powerpc/sim/current/include/pkgconf/mlt_powerpc_sim_ram.h +++ b/packages/hal/powerpc/sim/current/include/pkgconf/mlt_powerpc_sim_ram.h @@ -1,13 +1,22 @@ -// eCos memory layout - Mon Mar 06 11:00:56 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 (0x100000) -#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) -extern char CYG_LABEL_NAME (_reserved_vsr_table) []; -#define CYGMEM_SECTION_reserved_vsr_table (CYG_LABEL_NAME (_reserved_vsr_table)) -#define CYGMEM_SECTION_reserved_vsr_table_SIZE (0x200) +// eCos memory layout - Fri Oct 20 10:36:41 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 (0) +#define CYGMEM_REGION_ram_SIZE (0x100000) +#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +#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 (0x200) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x100000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/powerpc/sim/current/include/pkgconf/mlt_powerpc_sim_ram.ldi +++ b/packages/hal/powerpc/sim/current/include/pkgconf/mlt_powerpc_sim_ram.ldi @@ -1,55 +1,28 @@ -//=========================================================================== -// -// RAM startup linker control script -// -//=========================================================================== -//####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#### -//=========================================================================== - -// eCos memory layout - Mon Mar 06 11:00:56 2000 - -// This is a generated file - do not edit - -MEMORY -{ - ram : ORIGIN = 0, LENGTH = 0x100000 -} - -SECTIONS -{ - SECTIONS_BEGIN - SECTION_vectors (ram, 0, LMA_EQ_VMA) - __reserved_vsr_table = 0x3000; . = __reserved_vsr_table + 0x200; - 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_sbss (ram, ALIGN (0x4), LMA_EQ_VMA) - SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) - SECTIONS_END -} +// eCos memory layout - Fri Oct 20 10:36:41 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> + +MEMORY +{ + ram : ORIGIN = 0, LENGTH = 0x100000 +} + +SECTIONS +{ + SECTIONS_BEGIN + SECTION_vectors (ram, 0, LMA_EQ_VMA) + CYG_LABEL_DEFN(__reserved_vsr_table) = 0x3000; . = CYG_LABEL_DEFN(__reserved_vsr_table) + 0x200; + 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_sbss (ram, ALIGN (0x4), LMA_EQ_VMA) + SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); + SECTIONS_END +}
--- a/packages/hal/powerpc/sim/current/include/pkgconf/mlt_powerpc_sim_ram.mlt +++ b/packages/hal/powerpc/sim/current/include/pkgconf/mlt_powerpc_sim_ram.mlt @@ -1,13 +1,14 @@ -version 0 -region ram 0 100000 0 ! -section vectors 0 1 0 1 1 0 1 0 0 0 ! -section reserved_vsr_table 200 1 0 0 1 1 1 1 3000 3000 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 sbss sbss ! -section sbss 0 4 0 1 0 1 0 1 bss bss ! -section bss 0 10 0 1 0 0 0 0 ! +version 0 +region ram 0 100000 0 ! +section vectors 0 1 0 1 1 0 1 0 0 0 ! +section reserved_vsr_table 200 1 0 0 1 1 1 1 3000 3000 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 sbss sbss ! +section sbss 0 4 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 !
--- a/packages/hal/sh/arch/current/ChangeLog +++ b/packages/hal/sh/arch/current/ChangeLog @@ -1,3 +1,29 @@ +2000-10-23 Jesper Skov <jskov@redhat.com> + + * src/hal_misc.c: Always include hal_intr.h + + * src/sh3_sci.c: Use specified value for default baud rate. + * src/sh3_scif.c: Same. + +2000-10-20 Jesper Skov <jskov@redhat.com> + + * src/hal_misc.c: Update __mem_fault_handler declaration. + +2000-10-19 Jesper Skov <jskov@redhat.com> + + * include/sh_regs.h (CYGARC_REG_WCR1_0WS, CYGARC_REG_WCR2_0WS): + Added for consistent init code. + +2000-10-17 Jesper Skov <jskov@redhat.com> + + * src/vectors.S (__reset_platform): Rearrange constants used in + early init code. + +2000-10-16 Jonathan Larmour <jlarmour@redhat.com> + + * include/hal_arch.h (CYGARC_JMP_BUF_SIZE): Define hal_jmp_buf in + terms of this. + 2000-10-11 Jesper Skov <jskov@redhat.com> * src/vectors.S (__reset_platform): Clear watchdog control flags.
--- a/packages/hal/sh/arch/current/cdl/hal_sh.cdl +++ b/packages/hal/sh/arch/current/cdl/hal_sh.cdl @@ -91,6 +91,18 @@ cdl_package CYGPKG_HAL_SH { @rm target.tmp } + cdl_interface CYGINT_HAL_SH_DMA_CHANNELS { + display "Number of DMA channels" + } + + cdl_interface CYGINT_HAL_SH_DMA_CHANNELS_USED { + display "Number of requested DMA channels" + requires CYGINT_HAL_SH_DMA_CHANNELS_USED <= CYGINT_HAL_SH_DMA_CHANNELS + description " + Various drivers may request use of a DMA channel, but only + so many are available. These interfaces make sure the + DMA resources are not overcommitted." + } cdl_component CYGPKG_HAL_SH_CPU { display "CPU type and endian mode controls"
--- a/packages/hal/sh/arch/current/include/hal_arch.h +++ b/packages/hal/sh/arch/current/include/hal_arch.h @@ -226,7 +226,9 @@ typedef struct { cyg_uint32 r14; } hal_jmp_buf_t; -typedef cyg_uint32 hal_jmp_buf[sizeof(hal_jmp_buf_t) / sizeof(cyg_uint32)]; +#define CYGARC_JMP_BUF_SIZE (sizeof(hal_jmp_buf_t) / sizeof(cyg_uint32)) + +typedef cyg_uint32 hal_jmp_buf[ CYGARC_JMP_BUF_SIZE ]; externC int hal_setjmp(hal_jmp_buf env); externC void hal_longjmp(hal_jmp_buf env, int val);
--- a/packages/hal/sh/arch/current/include/sh_regs.h +++ b/packages/hal/sh/arch/current/include/sh_regs.h @@ -208,6 +208,7 @@ #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 @@ -227,6 +228,7 @@ #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
--- a/packages/hal/sh/arch/current/src/hal_misc.c +++ b/packages/hal/sh/arch/current/src/hal_misc.c @@ -51,10 +51,7 @@ #include <cyg/hal/hal_arch.h> // HAL header #include <cyg/hal/hal_cache.h> // HAL cache -#if defined(CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS) || \ - defined(CYGPKG_HAL_EXCEPTIONS) -# include <cyg/hal/hal_intr.h> // HAL interrupts/exceptions -#endif +#include <cyg/hal/hal_intr.h> // HAL interrupts/exceptions //--------------------------------------------------------------------------- // Functions used during initialization. @@ -96,7 +93,7 @@ externC void __handle_exception (void); externC HAL_SavedRegisters *_hal_registers; #ifdef CYGDBG_HAL_DEBUG_GDB_INCLUDE_STUBS -externC volatile void *__mem_fault_handler; +externC void* volatile __mem_fault_handler; #endif void
--- a/packages/hal/sh/arch/current/src/sh.ld +++ b/packages/hal/sh/arch/current/src/sh.ld @@ -40,6 +40,8 @@ // //========================================================================*/ +#include <pkgconf/system.h> + STARTUP(vectors.o) ENTRY(__reset) #ifdef EXTRAS @@ -53,66 +55,69 @@ GROUP(libtarget.a libgcc.a) #define FORCE_OUTPUT . = . -#define SECTIONS_BEGIN +# define SECTIONS_BEGIN -#define SECTION_vectors(_region_, _vma_, _lma_) \ - .vectors _vma_ : _lma_ \ - { FORCE_OUTPUT; KEEP(*(.vectors)) } \ - > _region_ \ +# define SECTION_vectors(_region_, _vma_, _lma_) \ + .vectors _vma_ : _lma_ \ + { FORCE_OUTPUT; KEEP(*(.vectors)) \ + } \ + > _region_ \ __vector_code_lma = LOADADDR(.vectors); -#define SECTION_text(_region_, _vma_, _lma_) \ - .text _vma_ : _lma_ \ - { __stext = .; \ - *(.text*) *(.gnu.warning) *(.gnu.linkonce*) *(.init) } \ - > _region_ \ +# define SECTION_text(_region_, _vma_, _lma_) \ + .text _vma_ : _lma_ \ + { __stext = .; \ + *(.text*) *(.gnu.warning) *(.gnu.linkonce*) *(.init) } \ + > _region_ \ __etext = .; PROVIDE (__etext = .); -#define SECTION_fini(_region_, _vma_, _lma_) \ - .fini _vma_ : _lma_ \ - { FORCE_OUTPUT; *(.fini) } \ - > _region_ +# define SECTION_data(_region_, _vma_, _lma_) \ + .data _vma_ : _lma_ \ + { __ram_data_start = ABSOLUTE(.); *(.data*) \ + . = ALIGN(8); ___CTOR_LIST__ = ABSOLUTE(.); \ + KEEP(*(SORT(.ctors*))) ___CTOR_END__ = ABSOLUTE(.); \ + ___DTOR_LIST__ = ABSOLUTE(.); \ + KEEP(*(SORT(.dtors*))) ___DTOR_END__ = ABSOLUTE(.); \ + . = ALIGN(8); \ + KEEP(*( SORT (.ecos.table.*))) ; \ + } > _region_ \ + __rom_data_start = LOADADDR(.data); \ + __ram_data_end = .; PROVIDE(__ram_data_end = .); \ + _edata = .; PROVIDE (edata = .); -#define SECTION_rodata1(_region_, _vma_, _lma_) \ - .rodata1 _vma_ : _lma_ \ - { FORCE_OUTPUT; *(.rodata1) } \ - > _region_ + -#define SECTION_rodata(_region_, _vma_, _lma_) \ - .rodata _vma_ : _lma_ \ - { FORCE_OUTPUT; *(.rodata*) } \ +#define SECTION_fini(_region_, _vma_, _lma_) \ + .fini _vma_ : _lma_ \ + { FORCE_OUTPUT; *(.fini) } \ > _region_ -#define SECTION_fixup(_region_, _vma_, _lma_) \ - .fixup _vma_ : _lma_ \ - { __FIXUP_START__ = ABSOLUTE(.); *(.fixup) __FIXUP_END__ = ABSOLUTE(.);}\ +#define SECTION_rodata1(_region_, _vma_, _lma_) \ + .rodata1 _vma_ : _lma_ \ + { FORCE_OUTPUT; *(.rodata1) } \ > _region_ -#define SECTION_gcc_except_table(_region_, _vma_, _lma_) \ - .gcc_except_table _vma_ : _lma_ \ - { __EXCEPT_START__ = ABSOLUTE(.); *(.gcc_except_table) \ - __EXCEPT_END__ = ABSOLUTE(.);} \ +#define SECTION_rodata(_region_, _vma_, _lma_) \ + .rodata _vma_ : _lma_ \ + { FORCE_OUTPUT; *(.rodata*) } \ > _region_ -#define SECTION_data(_region_, _vma_, _lma_) \ - .data _vma_ : _lma_ \ - { __ram_data_start = ABSOLUTE(.); *(.data*) \ - . = ALIGN(8); ___CTOR_LIST__ = ABSOLUTE(.); \ - KEEP(*(SORT(.ctors*))) ___CTOR_END__ = ABSOLUTE(.); \ - ___DTOR_LIST__ = ABSOLUTE(.); \ - KEEP(*(SORT(.dtors*))) ___DTOR_END__ = ABSOLUTE(.); \ - . = ALIGN(8); \ - KEEP(*( SORT (.ecos.table.*))) ; \ - } > _region_ \ - __rom_data_start = LOADADDR(.data); \ - __ram_data_end = .; PROVIDE(__ram_data_end = .); \ - _edata = .; PROVIDE (edata = .); +#define SECTION_fixup(_region_, _vma_, _lma_) \ + .fixup _vma_ : _lma_ \ + { __FIXUP_START__ = ABSOLUTE(.); *(.fixup) __FIXUP_END__ = ABSOLUTE(.);} \ + > _region_ -#define SECTION_bss(_region_, _vma_, _lma_) \ - .bss _vma_ : _lma_ \ - { __bss_start = ABSOLUTE (.); \ - FORCE_OUTPUT; *(.dynbss) *(.bss) *(COMMON) \ - __bss_end = ABSOLUTE (.); } \ +#define SECTION_gcc_except_table(_region_, _vma_, _lma_) \ + .gcc_except_table _vma_ : _lma_ \ + { __EXCEPT_START__ = ABSOLUTE(.); *(.gcc_except_table) \ + __EXCEPT_END__ = ABSOLUTE(.);} \ + > _region_ + +#define SECTION_bss(_region_, _vma_, _lma_) \ + .bss _vma_ : _lma_ \ + { __bss_start = ABSOLUTE (.); \ + FORCE_OUTPUT; *(.dynbss) *(.bss) *(COMMON) \ + __bss_end = ABSOLUTE (.); } \ > _region_ #define SECTIONS_END . = ALIGN(4); _end = .; PROVIDE (end = .);
--- a/packages/hal/sh/arch/current/src/sh3_sci.c +++ b/packages/hal/sh/arch/current/src/sh3_sci.c @@ -58,6 +58,10 @@ //-------------------------------------------------------------------------- +#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) { @@ -71,12 +75,12 @@ cyg_hal_plf_sci_init_channel(const chann // 8-1-no parity. HAL_WRITE_UINT8(base+_REG_SCSMR, 0); - // Set speed to 38400 + // 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(38400); + 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(38400)); + HAL_WRITE_UINT8(base+_REG_SCBRR, CYGARC_SCBRR_N(CYGNUM_HAL_SH_SH3_SCI_DEFAULT_BAUD_RATE)); } static cyg_bool
--- a/packages/hal/sh/arch/current/src/sh3_scif.c +++ b/packages/hal/sh/arch/current/src/sh3_scif.c @@ -64,6 +64,10 @@ //-------------------------------------------------------------------------- +#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) { @@ -81,18 +85,20 @@ cyg_hal_plf_scif_init_channel(const chan // 8-1-no parity. HAL_WRITE_UINT8(base+_REG_SCSMR, 0); - // Set speed to 38400 + // 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(38400); + 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(38400)); + 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/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). + // 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);
--- a/packages/hal/sh/arch/current/src/vectors.S +++ b/packages/hal/sh/arch/current/src/vectors.S @@ -740,6 +740,44 @@ 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 @@ -748,7 +786,7 @@ restore_state: # Now copy necessary bits to RAM and jump to the VMA base -#ifdef CYG_HAL_STARTUP_ROM +#if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_SUBSETROMRAM) # Copy data from ROM to ram mov.l $__rom_data_start,r3 ! r3 = rom start @@ -764,6 +802,7 @@ 1: mov.l @r3+,r0 bf 1b ! loop if not yet done 2: + # Jump to the proper VMA base of the code. mov.l $_complete_setup,r0 jmp @r0 @@ -773,13 +812,14 @@ 2: .extern __rom_data_start .extern __ram_data_start .extern __ram_data_end - $__rom_data_start: .long __rom_data_start $__ram_data_start: .long __ram_data_start $__ram_data_end: .long __ram_data_end + + $_complete_setup: .long _complete_setup @@ -818,39 +858,6 @@ 1: mov.l @r0+,r3 #endif -$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 - #----------------------------------------------------------------------------- # Complete target initialization and setup. # After this point we can use absolute addressing modes and access all the
--- a/packages/hal/sh/cq7708/current/ChangeLog +++ b/packages/hal/sh/cq7708/current/ChangeLog @@ -1,3 +1,20 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_sh_sh7708_cq7708_ram.h: + * include/pkgconf/mlt_sh_sh7708_cq7708_rom.h: + * include/pkgconf/mlt_sh_sh7708_cq7708_ram.ldi: + * include/pkgconf/mlt_sh_sh7708_cq7708_rom.ldi: + Regenerated with updated host tools + +2000-10-17 Jesper Skov <jskov@redhat.com> + + * include/pkgconf/mlt_sh_sh7708_cq7708_ram.h: Adding heap1. + * include/pkgconf/mlt_sh_sh7708_cq7708_ram.mlt: Ditto. + * include/pkgconf/mlt_sh_sh7708_cq7708_ram.ldi: Ditto. + * include/pkgconf/mlt_sh_sh7708_cq7708_rom.h: Ditto. + * include/pkgconf/mlt_sh_sh7708_cq7708_rom.mlt: Ditto. + * include/pkgconf/mlt_sh_sh7708_cq7708_rom.ldi: Ditto. + 2000-10-10 Jesper Skov <jskov@redhat.com> * cdl/hal_sh_sh7708_cq7708.cdl: Fix legal OCC ranges.
--- a/packages/hal/sh/cq7708/current/include/pkgconf/mlt_sh_sh7708_cq7708_ram.h +++ b/packages/hal/sh/cq7708/current/include/pkgconf/mlt_sh_sh7708_cq7708_ram.h @@ -1,10 +1,17 @@ -// eCos memory layout - Tue Apr 11 12:43:47 2000 +// eCos memory layout - Fri Oct 20 09:45:54 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 (0xc004000) #define CYGMEM_REGION_ram_SIZE (0x3fc000) #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 (0xc400000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/sh/cq7708/current/include/pkgconf/mlt_sh_sh7708_cq7708_ram.ldi +++ b/packages/hal/sh/cq7708/current/include/pkgconf/mlt_sh_sh7708_cq7708_ram.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Tue Apr 11 12:43:47 2000 +// eCos memory layout - Fri Oct 20 09:45:54 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0xc004000, LENGTH = 0x3fc000 @@ -19,5 +21,6 @@ SECTIONS 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 }
--- a/packages/hal/sh/cq7708/current/include/pkgconf/mlt_sh_sh7708_cq7708_ram.mlt +++ b/packages/hal/sh/cq7708/current/include/pkgconf/mlt_sh_sh7708_cq7708_ram.mlt @@ -8,4 +8,5 @@ section rodata 0 8 0 1 0 1 0 1 fixup fix 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 0 0 0 ! +section bss 0 10 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/sh/cq7708/current/include/pkgconf/mlt_sh_sh7708_cq7708_rom.h +++ b/packages/hal/sh/cq7708/current/include/pkgconf/mlt_sh_sh7708_cq7708_rom.h @@ -1,13 +1,20 @@ -// eCos memory layout - Tue Apr 11 12:40:10 2000 +// eCos memory layout - Fri Oct 20 09:49:06 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 (0xc000200) #define CYGMEM_REGION_ram_SIZE (0x3ffe00) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) #define CYGMEM_REGION_rom (0xa0000000) #define CYGMEM_REGION_rom_SIZE (0x8000) #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 (0xc400000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/sh/cq7708/current/include/pkgconf/mlt_sh_sh7708_cq7708_rom.ldi +++ b/packages/hal/sh/cq7708/current/include/pkgconf/mlt_sh_sh7708_cq7708_rom.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Tue Apr 11 12:40:10 2000 +// eCos memory layout - Fri Oct 20 09:49:06 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0xc000200, LENGTH = 0x3ffe00 @@ -20,5 +22,6 @@ SECTIONS SECTION_gcc_except_table (rom, ALIGN (0x1), LMA_EQ_VMA) SECTION_data (ram, 0xc000200, FOLLOWING (.gcc_except_table)) SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/sh/cq7708/current/include/pkgconf/mlt_sh_sh7708_cq7708_rom.mlt +++ b/packages/hal/sh/cq7708/current/include/pkgconf/mlt_sh_sh7708_cq7708_rom.mlt @@ -2,7 +2,8 @@ version 0 region ram c000200 3ffe00 0 ! region rom a0000000 8000 1 ! section data 0 1 1 1 1 1 0 0 c000200 bss ! -section bss 0 10 0 1 0 0 0 0 ! +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 !
--- a/packages/hal/sh/edk/current/ChangeLog +++ b/packages/hal/sh/edk/current/ChangeLog @@ -1,3 +1,25 @@ +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.
--- a/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_ram.h +++ b/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_ram.h @@ -1,10 +1,17 @@ -// eCos memory layout - Wed Nov 24 15:34:41 1999 - -// This is a generated file - changes will be lost if ConfigTool(MLT) is run - -#include <cyg/infra/cyg_type.h> -#include <stddef.h> - -#define CYGMEM_REGION_ram (0x8008000) -#define CYGMEM_REGION_ram_SIZE (0xf8000) -#define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) +// 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))
--- a/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_ram.ldi +++ b/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_ram.ldi @@ -1,49 +1,26 @@ -//=========================================================================== -// -// RAM start linker control script -// -//=========================================================================== -//####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#### -//=========================================================================== - -MEMORY -{ - ram : ORIGIN = 0x08008000, LENGTH = 0xf8000 -} - -SECTIONS -{ - SECTIONS_BEGIN - SECTION_vectors (ram, 0x08008000, 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) - SECTIONS_END -} +// 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 +}
--- a/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_ram.mlt +++ b/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_ram.mlt @@ -1,11 +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 0 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 !
--- a/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_rom.h +++ b/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_rom.h @@ -1,13 +1,20 @@ -// eCos memory layout - Wed Nov 24 11:54:50 1999 - -// This is a generated file - changes will be lost if ConfigTool(MLT) is run - -#include <cyg/infra/cyg_type.h> -#include <stddef.h> - -#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) +// 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))
--- a/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_rom.ldi +++ b/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_rom.ldi @@ -1,50 +1,27 @@ -//=========================================================================== -// -// ROM start linker control script -// -//=========================================================================== -//####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#### -//=========================================================================== - -MEMORY -{ - rom : ORIGIN = 0xa0000000, LENGTH = 0x20000 - ram : ORIGIN = 0x08000200, LENGTH = 0xffe00 -} - -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, 0x08000200, FOLLOWING (.gcc_except_table)) - SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) - SECTIONS_END -} +// 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 +}
--- a/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_rom.mlt +++ b/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_rom.mlt @@ -1,12 +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 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 ! +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 !
--- a/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_romram.h +++ b/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_romram.h @@ -1,13 +1,20 @@ -// eCos memory layout - Wed Apr 12 15:28:35 2000 +// 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))
--- a/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_romram.ldi +++ b/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_romram.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Wed Apr 12 15:28:35 2000 +// 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 @@ -19,6 +21,7 @@ SECTIONS 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), FOLLOWING (.data)) + SECTION_bss (ram, ALIGN (0x10), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_romram.mlt +++ b/packages/hal/sh/edk/current/include/pkgconf/mlt_sh_edk7708_romram.mlt @@ -8,5 +8,6 @@ section rodata1 0 10 1 1 0 1 0 1 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 1 bss bss ! -section bss 0 10 1 1 0 0 0 0 ! +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 !
--- a/packages/hal/sparclite/arch/current/ChangeLog +++ b/packages/hal/sparclite/arch/current/ChangeLog @@ -1,3 +1,8 @@ +2000-10-16 Jonathan Larmour <jlarmour@redhat.com> + + * include/hal_arch.h (CYGARC_JMP_BUF_SIZE): Define hal_jmp_buf in + terms of this. + 2000-08-07 Jonathan Larmour <jlarmour@redhat.co.uk> * src/sparclite.ld: Remove extra underscore from below. It was
--- a/packages/hal/sparclite/arch/current/include/hal_arch.h +++ b/packages/hal/sparclite/arch/current/include/hal_arch.h @@ -241,11 +241,11 @@ CYG_MACRO_END //--------------------------------------------------------------------------- // HAL setjmp -#define HAL_JMP_BUF_SIZE 32 // (words) +#define CYGARC_JMP_BUF_SIZE 32 // (words) // this too must be doubleword aligned (64 bit) -typedef cyg_uint64 hal_jmp_buf[ HAL_JMP_BUF_SIZE / 2 ]; +typedef cyg_uint64 hal_jmp_buf[ CYGARC_JMP_BUF_SIZE / 2 ]; externC int hal_setjmp(hal_jmp_buf env); externC void hal_longjmp(hal_jmp_buf env, int val);
--- a/packages/hal/sparclite/sim/current/ChangeLog +++ b/packages/hal/sparclite/sim/current/ChangeLog @@ -1,3 +1,12 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_sparclite_sim_ram.mlt: + Add heap1 section + + * include/pkgconf/mlt_sparclite_sim_ram.h: + * include/pkgconf/mlt_sparclite_sim_ram.ldi: + Regenerated + 2000-02-10 Jesper Skov <jskov@redhat.com> * cdl/hal_sparclite_sim.cdl: Added.
--- a/packages/hal/sparclite/sim/current/include/pkgconf/mlt_sparclite_sim_ram.h +++ b/packages/hal/sparclite/sim/current/include/pkgconf/mlt_sparclite_sim_ram.h @@ -1,10 +1,17 @@ -// eCos memory layout - Wed Nov 24 12:00:24 1999 +// eCos memory layout - Fri Oct 20 08:18:20 2000 -// This is a generated file - changes will be lost if ConfigTool(MLT) is run +// This is a generated file - do not edit +#ifndef __ASSEMBLER__ #include <cyg/infra/cyg_type.h> #include <stddef.h> +#endif #define CYGMEM_REGION_ram (0x2000000) #define CYGMEM_REGION_ram_SIZE (0x80000) #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 (0x2080000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/sparclite/sim/current/include/pkgconf/mlt_sparclite_sim_ram.ldi +++ b/packages/hal/sparclite/sim/current/include/pkgconf/mlt_sparclite_sim_ram.ldi @@ -1,36 +1,12 @@ -//=========================================================================== -// -// MLT linker script export - Wed Jan 13 10:41:43 1999 -// -//=========================================================================== -//####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#### -//=========================================================================== +// eCos memory layout - Fri Oct 20 08:18:20 2000 + +// This is a generated file - do not edit + +#include <cyg/infra/cyg_type.inc> MEMORY { - ram : ORIGIN = 0x02000000, LENGTH = 0x80000 + ram : ORIGIN = 0x2000000, LENGTH = 0x80000 } SECTIONS @@ -45,5 +21,6 @@ SECTIONS SECTION_gcc_except_table (ram, ALIGN (0x1), LMA_EQ_VMA) SECTION_data (ram, ALIGN (0x1), LMA_EQ_VMA) SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/sparclite/sim/current/include/pkgconf/mlt_sparclite_sim_ram.mlt +++ b/packages/hal/sparclite/sim/current/include/pkgconf/mlt_sparclite_sim_ram.mlt @@ -8,4 +8,5 @@ section rodata1 0 1 0 1 0 1 0 1 fixup fi section fixup 0 1 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 1 0 1 0 1 0 1 bss bss ! -section bss 0 8 0 1 0 0 0 0 ! +section bss 0 8 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/sparclite/sleb/current/ChangeLog +++ b/packages/hal/sparclite/sleb/current/ChangeLog @@ -1,3 +1,20 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * tests/slebtime.cxx: Ensure default priority constructors + are called. + +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_sparclite_sleb_ram.mlt: + * include/pkgconf/mlt_sparclite_sleb_rom.mlt: + Add heap1 section + + * include/pkgconf/mlt_sparclite_sleb_ram.h: + * include/pkgconf/mlt_sparclite_sleb_rom.h: + * include/pkgconf/mlt_sparclite_sleb_ram.ldi: + * include/pkgconf/mlt_sparclite_sleb_rom.ldi: + Regenerated + 2000-02-16 Jesper Skov <jskov@redhat.com> * cdl/hal_sparclite_sleb.cdl: removed fix me
--- a/packages/hal/sparclite/sleb/current/include/pkgconf/mlt_sparclite_sleb_ram.h +++ b/packages/hal/sparclite/sleb/current/include/pkgconf/mlt_sparclite_sleb_ram.h @@ -1,10 +1,17 @@ -// eCos memory layout - Wed Nov 24 11:58:30 1999 +// eCos memory layout - Fri Oct 20 09:29:47 2000 -// This is a generated file - changes will be lost if ConfigTool(MLT) is run +// This is a generated file - do not edit +#ifndef __ASSEMBLER__ #include <cyg/infra/cyg_type.h> #include <stddef.h> +#endif #define CYGMEM_REGION_ram (0x4010000) #define CYGMEM_REGION_ram_SIZE (0x3f0000) #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 (0x4400000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/sparclite/sleb/current/include/pkgconf/mlt_sparclite_sleb_ram.ldi +++ b/packages/hal/sparclite/sleb/current/include/pkgconf/mlt_sparclite_sleb_ram.ldi @@ -1,47 +1,12 @@ -//=========================================================================== -// -// MLT linker script export - Wed Jan 13 10:41:43 1999 -// -//=========================================================================== -//####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#### -//=========================================================================== +// eCos memory layout - Fri Oct 20 09:29:47 2000 +// This is a generated file - do not edit -// The ram_vectors section is to allow some free space to copy vectors into -// from the ROM. This is required to be variable size to accomodate SVT or -// MVT; 80 bytes vs 4kB. Copying is not necessary with MVT, but it is -// optional because it may offer performance gains. Copying is required -// for SVT because the (aligned) start of ROM contains initialization -// instructions. RAM copy is used rather than leave a big gap in the ROM -// to get an aligned address for the trampoline code. For RAM startup, -// ram_vectors will usually be of size zero, unless MVT and copying are -// enabled for memory estimation reasons. +#include <cyg/infra/cyg_type.inc> MEMORY { - ram : ORIGIN = 0x04010000, LENGTH = 0x3f0000 + ram : ORIGIN = 0x4010000, LENGTH = 0x3f0000 } SECTIONS @@ -57,5 +22,6 @@ SECTIONS SECTION_gcc_except_table (ram, ALIGN (0x8), LMA_EQ_VMA) SECTION_data (ram, ALIGN (0x8), LMA_EQ_VMA) SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/sparclite/sleb/current/include/pkgconf/mlt_sparclite_sleb_ram.mlt +++ b/packages/hal/sparclite/sleb/current/include/pkgconf/mlt_sparclite_sleb_ram.mlt @@ -1,6 +1,6 @@ version 0 region ram 4010000 3f0000 0 ! -section ram_vectors 0 1 0 1 1 1 1 1 4010000 4010000 rom_vectors rom_vectors ! +section ram_vectors 0 1 0 1 1 1 1 1 4010000 4010000 rom_vectors rom_vectors !The ram_vectors section is to allow some free space to copy vectors into from the ROM. This is required to be variable size to accomodate SVT or MVT; 80 bytes vs 4kB. Copying is not necessary with MVT, but it is optional because it may offer performance gains. Copying is required for SVT because the (aligned) start of ROM contains initialization instructions. RAM copy is used rather than leave a big gap in the ROM to get an aligned address for the trampoline code. For RAM startup, ram_vectors will usually be of size zero, unless MVT and copying are enabled for memory estimation reasons. section rom_vectors 0 8 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 ! @@ -9,4 +9,5 @@ section rodata1 0 8 0 1 0 1 0 1 fixup fi section fixup 0 8 0 1 0 1 0 1 gcc_except_table gcc_except_table ! section gcc_except_table 0 8 0 1 0 1 0 1 data data ! section data 0 8 0 1 0 1 0 1 bss bss ! -section bss 0 8 0 1 0 0 0 0 ! +section bss 0 8 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/sparclite/sleb/current/include/pkgconf/mlt_sparclite_sleb_rom.h +++ b/packages/hal/sparclite/sleb/current/include/pkgconf/mlt_sparclite_sleb_rom.h @@ -1,13 +1,20 @@ -// eCos memory layout - Wed Nov 24 11:59:23 1999 +// eCos memory layout - Fri Oct 20 09:30:14 2000 -// This is a generated file - changes will be lost if ConfigTool(MLT) is run +// This is a generated file - do not edit +#ifndef __ASSEMBLER__ #include <cyg/infra/cyg_type.h> #include <stddef.h> +#endif #define CYGMEM_REGION_rom (0) #define CYGMEM_REGION_rom_SIZE (0x20000) #define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) #define CYGMEM_REGION_ram (0x4000000) #define CYGMEM_REGION_ram_SIZE (0x400000) #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 (0x4400000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/sparclite/sleb/current/include/pkgconf/mlt_sparclite_sleb_rom.ldi +++ b/packages/hal/sparclite/sleb/current/include/pkgconf/mlt_sparclite_sleb_rom.ldi @@ -1,62 +1,28 @@ -//=========================================================================== -// -// MLT linker script export - Wed Jan 13 10:41:43 1999 -// -//=========================================================================== -//####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#### -//=========================================================================== +// eCos memory layout - Fri Oct 20 09:30:14 2000 +// This is a generated file - do not edit -// The ram_vectors section is to allow some free space to copy vectors into -// from the ROM. This is required to be variable size to accomodate SVT or -// MVT; 80 bytes vs 4kB. Copying is not necessary with MVT, but it is -// optional because it may offer performance gains. Copying is required -// for SVT because the (aligned) start of ROM contains initialization -// instructions. RAM copy is used rather than leave a big gap in the ROM -// to get an aligned address for the trampoline code. For RAM startup, -// ram_vectors will usually be of size zero, unless MVT and copying are -// enabled for memory estimation reasons. +#include <cyg/infra/cyg_type.inc> MEMORY { - rom : ORIGIN = 0x00000000, LENGTH = 0x020000 - ram : ORIGIN = 0x04000000, LENGTH = 0x400000 + rom : ORIGIN = 0, LENGTH = 0x20000 + ram : ORIGIN = 0x4000000, LENGTH = 0x400000 } SECTIONS { SECTIONS_BEGIN - SECTION_rom_vectors (rom, 0x0, LMA_EQ_VMA) + SECTION_rom_vectors (rom, 0, LMA_EQ_VMA) SECTION_text (rom, ALIGN (0x4), LMA_EQ_VMA) SECTION_fini (rom, ALIGN (0x4), LMA_EQ_VMA) SECTION_rodata (rom, ALIGN (0x8), LMA_EQ_VMA) SECTION_rodata1 (rom, ALIGN (0x8), LMA_EQ_VMA) SECTION_fixup (rom, ALIGN (0x8), LMA_EQ_VMA) SECTION_gcc_except_table (rom, ALIGN (0x8), LMA_EQ_VMA) - SECTION_ram_vectors(ram, 0x04000000, LMA_EQ_VMA) + SECTION_ram_vectors (ram, 0x4000000, LMA_EQ_VMA) SECTION_data (ram, ALIGN (0x8), FOLLOWING (.gcc_except_table)) SECTION_bss (ram, ALIGN (0x8), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/sparclite/sleb/current/include/pkgconf/mlt_sparclite_sleb_rom.mlt +++ b/packages/hal/sparclite/sleb/current/include/pkgconf/mlt_sparclite_sleb_rom.mlt @@ -8,6 +8,7 @@ section rodata 0 8 0 1 0 1 0 1 rodata1 r section rodata1 0 8 0 1 0 1 0 1 fixup fixup ! section fixup 0 8 0 1 0 1 0 1 gcc_except_table gcc_except_table ! section gcc_except_table 0 8 0 1 0 0 0 1 data ! -section ram_vectors 0 1 0 1 1 1 1 0 4000000 4000000 data ! +section ram_vectors 0 1 0 1 1 1 1 0 4000000 4000000 data !The ram_vectors section is to allow some free space to copy vectors into from the ROM. This is required to be variable size to accomodate SVT or MVT; 80 bytes vs 4kB. Copying is not necessary with MVT, but it is optional because it may offer performance gains. Copying is required for SVT because the (aligned) start of ROM contains initialization instructions. RAM copy is used rather than leave a big gap in the ROM to get an aligned address for the trampoline code. For RAM startup, ram_vectors will usually be of size zero, unless MVT and copying are enabled for memory estimation reasons. section data 0 8 1 1 0 1 0 0 bss ! -section bss 0 8 0 1 0 0 0 0 ! +section bss 0 8 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/sparclite/sleb/current/tests/slebtime.cxx +++ b/packages/hal/sparclite/sleb/current/tests/slebtime.cxx @@ -147,9 +147,17 @@ static Cyg_Thread thread2 CYG_INIT_P // ------------------------------------------------------------------------- +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG +externC void +cyg_hal_invoke_constructors(); +#endif + externC void cyg_user_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif CYG_TEST_INIT(); CYG_TEST_INFO( "cyg_user_start()" ); thread1.resume();
--- a/packages/hal/v85x/arch/current/ChangeLog +++ b/packages/hal/v85x/arch/current/ChangeLog @@ -1,3 +1,12 @@ +2000-10-20 Jesper Skov <jskov@redhat.com> + + * src/hal_misc.c: Update __mem_fault_handler declaration. + +2000-10-16 Jonathan Larmour <jlarmour@redhat.com> + + * include/hal_arch.h (CYGARC_JMP_BUF_SIZE): Define hal_jmp_buf in + terms of this. + 2000-10-09 Gary Thomas <gthomas@redhat.com> * src/vectors.S (start): Need to handle ^C for all applications.
--- a/packages/hal/v85x/arch/current/include/hal_arch.h +++ b/packages/hal/v85x/arch/current/include/hal_arch.h @@ -196,7 +196,9 @@ typedef struct { cyg_uint32 lp; } hal_jmp_buf_t; -typedef cyg_uint32 hal_jmp_buf[sizeof(hal_jmp_buf_t) / sizeof(cyg_uint32)]; +#define CYGARC_JMP_BUF_SIZE (sizeof(hal_jmp_buf_t) / sizeof(cyg_uint32)) + +typedef cyg_uint32 hal_jmp_buf[ CYGARC_JMP_BUF_SIZE ]; externC int hal_setjmp(hal_jmp_buf env); externC void hal_longjmp(hal_jmp_buf env, int val);
--- a/packages/hal/v85x/arch/current/src/hal_misc.c +++ b/packages/hal/v85x/arch/current/src/hal_misc.c @@ -65,7 +65,7 @@ externC void __handle_exception (void); externC HAL_SavedRegisters *_hal_registers; -extern void *__mem_fault_handler; +externC void* volatile __mem_fault_handler; void exception_handler(HAL_SavedRegisters *regs)
--- a/packages/hal/v85x/ceb_v850/current/ChangeLog +++ b/packages/hal/v85x/ceb_v850/current/ChangeLog @@ -1,3 +1,15 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * include/pkgconf/mlt_v85x_v850_ceb_ram.mlt: + * include/pkgconf/mlt_v85x_v850_ceb_rom.mlt: + Add heap1 section + + * include/pkgconf/mlt_v85x_v850_ceb_ram.h: + * include/pkgconf/mlt_v85x_v850_ceb_rom.h: + * include/pkgconf/mlt_v85x_v850_ceb_ram.ldi: + * include/pkgconf/mlt_v85x_v850_ceb_rom.ldi: + Regenerated + 2000-06-30 Jesper Skov <jskov@redhat.com> * src/hal_diag.c: calling i/f macro changes.
--- a/packages/hal/v85x/ceb_v850/current/include/pkgconf/mlt_v85x_v850_ceb_ram.h +++ b/packages/hal/v85x/ceb_v850/current/include/pkgconf/mlt_v85x_v850_ceb_ram.h @@ -1,13 +1,22 @@ -// eCos memory layout - Fri Mar 17 13:07:05 2000 +// eCos memory layout - Fri Oct 20 08:31:56 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 (0xfc0000) #define CYGMEM_REGION_ram_SIZE (0x40000) #define CYGMEM_REGION_ram_ATTR (CYGMEM_REGION_ATTR_R | CYGMEM_REGION_ATTR_W) -extern char CYG_LABEL_NAME (_reserved) []; -#define CYGMEM_SECTION_reserved (CYG_LABEL_NAME (_reserved)) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__reserved) []; +#endif +#define CYGMEM_SECTION_reserved (CYG_LABEL_NAME (__reserved)) #define CYGMEM_SECTION_reserved_SIZE (0x4000) +#ifndef __ASSEMBLER__ +extern char CYG_LABEL_NAME (__heap1) []; +#endif +#define CYGMEM_SECTION_heap1 (CYG_LABEL_NAME (__heap1)) +#define CYGMEM_SECTION_heap1_SIZE (0x1000000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/v85x/ceb_v850/current/include/pkgconf/mlt_v85x_v850_ceb_ram.ldi +++ b/packages/hal/v85x/ceb_v850/current/include/pkgconf/mlt_v85x_v850_ceb_ram.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Fri Mar 17 13:07:05 2000 +// eCos memory layout - Fri Oct 20 08:31:56 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { ram : ORIGIN = 0xfc0000, LENGTH = 0x40000 @@ -10,7 +12,7 @@ MEMORY SECTIONS { SECTIONS_BEGIN - __reserved = 0xfc0000; . = __reserved + 0x4000; + CYG_LABEL_DEFN(__reserved) = 0xfc0000; . = CYG_LABEL_DEFN(__reserved) + 0x4000; SECTION_text (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_fini (ram, ALIGN (0x4), LMA_EQ_VMA) SECTION_rodata (ram, ALIGN (0x4), LMA_EQ_VMA) @@ -19,5 +21,6 @@ SECTIONS 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) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/v85x/ceb_v850/current/include/pkgconf/mlt_v85x_v850_ceb_ram.mlt +++ b/packages/hal/v85x/ceb_v850/current/include/pkgconf/mlt_v85x_v850_ceb_ram.mlt @@ -8,4 +8,5 @@ section rodata1 0 4 0 1 0 1 0 1 fixup fi 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 ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/hal/v85x/ceb_v850/current/include/pkgconf/mlt_v85x_v850_ceb_rom.h +++ b/packages/hal/v85x/ceb_v850/current/include/pkgconf/mlt_v85x_v850_ceb_rom.h @@ -1,13 +1,20 @@ -// eCos memory layout - Tue Mar 21 04:31:59 2000 +// eCos memory layout - Fri Oct 20 08:32: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_rom (0x100000) #define CYGMEM_REGION_rom_SIZE (0x80000) #define CYGMEM_REGION_rom_ATTR (CYGMEM_REGION_ATTR_R) #define CYGMEM_REGION_ram (0xfc0000) #define CYGMEM_REGION_ram_SIZE (0x40000) #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 (0x1000000 - (size_t) CYG_LABEL_NAME (__heap1))
--- a/packages/hal/v85x/ceb_v850/current/include/pkgconf/mlt_v85x_v850_ceb_rom.ldi +++ b/packages/hal/v85x/ceb_v850/current/include/pkgconf/mlt_v85x_v850_ceb_rom.ldi @@ -1,7 +1,9 @@ -// eCos memory layout - Tue Mar 21 04:31:59 2000 +// eCos memory layout - Fri Oct 20 08:32:23 2000 // This is a generated file - do not edit +#include <cyg/infra/cyg_type.inc> + MEMORY { rom : ORIGIN = 0x100000, LENGTH = 0x80000 @@ -20,5 +22,6 @@ SECTIONS SECTION_gcc_except_table (rom, ALIGN (0x4), LMA_EQ_VMA) SECTION_data (ram, 0xfc0000, FOLLOWING (.gcc_except_table)) SECTION_bss (ram, ALIGN (0x4), LMA_EQ_VMA) + CYG_LABEL_DEFN(__heap1) = ALIGN (0x8); SECTIONS_END }
--- a/packages/hal/v85x/ceb_v850/current/include/pkgconf/mlt_v85x_v850_ceb_rom.mlt +++ b/packages/hal/v85x/ceb_v850/current/include/pkgconf/mlt_v85x_v850_ceb_rom.mlt @@ -9,4 +9,5 @@ section rodata1 0 4 0 1 0 1 0 1 fixup fi 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 ! section data 0 4 1 1 1 1 0 0 fc0000 bss ! -section bss 0 4 0 1 0 0 0 0 ! +section bss 0 4 0 1 0 1 0 1 heap1 heap1 ! +section heap1 0 8 0 0 0 0 0 0 !
--- a/packages/io/eth/current/ChangeLog +++ b/packages/io/eth/current/ChangeLog @@ -1,3 +1,10 @@ +2000-10-17 Hugo Tyson <hmt@redhat.com> +2000-10-10 Andrew Lunn <Andrew.Lunn@ascom.ch> + * cdl/eth_drivers.cdl: Add configury to disable the warnings about + out of mbufs for receives. + + * src/net/eth_drv.c: The changes required for the above. + 2000-09-28 Hugo Tyson <hmt@redhat.com> * src/net/eth_drv.c (eth_drv_run_deliveries): Remove race
--- a/packages/io/eth/current/cdl/eth_drivers.cdl +++ b/packages/io/eth/current/cdl/eth_drivers.cdl @@ -54,6 +54,20 @@ cdl_package CYGPKG_IO_ETH_DRIVERS { default_value 1 compile net/eth_drv.c + cdl_option CYGPKG_IO_ETH_DRIVERS_WARN_NO_MBUFS { + display "Warn when there are no more mbufs" + flavor bool + default_value 1 + description " + Warnings about running out of mbufs are printed to the + diagnostic output channel via diag_printf() if this option + is enabled. Mbufs are the network stack's basic dynamic + memory objects that hold all packets in transit; running + out is bad for performance but not fatal, not a crash. + You might want to turn off the warnings to preserve realtime + properties of the system even in extremis." + } + cdl_component CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES { display "Simulate network failures for testing" flavor bool
--- a/packages/io/eth/current/src/net/eth_drv.c +++ b/packages/io/eth/current/src/net/eth_drv.c @@ -605,7 +605,9 @@ eth_drv_recv(struct eth_drv_sc *sc, int /* Pull packet off interface. */ MGETHDR(m, M_DONTWAIT, MT_DATA); if (m == 0) { +#ifdef CYGPKG_IO_ETH_DRIVERS_WARN_NO_MBUFS diag_printf("warning: eth_recv out of MBUFs\n"); +#endif } // Set up buffers @@ -636,7 +638,13 @@ eth_drv_recv(struct eth_drv_sc *sc, int MGET(m, M_DONTWAIT, MT_DATA); if (m == 0) { m_freem(top); - panic("out of MBUFs [2]"); +#ifdef CYGPKG_IO_ETH_DRIVERS_WARN_NO_MBUFS + diag_printf("out of MBUFs [2]"); +#endif + sg_list[sg_len].buf = (CYG_ADDRESS)0; + sg_list[sg_len].len = 0; + sg_len = 1; + break; } mlen = MLEN; } @@ -644,7 +652,9 @@ eth_drv_recv(struct eth_drv_sc *sc, int MCLGET(m, M_DONTWAIT); if ((m->m_flags & M_EXT) == 0) { m_freem(top); +#ifdef CYGPKG_IO_ETH_DRIVERS_WARN_NO_MBUFS diag_printf("warning: eth_recv out of MBUFs\n"); +#endif sg_list[sg_len].buf = (CYG_ADDRESS)0; sg_list[sg_len].len = min(total_len, MCLBYTES); sg_len++;
--- a/packages/io/fileio/current/ChangeLog +++ b/packages/io/fileio/current/ChangeLog @@ -1,3 +1,14 @@ +2000-10-13 Nick Garnett <nickg@cygnus.co.uk> + + * src/io.cxx (readwrite): Merged both read() and write() functions + into this single common routine. + + * include/fileio.h: Introduced a common typedef for both read and + write operations. + + * doc/fileio.txt: Added some text about getcwd() and tidied up + some other parts. + 2000-10-05 Nick Garnett <nickg@cygnus.co.uk> * src/file.cxx: Added support for getcwd(). There are three
--- a/packages/io/fileio/current/doc/fileio.txt +++ b/packages/io/fileio/current/doc/fileio.txt @@ -2,7 +2,7 @@ File System Support Infrastructure ================================== Nick Garnett -v0.1 +v0.2 This document describes the filesystem infrastructure provided in @@ -30,12 +30,6 @@ document. Object accessed through these network protocol sockets, device drivers, fifos, message queues or any other object that can present a file-like interface. - [Note: Additional notes and comments appear in square brackets, - just like this. They do not form part of the text of this - document.] - - [Note: Words and phrases that should be emphasized in some way are - surrounded by underscores, like _this_.] File System Table ----------------- @@ -45,10 +39,6 @@ filesystem implementation that is part o resident filesystem should export an entry to this table using the FSTAB_ENTRY() macro. - [Note: at present we do not support dynamic addition or removal of - table entries. If dynamic code loading is ever implemented, this - may need to change.] - The table entries are described by the following structure: struct cyg_fstab_entry @@ -239,7 +229,7 @@ responsibility of the file operation fun to date. The _f_data_ field contains private data placed here by the underlying -filesystem. Normally this will be a pointer or handle on the +filesystem. Normally this will be a pointer to or handle on the filesystem object that implements this file. The _f_xops_ field contains a pointer to any extra type specific @@ -342,6 +332,21 @@ Most of these considerations are invisib since they will access directories via the POSIX opendir()/readdir()/closedir() functions. +Support for the _getcwd()_ function is provided by three mechanisms. +The first is to use the _FS_INFO_GETCWD_ getinfo key on the filesystem +to use any internal support that it has for this. If that fails it +falls back on one of the two other mechanisms. If +_CYGPKG_IO_FILEIO_TRACK_CWD_ is set then the current directory is +tracked textually in chdir() and the result of that is reported in +getcwd(). Otherwise an attempt is made to traverse the directory tree +to its root using ".." entries. + +This last option is complicated and expensive, and relies on the +filesystem supporting "." and ".." entries. This is not always the +case, particularly if the filesystem has been ported from a +non-UNIX-compatible source. Tracking the pathname textually will +usually work, but might not produce optimum results when symbolic +links are being used. Synchronization @@ -449,15 +454,6 @@ and the entry _name_ field. When a match is invalidated by setting its _valid_ field false and the _name_ field to NULL. - [Note: The umount() function could also match on the _devname_ - field when searching. This would be compatible with various - flavors of Unix.] - - [Note: These calls fall outside the scope of any standard. The - mount() function given above is most similar to the Linux - function, with the omission of the rwflag and data arguments. It - remains to be seen whether these need to be introduced.] - Sockets ------- @@ -483,29 +479,19 @@ struct cyg_nstab_entry int protocol, cyg_file *file ); }; -This table is analogous to the filesystem and mount tables combined. +This table is analogous to a combination of the filesystem and mount +tables. The _valid_ field is set true if the stack's _init_ function returned successfully and the _syncmode_ field contains the CYG_SYNCMODE_SOCK_* bits described above. - [Note: Currently there are no plans to support the dynamic loading - of network protocol stacks.] - The _name_ field contains the name of the protocol stack. - [Note: This field is currently unused, but may be used in the - future to allow direct access to a specific stack via an as-yet - unspecified API.] - The _devname_ field names the device that the stack is using. This may reference a device under "/dev", or may be a name that is only meaningful to the stack itself. - [Note: Many network protocol stacks may have several concurrent - devices, and have their own mechanisms for attaching to them, so - it is not clear that this field is actually very useful.] - The _init_ function is called during system initialization to start the protocol stack running. If it returns non-zero the _valid_ field is set false and the stack will be ignored subsequently. @@ -557,7 +543,7 @@ The main part of the mechanism is the se processes its arguments and calls the _fo_select_ function on all file objects referenced by the file descriptor sets passed to it. If the same descriptor appears in more than one descriptor set, the -_fo_select_ function will be called for each appearance. +_fo_select_ function will be called separately for each appearance. The _which_ argument of the _fo_select_ function will either be CYG_FREAD to test for read conditions, CYG_FWRITE to test for write @@ -583,7 +569,16 @@ cause a select condition to become true activities of other threads. Whenever a selectable condition is satisfied, the object should call cyg_selwakeup() with a pointer to the appropriate cyg_selinfo structure. If the thread is still waiting, -this will cause it to wake up and return from the select() function. +this will cause it to wake up and repeat its poll of the file +descriptors. This time around, the object that caused the wakeup +should indicate that the select condition is satisfied, and the +_select()_ API call will return. + +Note that _select()_ does not exhibit real time behaviour: the +iterative poll of the descriptors, and the wakeup mechanism mitigate +against this. If real time response to device or socket I/O is +required then separate threads should be devoted to each device of +interest. Devices
--- a/packages/io/fileio/current/include/fileio.h +++ b/packages/io/fileio/current/include/fileio.h @@ -253,8 +253,9 @@ struct CYG_UIO_TAG //============================================================================= // Description of open file -typedef int cyg_fileop_read (struct CYG_FILE_TAG *fp, struct CYG_UIO_TAG *uio); -typedef int cyg_fileop_write (struct CYG_FILE_TAG *fp, struct CYG_UIO_TAG *uio); +typedef int cyg_fileop_readwrite (struct CYG_FILE_TAG *fp, struct CYG_UIO_TAG *uio); +typedef cyg_fileop_readwrite cyg_fileop_read; +typedef cyg_fileop_readwrite cyg_fileop_write; typedef int cyg_fileop_lseek (struct CYG_FILE_TAG *fp, off_t *pos, int whence ); typedef int cyg_fileop_ioctl (struct CYG_FILE_TAG *fp, CYG_ADDRWORD com, CYG_ADDRWORD data);
--- a/packages/io/fileio/current/src/io.cxx +++ b/packages/io/fileio/current/src/io.cxx @@ -66,9 +66,12 @@ #define UNLOCK_FILE( fp ) cyg_file_unlock( fp, fp->f_syncmode ) //========================================================================== -// Read from a file +// Read from or write to a file +// This is a common routine for doing both read and write +// operations. The direction argument controls slight the differences +// between them. -__externC ssize_t read( int fd, void *buf, size_t len ) +static ssize_t readwrite( int fd, void *buf, size_t len, int direction ) { FILEIO_ENTRY(); @@ -86,7 +89,7 @@ if( fp == NULL ) FILEIO_RETURN(EBADF); - if( (fp->f_flag & CYG_FREAD) == 0 ) + if( (fp->f_flag & direction) == 0 ) { cyg_fp_free( fp ); FILEIO_RETURN(EBADF); @@ -94,21 +97,27 @@ cyg_uio uio; cyg_iovec iov; - + cyg_fileop_readwrite *op; + iov.iov_base = buf; iov.iov_len = len; uio.uio_iov = &iov; uio.uio_iovcnt = 1; uio.uio_resid = len; - uio.uio_rw = UIO_READ; uio.uio_segflg = UIO_USERSPACE; cnt = len; + if( direction == O_RDONLY ) + uio.uio_rw = UIO_READ, op = fp->f_ops->fo_read; + else + uio.uio_rw = UIO_WRITE, op = fp->f_ops->fo_write; + + LOCK_FILE( fp ); - ret = fp->f_ops->fo_read( fp, &uio ); - + ret = op( fp, &uio ); + UNLOCK_FILE( fp ); cnt -= uio.uio_resid; @@ -122,58 +131,19 @@ } //========================================================================== +// Read from file + +__externC ssize_t read( int fd, void *buf, size_t len ) +{ + return readwrite( fd, buf, len, O_RDONLY ); +} + +//========================================================================== // Write to a file __externC ssize_t write( int fd, const void *buf, size_t len ) { - FILEIO_ENTRY(); - - CYG_CANCELLATION_POINT; - - ssize_t cnt; - int ret; - cyg_file *fp; - - if( len > SSIZE_MAX ) - FILEIO_RETURN(EINVAL); - - fp = cyg_fp_get( fd ); - - if( fp == NULL ) - FILEIO_RETURN(EBADF); - - if( (fp->f_flag & CYG_FWRITE) == 0) - { - cyg_fp_free( fp ); - FILEIO_RETURN(EBADF); - } - cyg_uio uio; - cyg_iovec iov; - - iov.iov_base = (void *)buf; - iov.iov_len = len; - uio.uio_iov = &iov; - uio.uio_iovcnt = 1; - uio.uio_resid = len; - uio.uio_rw = UIO_WRITE; - uio.uio_segflg = UIO_USERSPACE; - - cnt = len; - - LOCK_FILE( fp ); - - ret = fp->f_ops->fo_write( fp, &uio ); - - UNLOCK_FILE( fp ); - - cnt -= uio.uio_resid; - - cyg_fp_free( fp ); - - CYG_CANCELLATION_POINT; - - CYG_REPORT_RETVAL(cnt); - return cnt; + return readwrite( fd, (void *)buf, len, O_WRONLY ); } //==========================================================================
--- a/packages/io/serial/current/ChangeLog +++ b/packages/io/serial/current/ChangeLog @@ -1,3 +1,15 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * src/common/serial.c: Include cyg/infra/cyg_ass.h for assertion + support since we have assertions here! + +2000-10-12 Jesper Skov <jskov@redhat.com> + + * tests/ser_test_protocol.inl: Moved most testing parameters into + device driver CDL. + + * cdl/io_serial.cdl: Added comment. + 2000-10-06 Jesper Skov <jskov@redhat.com> * src/common/serial.c (serial_rcv_char): Register overruns.
--- a/packages/io/serial/current/cdl/io_serial.cdl +++ b/packages/io/serial/current/cdl/io_serial.cdl @@ -304,7 +304,9 @@ cdl_package CYGPKG_IO_SERIAL { serial devices." } - + # These could be regular define_proc outputs, but keeping them as + # CDL interfaces allow us to possibly skip building/running some + # tests. cdl_component CYGPKG_IO_SERIAL_TEST_SPECS { display "Serial testing specification" flavor bool
--- a/packages/io/serial/current/src/common/serial.c +++ b/packages/io/serial/current/src/common/serial.c @@ -47,7 +47,8 @@ #include <cyg/io/io.h> #include <cyg/io/devtab.h> #include <cyg/io/serial.h> -#include <cyg/infra/diag.h> +#include <cyg/infra/cyg_ass.h> // assertion support +#include <cyg/infra/diag.h> // diagnostic output static Cyg_ErrNo serial_write(cyg_io_handle_t handle, const void *buf, cyg_uint32 *len); static Cyg_ErrNo serial_read(cyg_io_handle_t handle, void *buf, cyg_uint32 *len);
--- a/packages/io/serial/current/tests/ser_test_protocol.inl +++ b/packages/io/serial/current/tests/ser_test_protocol.inl @@ -58,10 +58,6 @@ #include <cyg/hal/hal_intr.h> // for reclaiming interrup vector -#ifdef CYG_HAL_SPARCLITE_SLEB -#include <pkgconf/hal_sparclite_sleb.h> // CYG_KERNEL_DIAG_GDB_SERIAL_DIRECT -#endif - //---------------------------------------------------------------------------- // Definition of which device to run tests on on various platforms. @@ -76,15 +72,10 @@ # define TEST_TTY_DEV CYGPRI_SER_TEST_TTY_DEV #endif -#if defined(CYGPKG_HAL_POWERPC_COGENT) \ - && defined(CYGPKG_IO_SERIAL_POWERPC_COGENT) \ - && defined(CYGPKG_IO_SERIAL_POWERPC_COGENT_SERIAL_B) -# define TEST_CRASH_ID "ppccog" -# define TEST_SER_DEV CYGDAT_IO_SERIAL_POWERPC_COGENT_SERIAL_B_NAME -# if defined(CYGPKG_IO_SERIAL_TTY_TTY2) -# define TEST_TTY_DEV CYGDAT_IO_SERIAL_TTY_TTY2_DEV -# endif -#endif +// Note that CYGPRI_SER_TEST_OVERRIDE_INT_1 and CYGPRI_SER_TEST_OVERRIDE_INT_2 +// may also be exported. These identify interrupts that should be reclaimed +// from the ROM monitor before the test is started. + #if defined(CYGPKG_HAL_POWERPC_MBX) \ && defined(CYGPKG_HAL_QUICC) \ && defined(CYGPKG_IO_SERIAL_POWERPC_QUICC_SMC) \ @@ -95,69 +86,6 @@ # define TEST_TTY_DEV CYGDAT_IO_SERIAL_TTY_TTY1_DEV # endif #endif -#if defined(CYGPKG_HAL_ARM_AEB) \ - && defined(CYGPKG_IO_SERIAL_ARM_AEB) \ - && defined(CYGPKG_IO_SERIAL_ARM_AEB_SERIAL1) -# define TEST_CRASH_ID "armaeb" -# define TEST_SER_DEV CYGDAT_IO_SERIAL_ARM_AEB_SERIAL1_NAME -# if defined(CYGPKG_IO_SERIAL_TTY_TTY1) -# define TEST_TTY_DEV CYGDAT_IO_SERIAL_TTY_TTY1_DEV -# endif -#endif -#if defined(CYGPKG_HAL_ARM_EDB7XXX) \ - && defined(CYGPKG_IO_SERIAL_ARM_EDB7XXX) \ - && defined(CYGPKG_IO_SERIAL_ARM_EDB7XXX_SERIAL1) -# define TEST_CRASH_ID "armedb7xxx" -# define TEST_SER_DEV CYGDAT_IO_SERIAL_ARM_EDB7XXX_SERIAL1_NAME -# if defined(CYGPKG_IO_SERIAL_TTY_TTY1) -# define TEST_TTY_DEV CYGDAT_IO_SERIAL_TTY_TTY1_DEV -# endif -#endif -#if defined(CYGPKG_HAL_ARM_CMA230) \ - && defined(CYGPKG_IO_SERIAL_ARM_CMA230) \ - && defined(CYGPKG_IO_SERIAL_ARM_CMA230_SERIAL_A) -# define TEST_CRASH_ID "armcma" -# define TEST_SER_DEV CYGDAT_IO_SERIAL_ARM_CMA230_SERIAL_A_NAME -# if defined(CYGPKG_IO_SERIAL_TTY_TTY1) -# define TEST_TTY_DEV CYGDAT_IO_SERIAL_TTY_TTY1_DEV -# endif -#endif -#if defined(CYGPKG_HAL_ARM_EBSA285) \ - && defined(CYGPKG_IO_SERIAL_ARM_EBSA285) \ - && defined(CYGPKG_IO_SERIAL_ARM_EBSA285_SERIAL) -# define TEST_CRASH_ID "arm285" -# define TEST_SER_DEV CYGDAT_IO_SERIAL_ARM_EBSA285_SERIAL_NAME -# if defined(CYGPKG_IO_SERIAL_TTY_TTY1) -# define TEST_TTY_DEV CYGDAT_IO_SERIAL_TTY_TTY1_DEV -# endif -#endif -#if defined(CYGPKG_HAL_ARM_SA11X0_ASSABET) \ - && defined(CYGPKG_IO_SERIAL_ARM_SA11X0) \ - && defined(CYGPKG_IO_SERIAL_ARM_SA11X0_SERIAL1) -# define TEST_CRASH_ID "assabet" -# define TEST_SER_DEV CYGDAT_IO_SERIAL_ARM_SA11X0_SERIAL1_NAME -# if defined(CYGPKG_IO_SERIAL_TTY_TTY1) -# define TEST_TTY_DEV CYGDAT_IO_SERIAL_TTY_TTY1_DEV -# endif -#endif -#if defined(CYGPKG_HAL_MIPS_TX39_JMR3904) \ - && defined(CYGPKG_IO_SERIAL_TX39_JMR3904) \ - && defined(CYGPKG_IO_SERIAL_TX39_JMR3904_SERIAL0) -# define TEST_CRASH_ID "tx3jmr" -# define TEST_SER_DEV CYGDAT_IO_SERIAL_TX39_JMR3904_SERIAL0_NAME -# if defined(CYGPKG_IO_SERIAL_TTY_TTY0) -# define TEST_TTY_DEV CYGDAT_IO_SERIAL_TTY_TTY0_DEV -# endif -#endif -#if defined(CYGPKG_HAL_MIPS_VR4300_VRC4373) \ - && defined(CYGPKG_IO_SERIAL_MIPS_VRC4373) \ - && defined(CYGPKG_IO_SERIAL_MIPS_VRC4373_SERIAL0) -# define TEST_CRASH_ID "vrc4373" -# define TEST_SER_DEV CYGDAT_IO_SERIAL_MIPS_VRC4373_SERIAL0_NAME -# if defined(CYGPKG_IO_SERIAL_TTY_TTY0) -# define TEST_TTY_DEV CYGDAT_IO_SERIAL_TTY_TTY0_DEV -# endif -#endif #if defined(CYGPKG_HAL_MN10300_AM31_STDEVAL1) \ && defined(CYGPKG_IO_SERIAL_MN10300) \ && defined(CYGPKG_IO_SERIAL_MN10300_SERIAL2) @@ -176,52 +104,6 @@ # define TEST_TTY_DEV CYGDAT_IO_SERIAL_TTY_TTY0_DEV # endif #endif -#if defined(CYGPKG_HAL_SPARCLITE_SLEB) \ - && defined(CYGPKG_IO_SERIAL_SPARCLITE_SLEB) \ - && defined(CYGPKG_IO_SERIAL_SPARCLITE_SLEB_CON1) -# undef NA_MSG -# define NA_MSG "CYG_KERNEL_DIAG_GDB_SERIAL_DIRECT is unset" -# if !defined(CYG_HAL_STARTUP_RAM) \ - || defined(CYG_KERNEL_DIAG_GDB_SERIAL_DIRECT) -# define TEST_CRASH_ID "sparcl" -# define TEST_SER_DEV CYGDAT_IO_SERIAL_SPARCLITE_SLEB_CON1_NAME -// The interrupt vectors are normally in CygMon's control. Steal them back, -// but beware that this results in GDB acknowledge characters showing up in -// the serial driver if CygMon is used for hal_diag output. -// Set CYG_KERNEL_DIAG_GDB_SERIAL_DIRECT in hal_sparclite_sleb as a workaround. -# define SER_OVERRIDE_INT_1 CYGNUM_HAL_INTERRUPT_9 -# define SER_OVERRIDE_INT_2 CYGNUM_HAL_INTERRUPT_10 -# if defined(CYGPKG_IO_SERIAL_TTY_TTY0) -# define TEST_TTY_DEV CYGDAT_IO_SERIAL_TTY_TTY0_DEV -# endif -# endif -#endif -#if defined(CYGPKG_HAL_I386_PC) \ - && defined(CYGPKG_IO_SERIAL_I386_PC) \ - && defined(CYGPKG_IO_SERIAL_I386_PC_SERIAL0) -# define TEST_CRASH_ID "i386pc" -# define TEST_SER_DEV CYGDAT_IO_SERIAL_I386_PC_SERIAL0_NAME -# if defined(CYGPKG_IO_SERIAL_TTY_TTY0) -# define TEST_TTY_DEV CYGDAT_IO_SERIAL_TTY_TTY0_DEV -# endif -#endif -#if defined(CYGPKG_HAL_V85X_V850) \ - && defined(CYGPKG_IO_SERIAL_V85X_V850) \ - && defined(CYGPKG_IO_SERIAL_V85X_V850_SERIAL0) -# define TEST_CRASH_ID "v85x/v850" -# define TEST_SER_DEV CYGDAT_IO_SERIAL_V85X_V850_SERIAL0_NAME -# if defined(CYGPKG_IO_SERIAL_TTY_TTY0) -# define TEST_TTY_DEV CYGDAT_IO_SERIAL_TTY_TTY0_DEV -# endif -#endif -#if defined(CYGPKG_IO_SERIAL_LOOP) \ - && defined(CYGPKG_IO_SERIAL_LOOP_SERIAL0) -# define TEST_CRASH_ID "loop" -# define TEST_SER_DEV CYGDAT_IO_SERIAL_LOOP_SERIAL0_NAME -# if defined(CYGPKG_IO_SERIAL_TTY_TTY0) -# define TEST_TTY_DEV CYGDAT_IO_SERIAL_TTY_TTY0_DEV -# endif -#endif // We can't rely on haldiag for ser_filter detection - it may not define // a working character reading function. @@ -368,12 +250,10 @@ typedef enum { // given target until change_config is behaving correctly. cyg_ser_cfg_t test_configs[] = { #if (0 == CYGINT_IO_SERIAL_TEST_SKIP_9600) -#if !defined(CYGPKG_HAL_MIPS_TX39_JMR3904) { CYGNUM_SERIAL_BAUD_9600, CYGNUM_SERIAL_WORD_LENGTH_8, CYGNUM_SERIAL_STOP_1, CYGNUM_SERIAL_PARITY_NONE, CYGNUM_SERIAL_FLOW_NONE }, #endif -#endif #if (0 == CYGINT_IO_SERIAL_TEST_SKIP_14400) #if !defined(CYGPKG_HAL_MN10300_AM31) && \ @@ -389,19 +269,13 @@ cyg_ser_cfg_t test_configs[] = { CYGNUM_SERIAL_FLOW_NONE }, #if (0 == CYGINT_IO_SERIAL_TEST_SKIP_38400) -#if !defined(CYGPKG_HAL_SPARCLITE_SLEB) && \ - !defined(CYGPKG_HAL_ARM_AEB) { CYGNUM_SERIAL_BAUD_38400, CYGNUM_SERIAL_WORD_LENGTH_8, CYGNUM_SERIAL_STOP_1, CYGNUM_SERIAL_PARITY_NONE, CYGNUM_SERIAL_FLOW_NONE }, #endif -#endif #if (0 == CYGINT_IO_SERIAL_TEST_SKIP_57600) -#if !defined(CYGPKG_HAL_MIPS_TX39_JMR3904) && \ - !defined(CYGPKG_HAL_ARM_AEB) && \ - !defined(CYGPKG_HAL_SPARCLITE_SLEB) && \ - !defined(CYGPKG_HAL_MN10300_AM33) +#if !defined(CYGPKG_HAL_MN10300_AM33) { CYGNUM_SERIAL_BAUD_57600, CYGNUM_SERIAL_WORD_LENGTH_8, CYGNUM_SERIAL_STOP_1, CYGNUM_SERIAL_PARITY_NONE, CYGNUM_SERIAL_FLOW_NONE }, @@ -409,12 +283,7 @@ cyg_ser_cfg_t test_configs[] = { #endif #if (0 == CYGINT_IO_SERIAL_TEST_SKIP_115200) -#if !defined(CYGPKG_HAL_MIPS_TX39_JMR3904) && \ - !defined(CYGPKG_HAL_ARM_AEB) && \ - !defined(CYGPKG_HAL_MN10300_STDEVAL1) && \ - !defined(CYGPKG_HAL_ARM_CMA230) && \ - !defined(CYGPKG_HAL_ARM_EDB7XXX) && \ - !defined(CYGPKG_HAL_SPARCLITE_SLEB) +#if !defined(CYGPKG_HAL_MN10300_STDEVAL1) { CYGNUM_SERIAL_BAUD_115200, CYGNUM_SERIAL_WORD_LENGTH_8, CYGNUM_SERIAL_STOP_1, CYGNUM_SERIAL_PARITY_NONE, CYGNUM_SERIAL_FLOW_NONE }, @@ -422,35 +291,27 @@ cyg_ser_cfg_t test_configs[] = { #endif #if (0 == CYGINT_IO_SERIAL_TEST_SKIP_PARITY_EVEN) -#if !defined(CYGPKG_HAL_MIPS_TX39_JMR3904) && \ - !defined(CYGPKG_HAL_ARM_AEB) // One stop bit, even parity { CYGNUM_SERIAL_BAUD_19200, CYGNUM_SERIAL_WORD_LENGTH_8, CYGNUM_SERIAL_STOP_1, CYGNUM_SERIAL_PARITY_EVEN, CYGNUM_SERIAL_FLOW_NONE }, #endif -#endif #if (0 == CYGINT_IO_SERIAL_TEST_SKIP_PARITY_EVEN) #if (0 == CYGINT_IO_SERIAL_TEST_SKIP_STOP_2) -#if !defined(CYGPKG_HAL_MIPS_TX39_JMR3904) && \ - !defined(CYGPKG_HAL_ARM_AEB) // Two stop bits, even parity { CYGNUM_SERIAL_BAUD_19200, CYGNUM_SERIAL_WORD_LENGTH_8, CYGNUM_SERIAL_STOP_2, CYGNUM_SERIAL_PARITY_EVEN, CYGNUM_SERIAL_FLOW_NONE }, #endif #endif -#endif #if (0 == CYGINT_IO_SERIAL_TEST_SKIP_STOP_2) -#if !defined(CYGPKG_HAL_MIPS_TX39_JMR3904) // Two stop bits, no parity { CYGNUM_SERIAL_BAUD_19200, CYGNUM_SERIAL_WORD_LENGTH_8, CYGNUM_SERIAL_STOP_2, CYGNUM_SERIAL_PARITY_NONE, CYGNUM_SERIAL_FLOW_NONE }, #endif -#endif }; //---------------------------------------------------------------------------- @@ -1153,11 +1014,11 @@ test_open_ser( cyg_io_handle_t* handle ) CYG_TEST_NA("Cannot run from simulator"); #if defined(HAL_VSR_SET_TO_ECOS_HANDLER) -# if defined(SER_OVERRIDE_INT_1) - HAL_VSR_SET_TO_ECOS_HANDLER(SER_OVERRIDE_INT_1, NULL); +# if defined(CYGPRI_SER_TEST_OVERRIDE_INT_1) + HAL_VSR_SET_TO_ECOS_HANDLER(CYGPRI_SER_TEST_OVERRIDE_INT_1, NULL); # endif -# if defined(SER_OVERRIDE_INT_2) - HAL_VSR_SET_TO_ECOS_HANDLER(SER_OVERRIDE_INT_2, NULL); +# if defined(CYGPRI_SER_TEST_OVERRIDE_INT_2) + HAL_VSR_SET_TO_ECOS_HANDLER(CYGPRI_SER_TEST_OVERRIDE_INT_2, NULL); # endif #endif @@ -1180,11 +1041,11 @@ test_open_tty( cyg_io_handle_t* handle ) CYG_TEST_NA("Cannot run from simulator"); #if defined(HAL_VSR_SET_TO_ECOS_HANDLER) -# if defined(SER_OVERRIDE_INT_1) - HAL_VSR_SET_TO_ECOS_HANDLER(SER_OVERRIDE_INT_1, NULL); +# if defined(CYGPRI_SER_TEST_OVERRIDE_INT_1) + HAL_VSR_SET_TO_ECOS_HANDLER(CYGPRI_SER_TEST_OVERRIDE_INT_1, NULL); # endif -# if defined(SER_OVERRIDE_INT_2) - HAL_VSR_SET_TO_ECOS_HANDLER(SER_OVERRIDE_INT_2, NULL); +# if defined(CYGPRI_SER_TEST_OVERRIDE_INT_2) + HAL_VSR_SET_TO_ECOS_HANDLER(CYGPRI_SER_TEST_OVERRIDE_INT_2, NULL); # endif #endif
--- a/packages/io/wallclock/current/ChangeLog +++ b/packages/io/wallclock/current/ChangeLog @@ -1,3 +1,10 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * tests/wallclock2.cxx: Play better with main() startup configury + + * tests/wallclock.cxx: Ensure default priority constructors + are called. + 2000-07-24 Jonathan Larmour <jlarmour@redhat.co.uk> * tests/wallclock2.cxx: Depend on CYGPKG_LIBC_TIME not CYGPKG_LIBC
--- a/packages/io/wallclock/current/tests/wallclock.cxx +++ b/packages/io/wallclock/current/tests/wallclock.cxx @@ -40,6 +40,7 @@ //####DESCRIPTIONEND#### // ------------------------------------------------------------------------- +#include <pkgconf/hal.h> #include <pkgconf/kernel.h> #include <cyg/kernel/thread.hxx> @@ -169,9 +170,17 @@ void wallclock_thread( CYG_ADDRWORD id ) // ------------------------------------------------------------------------- +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG +externC void +cyg_hal_invoke_constructors(); +#endif + externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif CYG_TEST_INIT(); CYG_TEST_INFO("Starting wallclock test"); @@ -203,7 +212,7 @@ externC void cyg_start( void ) { CYG_TEST_INIT(); - CYG_TEST_PASS_FINISH("N/A: Kernel real-time clock/threads timer disabled"); + CYG_TEST_NA("Kernel real-time clock/threads timer disabled"); } #endif // if defined(CYGFUN_KERNEL_THREADS_TIMER) etc...
--- a/packages/io/wallclock/current/tests/wallclock2.cxx +++ b/packages/io/wallclock/current/tests/wallclock2.cxx @@ -48,9 +48,19 @@ #ifdef CYGPKG_LIBC_TIME #include <pkgconf/libc_time.h> #endif +#ifdef CYGPKG_LIBC_STARTUP +#include <pkgconf/libc_startup.h> +#endif -#if defined(CYGSEM_LIBC_TIME_CLOCK_WORKING) +#if !defined(CYGSEM_LIBC_TIME_CLOCK_WORKING) +# define NA_MSG "Requires libc time functions" +#elif !defined(CYGPKG_LIBC_STARTUP) +# define NA_MSG "Requires libc startup package" +#elif !defined(CYGINT_LIBC_STARTUP_CONTEXT) +# define NA_MSG "Requires main to be invoked" +#endif +#ifndef NA_MSG #include <time.h> #include <cyg/io/wallclock.hxx> // The WallClock API @@ -97,10 +107,6 @@ main (void ) } #else -#define NA_MSG "Requires libc time functions" -#endif - -#ifdef NA_MSG externC void cyg_start( void )
--- a/packages/kernel/current/ChangeLog +++ b/packages/kernel/current/ChangeLog @@ -1,3 +1,57 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * tests/bin_sem0.cxx: + * tests/bin_sem1.cxx: + * tests/bin_sem2.cxx: + * tests/clock0.cxx: + * tests/clock1.cxx: + * tests/clockcnv.cxx: + * tests/cnt_sem0.cxx: + * tests/cnt_sem1.cxx: + * tests/except1.cxx: + * tests/flag0.cxx: + * tests/flag1.cxx: + * tests/intr0.cxx: + * tests/kill.cxx: + * tests/mbox1.cxx: + * tests/mqueue1.cxx: + * tests/mutex0.cxx: + * tests/mutex1.cxx: + * tests/mutex2.cxx: + * tests/mutex3.cxx: + * tests/philo.cxx: + * tests/release.cxx: + * tests/sched1.cxx: + * tests/sync2.cxx: + * tests/sync3.cxx: + * tests/testaux.hxx: + * tests/thread0.cxx: + * tests/thread1.cxx: + * tests/thread2.cxx: + * tests/tm_basic.cxx: + Make sure default priority constructors have been invoked. + + * include/intr.hxx (class Cyg_Interrupt): Make dsr_count volatile + to prevent a potential race condition with overzealous C + compilers. + +2000-10-13 Nick Garnett <nickg@cygnus.co.uk> + + * src/sched/sched.cxx (unlock_inner): Added condition to test for + DSRs to only call DSRs when the scheduler lock is making a 0->1 + transition. Otherwise there is the danger of calling DSRs when the + scheduler lock is > 1. This violates our original assumptions + about how the scheduler lock worked with respect to DSR. + + * src/intr/intr.cxx (call_pending_DSRs): Added assert to check + that DSRs are only called when the scheduler lock is exactly 1. + +2000-10-13 Jesper Skov <jskov@redhat.com> + + * include/intr.hxx: Fixing syntax mistake; volatile keyword must + appear after the type for it to affect the pointer variable. + * src/intr/intr.cxx: Same. Remove volatile from local block. + 2000-10-05 Jesper Skov <jskov@redhat.co.uk> * src/intr/intr.cxx: Made dsr_table_tail volatile as well.
--- a/packages/kernel/current/include/intr.hxx +++ b/packages/kernel/current/include/intr.hxx @@ -163,11 +163,11 @@ class Cyg_Interrupt #endif #ifdef CYGIMP_KERNEL_INTERRUPTS_DSRS_LIST - cyg_ucount32 dsr_count; // Number of DSR posts made + volatile cyg_ucount32 dsr_count; // Number of DSR posts made - volatile Cyg_Interrupt *next_dsr; // next DSR in list + Cyg_Interrupt* volatile next_dsr; // next DSR in list - static volatile Cyg_Interrupt *dsr_list; // static list of pending DSRs + static Cyg_Interrupt* volatile dsr_list; // static list of pending DSRs #endif
--- a/packages/kernel/current/src/intr/intr.cxx +++ b/packages/kernel/current/src/intr/intr.cxx @@ -125,7 +125,7 @@ volatile cyg_ucount32 Cyg_Interrupt::dsr #ifdef CYGIMP_KERNEL_INTERRUPTS_DSRS_LIST -volatile Cyg_Interrupt *Cyg_Interrupt::dsr_list = NULL; +Cyg_Interrupt* volatile Cyg_Interrupt::dsr_list = NULL; #endif @@ -160,7 +160,7 @@ Cyg_Interrupt::call_pending_DSRs_inner(v while( dsr_list != NULL ) { - volatile Cyg_Interrupt *intr; + Cyg_Interrupt* intr; cyg_uint32 old_intr; cyg_count32 count; @@ -198,6 +198,9 @@ cyg_interrupt_call_pending_DSRs(void) void Cyg_Interrupt::call_pending_DSRs(void) { + CYG_ASSERT( Cyg_Scheduler::get_sched_lock() == 1, + "DSRs being called with sched_lock not equal to 1"); + HAL_INTERRUPT_STACK_CALL_PENDING_DSRS(); }
--- a/packages/kernel/current/src/sched/sched.cxx +++ b/packages/kernel/current/src/sched/sched.cxx @@ -130,7 +130,7 @@ void Cyg_Scheduler::unlock_inner( cyg_uc // Call any pending DSRs. Do this here to ensure that any // threads that get awakened are properly scheduled. - if( Cyg_Interrupt::DSRs_pending() ) + if( new_lock == 0 && Cyg_Interrupt::DSRs_pending() ) Cyg_Interrupt::call_pending_DSRs(); #endif
--- a/packages/kernel/current/tests/bin_sem0.cxx +++ b/packages/kernel/current/tests/bin_sem0.cxx @@ -72,6 +72,9 @@ void bin_sem0_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif bin_sem0_main(); } // EOF bin_sem0.cxx
--- a/packages/kernel/current/tests/bin_sem1.cxx +++ b/packages/kernel/current/tests/bin_sem1.cxx @@ -113,6 +113,9 @@ void bin_sem1_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif bin_sem1_main(); } // EOF bin_sem1.cxx
--- a/packages/kernel/current/tests/bin_sem2.cxx +++ b/packages/kernel/current/tests/bin_sem2.cxx @@ -207,6 +207,9 @@ void bin_sem2_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif bin_sem2_main(); } // EOF bin_sem2.cxx
--- a/packages/kernel/current/tests/clock0.cxx +++ b/packages/kernel/current/tests/clock0.cxx @@ -258,6 +258,9 @@ void clock0_main(void) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif clock0_main(); }
--- a/packages/kernel/current/tests/clock1.cxx +++ b/packages/kernel/current/tests/clock1.cxx @@ -103,6 +103,9 @@ void clock1_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif clock1_main(); }
--- a/packages/kernel/current/tests/clockcnv.cxx +++ b/packages/kernel/current/tests/clockcnv.cxx @@ -257,6 +257,9 @@ void clockcnv_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif clockcnv_main(); }
--- a/packages/kernel/current/tests/cnt_sem0.cxx +++ b/packages/kernel/current/tests/cnt_sem0.cxx @@ -71,6 +71,9 @@ void cnt_sem0_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif cnt_sem0_main(); }
--- a/packages/kernel/current/tests/cnt_sem1.cxx +++ b/packages/kernel/current/tests/cnt_sem1.cxx @@ -117,6 +117,9 @@ void cnt_sem1_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif cnt_sem1_main(); }
--- a/packages/kernel/current/tests/except1.cxx +++ b/packages/kernel/current/tests/except1.cxx @@ -244,6 +244,9 @@ void except0_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif except0_main(); } #else // def CYGPKG_KERNEL_EXCEPTIONS
--- a/packages/kernel/current/tests/flag0.cxx +++ b/packages/kernel/current/tests/flag0.cxx @@ -71,6 +71,9 @@ void flag0_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif flag0_main(); } // EOF flag0.cxx
--- a/packages/kernel/current/tests/flag1.cxx +++ b/packages/kernel/current/tests/flag1.cxx @@ -198,6 +198,9 @@ void flag1_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif flag1_main(); }
--- a/packages/kernel/current/tests/intr0.cxx +++ b/packages/kernel/current/tests/intr0.cxx @@ -192,6 +192,9 @@ void intr0_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif intr0_main(); } // EOF intr0.cxx
--- a/packages/kernel/current/tests/kill.cxx +++ b/packages/kernel/current/tests/kill.cxx @@ -174,6 +174,9 @@ void release_main(void) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif release_main(); }
--- a/packages/kernel/current/tests/mbox1.cxx +++ b/packages/kernel/current/tests/mbox1.cxx @@ -183,6 +183,9 @@ void mbox1_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif mbox1_main(); }
--- a/packages/kernel/current/tests/mqueue1.cxx +++ b/packages/kernel/current/tests/mqueue1.cxx @@ -378,6 +378,9 @@ t1( CYG_ADDRWORD data ) externC void cyg_user_start(void) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif CYG_TEST_INIT(); CYG_TEST_INFO( "Starting kernel mqueue test 1" );
--- a/packages/kernel/current/tests/mutex0.cxx +++ b/packages/kernel/current/tests/mutex0.cxx @@ -79,6 +79,9 @@ void mutex0_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif mutex0_main(); } // EOF mutex0.cxx
--- a/packages/kernel/current/tests/mutex1.cxx +++ b/packages/kernel/current/tests/mutex1.cxx @@ -145,6 +145,9 @@ void mutex1_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif mutex1_main(); } // EOF mutex1.cxx
--- a/packages/kernel/current/tests/mutex2.cxx +++ b/packages/kernel/current/tests/mutex2.cxx @@ -217,6 +217,9 @@ void mutex2_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif mutex2_main(); }
--- a/packages/kernel/current/tests/mutex3.cxx +++ b/packages/kernel/current/tests/mutex3.cxx @@ -37,6 +37,7 @@ // Description: Tests mutex priority inheritance //####DESCRIPTIONEND#### +#include <pkgconf/hal.h> #include <pkgconf/kernel.h> #include <cyg/kernel/sched.hxx> // Cyg_Scheduler::start() @@ -51,6 +52,11 @@ #include <cyg/infra/diag.h> // diag_printf +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG +externC void +cyg_hal_invoke_constructors(); +#endif + // ------------------------------------------------------------------------ // // These checks should be enough; any other scheduler which has priorities @@ -406,6 +412,9 @@ static void control_thread( CYG_ADDRWORD externC void cyg_user_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif new_thread( control_thread, 0, 2, 1 ); }
--- a/packages/kernel/current/tests/philo.cxx +++ b/packages/kernel/current/tests/philo.cxx @@ -195,6 +195,9 @@ void Philosopher( CYG_ADDRESS id ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif diag_init(); diag_write_string("Philosophers\n");
--- a/packages/kernel/current/tests/release.cxx +++ b/packages/kernel/current/tests/release.cxx @@ -105,6 +105,9 @@ void release_main(void) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif release_main(); }
--- a/packages/kernel/current/tests/sched1.cxx +++ b/packages/kernel/current/tests/sched1.cxx @@ -94,6 +94,9 @@ void sched1_main(void) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif sched1_main(); } // EOF sched1.cxx
--- a/packages/kernel/current/tests/sync2.cxx +++ b/packages/kernel/current/tests/sync2.cxx @@ -183,6 +183,9 @@ void sync2_main(void) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif sync2_main(); }
--- a/packages/kernel/current/tests/sync3.cxx +++ b/packages/kernel/current/tests/sync3.cxx @@ -200,6 +200,9 @@ void sync3_main(void) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif sync3_main(); }
--- a/packages/kernel/current/tests/testaux.hxx +++ b/packages/kernel/current/tests/testaux.hxx @@ -49,6 +49,12 @@ static inline void *operator new(size_t size, void *ptr) { return ptr; }; +#include <pkgconf/hal.h> +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG +externC void +cyg_hal_invoke_constructors(); +#endif + #ifdef NTHREADS #ifndef STACKSIZE
--- a/packages/kernel/current/tests/thread0.cxx +++ b/packages/kernel/current/tests/thread0.cxx @@ -97,6 +97,9 @@ void thread0_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif thread0_main(); } // EOF thread0.cxx
--- a/packages/kernel/current/tests/thread1.cxx +++ b/packages/kernel/current/tests/thread1.cxx @@ -143,6 +143,9 @@ void thread1_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif thread1_main(); }
--- a/packages/kernel/current/tests/thread2.cxx +++ b/packages/kernel/current/tests/thread2.cxx @@ -181,6 +181,9 @@ void thread2_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif thread2_main(); }
--- a/packages/kernel/current/tests/tm_basic.cxx +++ b/packages/kernel/current/tests/tm_basic.cxx @@ -1708,9 +1708,17 @@ void tm_basic_main( void ) } +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG +externC void +cyg_hal_invoke_constructors(); +#endif + externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif tm_basic_main(); }
--- a/packages/net/tcpip/current/ChangeLog +++ b/packages/net/tcpip/current/ChangeLog @@ -1,3 +1,37 @@ +2000-10-17 Hugo Tyson <hmt@redhat.com> +2000-10-10 Andrew Lunn <Andrew.Lunn@ascom.ch> + + * src/ecos/support.c (setsoftnet,cyg_panic): Less chatter, + particularly not when we're out of MBUFs. + +2000-10-17 Hugo Tyson <hmt@redhat.com> +2000-10-10 Andrew Lunn <Andrew.Lunn@ascom.ch> + + * src/sys/net/if_bridge.c: Intergrated a more up to date version + from the OpenBSD sources. This fixes a few bugs. + +2000-10-17 Hugo Tyson <hmt@redhat.com> + + * src/ecos/support.c (cyg_ktime_init): Start time at 1 Second so + that all visible time values are valid; offset time by 1 Second + subsequently, for ever. + + * src/sys/netinet/if_ether.c (arpresolve): Undo the change below; + instead make "kernel time" be valid ie. more than 1 second into + its life. Dumb stack assumes it takes UNIX-like time to start. + +2000-10-16 Hugo Tyson <hmt@redhat.com> + + * src/sys/netinet/if_ether.c (arpresolve): Deal with the initial + case when the route timeout is zero (as initialized). Otherwise + it never actually sent out the initial ARP request packet. This + caused connect() not to work, and thus ftp_test, for example. + + * src/lib/dhcp_support.c (dhcp_start_dhcp_mgt_thread): Also + initialize the dhcp semaphore here. The other place it is init'd + [correctly] didn't fire if we use the standard support. Fixed + some absent return value warnings. + 2000-10-10 Hugo Tyson <hmt@redhat.com> * src/lib/tftp_server.c (tftpd_server): Modify the server to
--- a/packages/net/tcpip/current/src/ecos/support.c +++ b/packages/net/tcpip/current/src/ecos/support.c @@ -110,6 +110,7 @@ void cyg_panic(const char *msg, ...) { cyg_uint32 old_ints; + CYG_FAIL( msg ); HAL_DISABLE_INTERRUPTS(old_ints); diag_printf("PANIC: %s\n", msg); cyg_test_exit(); // FIXME @@ -473,7 +474,11 @@ cyg_netint(cyg_addrword_t param) void setsoftnet(void) { - diag_printf("setsoftnet\n"); + // This is called if we are out of MBUFs - it doesn't do anything, and + // that situation is handled OK, so don't bother with the diagnostic: + + // diag_printf("setsoftnet\n"); + // No need to do this because it is ignored anyway: // schednetisr(NETISR_SOFTNET); } @@ -483,37 +488,44 @@ setsoftnet(void) static void cyg_ktime_func(cyg_handle_t alarm,cyg_addrword_t data) { - cyg_tick_count_t now = cyg_current_time(); + cyg_tick_count_t now = cyg_current_time(); - ktime.tv_usec = (now % hz) * tick; - ktime.tv_sec = now / hz; + ktime.tv_usec = (now % hz) * tick; + ktime.tv_sec = 1 + now / hz; } static void cyg_ktime_init(void) { - static cyg_handle_t ktime_alarm_handle; - static cyg_alarm ktime_alarm; - cyg_handle_t counter; + cyg_handle_t ktime_alarm_handle; + static cyg_alarm ktime_alarm; + cyg_handle_t counter; - cyg_clock_to_counter(cyg_real_time_clock(),&counter); - cyg_alarm_create(counter, - cyg_ktime_func, - 0, - &ktime_alarm_handle, - &ktime_alarm); + // Do not start at 0 - net stack thinks 0 an invalid time; + // Have a valid time available from right now: + ktime.tv_usec = 0; + ktime.tv_sec = 1; - /* We want one alarm every 10ms. */ - cyg_alarm_initialize(ktime_alarm_handle,cyg_current_time()+1,1); - cyg_alarm_enable(ktime_alarm_handle); + cyg_clock_to_counter(cyg_real_time_clock(),&counter); + cyg_alarm_create(counter, + cyg_ktime_func, + 0, + &ktime_alarm_handle, + &ktime_alarm); + + /* We want one alarm every 10ms. */ + cyg_alarm_initialize(ktime_alarm_handle,cyg_current_time()+1,1); + cyg_alarm_enable(ktime_alarm_handle); } // // Network initialization // This function is called during system initialization to setup the whole // networking environment. -// -extern void cyg_do_net_init(void); // Linker magic to execute this function as 'init' + +// Linker magic to execute this function as 'init' +extern void cyg_do_net_init(void); + extern void ifinit(void); extern void loopattach(int); extern void bridgeattach(int); @@ -530,7 +542,7 @@ cyg_net_init(void) if (_init) return; - cyg_do_net_init(); // Just forces the linking in of the initializer/constructor + cyg_do_net_init(); // Just forces linking in the initializer/constructor // Initialize interrupt "flags" cyg_flag_init(&netint_flags); // Initialize timeouts and net service thread (pseudo-DSRs) @@ -564,7 +576,7 @@ cyg_net_init(void) t->status = 0; // Device not [currently] available } } - // And attack the loopback interface + // And attach the loopback interface #ifdef CYGPKG_NET_NLOOP #if 0 < CYGPKG_NET_NLOOP loopattach(0);
--- a/packages/net/tcpip/current/src/lib/dhcp_support.c +++ b/packages/net/tcpip/current/src/lib/dhcp_support.c @@ -90,7 +90,7 @@ int dhcp_bind( void ) #endif // If there are no interfaces at all, init it every time, doesn't - // matter. + // matter. In case we are called from elsewhere... if ( 1 #ifdef CYGHWR_NET_DRIVER_ETH0 && eth0_dhcpstate == 0 @@ -165,6 +165,7 @@ int dhcp_halt( void ) } eth1_up = false; #endif + return 1; } @@ -180,6 +181,7 @@ int dhcp_release( void ) if (eth1_up) do_dhcp_release(eth1_name, ð1_bootp_data, ð1_dhcpstate, ð1_lease); #endif + return 1; } @@ -212,6 +214,7 @@ static cyg_uint8 dhcp_mgt_stack[ STACK_S void dhcp_start_dhcp_mgt_thread( void ) { if ( ! dhcp_mgt_thread_h ) { + cyg_semaphore_init( &dhcp_needs_attention, 0 ); cyg_thread_create( CYGPKG_NET_DHCP_THREAD_PRIORITY, /* scheduling info (eg pri) */ dhcp_mgt_entry, /* entry point function */
--- a/packages/net/tcpip/current/src/sys/net/if_bridge.c +++ b/packages/net/tcpip/current/src/sys/net/if_bridge.c @@ -51,9 +51,7 @@ //####DESCRIPTIONEND#### // //========================================================================== - - -/* $OpenBSD: if_bridge.c,v 1.25 2000/01/25 22:06:27 jason Exp $ */ +/* $OpenBSD: if_bridge.c,v 1.33 2000/06/20 05:50:16 jason Exp $ */ /* * Copyright (c) 1999, 2000 Jason L. Wright (jason@thought.net) @@ -142,7 +140,7 @@ #ifdef __ECOS #include <stdio.h> /* for sprintf */ -#endif +#endif #ifndef BRIDGE_RTABLE_SIZE #define BRIDGE_RTABLE_SIZE 1024 @@ -163,13 +161,6 @@ #define BRIDGE_RTABLE_TIMEOUT 240 #endif -/* - * This really should be defined in if_llc.h but in case it isn't. - */ -#ifndef llc_snap -#define llc_snap llc_un.type_snap -#endif - extern int ifqmaxlen; /* @@ -217,12 +208,13 @@ struct bridge_softc { LIST_HEAD(bridge_rthead, bridge_rtnode) *sc_rts;/* hash table */ }; -/* - * Ethernet header and SNAP header - */ -struct ehllc { - struct ether_header eh; - struct llc llc; +/* SNAP LLC header */ +struct snap { + u_int8_t dsap; + u_int8_t ssap; + u_int8_t control; + u_int8_t org[3]; + u_int16_t type; }; struct bridge_softc bridgectl[NBRIDGE]; @@ -232,7 +224,7 @@ int bridge_ioctl __P((struct ifnet *, u_ void bridge_start __P((struct ifnet *)); void bridgeintr_frame __P((struct bridge_softc *, struct mbuf *)); void bridge_broadcast __P((struct bridge_softc *, struct ifnet *, - struct ether_header *, struct mbuf *)); + struct ether_header *, struct mbuf *)) __attribute ((weak)); void bridge_stop __P((struct bridge_softc *)); void bridge_init __P((struct bridge_softc *)); int bridge_bifconf __P((struct bridge_softc *, struct ifbifconf *)); @@ -248,7 +240,7 @@ struct ifnet * bridge_rtupdate __P((stru struct ifnet * bridge_rtlookup __P((struct bridge_softc *, struct ether_addr *)); u_int32_t bridge_hash __P((struct ether_addr *)); -struct mbuf *bridge_blocknonip __P((struct mbuf *)); +int bridge_blocknonip __P((struct ether_header *, struct mbuf *)); int bridge_addrule __P((struct bridge_iflist *, struct ifbrlreq *, int out)); int bridge_flushrule __P((struct bridge_iflist *)); @@ -266,10 +258,8 @@ u_int8_t bridge_filterrule __P((struct b /* * Filter hooks */ -#define BRIDGE_FILTER_PASS 0 -#define BRIDGE_FILTER_DROP 1 -int bridge_filter __P((struct bridge_softc *, struct ifnet *, - struct ether_header *, struct mbuf **)); +struct mbuf *bridge_filter __P((struct bridge_softc *, struct ifnet *, + struct ether_header *, struct mbuf *m)); #endif void @@ -281,7 +271,7 @@ bridgeattach(unused) for (i = 0; i < NBRIDGE; i++) { bridgectl[i].sc_brtmax = BRIDGE_RTABLE_MAX; - bridgectl[i].sc_brttimeout = BRIDGE_RTABLE_TIMEOUT * hz; + bridgectl[i].sc_brttimeout = BRIDGE_RTABLE_TIMEOUT; LIST_INIT(&bridgectl[i].sc_iflist); ifp = &bridgectl[i].sc_if; sprintf(ifp->if_xname, "bridge%d", i); @@ -327,7 +317,7 @@ bridge_ioctl(ifp, cmd, data) s = splimp(); switch (cmd) { case SIOCBRDGADD: -#ifndef __ECOS +#ifndef __ECOS if ((error = suser(prc->p_ucred, &prc->p_acflag)) != 0) break; #endif @@ -382,15 +372,17 @@ bridge_ioctl(ifp, cmd, data) break; } } - else if (ifs->if_type == IFT_ENC) { #ifndef __ECOS #if NENC > 0 + else if (ifs->if_type == IFT_ENC) { /* Can't bind enc0 to a bridge */ - if (ifs->if_softc == &encif[0]) - return EINVAL; + if (ifs->if_softc == &encif[0]) { + error = EINVAL; + break; + } + } #endif /* NENC */ #endif - } else { error = EINVAL; break; @@ -539,13 +531,13 @@ bridge_ioctl(ifp, cmd, data) if ((error = suser(prc->p_ucred, &prc->p_acflag)) != 0) break; #endif - sc->sc_brttimeout = bcacheto->ifbct_time * hz; + sc->sc_brttimeout = bcacheto->ifbct_time; untimeout(bridge_rtage, sc); if (bcacheto->ifbct_time != 0) timeout(bridge_rtage, sc, sc->sc_brttimeout); break; case SIOCBRDGGTO: - bcacheto->ifbct_time = sc->sc_brttimeout / hz; + bcacheto->ifbct_time = sc->sc_brttimeout; break; case SIOCSIFFLAGS: if ((ifp->if_flags & IFF_UP) == IFF_UP) @@ -645,6 +637,7 @@ bridge_ifdetach(ifp) bridge_rtdelete(bsc, ifp); bridge_flushrule(bif); free(bif, M_DEVBUF); + ifp->if_bridge = NULL; break; } } @@ -807,7 +800,7 @@ bridge_init(sc) splx(s); if (sc->sc_brttimeout != 0) - timeout(bridge_rtage, sc, sc->sc_brttimeout); + timeout(bridge_rtage, sc, sc->sc_brttimeout * hz); } /* @@ -847,8 +840,6 @@ bridge_output(ifp, m, sa, rt) struct ifnet *dst_if; struct ether_addr *src, *dst; struct bridge_softc *sc; - struct bridge_iflist *p; - struct mbuf *mc; int s; if (m->m_len < sizeof(*eh)) { @@ -879,20 +870,28 @@ bridge_output(ifp, m, sa, rt) */ dst_if = bridge_rtlookup(sc, dst); if (dst_if == NULL || eh->ether_dhost[0] & 1) { + struct bridge_iflist *p; + struct mbuf *mc; + int used = 0; + for (p = LIST_FIRST(&sc->sc_iflist); p != NULL; - p = LIST_NEXT(p, next)) { + p = LIST_NEXT(p, next)) { if ((p->ifp->if_flags & IFF_RUNNING) == 0) continue; - if (IF_QFULL(&p->ifp->if_snd)) { sc->sc_if.if_oerrors++; continue; } - mc = m_copym(m, 0, M_COPYALL, M_NOWAIT); - if (mc == NULL) { - sc->sc_if.if_oerrors++; - continue; + if (LIST_NEXT(p, next) == NULL) { + used = 1; + mc = m; + } else { + mc = m_copym(m, 0, M_COPYALL, M_NOWAIT); + if (mc == NULL) { + sc->sc_if.if_oerrors++; + continue; + } } sc->sc_if.if_opackets++; @@ -901,7 +900,8 @@ bridge_output(ifp, m, sa, rt) if ((p->ifp->if_flags & IFF_OACTIVE) == 0) (*p->ifp->if_start)(p->ifp); } - m_freem(m); + if (!used) + m_freem(m); splx(s); return (0); } @@ -968,7 +968,7 @@ bridgeintr_frame(sc, m) struct ifnet *src_if, *dst_if; struct bridge_iflist *ifl; struct ether_addr *dst, *src; - struct ether_header *eh; + struct ether_header eh; if ((sc->sc_if.if_flags & IFF_RUNNING) == 0) { m_freem(m); @@ -995,34 +995,33 @@ bridgeintr_frame(sc, m) return; } - if (m->m_len < sizeof(*eh)) { - m = m_pullup(m, sizeof(*eh)); - if (m == NULL) - return; + if (m->m_pkthdr.len < sizeof(eh)) { + m_freem(m); + return; } - eh = mtod(m, struct ether_header *); - dst = (struct ether_addr *)&eh->ether_dhost[0]; - src = (struct ether_addr *)&eh->ether_shost[0]; + m_copydata(m, 0, sizeof(struct ether_header), (caddr_t)&eh); + dst = (struct ether_addr *)&eh.ether_dhost[0]; + src = (struct ether_addr *)&eh.ether_shost[0]; /* * If interface is learning, and if source address * is not broadcast or multicast, record it's address. */ if ((ifl->bif_flags & IFBIF_LEARNING) && - (eh->ether_shost[0] & 1) == 0 && - !(eh->ether_shost[0] == 0 && - eh->ether_shost[1] == 0 && - eh->ether_shost[2] == 0 && - eh->ether_shost[3] == 0 && - eh->ether_shost[4] == 0 && - eh->ether_shost[5] == 0)) + (eh.ether_shost[0] & 1) == 0 && + !(eh.ether_shost[0] == 0 && + eh.ether_shost[1] == 0 && + eh.ether_shost[2] == 0 && + eh.ether_shost[3] == 0 && + eh.ether_shost[4] == 0 && + eh.ether_shost[5] == 0)) bridge_rtupdate(sc, src, src_if, 0, IFBAF_DYNAMIC); /* * If packet is unicast, destined for someone on "this" * side of the bridge, drop it. */ - if (m->m_flags & (M_BCAST | M_MCAST)) { + if ((m->m_flags & (M_BCAST | M_MCAST)) == 0) { dst_if = bridge_rtlookup(sc, dst); if (dst_if == src_if) { m_freem(m); @@ -1061,28 +1060,22 @@ bridgeintr_frame(sc, m) } } - if (ifl->bif_flags & IFBIF_BLOCKNONIP) { - m = bridge_blocknonip(m); - if (m == NULL) - return; - eh = mtod(m, struct ether_header *); - dst = (struct ether_addr *)&eh->ether_dhost[0]; - src = (struct ether_addr *)&eh->ether_shost[0]; + if (ifl->bif_flags & IFBIF_BLOCKNONIP && bridge_blocknonip(&eh, m)) { + m_freem(m); + return; } if (SIMPLEQ_FIRST(&ifl->bif_brlin) && - bridge_filterrule(SIMPLEQ_FIRST(&ifl->bif_brlin), eh) == + bridge_filterrule(SIMPLEQ_FIRST(&ifl->bif_brlin), &eh) == BRL_ACTION_BLOCK) { m_freem(m); return; } #if defined(INET) && (defined(IPFILTER) || defined(IPFILTER_LKM)) - if (bridge_filter(sc, src_if, eh, &m) == BRIDGE_FILTER_DROP) { - if (m != NULL) - m_freem(m); + m = bridge_filter(sc, src_if, &eh, m); + if (m == NULL) return; - } #endif /* @@ -1091,7 +1084,9 @@ bridgeintr_frame(sc, m) */ if ((m->m_flags & (M_BCAST | M_MCAST)) || dst_if == NULL) { sc->sc_if.if_imcasts++; - bridge_broadcast(sc, src_if, eh, m); + s = splimp(); + bridge_broadcast(sc, src_if, &eh, m); + splx(s); return; } @@ -1107,7 +1102,7 @@ bridgeintr_frame(sc, m) while (ifl != NULL && ifl->ifp != dst_if) ifl = LIST_NEXT(ifl, next); if (SIMPLEQ_FIRST(&ifl->bif_brlout) && - bridge_filterrule(SIMPLEQ_FIRST(&ifl->bif_brlout), eh) == + bridge_filterrule(SIMPLEQ_FIRST(&ifl->bif_brlout), &eh) == BRL_ACTION_BLOCK) { m_freem(m); return; @@ -1128,8 +1123,8 @@ bridgeintr_frame(sc, m) } /* - * Receive input from an interface. Rebroadcast if necessary to other - * bridge members. + * Receive input from an interface. Queue the packet for bridging if its + * not for us, and schedule an interrupt. */ struct mbuf * bridge_input(ifp, eh, m) @@ -1141,7 +1136,6 @@ bridge_input(ifp, eh, m) int s; struct bridge_iflist *ifl; struct arpcom *ac; - struct ether_header *neh; struct mbuf *mc; /* @@ -1150,6 +1144,9 @@ bridge_input(ifp, eh, m) if (ifp == NULL || ifp->if_bridge == NULL || m == NULL) return (m); + if ((m->m_flags & M_PKTHDR) == 0) + panic("bridge_input(): no HDR"); + sc = (struct bridge_softc *)ifp->if_bridge; if ((sc->sc_if.if_flags & IFF_RUNNING) == 0) return (m); @@ -1163,11 +1160,10 @@ bridge_input(ifp, eh, m) mc = m_copym2(m, 0, M_COPYALL, M_NOWAIT); if (mc == NULL) return (m); - M_PREPEND(mc, sizeof(*eh), M_DONTWAIT); + M_PREPEND(mc, sizeof(struct ether_header), M_DONTWAIT); if (mc == NULL) return (m); - neh = mtod(mc, struct ether_header *); - bcopy(eh, neh, sizeof(struct ether_header)); + bcopy(eh, mtod(mc, caddr_t), sizeof(struct ether_header)); s = splimp(); if (IF_QFULL(&sc->sc_if.if_snd)) { m_freem(mc); @@ -1183,30 +1179,27 @@ bridge_input(ifp, eh, m) /* * Unicast, make sure it's not for us. */ - ifl = LIST_FIRST(&sc->sc_iflist); - while (ifl != NULL) { - if (ifl->ifp->if_type == IFT_ETHER) { - ac = (struct arpcom *)ifl->ifp; - if (bcmp(ac->ac_enaddr, eh->ether_dhost, - ETHER_ADDR_LEN) == 0) { + for (ifl = LIST_FIRST(&sc->sc_iflist);ifl; ifl = LIST_NEXT(ifl,next)) { + if (ifl->ifp->if_type != IFT_ETHER) + continue; + ac = (struct arpcom *)ifl->ifp; + if (bcmp(ac->ac_enaddr, eh->ether_dhost, ETHER_ADDR_LEN) == 0) { + if (ifl->bif_flags & IFBIF_LEARNING) bridge_rtupdate(sc, - (struct ether_addr *)&eh->ether_dhost[0], + (struct ether_addr *)&eh->ether_dhost, ifp, 0, IFBAF_DYNAMIC); - return (m); - } - if (bcmp(ac->ac_enaddr, eh->ether_shost, - ETHER_ADDR_LEN) == 0) { - m_freem(m); - return (NULL); - } + m->m_pkthdr.rcvif = ifl->ifp; + return (m); } - ifl = LIST_NEXT(ifl, next); + if (bcmp(ac->ac_enaddr, eh->ether_shost, ETHER_ADDR_LEN) == 0) { + m_freem(m); + return (NULL); + } } - M_PREPEND(m, sizeof(*eh), M_DONTWAIT); + M_PREPEND(m, sizeof(struct ether_header), M_DONTWAIT); if (m == NULL) return (NULL); - neh = mtod(m, struct ether_header *); - bcopy(eh, neh, sizeof(struct ether_header)); + bcopy(eh, mtod(m, caddr_t), sizeof(struct ether_header)); s = splimp(); if (IF_QFULL(&sc->sc_if.if_snd)) { m_freem(m); @@ -1257,16 +1250,14 @@ bridge_broadcast(sc, ifp, eh, m) if (SIMPLEQ_FIRST(&p->bif_brlout) && bridge_filterrule(SIMPLEQ_FIRST(&p->bif_brlout), eh) == - BRL_ACTION_BLOCK) { + BRL_ACTION_BLOCK) continue; - } /* If last one, reuse the passed-in mbuf */ if (LIST_NEXT(p, next) == NULL) { mc = m; used = 1; - } - else { + } else { mc = m_copym(m, 0, M_COPYALL, M_DONTWAIT); if (mc == NULL) { sc->sc_if.if_oerrors++; @@ -1274,10 +1265,10 @@ bridge_broadcast(sc, ifp, eh, m) } } - if (p->bif_flags & IFBIF_BLOCKNONIP) { - mc = bridge_blocknonip(mc); - if (mc == NULL) - continue; + if (p->bif_flags & IFBIF_BLOCKNONIP && + bridge_blocknonip(eh, mc)) { + m_freem(mc); + continue; } sc->sc_if.if_opackets++; @@ -1318,8 +1309,7 @@ bridge_rtupdate(sc, ea, ifp, setflags, f for (h = 0; h < BRIDGE_RTABLE_SIZE; h++) LIST_INIT(&sc->sc_rts[h]); - } - else + } else goto done; } @@ -1351,7 +1341,7 @@ bridge_rtupdate(sc, ea, ifp, setflags, f q = p; p = LIST_NEXT(p, brt_next); - dir = bcmp(ea, &q->brt_addr, sizeof(q->brt_addr)); + dir = memcmp(ea, &q->brt_addr, sizeof(q->brt_addr)); if (dir == 0) { if (setflags) { q->brt_if = ifp; @@ -1435,7 +1425,7 @@ bridge_rtlookup(sc, ea) h = bridge_hash(ea); p = LIST_FIRST(&sc->sc_rts[h]); while (p != NULL) { - dir = bcmp(ea, &p->brt_addr, sizeof(p->brt_addr)); + dir = memcmp(ea, &p->brt_addr, sizeof(p->brt_addr)); if (dir == 0) { splx(s); return (p->brt_if); @@ -1566,12 +1556,10 @@ bridge_rtage(vsc) if (n->brt_age) n->brt_age = 0; n = LIST_NEXT(n, brt_next); - } - else if (n->brt_age) { + } else if (n->brt_age) { n->brt_age = 0; n = LIST_NEXT(n, brt_next); - } - else { + } else { p = LIST_NEXT(n, brt_next); LIST_REMOVE(n, brt_next); sc->sc_brtcnt--; @@ -1583,7 +1571,7 @@ bridge_rtage(vsc) splx(s); if (sc->sc_brttimeout != 0) - timeout(bridge_rtage, sc, sc->sc_brttimeout); + timeout(bridge_rtage, sc, sc->sc_brttimeout * hz); } /* @@ -1750,41 +1738,52 @@ done: return (error); } -struct mbuf * -bridge_blocknonip(m) +/* + * Block non-ip frames: + * Returns 0 if frame is ip, and 1 if it should be dropped. + */ +int +bridge_blocknonip(eh, m) + struct ether_header *eh; struct mbuf *m; { - struct ehllc *ehllc; + struct snap snap; u_int16_t etype; - if (m->m_len < sizeof(struct ehllc)) { - m = m_pullup(m, sizeof(struct ehllc)); - if (m == NULL) - return (m); + if (m->m_pkthdr.len < sizeof(struct ether_header)) + return (1); + + etype = ntohs(eh->ether_type); + switch (etype) { + case ETHERTYPE_ARP: + case ETHERTYPE_REVARP: + case ETHERTYPE_IP: + case ETHERTYPE_IPV6: + return (0); } - ehllc = mtod(m, struct ehllc *); - etype = ntohs(ehllc->eh.ether_type); + if (etype > ETHERMTU) + return (1); - if (etype == ETHERTYPE_ARP || etype == ETHERTYPE_REVARP || - etype == ETHERTYPE_IP || etype == ETHERTYPE_IPV6) - return (m); + if (m->m_pkthdr.len < + (sizeof(struct ether_header) + sizeof(struct snap))) + return (1); + + m_copydata(m, sizeof(struct ether_header), sizeof(struct snap), + (caddr_t)&snap); - if (etype > ETHERMTU) - goto notip; - - if (ehllc->llc.llc_control == LLC_UI && - ehllc->llc.llc_dsap == LLC_SNAP_LSAP && - ehllc->llc.llc_ssap == LLC_SNAP_LSAP) { - etype = ntohs(ehllc->llc.llc_snap.ether_type); - if (etype == ETHERTYPE_ARP || etype == ETHERTYPE_REVARP || - etype == ETHERTYPE_IP || etype == ETHERTYPE_IPV6) - return (m); + etype = ntohs(snap.type); + if (snap.dsap == LLC_SNAP_LSAP && snap.ssap == LLC_SNAP_LSAP && + snap.control == LLC_UI && + snap.org[0] == 0 && snap.org[1] == 0 && snap.org[2] == 0 && + (etype == ETHERTYPE_ARP || + etype == ETHERTYPE_REVARP || + etype == ETHERTYPE_IP || + etype == ETHERTYPE_IPV6)) { + return (0); } -notip: - m_freem(m); - return (NULL); + return (1); } u_int8_t @@ -1838,8 +1837,7 @@ bridge_addrule(bif, req, out) n->brl_flags &= ~BRL_FLAG_IN; n->brl_flags |= BRL_FLAG_OUT; SIMPLEQ_INSERT_TAIL(&bif->bif_brlout, n, brl_next); - } - else { + } else { n->brl_flags &= ~BRL_FLAG_OUT; n->brl_flags |= BRL_FLAG_IN; SIMPLEQ_INSERT_TAIL(&bif->bif_brlin, n, brl_next); @@ -1873,110 +1871,87 @@ bridge_flushrule(bif) #if defined(INET) && (defined(IPFILTER) || defined(IPFILTER_LKM)) /* + * Maximum sized IP header + */ +union maxip { + struct ip ip; + u_int32_t _padding[16]; +}; + +/* * Filter IP packets by peeking into the ethernet frame. This violates * the ISO model, but allows us to act as a IP filter at the data link * layer. As a result, most of this code will look familiar to those * who've read net/if_ethersubr.c and netinet/ip_input.c */ -int -bridge_filter(sc, ifp, eh, np) +struct mbuf * +bridge_filter(sc, ifp, eh, m) struct bridge_softc *sc; struct ifnet *ifp; struct ether_header *eh; - struct mbuf **np; + struct mbuf *m; { - struct mbuf *m = *np; - struct ehllc *ehllc; + struct snap snap; + int hassnap = 0; struct ip *ip; - u_int16_t etype; - int hlen, r, off = sizeof(struct ether_header); + int hlen; if (fr_checkp == NULL) - return (BRIDGE_FILTER_PASS); + return (m); - if (m->m_len < sizeof(struct ehllc)) { - m = m_pullup(m, sizeof(struct ehllc)); - *np = m; - if (m == NULL) - return (BRIDGE_FILTER_DROP); - } + if (eh->ether_type != htons(ETHERTYPE_IP)) { + if (eh->ether_type > ETHERMTU || + m->m_pkthdr.len < (sizeof(struct snap) + + sizeof(struct ether_header))) + return (m); - ehllc = mtod(m, struct ehllc *); - etype = ntohs(ehllc->eh.ether_type); - if (etype != ETHERTYPE_IP) { - if (etype > ETHERMTU) /* Can't be SNAP */ - return (BRIDGE_FILTER_PASS); + m_copydata(m, sizeof(struct ether_header), + sizeof(struct snap), (caddr_t)&snap); - if (ehllc->llc.llc_control != LLC_UI || - ehllc->llc.llc_dsap != LLC_SNAP_LSAP || - ehllc->llc.llc_ssap != LLC_SNAP_LSAP || - ehllc->llc.llc_snap.org_code[0] != 0 || - ehllc->llc.llc_snap.org_code[1] != 0 || - ehllc->llc.llc_snap.org_code[2] != 0 || - ntohs(ehllc->llc.llc_snap.ether_type) != ETHERTYPE_IP) - return (BRIDGE_FILTER_PASS); - off += 8; + if (snap.dsap != LLC_SNAP_LSAP || snap.ssap != LLC_SNAP_LSAP || + snap.control != LLC_UI || + snap.org[0] != 0 || snap.org[1] != 0 || snap.org[2] || + snap.type != htons(ETHERTYPE_IP)) + return (m); + hassnap = 1; } - /* - * We need a full copy because we're going to be destructive - * to the packet before we pass it to the ip filter code. - * XXX This needs to be turned into a munge -> check -> - * XXX unmunge section, for now, we copy. - * XXX Copy at offset 0 so that the mbuf header is copied, too. - */ - m = m_copym2(m, 0, M_COPYALL, M_NOWAIT); - m_adj(m, off); - if (m == NULL) - return (BRIDGE_FILTER_DROP); + m_adj(m, sizeof(struct ether_header)); + if (hassnap) + m_adj(m, sizeof(struct snap)); + + if (m->m_pkthdr.len < sizeof(struct ip)) + goto dropit; - /* - * Pull up the IP header - */ - if (m->m_len < sizeof(struct ip)) { - m = m_pullup(m, sizeof(struct ip)); - if (m == NULL) - return (BRIDGE_FILTER_DROP); + /* Copy minimal header, and drop invalids */ + if (m->m_len < sizeof(struct ip) && + (m = m_pullup(m, sizeof(struct ip))) == NULL) + return (NULL); + ip = mtod(m, struct ip *); + + if (ip->ip_v != IPVERSION) + goto dropit; + + hlen = ip->ip_hl << 2; /* get whole header length */ + if (hlen < sizeof(struct ip)) + goto dropit; + if (hlen > m->m_len) { + if ((m = m_pullup(m, sizeof(struct ip))) == NULL) + return (NULL); + ip = mtod(m, struct ip *); } - /* - * Examine the ip header, and drop invalid packets - */ - ip = mtod(m, struct ip *); - if (ip->ip_v != IPVERSION) { - r = BRIDGE_FILTER_DROP; - goto out; - } - - hlen = ip->ip_hl << 2; /* get whole header length */ - if (hlen < sizeof(struct ip)) { - r = BRIDGE_FILTER_DROP; - goto out; - } - if (hlen > m->m_len) { /* pull up whole header */ - if ((m = m_pullup(m, hlen)) == 0) { - r = BRIDGE_FILTER_DROP; - goto out; - } - ip = mtod(m, struct ip *); - } - if ((ip->ip_sum = in_cksum(m, hlen)) != 0) { - r = BRIDGE_FILTER_DROP; - goto out; - } + if ((ip->ip_sum = in_cksum(m, hlen)) != 0) + goto dropit; NTOHS(ip->ip_len); - if (ip->ip_len < hlen) { - r = BRIDGE_FILTER_DROP; - goto out; - } + if (ip->ip_len < hlen) + goto dropit; NTOHS(ip->ip_id); NTOHS(ip->ip_off); - if (m->m_pkthdr.len < ip->ip_len) { - r = BRIDGE_FILTER_DROP; - goto out; - } + if (m->m_pkthdr.len < ip->ip_len) + goto dropit; if (m->m_pkthdr.len > ip->ip_len) { if (m->m_len == m->m_pkthdr.len) { m->m_len = ip->ip_len; @@ -1987,13 +1962,39 @@ bridge_filter(sc, ifp, eh, np) /* Finally, we get to filter the packet! */ if (fr_checkp && (*fr_checkp)(ip, hlen, ifp, 0, &m)) - return (BRIDGE_FILTER_DROP); + return (NULL); - r = BRIDGE_FILTER_PASS; + /* Rebuild the IP header */ + if (m->m_len < hlen && ((m = m_pullup(m, hlen)) == NULL)) + return (NULL); + if (m->m_len < sizeof(struct ip)) + goto dropit; + ip = mtod(m, struct ip *); + HTONS(ip->ip_len); + HTONS(ip->ip_id); + HTONS(ip->ip_off); + ip->ip_sum = in_cksum(m, hlen); -out: - m_freem(m); - return (r); + /* Reattach SNAP header */ + if (hassnap) { + M_PREPEND(m, sizeof(snap), M_DONTWAIT); + if (m == NULL) + goto dropit; + bcopy(&snap, mtod(m, caddr_t), sizeof(snap)); + } + + /* Reattach ethernet header */ + M_PREPEND(m, sizeof(*eh), M_DONTWAIT); + if (m == NULL) + goto dropit; + bcopy(eh, mtod(m, caddr_t), sizeof(*eh)); + + return (m); + +dropit: + if (m != NULL) + m_freem(m); + return (NULL); } #endif
--- a/packages/redboot/current/ChangeLog +++ b/packages/redboot/current/ChangeLog @@ -1,3 +1,50 @@ +2000-10-23 Gary Thomas <gthomas@redhat.com> + + * cdl/redboot.cdl: + * src/main.c (cyg_start): + * src/flash.c: Script timeout now has a configurable resolution. + +2000-10-21 Gary Thomas <gthomas@redhat.com> + + * src/net/eth_drv.c: Removed obsolete file - now provided by + standard IO/ETH package. + +2000-10-20 Gary Thomas <gthomas@redhat.com> + + * src/net/pktbuf.c: Diagnostc - add buffer [list] dumper. + + * src/net/enet.c: Diagnostic - dump when run out of buffers. + + * src/flash.c: Make sure RedBoot flash image size meets + certain minimums - currently at least 128K. + +2000-10-19 Gary Thomas <gthomas@redhat.com> + + * cdl/redboot.cdl: Add dependency on 'vectors.o'. + + * include/redboot.h: + * src/misc_funs.c (strcpy, memcmp): + Make function signature [prototype] conform to standards. + (memmove, memset): Remove. + +2000-10-18 Gary Thomas <gthomas@redhat.com> + + * cdl/redboot.cdl: Improve dependency checking in make rules. + +2000-10-17 Gary Thomas <gthomas@redhat.com> + + * src/flash.c (fis_create): Add new "-s" option to support padded + images (data size not the same as image size in FLASH). + + * include/fis.h: New file - make structure available for export. + + * src/parse.c: New file. + + * include/redboot.h: + * src/main.c: + * cdl/redboot.cdl: Split command line parsing functions to separate + file. + 2000-10-05 Gary Thomas <gthomas@redhat.com> * src/net/net_io.c (net_io_revert_console):
--- a/packages/redboot/current/cdl/redboot.cdl +++ b/packages/redboot/current/cdl/redboot.cdl @@ -77,13 +77,13 @@ cdl_package CYGPKG_REDBOOT { stripping before being converted to a binary image. This is handled by a rule in the target CDL." - compile printf.c misc_funs.c io.c ticks.c + compile printf.c misc_funs.c io.c parse.c ticks.c compile -library=libextras.a load.c make -priority 320 { - <PREFIX>/bin/redboot.elf : $(PREFIX)/lib/libtarget.a main.o + <PREFIX>/bin/redboot.elf : $(PREFIX)/lib/target.ld $(PREFIX)/lib/vectors.o $(PREFIX)/lib/libtarget.a $(PREFIX)/lib/libextras.a main.o @sh -c "mkdir -p $(dir $@)" - $(CC) $(LDFLAGS) -L$(PREFIX)/lib -Ttarget.ld -o $@ $^ + $(CC) $(LDFLAGS) -L$(PREFIX)/lib -Ttarget.ld -o $@ main.o } make -priority 319 { main.o: $(REPOSITORY)/$(PACKAGE)/src/main.c $(PREFIX)/lib/libtarget.a @@ -160,6 +160,27 @@ cdl_package CYGPKG_REDBOOT { data in a separate block of FLASH memory. This data will include such items as the node IP address or startup scripts." } + + cdl_option CYGNUM_REDBOOT_FLASH_SCRIPT_TIMEOUT_RESOLUTION { + display "Resolution (in ms) for script timeout value." + flavor data + default_value 1000 + active_if CYGSEM_REDBOOT_FLASH_CONFIG + description " + This option controls the resolution of the script timeout. + The value is specified in milliseconds (ms), thus to have the + script timeout be defined in terms of tenths of seconds, use 100." + } + + cdl_option CYGNUM_REDBOOT_FLASH_SCRIPT_DEFAULT_TIMEOUT { + display "Default script timeout value" + flavor data + default_value 10 + active_if CYGSEM_REDBOOT_FLASH_CONFIG + description " + This option is used to set the default timeout for startup + scripts, when they are enabled." + } } }
new file mode 100644 --- /dev/null +++ b/packages/redboot/current/include/fis.h @@ -0,0 +1,55 @@ +//========================================================================== +// +// fis.h +// +// RedBoot - FLASH image directory layout +// +//========================================================================== +//####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 +// Date: 2000-07-28 +// Purpose: +// Description: +// +// This code is part of RedBoot (tm). +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +struct fis_image_desc { + unsigned char name[16]; // Null terminated name + unsigned long flash_base; // Address within FLASH of image + unsigned long mem_base; // Address in memory where it executes + unsigned long size; // Length of image + unsigned long entry_point; // Execution entry point + unsigned char _pad[256-40]; + unsigned long desc_cksum; // Checksum over image descriptor + unsigned long file_cksum; // Checksum over image data +};
--- a/packages/redboot/current/include/redboot.h +++ b/packages/redboot/current/include/redboot.h @@ -98,6 +98,7 @@ int strcmp(const char *s1, const char * int strncmp(const char *s1, const char *s2, int len); int strcmpci(const char *s1, const char *s2); int strncmpci(const char *s1, const char *s2, int len); +char *strcpy(char *s1, const char *s2); void mon_write_char(char c); int gets(char *line, int len, int timeout); @@ -159,6 +160,9 @@ struct option_info { #define OPTION_ARG_TYPE_STR 1 // Generic string #define OPTION_ARG_TYPE_FLG 2 // Flag only +// Command line parsing +struct cmd *parse(char *line, int *argc, char **argv); + extern void init_opts(struct option_info *opts, char flag, bool takes_arg, int arg_type, void **arg, bool *arg_set, char *name); extern bool scan_opts(int argc, char *argv[], int first,
--- a/packages/redboot/current/src/flash.c +++ b/packages/redboot/current/src/flash.c @@ -45,17 +45,7 @@ #include <redboot.h> #include <cyg/io/flash.h> - -struct image_desc { - unsigned char name[16]; // Null terminated name - unsigned long flash_base; // Address within FLASH of image - unsigned long mem_base; // Address in memory where it executes - unsigned long size; // Length of image - unsigned long entry_point; // Execution entry point - unsigned char _pad[256-40]; - unsigned long desc_cksum; // Checksum over image descriptor - unsigned long file_cksum; // Checksum over image data -}; +#include <fis.h> // Exported CLI functions RedBoot_cmd("fis", @@ -124,7 +114,7 @@ local_cmd_entry("load", ); local_cmd_entry("create", "Create an image", - "-b <mem_base> -l <length> [-f <flash_addr>] [-e <entry_point>] [-r <ram_addr>] <name>", + "-b <mem_base> -l <image_length> [-s <data_length>] [-f <flash_addr>] [-e <entry_point>] [-r <ram_addr>] <name>", fis_create, FIS_cmds ); @@ -151,13 +141,14 @@ static void fis_init(int argc, char *argv[]) { int stat, img_count = 0; - struct image_desc *img; + struct fis_image_desc *img; void *fis_base, *err_addr; #ifdef CYGSEM_REDBOOT_FLASH_CONFIG void *cfg_base; #endif bool full_init = false; struct option_info opts[1]; + unsigned long redboot_image_size; init_opts(&opts[0], 'f', false, OPTION_ARG_TYPE_FLG, (void **)&full_init, (bool *)0, "full initialization, erases all of flash"); @@ -180,19 +171,21 @@ fis_init(int argc, char *argv[]) printf(" Warning: device contents not erased, some blocks may not be usable\n"); } // Create a pseudo image for RedBoot - img = (struct image_desc *)fis_work_block; +#define MIN_REDBOOT_IMAGE_SIZE 0x20000 + redboot_image_size = block_size > MIN_REDBOOT_IMAGE_SIZE ? block_size : MIN_REDBOOT_IMAGE_SIZE; + img = (struct fis_image_desc *)fis_work_block; memset(img, 0, sizeof(*img)); strcpy(img->name, "RedBoot"); img->flash_base = (unsigned long)flash_start; img->mem_base = (unsigned long)flash_start; - img->size = block_size; + img->size = redboot_image_size; img++; img_count++; // And a backup image memset(img, 0, sizeof(*img)); strcpy(img->name, "RedBoot[backup]"); - img->flash_base = (unsigned long)flash_start+block_size; - img->mem_base = (unsigned long)flash_start+block_size; - img->size = block_size; + img->flash_base = (unsigned long)flash_start+redboot_image_size; + img->mem_base = (unsigned long)flash_start+redboot_image_size; + img->size = redboot_image_size; img++; img_count++; #ifdef CYGSEM_REDBOOT_FLASH_CONFIG // And a descriptor for the configuration data @@ -226,10 +219,10 @@ fis_init(int argc, char *argv[]) static void fis_list(int argc, char *argv[]) { - struct image_desc *img; + struct fis_image_desc *img; int i; - img = (struct image_desc *)((unsigned long)flash_end - block_size); + img = (struct fis_image_desc *)((unsigned long)flash_end - block_size); printf("Name FLASH addr Mem addr Length Entry point\n"); for (i = 0; i < block_size/sizeof(*img); i++, img++) { if (img->name[0] != (unsigned char)0xFF) { @@ -320,17 +313,18 @@ static void fis_create(int argc, char *argv[]) { int i, stat; - unsigned long mem_addr, exec_addr, flash_addr, entry_addr, length; + unsigned long mem_addr, exec_addr, flash_addr, entry_addr, length, img_size; char *name; bool mem_addr_set = false; bool exec_addr_set = false; bool entry_addr_set = false; bool flash_addr_set = false; bool length_set = false; + bool img_size_set = false; void *fis_addr, *err_addr; - struct image_desc *img; + struct fis_image_desc *img; bool slot_found; - struct option_info opts[5]; + struct option_info opts[6]; bool prog_ok; init_opts(&opts[0], 'b', true, OPTION_ARG_TYPE_NUM, @@ -342,8 +336,10 @@ fis_create(int argc, char *argv[]) init_opts(&opts[3], 'f', true, OPTION_ARG_TYPE_NUM, (void **)&flash_addr, (bool *)&flash_addr_set, "FLASH memory base address"); init_opts(&opts[4], 'l', true, OPTION_ARG_TYPE_NUM, - (void **)&length, (bool *)&length_set, "length"); - if (!scan_opts(argc, argv, 2, opts, 5, (void *)&name, OPTION_ARG_TYPE_STR, "file name")) + (void **)&length, (bool *)&length_set, "image length [in FLASH]"); + init_opts(&opts[5], 's', true, OPTION_ARG_TYPE_NUM, + (void **)&img_size, (bool *)&img_size_set, "image size [actual data]"); + if (!scan_opts(argc, argv, 2, opts, 6, (void *)&name, OPTION_ARG_TYPE_STR, "file name")) { fis_usage("invalid arguments"); return; @@ -353,15 +349,25 @@ fis_create(int argc, char *argv[]) fis_usage("required parameter missing"); return; } + if (!img_size_set) { + img_size = length; + } + // 'length' is size of FLASH image, 'img_size' is actual data size + // Round up length to FLASH block size + length = ((length + block_size - 1) / block_size) * block_size; + if (length < img_size) { + printf("Invalid FLASH image size/length combination"); + return; + } if (flash_addr_set && ((stat = flash_verify_addr((void *)flash_addr)) || - (stat = flash_verify_addr((void *)(flash_addr+length-1))))) { + (stat = flash_verify_addr((void *)(flash_addr+img_size-1))))) { printf("Invalid FLASH address: %p (%s)\n", (void *)flash_addr, flash_errmsg(stat)); printf(" valid range is %p-%p\n", (void *)flash_start, (void *)flash_end); return; } if ((mem_addr < (unsigned long)ram_start) || - ((mem_addr+length) >= (unsigned long)ram_end)) { + ((mem_addr+img_size) >= (unsigned long)ram_end)) { printf("** WARNING: RAM address: %p may be invalid\n", (void *)mem_addr); printf(" valid range is %p-%p\n", (void *)ram_start, (void *)ram_end); } @@ -378,7 +384,7 @@ fis_create(int argc, char *argv[]) slot_found = false; fis_addr = (void *)((unsigned long)flash_end - block_size); memcpy(fis_work_block, fis_addr, block_size); - img = (struct image_desc *)fis_work_block; + img = (struct fis_image_desc *)fis_work_block; for (i = 0; i < block_size/sizeof(*img); i++, img++) { if ((img->name[0] != (unsigned char)0xFF) && (strcmp(name, img->name) == 0)) { if (flash_addr_set && (img->flash_base != flash_addr)) { @@ -399,7 +405,7 @@ fis_create(int argc, char *argv[]) } // If not found, try and find an empty slot if (!slot_found) { - img = (struct image_desc *)fis_work_block; + img = (struct fis_image_desc *)fis_work_block; for (i = 0; i < block_size/sizeof(*img); i++, img++) { if (img->name[0] == (unsigned char)0xFF) { slot_found = true; @@ -408,7 +414,7 @@ fis_create(int argc, char *argv[]) } } // Safety check - make sure the address range is not within the code we're running - if (flash_code_overlaps((void *)flash_addr, (void *)(flash_addr+length-1))) { + if (flash_code_overlaps((void *)flash_addr, (void *)(flash_addr+img_size-1))) { printf("Can't program this region - contains code in use!\n"); return; } @@ -422,7 +428,7 @@ fis_create(int argc, char *argv[]) } if (prog_ok) { // Now program it - if ((stat = flash_program((void *)flash_addr, (void *)mem_addr, length, (void **)&err_addr)) != 0) { + if ((stat = flash_program((void *)flash_addr, (void *)mem_addr, img_size, (void **)&err_addr)) != 0) { printf("Can't program region at %p: %x(%s)\n", err_addr, stat, flash_errmsg(stat)); prog_ok = false; } @@ -567,7 +573,7 @@ fis_delete(int argc, char *argv[]) char *name; int i, stat; void *fis_addr, *err_addr; - struct image_desc *img; + struct fis_image_desc *img; bool slot_found; if (!scan_opts(argc, argv, 2, 0, 0, (void **)&name, OPTION_ARG_TYPE_STR, "image name")) @@ -579,7 +585,7 @@ fis_delete(int argc, char *argv[]) slot_found = false; fis_addr = (void *)((unsigned long)flash_end - block_size); memcpy(fis_work_block, fis_addr, block_size); - img = (struct image_desc *)fis_work_block; + img = (struct fis_image_desc *)fis_work_block; img += 2; // Skip reserved files for (i = 2; i < block_size/sizeof(*img); i++, img++) { if ((img->name[0] != (unsigned char)0xFF) && (strcmp(name, img->name) == 0)) { @@ -618,7 +624,7 @@ fis_load(int argc, char *argv[]) char *name; int i; void *fis_addr; - struct image_desc *img; + struct fis_image_desc *img; bool slot_found; if (!scan_opts(argc, argv, 2, 0, 0, (void **)&name, OPTION_ARG_TYPE_STR, "image name")) @@ -630,7 +636,7 @@ fis_load(int argc, char *argv[]) slot_found = false; fis_addr = (void *)((unsigned long)flash_end - block_size); memcpy(fis_work_block, fis_addr, block_size); - img = (struct image_desc *)fis_work_block; + img = (struct fis_image_desc *)fis_work_block; for (i = 0; i < block_size/sizeof(*img); i++, img++) { if ((img->name[0] != (unsigned char)0xFF) && (strcmp(name, img->name) == 0)) { slot_found = true; @@ -728,11 +734,18 @@ RedBoot_config_option("Boot script", "boot_script", true, CONFIG_SCRIPT ); -RedBoot_config_option("Boot script timeout", +// Some preprocessor magic for building the [constant] prompt string +#define __cat(s1,c2,s3) s1 ## #c2 ## s3 +#define _cat(s1,c2,s3) __cat(s1,c2,s3) +RedBoot_config_option(_cat("Boot script timeout (", + CYGNUM_REDBOOT_FLASH_SCRIPT_TIMEOUT_RESOLUTION, + "ms resolution)"), boot_script_timeout, "boot_script", true, CONFIG_INT ); +#undef __cat +#undef _cat CYG_HAL_TABLE_BEGIN( __CONFIG_options_TAB__, RedBoot_config_options); CYG_HAL_TABLE_END( __CONFIG_options_TAB_END__, RedBoot_config_options);
--- a/packages/redboot/current/src/main.c +++ b/packages/redboot/current/src/main.c @@ -55,9 +55,6 @@ // GDB interfaces extern void breakpoint(void); -// Internal functions -static struct cmd *parse(char *line, int *argc, char **argv); - // CLI command processing (defined in this file) RedBoot_cmd("help", "Help about help?", @@ -71,7 +68,7 @@ RedBoot_cmd("go", ); RedBoot_cmd("dump", "Display (hex dump) a range of memory", - "<location> [<length>]", + "-b <location> [-l <length>]", do_dump ); RedBoot_cmd("cache", @@ -81,14 +78,13 @@ RedBoot_cmd("cache", ); // Define table boundaries +CYG_HAL_TABLE_BEGIN( __RedBoot_INIT_TAB__, RedBoot_inits ); +CYG_HAL_TABLE_END( __RedBoot_INIT_TAB_END__, RedBoot_inits ); +extern struct init_tab_entry __RedBoot_INIT_TAB__[], __RedBoot_INIT_TAB_END__; CYG_HAL_TABLE_BEGIN( __RedBoot_CMD_TAB__, RedBoot_commands ); CYG_HAL_TABLE_END( __RedBoot_CMD_TAB_END__, RedBoot_commands ); extern struct cmd __RedBoot_CMD_TAB__[], __RedBoot_CMD_TAB_END__; -CYG_HAL_TABLE_BEGIN( __RedBoot_INIT_TAB__, RedBoot_inits ); -CYG_HAL_TABLE_END( __RedBoot_INIT_TAB_END__, RedBoot_inits ); -extern struct init_tab_entry __RedBoot_INIT_TAB__[], __RedBoot_INIT_TAB_END__; - // // This is the main entry point for RedBoot // @@ -129,9 +125,11 @@ cyg_start(void) // Give the guy a chance to abort any boot script if (script) { unsigned char *hold_script = script; - printf("== Executing boot script in %d seconds - enter ^C to abort\n", script_timeout); + int script_timeout_ms = script_timeout * CYGNUM_REDBOOT_FLASH_SCRIPT_TIMEOUT_RESOLUTION; + printf("== Executing boot script in %d.%03d seconds - enter ^C to abort\n", + script_timeout_ms/1000, script_timeout_ms%1000); script = (unsigned char *)0; - res = gets(line, sizeof(line), script_timeout*1000); + res = gets(line, sizeof(line), script_timeout_ms); if (res == -2) { script = (unsigned char *)0; // Disable script } else { @@ -164,7 +162,7 @@ cyg_start(void) if ((cmd = parse(line, &argc, &argv[0])) != (struct cmd *)0) { (cmd->fun)(argc, argv); } else { - printf("Illegal command: %s\n", line); + printf("** Error: Illegal command: %s\n", line); } } prompt = true; @@ -173,285 +171,6 @@ cyg_start(void) } } -// -// Scan through an input line and break it into "arguments". These -// are space delimited strings. Return a structure which points to -// the strings, similar to a Unix program. -// Note: original input is destroyed by replacing the delimiters with -// null ('\0') characters for ease of use. -// -struct cmd * -parse(char *line, int *argc, char **argv) -{ - char *cp = line; - int indx = 0; - - while (*cp) { - // Skip leading spaces - while (*cp && *cp == ' ') cp++; - if (!*cp) { - break; // Line ended with a string of spaces - } - argv[indx++] = cp; - while (*cp) { - if (*cp == ' ') { - *cp++ = '\0'; - break; - } else if (*cp == '"') { - // Swallow quote, scan till following one - if (argv[indx-1] == cp) { - argv[indx-1] = ++cp; - } - while (*cp && *cp != '"') cp++; - if (!*cp) { - printf("Unbalanced string!\n"); - } else { - *cp++ = '\0'; - break; - } - } else { - cp++; - } - } - } - *argc = indx; - return cmd_search(__RedBoot_CMD_TAB__, &__RedBoot_CMD_TAB_END__, argv[0]); -} - -// -// Search through a list of commands -// -struct cmd * -cmd_search(struct cmd *tab, struct cmd *tabend, char *arg) -{ - int cmd_len; - struct cmd *cmd, *cmd2; - // Search command table - cmd_len = strlen(arg); - cmd = tab; - while (cmd != tabend) { - if (strncmpci(arg, cmd->str, cmd_len) == 0) { - if (strlen(cmd->str) > cmd_len) { - // Check for ambiguous commands here - // Note: If there are commands which are not length-unique - // then this check will be invalid. E.g. "du" and "dump" - bool first = true; - cmd2 = tab; - while (cmd2 != tabend) { - if ((cmd != cmd2) && - (strncmpci(arg, cmd2->str, cmd_len) == 0)) { - if (first) { - printf("Ambiguous command '%s', choices are: %s", arg, cmd->str); - first = false; - } - printf(" %s", cmd2->str); - } - cmd2++; - } - if (!first) { - // At least one ambiguity found - fail the lookup - printf("\n"); - return (struct cmd *)0; - } - } - return cmd; - } - cmd++; - } - return (struct cmd *)0; -} - -void -cmd_usage(struct cmd *tab, struct cmd *tabend, char *prefix) -{ - struct cmd *cmd; - printf("Usage:\n"); for (cmd = tab; cmd != tabend; cmd++) { - printf(" %s%s %s\n", prefix, cmd->str, cmd->usage); - } -} - -// Option processing - -// Initialize option table entry (required because these entries -// may have dynamic contents, thus cannot be statically initialized) -// -void -init_opts(struct option_info *opts, char flag, bool takes_arg, - int arg_type, void **arg, bool *arg_set, char *name) -{ - opts->flag = flag; - opts->takes_arg = takes_arg; - opts->arg_type = arg_type, - opts->arg = arg; - opts->arg_set = arg_set; - opts->name = name; -} - -// -// Scan command line arguments (argc/argv), processing options, etc. -// -bool -scan_opts(int argc, char *argv[], int first, - struct option_info *opts, int num_opts, - void **def_arg, int def_arg_type, char *def_descr) -{ - bool ret = true; - bool flag_ok; - bool def_arg_set = false; - int i, j; - char c, *s; - struct option_info *opt; - - if (def_arg && (def_arg_type == OPTION_ARG_TYPE_STR)) { - *def_arg = (char *)0; - } - opt = opts; - for (j = 0; j < num_opts; j++, opt++) { - if (opt->arg_set) { - *opt->arg_set = false; - } - if (!opt->takes_arg) { - switch (opt->arg_type) { - case OPTION_ARG_TYPE_NUM: - *(int *)opt->arg = 0; - break; - case OPTION_ARG_TYPE_FLG: - *(bool *)opt->arg = false; - break; - } - } - } - for (i = first; i < argc; i++) { - if (argv[i][0] == '-') { - c = argv[i][1]; - flag_ok = false; - opt = opts; - for (j = 0; j < num_opts; j++, opt++) { - if (c == opt->flag) { - if (opt->arg_set && *opt->arg_set) { - printf("%s alread set\n", opt->name); - ret = false; - } - if (opt->takes_arg) { - if (argv[i][2] == '=') { - s = &argv[i][3]; - } else { - s = argv[i+1]; - i++; - } - switch (opt->arg_type) { - case OPTION_ARG_TYPE_NUM: - if (!parse_num(s, (unsigned long *)opt->arg, 0, 0)) { - printf("invalid number '%s' for %s\n", s, opt->name); - ret = false; - } - break; - case OPTION_ARG_TYPE_STR: - *opt->arg = s; - break; - } - *opt->arg_set = true; - } else { - switch (opt->arg_type) { - case OPTION_ARG_TYPE_NUM: - *(int *)opt->arg = *(int *)opt->arg + 1; - break; - case OPTION_ARG_TYPE_FLG: - *(bool *)opt->arg = true; - break; - } - } - flag_ok = true; - break; - } - } - if (!flag_ok) { - printf("invalid flag '%c'\n", c); - ret = false; - } - } else { - if (def_arg) { - if (def_arg_set) { - printf("%s already set\n", def_descr); - ret = false; - } - switch (def_arg_type) { - case OPTION_ARG_TYPE_NUM: - if (!parse_num(argv[i], (unsigned long *)def_arg, 0, 0)) { - printf("invalid number '%s' for %s\n", argv[i], def_descr); - ret = false; - } - break; - case OPTION_ARG_TYPE_STR: - *def_arg = argv[i]; - break; - } - def_arg_set = true; - } else { - printf("no default/non-flag arguments supported\n"); - ret = false; - } - } - } - return ret; -} - -// -// Parse (scan) a number -// -bool -parse_num(char *s, unsigned long *val, char **es, char *delim) -{ - bool first = true; - int radix = 10; - char c; - unsigned long result = 0; - int digit; - - while (*s == ' ') s++; - while (*s) { - if (first && (s[0] == '0') && (tolower(s[1]) == 'x')) { - radix = 16; - s += 2; - } - first = false; - c = *s++; - if (_is_hex(c) && ((digit = _from_hex(c)) < radix)) { - // Valid digit - result = (result * radix) + digit; - } else { - if (delim != (char *)0) { - // See if this character is one of the delimiters - char *dp = delim; - while (*dp && (c != *dp)) dp++; - if (*dp) break; // Found a good delimiter - } - return false; // Malformatted number - } - } - *val = result; - if (es != (char **)0) { - *es = s; - } - return true; -} - -bool -parse_bool(char *s, bool *val) -{ - while (*s == ' ') s++; - if ((*s == 't') || (*s == 'T')) { - *val = true; - } else - if ((*s == 'f') || (*s == 'F')) { - *val = false; - } else { - return false; - } - return true; -} - - void do_caches(int argc, char *argv[]) { @@ -496,22 +215,23 @@ do_help(int argc, char *argv[]) void do_dump(int argc, char *argv[]) { + struct option_info opts[2]; unsigned long base, len; + bool base_set, len_set; - if (argc < 2) { + init_opts(&opts[0], 'b', true, OPTION_ARG_TYPE_NUM, + (void **)&base, (bool *)&base_set, "base address"); + init_opts(&opts[1], 'l', true, OPTION_ARG_TYPE_NUM, + (void **)&len, (bool *)&len_set, "length"); + if (!scan_opts(argc, argv, 1, opts, 2, 0, 0, "")) + { + return; + } + if (!base_set) { printf("Dump what [location]?\n"); return; } - if (!parse_num(argv[1], &base, 0, 0)) { - printf("Invalid start address: %s\n", argv[1]); - return; - } - if (argc > 2) { - if (!parse_num(argv[2], &len, 0, 0)) { - printf("Invalid length/end address: %s\n", argv[2]); - return; - } - } else { + if (!len_set) { len = 32; } dump_buf((void *)base, len);
--- a/packages/redboot/current/src/misc_funs.c +++ b/packages/redboot/current/src/misc_funs.c @@ -64,14 +64,16 @@ strcmp(const char *s1, const char *s2) return ((unsigned char)c1 - (unsigned char)c2); } -void +char * strcpy(char *s1, const char *s2) { char c; + char *_s1 = s1; while ((c = *s2++) != '\0') *s1++ = c; *s1 = '\0'; + return _s1; } int @@ -116,15 +118,11 @@ strncmpci(const char *s1, const char *s2 return 0; } -void -memmove(unsigned char *dst, unsigned char *src, int len) +int +memcmp(const void *_dst, const void *_src, size_t len) { - while (len-- > 0) *dst++ = *src++; -} - -int -memcmp(const unsigned char *dst, const unsigned char *src, int len) -{ + unsigned char *dst = (unsigned char *)_dst; + unsigned char *src = (unsigned char *)_src; while (len-- > 0) { if (*dst++ != *src++) { return (*--dst - *--src); @@ -132,11 +130,3 @@ memcmp(const unsigned char *dst, const u } return 0; } - -void -memset(unsigned char *dst, unsigned char val, int len) -{ - while (--len >= 0) { - *dst++ = val; - } -}
--- a/packages/redboot/current/src/net/enet.c +++ b/packages/redboot/current/src/net/enet.c @@ -74,6 +74,7 @@ void */ if ((pkt = __pktbuf_alloc(ETH_MAX_PKTLEN)) == NULL) { printf("__enet_poll: no more buffers\n"); + __pktbuf_dump(); while (1) ; return; }
deleted file mode 100644 --- a/packages/redboot/current/src/net/eth_drv.c +++ /dev/null @@ -1,294 +0,0 @@ -//========================================================================== -// -// eth_drv.c -// -// Stand-alone hardware independent networking support for RedBoot -// -//========================================================================== -//####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 -// Date: 2000-07-14 -// Purpose: -// Description: -// -// This code is part of RedBoot (tm). -// -//####DESCRIPTIONEND#### -// -//========================================================================== - -#include <pkgconf/system.h> -#include <cyg/infra/cyg_type.h> -#include <cyg/hal/hal_arch.h> -#include <cyg/infra/diag.h> -#include <cyg/hal/drv_api.h> -#include <eth_drv.h> -#include <netdev.h> - -// High-level ethernet driver - -// Interfaces exported to drivers - -static void eth_drv_init(struct eth_drv_sc *sc, unsigned char *enaddr); -static void eth_drv_recv(struct eth_drv_sc *sc, int total_len); -static void eth_drv_tx_done(struct eth_drv_sc *sc, unsigned long key, int status); - -struct eth_drv_funs eth_drv_funs = {eth_drv_init, eth_drv_recv, eth_drv_tx_done}; - -int net_debug; // FIXME - -unsigned char __local_enet_addr[ETHER_ADDR_LEN+2]; -struct eth_drv_sc *__local_enet_sc; - -// -// Buffer 'get' support. The problem is that this function only gets -// called when some data is required, but packets may arrive on the device -// at any time. More particularly, on some devices when data arrive, all -// of that data needs to be consumed immediately or be lost. This process -// is driven by interrupts, which in the stand-along case are simulated by -// calling the "poll" interface. -// -// Thus there will be a pool of buffers, some free and some full, to try -// and manage this. -// - -#define MAX_ETH_MSG 1540 -#define NUM_ETH_MSG 16 - -struct eth_msg { - struct eth_msg *next, *prev; - int len; // Actual number of bytes in message - unsigned char data[MAX_ETH_MSG]; -}; - -struct eth_msg_hdr { - struct eth_msg *first, *last; -}; - -static struct eth_msg_hdr eth_msg_free, eth_msg_full; -static struct eth_msg eth_msgs[NUM_ETH_MSG]; - -// Simple queue management functions - -static void -eth_drv_msg_put(struct eth_msg_hdr *hdr, struct eth_msg *msg) -{ - if (hdr->first != (struct eth_msg *)hdr) { - // Something already in queue - hdr->last->next = msg; - msg->prev = hdr->last; - msg->next = (struct eth_msg *)hdr; - hdr->last = msg; - } else { - hdr->first = hdr->last = msg; - msg->next = msg->prev = (struct eth_msg *)hdr; - } -} - -static struct eth_msg * -eth_drv_msg_get(struct eth_msg_hdr *hdr) -{ - struct eth_msg *msg; - if (hdr->first != (struct eth_msg *)hdr) { - msg = hdr->first; - hdr->first = msg->next; - msg->next->prev = (struct eth_msg *)hdr; - } else { - msg = (struct eth_msg *)NULL; - } - return msg; -} - -static void -eth_drv_buffers_init(void) -{ - int i; - struct eth_msg *msg = eth_msgs; - - eth_msg_full.first = eth_msg_full.last = (struct eth_msg *)ð_msg_full; - eth_msg_free.first = eth_msg_free.last = (struct eth_msg *)ð_msg_free; - for (i = 0; i < NUM_ETH_MSG; i++, msg++) { - eth_drv_msg_put(ð_msg_free, msg); - } -} - -// -// This function is called during system initialization to register a -// network interface with the system. -// -static void -eth_drv_init(struct eth_drv_sc *sc, unsigned char *enaddr) -{ - // Set up hardware address - memcpy(&sc->sc_arpcom.esa, enaddr, ETHER_ADDR_LEN); - memcpy(__local_enet_addr, enaddr, ETHER_ADDR_LEN); - __local_enet_sc = sc; - eth_drv_start(sc); -} - -// -// This [internal] function will be called to stop activity on an interface. -// -static void -eth_drv_stop(struct eth_drv_sc *sc) -{ - (sc->funs->stop)(sc); -} - -// -// This [internal] function will be called to start activity on an interface. -// -static void -eth_drv_start(struct eth_drv_sc *sc) -{ - // Perform any hardware initialization - (sc->funs->start)(sc, (unsigned char *)&sc->sc_arpcom.esa, 0); -} - -// -// Send a packet of data to the hardware -// -void -eth_drv_write(char *eth_hdr, char *buf, int len) -{ - struct eth_drv_sg sg_list[MAX_ETH_DRV_SG]; - struct eth_drv_sc *sc = __local_enet_sc; - int sent = 0; - int sg_len = 2; - - sg_list[0].buf = eth_hdr; - sg_list[0].len = 14; // FIXME - sg_list[1].buf = buf; - sg_list[1].len = len; - (sc->funs->send)(sc, sg_list, sg_len, len+14, (unsigned long)&sent); - if (net_debug) { - printf("Ethernet send:\n"); - dump_buf(eth_hdr, 14); - dump_buf(buf, len); - } - while (!sent) { - (sc->funs->poll)(sc); - } -} - -// -// This function is called from the hardware driver when an output operation -// has completed - i.e. the packet has been sent. -// -static void -eth_drv_tx_done(struct eth_drv_sc *sc, unsigned long key, int status) -{ - *(int *)key = 1; -} - -// -// Receive one packet of data from the hardware, if available -// -int -eth_drv_read(char *eth_hdr, char *buf, int len) -{ - struct eth_drv_sc *sc = __local_enet_sc; - struct eth_msg *msg; - - (sc->funs->poll)(sc); // Give the driver a chance to fetch packets - msg = eth_drv_msg_get(ð_msg_full); - if (msg) { - memcpy(eth_hdr, msg->data, 14); - memcpy(buf, &msg->data[14], msg->len-14); - eth_drv_msg_put(ð_msg_free, msg); - return msg->len; - } else { - return 0; // No packets available - } -} - -// -// This function is called from a hardware driver to indicate that an input -// packet has arrived. The routine will set up appropriate network resources -// to hold the data and call back into the driver to retrieve the data. -// -static void -eth_drv_recv(struct eth_drv_sc *sc, int total_len) -{ - struct eth_drv_sg sg_list[MAX_ETH_DRV_SG]; - int sg_len = 0; - struct eth_msg *msg; - static unsigned char no_pkt[MAX_ETH_MSG]; - unsigned char *buf; - - msg = eth_drv_msg_get(ð_msg_free); - if (msg) { - buf = msg->data; - } else { - printf("%s: packet of %d bytes dropped\n", __FUNCTION__, total_len); - buf = &no_pkt[0]; - } - sg_list[0].buf = buf; - sg_list[0].len = total_len; - sg_len = 1; - (sc->funs->recv)(sc, sg_list, sg_len); - if (net_debug) { - printf("Ethernet recv:\n"); - dump_buf(buf, 14); - dump_buf(buf+14, total_len-14); - } - if (msg) { - msg->len = total_len; - eth_drv_msg_put(ð_msg_full, msg); - } else { - dump_buf(sg_list[0].buf, sg_list[0].len); - } -} - -// -// Network initialization -// -int -net_init(void) -{ - cyg_netdevtab_entry_t *t; - - // Make sure the recv buffers are set up - eth_drv_buffers_init(); - __pktbuf_init(); - // Initialize all network devices - for (t = &__NETDEVTAB__[0]; t != &__NETDEVTAB_END__; t++) { - if (t->init(t)) { - t->status = CYG_NETDEVTAB_STATUS_AVAIL; - } else { - // What to do if device init fails? - t->status = 0; // Device not [currently] available - } - } - if (!__local_enet_sc) { - printf("No network interfaces found\n"); - return -1; - } - return 0; -}
--- a/packages/redboot/current/src/net/pktbuf.c +++ b/packages/redboot/current/src/net/pktbuf.c @@ -84,6 +84,21 @@ void } } +void +__pktbuf_dump(void) +{ + int i; + for (i = 0; i < MAX_PKTBUF; i++) { + printf("Buf[%d]/%p: buf: %p, len: %d/%d, next: %p\n", + i, + &pktbuf_list[i], + pktbuf_list[i].buf, + pktbuf_list[i].bufsize, + pktbuf_list[i].pkt_bytes, + pktbuf_list[i].next); + } + printf("Free list = %p\n", free_list); +} /* * simple pktbuf allocation
new file mode 100644 --- /dev/null +++ b/packages/redboot/current/src/parse.c @@ -0,0 +1,333 @@ +//========================================================================== +// +// parse.c +// +// RedBoot command line parsing routine +// +//========================================================================== +//####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 +// Date: 2000-07-14 +// Purpose: +// Description: +// +// This code is part of RedBoot (tm). +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +#include <redboot.h> +#include <cyg/hal/hal_arch.h> +#include <cyg/hal/hal_intr.h> +#include <cyg/hal/hal_cache.h> +#include CYGHWR_MEMORY_LAYOUT_H +#include <cyg/hal/hal_tables.h> + +// Define table boundaries +extern struct cmd __RedBoot_CMD_TAB__[], __RedBoot_CMD_TAB_END__; + +// +// Scan through an input line and break it into "arguments". These +// are space delimited strings. Return a structure which points to +// the strings, similar to a Unix program. +// Note: original input is destroyed by replacing the delimiters with +// null ('\0') characters for ease of use. +// +struct cmd * +parse(char *line, int *argc, char **argv) +{ + char *cp = line; + int indx = 0; + + while (*cp) { + // Skip leading spaces + while (*cp && *cp == ' ') cp++; + if (!*cp) { + break; // Line ended with a string of spaces + } + argv[indx++] = cp; + while (*cp) { + if (*cp == ' ') { + *cp++ = '\0'; + break; + } else if (*cp == '"') { + // Swallow quote, scan till following one + if (argv[indx-1] == cp) { + argv[indx-1] = ++cp; + } + while (*cp && *cp != '"') cp++; + if (!*cp) { + printf("Unbalanced string!\n"); + } else { + *cp++ = '\0'; + break; + } + } else { + cp++; + } + } + } + *argc = indx; + return cmd_search(__RedBoot_CMD_TAB__, &__RedBoot_CMD_TAB_END__, argv[0]); +} + +// +// Search through a list of commands +// +struct cmd * +cmd_search(struct cmd *tab, struct cmd *tabend, char *arg) +{ + int cmd_len; + struct cmd *cmd, *cmd2; + // Search command table + cmd_len = strlen(arg); + cmd = tab; + while (cmd != tabend) { + if (strncmpci(arg, cmd->str, cmd_len) == 0) { + if (strlen(cmd->str) > cmd_len) { + // Check for ambiguous commands here + // Note: If there are commands which are not length-unique + // then this check will be invalid. E.g. "du" and "dump" + bool first = true; + cmd2 = tab; + while (cmd2 != tabend) { + if ((cmd != cmd2) && + (strncmpci(arg, cmd2->str, cmd_len) == 0)) { + if (first) { + printf("Ambiguous command '%s', choices are: %s", arg, cmd->str); + first = false; + } + printf(" %s", cmd2->str); + } + cmd2++; + } + if (!first) { + // At least one ambiguity found - fail the lookup + printf("\n"); + return (struct cmd *)0; + } + } + return cmd; + } + cmd++; + } + return (struct cmd *)0; +} + +void +cmd_usage(struct cmd *tab, struct cmd *tabend, char *prefix) +{ + struct cmd *cmd; + printf("Usage:\n"); for (cmd = tab; cmd != tabend; cmd++) { + printf(" %s%s %s\n", prefix, cmd->str, cmd->usage); + } +} + +// Option processing + +// Initialize option table entry (required because these entries +// may have dynamic contents, thus cannot be statically initialized) +// +void +init_opts(struct option_info *opts, char flag, bool takes_arg, + int arg_type, void **arg, bool *arg_set, char *name) +{ + opts->flag = flag; + opts->takes_arg = takes_arg; + opts->arg_type = arg_type, + opts->arg = arg; + opts->arg_set = arg_set; + opts->name = name; +} + +// +// Scan command line arguments (argc/argv), processing options, etc. +// +bool +scan_opts(int argc, char *argv[], int first, + struct option_info *opts, int num_opts, + void **def_arg, int def_arg_type, char *def_descr) +{ + bool ret = true; + bool flag_ok; + bool def_arg_set = false; + int i, j; + char c, *s; + struct option_info *opt; + + if (def_arg && (def_arg_type == OPTION_ARG_TYPE_STR)) { + *def_arg = (char *)0; + } + opt = opts; + for (j = 0; j < num_opts; j++, opt++) { + if (opt->arg_set) { + *opt->arg_set = false; + } + if (!opt->takes_arg) { + switch (opt->arg_type) { + case OPTION_ARG_TYPE_NUM: + *(int *)opt->arg = 0; + break; + case OPTION_ARG_TYPE_FLG: + *(bool *)opt->arg = false; + break; + } + } + } + for (i = first; i < argc; i++) { + if (argv[i][0] == '-') { + c = argv[i][1]; + flag_ok = false; + opt = opts; + for (j = 0; j < num_opts; j++, opt++) { + if (c == opt->flag) { + if (opt->arg_set && *opt->arg_set) { + printf("** Error: %s already specified\n", opt->name); + ret = false; + } + if (opt->takes_arg) { + if (argv[i][2] == '=') { + s = &argv[i][3]; + } else { + s = argv[i+1]; + i++; + } + switch (opt->arg_type) { + case OPTION_ARG_TYPE_NUM: + if (!parse_num(s, (unsigned long *)opt->arg, 0, 0)) { + printf("** Error: invalid number '%s' for %s\n", s, opt->name); + ret = false; + } + break; + case OPTION_ARG_TYPE_STR: + *opt->arg = s; + break; + } + *opt->arg_set = true; + } else { + switch (opt->arg_type) { + case OPTION_ARG_TYPE_NUM: + *(int *)opt->arg = *(int *)opt->arg + 1; + break; + case OPTION_ARG_TYPE_FLG: + *(bool *)opt->arg = true; + break; + } + } + flag_ok = true; + break; + } + } + if (!flag_ok) { + printf("** Error: invalid flag '%c'\n", c); + ret = false; + } + } else { + if (def_arg) { + if (def_arg_set) { + printf("** Error: %s already specified\n", def_descr); + ret = false; + } + switch (def_arg_type) { + case OPTION_ARG_TYPE_NUM: + if (!parse_num(argv[i], (unsigned long *)def_arg, 0, 0)) { + printf("** Error: invalid number '%s' for %s\n", argv[i], def_descr); + ret = false; + } + break; + case OPTION_ARG_TYPE_STR: + *def_arg = argv[i]; + break; + } + def_arg_set = true; + } else { + printf("** Error: no default/non-flag arguments supported\n"); + ret = false; + } + } + } + return ret; +} + +// +// Parse (scan) a number +// +bool +parse_num(char *s, unsigned long *val, char **es, char *delim) +{ + bool first = true; + int radix = 10; + char c; + unsigned long result = 0; + int digit; + + while (*s == ' ') s++; + while (*s) { + if (first && (s[0] == '0') && (tolower(s[1]) == 'x')) { + radix = 16; + s += 2; + } + first = false; + c = *s++; + if (_is_hex(c) && ((digit = _from_hex(c)) < radix)) { + // Valid digit + result = (result * radix) + digit; + } else { + if (delim != (char *)0) { + // See if this character is one of the delimiters + char *dp = delim; + while (*dp && (c != *dp)) dp++; + if (*dp) break; // Found a good delimiter + } + return false; // Malformatted number + } + } + *val = result; + if (es != (char **)0) { + *es = s; + } + return true; +} + +bool +parse_bool(char *s, bool *val) +{ + while (*s == ' ') s++; + if ((*s == 't') || (*s == 'T')) { + *val = true; + } else + if ((*s == 'f') || (*s == 'F')) { + *val = false; + } else { + return false; + } + return true; +} +
--- a/packages/services/memalloc/common/current/ChangeLog +++ b/packages/services/memalloc/common/current/ChangeLog @@ -1,3 +1,14 @@ +2000-10-20 Jonathan Larmour <jlarmour@redhat.com> + + * tests/dlmalloc1.cxx: + * tests/dlmalloc2.cxx: + * tests/malloc4.cxx: + * tests/memfix1.cxx: + * tests/memfix2.cxx: + * tests/memvar1.cxx: + * tests/memvar2.cxx: + Make sure default priority constructors have been invoked. + 2000-09-14 Jesper Skov <jskov@redhat.com> * tests/realloc.c (main): fix warning.
--- a/packages/services/memalloc/common/current/tests/dlmalloc1.cxx +++ b/packages/services/memalloc/common/current/tests/dlmalloc1.cxx @@ -205,6 +205,9 @@ void dlmalloc1_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif dlmalloc1_main(); } // EOF dlmalloc1.cxx
--- a/packages/services/memalloc/common/current/tests/dlmalloc2.cxx +++ b/packages/services/memalloc/common/current/tests/dlmalloc2.cxx @@ -142,6 +142,9 @@ void dlmalloc2_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif dlmalloc2_main(); } // EOF dlmalloc2.cxx
--- a/packages/services/memalloc/common/current/tests/malloc4.cxx +++ b/packages/services/memalloc/common/current/tests/malloc4.cxx @@ -355,6 +355,9 @@ thrfree( CYG_ADDRWORD data ) externC void cyg_start() { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif CYG_TEST_INIT(); CYG_TEST_INFO("Starting malloc4 test");
--- a/packages/services/memalloc/common/current/tests/memfix1.cxx +++ b/packages/services/memalloc/common/current/tests/memfix1.cxx @@ -196,6 +196,9 @@ void memfix1_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif memfix1_main(); } // EOF memfix1.cxx
--- a/packages/services/memalloc/common/current/tests/memfix2.cxx +++ b/packages/services/memalloc/common/current/tests/memfix2.cxx @@ -134,6 +134,9 @@ void memfix2_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif memfix2_main(); } // EOF memfix2.cxx
--- a/packages/services/memalloc/common/current/tests/memvar1.cxx +++ b/packages/services/memalloc/common/current/tests/memvar1.cxx @@ -204,6 +204,9 @@ void memvar1_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif memvar1_main(); } // EOF memvar1.cxx
--- a/packages/services/memalloc/common/current/tests/memvar2.cxx +++ b/packages/services/memalloc/common/current/tests/memvar2.cxx @@ -142,6 +142,9 @@ void memvar2_main( void ) externC void cyg_start( void ) { +#ifdef CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG + cyg_hal_invoke_constructors(); +#endif memvar2_main(); } // EOF memvar2.cxx
