Mercurial > ecos
changeset 557:0048088f2770
Adding LCD/CRT support to CSB281
| author | gthomas |
|---|---|
| date | Sat, 01 Feb 2003 18:31:15 +0000 |
| parents | f2b5df359050 |
| children | 6df74e828d35 |
| files | packages/hal/powerpc/csb281/current/ChangeLog packages/hal/powerpc/csb281/current/cdl/hal_powerpc_csb281.cdl packages/hal/powerpc/csb281/current/include/lcd_support.h packages/hal/powerpc/csb281/current/src/banner.xpm packages/hal/powerpc/csb281/current/src/font.h packages/hal/powerpc/csb281/current/src/hal_aux.c packages/hal/powerpc/csb281/current/src/lcd_support.c packages/hal/powerpc/csb281/current/src/sed1356_16bit.h packages/hal/powerpc/csb281/current/src/sed135x_16bit.c |
| diffstat | 9 files changed, 3477 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/packages/hal/powerpc/csb281/current/ChangeLog +++ b/packages/hal/powerpc/csb281/current/ChangeLog @@ -1,3 +1,17 @@ +2003-02-01 Gary Thomas <gary@mlbassoc.com> + + * src/sed135x_16bit.c: + * src/sed1356_16bit.h: + * src/lcd_support.c + * src/font.h: + * src/banner.xpm: + * include/lcd_support.h: New file(s). + + * src/hal_aux.c: + * cdl/hal_powerpc_csb281.cdl: Add support for LCD/CRT+PS/2 keyboard + as console device. Hardware support contributed by Mike Kelly of + Cogent. + 2003-01-22 Jonathan Larmour <jifl@eCosCentric.com> * include/pkgconf/mlt_powerpc_csb281_ram.h (CYGMEM_SECTION_heap1_SIZE):
--- a/packages/hal/powerpc/csb281/current/cdl/hal_powerpc_csb281.cdl +++ b/packages/hal/powerpc/csb281/current/cdl/hal_powerpc_csb281.cdl @@ -116,10 +116,41 @@ cdl_package CYGPKG_HAL_POWERPC_CSB281 { baud rate correctly, amongst other things." } + cdl_component CYGSEM_CSB281_LCD_SUPPORT { + display "Support LCD" + flavor bool + default_value 1 + compile lcd_support.c sed135x_16bit.c + description " + Enabling this option will enable the use the LCD/CRT as a + simple framebuffer, suitable for use with a windowing + package." + + cdl_component CYGSEM_CSB281_LCD_COMM { + display "Support LCD/keyboard for comminication channel" + active_if CYGPKG_REDBOOT + flavor bool + default_value 1 + description " + Enabling this option will use the LCD/CRT and keyboard for a + communications channel, suitable for RedBoot, etc." + + cdl_option CYGOPT_CSB281_LCD_COMM_LOGO { + display "Logo location" + flavor booldata + legal_values { "TOP" "BOTTOM" } + default_value { "TOP" } + description " + Use this option to control where the logo is placed + on the LCD/CRT screen." + } + } + } + cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_COMM_CHANNELS { display "Number of communication channels on the board" flavor data - calculated 1 + calculated 2+CYGSEM_CSB281_LCD_COMM } cdl_option CYGNUM_HAL_VIRTUAL_VECTOR_DEBUG_CHANNEL { @@ -297,14 +328,14 @@ cdl_package CYGPKG_HAL_POWERPC_CSB281 { the set of global flags if present." } -## cdl_option CYGPKG_HAL_POWERPC_CSB281_TESTS { -## display "CSB281 tests" -## flavor data -## no_define -## calculated { "tests/csb281time" } -## description " -## This option specifies the set of tests for the CSB281 HAL." -## } + cdl_option CYGPKG_HAL_POWERPC_CSB281_TESTS { + display "CSB281 tests" + flavor data + no_define + default_value { "" } + description " + This option specifies the set of tests for the CSB281 HAL." + } } cdl_component CYGHWR_MEMORY_LAYOUT {
new file mode 100644 --- /dev/null +++ b/packages/hal/powerpc/csb281/current/include/lcd_support.h @@ -0,0 +1,83 @@ +#ifndef _LCD_SUPPORT_H_ +#define _LCD_SUPPORT_H_ +//========================================================================== +// +// lcd_support.h +// +// LCD support routines +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// Copyright (C) 2003 Gary Thomas +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Date: 2001-09-29 +// Description: Simple LCD support +//####DESCRIPTIONEND#### + +struct lcd_info { + short height, width; // Pixels + short bpp; // Depth (bits/pixel) + short type; + short rlen; // Length of one raster line in bytes + short access_size; // Data path width to frame buffer + short stride; // Offset (in bytes) between elements + void *fb; // Frame buffer + void (*off)(void); // Turn screen off + void (*on)(void); // Turn screen on +}; + +// Frame buffer types - used by MicroWindows +#define FB_TRUE_RGB565 0x01 +#define FB_TRUE_RGB555 0x02 + +// Exported functions +void lcd_init(int depth); +void lcd_clear(void); +int lcd_getinfo(struct lcd_info *info); +void lcd_on(bool enable); +#ifdef CYGSEM_CSB281_LCD_COMM +void lcd_screen_clear(void); +void lcd_moveto(int X, int Y); +void lcd_putc(cyg_int8 c); +int _lcd_printf(char const *fmt, ...); +void lcd_setbg(int red, int green, int blue); +void lcd_setfg(int red, int green, int blue); +void lcd_comm_init(void); +#endif + +#endif // _LCD_SUPPORT_H_
new file mode 100644 --- /dev/null +++ b/packages/hal/powerpc/csb281/current/src/banner.xpm @@ -0,0 +1,488 @@ +// +// LCD/CRT screen banner/logo +// +// Copyright (C) 2003 Gary Thomas +// + +#if 0 // 256 colors +/* XPM */ +static char * banner_xpm[] = { +"640 64 256 2", +" c None", +". c #020202", +"+ c #0A3626", +"@ c #045A84", +"# c #48788D", +"$ c #6795A0", +"% c #86B1C5", +"& c #9EC4D2", +"* c #BCD5DB", +"= c #156082", +"- c #CDE0E1", +"; c #082D1F", +"> c #3C393F", +", c #EAEAED", +"' c #042619", +") c #475D5A", +"! c #042216", +"~ c #363736", +"{ c #6D7A78", +"] c #EFEEF0", +"^ c #031E13", +"/ c #0B4355", +"( c #859695", +"_ c #5B5C5B", +": c #021A12", +"< c #F3F2F4", +"[ c #3D5144", +"} c #0F2F25", +"| c #2E365D", +"1 c #A2AFB1", +"2 c #8E808E", +"3 c #04160D", +"4 c #EDFDFD", +"5 c #03120D", +"6 c #A4949A", +"7 c #124562", +"8 c #73636D", +"9 c #163129", +"0 c #6D8C98", +"a c #BCC5C4", +"b c #53686D", +"c c #34565B", +"d c #484A49", +"e c #B6AFB2", +"f c #020E0A", +"g c #26403C", +"h c #20607B", +"i c #33525A", +"j c #817887", +"k c #225162", +"l c #FAFAFA", +"m c #0A261D", +"n c #0B4E6A", +"o c #3C3852", +"p c #D0D4D7", +"q c #616261", +"r c #292B42", +"s c #959497", +"t c #0D081D", +"u c #FAFEFD", +"v c #485350", +"w c #496868", +"x c #D6C2C0", +"y c #577882", +"z c #0D221A", +"A c #46465F", +"B c #0B0A0C", +"C c #93A4A9", +"D c #E0E0E0", +"E c #344E50", +"F c #71868D", +"G c #B5B9BA", +"H c #19392E", +"I c #101E17", +"J c #5C6E71", +"K c #628C9B", +"L c #327088", +"M c #789497", +"N c #14261F", +"O c #1E5365", +"P c #061A14", +"Q c #A8BBBF", +"R c #E5D8D5", +"S c #286075", +"T c #BCCCCD", +"U c #04527E", +"V c #413F52", +"W c #0F060F", +"X c #353854", +"Y c #2F2A3F", +"Z c #757C93", +"` c #154153", +" . c #4B506A", +".. c #A79AA2", +"+. c #608696", +"@. c #EBE1DB", +"#. c #848689", +"$. c #848C97", +"%. c #8D8A90", +"&. c #222222", +"*. c #133841", +"=. c #41403F", +"-. c #09668F", +";. c #6A6C6D", +">. c #1E312A", +",. c #090513", +"'. c #272626", +"). c #90ADB7", +"!. c #D9D5D3", +"~. c #C8BCBD", +"{. c #637977", +"]. c #336A81", +"^. c #294956", +"/. c #86A4AE", +"(. c #8E9D9E", +"_. c #A38D98", +":. c #1A160E", +"<. c #406A7A", +"[. c #1C1A12", +"}. c #718280", +"|. c #232237", +"1. c #CBCCCE", +"2. c #10414A", +"3. c #070607", +"4. c #063244", +"5. c #054974", +"6. c #7196A8", +"7. c #046289", +"8. c #334A49", +"9. c #27263C", +"0. c #1C5259", +"a. c #78787B", +"b. c #1A5462", +"c. c #585C71", +"d. c #80809A", +"e. c #1E1E1E", +"f. c #4A4A62", +"g. c #355C67", +"h. c #141216", +"i. c #B7A4A4", +"j. c #313055", +"k. c #9BBCCB", +"l. c #5D525A", +"m. c #666666", +"n. c #7A8B86", +"o. c #6C6D84", +"p. c #A6B6B7", +"q. c #3D3F5F", +"r. c #A69EA6", +"s. c #637C89", +"t. c #1A1A1A", +"u. c #487283", +"v. c #110E25", +"w. c #DAD9E0", +"x. c #E7E5E9", +"y. c #141229", +"z. c #174A56", +"A. c #F7F6F7", +"B. c #7BA3B7", +"C. c #828086", +"D. c #294844", +"E. c #9A8C97", +"F. c #C6C4C5", +"G. c #FEFEF6", +"H. c #2A525D", +"I. c #366676", +"J. c #0E5D80", +"K. c #44606A", +"L. c #2E2E44", +"M. c #292F57", +"N. c #2C1E16", +"O. c #06434A", +"P. c #064E72", +"Q. c #737172", +"R. c #180E13", +"S. c #908DA1", +"T. c #171617", +"U. c #135679", +"V. c #2F221A", +"W. c #547077", +"X. c #BDBBBD", +"Y. c #3C555A", +"Z. c #06303B", +"`. c #324640", +" + c #4B6B79", +".+ c #9BB6BE", +"++ c #334A36", +"@+ c #55536B", +"#+ c #666478", +"$+ c #1D1A2D", +"%+ c #869BA5", +"&+ c #9A9C9F", +"*+ c #201E32", +"=+ c #C4B0AF", +"-+ c #0A0205", +";+ c #2D2C2C", +">+ c #B2A2A3", +",+ c #D5CCCC", +"'+ c #045682", +")+ c #0A362A", +"!+ c #9AAEB0", +"~+ c #1A1629", +"{+ c #778C97", +"]+ c #1A4048", +"^+ c #ACCCDE", +"/+ c #3C3A5D", +"(+ c #343147", +"_+ c #464646", +":+ c #F3EAE3", +"<+ c #567D92", +"[+ c #074A81", +"}+ c #83869E", +"|+ c #045E87", +"1+ c #0C4C57", +"2+ c #346076", +"3+ c #677271", +"4+ c #777082", +"5+ c #4F4E54", +"6+ c #504655", +"7+ c #44415D", +"8+ c #CEC5C6", +"9+ c #7B98A8", +"0+ c #968B93", +"a+ c #04020E", +"b+ c #323232", +"c+ c #615D6F", +"d+ c #9495A8", +"e+ c #FEFEFE", +"f+ c #A7A4A8", +"g+ c #6C7B88", +"h+ c #4B424F", +"i+ c #1E2247", +"j+ c #272D52", +"k+ c #5A4A53", +"l+ c #073A47", +"m+ c #3A2616", +"n+ c #E0E6E7", +"o+ c #6C6B7E", +"p+ c #FEFAFC", +"q+ c #1E1219", +"r+ c #B1C5C8", +"s+ c #ABADAD", +"t+ c #044E7C", +"u+ c #545455", +"v+ c #9E959E", +"w+ c #060205", +"x+ c #092F36", +"y+ c #CDCDDE", +"z+ c #78778A", +"A+ c #63828C", +"B+ c #204A56", +"C+ c #0F0E11", +"D+ c #E1E0E9", +"E+ c #9EA5A5", +"F+ c #9C9DAF", +"G+ c #F5FDFD", +"u u e+G.G.G.G.G.G.G.G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.G.G.G.G.G.G.G.e+G.e+G.e+G.e+G.e+G.e+G.e+G.e+G.G.G.G.G.G.G.G.G.e+e+e+e+e+e+e+e+u G+G+u G.e+u u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+D+D+D+D+D+D+D+D+D+D+n+D+n+D+n+D+D+D+D+D D+D+D+D+n+D+n+x.x.x.n+x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.x.D+x.D+D+D+D+D+D+D+D+D+D+D+w.w.w.w.w.w.w.w.w.w.!.p w.p p y+y+y+y+y+1.1.1.T F.F.a ", +"e+e+G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+u u u u u u u u u u u u u u u G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+u u u u u u u u u u u u u u u u e+G.G.G.e+e+u u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+x.n+n+x.x.x.x., , , , , x., x., , , , x.x., , , x., , , , , x.x.x., , , , , , , , , , , , , , , , , , , , , , x., x., , , x.x.x.x.x.x.D+D+x.x.D+D+D+D+D+D+w.w.w.w.w.w.p p !.p y+y+y+y+y+y+y+y+F.", +"e+p+e+G.e+u u u u u e+e+e+e+e+e+e+e+e+e+u u u u u u u e+e+e+e+e+e+e+u u u u u u u u G.G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+G+u u u u u u u u e+e+e+e+e+e+e+e+G.G.G.G.G.e+G.G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+x.x., , , , x.x., , ] ] , ] , , , , , , , , , ] , , , ] , ] ] ] ] ] ] , ] ] ] ] , ] ] ] ] ] ] ] , , ] ] ] , ] ] ] ] , , ] , , , x.x.x.x.x.x.x.x.D+D+D+D+n+D+D+w.w.w.w.w.w.w.p w.p y+y+y+y+y+y+y+", +"u e+G.e+u e+e+e+e+e+u e+G.e+G.e+G.e+G.G.e+e+e+e+e+e+u e+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+G.G.G.G.e+e+e+G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+, x.x., , , ] ] , , , , ] , ] , , ] ] ] ] ] ] ] ] ] < ] < ] < < < < ] < ] < ] ] < ] ] < < < < ] ] ] ] ] ] < ] ] ] ] ] ] ] , , , , , , x.x.x.x.x.x.D+D+D+D+D+D+D+D+w.w.w.w.w.w.y+!.p !.p y+y+p y+", +"u e+u l G+G+G+G+G+G+G+u u u u u u u u G+G+G+G+G+G+G+G+G+G+G+G+G+G+u u u u u u u G+G+u u l l l l l l l l l l l l l l l u G+G+G+u u u G+G+G+G+G+G+u u G+G+G+u G+4 4 G+p+G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+, , , , ] , , ] ] < < ] ] ] < < ] ] ] ] < < < < < < < < A.A.< < < A.< < < < < < < A.< < < < < A.< < < < < < ] < ] < < ] ] ] ] ] ] , ] , x.x.x.x.x.x.n+x.n+D+D+D+D+D+D+w.w.w.w.w.!.!.!.w.y+p y+p ", +"A.G+A.!+F F F F F F F F F F F F 0 {+0 0 0 0 0 6.0 M 0 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 6.M 0 $ K C G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+, ] , ] ] ] ] ] < ] < < < < < < ] < ] < A.< < A.A.< A.A.< A.A.< A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.< < A.< A.< < < < < ] < ] ] ] ] ] ] ] x., x.x.x.x.x.x.D+x.D+D+D+w.w.w.w.w.!.p w.w.!.p p ", +"l 4 4 F / / / / 7 / 7 / 7 / / 7 7 7 7 7 5.5.7 5./ 5.7 5.5.5.5.5.5.5.5.5.5.5.5.P.P.5.5.n P.n P.n P.n P.n P.n P.n P.P.P.P.P.P.5.5.5.n 5.5.5.5.5.5.5.5.5.P.5.7 [+n n +A.u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+, ] ] ] < < < ] A.< A.A.A.< < A.A.G+, < A.G+A.A.l A.A.G+A.G+l A.l l l p+p+l l l A.A.A.l A.l A.l A.A.A.A.A.A.A.A.A.A.A.A.< < < < A.] ] ] ] ] ] ] , , x.x.x.x.x.x.x.D+x.D+D+D+w.w.w.w.w.w.w.w.!.w.", +"u G+< K / 5.[+/ [+/ 5.5.[+5.5.5.5.[+[+5.5.5.[+[+[+[+5.[+5.5.5.[+[+[+[+[+[+[+t+[+[+[+[+[+t+t+t+t+t+t+t+t+t+t+t+t+[+t+[+[+[+[+[+[+[+[+t+n P.P.[+[+[+[+t+t+[+[+[+t+P.# 4 u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+< ] ] < < < < A.< A.A.A.A.l l l l A.A.A.l A.A.l l u l l l l l l l l p+l l p+l l l l l l l l l p+A.A.p+p+p+A.p+A.A.A.A.A.l A.< A.< A.< < ] ] x.x.x.x., , , , x.x.x.x.D+x.@.D+D+D+D+w.w.w.w.w.w.!.", +"u u 4 K 5.5.5.5.5.5.5.5./ [+5.5.5.5.5.5.5.5.[+t+t+t+5.[+[+5.t+P.P.P.t+t+t+[+[+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+t+U t+U t+t+t+U U U t+t+t+t+t+t+t+t+t+t+t+t+[+n t+U P.# G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+< < < < A.< < A.A.A.l G+A.l l l l l G+l l u u l l u l u l l u l u u p+e+e+e+u u u u l u l e+p+e+p+p+p+p+p+p+p+l l l l A.A.A.A.A.< A.< < y+..2 2 ......>+e ~.x ,+D+D+x.D+@.@.D+R x.D+w.w.w.w.w.w.", +"p+u G+A+5.5.5.5.5.5.[+5.[+5.5.[+5.5.[+5.5.t+P.t+t+P.U t+t+U t+t+t+t+t+t+P.U U t+U U U U U U U U U U U U U U U t+U t+U U U U U U U U U t+t+U U U U U U U U.n U U 5.u.4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+< < < A.< A.A.A.l l l l l l l l u u e+l u l l u e+e+e+p+e+u p+e+p+p+u e+u e+p+p+p+e+e+e+e+l u p+e+p+l l l l l p+l l p+p+p+p+A.A.A.A.A., 2 d.S.%.E.6 _.E._._.2 2 2 2 ..X.y+w.w.w.R D+D+w.p w.w.w.", +"G.u G+0 5.5.5.5.5.5.5.5.[+[+t+5.5.5.5.t+5.t+P.t+U t+U P.t+t+t+U U U U U t+t+U U U U U U U U U U U U t+U U U '+U '+U U U U U U U U U '+U U U U U U U U U U t+U '+n u.G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+< < < A.A.A.p+l l l l e+u e+u p+e+p+e+p+e+e+p+l p+e+e+u e+u e+e+e+e+e+e+l u u e+e+e+p+u e+e+e+p+p+p+p+p+p+e+p+p+p+l l l p+A.A.A.A.< ,+S.j j 4+o.#+o+j E.d.2 2 j E._._._._...i.=+i..._.z+#+S.e G ", +"l u G++.5.[+[+[+5.[+5.[+5.t+5.t+t+t+t+t+U t+t+t+t+U t+U U U U U U U U U '+'+U U U U U U U U U U U U '+U '+'+U '+U '+'+'+'+'+'+'+'+'+U '+'+'+'+'+U '+U '+U '+U '+n u.4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+A.A.A.A.A.l l l l e+e+l p+u e+e+e+e+e+e+e+e+u e+e+e+u e+e+e+l p+u e+u p+e+e+e+e+p+e+e+e+e+e+e+e+e+e+e+e+e+p+u l p+p+A.A.A.A.A.A.< f+z+z+4+z+4+#+4+o+8 2 2 j j j >+_.2 2 2 _._._.2 j j _.2 4+c+7+", +"G.u G+0 [+[+5.[+[+[+[+t+[+t+t+t+t+t+t+t+U U U U t+U U U U U U U U U '+U U '+'+'+'+'+'+'+'+'+'+'+'+U '+'+'+@ '+@ '+'+'+'+'+'+'+'+'+@ '+U U U U '+U '+'+@ '+'+U '+U # G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+A.A.p+p+p+p+p+u l G.e+e+G.e+e+G.e+G.e+G.e+G.e+e+G.l w.p w.!.y+x.p !., A.A.p+e+e+e+e+e+e+G.e+e+G.e+e+e+G.e+G.e+u p+G.p+p+p+p+p+:+e 0+4+4+j z+#+j o.#+c+4+4+8 c+4+4+c+6+8 j =+~.=+>+6 _.2 c+l.o R.", +"G.u 4 $ [+[+[+[+[+[+t+t+U t+t+t+t+U U U U '+'+U '+'+'+'+'+'+'+'+'+'+'+'+@ '+@ @ @ @ @ '+'+'+'+'+'+@ '+@ @ @ @ @ @ @ @ @ @ @ @ @ @ '+@ @ @ @ @ '+@ '+'+@ @ '+'+@ U.# 4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+A.A.A.p+l l l p+e+e+e+G.e+e+e+e+e+e+G.e+e+e+e+G.p+w.F+d+f+f+..F+S.d+d+F+F+1.n+D A.u e+e+e+e+G.e+e+e+G.e+e+e+e+G.G.p+G.p+l l , f+E.d.j 2 E.j #+2 4+c+@+@+f.7+f.6+f.7+/+f.c+6 j _.E.2 _.4+q+R.-+w+", +"G.G.G+0 t+U U U U t+t+t+U U U U U U U U U U '+'+U '+'+'+'+'+'+'+'+'+@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ '+'+'+@ '+@ @ @ '+U.U.@ '+U.# 4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+p+p+p+p+e+e+e+e+e+e+e+e+G.G.e+G.e+e+e+G.e+u u G.e+1.v+F+f+e f+d+S.}+$.S.S.d+&+F+e < e+e+G.e+e+G.e+e+e+G.e+e+e+e+G.p+A.] x.X.d.S.2 j z+j j d._.4+8 4+8 6+7+q.7+/+/+A 7+f.c+8 #+c+4+_.6 k+w+w+w+. ", +"G.u 4 $ U t+t+t+t+U U U U U U U U U '+'+'+'+'+'+@ @ @ @ |+@ @ @ @ @ '+@ |+@ @ |+|+@ |+@ @ @ @ @ @ |+@ |+@ |+@ |+|+|+|+@ @ @ @ @ |+@ @ @ @ @ @ |+@ @ '+J.U.J.= J.'+<+4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+A.p+l e+e+e+e+e+e+G.e+e+e+e+e+e+e+e+e+e+e+G.e+e+@.8+F+i.X.>+F+S.}+d.d.d.}+$.d.S.}+8+G.G.e+e+e+e+G.e+e+e+e+e+p+l G+l F.S.Z o.o+S.E.2 d.o.4+2 S.2 4+4+4+ .A /+7+q./+/+/+7+#+k+@+f.k+V :.B . . . . ", +"G.G.G+0 U U U U U U U '+'+'+'+U U '+U '+'+@ |+@ |+@ @ @ 7.7.|+|+@ @ @ @ |+|+|+|+|+'+= J.-.J.|+J.@ @ @ J.'+7.@ 7.|+|+7.|+|+|+7.|+|+@ @ |+@ |+|+|+|+-.h ].# $ % K U.<+4 G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+A.p+p+p+e+e+e+e+e+e+e+e+e+G.e+G.e+G.e+G.e+e+u G.,+x s+~.8+=+f+S.}+d.Z d.d.}+d.d.}+F+l u G.G.G.e+e+e+e+G.G.e+e+< f+F+v+}+#+o.4+>+E.E.z+c+4+j j 8 o.@+c+@+7+/+/+| /+/+/+7+@+ .@+7+Y ~+. . . . . . ", +"G.u G+6.U '+'+'+'+'+'+'+@ @ '+@ @ '+@ '+'+@ @ |+7.@ J.U.U.U.J.@ |+7.|+|+|+7.7.7.|+= = L ].S h h S h h L L U.J.@ |+7.7.|+|+7.|+7.|+|+|+|+7.7.@ J.L % % % & ^+^+& <+y 4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.e+e+e+e+e+e+A.!.=+e x ,+x e F+S.d.d.d.d.}+d.d.Z }+p !.p D+w.D+A.G.G.G.G.G.] !.i.>+..d.o+4+E...2 2 c+#+d.4+j 8 c+#+c+f.A q./+/+/+A 7+A f.6+/+q+,.. . . . . . . ", +"G.u 4 6.U '+'+'+'+'+'+'+@ |+@ @ @ @ |+|+|+|+|+@ J.b.L $ 6.u.O h J.|+7.7.|+|+7.|+J.h $ * ^+% % & & % % % k.K S h = J.|+7.|+7.7.7.|+@ |+7.7.|+h L <.B.k.).).r+.+9+9+( G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+p+G.G.G.G.G.G.G.e+e+e+e+e+G.e+e+e+G.e+G.e+e+e+:+x ~.x ,+@.x =+F+}+d.Z Z Z d.d.Z Z d.S.S.S.F+d+d+F+y+l G.l !.f+E.0+r._.4+4+2 2 j _.2 #+j 4+j j 8 c+@+A /+/+| /+/+/+q.7+/+Y ~+t . . . . . . . . . ", +"G.u G+6.'+@ @ @ @ @ @ |+|+|+|+|+|+|+|+|+7.|+|+J.U.<+k.^+r+r+B.+.L I.= = = = J.h h L $ * T - Q p.^+* ^+k.% % B.+.$ L h J.7.7.7.7.7.7.|+J.J.= = 2+<.W.C a G !+p.p.).Q l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.p+e+e+e+e+e+e+G.e+e+e+e+e+e+e+e+e+G.e+G.G.p+R x x R x R ~.>+>+}+d.z+Z Z d.Z d.Z j d.d.}+$.d+S.S.S.F.F.}+c.@+c.f.c+4+S.}+S.2 4+4+8 8 E.8 #+8 #+#+#+/+/+/+q./+j.j.i+$+v.B -+. . . . . . . . . . ", +"G.u 4 6.'+@ @ |+|+|+@ @ |+|+|+|+|+@ |+|+|+|+J.S $ * * * T ^+^+^+^+).$ <+# ].# # <.<+Q 1 G y+1 C E+Q ^+k.% ).6.B.% B.L h ].-.= J.h = = b.1+l+/ 7 <.u.y 1 y+Q $..+Q T G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+l G.G.G.G.e+e+e+e+e+e+e+e+G.e+G.e+e+G.G.G.e+A.R x x R @.@.x i.v+S.S.d.z+z+Z z+Z Z z+z+4+o.o+b #+#+#+#+@+f.7+q.A .7+@+@+c+8 4+j j 4+4+E.4+c+4+4+j @+/+j+i+i+i+q+t W W a+3.. . . . . . . . . . . ", +"G.l G+6.@ |+|+@ |+|+|+|+|+7.7.|+|+|+J.J.= U.h u.K Q - r+^+1 M M )./.6.B.B.6.+. +K.F+F+f+p.a y+1 C r+1 ).9+9+s.0 % u.# L L U.b.U.L h / l+4.l+` S g.6.<+6..+r+/.F k.r+l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.G.G.e+e+e+G.e+G.e+G.e+G.e+G.e+e+G.G.u !.@.@.R x R @.@.R ,+e }+F+f+d.z+o.4+#+c+c+ .f.f.f.A 7+q./+/+7+@+7+/+/+/+7+7+7+7+/+7+/+/+/+4+4+4+c+@+7+6+/+$+v.t t t t W ,.-+w+. . . . . . . . . . . . . ", +"G.u 4 6.|+|+|+|+|+|+7.7.|+|+7.7.J.J.J.h ].+.+.$ 6.}.Q n+* T C 9+J A+9+6.+.+.2+<. +$.$.$.C T T r+%+k.r+).s.W.W.K.9+K.I.# 2+/ l+l+O.l+4.4.l+n <.# g.g.g.W.9+C ).W.B.1 G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+p+G.G.G.G.e+e+e+e+e+e+e+e+e+e+e+e+e+x.1.f+f+,+x R x x R x i.E.S.v+..z+#+@+f.A 7+/+q.q./+q.q./+o /+o j.j.j.j.j.7+7+f.k+7+j./+/+/+/+/+8 8 @+/+*+$+q+v.t t W ,.,.,.a+w+w+. . . . . . . . . . . . . ", +"p+G.G+6.@ |+7.|+7.7.|+7.7.-.|+J.J.I.L K % % 9+0 M Z b G n+- X.d+9+{+6.u.k k K. +s.s.0 $.z+%+p..+9+.+^+9+^.Y.g+y {+# 2+<.2+/ l+4.4.4.2.l+/ h h O k g.]+` W.9+ +^.K.9+l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+D !.p l e+e+G.e+G.e+G.e+e+e+e+G.l w.e f+f+~.,+x x ~.e 6 S.d+r.2 z+c+c.f./+/+/+/+/+o (+X /+/+q.X j.j.j.j.j.Y Y j.7+8 E.c+7+/+7+/+/+/+j.j.Y $+R.R.t W ,.,.-+-+w+w+w+w+. . . . . . . . . . . . . . ", +"A.G.4 6.|+7.7.7.-.7.7.-.7.-.-.= L B.k.).B.).9+Z F W.K.{+- w.- y+Q ).+.2+^. .u.9+ +s.y J J J d.{+F %+% # H.u.9+9+B.<+ +u.2+k 2.B+)+g.2.Z.l+/ h S ` g.c 2+<.F W.^.y F G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+c.S.G w.u u p+G.G.u G.G.l l G.A.p G s+e e =+~.i.i.>+%.S.E.F+d.c+c.f.7+/+j./+/+/+7+/+/+7+/+/+o (+(+j./+/+j./+j.j./+/+k+7+/+/+/+/+j.$+N.q+N.q+t W W ,.a+a+. a+w+. . . . . . . . . . . . . . . . . ", +"p+u 4 B.-.7.-.7.7.-.7.7.-.-.= L B.+./.!+/./.9+y F y b g.%+r+D+X.1 1 s.k <.6.}+9+A+A+g+3+J J $.{+s.C 0 2+c <+y 0 /.{+<+g.` g.*.z.I.2+2.l+1+S L b.7 4.B+2+ + +F Z ).d+G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+q. .#+{ d.F+w.p+l A.n+p F.D A.X.f+S.F+y+f+S.d.d.2 }+2 }+z+c+f.A f.f.7+7+/+/+/+7+7+h+7+7+f.h+o o V /+o j.o o /+/+/+/+/+7+7+h+j.q+N.q+q+q+q+W ,.,.w+-+3.. . . w+-+w+. . . . . . . . . . . . . . . ", +"p+u 4 6.-.7.-.-.-.-.-.-.-.h L $ 0 0 %+).T 1 ).<+B.g.Y.g.y .+- - * ^+B.<+# s.@+s.y g+b z+b g+( .+A+0 <.` 7 2+ +0 /.9+s.B+7 2+k l+# B+)+b.L b.O.l+z.Z.` c i b /.F %+Q l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+| q.f.@+c+#+o+F+s+X.F.X.X.s+s+F+F+S.F+e %.d.d.z+o.o.c+@+ .f.f./+/+/+/+7+/+o o o 7+o o h+h+/+/+7+h+7+A h+7+7+h+7+o V V Y N.v.$+N.q+~+R.t W W ,.w+w+W W . . . w+. . . . . . . . . . . . . . . . . ", +"p+u G+B.= h -.L L ].h = ].].# s.Z 9+/./..+& %+u.<+2+O B+B+ +%+* y+^+6.2+<.<.o.( d.F g+$.g+b .b K.<+<.B+B+<.y 6.{+{+s.H.]+H.<.H.<.g.0.S 0.1+l+/ z.l+` B+y K.0 B.s.1 G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+l e+l e+e+e+e+e+l e+l l e+e+l e+l l e+l e+e+l l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+l e+l l e+l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+l e+e+e+e+e+e+e+e+e+e+l e+e+A.e+l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+| | | A . .c.#+o+4+F+G s+F+d+F+F+d+s S.z+d.Z o.c. .q.A /+7+/+o /+7+/+/+o j.o (+o o o 7+7+7+h+h+V 6+7+h+7+V o o (+o Y v.q+R.q+t R.t t W ,.-+w+w+w+w+. . w+. . w+. . . . . . . . . . . . . . . . ", +"u G+4 %+S L u.].# # L S ].K 0 g+z+%+E+F d+k.+.<.2+2+k k u.y i 6.* .+<.` H. +g+/.F 9+0 ).Q 0 %+K.b +.<.` ` y ).9+Z Z J /.K.k k # k k 0.l+2./ O O +.<.z.l+7 B+k S g..+G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+l l e+A.D x.D l e+e+e+e+< ] x.D x.A.< D x.< l l l A., D D x.D ] A.l l e+e+e+e+e+e+e+e+A.< D x.l l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+l l < D x.A.l l e+e+e+e+e+e+e+e+e+A.D n+] l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+M.| | | q.f. . .c.c.#+z+$.}+}+}+#.d.S.}+d.z+c.f.A 7+V 7+/+/+o j.(+V o o /+o j.7+o /+/+/+o o q.7+o V /+o o o o m+N.q+q+t t v.W W W ,.W W W W w+. . . . 3.w+. . . . . . . . . . . . . . . . . . . ", +"u G.G+B.u.$ k ^. +K.y <.# <+s.g+d.d+E+ +s.).6.O n O 7 L # <+g ^.%+^+6.g.H.g+$.9+F A+s.9+r+).9+ +K.F 6.H.2+<+)./.o.s.%+- .+E E A+z.2.l+4.2.S +.2+<+% ` 7 <.2+O B+k W.4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+l G C+3.B D e+e+e+e+A.u+3.3._+l w.3.h.F.l A.e+G._+3.3.. h.=.e A.e+e+e+e+e+e+e+e+e+l &+3.&.A.l l l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+l !.3.C+F.l l e+e+e+e+e+e+e+e+l A.;+w+%.e+l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+j.M.| | | q.A f. . .c.c.#+4+Z d.d.}+}+z+c.f.7+7+V o /+q.(+(+(+j.j.j.j.(+(+j.(+7+V o > o o (+/+o /+o (+(+V.9.*+~+q+R.W t W ,.,.,.,.-+W B w+. . . . . . . 3.w+w+. . . . . . . . . . . . . . . . . ", +"u G+G+0 2+c i x+Z # +^. .<+g+s.J F d+ . .+.K U.O n 7 # <.B+^.g+%+9+6.H.2+C - - ^+/.2+` ^.Y.K.K.K.W. +c 2+b F+B.Z %+^+T * k.K. +]+k Z.7 7 B+<.g.u.0 c 2.k g.b.` I.W.G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.p+G B 3.3.#.G.e+e+e+D C+3.3._+u w.. h.F.u l u l d . B T.B f &.p G.e+e+e+e+e+e+e+e+l b+3.3.&+l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+u D t.&.F.e+l e+e+e+e+e+e+e+e+G.l ;+. %.G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+M.M.| | | | /+f. . . .@+@+@+c.#+o.d.#+5+q.q.X o X V o o (+j.(+j.o o j.(+o o o o (+o Y o (+(+o (+Y $+N.$+*+q+R.W W W W W ,.a+,.a+w+. w+w+. . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +"G.G.G+F +.9+F E ^.g.W.+.q.F F 6.F {+}+ +K.y g.h b.l+0.<+# B+K.A+B.9+s.^.W.Q r+9+6.2+l+7 7 *.^.W. +s.Y.]+i 2+k.Q F g+%+- p * k. +H.u.7 ` k 2+<.<.g.K.H.7 g.y I.S A+F G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.G C+3.. b+l l A.l &+. 3.. =.u D . C+F.p+e+e+e+_+. q !.f+T.3.s l e+e+e+e+e+l e+l X.3.3.B _+l l e+e+l A.!.e F.< e+e+A.D X.G D l l e+l A.D G e p < e+l l l e+] 1.s+X.D A.l l < X.X.n+A.A.A.D G G 1.A.x.w.< D &.. C.D+l l e+, F.s+X., l e+e+G.A.1.e F.< l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+j+j+j+| /+q.q.q.A A . . . .@+ .5+f.V X X (+o X L.L.j.(+j.(+o o o (+(+o (+(+Y (+(+Y Y 9.V.$+*+q+q+$+q+N.$+q+W t W ,.,.a+a+-+w+w+. . . . . . . . . . . w+w+. . . . . . . . . . . . . . . . . . . ", +"p+p+l F Y. +F+K.` H.4.y K.Y.Y. +K.Y.}+ + .s.i O 1+O.O.z.^.]+i K.$ <+W.s..+* ^+g.l+l+7 / z.7 g.0 6.M y <. +s.$.o.0 y Y.s.- - - {+W.g.4./ h 2+7 2.<. + +i K.E <.# +.y 4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+X.B . b+. 1.u G.l 5+3.;+3.=.G.D . 5 F.e+e+e+G._+. ;.u < ;+. C.G.e+e+e+e+e+l u l _ 3._+B B 1.l l A.< C.h.f 3.d w.l F.;+3.3.&.e A.A.x.;.h.B 3.C+5+!.A.l A.p =.C+3.B e.Q.x.l D B h.a A.] C.:.3.3.B m.d 3.f+;+3.. B d ] l E+;+C+3.3.;+s+A.l ] ;.C+3.B _ ] e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+9.j+j+j+M.| /+q.q.7+A A A f.f.q.X X o (+X L.L.L.j.(+(+(+(+j.Y (+(+Y (+Y (+Y Y V.$+q+q+~+v.t R.t R.q+q+q+q+R.W W W ,.,.a+a+a+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +"l l l ( g.b s.s. +W.i .+.Y.g +K.F 9+#+ +Z W.S 1+O.1+H.H.).C 0 y *.2+6.6.B.<.l+7 z./ S 0.` H.w ( {+K. +9++.u.K.9+J +H W..+* * y k ` k O 2.7 B+B+F y +.A+<+ +2+g.w G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.G B . %.3.Q.p+u D C+'.m.. _+u D . C+F.e+e+e+e+_+. 5+f+Q.h.h.X.A.e+e+e+e+l G.l D h.. X.v . m.l l G+X.C+B =.T.B C.] =.3.~ ;+B b+n+< _ B h.d v &.. ;+D A.p &.B e.u+=.C+B _ A.w.3.C+F.A.C.3.B ~ u+;+B B 3.E+v C+3.t.q < f+h.B =.u+> B B X.l s+B T.d h.B &+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+i+j+M.| | | q.A A A A f./+X X X X (+X X o (+(+(+j.j.(+j.(+j.9.Y Y |.9.V.$+~+q+q+t R.t q+v.y.t R.t t R.W t ,.,.a+a+w+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +"e+A.l %+b %+J b y +.2+W.K.g.g K.) g+Z (.G Q o.S b.O.l+O.B+b }+Y. +B+I./ O z.l+/ / n S l+g.c i Y.( C %+s.c c u.u.# +y c Y.^.s.).).A+^.u.2+z.<.7 g.2+u.y +^.H.7 *.K.4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G C+. p t.'.< l %.B C.;.3.=.e+w.. h.F.e+e+e+l _+. . 3.B 3.u+x.l e+e+e+e+e+e+G.C.3.e.A.f+. t.D A.u #.3.'., G #.s+D t.. s+w.$.0+] E+B C+s+< p+p &.. Q.A._ 3.;+D l A.C.'.;+F.w.3.C+X.p t.B a.] u ] ;.3.B f+l ;+3.%.l ] '.3.q A.l A.C.3.=.A.;.3.~ < E+#.~.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+j+9.j+| /+/+q.| q.q.q.q.| X (+(+(+j.L.(+(+X j.(+Y Y 9.9.~+~+*+~+*+~+*+q+~+y.t v.v.t t t t W t v.t t W t t ,.a+a+a+a+a+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +"p+p+G+C b J o.b s.Y.^.K.^.y ^.K.J b ).r+a T W.H.O.1+b./ 2+B.d+( s.k z.z.l+O.O.1+b.z.K A+F 0 /.}.g+( a 9+i B+k k 2+K.Y.w g.*.B+^.%+/.K.y <.S H.l+*.H.y +.6.+. +B+B+ +4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+p+G B 3.] d . G l ~ f F.Q.. _+G.D . C+F.e+e+l e+=.. 3 '.&.C+B m.< e+e+e+e+e+l ] '.3.v F.G B 3.%.G.A.X.C+B d &+D l , =.3.;+a.F.] l u+. _ A.p+u p+#.3.'., B B f+u l l G+D D ] w.. h.F.&+3.&.D l A.u w.&.. f+G.'.. #.l G B . s &+E+E+&+3.B !.f+3.T.u+f+D u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+$+i+*+i+i+i+i+j+i+j+j+Y L.9.j.L.(+(+(+L.L.Y L.j.~+$+y.v.v.t v.v.~+v.v.t t t t t t t ,.,.a+W t W ,.,.t a+a+a+a+3.w+. . . . . . . . . . . . . . -+W . . . . . . . . . . . . . . . . . . . . . . . ", +"G.A.l p. +) d.$.W.E E + +i ^.W.{+g+( T 1 y+!+g.0.O.O.<.c Y.Z %+K./ l+1+O.l+5.n O z.% 6.E b Z ).d+F $.}+}+g.g 2+g.g.y y 2+H.*.]+K.9+9+K. +g.B+l+l+g.g.K.s.+.y k ]+b G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+p+X.f w+, f+3.q p 3.b+< ;.. =.e+D . 5 8+u e+e+e+_+w+q D w.C.5 h.1.e+e+e+e+l u s+3.. 3.w+B 3.. b+< G+< #.&.3.3.&.s+A.F.=.C+3.h.;.] b+3.C.A.p+u l e f 3.1.B f ,+l l G.l u G+G.w.. C+a a.. ~ l G.p+G.A.~ . f+G.;+. $.l &+. 3.B 3.3.. B 3.f e ] ;.[.3.3.;+a e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+9.~+~+~+i+~+i+$+~+$+Y o (+(+(+V V =.h+h+> 6+f.V.*+v.,.,.a+a+,.y.v.t t v.t t t ,.,.a+a+a+t q+t t -+R.W ,.w+-+B B W 3.W w+w+. . . w+w+w+w+-+-+R.b+-+. . . . . . . . . . . . . . . . . 3.. . . . ", +"p+e+l Q n.) C.$.}.w K.0 +<.Y.{+A+) g A+Q 1 T .+y B+]+6.c g+9+2+` O.l+l+/ O.7 7 2.*.c y b g+g+}.$.$.{+J 3+r+n.Y.) W.W.y <.*.*.]++.3+).%+u. +H.B+k 7 z.u.y 6./.u.*. +4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.G B . < n+h.h.a.w+#.l Q.. _+u D . C+F.e+e+l e+=.. ;.l l D e.3.e e+e+e+e+e+A._+3.:.;+;+;+;+B 3.s+A.l l !.s ;+3.=.] G+x.s+u+C+C+X.d . _ A.l l u s B [.D C+. s+l u A.l x.x.< - 3.h.F.%.3.;+, A.A.l D '.. s+u '.. #.p+s+B 3.u+;.m.m.q m.q p < A.1.%.&.3.5+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+*+i+~+i+$+*+i+9.$+i+9.L.L.L.;+L.(+(+(+o o Y o 7+~+*+v.,.,.,.,.t y.v.t t v.v.t t a+,.a+a+a+t $+R.v.t ~+h.C+t B C+q+R.R.[.:.h.B C+B 3.B C+R.'.:.m+h+:.N.N.m+N.R.N.R.q+:.R.N.[.3.q+R.N.W R.-+R.[.:.", +"p+p+u r+!+Q a.&+Q 0 Y.y K.i Y.{.A+{+c H W.%+p.Q y 0.w A+s.9+C k l+O./ / l+/ / 4.l+*.>.K.}.$.$.C %+!+9+g+o+a w.1 {.W.H.]+<+w *.*.i A+{+F F y <.].H.I.z.E 0 +.K k *.K.G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+X.B . , l _ 3.h.C+p l Q.. =.p+w.w+h.e , , , e+=.w+m.x.D s B f ,+e+e+e+e+l 1.h.. &+x.D n+D _+. u+A.a._+a.l s 3.;+E+_+u+w.p &.B s+s 3.T.X.l A.!.;+. q A.d 3.=.D l l f+b+~ ~.D . C+F.F.C+B C.< l < C.3.. f+l ;+. %.l D e.3.#.] A.A.&+;.a.] q _+s A.a.3.b+G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+i+i+i+Y Y j.j.Y j.j.(+L.L.L.Y L.L.Y Y L.Y (+L.~+$+v.v.v.t t v.y.v.t t t t ,.,.a+a+a+a+a+a+t t a+a+a+a+3.a+a+a+. w+w+w+. . . . . w+w+. . . w+W N.-+w+. . w+3.-+-+-+w+-+N.V.w+w+-+W -+B -+-+W B ", +"l l l X.).E+!+( C .+( [ k ]+Y.F n.y [ H W.Y.y y A+/.{+%+).g.I.7 1+5./ / 4.` ` 4.*.B+*.x+W.( { Z b ( p.C $.p w.n+T {.H.*. +s. +^.*.^.g.H.H.H.<.H.z.g.$ g.c g.c ` Z.K.4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.G.p+G B 3.:+l s+. 3.=.G.l ;.. d u w.3.3.'.;+;+d x._+3.:.;+'.3.3._ A.e+e+e+e+G.m.. t.] e+G.e+G.f+3.C+1.#.3.h.u+;+3._ p e.C+_+v B '.p ] 5+3.[._ q '.. ;+1.A.F.&.C+;+;._ T.3.u+< w.3.h.a < ;.3.h.d m.d C+C+3.s+l ;+3.#.l l #.C+B _+;.u+C+3.C.l ;.3.I m.&.3.a.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+i+9.j+M.j.X X /+q.X V o (+(+(+L.Y L.L.(+L.j.Y j+Y i+i+~+~+*+~+*+$+~+y.y.y.t t t t ,.a+t ,.t W -+a+,.a+a+a+. . a+. . . . . . . . . . . . . . w+-+. . . . . . . . . . . . w+. . . w+. . . . . . ", +"u l u X.g+( !+%+1 C T !+E H E {+}.c J c [ A+g g.y s.{.F ^.` k / O.l+l+l+l+4.` H. + +g.H.) W.w 3+) 4+$.( !+p w.a C %+w K.B.A+F .i *.x+*.*.7 g.L g.l+k ` ]+x+4.` 4.K.G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+u G.l G B B n+G.] h.B s l l ;.B =.l w.. 3.. 3.. '.D d 3.3.. C+&.m.D A.u e+e+e+x.t.3.C.u G.e+u u , t.3.Q.D _ C+3.C+=.!.A.s :.3.B e.&+< G.D _ h.3.. B =.1.A.l l X.=.3.3.3.3 q D l D 3.h.X.A., m.h.3.3.f u+d 3.f+l ;+3.#.A.l , 0+'.3.3.3.t.a.< l w._+3.3.B 5+D e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+i+i+9.j+j+j.X X q.q.q.q.X X L.L.L.L.L.(+L.L.Y Y 9.Y j+j+Y 9.i+9.*+*+i+$+~+v.v.t t t t t W t ,.t B W ,.,.a+w+. . . . . . . . . . . . . . . . . . . . . . w+. . . . . . . . . . . . . . . . . . ", +"p+e+u D $.{ n.F (.p.T - ).K.`.M {.) i Y.D.K.c D.^.x+i i ]+` l+n O.l+l+` 4.z.i +. +K.g D.J s.b { b b F ).!+T p.{ .+- %+<+2+]+E s.s.K.]+*.k *.7 2.z.Z.2.g.^.]+4.` ]+W.G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+p+G.p+, F.F.l l l p F.] l A.w.F.,+u < F.F.F.F.F.1.A.p F.F.1.F.w.A.A.A.p+e+e+e+< F.F.x.e+e+e+G.l A.p F.1.l , G &+s+x.A.A.A.1.E+E+,+A.l A.G+] F.f+E+F., l A.l l u n+X.&+&+8+A.A.l < F.F.] l < < 1.f+&+X., w.F., l 1.F.D l A.l l D s+&+E+p < A.A.A.:+e &+G ] l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+i+i+i+j+j.| X X | q.q.q.q.q.X | (+L.Y Y 9.9.9.i+Y 9.Y 9.Y |.Y Y 9.9.Y 9.9.i+*+*+y.y.v.t ,.,.,.W R.t q+B ,.3.a+w+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +"e+l l , p $.b 3+( C p.- - /.b {.K.Y.g.H D.[ ]+W.i x+*.N *.7 / l+l+l+/ ` ^.K.0 .+s.Y.K.) w b ( ( g+{+F <+M +Y.`.{.B.y c ]+c. +{+* r+J H.B+]+2.k <.2.)+<.).+.]+4.]+W.G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+u G.l A.l A.u A.l u A.A.l u u l u l u l u u G.l l u l l u u l l l l e+e+e+e+u u l l G.e+p+e+l A.A.G.l A.A.l A.l l l < l A.A.G.l l l l l l < A.l u G.l l A.A.p+G.l l u l l l l l G.l G+l A.G+l G.p+l l l G+l l u l u A.l A.l G.A.p+l l A.G+l l G+A.l A.l l G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+i+i+j+j+j+M.X q.`.q.`.q.8.A f.5+f.X L.L.Y r j+i+9.i+Y i+i+Y Y j.Y 9.j+9.9.9.9.9.i+*+$+$+~+y.R.t R.v.R.v.B a+a+3.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +"e+l l D D a 3+n.!+E+a p - r+#.}.W.c ) D.g.u.)+<+{+Y.x+x+l+` l+l+l+4.k K.g.n.Q G M F ( %+( (.r+r+!+).0 H.} *.g 9+{+b ) g.K.W.{+G - * * /.g.]+B+z.z.]+0.c I.{.^.]+*.Y.G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+l e+A.u l l l G.l A.l l l l l A.l l u l u G.l l l A.l l A.l l A.l l l l l G.l G.l l l A.l l l l l l l l l A.l l l l l l < l l l l G.l l l l u l l p+l l l u G.l l G.l p+l u G.G+l l G.A.l A.G.l l G.l l l p+l l l l A.G.l u A.l p+l l l l l l l A.l l l l e+e+l l e+l l e+l e+l e+l e+l e+e+l l l l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+i+j+i+j+Y M.| q.q.A A A .c.c.#+o.c.V (+j+9.Y j+Y Y 9.i+9.|.i+9.Y |.9.9.j+L.r r 9.9.9.9.*+9.*+~+h.v.h.h.v.3.. w+w+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +"l u u G 1.p a E+E+}.( T p p {.q J ) +c l+O.+ H.+.J j+x+l+)+4.)+2.k g.W.M r+* }.u+3+}.3+b 3+}.(.!+n.c g c +{.M y W.J %+A+!+^+r+T G r+r+).<.)+*.)+)+H.D.H A+%+^.*.) 4 e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.l p+u x.&+u+Q.p A.A.u A.A.A.l u l < l l G.l l < l A.l A.e G F.E+D s , A.u A.l l l e+l A.A.l l A.X.E+l A.A.A.A.A.l l G.p+!.f+n+s , < l l l l G.l l l l G.l l u p+l l u l l l A.A.] &+D l l A.l l l l A.l l l l p &+< A.A.l &+1.l l l l A.A.A.l A.E+1.l l l l A.l l l l l l e+l e+l l A.s+F.l A.l x.#.< l l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+i+i+i+M.X X X q.q.8.@+c.#+J o+o.4+Q.#+ .o L.j.9.r Y 9.|.9.i+*+*+9.i+9.|.9.9.L.Y r r r r Y Y Y 9.|.*+$+q+q+t B B 3.a+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +"G.l p+1.8+D !.p p.n.m.{ Q - ( v 8.[ M w O.2.]+u.{+u.*.` / l+l+Z.]+g c F !+p.r+3+{.3+_ }.1 r+G C }.) {./.!+.+/.F }.M C C 1 * T r+T Q 1 !+!+/.K.4.; Z.x+; *.) Q /.W.{.G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+p+G.l w._+d f+_+&., A.] D l A.A.p+x., A.A.x.] A.u l A.G+A._ %.C.m.D &+< A., x.G.l l , ] l A.l G.1.'.s+l ] D l l G+l ] < l %._ F.~ 1.n+A.l l , n+l A.u l l l , ] A.l l :+D l , n+A.D ;+1.D A.u l A.D ] G.A.A.n+@.s u+A.A.D < ;+X.l ] D A.l l < D x.> e l l A.A.< A.A.l A.A.< x.A.l l l ] ~ f+A.] D F.'.< l G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+i+i+j+j.X q.q.A .#+Z Z o.o.z+o.o+Z o+#+c+A (+j.Y 9.Y |.|.|.*+i+r 9.|.9.i+9.Y 9.Y 9.r 9.|.9.Y |.Y 9.9.|.|.*+~+t 3.3.w+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +"l l l D !.!.- p p C }.}.3+C p F g `.) ).M w H D.H.B+z./ l+l+)+*.]+c %+)./.!+( 3+(.E+p.p.T G !+(._ 3+p.1 1 !+n.( C p.(.n.(.G T p.r+!+(.E+!+C M w H.H.} x+D.Y.s.%+).!+G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+u l l ;.q , l < G x.&+;+;+_ < Q.=.b+> n+s+;+> 1.u+1.x.d a ~ a.:.e.#.Q.&+b+> ;+1.] _ ;+b+=.G A.A.=.C+s+%.~ ;+Q.] _ ~ s+l 1.[.e.a.:.> '.X., C.b+;+#.A.l l w._ ~ '.X.D '._+'._ ~ ;+&+F.h.=.;+u+] 1._ ~ b+a ] a.b+;+;+#.!.d ~ > h.D E+b+;+u+A.p =.~ =.e.!.l x.d a f+_ n+5+X.s+~ ;+_ x.#.~ a.e.1.E+;+b+~ u+A.e+l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+i+j+| q.A .c.#+Z d+(.S.d.z+Z z+z+z+4+c.b c. .q.| r L.r 9.r 9.|.9.9.9.|.|.|.9.&.|.|.9.r 9.Y L.9.Y Y r 9.9.|.&.*+~+h.a+w+w+w+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +"e+u G.n+!.p !.T G 1 a.s+{ v !+p (.v [ n.T p.w i B+/ O.O.l+l+4.*.8.J p.M ( n.++v (.a 1.T s+&+s+s (.s+p.(.(.p.Q (.M ( E+(.$.s+!+s+p.C %+1 E+(.%+{+F {.D.]+g 0 A+I.g b G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+p+G.x.e.1.A.A.l l X.'.1.p [.G > a.1.&.G _+m.s X.=.D 1.b+G ;+X.'.G q a._ u+D b+s a._ D E+B ,+u l _ a.E+~ 1.a '.G ~ %.] l , ~ E+a._+w.d a.s =.X.s+&.D A.A.u+q F.#.> G &.D C.'.w.;.5+s b+1.F.;+s+d Q.F.Q.u+s =.p 1.&.s+=.#.D #.;+X.&.e F.&.s+~ C.D %.e.l u < =.v+> =.v+v X.b+X.p ;+s+_+;.X.;+s+;+X.n+=.a.e+l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+i+j+q.A 5+@+v+~.F.X.f+..F+e f+j z+o.C.s o.#+c.@+u+ .7+o X L.9.|.9.9.|.&.i+e.|.i+|.9.*+;+9.|.|.|.9.'.9.|.9.|.|.|.|.|.*+C+,.a+3.w+w+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +"e+u u n+p p 1.p s+C.( G p.a.b s+p E+{ !+T T Q W.D.2.O.1+b.z.8.+.F n.(.{ m.J [ { r+a a E+E+C.Q.G 1.G E+s ( E+W.g ) { ( &+(.s ( (.E+}.n.!+1 ( A+F W.g.H H 9 g w y D.K.l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+u D [.1.A.A.x.D ;.C.A.] '.s+e.D D ;+D s+b+_+e ~ l e =.G ~ F.;+!.=.s+~ G A.~ G '.F.l F.5 A.l < > f+u+%.p+D '.f+;+n+G.l w.b+1.d &+G.d f+b+&.~ ~ ~ , l p C+b+~ b+_ C._ < a.Q.A.m.Q.m.C.G.n+~ %.C+b+~ b+;.=.s G., '.E+;+D A.&+_ q I ~ > ;+E+:.] l s+d l l G.q =.q ~ ~ F.a.m.A.< ~ f+;+F.s+=.C.q l A.v f+u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+V @+o.v+~.,+x.:+:+:+R ,+~.@.@.e %.4+#.e C.Z o.#+o+;.#+c.u+7+L.Y Y Y 9.i+*+i+&.9.9.r |.9.L.9.&.*+*+*+|.*+*+*+*+*+|.|.9.|.&.$+h.B 3.w+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", +"p+G.G.G s+T 1.a p.}.q Q.#.p.n.3+a p T a T p.r+/.) c c w 0. +).1 %+Q (.(.n.J }.p.a r+n.;.&+{ ( E+}.n.E+( ( {.g H H ) }.{ n.}.m.J }.{ C C s.b b w ++9 H + ; ; } + H b G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+A.p+G.d u+1.s+'.&+a.b+p a.=.1.e.A.1.;+X.u+s '.&+;+F._+_ v+v e =.w.'.X.'.w., &.x.'.C.1.=.> l l < [.1.q d 1.m.u+G ;+A.A.l F.;+!.~ F., ~ 1.=._ X.a.f+l A.D :.s s+m.p _ #.A.5+s < =.s d =.1.a.=.F.&.s s+;.!.u+u+1.Q.b+X.[.&+F.b+a.Q.=.F.#.#.w.C+&+1.;+a.G.l u s e.1.~ m.A.%.b+X.#.=.X.~ D #.m.$.b+~.f+C+p p+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+&+v+e D+:+:+:+:+:+] ] :+< :+] @.X.v+C.d.%.s s S.%.C.o.o+o+;.@+V ~ r |.I y.$+*+e.i+*+$+N &.i+$+y.I y.$+t.y.$+~+y.$+*+;+r *+*+*+T.h.3.-+-+-+. . . . . . . . . . . . . . . . . . . . . . . . . . . ", +"G.l G+n._ }.(.s+(.n.m.[ _ J n.}.p.T a 1.a G a 1 p.!+w W.9+)..+!+Q !+) g ) !+(.( !+n.[ 3+1 &+q [ J { J b }.g + 9 H g W.b { {.[ J {.{.{.D.} + H } z ^ ! ! ^ ; } ' ! v G+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+u l l w._ ~ d s+< < _ ~ m.x.G a.A.X.C.D d _+G w.=.=._ s+s &+p.#.p ;.X.;., w.;.A.G ~ _+=.a.G.u n+_ < D u+~ Q.x.s+#.G.A.G.G a.D ;.D D ;.D 1.d ~ Q., G.l l f+=.=.s < ;.a < ;.1., m.X.m.m.~ _ w.< s ~ =.s+< F._+> _ a.< %.;+_ u+X.] _ ~ q w.l %.~ v _ G l G.l F.C.< C.p l , ;.> ;.w.F.a.:+#.f+D _ ~ q u+] l l l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+,+F.,+:+:+:+:+:+:+:+:+:+< :+:+:+@.8+f+%.j s >+..>+6 0+j j j o+_ u+_+X r *+I i+i+e.*+~+$+*+*+z ~+$+P y.P y.y.5 y.9.o 5+r |.e.i+$+I y.h.R.B 3.. . . . . . . . . . . . . . . . . . . . . . . . . . ", +"l G.G.a.++[ ) J J q [ [ [ [ ) ( T a r+G a a n.}.r+n.W.y w M .+p.p.( H H n.n.w w w ) ) w {.[ [ J w ) g w +++ + + + H ++c [ [ H g g 9 ' } } } ; m ' ! : ^ ^ } 9 ; ; Y.u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.G.G.l < l G.G.G.A.< G.G.l l u G.l G.A.A.l G.A.A.< l p+A.p+l p+l G.p+l l l 1.e.a.;.~ !.A.G.p+A.G.l l < l G.l p+l G.l p+l l l l l l G.G.A.] l G.u l u G.< ] l G.< p+G.A.G.l l G+l A.< G.l l l A.A.l G.l A.A.A.l l G+A.A.< G.l A.< A.G.l G.< A.l p+e+e+u G.l l l l G.l A.< A.l l A.u l l G.l A.A.A.u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+R R @.@.@.@.@.@.@.:+:+:+:+:+:+:+:+@.8+>+C...=+i.i.>+i.=+6 C.o+#+m.c+7+X j+9.r i+i+$+$+I $+i+$+y.y.y.y.y.y.y.y.I *+(+~ |.~+~+$+$+~+*+> ;+*+v.w+. . . . . . . . . . . . . . . . . . . . . . . . . ", +"G.G.G.3+`.++++v [ ++[ [ [ [ J !+r+1 ( C E+}.) 3+}.++++H [ 0 ( M 0 w H ++w D.++++H ) [ g H H H H >.+ } H + ; ; ; + + + + ; } ; m m z ! ' ; ; ; ^ ^ P : ^ P N z m N ) G.G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.G.G.G.l u G.l l u l G.G.G.l u u A.l G.u l G.l G.G.G.p+G.u l G.G.G.G.G.G.X.a.C.n+l l l G.A.G.l G.G.G.G.G.u G.G.G.G.G.G.G.G.G.u G.G.u u u G.G.G.e+l G.l l G.u l G.l G.G.l G.l G.G.u G.u l l G.G.u G.l l G.l G.G.G.l G.l G.G.l G.G.u G.G.p+G.G.e+e+G.u G.G.G.G.u G.u G.u u u G.G.G.G.u l G.G.p+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+@.R @.@.@.@.@.@.@.@.:+:+:+:+:+x.:+:+@.R X.x ~.i.i.i.=+x =+E.4+c+z+;. .f.A q.~ j.j+r j+9.9.i+r i+i+i+M.j.i+y.~+i+|.9.r |.i+9.9.i+9.L.6+6+b+9.*+$+:.,.. . . . . . . . . . . . . . . . . . . . . . ", +"u G.G.;.>.++g ++[ ++++++++[ ++{.M }.{.{.{.) ++++++D.+++ 2.D.++++H + H + H + + + } g H 9 9 } H 9 ; ; ' ; ; ; ' ; + + + ; ' ; ; ' ; ! ! ' ' ; ; ! ^ : : : P 5 f f 5 _+u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.e+G.G.G.G.G.p+G.l p+e+G.G.G.G.l G.l l u l l G.u G.G.p+G.u e+e+e+G.l < l l p+G.l l l G.G.G.G.u G.l u G.u e+e+u G.l G.e+G.e+p+u G.p+e+p+e+A.u G.l G.G.G.G.G.u l l G.G.l u l l l l G.G.G.l G.G.G.u G.l l l l G.l l l G.G.G.l G.e+G.p+e+u e+e+e+e+e+u l G.e+G.u G.l G.G.e+p+e+p+e+p+G.e+e+u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+R R R R R R @.@.@.@.@.@.@.@.@.@.@.@.@.!.,+,+x i...6 i.=+i.0+4+#+q c.f.A A q./+`.q.X X X q.q.X q.7+ .o+c+6+o L.9.Y (+L.(+r (+o (+~ o 7+6+> (+9.'.|.T.,.w+a+a+. . . . . . . . . . . . . . . . . . ", +"G.G.G.;.I >.++g ++++++g ++D.H D.2.D.H D.g 9 } H + + + + + ; ; ' ! ' ; ; ; } ; m ; m m m ! ^ ' ' ! ! ! ' ; ; ; ; ; ; ; ; ' ' } ' ; ^ ! ' m N } ^ : : : P f 3.B f f =.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+p+p+e+e+G.e+G.p+G.l e+p+e+G.e+e+p+u e+e+l e+u p+l l l l G.G.l e+e+l e+e+e+e+e+e+l e+e+e+e+e+e+p+e+e+e+e+e+G.e+e+e+e+e+e+e+e+e+p+e+G.u G.G.e+e+G.e+e+G.e+e+e+e+e+e+e+e+G.u G.G.G.G.G.u G.G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.e+e+e+e+l u e+u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+!.!.w.R R R R R R R R @.R @.@.R @.@.D R R R ,+i..._.>+>+i.%.a.#+c. .E f. .E A .A .v .5+@+u+@+#+j ..s j l.l.o 6+d h+7+=.f.d h+A _+6+5+> > o (+(+'.y.t B t ,.,.w+w+. . . . . . . . . . . . . . ", +"G+G+l { I I g H H g `.++H } ; ; + ; 2.H ' } ; ; ; ; + ; ; ; ' ' m ! ! m z 3 : 3 3 : P P P : ^ ! ! ' ' ; ; + ; ' ^ 3 3 ! ! ' + } } ' ; ' ' } } ' ! z ^ P 5 f f B 3.=.l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G.G.G.e+G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+!.,+,+,+!.!.!.R !.R w.R D !.!.D w.R R D R D R i.6 2 E.6 >+2 a.c. . .f.f.f. .f.A .@+z+4+4+j Q.z+2 6 e r.E.j 8 c+k+c+@+d 7+6+5+5+l.6+V 6+h+h+6+> (+Y *+~+y.v.v.t ,.B ,.3.3.w+. . . . . . . . . . ", +"G+G+l 3+N f N H } N b+>.3 5 z 3 ^ ! ; m P I f : ! ; } ' ' m ! ^ z ! : : 3 5 f 5 5 5 3 P 3 3 3 : ! ' ' ; ' ; } m P f 3 ^ 5 3 >.H ' ; ' } ' } } ^ I z I 3 5 5 C+f B =.A.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+,+,+,+,+,+,+,+!.!.!.!.!.!.R !.!.!.!.!.!.!.!.!.=+..C.2 0+6 Q.Q.@+ .f.f.A . . .f. .z+r.f+F+f+f+r.f+e x ~.e f+6 %.o+Q.#+u+5+6+6+l.5+6+=.7+=.h+h+(+(+Y |.y.y.v.t v.,.t ,.B h.B 3.. . . . . . . . . ", +"G+l G+E+a.3+3+}.{ { { Q.m.;.;.;.;.;.3+Q.;.;.m.;.3+3+{.{ Q.{ Q.3+{ Q.{ 3+;.;.J J ;.J J ;.;.3+3+{.{.{ {.{ {.}.}.{ { 3+a.}.a.3+}.n.{ }.{ }.{ }.{ 3+3+{ Q.3+3+;.;.;.;.#.l e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+,+y+,+,+,+,+,+,+,+!.!.!.!.!.,+!.!.p !.!.!.!.!.~.i.C.Q.2 0+j Q.q @+ .@+ . .@+@+@+c.%.e e X.X.X.X.~.8+,+,+x ~.e >+0+0+4+c+u+@+@+c+l.5+=.o h+6+k+> (+b+L.*+$+y.~+y.y.y.y.y.e.$+:.B B B . . . . . . ", +"u G.G+G+G+G.G+4 4 G.G.G.p+p+G.G.G.G.G.l p+G.G.G.G.G.G.G+p+G.G.p+G.G.G.u G.G.G.G.G.G.G.G+G.u G.G.G+G+G+G.G.G.G.G.G.G+G.G.G.G.G.l G+G+G.4 G+G.G+G.G.u p+G.u u G.l p+p+A.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+F.F.F.8+y+1.1.1.1.8+,+,+1.,+,+1.,+,+8+,+,+,+,+F.i.%.a.0+0+j j ;.#+q #+#+#+3+z+o.C.s+X.~.=+~.~.8+8+8+,+,+8+8+~.e ..f+s C.z+Q.#+8 l.f.V h+h+6+l.h+(+> L.|.$+y.~+$+~+~+T.~+9.V.V.N.[.:.R.w+. . . . ", +"G.G+G.G.G.G+G.G+G.G+u u G.G.G.u u G.u G.G.u u u u G+G.G.u u G.u G.G.u G.G.G.u u G.G.G.G.G.G.G.G.G.G.G.G.p+G.G.G.G.G.u G.G.G.l G.G.G.G.G.G.G.G.G.G.G.e+G.e+e+e+p+G.p+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+~.~.~.F.F.F.8+8+8+1.8+8+,+1.1.,+8+1.,+1.1.1.,+F.G 0+C.2 2 j j 4+o+o.Q.z+Q.C.C.2 s =+F.F.8+,+8+8+8+,+8+8+8+8+F.~.e e v+%.C.4+8 ;.8 l.V > h+6+k+> > (+(+9.|.*+*+*+|.*+~+|.(+6+> h+(+m+[.C+w+. . . ", +"G.G.u u G.G.G.G.G.G.G.G.u u u G.u G.u u u u u u u G+G+u u u u u u e+u u e+e+e+e+e+e+e+e+e+e+e+G.G.G.G.G.G.G.e+e+e+e+G.G.p+G.G.G.G.G.G.G.G.e+e+p+e+e+e+e+e+e+e+p+e+p+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+~.X.X.~.~.~.~.F.F.8+F.F.F.8+F.8+8+F.8+8+8+8+8+~.G 6 %.0+E.%.%.j j z+a.C.d.%.s %.r.X.~.F.~.F.F.F.F.F.F.F.F.~.F.F.X.e f+r.v+0+2 j Q.l.5+h+6+6+h+> > > (+b+'.|.*+|.Y |.N.9.> k+k+l.l.l.l.N.w+3.. . ", +"e+u u G.G.u u u u u u u e+G.e+e+e+e+e+G.e+G.G.G.G.G.G.u G.u e+e+e+u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+u e+e+e+e+e+u u e+G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+G X.e e G G G X.X.X.X.~.~.~.F.a ~.F.F.F.F.F.F.X.e &+6 ....v+E.%.2 C.0+E.s r.r.r.e ~.F.~.~.F.~.F.~.~.~.~.~.~.X.X.e e e s+f+E+v+%.C.o+c+c+_ l.l.k+6+> > h+(+Y (+m+o o (+> k+8 8 8 k+k+h+m+q+h.C+C+", +"e+e+u u u u G.G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+u u e+e+e+u u u u u u e+e+e+G.u u u u G.e+e+e+e+e+u u u u e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+", +"e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+u e+e+e+e+e+e+G.e+G.G.e+e+G.e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+e+"}; +#else +/* XPM */ +static char * banner_xpm[] = { +"640 64 89 1", +" c None", +". c #030304", +"+ c #0E3833", +"@ c #075A83", +"# c #32728A", +"$ c #628E9A", +"% c #8AA9B4", +"& c #A4BCC4", +"* c #AECEDE", +"= c #CEE2E2", +"- c #3A565A", +"; c #063243", +"> c #1A3A2E", +", c #E5E6E9", +"' c #062418", +") c #ECEAEB", +"! c #69787A", +"~ c #48656C", +"{ c #EEEEF2", +"] c #021E12", +"^ c #363636", +"/ c #86959C", +"( c #021A12", +"_ c #F2F2F6", +": c #083D48", +"< c #345057", +"[ c #0A2E22", +"} c #A4AAAC", +"| c #F6F6F6", +"1 c #0E2E26", +"2 c #74727B", +"3 c #104555", +"4 c #5B5C62", +"5 c #16121C", +"6 c #EEFEFE", +"7 c #BABABC", +"8 c #324A36", +"9 c #0E251D", +"0 c #084976", +"a c #797A86", +"b c #100E16", +"c c #526A6E", +"d c #BED1D3", +"e c #958C98", +"f c #2A2F2D", +"g c #B9ADAE", +"h c #CAC4C4", +"i c #9B9AA0", +"j c #204244", +"k c #FBFAFB", +"l c #40423E", +"m c #0E0A1E", +"n c #48515B", +"o c #85828F", +"p c #312E41", +"q c #222222", +"r c #F6FEFE", +"s c #D2D2D3", +"t c #3B3A56", +"u c #527783", +"v c #44405A", +"w c #67646E", +"x c #0A6389", +"y c #22627A", +"z c #A1B6B9", +"A c #211E26", +"B c #DDDADF", +"C c #181820", +"D c #23243B", +"E c #6696A2", +"F c #254E5A", +"G c #376373", +"H c #554755", +"I c #0E060E", +"J c #FEFEF6", +"K c #2D3055", +"L c #748D93", +"M c #06507C", +"N c #62828F", +"O c #0A0A0E", +"P c #585266", +"Q c #FEFEFE", +"R c #728489", +"S c #332418", +"T c #474855", +"U c #B8C6C8", +"V c #7798A6", +"W c #686D76", +"X c #E4E2E3", +"rrQJJJJJJJJQQQQQQQQQQQQQQQQQQQQQQQQJJJJJJJJQJQJQJQJQJQJQJQJJJJJJJJJQQQQQQQQrrrrJQrrQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQXXXXXXXXXX,X,X,XXXXXXXXX,X,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,X,XXXXXXXXXXXBBBBBBBBBBBsBssshsshshsUhhU", +"QQJQQQQQQQQQQQQQQQQQQQQQQQQQQrrQrrQrrQrrQrrrrrrrrrrrrrrrrrrrrQrrQrrQrrQrrQrQJJJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQX,,XXXX))),),),))))XX),),))))),,,)))))))))))))))))))))),),)))XXXXX,BB,,XBXBXBBBsBBBssBssssdssdsh", +"QkQJQrrQrrQQQQQQQQQQrrQrrQrQQQQQQQQQrQQrQQJrrrrrrrrrrrrrrrrQrQQrQQrQQQQQQQQJJJJJQJJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQXX))))XX){{{){),),))){){),){){{{{{{){{{{){{{{{{{)){{{){{{{),{))),,,),X,,XXXX,B,BsB=BsBdBshshshsh", +"QQJQrQQQQQrQJQJQJQJJQQQQQQQQkkkkkkkkkkkkkkkQQQQQQQQQQQQQQQQkkkkkkkkkkkkkkkkJJJJQQQJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ),),)){_,)),{){{)_{{{{{{{__{_{____{_{_{{_{{____{{{{{{_{{{{{_{))))))XX,X,XX=XXXBXXBBBBBBsssssdsss", +"rQrkrrrrrrrrrQrrQrQrrrrrr6rrrrrrrQQQQQQQrrrrkkkkkkkkkkkkkkkJrrrQQQrrrrrrQQrrrrr66rkJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ)){{{,)_{_|{{{__{{{{________||___|_______|_____|______{_{__{{{{{{){),,,,XXXX,=XBXBBBsBBBBBsBssds", +"|r|}RRRRRRRRRRRRLL$LL$LELLLEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEVLLE$%rQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ,{,{__{{_{______{_{_|__||_||_||_||||||||||||||||||||__|_|_____{_{{{{{{{,),,,,,,X,XXXBBsBBsssBsss", +"k66L:3333333333333330030303000000000000M0000000000000000MMM0M0000M000000000M03000c|rQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ)_{{___{|_|||__||6)_|r||k||r|kk|kkkkkkkk|||k|k|k||||||||||||____|{{{{{{{)),,,X,X,X,XBXBBBBBBBBBB", +"J6_$00030300M000000000000000000000000000M000MMMMMMMMMMMM00000M00000M0M00000M000MMu6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ_{{____|_||||kkkk|||k||kkJkkkkkkkkkkkkkkkkkkkkkk||kkk|k|||||k|_|_k__{{X,,,)))),,,,B,XXBBBBBBBBBs", +"Qr6$0000000030000000000MMM0000MMMMMMM00M0MMMMMMMMMMMMMMMMMMM0MMMMMMMM0MMMMMM0MMMMu6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ____|__|||kk|kkkkkkkkrrkkJkrkkJkJJkJQJQJJQkJkQkQkkkkkkkkkkk|||||_|__sieoiiigg7hsXX,XXXXBXBBsBsBB", +"kk6N00000000000000000MMM0MMMMM0M0M0M0@MMMMMMMMMMMMMMMMMMMMMM@M@MMMM00@MMMMMM@MMM0u6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ___|_|||kkkkkkkkrrrkrkkrQQJkJrkQkkQQrQkkkQQQQkQkQkkkkkkkkkkkkkk||k|)ooeeeeeeeeooooi7sBBBBXBBsBBB", +"Jrk$0000000000M0000M0M0MMMM0MMMMMMMMM0M@MMMMMMMMMMMMMM@M@MMMMMMMMM@MMMMMMMMMMM@M0#kQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ___|||kkkkkrrrrkQkQkQQkkkQQQQQQQQQQQkrQQQQkrQQQkkkkkkQkkkkkkk||||_seaa22w2aeooe2eeeeeigggieaweg&", +"kJ6N000000000M00MM0MMMMMMM0@MMM@M@M@M@MMMM@M@M@M@M@M@@M@M@@@@@@@@@M@@@@@M@M@M@M@Mu6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ|||||kkkkrQkkQQQQQQQQQJQQQrQQQkkrQQkQQQQkQQQQQQQQQQQQkQkkk|k||||_ia2222w22woo2o2geooeeeeoaoeo24v", +"JJ6L0M0M000M0MMM0MM0MMMMM@MMMMMMMMM@M@@@@M@M@M@M@M@M@@M@@MMM@M@M@@@MMMM@M@@@M@MMMu6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ||kkkkkrkJQQJQQJQJQJQJQQJkBsBBh,ss)||kQQQQQQJQQJQQQJQJQQkJkkkkk)ge22o2wawwP22ww22wHwaghggeee4Pt5", +"Jr6E000000MMMM0MMMMMM@@MM@M@@@@@@@@M@M@@@@@@@@M@@@M@@@@@@@@@@@@@@M@@@@@@@MM@@M@@@u6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ|||kkkkkQQQJQQQQQQJQQQQJkBie}}iieiiiih,X|rQQQQJQQQJQQQQJJkJkkkXgeoaoeawe2wPPHvHHHHtHweoeeee25mI.", +"JJ6$MMM@MM0MMMMMMM@MMM@@M@M@MMMM@M@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@M@@@@@@@@M@M@u6rQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkkkkQQQQQQQQJJQJQQQJQrrJQsiiig}ieo/eeiiig_QQJQQJQQQJQQQQJk|{X7oeo2a2ooe2w2wHHvvttvvHP2wP2eeHIII.", +"Jk6EMMM0MM@MM@MM@MM@@@M@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@x@@@@@@@@@@@@@@@@@@F@y@@u6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ|kkQQQQQQJQQQQQQQQQQQJQkXhig7gieoaoooLoeohJJQQQQJQQQQQkkrkhea2weeeow2oeo222HvtvttttHwHPHHHAI....", +"JJk$MM@MMMM@M@@MM@MMM@@@@@@@xx@@@@@@@@xx@@@@x@@@@@@@@x@x@xx@@xxx@@@@@@x@@xy#uE%$@u6rQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ|kkkQQQQQQQQQJQJQJQJQQQJshghhg}eLoaRoooooikrJJJQQQQJJQQ_}iiow22gee2w22owwPwPvttttttvPHPHS5II....", +"Jk6VMM@M@M@@@@@@@@@@@@@@x@x@@@x@xx@xxxxx@xy##yyyyyy##@@@x@xx@x@xx@@@xx@x#%%%***&Nu6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJQQQQQQQQQQQQQQQJQQQQQQ_BgghhhgieoooooRoResBsXBX|JJJJJ)Bigiow2eeoePwo2owPwwHHvtttHvHHHt5I.......", +"JQ6E@M@M@@M@@@@@@@@@@x@@@F#EVc@y@x@x@@xx@yEd*%%*&%%%&$yyx@@x@xx@x@xxx@y##%&%%*zVV/rQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkJJJJJJJQQQQQJQQQJQJQQQ)hhhsXhgiooaNaooaaReeei/eis|JkB}eeie22oooeow2222wwPvttKtttvvtKCmII.......", +"JrkEMx@@@@@@@@@@@@xxx@@x@uz*UU%N#Gxxxx@yy#Ed*=&&***&%%%NE#y@xxxxxx@@@xxyGu%U7%zz%&kQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJkQQQQQQJQQQQQQQQQJQJk|BhhBhB7g}LaaaRaNoaaaooLieeehho4PPHw2eeeo22w2ewwwwwwtttvtKKDAmIII.........", +"Jr6V@@@@x@x@x@xx@@@x@xxyEddd*****%EuuGuuGN&z7d}%}&*&%%E%%%#y#xx@yxxFM+33~#u}s&e&&UrQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkJJJJQQQQQQQQJQJQQJJJJ|BhhBBXhgeeeoaaaaaaaa2WWcwwwwPTvvHPvPPPw22o22e2w22oPtKDDDmmmmmI...........", +"JkkE@x@@x@x@xxx@x@xxxMyu$&=U*}LV%%E%%E$~~ii}zUd}%*zzVVuE%#u##@F@#y3:;;jyGVNEz&%R&UkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJJJQQQJQJQJQJQJQQJJkBXBBhBXBBsgoiio2W2w44PTTHTvvttvPvtttvvvHtHvtt222wHvHtDmmmmmmmII.............", +"Jr6E@@@x@@xxx@xxx@@yGNNEER&X*d%VWNVENNG#~eLoiddU/&*%Nuc~VGGuy3;:3;;;:M~u--GuV%%c%}6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkJJJJQQQQQQQQQQQQQ,h}ghhBhhBhgeeiiawPvvvtvvtvtttttKKKKKvvHHvKttpvtwwHHA5mmmmmmmmI...............", +"kQkV@xxxxx@xxx@@@G#$z%VLVa~7,=7eVLV#FF~~N!L/a/zzV%*VF-RuLuy~G3:;;;::3yxF@-jjcVcFGVkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQXsskQQJQJQJQQQQJkBggihhhhhgeeiioaPwvtvvtttKKttttKKKKKKKKvwePHpHvpHpKSDm5mmmmmII.................", +"|J6E@xxxxxxxxxxx#%z%%%VaRu~L=B=sz}NGFnuVcNucWcoLLV%uF#/V%uc#GF:F+G:;;3yyj--y~LcFuRrQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ4e7BrQkJJrJJkkJ|s7}ggghggeeeeiowPPvtKtttvvtvvttKKKvtKtKKvtHHtvttp5S5S5mmmmmm..I.................", +"k6_%xxxxxxxxxxy#VN%%%%VuRu~-/UX7z}NF~EoVNN!WuWLL!%$G-NuN%LN-3->3GG::0y#F0;FGccRa%irQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQvnw!oiBkk|,shX|7}eihgeo2eeoooPHvvPvvtttvvvvvTvttvvtKtttttttvvHK5S5555mmmmII....I................", +"kr6Exxxxxxxxxx#EE$/%*}%N%--Guz==d*%uuNPNuacac!/&NL~30Gc$%VNF0GF:uF1F#F0;3;:-Fc%R/&kQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQKtnP4wWig7h77}giieigeao22wwHPHPttttvttttvttvvttvvvvHvvvvtvvK55AS55555mmmIII.....................", +"kr6%xxx###yx##uNaV%%z*/#uGF3F~Vdd*EG#Gw/oRaLacPcGu~jF~uLLR!FjF#FGGFyFM:0F;3Fu~$%N}rQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkQkQQQQQkQkkQQkQkkQkQQkkQQQQQQQQQQQQQQQkQkkQkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkQQQQQQQQQQkQQ|QkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQttKTnP4wW2i7}iiiiiie2oa2PPvvtvtttvttKKtKtttvvvHvvHvvvvttKtp5555555mmmII.........................", +"Qk6/y#uyu##yG$RN2/}R/&N#GGFFuu<VdzG3<u!%NVL%&$/~c$#j3u%Voac%~FFuFF@+::FF$G0:3jFyGz6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkkQ|X,XkQQQQ_{,X,|_X,_kkk|)XX,X{|kkQQQQQQQQ|_X,kkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkk_X,|kkQQQQQQQQQ|X,{kQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQKKKKvTnn44wa/ooLooeoo2PHHvvvtttKKvtvttKvtttvttvvtvtttttSSm5m55555mmmmII.........................", +"rQ6VuEFFu~uGuuNao/}~N%VFMF0#uujFV*VGFNoVLN!VU%VcGRVFGN%%WN/=z<<N33:;3y$GN%j0~GFjFc6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQk7b.OXQQQJ|P..TkB.5hk|JJT...5lg|QQQQQQQQQki.q|kkkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJkB.bhkkQQQQQQQQk|f.eQkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQKKttKvTTnn44w2aooooaPPvvvttvKKKKKKKKKKKvvttttKttttppSSA555mmmmmmmmmII.......I...................", +"rrr$G<<;auuFPuN!uRiTPN$@FM0u#FFa/VVFG%B=*%G3FnG4Gc~-GciVaV**d&GcjF;33FG-u$-3Fy@j#crQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJk7O..oJQQQXbI.TJB.5hrkrkT.OCI(AsJQQQQQQQQr^..ikQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQrXCqhrkQQQQQQQQJkf.erJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQKKKKKttTPnnPPP4wWowPvvKttvttKKtKttKKvtttKtDtKptppCS5Dmmmm5mmmmmmmIIII...........................", +"JJrRNVR<F<uNvRRVRLouGu-y@:FuujGN%V!FW&UVLG;33;FccN-3<G&&Ra/=dd&cFu3:FGG#-~F3GuGyNRrQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJrJ7bI.^kk|ki...lrB.bhkQJJT.4s}CI/kQQQQQkJk7.IbTkkQQk|Bgh_QQ|X77XkkQk|X7gs_QkkkQ{s}7X|kk_77,|||X77s|,B_BA.oXkkQ)hg7)kQQJ|sgh_kQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQKKK0tttvvvnnnnPnPTvKtKvKKKKKKKtttKKtKKKpKppDSCA5mA5AS5mmmmmmmmIIII..............................", +"kkkL-ciG3F;uG--~~-o~PN<F0330Fj<G$uu!z**y;:03F0-LVLuGcNL2$unN===Lc-;3yG03Gcc<~<~u$u6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJr7O.f.srJJnOf.lJB.(hrQQJl.Wk{f.oJQQQQQkrk4.TOOskk|_obOOTBkhf..qg||,W5OObnB|k|slbIOAWXkXO5U|{o5..OwTI}f..IT{k}fb..f}|k{Wb.O4{QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDKKKKttvvvvvnvnttttKtKKKKKKtKKKKKKKpppSSC55C5mmm555555m5mmmmIII.................................", +"kk|V-cN!cu<PNnjcGRVw~auyM:0FF}%RN;GEE%~:033yF3F~VeGcVNu~/uc>c&dduF0FF:3jFLuNNN~G-~kQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJ7O.e.2krBbqw.TJX.bhQQJJT.H}2557|QQQQkJkXC.7n.wkkr7bOlCba{lI^fO^,_4Obnnq.fB|sqOAPlbb4|B.bh|o.O^PfOO.}nb.Cw{}bOlPtOb7k}ICn5OiQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDCKKKKKvTvnvPtttKtKKttKptKKKKtKDSpDDSAA55mmm555mmmm5mmmIIIII....................................", +"Q|k/c/W~uNGuG-j~GaR%7zWGF3:33co-cFG0F0:330G;--<-/%/N<-#cu~u--FN%zNFuGFG0-G#ucFF0>G6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJ7b.sCq_JeOoW.lrB.bhQQQkT...I.P,kJQQQQQJo.A|}.CX|JoOq)7L}XC.}BLe{}Ib}_ksq.2k4.fXk|afShB.b7sCOa_J{WIO}|fOek{q.w|J|oIl|W.^_}ohkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQKDKKtv0tvtvvKKKKKKKKptKppSDp55A5D5A55mmmmmmmmmmmmmmmmIIIII......................................", +"kQk%~WWcN-tGFutGW~%UUdcF3MF0GVi/NF33:3:0F3$NLL%Ra/UV<FMFGG-~-;FF/%GuGy-;:<uNVNcjFc6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQrk7O._T.7k^Oh2.TJB.bhQQkJl.(SqbOw_QQQQJk{q.nh7O.eJ|7bOTiXk,lIfah)kP.4|kJko.q)OO}rkkrBX{B.5hiOqXk|rBA.}Jq.ok7b.ei}ii.IB}ICn}XrQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQCDCKDDDKDKKKKKKKtppKpppK5A5mmm5m5mmmmmmmmmmIImmmImmIIIII................I.......................", +"J|kzunoou<<~c<FcLa/d}s%GF3:~--aV~3:0::0MF0%VFca%/LeooGjGGGuuGF;jG/V~c-F::-GG!$uF3~rQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQk7O.{}.wsOf_W.lJB.(hrQJQT.wBBo(bsJQQQkJ}O....O.f_6_LqI.qg|hlOI5W{f.o|kJJg(.hOOhkkJJr6JB.bU2.^kJkJ|^.}kf.Lki.OO.O.b.Og{WCI.fUJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDDC55D5DC5CKKKKpvvvHvtHHSDmmmmmm55mmmmmmmIIIIm5mmI5III.mmI.m..........Im^.......................", +"kQk&LGoeR~GLc#nLNnjN&}dzuF3E-NVG33;:3:333:-u~NaReoLuWUo<4cuu#>:jN2%/#c<3F03uuE%u+c6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJrJ7O.{,5ba.o|2.TrX.OhQJkkl.WrJBA.gQQQQJ|TICpfffO.g|k|Bef.l{rXgnbb7n.4|kkkiOCXb.gkr|k,,_=.5he.f)||kXq.}rS.ok}O.PWwW4Wws{|heAInQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDD5DCDDDCDDKKppppppttptv5Dmmmmmm5mmmmmmmIIIIImA5mm55mmIm5m5CC5ObOIObmS5Sv5ASSAbAb5CbAC.5bAI5.bCC", +"kkkU}&2i&L-u~<-!NL<>u/z&uF~NN/iF;033:30;:>K~aeL%VzVaWUB}uc<juc;><NLLRu##<GFFLN$F+~krQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJr7O.)k4.5bsk2.lkB.5g)))Jl.wXXebOhQQQQksb.iXXXBT.P|alaki.fiTPBsqO}iIC7k|sf.w|n.lBJk}p^7X.bhhb.o_k_oI.}kf.eJXqOL)||iW!{wTek2I^JQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDDDDKKKKKKKKppKppppSpDKK5Ammmmmm55mmmmmmI.I.IImmIIII...I..I............ISI...IIIII.ISS.IIIIIIIIO", +"kkk7%}z/%z/nFj-RLu->c-uuN%L/%-#3M0:3;3j;+3+;c/aac/z%LsB)du-+cNcF+FGF<<~<0-$G--<3;G6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJJk7O.)J}..lJkW.TQsI.DffTXT.Cff.O4|QQQJJw.C{JJJJ}.OsoO5PfI4sqbTnOSs)n.C4wS.fh|hqbfW4COP_B.5U|WO5TwTbOIg|f.okkoIOlWnb.okWO]wq.2QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDDDDKKtKKvtvtppppDKpKpKDKKDD55D5DA555mmmmmmImImIIII.....................I.......................", +"Qkr7a/%/}%U%<><LR-W--Nj-uN!LF3F::::;:;3<ccGF~c~2-2e/}sBU%i~GVNRP<+;::0-#G:F33;;j;-rQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQrJk7bO,J_COi|kWOlJB.I...SBTI..bqWX|rQQJ,CIoJJJrJ)A.2B4b.bls|/COOAi_JX45..Ols|kJ7l...bwXkXOb7|)w5..OPT.}|fOo|r{eSIOOCa_ksTOOOPBJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDDDDKKKttvttvttpKppppKpppDKKKKDDDDADA5mmmm.mmImIm.III...........................................", +"kQQXL!LRizd=%GlV!-<-j~-8F;<<j3:M3:;3;3<Nc~>FcNcaccR%%dz!z=/NGj<N!~jKF+3:3;:-<:;3jurQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkJJ,hhkk|sh{k_Bhsr_hhhhhdkshhhhB|||kQrJ_hhXJQJJk|shsJ)7i},k|kh}iskk|k{h}}h,k|kkJ,7iih||k{hh{k__s}i7{Bh)JhhXk|kkX}i}s_||k)gi7{JQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDDDDKKKttKvvvtvKtppppDDDDDDDDKDDKDDKDDDCDm5mmIIImmm5m.I.........................................", +"Qkk)BecW/%z==%c!~-G>8<jc<;+9;3::;:3:F~$zu-~4~~//aLLNV~-8u%u<3P~LdUcFFj3F~3;G%Nj;>crQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQrJk|k|r|kr||kkk|Jk6krrJkJrrrrrkkkkJQQQrrkkJQkJk||J|||Jkkkk_J|kJkkkkkk__|rJkk||kJJJrrkkrkJk6k||kJJkk|rkJrk6|k|kJ|kkk|Jkkr|k|kkJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDDDDKKKKvFtFvvTTHPtppppKDDDKDDDpKpDKDDDKDDD5C55mmmmm5m..........................................", +"QkkBBUWL}}hs=UoRc<~j-c;NL-1;:j:::;F~-L&7VR//ViU&z%LF1:tVLc-G~uL7=dd%yjFMFjF-G!Fj>-rQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkJ|rkkkJk|kkkkk|kkJkrJkkk|kk|kk|kkkkkJkJkkk|kkkkkkkkk|kkkkkk_|kkkJkkkkJkkkkkkrJkkJkkkrJ6kkJ|k|JkkJkkJkkkkk|JkJ|kkkkkkkkk|kkkkQQkkQkkQkQkQkQkQQkkkkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQCDKDKKKKvvvTTn44wWPvpKDDKpDDDDDDDDAKDKKDKDDKDDDDC5555mI.........................................", +"krr7ssU}iR/Uss!4W~c-:3+FNWK;;;;+3F-uLUdaPWR2cWR/}L-j-cu/uuW/N}*&d7UU%~;+;+FF>N/F+~6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJkkJXiP2s||J|||krk_kkJkk_k|k|g7h}Bi,|r|kkkrk||kk|7}||||||kkJJs}X/)_kkkkJkkkkJkkrkkkJkkk||{iBkk|kk|k|kkkksi_||kihkkkk|||k|}hkkkk|kkkkkkQkQkk|}hk|k,o_kkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDDDCKKtKvvFP4wuwW22wHKKKDppDDDDADDDDDDDKDKKDKDpDDDDC55mIO.......................................", +"JkkdhXBszLw!&=/n<8L#::j#Lc;33:;;jj-R}zU!!!4N}*7%N4u%}z%RaVi%zdUU*&}%}%~;[;;1;4z%c!kQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkJkBln}lq)|{Bk||k,)||,{|Jk|k|4oawXi_|),Jkk){k|krsq}J{Bkkkk{_|e4h^h,|kk),k|rkkk){|kk)Bk),kBfdX|rk|X{J||,X/P||X|f7k_B|kk|B,^gkk||_||k||_,|kkk{^}|_Bhf_kJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDDDKKtvvvPwaaW2aWWa2wwHKKSDpDDDADKDDDDDpDpDpDDSpDDpDDDACII......................................", +"kkkXss=ss%RRW%sRj84%V~>8FFF:::++:-Vz%%/!/}z&U7}i4Wz}z%L/%ziL/7dzUzi}%iL~<F1;j-!/%z6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQrkkW4)J|7,iff4_2l^^,}f^hPh)nU^aCAo2i^^fs)4f^l7||lb}e^f2{4^}khCAaC^f7)offo|kkB4^q7XSTq4^fih5lfn{s4^fU)2fffosT^^CX}ffn|sl^lqsr,TU}4,n7g^f4,o^aAh}f^^P|JkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDD;Ktv-~wa/%eaaaa2a2PwPPvKKKDDKDADDDDDDDAADDpDppDpDpDDDDAC5.....................................", +"QrkXBssU7}a}!nzsin-LU&~<F0:::;;+luzL/L8n/UsUzi}/i}&/iz&iL/%i/}}}z%V}}%/LL!8jjLNGj~kQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQkJXAs||kk7qssC7^ahq7Twi7lXhf7f7q7wa4PXfea4XiOhJk42}fsUq7^e_J)^}alBT!el7}qB||P4ho^7qXoqBWne^hhf}TWh2nilBhqgloXof7qghq}^oXeAJJ_li^lin7f7sf}TW7f}f7XlaQkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQDKtvPPi7h7}iig}aawoiWwwPPHvttpDDDDDADADDDDApDADDDSDDDADADDAmI...................................", +"QQr,sBss}o/7z2c}s}!zUd&cj33M@j<NRLi!wc-aUUU}io27s7}i/iuj~!/i/i/iiRL}}/NRu-+>1jcu8~kQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJJXCh||XXWo|{S}AXXfX}fTg^rgl7^hfsl}^7|^7qhJh(_k_^}Pe|Xq}fXJrBfhniJT}fq^^^)ksb^^^4o4_aW|w2woJ,^eb^^^WleJ{f}fB|i4w]^^f}5{|}TkkJwl4^^haw|_^}Shglo4k|n}kJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQtPWi7sX)))BhhXXge2ogoaWwW2wPPvKpppDDADADDKDDKDDAADDADADADADDAAbO................................", +"kJJ7}*hUzRw2ozLWUsUUdzU%~<-~Fc%z/z%iLWRzUULWi!/%RLi//!j>>-R!LNwuRa%%Ncc~81>+[[1++c6QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ|kJTPs}qiafsalsAkhf7Pefifhl4inglBq7fs)qXfohl^kk|Ahwlswn7f||khfs^h)^hl47a}k|XC/}ws4o|ni_liTlhalhqe}WsPPsWf7Cih^22lheosbisfaJkkeAs^w|e^7ol7^XowL^hibskQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQiigB))))){{){))X7eooeeeeoo2w2wHvpKDCmAAADACADDA5C5CC5CCmAAppAAAC5I..............................", +"Jk6L4RiziLw-4WLRzdhhU7U}z}~uV%zz&}~>~}//}L82ziw8W!ucRj11>luca!8W!!!8[+>19]''][1']nrQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQrkJB4^ng__4^wX72|7oXnl7Bll4}iizosW7W)BW|7^TlaJJ,4|Xn^2X}oJ|J7aXWXXWXsT^2)Jkk}ll/_WU_wh)w7ww^4B|/^lg_hl^4a|ef4P7{4^wBJe^n47|JJha_osk)W^2Bh!{o}B4^wn_kkkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQshs)))))))))_))))hieaigigeeaao2PPHtKACDDCD5AAACCCC5Cm555DtTpAADAC555I...........................", +"kJJa8--Wc4-8-84/dUU7UULRULuucVzzz/>>RLc~~4~~!n<W~~>c8++++>8<-->jj1'11[[[''(]]11[1-rQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJJJJ|_kJJJk_JJkrJJkJ|kkJ||_kk|kJJkJkkkrhAaW^s|Jk|JkJ|kJkJkJ|kk|J|kJJJk_kJrkJJ_{JJ_JJkJJk6J||JkkJk||JJkk|kk6|||Jk|_|r|J_|kkJJJJJkkrJk|_|kJ|kkkJk||krJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQBBXXXXXXX))))))))Xhioegggiggeo2wwPvKKDKDDCAC5DD55555C559Ap^DCCCCCA^fAb..........................", +"JJJW888n-88n--c}U}/i}!~WR88>8L/LL~>8c888>--j>>>>f[1>+[['++++[[[9[]''[[[](((](1C[94JJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJJJJJJJkJJkkrkJJJkrJ|kJJkJkJJJkJJkJJJJJJ72o,kkkJ|JkJJJJJJJJJJJJJJJJJJJrrJJJJkJkkJJkJkJJkJJJJJJJkkJJJJkkJkJJJkJkJJkJJJJJkJJJrJJJJJJJJJJJrJJJJJJkJJkJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQXBXXXXXXXX)))))X){)B7hhgigghge2wawPTvvKKKKKDDDDDDDKKDmCDDDKADDDDDpHHpDACC.......................", +"JJJWf8j8n888888!LRu!u4888j8+3F88>+>++[++1j>11[>[[['['['[[[+''[[][''''[['](((((OO(lrQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQrJJJJJJJJJJJkJkkJJJJJkJkkJkkJJJJkJJJJJJk_JkJJk|kJJJJJJkrJJJJJJkJJJJkrJkJkJ|JJkJJJJJJkkJJ|J|kk|JJJkJJJJJkkkkJkkkJJJkJJJkJJQJJJJrkJJJJJkJJJkJkJkJJJJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQBBBBBBBXXXXXXXXXXXBBshgggeggge2ww4TTTvtttKttvvKtvnW4HtKDDpKpKKtK^tvHt^DDAC......................", +"JJJW]f8j888888>838>8j1[>++[+[[[']'[[[[['[999']'''']'[[[[[[[[''['[('''9[](((CO.OOOlJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQrJJJJJJJJJJJJJJJkkJJJJJkJkJkJJJJkrJJkJJkkkkkJJkJJ|JJJJJJkJJJJJJkJJJJJJJJJJJJJJJkJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJrQQQJJJJJrJrJJJJJkJJJJJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQBsBBBBBBBBBXBXXBXXXBBBhgeegggo2w4PFPT<TnTnnnnPPPwaiiaPPtHTvvvTTHvvHn^tt^pS5mII..................", +"krk!A]8>>j88>[[[+[:>'1[[[[+[[['''''''(](((]](]]''''[[+[']((]''+[['[''119]9](((OO.lkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJJJrJrJJJJQQJJJJJJJJJJJJJJJJJJJQQJrJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJrJJQQQQQQQQQQJQQJQQQQQJQJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQsshhsssBsBBBBsBBBBBBBBsgeoeegoa4nPTTTPTvPPa22a2aoegieawwHwPTvHnnPHtHHvHtpKAC5m5mIO..............", +"krkW9O9>1qff((](]'[']]O(][['''']']]((OO(O(b](((('''['[['(O(]((f>'['['11]C'C(O(O(Il|QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJQQQQQQQQQQQQrQrJQJJJQQQQQQQQQQJJJJJJJJJJJJJJQJQQQQQQQQQQQQQQQQQQQQQQJJJJJJJJJJJJJrJrJJQQJJrJJJJJJJJJJJJJJJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQshssshsBsssBBBsBssBBBBsgg2eee22PPvPvnnnPTai}i}iigghhggeew2wPnHHPnHlvlvv^pDD5CmmmImIO5O..........", +"6kJ}a!2R!!!WwWWWWWW2WWwW!W!!2!2!!2!WWWWcWcWWWWWu!!!!uRR!!!2R2WRL!R!R!R!!W!2WWWWWWokQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJQJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQJJrJrQJQQQQQQQQQQQQQJrJJJJJJJJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQshshshhhhBsssBhBBssssBsgg22oeaWwPnPPnPPP4egg77h7hhshhhggee24PPPwPHl^HHHt^KKAC5C55555ACCOOI......", +"JJ6|6J|66JJJkkJJJJJkkJJkJJJ6JJJJJJJJJJJJJJJkJJJJ66rJJJJJJrJJJJJJ6rJ6rJ6JJJJJrkJkJk|QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQrQQrQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQhhhhssshshhshshshhhhshhhge2ee2aWwwcwWuaWo}7hgh7hhhhshh7gigeo22wwPHvvvHPHptpDC5CCCCC5DSSACCI.....", +"J6JJJ6JJJrJJJJJJJJJJJrJJr6JJrJJJJJrJJJrJJJJJJJJJJJJJkJJJJJJJJJkJJJJJJJJJJJJJJJJkJkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQhhhhhhhhhshhhshBhhsshshhgeooeaa2WW222oaoighhhshhhshhhhh7ggioo2wWwPv^vHH^tpKDDADADACD^H^v^SAb....", +"JJJJJJJJJJJJJJrJrJJJJrrJJ6rJrrrJJJJrJJJJJJJJJJJJJJJJJJJJJJJJkJJJJJJJJJJkJJJJJJJkJkQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQgghghhhhhhhhhhhhhhhhhhhhgeeeeee2aaaooeeei7hh7hhhhhhhhhhh7g}iieoa2PHHHHH^tt^pDDADKAADtHHPPPPS....", +"JJrJJJrJrJrJJJJJJJJJJJJJJJJJJJJJJrJJJJJJJJJJJJJJJJJJJJJJJJJrJJJJJJJJQJJJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ7hgggghghghhhhhhhhhhhhhhgieiieeeoaeeiiiig7hh7hhhhghh7777ggggigeeoW444PPHHttHKDKSttp^Hw2wHHvS55bb", +"JJJrJrJJJJJJJJJJJJJJJJJJJJJJJJQrJQQQQQQQQQQQJrJJJJJrJJrrJJJJJrJJJJQQQQrrrrQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ", +"rJJJJJJJJJrQQQQQQQQJJJJJJQJQQQQQQQQQQQQQQQQQQQQQJJrJrrJQQQQJJJJJQQJQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ"}; +#endif \ No newline at end of file
new file mode 100644 --- /dev/null +++ b/packages/hal/powerpc/csb281/current/src/font.h @@ -0,0 +1,161 @@ +//========================================================================== +// +// font.h +// +// LCD display font +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// Copyright (C) 2003 Gary Thomas +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Date: 2001-02-25 +// Description: Simple LCD font +//####DESCRIPTIONEND#### + +#ifndef _LCD_FONT_H_ +#define _LCD_FONT_H_ + +// 8x8 Font - from Helios + +#define FIRST_CHAR 0x20 +#define LAST_CHAR 0x7F +#define FONT_HEIGHT 8 +#define FONT_WIDTH 8 +#define CURSOR_ON 0x7F +#define CURSOR_OFF 0x20 +static char font_table[LAST_CHAR-FIRST_CHAR+1][8] = +{ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* */ + { 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x00 }, /* ! */ + { 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* " */ + { 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00 }, /* # */ + { 0x30, 0xFC, 0x16, 0x7C, 0xD0, 0x7E, 0x18, 0x00 }, /* $ */ + { 0x06, 0x66, 0x30, 0x18, 0x0C, 0x66, 0x60, 0x00 }, /* % */ + { 0x1C, 0x36, 0x36, 0x1C, 0xB6, 0x66, 0xDC, 0x00 }, /* & */ + { 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* ' */ + { 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00 }, /* ( */ + { 0x0C, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00 }, /* ) */ + { 0x00, 0x18, 0x7E, 0x3C, 0x7E, 0x18, 0x00, 0x00 }, /* * */ + { 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00 }, /* + */ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x0C }, /* , */ + { 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00 }, /* - */ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00 }, /* . */ + { 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00 }, /* / */ + { 0x3C, 0x66, 0x76, 0x7E, 0x6E, 0x66, 0x3C, 0x00 }, /* 0 */ + { 0x18, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00 }, /* 1 */ + { 0x3C, 0x66, 0x60, 0x30, 0x18, 0x0C, 0x7E, 0x00 }, /* 2 */ + { 0x3C, 0x66, 0x60, 0x38, 0x60, 0x66, 0x3C, 0x00 }, /* 3 */ + { 0x30, 0x38, 0x3C, 0x36, 0x7E, 0x30, 0x30, 0x00 }, /* 4 */ + { 0x7E, 0x06, 0x3E, 0x60, 0x60, 0x66, 0x3C, 0x00 }, /* 5 */ + { 0x38, 0x0C, 0x06, 0x3E, 0x66, 0x66, 0x3C, 0x00 }, /* 6 */ + { 0x7E, 0x60, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00 }, /* 7 */ + { 0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0x00 }, /* 8 */ + { 0x3C, 0x66, 0x66, 0x7C, 0x60, 0x30, 0x1C, 0x00 }, /* 9 */ + { 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00 }, /* : */ + { 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x0C }, /* ; */ + { 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x00 }, /* < */ + { 0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x00 }, /* = */ + { 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x00 }, /* > */ + { 0x3C, 0x66, 0x30, 0x18, 0x18, 0x00, 0x18, 0x00 }, /* ? */ + { 0x3C, 0x66, 0x76, 0x56, 0x76, 0x06, 0x3C, 0x00 }, /* @ */ + { 0x3C, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00 }, /* A */ + { 0x3E, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3E, 0x00 }, /* B */ + { 0x3C, 0x66, 0x06, 0x06, 0x06, 0x66, 0x3C, 0x00 }, /* C */ + { 0x1E, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1E, 0x00 }, /* D */ + { 0x7E, 0x06, 0x06, 0x3E, 0x06, 0x06, 0x7E, 0x00 }, /* E */ + { 0x7E, 0x06, 0x06, 0x3E, 0x06, 0x06, 0x06, 0x00 }, /* F */ + { 0x3C, 0x66, 0x06, 0x76, 0x66, 0x66, 0x3C, 0x00 }, /* G */ + { 0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00 }, /* H */ + { 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00 }, /* I */ + { 0x7C, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1C, 0x00 }, /* J */ + { 0x66, 0x36, 0x1E, 0x0E, 0x1E, 0x36, 0x66, 0x00 }, /* K */ + { 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x7E, 0x00 }, /* L */ + { 0xC6, 0xEE, 0xFE, 0xD6, 0xD6, 0xC6, 0xC6, 0x00 }, /* M */ + { 0x66, 0x66, 0x6E, 0x7E, 0x76, 0x66, 0x66, 0x00 }, /* N */ + { 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00 }, /* O */ + { 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x06, 0x00 }, /* P */ + { 0x3C, 0x66, 0x66, 0x66, 0x56, 0x36, 0x6C, 0x00 }, /* Q */ + { 0x3E, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x66, 0x00 }, /* R */ + { 0x3C, 0x66, 0x06, 0x3C, 0x60, 0x66, 0x3C, 0x00 }, /* S */ + { 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00 }, /* T */ + { 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00 }, /* U */ + { 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00 }, /* V */ + { 0xC6, 0xC6, 0xD6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00 }, /* W */ + { 0x66, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x66, 0x00 }, /* X */ + { 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x00 }, /* Y */ + { 0x7E, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x7E, 0x00 }, /* Z */ + { 0x3E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x3E, 0x00 }, /* [ */ + { 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00, 0x00 }, /* \ */ + { 0x7C, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7C, 0x00 }, /* ] */ + { 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* ^ */ + { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF }, /* _ */ + { 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* ` */ + { 0x00, 0x00, 0x3C, 0x60, 0x7C, 0x66, 0x7C, 0x00 }, /* a */ + { 0x06, 0x06, 0x3E, 0x66, 0x66, 0x66, 0x3E, 0x00 }, /* b */ + { 0x00, 0x00, 0x3C, 0x66, 0x06, 0x66, 0x3C, 0x00 }, /* c */ + { 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x7C, 0x00 }, /* d */ + { 0x00, 0x00, 0x3C, 0x66, 0x7E, 0x06, 0x3C, 0x00 }, /* e */ + { 0x38, 0x0C, 0x0C, 0x3E, 0x0C, 0x0C, 0x0C, 0x00 }, /* f */ + { 0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x3C }, /* g */ + { 0x06, 0x06, 0x3E, 0x66, 0x66, 0x66, 0x66, 0x00 }, /* h */ + { 0x18, 0x00, 0x1C, 0x18, 0x18, 0x18, 0x3C, 0x00 }, /* i */ + { 0x18, 0x00, 0x1C, 0x18, 0x18, 0x18, 0x18, 0x0E }, /* j */ + { 0x06, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x00 }, /* k */ + { 0x1C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00 }, /* l */ + { 0x00, 0x00, 0x6C, 0xFE, 0xD6, 0xD6, 0xC6, 0x00 }, /* m */ + { 0x00, 0x00, 0x3E, 0x66, 0x66, 0x66, 0x66, 0x00 }, /* n */ + { 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00 }, /* o */ + { 0x00, 0x00, 0x3E, 0x66, 0x66, 0x3E, 0x06, 0x06 }, /* p */ + { 0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C, 0x60, 0xE0 }, /* q */ + { 0x00, 0x00, 0x36, 0x6E, 0x06, 0x06, 0x06, 0x00 }, /* r */ + { 0x00, 0x00, 0x7C, 0x06, 0x3C, 0x60, 0x3E, 0x00 }, /* s */ + { 0x0C, 0x0C, 0x3E, 0x0C, 0x0C, 0x0C, 0x38, 0x00 }, /* t */ + { 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x00 }, /* u */ + { 0x00, 0x00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00 }, /* v */ + { 0x00, 0x00, 0xC6, 0xD6, 0xD6, 0xFE, 0x6C, 0x00 }, /* w */ + { 0x00, 0x00, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x00 }, /* x */ + { 0x00, 0x00, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x3C }, /* y */ + { 0x00, 0x00, 0x7E, 0x30, 0x18, 0x0C, 0x7E, 0x00 }, /* z */ + { 0x30, 0x18, 0x18, 0x0E, 0x18, 0x18, 0x30, 0x00 }, /* { */ + { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00 }, /* | */ + { 0x0C, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0C, 0x00 }, /* } */ + { 0x8C, 0xD6, 0x62, 0x00, 0x00, 0x00, 0x00, 0x00 }, /* ~ */ + { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF } /* Block cursor */ +}; + +#endif // _LCD_FONT_H_
--- a/packages/hal/powerpc/csb281/current/src/hal_aux.c +++ b/packages/hal/powerpc/csb281/current/src/hal_aux.c @@ -55,6 +55,7 @@ #include <pkgconf/io_pci.h> #include <cyg/infra/cyg_type.h> +#include <cyg/infra/diag.h> #include <cyg/hal/hal_mem.h> // HAL memory definitions #include <cyg/hal/ppc_regs.h> // Platform registers #include <cyg/hal/hal_if.h> // hal_if_init @@ -65,6 +66,10 @@ #include <cyg/hal/hal_io.h> // I/O macros #include CYGHWR_MEMORY_LAYOUT_H +// Functions defined in this module +void _csb281_fs6377_init(int mode); +static void _csb281_i2c_init(void); + // The memory map is weakly defined, allowing the application to redefine // it if necessary. The regions defined below are the minimum requirements. CYGARC_MEMDESC_TABLE CYGBLD_ATTRIB_WEAK = { @@ -117,7 +122,10 @@ hal_platform_init(void) HAL_WRITE_UINT32(_CSB281_BCSR, _zero_bit(bcsr, _CSB281_BCSR_PRESET)); HAL_WRITE_UINT32(_CSB281_BCSR, _one_bit(bcsr, _CSB281_BCSR_PRESET)); _csb281_i2c_init(); - _csb281_fs6377_init(); + _csb281_fs6377_init(0); +#endif +#ifdef CYGSEM_CSB281_LCD_COMM + lcd_comm_init(); #endif _csb281_pci_init(); } @@ -607,13 +615,25 @@ static unsigned char _fs6377_init_data[] 0x94, 0x32, 0x80, 0xD4, 0x56, 0xF6, 0xF6, 0xE0 }; -static void -_csb281_fs6377_init(void) +// Setup for CRT mode 640x480 @75Hz +static unsigned char _fs6377_init_data_CRT[] = { + 0x10, 0x3b, 0x49, 0x03, 0x4B, 0x80, 0x32, 0x80, + 0x94, 0x32, 0x80, 0xD4, 0x66, 0xF6, 0xF6, 0xE0 +}; + +void +_csb281_fs6377_init(int mode) { int reg; + unsigned char *data; + if (mode) { + data = _fs6377_init_data_CRT; + } else { + data = _fs6377_init_data; + } for (reg = 0; reg < 16; reg++) { - if (_csb281_i2c_write_reg(_CSB281_FS6377_DEV, reg, _fs6377_init_data[reg]) < 0) { + if (_csb281_i2c_write_reg(_CSB281_FS6377_DEV, reg, *data++) < 0) { diag_printf("** Can't write FS6377 register %d\n", reg); return; } @@ -637,6 +657,7 @@ static void HAL_WRITE_UINT32(_CSB281_BCSR, bcsr); } +static void _led_delay(int len) { int ctr, limit; @@ -649,6 +670,7 @@ static void } } +void _csb281_led(int val) { int bit, ctr;
new file mode 100644 --- /dev/null +++ b/packages/hal/powerpc/csb281/current/src/lcd_support.c @@ -0,0 +1,1396 @@ +//========================================================================== +// +// Lcd_support.c +// +// Cogent CSB281 - LCD/CRT support routines +// +//========================================================================== +//####ECOSGPLCOPYRIGHTBEGIN#### +// ------------------------------------------- +// This file is part of eCos, the Embedded Configurable Operating System. +// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +// Copyright (C) 2003 Gary Thomas +// +// eCos is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free +// Software Foundation; either version 2 or (at your option) any later version. +// +// eCos is distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +// for more details. +// +// You should have received a copy of the GNU General Public License along +// with eCos; if not, write to the Free Software Foundation, Inc., +// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// +// As a special exception, if other files instantiate templates or use macros +// or inline functions from this file, or you compile this file and link it +// with other works to produce a work based on this file, this file does not +// by itself cause the resulting work to be covered by the GNU General Public +// License. However the source code for this file must still be made available +// in accordance with section (3) of the GNU General Public License. +// +// This exception does not invalidate any other reasons why a work based on +// this file might be covered by the GNU General Public License. +// +// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +// at http://sources.redhat.com/ecos/ecos-license/ +// ------------------------------------------- +//####ECOSGPLCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas +// Date: 2001-11-03 +// Description: Simple LCD support +//####DESCRIPTIONEND#### + +#include <pkgconf/hal.h> + +#include <cyg/infra/diag.h> +#include <cyg/hal/hal_io.h> // IO macros +#include <cyg/hal/hal_if.h> // Virtual vector support +#include <cyg/hal/hal_arch.h> // Register state info +#include <cyg/hal/hal_intr.h> // HAL interrupt macros + +#include <cyg/hal/lcd_support.h> +#include <cyg/hal/hal_cache.h> + +#include <string.h> + +#ifdef CYGPKG_ISOINFRA +# include <pkgconf/isoinfra.h> +# ifdef CYGINT_ISO_STDIO_FORMATTED_IO +# include <stdio.h> // sscanf +# endif +#endif + +#ifndef FALSE +#define FALSE 0 +#define TRUE 1 +#endif + +// Logical layout +#define LCD_WIDTH 640 +#define LCD_HEIGHT 480 +#define LCD_DEPTH 16 + +#define RGB_RED(x) (((x)&0x1F)<<11) +#define RGB_GREEN(x) (((x)&0x3F)<<5) +#define RGB_BLUE(x) (((x)&0x1F)<<0) + +// Black on light blue +static int bg = RGB_RED(0x1F) | RGB_GREEN(0x3F) | RGB_BLUE(0x1F); +static int fg = RGB_RED(0) | RGB_GREEN(0) | RGB_BLUE(0); + +static struct lcd_info lcd; + +int sed135x_init(int depth, struct lcd_info *info); + +// Compute the location for a pixel within the framebuffer +static cyg_uint16 * +lcd_fb(int row, int col) +{ + cyg_uint16 *res = (cyg_uint16 *)((char *)lcd.fb+(row*lcd.rlen)+(col*lcd.stride)); + return res; +} + +void +lcd_on(bool enable) +{ + static bool on = false; + + if (enable) { + if (!on) { + (*lcd.on)(); + } + on = true; + } else { +// (*lcd.off)(); + } +} + +// Initialize LCD hardware + +void +lcd_init(int depth) +{ + sed135x_init(depth, &lcd); +} + +// Get information about the frame buffer +int +lcd_getinfo(struct lcd_info *info) +{ + if (lcd.bpp == 0) { + return 0; // LCD not initialized + } + *info = lcd; + return 1; // Information valid +} + +// Clear screen +void +lcd_clear(void) +{ +#if 0 + cyg_uint32 *fb_row0, *fb_rown; + cyg_uint32 _bg = (bg<<16)|bg; + + fb_row0 = lcd_fb(0, 0); + fb_rown = lcd_fb(lcd_height, 0); + while (fb_row0 != fb_rown) { + *fb_row0++ = _bg; + } +#endif +} + +#ifdef CYGSEM_CSB281_LCD_COMM + +// +// Additional support for LCD/Keyboard as 'console' device +// + +#ifdef CYGOPT_CSB281_LCD_COMM_LOGO +#include "banner.xpm" +#endif +#include "font.h" + +// Virtual screen info +static int curX = 0; // Last used position +static int curY = 0; +//static int width = LCD_WIDTH / (FONT_WIDTH*NIBBLES_PER_PIXEL); +//static int height = LCD_HEIGHT / (FONT_HEIGHT*SCREEN_SCALE); + +#define SCREEN_PAN 20 +#define SCREEN_WIDTH 80 +#define SCREEN_HEIGHT (LCD_HEIGHT/FONT_HEIGHT) +#define VISIBLE_SCREEN_WIDTH (LCD_WIDTH/FONT_WIDTH) +#define VISIBLE_SCREEN_HEIGHT (LCD_HEIGHT/FONT_HEIGHT) +static char screen[SCREEN_HEIGHT][SCREEN_WIDTH]; +static int screen_height = SCREEN_HEIGHT; +static int screen_width = SCREEN_WIDTH; +static int screen_pan = 0; + +// Usable area on screen [logical pixel rows] +static int screen_start = 0; +static int screen_end = LCD_HEIGHT/FONT_HEIGHT; + +static bool cursor_enable = true; + +// Functions +static void lcd_drawc(cyg_int8 c, int x, int y); + +// Note: val is a 16 bit, RGB555 value which must be mapped +// onto a 12 bit value. +#define RED(v) ((v>>12) & 0x0F) +#define GREEN(v) ((v>>7) & 0x0F) +#define BLUE(v) ((v>>1) & 0x0F) + +static void +set_pixel(int row, int col, unsigned short val) +{ + unsigned short *pix = (unsigned short *)lcd_fb(row, col); + *pix = _le16(val); +} + +static int +_hexdigit(char c) +{ + if ((c >= '0') && (c <= '9')) { + return c - '0'; + } else { + if ((c >= 'A') && (c <= 'F')) { + return (c - 'A') + 0x0A; + } else { + if ((c >= 'a') && (c <= 'f')) { + return (c - 'a') + 0x0a; + } + } + } + + return 0; +} + +static int +_hex(char *cp) +{ + return (_hexdigit(*cp)<<4) | _hexdigit(*(cp+1)); +} + +static unsigned short +parse_color(char *cp) +{ + int red, green, blue; + + while (*cp && (*cp != 'c')) cp++; + if (cp) { + cp += 2; + if (*cp == '#') { + red = _hex(cp+1); + green = _hex(cp+3); + blue = _hex(cp+5); +#define USE_RGB565 +#ifdef USE_RGB565 + return RGB_RED(red>>3) | RGB_GREEN(green>>2) | RGB_BLUE(blue>>3); +#else + return RGB_RED(red>>3) | RGB_GREEN(green>>3) | RGB_BLUE(blue>>3); +#endif + } else { + // Should be "None" + return 0xFFFF; + } + } else { + return 0xFFFF; + } +} + +#ifndef CYGINT_ISO_STDIO_FORMATTED_IO +static int +get_int(unsigned char **_cp) +{ + char *cp = *_cp; + char c; + int val = 0; + + while ((c = *cp++) && (c != ' ')) { + if ((c >= '0') && (c <= '9')) { + val = val * 10 + (c - '0'); + } else { + return -1; + } + } + *_cp = cp; + return val; +} +#endif + +#ifdef CYGOPT_CSB281_LCD_COMM_LOGO +static int +show_xpm(char *xpm[], int screen_pos) +{ + int i, row, col, offset; + unsigned char *cp; + int nrows, ncols, nclrs, cwid; + unsigned short colors[256]; // Mapped by character index + short color_value, color_index; +//#define HORRIBLY_SLOW_COLOR_MAPPING +#ifdef HORRIBLY_SLOW_COLOR_MAPPING + bool color_match; + short cmap[256][2]; + int j; +#else + // Caution - this is very GIMP specific + short cmap[256][3]; // Enough room for 256 colors + short cmap_col, cmap_row; + unsigned char std_cmap[] = " .+"; +#endif + + cp = xpm[0]; +#ifdef CYGINT_ISO_STDIO_FORMATTED_IO + if (sscanf(cp, "%d %d %d %d", &ncols, &nrows, &nclrs, &cwid) != 4) { +#else + if (((ncols = get_int(&cp)) < 0) || + ((nrows = get_int(&cp)) < 0) || + ((nclrs = get_int(&cp)) < 0) || + ((cwid = get_int(&cp)) < 0)) { + +#endif + diag_printf("Can't parse XPM data, sorry\n"); + return 0; + } +// diag_printf("%d rows, %d cols, %d colors %d chars/pixel\n", nrows, ncols, nclrs, cwid); + if (cwid > 2) { + diag_printf("Color map is too wide - %d\n", cwid); + return 0; + } + + for (i = 0; i < 256; i++) { + colors[i] = 0x0000; +#ifdef HORRIBLY_SLOW_COLOR_MAPPING + cmap[i][0] = 0; cmap[i][1] = 0; +#else + cmap[i][0] = 0; cmap[i][1] = 0; cmap[i][2] = 0; +#endif + } + color_index = 0; + for (i = 0; i < nclrs; i++) { + cp = xpm[i+1]; +#ifdef HORRIBLY_SLOW_COLOR_MAPPING + for (j = 0; j < cwid; j++) { + cmap[color_index][j] = cp[j]; + } +#else + if (cwid == 1) { + cmap_col = 0; + } else { + for (cmap_col = 0; cmap_col < 3; cmap_col++) { + if (cp[1] == std_cmap[cmap_col]) { + break; + } + } + } + cmap_row = *cp; + cmap[cmap_row][cmap_col] = color_index; +#endif + color_value = parse_color(cp+cwid); + colors[color_index++] = color_value; +// diag_printf("Color[%d] = %04x\n", color_index-1, colors[color_index-1]); + } + +#ifdef CYGOPT_CSB281_LCD_COMM_LOGO_TOP + offset = screen_pos; +#else + offset = screen_pos-nrows; +#endif + for (row = 0; row < nrows; row++) { + cp = xpm[nclrs+1+row]; + for (col = 0; col < ncols; col++) { +#ifdef HORRIBLY_SLOW_COLOR_MAPPING + // Horrible, but portable, way to map colors + for (color_index = 0; color_index < nclrs; color_index++) { + color_match = true; + for (j = 0; j < cwid; j++) { + if (cmap[color_index][j] != cp[j]) { + color_match = false; + } + } + if (color_match) { + break; + } + } +#else + if (cwid == 1) { + cmap_col = 0; + } else { + for (cmap_col = 0; cmap_col < 3; cmap_col++) { + if (cp[1] == std_cmap[cmap_col]) { + break; + } + } + } + cmap_row = *cp; + color_index = cmap[cmap_row][cmap_col]; +#endif + set_pixel(row+offset, col, colors[color_index]); + cp += cwid; + } + } +#ifdef CYGOPT_CSB281_LCD_COMM_LOGO_TOP + screen_start = (nrows + (FONT_HEIGHT-1))/FONT_HEIGHT; + screen_end = LCD_HEIGHT/FONT_HEIGHT; + return offset+nrows; +#else + screen_start = 0; + screen_height = offset / FONT_HEIGHT; + screen_end = screen_height; + return offset; +#endif +} +#endif + +void +lcd_screen_clear(void) +{ + int row, col, pos; + + for (row = 0; row < screen_height; row++) { + for (col = 0; col < screen_width; col++) { + screen[row][col] = ' '; + lcd_drawc(' ', col, row); + } + } +#ifdef CYGOPT_CSB281_LCD_COMM_LOGO + // Note: Row 0 seems to wrap incorrectly +#ifdef CYGOPT_CSB281_LCD_COMM_LOGO_TOP + pos = 0; +#else + pos = (LCD_HEIGHT-1); +#endif + show_xpm(banner_xpm, pos); +#endif // CYGOPT_CSB281_LCD_COMM_LOGO + curX = 0; curY = screen_start; + if (cursor_enable) { + lcd_drawc(CURSOR_ON, curX-screen_pan, curY); + } +} + +// Position cursor +void +lcd_moveto(int X, int Y) +{ + if (cursor_enable) { + lcd_drawc(screen[curY][curX], curX-screen_pan, curY); + } + if (X < 0) X = 0; + if (X >= screen_width) X = screen_width-1; + curX = X; + if (Y < screen_start) Y = screen_start; + if (Y >= screen_height) Y = screen_height-1; + curY = Y; + if (cursor_enable) { + lcd_drawc(CURSOR_ON, curX-screen_pan, curY); + } +} + +// Render a character at position (X,Y) with current background/foreground +static void +lcd_drawc(cyg_int8 c, int x, int y) +{ + cyg_uint8 bits; + int l, p; + int xoff, yoff; + + if ((x < 0) || (x >= VISIBLE_SCREEN_WIDTH) || + (y < 0) || (y >= screen_height)) return; + for (l = 0; l < FONT_HEIGHT; l++) { + bits = font_table[c-FIRST_CHAR][l]; + yoff = y*FONT_HEIGHT + l; + xoff = x*FONT_HEIGHT; + for (p = 0; p < FONT_WIDTH; p++) { + set_pixel(yoff, xoff + p, (bits & 0x01) ? fg : bg); + bits >>= 1; + } + } +} + +static void +lcd_refresh(void) +{ + int row, col; + + for (row = screen_start; row < screen_height; row++) { + for (col = 0; col < VISIBLE_SCREEN_WIDTH; col++) { + if ((col+screen_pan) < screen_width) { + lcd_drawc(screen[row][col+screen_pan], col, row); + } else { + lcd_drawc(' ', col, row); + } + } + } + if (cursor_enable) { + lcd_drawc(CURSOR_ON, curX-screen_pan, curY); + } +} + +static void +lcd_scroll(void) +{ + int col; + cyg_uint8 *c1; + cyg_uint32 *lc0, *lc1, *lcn; + cyg_uint16 *fb_row0, *fb_row1, *fb_rown; + + // First scroll up the virtual screen +#if ((SCREEN_WIDTH%4) != 0) +#error Scroll code optimized for screen with multiple of 4 columns +#endif + lc0 = (cyg_uint32 *)&screen[0][0]; + lc1 = (cyg_uint32 *)&screen[1][0]; + lcn = (cyg_uint32 *)&screen[screen_height][0]; + while (lc1 != lcn) { + *lc0++ = *lc1++; + } + c1 = &screen[screen_height-1][0]; + for (col = 0; col < screen_width; col++) { + *c1++ = 0x20; + } + fb_row0 = lcd_fb(screen_start*FONT_HEIGHT, 0); + fb_row1 = lcd_fb((screen_start+1)*FONT_HEIGHT, 0); + fb_rown = lcd_fb(screen_end*FONT_HEIGHT, 0); + while (fb_row1 != fb_rown) { + *fb_row0 = *fb_row1; + fb_row0 = (cyg_uint16 *)((char *)fb_row0 + lcd.stride); + fb_row1 = (cyg_uint16 *)((char *)fb_row1 + lcd.stride); + } + // Erase bottom line + for (col = 0; col < screen_width; col++) { + lcd_drawc(' ', col, screen_end-1); + } +} + +// Draw one character at the current position +void +lcd_putc(cyg_int8 c) +{ +// TEMP + int cache_on; + HAL_DCACHE_IS_ENABLED(cache_on); + if (cache_on) { + HAL_DCACHE_SYNC(); + HAL_DCACHE_DISABLE(); + } +// TEMP + if (cursor_enable) { + lcd_drawc(screen[curY][curX], curX-screen_pan, curY); + } + switch (c) { + case '\r': + curX = 0; + break; + case '\n': + curY++; + break; + case '\b': + curX--; + if (curX < 0) { + curY--; + if (curY < 0) curY = 0; + curX = screen_width-1; + } + break; + default: + if (((cyg_uint8)c < FIRST_CHAR) || ((cyg_uint8)c > LAST_CHAR)) c = '.'; + screen[curY][curX] = c; + lcd_drawc(c, curX-screen_pan, curY); + curX++; + if (curX == screen_width) { + curY++; + curX = 0; + } + } + if (curY >= screen_height) { + lcd_scroll(); + curY = (screen_height-1); + } + if (cursor_enable) { + lcd_drawc(CURSOR_ON, curX-screen_pan, curY); + } +// TEMP + if (cache_on) { + HAL_DCACHE_ENABLE(); + } +// TEMP +} + +// Basic LCD 'printf()' support + +#include <stdarg.h> + +#define is_digit(c) ((c >= '0') && (c <= '9')) + +static int +_cvt(unsigned long val, char *buf, long radix, char *digits) +{ + char temp[80]; + char *cp = temp; + int length = 0; + + if (val == 0) { + /* Special case */ + *cp++ = '0'; + } else { + while (val) { + *cp++ = digits[val % radix]; + val /= radix; + } + } + while (cp != temp) { + *buf++ = *--cp; + length++; + } + *buf = '\0'; + return (length); +} + +static int +lcd_vprintf(void (*putc)(cyg_int8), const char *fmt0, va_list ap) +{ + char c, sign, *cp; + int left_prec, right_prec, zero_fill, length, pad, pad_on_right; + char buf[32]; + long val; + + while ((c = *fmt0++)) { + cp = buf; + length = 0; + if (c == '%') { + c = *fmt0++; + left_prec = right_prec = pad_on_right = 0; + if (c == '-') { + c = *fmt0++; + pad_on_right++; + } + if (c == '0') { + zero_fill = TRUE; + c = *fmt0++; + } else { + zero_fill = FALSE; + } + while (is_digit(c)) { + left_prec = (left_prec * 10) + (c - '0'); + c = *fmt0++; + } + if (c == '.') { + c = *fmt0++; + zero_fill++; + while (is_digit(c)) { + right_prec = (right_prec * 10) + (c - '0'); + c = *fmt0++; + } + } else { + right_prec = left_prec; + } + sign = '\0'; + switch (c) { + case 'd': + case 'x': + case 'X': + val = va_arg(ap, long); + switch (c) { + case 'd': + if (val < 0) { + sign = '-'; + val = -val; + } + length = _cvt(val, buf, 10, "0123456789"); + break; + case 'x': + length = _cvt(val, buf, 16, "0123456789abcdef"); + break; + case 'X': + length = _cvt(val, buf, 16, "0123456789ABCDEF"); + break; + } + break; + case 's': + cp = va_arg(ap, char *); + length = strlen(cp); + break; + case 'c': + c = va_arg(ap, long /*char*/); + (*putc)(c); + continue; + default: + (*putc)('?'); + } + pad = left_prec - length; + if (sign != '\0') { + pad--; + } + if (zero_fill) { + c = '0'; + if (sign != '\0') { + (*putc)(sign); + sign = '\0'; + } + } else { + c = ' '; + } + if (!pad_on_right) { + while (pad-- > 0) { + (*putc)(c); + } + } + if (sign != '\0') { + (*putc)(sign); + } + while (length-- > 0) { + (*putc)(c = *cp++); + if (c == '\n') { + (*putc)('\r'); + } + } + if (pad_on_right) { + while (pad-- > 0) { + (*putc)(' '); + } + } + } else { + (*putc)(c); + if (c == '\n') { + (*putc)('\r'); + } + } + } + + // FIXME + return 0; +} + +int +_lcd_printf(char const *fmt, ...) +{ + int ret; + va_list ap; + + va_start(ap, fmt); + ret = lcd_vprintf(lcd_putc, fmt, ap); + va_end(ap); + return (ret); +} + +void +lcd_setbg(int red, int green, int blue) +{ + bg = RGB_RED(red) | RGB_GREEN(green) | RGB_BLUE(blue); +} + +void +lcd_setfg(int red, int green, int blue) +{ + fg = RGB_RED(red) | RGB_GREEN(green) | RGB_BLUE(blue); +} + +// +// Support LCD/keyboard (PS2) as a virtual I/O channel +// Adapted from i386/pcmb_screen.c +// + + +//----------------------------------------------------------------------------- +// Keyboard definitions + +#define KBDATAPORT 0x79000003 // data I/O port +#define KBCMDPORT 0x79000007 // command port (write) +#define KBSTATPORT 0x79000007 // status port (read) +#define KBINRDY 0x01 +#define KBOUTRDY 0x02 +#define KBTXTO 0x40 // Transmit timeout - nothing there +#define KBTEST 0xAB + +// Scan codes + +#define LSHIFT 0x2a +#define RSHIFT 0x36 +#define CTRL 0x1d +#define ALT 0x38 +#define CAPS 0x3a +#define NUMS 0x45 + +#define BREAK 0x80 + +// Bits for KBFlags + +#define KBNormal 0x0000 +#define KBShift 0x0001 +#define KBCtrl 0x0002 +#define KBAlt 0x0004 +#define KBIndex 0x0007 // mask for the above + +#define KBExtend 0x0010 +#define KBAck 0x0020 +#define KBResend 0x0040 +#define KBShiftL (0x0080 | KBShift) +#define KBShiftR (0x0100 | KBShift) +#define KBCtrlL (0x0200 | KBCtrl) +#define KBCtrlR (0x0400 | KBCtrl) +#define KBAltL (0x0800 | KBAlt) +#define KBAltR (0x1000 | KBAlt) +#define KBCapsLock 0x2000 +#define KBNumLock 0x4000 + +#define KBArrowUp 0x48 +#define KBArrowRight 0x4D +#define KBArrowLeft 0x4B +#define KBArrowDown 0x50 + +//----------------------------------------------------------------------------- +// Keyboard Variables + +static int KBFlags = 0; + +static CYG_BYTE KBPending = 0xFF; + +static CYG_BYTE KBScanTable[128][4] = { +// Normal Shift Control Alt +// 0x00 + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0x1b, 0x1b, 0x1b, 0xFF, }, + { '1', '!', 0xFF, 0xFF, }, + { '2', '"', 0xFF, 0xFF, }, + { '3', '#', 0xFF, 0xFF, }, + { '4', '$', 0xFF, 0xFF, }, + { '5', '%', 0xFF, 0xFF, }, + { '6', '^', 0xFF, 0xFF, }, + { '7', '&', 0xFF, 0xFF, }, + { '8', '*', 0xFF, 0xFF, }, + { '9', '(', 0xFF, 0xFF, }, + { '0', ')', 0xFF, 0xFF, }, + { '-', '_', 0xFF, 0xFF, }, + { '=', '+', 0xFF, 0xFF, }, + { '\b', '\b', 0xFF, 0xFF, }, + { '\t', '\t', 0xFF, 0xFF, }, +// 0x10 + { 'q', 'Q', 0x11, 0xFF, }, + { 'w', 'W', 0x17, 0xFF, }, + { 'e', 'E', 0x05, 0xFF, }, + { 'r', 'R', 0x12, 0xFF, }, + { 't', 'T', 0x14, 0xFF, }, + { 'y', 'Y', 0x19, 0xFF, }, + { 'u', 'U', 0x15, 0xFF, }, + { 'i', 'I', 0x09, 0xFF, }, + { 'o', 'O', 0x0F, 0xFF, }, + { 'p', 'P', 0x10, 0xFF, }, + { '[', '{', 0x1b, 0xFF, }, + { ']', '}', 0x1d, 0xFF, }, + { '\r', '\r', '\n', 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 'a', 'A', 0x01, 0xFF, }, + { 's', 'S', 0x13, 0xFF, }, +// 0x20 + { 'd', 'D', 0x04, 0xFF, }, + { 'f', 'F', 0x06, 0xFF, }, + { 'g', 'G', 0x07, 0xFF, }, + { 'h', 'H', 0x08, 0xFF, }, + { 'j', 'J', 0x0a, 0xFF, }, + { 'k', 'K', 0x0b, 0xFF, }, + { 'l', 'L', 0x0c, 0xFF, }, + { ';', ':', 0xFF, 0xFF, }, + { 0x27, '@', 0xFF, 0xFF, }, + { '#', '~', 0xFF, 0xFF, }, + { '`', '~', 0xFF, 0xFF, }, + { '\\', '|', 0x1C, 0xFF, }, + { 'z', 'Z', 0x1A, 0xFF, }, + { 'x', 'X', 0x18, 0xFF, }, + { 'c', 'C', 0x03, 0xFF, }, + { 'v', 'V', 0x16, 0xFF, }, +// 0x30 + { 'b', 'B', 0x02, 0xFF, }, + { 'n', 'N', 0x0E, 0xFF, }, + { 'm', 'M', 0x0D, 0xFF, }, + { ',', '<', 0xFF, 0xFF, }, + { '.', '>', 0xFF, 0xFF, }, + { '/', '?', 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { ' ', ' ', ' ', ' ', }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xF1, 0xE1, 0xFF, 0xFF, }, + { 0xF2, 0xE2, 0xFF, 0xFF, }, + { 0xF3, 0xE3, 0xFF, 0xFF, }, + { 0xF4, 0xE4, 0xFF, 0xFF, }, + { 0xF5, 0xE5, 0xFF, 0xFF, }, +// 0x40 + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + + { 0x15, 0x15, 0x15, 0x15, }, + { 0x10, 0x10, 0x10, 0x10, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, +// 0x50 + { 0x04, 0x04, 0x04, 0x04, }, + { 0x0e, 0x0e, 0x0e, 0x0e, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, +// 0x60 + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, +// 0x70 + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, + { 0xFF, 0xFF, 0xFF, 0xFF, }, +}; + +static int KBIndexTab[8] = { 0, 1, 2, 2, 3, 3, 3, 3 }; + +//----------------------------------------------------------------------------- + +static __inline__ cyg_uint8 +inb(cyg_uint32 port) +{ + cyg_uint8 val; + HAL_READ_UINT8(port, val); + return val; +} + +static __inline__ void +outb(cyg_uint32 port, cyg_uint8 val) +{ + HAL_WRITE_UINT8(port, val); +} + +static cyg_bool +KeyboardInit(void) +{ + unsigned char c, s; + + /* flush input queue */ + while ((inb(KBSTATPORT) & KBINRDY)) { + (void)inb(KBDATAPORT); + } + + /* Send self-test - controller local */ + while (inb(KBSTATPORT) & KBOUTRDY) ; + outb(KBCMDPORT,0xAA); + while ((inb(KBSTATPORT) & KBINRDY) == 0) ; /* wait input ready */ + if ((c = inb(KBDATAPORT)) != 0x55) { +#ifdef DEBUG_KBD_INIT + diag_printf("Keyboard self test failed - result: %x\n", c); +#endif + return false; + } + + /* Enable interrupts and keyboard controller */ + while (inb(KBSTATPORT) & KBOUTRDY) ; + outb(KBCMDPORT,0x60); + while (inb(KBSTATPORT) & KBOUTRDY) ; + outb(KBCMDPORT,0x45); + CYGACC_CALL_IF_DELAY_US(10000); // 10ms + + while (inb(KBSTATPORT) & KBOUTRDY) ; + outb(KBCMDPORT,0xAE); // Enable keyboard + + /* See if a keyboard is connected */ + while (inb(KBSTATPORT) & KBOUTRDY) ; + outb(KBDATAPORT,0xFF); + while (((s = inb(KBSTATPORT)) & (KBINRDY|KBTXTO)) == 0) ; /* wait input ready */ + if ((s & KBTXTO) || ((c = inb(KBDATAPORT)) != 0xFA)) { +#ifdef DEBUG_KBD_INIT + diag_printf("Keyboard reset failed - no ACK: %x, stat: %x\n", c, s); +#endif + return false; + } + while (((s = inb(KBSTATPORT)) & KBINRDY) == 0) ; /* wait input ready */ + if ((s & KBTXTO) || ((c = inb(KBDATAPORT)) != 0xAA)) { +#ifdef DEBUG_KBD_INIT + diag_printf("Keyboard reset failed - bad code: %x, stat: %x\n", c, s); +#endif + return false; + } + + // Set scan mode + while (inb(KBSTATPORT) & KBOUTRDY) ; + outb(KBCMDPORT,0x20); + while ((inb(KBSTATPORT) & KBINRDY) == 0) ; /* wait input ready */ + if (! (inb(KBDATAPORT) & 0x40)) { + /* + * Quote from PS/2 System Reference Manual: + * + * "Address hex 0060 and address hex 0064 should be + * written only when the input-buffer-full bit and + * output-buffer-full bit in the Controller Status + * register are set 0." (KBINRDY and KBOUTRDY) + */ + + while (inb(KBSTATPORT) & (KBINRDY | KBOUTRDY)) ; + outb(KBDATAPORT,0xF0); + while (inb(KBSTATPORT) & (KBINRDY | KBOUTRDY)) ; + outb(KBDATAPORT,0x01); + } + + KBFlags = 0; + return true; +} /* KeyboardInit */ + +//----------------------------------------------------------------------------- + +static CYG_BYTE +KeyboardAscii(CYG_BYTE scancode) +{ + CYG_BYTE ascii = 0xFF; + + // Start by handling all shift/ctl keys: + + switch( scancode ) { + case 0xe0: + KBFlags |= KBExtend; + return 0xFF; + + case 0xfa: + KBFlags |= KBAck; + return 0xFF; + + case 0xfe: + KBFlags |= KBResend; + return 0xFF; + + case LSHIFT: + KBFlags |= KBShiftL; + return 0xFF; + + case LSHIFT | BREAK: + KBFlags &= ~KBShiftL; + return 0xFF; + + case RSHIFT: + KBFlags |= KBShiftR; + return 0xFF; + + case RSHIFT | BREAK: + KBFlags &= ~KBShiftR; + return 0xFF; + + case CTRL: + if( KBFlags & KBExtend ) + { + KBFlags |= KBCtrlR; + KBFlags &= ~KBExtend; + } + else KBFlags |= KBCtrlL; + return 0xFF; + + case CTRL | BREAK: + if( KBFlags & KBExtend ) + { + KBFlags &= ~KBCtrlR; + KBFlags &= ~KBExtend; + } + else KBFlags &= ~KBCtrlL; + return 0xFF; + + + case ALT: + if( KBFlags & KBExtend ) + { + KBFlags |= KBAltR; + KBFlags &= ~KBExtend; + } + else KBFlags |= KBAltL; + return 0xFF; + + case ALT | BREAK: + if( KBFlags & KBExtend ) + { + KBFlags &= ~KBAltR; + KBFlags &= ~KBExtend; + } + else KBFlags &= ~KBAltL; + return 0xFF; + + case CAPS: + KBFlags ^= KBCapsLock; + case CAPS | BREAK: + return 0xFF; + + case NUMS: + KBFlags ^= KBNumLock; + case NUMS | BREAK: + return 0xFF; + + case KBArrowUp: + case KBArrowDown: + screen_pan = 0; + lcd_refresh(); + break; + case KBArrowLeft: + screen_pan -= SCREEN_PAN; + if (screen_pan < 0) screen_pan = 0; + lcd_refresh(); + break; + case KBArrowRight: + screen_pan += SCREEN_PAN; + if (screen_pan > (SCREEN_WIDTH-SCREEN_PAN)) + screen_pan = SCREEN_WIDTH-SCREEN_PAN; + lcd_refresh(); + break; + + } + + // Clear Extend flag if set + KBFlags &= ~KBExtend; + + // Ignore all other BREAK codes + if( scancode & 0x80 ) return 0xFF; + + // Here the scancode is for something we can turn + // into an ASCII value + + ascii = KBScanTable[scancode & 0x7F][KBIndexTab[KBFlags & KBIndex]]; + + return ascii; + +} /* KeyboardAscii */ + +//----------------------------------------------------------------------------- + +static int +KeyboardTest(void) +{ + // If there is a pending character, return True + if( KBPending != 0xFF ) return true; + + // If there is something waiting at the port, get it + for(;;) { + CYG_BYTE stat, code; + CYG_BYTE c; + + HAL_READ_UINT8( KBSTATPORT, stat ); + + if( (stat & KBINRDY) == 0 ) + break; + + HAL_READ_UINT8( KBDATAPORT, code ); + + // Translate to ASCII + c = KeyboardAscii(code); + + // if it is a real ASCII char, save it and + // return True. + if( c != 0xFF ) { + KBPending = c; + return true; + } + } + + // Otherwise return False + return false; + +} /* KeyboardTest */ + +char +KeyboardChar(void) +{ + char c = KBPending; + KBPending = 0xFF; + return c; +} + +static int _timeout = 500; + +static cyg_bool +lcd_comm_getc_nonblock(void* __ch_data, cyg_uint8* ch) +{ + if( !KeyboardTest() ) + return false; + *ch = KBPending; + KBPending = 0xFF; + return true; +} + +static cyg_uint8 +lcd_comm_getc(void* __ch_data) +{ + cyg_uint8 ch; + + while (!lcd_comm_getc_nonblock(__ch_data, &ch)) ; + return ch; +} + +static void +lcd_comm_putc(void* __ch_data, cyg_uint8 c) +{ + lcd_putc(c); +} + +static void +lcd_comm_write(void* __ch_data, const cyg_uint8* __buf, cyg_uint32 __len) +{ +#if 0 + CYGARC_HAL_SAVE_GP(); + + while(__len-- > 0) + lcd_comm_putc(__ch_data, *__buf++); + + CYGARC_HAL_RESTORE_GP(); +#endif +} + +static void +lcd_comm_read(void* __ch_data, cyg_uint8* __buf, cyg_uint32 __len) +{ +#if 0 + CYGARC_HAL_SAVE_GP(); + + while(__len-- > 0) + *__buf++ = lcd_comm_getc(__ch_data); + + CYGARC_HAL_RESTORE_GP(); +#endif +} + +static cyg_bool +lcd_comm_getc_timeout(void* __ch_data, cyg_uint8* ch) +{ + int delay_count; + cyg_bool res; + + delay_count = _timeout * 2; // delay in .5 ms steps + for(;;) { + res = lcd_comm_getc_nonblock(__ch_data, ch); + if (res || 0 == delay_count--) + break; + CYGACC_CALL_IF_DELAY_US(500); + } + return res; +} + +static int +lcd_comm_control(void *__ch_data, __comm_control_cmd_t __func, ...) +{ + static int vector = 0; + int ret = -1; + static int irq_state = 0; + + CYGARC_HAL_SAVE_GP(); + + switch (__func) { + case __COMMCTL_IRQ_ENABLE: + ret = irq_state; + irq_state = 1; + break; + case __COMMCTL_IRQ_DISABLE: + ret = irq_state; + irq_state = 0; + break; + case __COMMCTL_DBG_ISR_VECTOR: + ret = vector; + break; + case __COMMCTL_SET_TIMEOUT: + { + va_list ap; + + va_start(ap, __func); + + ret = _timeout; + _timeout = va_arg(ap, cyg_uint32); + + va_end(ap); + break; + } + case __COMMCTL_FLUSH_OUTPUT: + ret = 0; + break; + default: + break; + } + CYGARC_HAL_RESTORE_GP(); + return ret; +} + +static int +lcd_comm_isr(void *__ch_data, int* __ctrlc, + CYG_ADDRWORD __vector, CYG_ADDRWORD __data) +{ +#if 0 + char ch; + + cyg_drv_interrupt_acknowledge(__vector); + *__ctrlc = 0; + if (lcd_comm_getc_nonblock(__ch_data, &ch)) { + if (ch == 0x03) { + *__ctrlc = 1; + } + } + return CYG_ISR_HANDLED; +#else + return 0; +#endif +} + +void +lcd_comm_init(void) +{ + static int init = 0; + + if (!init) { + hal_virtual_comm_table_t* comm; + int cur = CYGACC_CALL_IF_SET_CONSOLE_COMM(CYGNUM_CALL_IF_SET_COMM_ID_QUERY_CURRENT); + + init = 1; + if (!KeyboardInit()) { + // No keyboard - no LCD/CRT display + return; + } + + // Initialize screen + cursor_enable = true; + lcd_init(16); + lcd_on(true); + lcd_screen_clear(); + + // Setup procs in the vector table + CYGACC_CALL_IF_SET_CONSOLE_COMM(2); // FIXME - should be controlled by CDL + comm = CYGACC_CALL_IF_CONSOLE_PROCS(); + //CYGACC_COMM_IF_CH_DATA_SET(*comm, chan); + CYGACC_COMM_IF_WRITE_SET(*comm, lcd_comm_write); + CYGACC_COMM_IF_READ_SET(*comm, lcd_comm_read); + CYGACC_COMM_IF_PUTC_SET(*comm, lcd_comm_putc); + CYGACC_COMM_IF_GETC_SET(*comm, lcd_comm_getc); + CYGACC_COMM_IF_CONTROL_SET(*comm, lcd_comm_control); + CYGACC_COMM_IF_DBG_ISR_SET(*comm, lcd_comm_isr); + CYGACC_COMM_IF_GETC_TIMEOUT_SET(*comm, lcd_comm_getc_timeout); + + // Restore original console + CYGACC_CALL_IF_SET_CONSOLE_COMM(cur); + } +} + +#ifdef CYGPKG_REDBOOT +#include <redboot.h> + +// Get here when RedBoot is idle. If it's been long enough, then +// dim the LCD. The problem is - how to determine other activities +// so at this doesn't get in the way. In the default case, this will +// be called from RedBoot every 10ms (CYGNUM_REDBOOT_CLI_IDLE_TIMEOUT) + +#define MAX_IDLE_TIME (30*100) + +static void +idle(bool is_idle) +{ + static int idle_time = 0; + static bool was_idled = false; + + if (is_idle) { + if (!was_idled) { + if (++idle_time == MAX_IDLE_TIME) { + was_idled = true; + lcd_on(false); + } + } + } else { + idle_time = 0; + if (was_idled) { + was_idled = false; + lcd_on(true); + } + } +} + +RedBoot_idle(idle, RedBoot_AFTER_NETIO); +#endif +#endif
new file mode 100644 --- /dev/null +++ b/packages/hal/powerpc/csb281/current/src/sed1356_16bit.h @@ -0,0 +1,651 @@ +//------------------------------------------------------------------------ +// sed1356.h: SED1356 LCD/CRT Controllers - 16-Bit access mode +// +// Copyright (C) 2003 Gary Thomas + +//------------------------------------------------ +// Bit position defines +#define BIT0 0x00000001 +#define BIT1 0x00000002 +#define BIT2 0x00000004 +#define BIT3 0x00000008 +#define BIT4 0x00000010 +#define BIT5 0x00000020 +#define BIT6 0x00000040 +#define BIT7 0x00000080 +#define BIT8 0x00000100 +#define BIT9 0x00000200 +#define BIT10 0x00000400 +#define BIT11 0x00000800 +#define BIT12 0x00001000 +#define BIT13 0x00002000 +#define BIT14 0x00004000 +#define BIT15 0x00008000 +#define BIT16 0x00010000 +#define BIT17 0x00020000 +#define BIT18 0x00040000 +#define BIT19 0x00080000 +#define BIT20 0x00100000 +#define BIT21 0x00200000 +#define BIT22 0x00400000 +#define BIT23 0x00800000 +#define BIT24 0x01000000 +#define BIT25 0x02000000 +#define BIT26 0x04000000 +#define BIT27 0x08000000 +#define BIT28 0x10000000 +#define BIT29 0x20000000 +#define BIT30 0x40000000 +#define BIT31 0x80000000 + + +//------------------------------------------------------------------------ +// cpu specific code must define the following board specific macros. +// in cpuio.h. These examples assume the SED135x has been placed in +// the correct endian mode via hardware. +// #define SED_MEM_BASE 0xf0600000 <-- just example addresses, +// #define SED_REG_BASE 0xf0400000 <-- define for each board +// #define SED_STEP 1 <-- 1 = device is on 16-bit boundry, 2 = 32-bit boundry, 4 = 64-bit boundry +// #define SED_REG16(_x_) *(vushortr *)(SED_REG_BASE + (_x_ * SED_STEP)) // Control/Status Registers +// #define RD_FB16(_reg_,_val_) ((_val_) = *((vushort *)((SED_MEM_BASE + (_reg_ * SED_STEP))))) +// #define WR_FB16(_reg_,_val_) (*((vushort *)((SED_MEM_BASE + (_reg_ * 2)))) = (_val_)) +// Big endian processors +// #define H2SED(_x_) ((((x) & 0xff00U) >> 8) | (((x) & 0x00ffU) << 8)) +// Little endian +// #define H2SED(_x_) (_x_) + + +// ---------------------------------------------------------- +// SED1356 registers - 16-Bit Access Mode. The first register +// referenced is the even addressed register. The byte offsets +// of the odd registers are shown in the comments +#define SED1356_REG_REV_and_MISC SED_REG16(0x00) +// #define SED1356_REG_MISC SED_REG(0x01) +#define SED1356_REG_GPIO_CFG SED_REG16(0x04) +#define SED1356_REG_GPIO_CTL SED_REG16(0x08) +#define SED1356_REG_MD_CFG_RD_LO_and_HI SED_REG16(0x0c) +// #define SED1356_REG_MD_CFG_RD_HI SED_REG(0x0d) +#define SED1356_REG_MCLK_CFG SED_REG16(0x10) +#define SED1356_REG_LCD_PCLK_CFG SED_REG16(0x14) +#define SED1356_REG_CRT_PCLK_CFG SED_REG16(0x18) +#define SED1356_REG_MEDIA_PCLK_CFG SED_REG16(0x1c) +#define SED1356_REG_WAIT_STATE SED_REG16(0x1e) +#define SED1356_REG_MEM_CFG_and_REF_RATE SED_REG16(0x20) +// #define SED1356_REG_REF_RATE SED_REG(0x21) +#define SED1356_REG_MEM_TMG0_and_1 SED_REG16(0x2a) +// #define SED1356_REG_MEM_TMG1 SED_REG(0x2b) +#define SED1356_REG_PANEL_TYPE_and_MOD_RATE SED_REG16(0x30) +// #define SED1356_REG_MOD_RATE SED_REG(0x31) +// LCD Control registers +#define SED1356_REG_LCD_HOR_DISP SED_REG16(0x32) +#define SED1356_REG_LCD_HOR_NONDISP_and_START SED_REG16(0x34) +// #define SED1356_REG_LCD_HOR_START SED_REG(0x35) +#define SED1356_REG_LCD_HOR_PULSE SED_REG16(0x36) +#define SED1356_REG_LCD_VER_DISP_HT_LO_and_HI SED_REG16(0x38) +// #define SED1356_REG_LCD_VER_DISP_HT_HI SED_REG(0x39) +#define SED1356_REG_LCD_VER_NONDISP_and_START SED_REG16(0x3a) +// #define SED1356_REG_LCD_VER_START SED_REG(0x3b) +#define SED1356_REG_LCD_VER_PULSE SED_REG16(0x3c) +#define SED1356_REG_LCD_DISP_MODE_and_MISC SED_REG16(0x40) +// #define SED1356_REG_LCD_MISC SED_REG(0x41) +#define SED1356_REG_LCD_DISP_START_LO_and_MID SED_REG16(0x42) +// #define SED1356_REG_LCD_DISP_START_MID SED_REG(0x43) +#define SED1356_REG_LCD_DISP_START_HI SED_REG16(0x44) +#define SED1356_REG_LCD_ADD_OFFSET_LO_and_HI SED_REG16(0x46) +// #define SED1356_REG_LCD_ADD_OFFSET_HI SED_REG(0x47) +#define SED1356_REG_LCD_PIXEL_PAN SED_REG16(0x48) +#define SED1356_REG_LCD_FIFO_THRESH_LO_and_HI SED_REG16(0x4a) +// #define SED1356_REG_LCD_FIFO_LO_THRES SED_REG(0x4b) +// CRT/TV Control registers +#define SED1356_REG_CRT_HOR_DISP SED_REG16(0x50) +#define SED1356_REG_CRT_HOR_NONDISP_and_START SED_REG16(0x52) +// #define SED1356_REG_CRT_HOR_START SED_REG(0x53) +#define SED1356_REG_CRT_HOR_PULSE SED_REG16(0x54) +#define SED1356_REG_CRT_VER_DISP_HT_LO_and_HI SED_REG16(0x56) +// #define SED1356_REG_CRT_VER_DISP_HT_HI SED_REG(0x57) +#define SED1356_REG_CRT_VER_NONDISP_and_START SED_REG16(0x58) + +// #define SED1356_REG_CRT_VER_START SED_REG(0x59) +#define SED1356_REG_CRT_VER_PULSE_and_OUT_CTL SED_REG16(0x5a) +// #define SED1356_REG_CRT_OUT_CTL SED_REG(0x5b) +#define SED1356_REG_CRT_DISP_MODE SED_REG16(0x60) +#define SED1356_REG_CRT_DISP_START_LO_and_MID SED_REG16(0x62) +// #define SED1356_REG_CRT_DISP_START_MID SED_REG(0x63) +#define SED1356_REG_CRT_DISP_START_HI SED_REG16(0x64) +#define SED1356_REG_CRT_ADD_OFFSET_LO_and_HI SED_REG16(0x66) +// #define SED1356_REG_CRT_ADD_OFFSET_HI SED_REG(0x67) +#define SED1356_REG_CRT_PIXEL_PAN SED_REG16(0x68) +#define SED1356_REG_CRT_FIFO_THRESH_LO_and_HI SED_REG16(0x6a) +// #define SED1356_REG_CRT_FIFO_LO_THRES SED_REG(0x6b) + +// LCD Cursor Control Registers +#define SED1356_REG_LCD_CURSOR_CTL_and_START_ADD SED_REG16(0x70) +// #define SED1356_REG_LCD_CURSOR_START_ADD SED_REG(0x71) +#define SED1356_REG_LCD_CURSOR_X_POS_LO_and_HI SED_REG16(0x72) +// #define SED1356_REG_LCD_CURSOR_X_POS_HI SED_REG(0x73) +#define SED1356_REG_LCD_CURSOR_Y_POS_LO_and_HI SED_REG16(0x74) +// #define SED1356_REG_LCD_CURSOR_Y_POS_HI SED_REG(0x75) +#define SED1356_REG_LCD_CURSOR_BLUE_and_GREEN_CLR_0 SED_REG16(0x76) +// #define SED1356_REG_LCD_CURSOR_GREEN_CLR_0 SED_REG(0x77) +#define SED1356_REG_LCD_CURSOR_RED_CLR_0 SED_REG16(0x78) +#define SED1356_REG_LCD_CURSOR_BLUE_and_GREEN_CLR_1 SED_REG16(0x7a) +// #define SED1356_REG_LCD_CURSOR_GREEN_CLR_1 SED_REG(0x7b) +#define SED1356_REG_LCD_CURSOR_RED_CLR_1 SED_REG16(0x7c) +#define SED1356_REG_LCD_CURSOR_FIFO_THRESH SED_REG16(0x7e) + +// CRT Cursor Control Registers +#define SED1356_REG_CRT_CURSOR_CTL_and_START_ADD SED_REG16(0x80) +// #define SED1356_REG_CRT_CURSOR_START_ADD SED_REG(0x81) +#define SED1356_REG_CRT_CURSOR_X_POS_LO_and_HI SED_REG16(0x82) +// #define SED1356_REG_CRT_CURSOR_X_POS_HI SED_REG(0x83) +#define SED1356_REG_CRT_CURSOR_Y_POS_LO_and_HI SED_REG16(0x84) +// #define SED1356_REG_CRT_CURSOR_Y_POS_HI SED_REG(0x85) +#define SED1356_REG_CRT_CURSOR_BLUE_and_GREEN_CLR_0 SED_REG16(0x86) +// #define SED1356_REG_CRT_CURSOR_GREEN_CLR_0 SED_REG(0x87) +#define SED1356_REG_CRT_CURSOR_RED_CLR_0 SED_REG16(0x88) +#define SED1356_REG_CRT_CURSOR_BLUE_and_GREEN_CLR_1 SED_REG16(0x8a) +// #define SED1356_REG_CRT_CURSOR_GREEN_CLR_1 SED_REG(0x8b) +#define SED1356_REG_CRT_CURSOR_RED_CLR_1 SED_REG16(0x8c) +#define SED1356_REG_CRT_CURSOR_FIFO_THRESH SED_REG16(0x8e) + +// BitBlt Control Registers +#define SED1356_REG_BLT_CTL_0_and_1 SED_REG16(0x100) +// #define SED1356_REG_BLT_CTL_1 SED_REG(0x101) +#define SED1356_REG_BLT_ROP_CODE_and_BLT_OP SED_REG16(0x102) +// #define SED1356_REG_BLT_OP SED_REG(0x103) +#define SED1356_REG_BLT_SRC_START_LO_and_MID SED_REG16(0x104) +// #define SED1356_REG_BLT_SRC_START_MID SED_REG(0x105) +#define SED1356_REG_BLT_SRC_START_HI SED_REG16(0x106) +#define SED1356_REG_BLT_DEST_START_LO_and_MID SED_REG16(0x108) +// #define SED1356_REG_BLT_DEST_START_MID SED_REG(0x109) +#define SED1356_REG_BLT_DEST_START_HI SED_REG16(0x10a) +#define SED1356_REG_BLT_ADD_OFFSET_LO_and_HI SED_REG16(0x10c) +// #define SED1356_REG_BLT_ADD_OFFSET_HI SED_REG(0x10d) +#define SED1356_REG_BLT_WID_LO_and_HI SED_REG16(0x110) +// #define SED1356_REG_BLT_WID_HI SED_REG(0x111) +#define SED1356_REG_BLT_HGT_LO_and_HI SED_REG16(0x112) +// #define SED1356_REG_BLT_HGT_HI SED_REG(0x113) +#define SED1356_REG_BLT_BG_CLR_LO_and_HI SED_REG16(0x114) +// #define SED1356_REG_BLT_BG_CLR_HI SED_REG(0x115) +#define SED1356_REG_BLT_FG_CLR_LO_and_HI SED_REG16(0x118) +// #define SED1356_REG_BLT_FG_CLR_HI SED_REG(0x119) + +// Look-Up Table Control Registers +#define SED1356_REG_LUT_MODE SED_REG16(0x1e0) +#define SED1356_REG_LUT_ADD SED_REG16(0x1e2) +#define SED1356_REG_LUT_DATA SED_REG16(0x1e4) + +// Power and Miscellaneous Control Registers +#define SED1356_REG_PWR_CFG_and_STAT SED_REG16(0x1f0) +// #define SED1356_REG_PWR_STAT SED_REG(0x1f1) +#define SED1356_REG_WATCHDOG_CTL SED_REG16(0x1f4) +#define SED1356_REG_DISP_MODE SED_REG16(0x1fc) + + +//------------------------------------------------------------------------------------------------------------ + +// Bit Assignments - Little Endian, Use H2SED() macro to access + +// + +// SED1356_REG_REV_and_MISC - even +#define SED1356_REV_ID_MASK 0xfc +// ID bits - masks off the rev bits +#define SED1356_REV_ID_1356 BIT4 +#define SED1356_REV_ID_1355 BIT3 + + +// SED1356_REG_REV_and_MISC - odd +#define SED1356_MISC_HOST_DIS BIT7 << 8 +// 0 = enable host access, 1 = disable + + +// SED1356_REG_GPIO_CFG and SED1356_REG_GPIO_STAT +#define SED1356_GPIO_GPIO3 BIT3 +// 0 = input, 1 = output, if configured as GPIO +#define SED1356_GPIO_GPIO2 BIT2 +#define SED1356_GPIO_GPIO1 BIT1 + + +// SED1356_REG_MCLK_CFG +#define SED1356_MCLK_DIV2 BIT4 +#define SED1356_MCLK_SRC_BCLK BIT0 +#define SED1356_MCLK_SRC_CLKI 0x00 + + +// SED1356_REG_LCD_PCLK_CFG, SED1356_REG_CRT_PCLK_CFG + +// and SED1356_REG_MEDIA_PCLK_CFG +#define SED1356_PCLK_X2 BIT7 +// SED1356_REG_CRT_PCLK_CFG only +#define SED1356_PCLK_DIV1 0x00 << 4 +#define SED1356_PCLK_DIV2 0x01 << 4 +#define SED1356_PCLK_DIV3 0x02 << 4 +#define SED1356_PCLK_DIV4 0x03 << 4 +#define SED1356_PCLK_SRC_CLKI 0x00 +#define SED1356_PCLK_SRC_BCLK 0x01 +#define SED1356_PCLK_SRC_CLKI2 0x02 +#define SED1356_PCLK_SRC_MCLK 0x03 + + +// SED1356_REG_MEM_CFG_and_REF_RATE - even +#define SED1356_MEM_CFG_2CAS_EDO 0x00 +#define SED1356_MEM_CFG_2CAS_FPM 0x01 +#define SED1356_MEM_CFG_2WE_EDO 0x02 +#define SED1356_MEM_CFG_2WE_FPM 0x03 +#define SED1356_MEM_CFG_MASK 0x03 + + +// SED1356_REG_MEM_CFG_and_REF_RATE - odd +#define SED1356_REF_TYPE_CBR 0x00 << 6 << 8 +#define SED1356_REF_TYPE_SELF 0x01 << 6 << 8 +#define SED1356_REF_TYPE_NONE 0x02 << 6 << 8 +#define SED1356_REF_TYPE_MASK 0x03 << 6 << 8 +#define SED1356_REF_RATE_64 0x00 << 0 << 8 +// MCLK / 64 +#define SED1356_REF_RATE_128 0x01 << 0 << 8 +// MCLK / 128 +#define SED1356_REF_RATE_256 0x02 << 0 << 8 +// MCLK / 256 +#define SED1356_REF_RATE_512 0x03 << 0 << 8 +// MCLK / 512 +#define SED1356_REF_RATE_1024 0x04 << 0 << 8 +// MCLK / 1024 +#define SED1356_REF_RATE_2048 0x05 << 0 << 8 +// MCLK / 2048 +#define SED1356_REF_RATE_4096 0x06 << 0 << 8 +// MCLK / 4096 +#define SED1356_REF_RATE_8192 0x07 << 0 << 8 +// MCLK / 8192 +#define SED1356_REF_RATE_MASK 0x07 << 0 << 8 +// MCLK / 8192 + + +// SED1356_REG_MEM_TMG0_and_1 - even +#define SED1356_MEM_TMG0_EDO50_MCLK40 0x01 +#define SED1356_MEM_TMG0_EDO50_MCLK33 0x01 +#define SED1356_MEM_TMG0_EDO60_MCLK33 0x01 +#define SED1356_MEM_TMG0_EDO50_MCLK30 0x12 +#define SED1356_MEM_TMG0_EDO60_MCLK30 0x01 +#define SED1356_MEM_TMG0_EDO70_MCLK30 0x00 +#define SED1356_MEM_TMG0_EDO50_MCLK25 0x12 +#define SED1356_MEM_TMG0_EDO60_MCLK25 0x12 +#define SED1356_MEM_TMG0_EDO70_MCLK25 0x01 +#define SED1356_MEM_TMG0_EDO80_MCLK25 0x00 +#define SED1356_MEM_TMG0_EDO50_MCLK20 0x12 +#define SED1356_MEM_TMG0_EDO60_MCLK20 0x12 +#define SED1356_MEM_TMG0_EDO70_MCLK20 0x12 +#define SED1356_MEM_TMG0_EDO80_MCLK20 0x01 +#define SED1356_MEM_TMG0_FPM50_MCLK25 0x12 +#define SED1356_MEM_TMG0_FPM60_MCLK25 0x01 +#define SED1356_MEM_TMG0_FPM50_MCLK20 0x12 +#define SED1356_MEM_TMG0_FPM60_MCLK20 0x12 +#define SED1356_MEM_TMG0_FPM70_MCLK20 0x11 +#define SED1356_MEM_TMG0_FPM80_MCLK20 0x01 + + +// SED1356_REG_MEM_TMG0_and_1 - odd +#define SED1356_MEM_TMG1_EDO50_MCLK40 0x01 << 8 +#define SED1356_MEM_TMG1_EDO50_MCLK33 0x01 << 8 +#define SED1356_MEM_TMG1_EDO60_MCLK33 0x01 << 8 +#define SED1356_MEM_TMG1_EDO50_MCLK30 0x02 << 8 +#define SED1356_MEM_TMG1_EDO60_MCLK30 0x01 << 8 +#define SED1356_MEM_TMG1_EDO70_MCLK30 0x00 << 8 +#define SED1356_MEM_TMG1_EDO50_MCLK25 0x02 << 8 +#define SED1356_MEM_TMG1_EDO60_MCLK25 0x02 << 8 +#define SED1356_MEM_TMG1_EDO70_MCLK25 0x01 << 8 +#define SED1356_MEM_TMG1_EDO80_MCLK25 0x01 << 8 +#define SED1356_MEM_TMG1_EDO50_MCLK20 0x02 << 8 +#define SED1356_MEM_TMG1_EDO60_MCLK20 0x02 << 8 +#define SED1356_MEM_TMG1_EDO70_MCLK20 0x02 << 8 +#define SED1356_MEM_TMG1_EDO80_MCLK20 0x01 << 8 +#define SED1356_MEM_TMG1_FPM50_MCLK25 0x02 << 8 +#define SED1356_MEM_TMG1_FPM60_MCLK25 0x01 << 8 +#define SED1356_MEM_TMG1_FPM50_MCLK20 0x02 << 8 +#define SED1356_MEM_TMG1_FPM60_MCLK20 0x02 << 8 +#define SED1356_MEM_TMG1_FPM70_MCLK20 0x02 << 8 +#define SED1356_MEM_TMG1_FPM80_MCLK20 0x01 << 8 + + + +// Bit definitions + +// + +// SED1356_REG_PANEL_TYPE_AND_MOD_RATE - even +#define SED1356_PANEL_TYPE_EL BIT7 +#define SED1356_PANEL_TYPE_4_9 (0x00 << 4) +// Passive 4-Bit, TFT 9-Bit +#define SED1356_PANEL_TYPE_8_12 (0x01 << 4) +// Passive 8-Bit, TFT 12-Bit +#define SED1356_PANEL_TYPE_16 (0x02 << 4) +// Passive 16-Bit, or TFT 18-Bit +#define SED1356_PANEL_TYPE_MASK (0x03 << 4) +#define SED1356_PANEL_TYPE_FMT BIT3 +// 0 = Passive Format 1, 1 = Passive Format 2 +#define SED1356_PANEL_TYPE_CLR BIT2 +// 0 = Passive Mono, 1 = Passive Color +#define SED1356_PANEL_TYPE_DUAL BIT1 +// 0 = Passive Single, 1 = Passive Dual +#define SED1356_PANEL_TYPE_TFT BIT0 +// 0 = Passive, 1 = TFT (DUAL, FMT & CLR are don't cares) + + +// SED1356_REG_CRT_HOR_PULSE, SED1356_REG_CRT_VER_PULSE, + +// SED1356_REG_LCD_HOR_PULSE and SED1356_REG_LCD_VER_PULSE +#define SED1356_PULSE_POL_HIGH BIT7 +// 0 = CRT/TFT Pulse is Low, Passive is High, 1 = CRT/TFT Pulse is High, Passive is Low +#define SED1356_PULSE_POL_LOW 0x00 +// 0 = CRT/TFT Pulse is Low, Passive is High, 1 = CRT/TFT Pulse is High, Passive is Low +#define SED1356_PULSE_WID(_x_) (_x_ & 0x0f) +// Pulse Width in Pixels + + +// SED1356_LCD_DISP_MODE_and_MISC - even +#define SED1356_LCD_DISP_BLANK BIT7 +// 1 = Blank LCD Display +#define SED1356_LCD_DISP_SWIV_NORM (0x00 << 4) +// Used with SED1356_REG_DISP_MODE Bit 6 +#define SED1356_LCD_DISP_SWIV_90 (0x00 << 4) +#define SED1356_LCD_DISP_SWIV_180 (0x01 << 4) +#define SED1356_LCD_DISP_SWIV_270 (0x01 << 4) +#define SED1356_LCD_DISP_SWIV_MASK (0x01 << 4) +#define SED1356_LCD_DISP_16BPP 0x05 +// Bit Per Pixel Selection +#define SED1356_LCD_DISP_15BPP 0x04 +#define SED1356_LCD_DISP_8BPP 0x03 +#define SED1356_LCD_DISP_4BPP 0x02 +#define SED1356_LCD_DISP_BPP_MASK 0x07 + + +// SED1356_LCD_DISP_MODE_and_MISC - odd +#define SED1356_LCD_MISC_DITH BIT1 << 8 +// 1 = Dither Disable, Passive Panel Only +#define SED1356_LCD_MISC_DUAL BIT0 << 8 +// 1 = Dual Panel Disable, Passive Panel Only + + +// SED1356_REG_CRT_VER_PULSE_and_OUT_CTL - odd +#define SED1356_CRT_OUT_CHROM BIT5 << 8 +// 1 = TV Chrominance Filter Enable +#define SED1356_CRT_OUT_LUM BIT4 << 8 +// 1 = TV Luminance Filter Enable +#define SED1356_CRT_OUT_DAC_LVL BIT3 << 8 +// 1 = 4.6ma IREF, 0 = 9.2 IREF +#define SED1356_CRT_OUT_SVIDEO BIT1 << 8 +// 1 = S-Video Output, 0 = Composite Video Output +#define SED1356_CRT_OUT_PAL BIT0 << 8 +// 1 = PAL Format Output, 0 = NTSC Format Output + + +// SED1356_REG_CRT_DISP_MODE +#define SED1356_CRT_DISP_BLANK BIT7 +// 1 = Blank CRT Display +#define SED1356_CRT_DISP_16BPP 0x05 +// Bit Per Pixel Selection +#define SED1356_CRT_DISP_15BPP 0x04 +#define SED1356_CRT_DISP_8BPP 0x03 +#define SED1356_CRT_DISP_4BPP 0x02 +#define SED1356_CRT_DISP_BPP_MASK 0x07 + + +// SED1356_DISP_MODE +#define SED1356_DISP_SWIV_NORM (0x00 << 6) +// Used with SED1356_LCD_DISP_MODE Bit 4 +#define SED1356_DISP_SWIV_90 (0x01 << 6) +#define SED1356_DISP_SWIV_180 (0x00 << 6) +#define SED1356_DISP_SWIV_270 (0x01 << 6) +#define SED1356_DISP_MODE_OFF 0x00 +// All Displays Off +#define SED1356_DISP_MODE_LCD 0x01 +// LCD Only +#define SED1356_DISP_MODE_CRT 0x02 +// CRT Only +#define SED1356_DISP_MODE_LCD_CRT 0x03 +// Simultaneous LCD and CRT +#define SED1356_DISP_MODE_TV 0x04 +// TV Only, Flicker Filter Off +#define SED1356_DISP_MODE_TV_LCD 0x05 +// Simultaneous LCD and TV, Flicker Filter Off +#define SED1356_DISP_MODE_TV_FLICK 0x06 +// TV Only, Flicker Filter On +#define SED1356_DISP_MODE_TV_LCD_FLICK 0x07 +// Simultaneous LCD and TV, Flicker Filter On + + +// SED1356_REG_PWR_CFG and SED1356_REG_PWR_STAT +#define SED1356_PWR_PCLK BIT1 +// SED1356_REG_PWR_STAT only +#define SED1356_PWR_MCLK BIT0 + + +// SED1356_REG_VER_NONDISP +#define SED1356_VER_NONDISP BIT7 +// vertical retrace status 1 = in retrace + + +// Display size defines +#define PIXELS_PER_ROW 640 +#define PIXELS_PER_COL 480 +#define BYTES_PER_PIXEL 2 +#define COLS_PER_SCREEN 80 +#define ROWS_PER_SCREEN 30 + + +// 16-bit pixels are RGB 565 - LSB of RED and BLUE are tied low at the + +// LCD Interface, while the LSB of GREEN is loaded as 0 +#define RED_SUBPIXEL(n) ((n & 0x1f) << 11) +#define GREEN_SUBPIXEL(n) ((n & 0x1f) << 5) +#define BLUE_SUBPIXEL(n) ((n & 0x1f) << 0) + + +// define a simple VGA style 16-color pallette +#define LU_BLACK (RED_SUBPIXEL(0x00) | GREEN_SUBPIXEL(0x00) | BLUE_SUBPIXEL(0x00)) +#define LU_BLUE (RED_SUBPIXEL(0x00) | GREEN_SUBPIXEL(0x00) | BLUE_SUBPIXEL(0x0f)) +#define LU_GREEN (RED_SUBPIXEL(0x00) | GREEN_SUBPIXEL(0x0f) | BLUE_SUBPIXEL(0x00)) +#define LU_CYAN (RED_SUBPIXEL(0x00) | GREEN_SUBPIXEL(0x0f) | BLUE_SUBPIXEL(0x0f)) +#define LU_RED (RED_SUBPIXEL(0x0f) | GREEN_SUBPIXEL(0x00) | BLUE_SUBPIXEL(0x00)) +#define LU_VIOLET (RED_SUBPIXEL(0x0f) | GREEN_SUBPIXEL(0x00) | BLUE_SUBPIXEL(0x0f)) +#define LU_YELLOW (RED_SUBPIXEL(0x0f) | GREEN_SUBPIXEL(0x0f) | BLUE_SUBPIXEL(0x00)) +#define LU_GREY (RED_SUBPIXEL(0x0f) | GREEN_SUBPIXEL(0x0f) | BLUE_SUBPIXEL(0x0f)) +#define LU_WHITE (RED_SUBPIXEL(0x17) | GREEN_SUBPIXEL(0x17) | BLUE_SUBPIXEL(0x17)) +#define LU_BRT_BLUE (RED_SUBPIXEL(0x00) | GREEN_SUBPIXEL(0x00) | BLUE_SUBPIXEL(0x1f)) +#define LU_BRT_GREEN (RED_SUBPIXEL(0x00) | GREEN_SUBPIXEL(0x1f) | BLUE_SUBPIXEL(0x00)) +#define LU_BRT_CYAN (RED_SUBPIXEL(0x00) | GREEN_SUBPIXEL(0x1f) | BLUE_SUBPIXEL(0x1f)) +#define LU_BRT_RED (RED_SUBPIXEL(0x1f) | GREEN_SUBPIXEL(0x00) | BLUE_SUBPIXEL(0x00)) +#define LU_BRT_VIOLET (RED_SUBPIXEL(0x1f) | GREEN_SUBPIXEL(0x00) | BLUE_SUBPIXEL(0x1f)) +#define LU_BRT_YELLOW (RED_SUBPIXEL(0x1f) | GREEN_SUBPIXEL(0x1f) | BLUE_SUBPIXEL(0x00)) +#define LU_BRT_WHITE (RED_SUBPIXEL(0x1f) | GREEN_SUBPIXEL(0x1f) | BLUE_SUBPIXEL(0x1f)) + +static const ushort vga_lookup[] = { +LU_BLACK, +// 0 +LU_BLUE, +// 1 +LU_GREEN, +// 2 +LU_CYAN, +// 3 +LU_RED, +// 4 +LU_GREY, +// 5 +LU_VIOLET, +// 6 +LU_YELLOW, +// 7 +LU_WHITE, +// 8 +LU_BRT_BLUE, +// 9 +LU_BRT_GREEN, +// 10 +LU_BRT_CYAN, +// 11 +LU_BRT_RED, +// 12 +LU_BRT_VIOLET, +// 13 +LU_BRT_YELLOW, +// 14 +LU_BRT_WHITE +// 15 +}; + + +// default foreground and background colors +#define SED_BG_DEF 1 +#define SED_FG_DEF 14 + + +// Vertical and Horizontal Pulse, Start and Non-Display values vary depending + +// upon the mode. The following section gives some insight into how the + +// values are arrived at. + +// ms = milliseconds, us = microseconds, ns = nanoseconds + +// Mhz = Megaherz, Khz = Kiloherz, Hz = Herz + +// + +// *************************************************************************************************** + +// CRT Mode is 640x480 @ 72Hz VESA compatible timing. PCLK = 31.5Mhz (31.75ns) + +// *************************************************************************************************** + +// + +// CRT MODE HORIZONTAL TIMING PARAMETERS + +// + +// |<-------Tha------->| + +// |___________________| ______ + +// Display Enable _____________________| |____________________| + +// | | + +// Horizontal Pulse __ ________|___________________|________ __________ + +// |_________| | | |________| + +// |<- Thp ->| | | | + +// | |<-Thbp->| | | + +// | |<-Thfp->| + +// |<----------------------Tht-------------------->| + +// + +// Tha - Active Display Time = 640 pixels + +// Thp - Horizontal Pulse = 1.27us/31.75ns = 40 pixels + +// Thbp - Horizontal Front Porch = 1.016us/31.75ns = 32 pixels + +// Thfp - Horizontal Back Porch = 3.8us/31.75ns = 120 pixels + +// Tht - Total Horizontal Time = 832 pixels x 32.75ns/pixel = 26.416us or 38.785Khz + +// + +// Correlation between horizontal timing parameters and SED registers +#define SED_HOR_PULSE_WIDTH_CRT 0x07 +// Horizontal Pulse Width Register = (Thp/8) - 1 +#define SED_HOR_PULSE_START_CRT 0x02 +// Horizontal Pulse Start Position Register = ((Thfp + 2)/8) - 1 +#define SED_HOR_NONDISP_CRT 0x17 +// Horizontal Non-Display Period Register = ((Thp + Thfp + Thbp)/8) - 1 +// +// CRT MODE VERTICAL TIMING PARAMTERS +// +// |<-------Tva------->| +// |___________________| ______ +// Display Enable _____________________| |_____________________| +// | | +// Vertical Pulse __ ________|___________________|________ __________ +// |_________| | | |________| +// |<- Tvp ->| | | | +// | |<-Tvbp->| | | +// | |<-Tvfp->| +// |<----------------------Tvt-------------------->| +// +// Tva - Active Display Time = 480 lines +// Tvp - Vertical Pulse = 3 lines +// Tvfp - Vertical Front Porch = 9 lines +// Tvbp - Vertical Back Porch = 28 lines +// Tvt - Total Horizontal Time = 520 lines x 26.416us/line = 13.73632ms or 72.8Hz + +// + +// Correlation between vertical timing parameters and SED registers +#define SED_VER_PULSE_WIDTH_CRT 0x02 // VRTC/FPFRAME Pulse Width Register = Tvp - 1 +#define SED_VER_PULSE_START_CRT 0x08 // VRTC/FPFRAME Start Position Register = Tvfp - 1 +#define SED_VER_NONDISP_CRT 0x27 // Vertical Non-Display Period Register = (Tvp + Tvfp + Tvbp) - 1 + +// + +// *************************************************************************************************** +// DUAL LCD Mode is 640x480 @ 60Hz VGA compatible timing. PCLK = 25.175Mhz (39.722ns) +// *************************************************************************************************** +// +// LCD MODE HORIZONTAL TIMING PARAMTERS +// +// |<-------Tha------->| +// |___________________| ______ +// Display Enable _____________________| |____________________| +// | | +// Horizontal Pulse __ ________|___________________|________ __________ +// |_________| | | |________| +// |<- Thp ->| | | | +// | |<-Thbp->| | | +// | |<-Thfp->| +// |<----------------------Tht-------------------->| +// +// Tha - Active Display Time = 640 pixels +// Thp - Horizontal Pulse = 3.8us/39.72ns = 96 pixels +// Thfp - Horizontal Front Porch = .595us/39.72ns = 16 pixels +// Thbp - Horizontal Backporch = 1.9us/39.72ns = 48 pixels +// Tht - Total Horizontal Time = = 800 pixels @ 39.72ns/pixel = 31.776us or 31.47Khz + +// + +// Correlation between horizontal timing parameters and SED registers +#define SED_HOR_PULSE_WIDTH_LCD 0x0b // HRTC/FPLINE Pulse Width Register = (Thp/8) - 1 +#define SED_HOR_PULSE_START_LCD 0x02 // HRTC/FPLINE Start Position Register = (Thfp/8) - 2 +#define SED_HOR_NONDISP_LCD 0x13 // Horizontal Non-Display Period Register = ((Thp + Thfp + Thbp)/8) - 1 + +// +// LCD MODE VERTICAL TIMING PARAMTERS +// +// |<-------Tva------->| +// |___________________| ______ +// Display Enable _____________________| |_____________________| +// | | +// Vertical Pulse __ ________|___________________|________ __________ +// |_________| | | |________| +// |<- Tvp ->| | | | +// | |<-Tvbp->| | | +// | |<-Tvfp->| +// |<----------------------Tvt-------------------->| +// +// Tva - Active Display Time = 480 lines +// Tvp - Vertical Pulse = 2 lines +// Tvfp - Vertical Front Porch = 10 lines +// Tvbp - Vertical Backporch = 33 lines +// Tvt - Total Horizontal Time = 525 lines @ 31.776us/line = 16.682ms or 60Hz + +// +// Correlation between vertical timing parameters and SED registers +#define SED_VER_PULSE_WIDTH_LCD 0x01 // VRTC/FPFRAME Pulse Width Register = Tvp - 1 +#define SED_VER_PULSE_START_LCD 0x09 // VRTC/FPFRAME Start Position Register = Tvfp - 1 +#define SED_VER_NONDISP_LCD 0x2c // Vertical Non-Display Period Register = (Tvp + Tvfp + Tvbp) - 1
new file mode 100644 --- /dev/null +++ b/packages/hal/powerpc/csb281/current/src/sed135x_16bit.c @@ -0,0 +1,618 @@ +//========================================================================== +// +// sed135x_16bit.c +// +// Author(s): Michael Kelly - Cogent Computer Systems, Inc. +// Date: 05-24-2002 +// Description: Init Code for SED135x Display Controller +// +//========================================================================== +// Copyright (C) 2003 Gary Thomas + +#include <pkgconf/hal.h> +#include <cyg/infra/cyg_type.h> +#include <cyg/hal/lcd_support.h> +#include <cyg/hal/hal_io.h> + +typedef unsigned char uchar; +typedef unsigned short ushort; +typedef volatile unsigned short vushort; +typedef unsigned long ulong; +typedef volatile unsigned long vulong; + +// board specific defines needed by sed135x +#define SED_REG_BASE 0x78000000 // *RCE3 +#define SED_MEM_BASE 0x78400000 +#define SED_STEP 2 // 16-bit port on 32-bit boundary + +// Control/Status Registers, 16-bit mode +#define SED_REG16(_x_) *(vushort *)((ulong)SED_REG_BASE + (((ulong)_x_ * SED_STEP) ^ 2)) +#define H2SED(_x_) _le16(_x_) +#define SED_GET_PHYS_ADD(_reg_) (SED_MEM_BASE + ((_reg_ * SED_STEP) ^ 2)) +#define RD_FB16(_reg_,_val_) ((_val_) = *(vushort *)SED_GET_PHYS_ADD(_reg_)) +#define WR_FB16(_reg_,_val_) (*(vushort *)SED_GET_PHYS_ADD(_reg_) = (_val_)) + +#define SED_DISP_MODE_CRT 1 +#define SED_DISP_MODE_LCD 0 + +#include "sed1356_16bit.h" + +//------------------------------------------------------------------------ +// Color Lookup Table Values +// + +static ushort sed_lut_16bit[256][3] = { +// RED, GREEN, BLUE // Entry + { 0x0000, 0x0000, 0x0000, }, // 00 + { 0x0000, 0x0000, 0x00A0, }, // 01 + { 0x0000, 0x00A0, 0x0000, }, // 02 + { 0x0000, 0x00A0, 0x00A0, }, // 03 + { 0x00A0, 0x0000, 0x0000, }, // 04 + { 0x00A0, 0x0000, 0x00A0, }, // 05 + { 0x00A0, 0x00A0, 0x0000, }, // 06 + { 0x00A0, 0x00A0, 0x00A0, }, // 07 + { 0x0050, 0x0050, 0x0050, }, // 08 + { 0x0050, 0x0050, 0x00F0, }, // 09 + { 0x0050, 0x00F0, 0x0050, }, // 0A + { 0x0050, 0x00F0, 0x00F0, }, // 0B + { 0x00F0, 0x0050, 0x0050, }, // 0C + { 0x00F0, 0x0050, 0x00F0, }, // 0D + { 0x00F0, 0x00F0, 0x0050, }, // 0E + { 0x00F0, 0x00F0, 0x00F0, }, // 0F + { 0x0000, 0x0000, 0x0000, }, // 10 + { 0x0010, 0x0010, 0x0010, }, // 11 + { 0x0020, 0x0020, 0x0020, }, // 12 + { 0x0020, 0x0020, 0x0020, }, // 13 + { 0x0030, 0x0030, 0x0030, }, // 14 + { 0x0040, 0x0040, 0x0040, }, // 15 + { 0x0050, 0x0050, 0x0050, }, // 16 + { 0x0060, 0x0060, 0x0060, }, // 17 + { 0x0070, 0x0070, 0x0070, }, // 18 + { 0x0080, 0x0080, 0x0080, }, // 19 + { 0x0090, 0x0090, 0x0090, }, // 1A + { 0x00A0, 0x00A0, 0x00A0, }, // 1B + { 0x00B0, 0x00B0, 0x00B0, }, // 1C + { 0x00C0, 0x00C0, 0x00C0, }, // 1D + { 0x00E0, 0x00E0, 0x00E0, }, // 1E + { 0x00F0, 0x00F0, 0x00F0, }, // 1F + { 0x0000, 0x0000, 0x00F0, }, // 20 + { 0x0040, 0x0000, 0x00F0, }, // 21 + { 0x0070, 0x0000, 0x00F0, }, // 22 + { 0x00B0, 0x0000, 0x00F0, }, // 23 + { 0x00F0, 0x0000, 0x00F0, }, // 24 + { 0x00F0, 0x0000, 0x00B0, }, // 25 + { 0x00F0, 0x0000, 0x0070, }, // 26 + { 0x00F0, 0x0000, 0x0040, }, // 27 + { 0x00F0, 0x0000, 0x0000, }, // 28 + { 0x00F0, 0x0040, 0x0000, }, // 29 + { 0x00F0, 0x0070, 0x0000, }, // 2A + { 0x00F0, 0x00B0, 0x0000, }, // 2B + { 0x00F0, 0x00F0, 0x0000, }, // 2C + { 0x00B0, 0x00F0, 0x0000, }, // 2D + { 0x0070, 0x00F0, 0x0000, }, // 2E + { 0x0040, 0x00F0, 0x0000, }, // 2F + { 0x0000, 0x00F0, 0x0000, }, // 30 + { 0x0000, 0x00F0, 0x0040, }, // 31 + { 0x0000, 0x00F0, 0x0070, }, // 32 + { 0x0000, 0x00F0, 0x00B0, }, // 33 + { 0x0000, 0x00F0, 0x00F0, }, // 34 + { 0x0000, 0x00B0, 0x00F0, }, // 35 + { 0x0000, 0x0070, 0x00F0, }, // 36 + { 0x0000, 0x0040, 0x00F0, }, // 37 + { 0x0070, 0x0070, 0x00F0, }, // 38 + { 0x0090, 0x0070, 0x00F0, }, // 39 + { 0x00B0, 0x0070, 0x00F0, }, // 3A + { 0x00D0, 0x0070, 0x00F0, }, // 3B + { 0x00F0, 0x0070, 0x00F0, }, // 3C + { 0x00F0, 0x0070, 0x00D0, }, // 3D + { 0x00F0, 0x0070, 0x00B0, }, // 3E + { 0x00F0, 0x0070, 0x0090, }, // 3F + { 0x00F0, 0x0070, 0x0070, }, // 40 + { 0x00F0, 0x0090, 0x0070, }, // 41 + { 0x00F0, 0x00B0, 0x0070, }, // 42 + { 0x00F0, 0x00D0, 0x0070, }, // 43 + { 0x00F0, 0x00F0, 0x0070, }, // 44 + { 0x00D0, 0x00F0, 0x0070, }, // 45 + { 0x00B0, 0x00F0, 0x0070, }, // 46 + { 0x0090, 0x00F0, 0x0070, }, // 47 + { 0x0070, 0x00F0, 0x0070, }, // 48 + { 0x0070, 0x00F0, 0x0090, }, // 49 + { 0x0070, 0x00F0, 0x00B0, }, // 4A + { 0x0070, 0x00F0, 0x00D0, }, // 4B + { 0x0070, 0x00F0, 0x00F0, }, // 4C + { 0x0070, 0x00D0, 0x00F0, }, // 4D + { 0x0070, 0x00B0, 0x00F0, }, // 4E + { 0x0070, 0x0090, 0x00F0, }, // 4F + { 0x00B0, 0x00B0, 0x00F0, }, // 50 + { 0x00C0, 0x00B0, 0x00F0, }, // 51 + { 0x00D0, 0x00B0, 0x00F0, }, // 52 + { 0x00E0, 0x00B0, 0x00F0, }, // 53 + { 0x00F0, 0x00B0, 0x00F0, }, // 54 + { 0x00F0, 0x00B0, 0x00E0, }, // 55 + { 0x00F0, 0x00B0, 0x00D0, }, // 56 + { 0x00F0, 0x00B0, 0x00C0, }, // 57 + { 0x00F0, 0x00B0, 0x00B0, }, // 58 + { 0x00F0, 0x00C0, 0x00B0, }, // 59 + { 0x00F0, 0x00D0, 0x00B0, }, // 5A + { 0x00F0, 0x00E0, 0x00B0, }, // 5B + { 0x00F0, 0x00F0, 0x00B0, }, // 5C + { 0x00E0, 0x00F0, 0x00B0, }, // 5D + { 0x00D0, 0x00F0, 0x00B0, }, // 5E + { 0x00C0, 0x00F0, 0x00B0, }, // 5F + { 0x00B0, 0x00F0, 0x00B0, }, // 60 + { 0x00B0, 0x00F0, 0x00C0, }, // 61 + { 0x00B0, 0x00F0, 0x00D0, }, // 62 + { 0x00B0, 0x00F0, 0x00E0, }, // 63 + { 0x00B0, 0x00F0, 0x00F0, }, // 64 + { 0x00B0, 0x00E0, 0x00F0, }, // 65 + { 0x00B0, 0x00D0, 0x00F0, }, // 66 + { 0x00B0, 0x00C0, 0x00F0, }, // 67 + { 0x0000, 0x0000, 0x0070, }, // 68 + { 0x0010, 0x0000, 0x0070, }, // 69 + { 0x0030, 0x0000, 0x0070, }, // 6A + { 0x0050, 0x0000, 0x0070, }, // 6B + { 0x0070, 0x0000, 0x0070, }, // 6C + { 0x0070, 0x0000, 0x0050, }, // 6D + { 0x0070, 0x0000, 0x0030, }, // 6E + { 0x0070, 0x0000, 0x0010, }, // 6F + { 0x0070, 0x0000, 0x0000, }, // 70 + { 0x0070, 0x0010, 0x0000, }, // 71 + { 0x0070, 0x0030, 0x0000, }, // 72 + { 0x0070, 0x0050, 0x0000, }, // 73 + { 0x0070, 0x0070, 0x0000, }, // 74 + { 0x0050, 0x0070, 0x0000, }, // 75 + { 0x0030, 0x0070, 0x0000, }, // 76 + { 0x0010, 0x0070, 0x0000, }, // 77 + { 0x0000, 0x0070, 0x0000, }, // 78 + { 0x0000, 0x0070, 0x0010, }, // 79 + { 0x0000, 0x0070, 0x0030, }, // 7A + { 0x0000, 0x0070, 0x0050, }, // 7B + { 0x0000, 0x0070, 0x0070, }, // 7C + { 0x0000, 0x0050, 0x0070, }, // 7D + { 0x0000, 0x0030, 0x0070, }, // 7E + { 0x0000, 0x0010, 0x0070, }, // 7F + { 0x0030, 0x0030, 0x0070, }, // 80 + { 0x0040, 0x0030, 0x0070, }, // 81 + { 0x0050, 0x0030, 0x0070, }, // 82 + { 0x0060, 0x0030, 0x0070, }, // 83 + { 0x0070, 0x0030, 0x0070, }, // 84 + { 0x0070, 0x0030, 0x0060, }, // 85 + { 0x0070, 0x0030, 0x0050, }, // 86 + { 0x0070, 0x0030, 0x0040, }, // 87 + { 0x0070, 0x0030, 0x0030, }, // 88 + { 0x0070, 0x0040, 0x0030, }, // 89 + { 0x0070, 0x0050, 0x0030, }, // 8A + { 0x0070, 0x0060, 0x0030, }, // 8B + { 0x0070, 0x0070, 0x0030, }, // 8C + { 0x0060, 0x0070, 0x0030, }, // 8D + { 0x0050, 0x0070, 0x0030, }, // 8E + { 0x0040, 0x0070, 0x0030, }, // 8F + { 0x0030, 0x0070, 0x0030, }, // 90 + { 0x0030, 0x0070, 0x0040, }, // 91 + { 0x0030, 0x0070, 0x0050, }, // 92 + { 0x0030, 0x0070, 0x0060, }, // 93 + { 0x0030, 0x0070, 0x0070, }, // 94 + { 0x0030, 0x0060, 0x0070, }, // 95 + { 0x0030, 0x0050, 0x0070, }, // 96 + { 0x0030, 0x0040, 0x0070, }, // 97 + { 0x0050, 0x0050, 0x0070, }, // 98 + { 0x0050, 0x0050, 0x0070, }, // 99 + { 0x0060, 0x0050, 0x0070, }, // 9A + { 0x0060, 0x0050, 0x0070, }, // 9B + { 0x0070, 0x0050, 0x0070, }, // 9C + { 0x0070, 0x0050, 0x0060, }, // 9D + { 0x0070, 0x0050, 0x0060, }, // 9E + { 0x0070, 0x0050, 0x0050, }, // 9F + { 0x0070, 0x0050, 0x0050, }, // A0 + { 0x0070, 0x0050, 0x0050, }, // A1 + { 0x0070, 0x0060, 0x0050, }, // A2 + { 0x0070, 0x0060, 0x0050, }, // A3 + { 0x0070, 0x0070, 0x0050, }, // A4 + { 0x0060, 0x0070, 0x0050, }, // A5 + { 0x0060, 0x0070, 0x0050, }, // A6 + { 0x0050, 0x0070, 0x0050, }, // A7 + { 0x0050, 0x0070, 0x0050, }, // A8 + { 0x0050, 0x0070, 0x0050, }, // A9 + { 0x0050, 0x0070, 0x0060, }, // AA + { 0x0050, 0x0070, 0x0060, }, // AB + { 0x0050, 0x0070, 0x0070, }, // AC + { 0x0050, 0x0060, 0x0070, }, // AD + { 0x0050, 0x0060, 0x0070, }, // AE + { 0x0050, 0x0050, 0x0070, }, // AF + { 0x0000, 0x0000, 0x0040, }, // B0 + { 0x0010, 0x0000, 0x0040, }, // B1 + { 0x0020, 0x0000, 0x0040, }, // B2 + { 0x0030, 0x0000, 0x0040, }, // B3 + { 0x0040, 0x0000, 0x0040, }, // B4 + { 0x0040, 0x0000, 0x0030, }, // B5 + { 0x0040, 0x0000, 0x0020, }, // B6 + { 0x0040, 0x0000, 0x0010, }, // B7 + { 0x0040, 0x0000, 0x0000, }, // B8 + { 0x0040, 0x0010, 0x0000, }, // B9 + { 0x0040, 0x0020, 0x0000, }, // BA + { 0x0040, 0x0030, 0x0000, }, // BB + { 0x0040, 0x0040, 0x0000, }, // BC + { 0x0030, 0x0040, 0x0000, }, // BD + { 0x0020, 0x0040, 0x0000, }, // BE + { 0x0010, 0x0040, 0x0000, }, // BF + { 0x0000, 0x0040, 0x0000, }, // C0 + { 0x0000, 0x0040, 0x0010, }, // C1 + { 0x0000, 0x0040, 0x0020, }, // C2 + { 0x0000, 0x0040, 0x0030, }, // C3 + { 0x0000, 0x0040, 0x0040, }, // C4 + { 0x0000, 0x0030, 0x0040, }, // C5 + { 0x0000, 0x0020, 0x0040, }, // C6 + { 0x0000, 0x0010, 0x0040, }, // C7 + { 0x0020, 0x0020, 0x0040, }, // C8 + { 0x0020, 0x0020, 0x0040, }, // C9 + { 0x0030, 0x0020, 0x0040, }, // CA + { 0x0030, 0x0020, 0x0040, }, // CB + { 0x0040, 0x0020, 0x0040, }, // CC + { 0x0040, 0x0020, 0x0030, }, // CD + { 0x0040, 0x0020, 0x0030, }, // CE + { 0x0040, 0x0020, 0x0020, }, // CF + { 0x0040, 0x0020, 0x0020, }, // D0 + { 0x0040, 0x0020, 0x0020, }, // D1 + { 0x0040, 0x0030, 0x0020, }, // D2 + { 0x0040, 0x0030, 0x0020, }, // D3 + { 0x0040, 0x0040, 0x0020, }, // D4 + { 0x0030, 0x0040, 0x0020, }, // D5 + { 0x0030, 0x0040, 0x0020, }, // D6 + { 0x0020, 0x0040, 0x0020, }, // D7 + { 0x0020, 0x0040, 0x0020, }, // D8 + { 0x0020, 0x0040, 0x0020, }, // D9 + { 0x0020, 0x0040, 0x0030, }, // DA + { 0x0020, 0x0040, 0x0030, }, // DB + { 0x0020, 0x0040, 0x0040, }, // DC + { 0x0020, 0x0030, 0x0040, }, // DD + { 0x0020, 0x0030, 0x0040, }, // DE + { 0x0020, 0x0020, 0x0040, }, // DF + { 0x0020, 0x0020, 0x0040, }, // E0 + { 0x0030, 0x0020, 0x0040, }, // E1 + { 0x0030, 0x0020, 0x0040, }, // E2 + { 0x0030, 0x0020, 0x0040, }, // E3 + { 0x0040, 0x0020, 0x0040, }, // E4 + { 0x0040, 0x0020, 0x0030, }, // E5 + { 0x0040, 0x0020, 0x0030, }, // E6 + { 0x0040, 0x0020, 0x0030, }, // E7 + { 0x0040, 0x0020, 0x0020, }, // E8 + { 0x0040, 0x0030, 0x0020, }, // E9 + { 0x0040, 0x0030, 0x0020, }, // EA + { 0x0040, 0x0030, 0x0020, }, // EB + { 0x0040, 0x0040, 0x0020, }, // EC + { 0x0030, 0x0040, 0x0020, }, // ED + { 0x0030, 0x0040, 0x0020, }, // EE + { 0x0030, 0x0040, 0x0020, }, // EF + { 0x0020, 0x0040, 0x0020, }, // F0 + { 0x0020, 0x0040, 0x0030, }, // F1 + { 0x0020, 0x0040, 0x0030, }, // F2 + { 0x0020, 0x0040, 0x0030, }, // F3 + { 0x0020, 0x0040, 0x0040, }, // F4 + { 0x0020, 0x0030, 0x0040, }, // F5 + { 0x0020, 0x0030, 0x0040, }, // F6 + { 0x0020, 0x0030, 0x0040, }, // F7 + { 0x0000, 0x0000, 0x0000, }, // F8 + { 0x0000, 0x0000, 0x0000, }, // F9 + { 0x0000, 0x0000, 0x0000, }, // FA + { 0x0000, 0x0000, 0x0000, }, // FB + { 0x0000, 0x0000, 0x0000, }, // FC + { 0x0000, 0x0000, 0x0000, }, // FD + { 0x0000, 0x0000, 0x0000, }, // FE + { 0x0000, 0x0000, 0x0000, }, // FF +}; + +//-------------------------------------------------------------------------- +// function prototypes +// +int sed135x_init(int depth, struct lcd_info *lcd); +static void sed135x_on(void); +static void sed135x_off(void); +static void sed_lcd_bkl(uchar bright); + +extern void fs6377_init(int); +// Why doesn't the real mode work? +#define fs6377_init(mode) _csb281_fs6377_init(0) + +// global flags to determine what, if anything, was found +static int sed135x_ok; +static int sed_disp_mode_crt; + +// GPIO1 is used to control the LCD backlight on many CSB's +#define SED1356_BKL_ON SED1356_REG_GPIO_CTL |= H2SED(SED1356_GPIO_GPIO1) // GPIO1 = 1 +#define SED1356_BKL_OFF SED1356_REG_GPIO_CTL &= H2SED(~SED1356_GPIO_GPIO1) // GPIO1 = 0 + +// GPIO2 is used to sense the presence of a monitor. 0 = monitor connected, 1 = no monitor +// we invert the sense to make it easier to test and more logical. +#define SED1356_CRT SED1356_REG_GPIO_CTL & H2SED(SED1356_GPIO_GPIO2) + +#define SED_ROW_SIZE(_depth_) ((PIXELS_PER_ROW * _depth_) / 8) + +//-------------------------------------------------------------------------- +// sed135x_on +// +// This function turns on the SED1355 or SED1356 LCD and/or CRT +// +static void +sed135x_on(void) +{ + uchar temp8; + int i; + + sed135x_off(); + + // Turn on the LCD and/or CRT + // The SED1356 supports seperate LCD and CRT timing registers + // that have already been setup. We just blank the side we + // aren't using and enable the other. + if (sed_disp_mode_crt) { // 1 = CRT Mode + // Blank the LCD and CRT + SED1356_REG_LCD_DISP_MODE_and_MISC |= H2SED(SED1356_LCD_DISP_BLANK); + SED1356_REG_CRT_DISP_MODE |= H2SED(SED1356_CRT_DISP_BLANK); + + // turn the LCD backlight off + sed_lcd_bkl(0); + + // Set the SED1356 to CRT Mode + SED1356_REG_DISP_MODE = H2SED(SED1356_DISP_SWIV_NORM | + SED1356_DISP_MODE_CRT); + + // Turn on the CRT + SED1356_REG_CRT_DISP_MODE &= ~H2SED(SED1356_CRT_DISP_BLANK); + } // if CRT mode + else { // 0 = LCD Mode + // Blank the LCD and CRT + SED1356_REG_LCD_DISP_MODE_and_MISC |= H2SED(SED1356_LCD_DISP_BLANK); + SED1356_REG_CRT_DISP_MODE |= H2SED(SED1356_CRT_DISP_BLANK); + + // Set the SED1356 to LCD Mode + SED1356_REG_DISP_MODE = H2SED(SED1356_DISP_SWIV_NORM | + SED1356_DISP_MODE_LCD); + + // Turn on the LCD + SED1356_REG_LCD_DISP_MODE_and_MISC &= ~H2SED(SED1356_LCD_DISP_BLANK); + sed_lcd_bkl(0xff); // turn the LCD backlight on/full brightness + } // else LCD Mode +} + +//-------------------------------------------------------------------------- +// sed_lcd_bkl() +// +// This function turns on the LCD backlight connected to GPIO1. This is +// not used if the board has a different method of controlling the +// backlight. Since the Sed has only a single GPIO bit and no way +// to modulate it, we use any non-zero value of bright to turn it on. +// +static void +sed_lcd_bkl(uchar bright) +{ + // Any non-zero value for bright means on + if (bright) + SED1356_BKL_ON; + else + SED1356_BKL_OFF; + +} + +//-------------------------------------------------------------------------- +// sed135x_off +// +// This function turns off the SED1356 LCD and/or CRT and the display +// fifo. It can also turn off the clocks if mode is true, thus allowing +// the programmable clock generator to be changed. +// +static void +sed135x_off(void) +{ + SED1356_REG_DISP_MODE = H2SED(SED1356_DISP_SWIV_NORM | + SED1356_DISP_MODE_OFF); + sed_lcd_bkl(0); // turn the LCD backlight off +} + +//-------------------------------------------------------------------------- +// sed135x_init +// +// This function sets up the sed1355 or sed1356 whichever is found +// +int +sed135x_init(int depth, struct lcd_info *lcd) +{ + vushort temp16; + int i; + + sed135x_ok = 0; + sed_disp_mode_crt = 0; // assume LCD + + if ((depth != 4) && (depth != 8) && (depth != 16)) { + diag_printf("Invalid depth: %d\n", depth); + return -1; + } + + // enable host access + SED1356_REG_REV_and_MISC = 0x0000; + + // Check the ID to make sure we even have a SED1356 installed + temp16 = SED1356_REG_REV_and_MISC & H2SED(SED1356_REV_ID_MASK); + + if (temp16 != H2SED(SED1356_REV_ID_1356)){ + diag_printf("SED1356 Not Found! SED_REG_REV = %04x.\n", temp16); + return -1; + } + + // Disable the display + SED1356_REG_DISP_MODE = H2SED(SED1356_DISP_SWIV_NORM | + SED1356_DISP_MODE_OFF); + + // Test for the presence of a CRT + SED1356_REG_GPIO_CTL = 0x0000; // Disable Backlight + SED1356_REG_GPIO_CFG = H2SED(SED1356_GPIO_GPIO1); // GPIO1 Out, GPIO2 In + if (SED1356_CRT) sed_disp_mode_crt = 0; + else sed_disp_mode_crt = 1; + + // Enable Power Save Mode before we mess with the clocks + SED1356_REG_MEM_CFG_and_REF_RATE = H2SED(SED1356_REF_TYPE_SELF); // set dram to self refresh first + // shut off MCLK + SED1356_REG_PWR_CFG_and_STAT = H2SED(SED1356_PWR_MCLK); + + // Wait until power is down - when MCLK bit goes true + while ((SED1356_REG_PWR_CFG_and_STAT & H2SED(SED1356_PWR_MCLK)) == 0){} + + // Change the programmable clock generator to the desired timing + if (sed_disp_mode_crt) fs6377_init(SED_DISP_MODE_CRT); + else fs6377_init(SED_DISP_MODE_LCD); + + // Re-enable Power + SED1356_REG_PWR_CFG_and_STAT = 0x0000; + + // Common Control Registers + SED1356_REG_MCLK_CFG = H2SED(SED1356_MCLK_SRC_BCLK); + SED1356_REG_LCD_PCLK_CFG = H2SED(SED1356_PCLK_SRC_CLKI); + SED1356_REG_CRT_PCLK_CFG = H2SED(SED1356_PCLK_SRC_CLKI); + SED1356_REG_MEDIA_PCLK_CFG = 0x0000; + SED1356_REG_WAIT_STATE = H2SED(0x0001); + SED1356_REG_MEM_CFG_and_REF_RATE = H2SED(SED1356_MEM_CFG_2CAS_EDO | + SED1356_REF_RATE_2048); + SED1356_REG_MEM_TMG0_and_1 = H2SED(SED1356_MEM_TMG0_EDO50_MCLK33 | + SED1356_MEM_TMG1_EDO50_MCLK33); + SED1356_REG_PANEL_TYPE_and_MOD_RATE = H2SED(SED1356_PANEL_TYPE_16 | + SED1356_PANEL_TYPE_CLR | + SED1356_PANEL_TYPE_TFT); + + // LCD Specific Registers + SED1356_REG_LCD_HOR_DISP = H2SED((PIXELS_PER_ROW/8) - 1); + SED1356_REG_LCD_HOR_NONDISP_and_START = H2SED(SED_HOR_NONDISP_LCD | + (SED_HOR_PULSE_START_LCD << 8)); + SED1356_REG_LCD_HOR_PULSE = H2SED(SED1356_PULSE_WID(SED_HOR_PULSE_WIDTH_LCD) | + SED1356_PULSE_POL_LOW); + SED1356_REG_LCD_VER_DISP_HT_LO_and_HI = H2SED((PIXELS_PER_COL - 1) & 0x3ff); + SED1356_REG_LCD_VER_NONDISP_and_START = H2SED(SED_VER_NONDISP_LCD | + (SED_VER_PULSE_START_LCD << 8)); + SED1356_REG_LCD_VER_PULSE = H2SED(SED1356_PULSE_WID(SED_VER_PULSE_WIDTH_LCD) | + SED1356_PULSE_POL_LOW); + switch (depth) { + case 4: SED1356_REG_LCD_DISP_MODE_and_MISC = H2SED(SED1356_LCD_DISP_BLANK | + SED1356_LCD_DISP_SWIV_NORM | + SED1356_LCD_DISP_4BPP); + break; + case 8: SED1356_REG_LCD_DISP_MODE_and_MISC = H2SED(SED1356_LCD_DISP_BLANK | + SED1356_LCD_DISP_SWIV_NORM | + SED1356_LCD_DISP_8BPP); + break; + default: SED1356_REG_LCD_DISP_MODE_and_MISC = H2SED(SED1356_LCD_DISP_BLANK | + SED1356_LCD_DISP_SWIV_NORM | + SED1356_LCD_DISP_16BPP); break; + } + + SED1356_REG_LCD_DISP_START_LO_and_MID = 0x0000; + SED1356_REG_LCD_DISP_START_HI = 0x0000; + SED1356_REG_LCD_ADD_OFFSET_LO_and_HI = H2SED((SED_ROW_SIZE(depth) / 2) & 0x7ff); + SED1356_REG_LCD_PIXEL_PAN = 0x0000; + SED1356_REG_LCD_FIFO_THRESH_LO_and_HI = 0x0000; // auto mode + + // LCD Specific Registers + SED1356_REG_CRT_HOR_DISP = H2SED((PIXELS_PER_ROW/8) - 1); + SED1356_REG_CRT_HOR_NONDISP_and_START = H2SED(SED_HOR_NONDISP_CRT | + (SED_HOR_PULSE_START_CRT << 8)); + SED1356_REG_CRT_HOR_PULSE = H2SED(SED1356_PULSE_WID(SED_HOR_PULSE_WIDTH_CRT) | + SED1356_PULSE_POL_LOW); + SED1356_REG_CRT_VER_DISP_HT_LO_and_HI = H2SED((PIXELS_PER_COL - 1) & 0x3ff); + SED1356_REG_CRT_VER_NONDISP_and_START = H2SED(SED_VER_NONDISP_CRT | + (SED_VER_PULSE_START_CRT << 8)); + SED1356_REG_CRT_VER_PULSE_and_OUT_CTL = H2SED(SED1356_PULSE_WID(SED_VER_PULSE_WIDTH_CRT) | + SED1356_PULSE_POL_LOW | SED1356_CRT_OUT_DAC_LVL); + switch (depth) { + case 4: SED1356_REG_CRT_DISP_MODE = H2SED(SED1356_CRT_DISP_BLANK | + SED1356_CRT_DISP_4BPP); + break; + case 8: SED1356_REG_CRT_DISP_MODE = H2SED(SED1356_CRT_DISP_BLANK | + SED1356_CRT_DISP_8BPP); + break; + default: SED1356_REG_CRT_DISP_MODE = H2SED(SED1356_CRT_DISP_BLANK | + SED1356_CRT_DISP_16BPP); + break; + } + + + SED1356_REG_CRT_DISP_START_LO_and_MID = 0x0000; + SED1356_REG_CRT_DISP_START_HI = 0x0000; + SED1356_REG_CRT_ADD_OFFSET_LO_and_HI = H2SED((SED_ROW_SIZE(depth) / 2) & 0x7ff); + SED1356_REG_CRT_PIXEL_PAN = 0x0000; + SED1356_REG_CRT_FIFO_THRESH_LO_and_HI = 0x0000; // auto mode + + // Disable Cursor + SED1356_REG_LCD_CURSOR_CTL_and_START_ADD = 0x0000; + SED1356_REG_CRT_CURSOR_CTL_and_START_ADD = 0x0000; + + // Disable BitBlt + SED1356_REG_BLT_CTL_0_and_1 = 0x0000; + SED1356_REG_BLT_ROP_CODE_and_BLT_OP = 0x0000; + SED1356_REG_BLT_SRC_START_LO_and_MID = 0x0000; + SED1356_REG_BLT_SRC_START_HI = 0x0000; + SED1356_REG_BLT_DEST_START_LO_and_MID = 0x0000; + SED1356_REG_BLT_DEST_START_HI = 0x0000; + SED1356_REG_BLT_ADD_OFFSET_LO_and_HI = 0x0000; + SED1356_REG_BLT_WID_LO_and_HI = 0x0000; + SED1356_REG_BLT_HGT_LO_and_HI = 0x0000; + SED1356_REG_BLT_BG_CLR_LO_and_HI = 0x0000; + SED1356_REG_BLT_FG_CLR_LO_and_HI = 0x0000; + + // Fill the LUT, write to both LCD and CRT luts simultaneously + SED1356_REG_LUT_MODE = 0x0000; + for (i = 0; i < 256; i++){ + + SED1356_REG_LUT_ADD = H2SED(i); + SED1356_REG_LUT_DATA = H2SED(sed_lut_16bit[i][0]); // red + SED1356_REG_LUT_DATA = H2SED(sed_lut_16bit[i][1]); // green + SED1356_REG_LUT_DATA = H2SED(sed_lut_16bit[i][2]); // blue + } + + // Disable Power Save Mode + SED1356_REG_PWR_CFG_and_STAT = 0x0000; + + // Set Watchdog +// SED1356_REG_WATCHDOG_CTL = 0x0000; + + // Device found & initialized + sed135x_ok = 1; + + // turn on the display + sed135x_on(); + + // Fill in the info structure + lcd->height = 480; // FIXME + lcd->width = 640; // FIXME + lcd->bpp = depth; + lcd->type = FB_TRUE_RGB565; + lcd->rlen = (640*2*2); // FIXME + lcd->access_size = 2; // Framebuffer fixed at 16 bit access + lcd->stride = 4; // Only on "odd" 16 byte chunks + lcd->fb = SED_GET_PHYS_ADD(0); + lcd->on = sed135x_on; + lcd->off = sed135x_off; + + return 0; +} + +//-------------------------------------------------------------------------- +// sed_pwr_dn() +static void +sed_pwr_dn(void) +{ + + // Enable Host Access + SED1356_REG_REV_and_MISC = 0x0000; + + // Disable the display + SED1356_REG_DISP_MODE = H2SED(SED1356_DISP_MODE_OFF); + + // Enable Power Save Mode + // set dram to self refresh first + SED1356_REG_MEM_CFG_and_REF_RATE = H2SED(SED1356_REF_TYPE_SELF); + + // shut off MCLK + SED1356_REG_PWR_CFG_and_STAT = H2SED(SED1356_PWR_MCLK); + + // Wait until power is down - when MCLK bit goes true + while ((SED1356_REG_PWR_CFG_and_STAT & H2SED(SED1356_PWR_MCLK)) == 0){} +} + +
