diff options
| author | Charles.Forsyth <devnull@localhost> | 2006-12-22 20:52:35 +0000 |
|---|---|---|
| committer | Charles.Forsyth <devnull@localhost> | 2006-12-22 20:52:35 +0000 |
| commit | 46439007cf417cbd9ac8049bb4122c890097a0fa (patch) | |
| tree | 6fdb25e5f3a2b6d5657eb23b35774b631d4d97e4 /doc | |
| parent | 37da2899f40661e3e9631e497da8dc59b971cbd0 (diff) | |
20060303-partial
Diffstat (limited to 'doc')
| -rw-r--r-- | doc/20010618.ms | 941 | ||||
| -rw-r--r-- | doc/20010618.ps.gz | bin | 0 -> 28218 bytes | |||
| -rw-r--r-- | doc/20011003.ps.gz | bin | 0 -> 20599 bytes | |||
| -rw-r--r-- | doc/20020628.pdf | bin | 0 -> 42750 bytes | |||
| -rw-r--r-- | doc/20020628.ps.gz | bin | 0 -> 15538 bytes | |||
| -rw-r--r-- | doc/acid.ms | 2519 | ||||
| -rw-r--r-- | doc/acid.pdf | bin | 0 -> 144913 bytes | |||
| -rw-r--r-- | doc/acidpaper.ms | 1327 | ||||
| -rw-r--r-- | doc/acidpaper.pdf | bin | 0 -> 103411 bytes | |||
| -rw-r--r-- | doc/acidtut.ms | 1062 | ||||
| -rw-r--r-- | doc/acidtut.pdf | bin | 0 -> 93147 bytes | |||
| -rw-r--r-- | doc/acme/acme.ms | 1295 | ||||
| -rw-r--r-- | doc/acme/acme.pdf | bin | 0 -> 179812 bytes | |||
| -rw-r--r-- | doc/asm.ms | 1394 | ||||
| -rw-r--r-- | doc/asm.pdf | bin | 0 -> 69687 bytes | |||
| -rw-r--r-- | doc/backmatter.pdf | bin | 0 -> 25441 bytes | |||
| -rw-r--r-- | doc/bltj.ms | 1073 | ||||
| -rw-r--r-- | doc/bltj.pdf | bin | 0 -> 128005 bytes | |||
| -rw-r--r-- | doc/changes.pdf | bin | 0 -> 129153 bytes | |||
| -rw-r--r-- | doc/changes.ps.gz | bin | 0 -> 56489 bytes | |||
| -rw-r--r-- | doc/compiler.ms | 1174 | ||||
| -rw-r--r-- | doc/compiler.pdf | bin | 0 -> 93467 bytes | |||
| -rw-r--r-- | doc/descent/descent.ms | 2056 | ||||
| -rw-r--r-- | doc/descent/descent.pdf | bin | 0 -> 205877 bytes | |||
| -rw-r--r-- | doc/dev.ms | 497 | ||||
| -rw-r--r-- | doc/dev.pdf | bin | 0 -> 64828 bytes | |||
| -rw-r--r-- | doc/dis.ms | 1824 | ||||
| -rw-r--r-- | doc/dis.pdf | bin | 0 -> 132215 bytes | |||
| -rw-r--r-- | doc/ebookimp.ms | 389 | ||||
| -rw-r--r-- | doc/ebookimp.pdf | bin | 0 -> 40915 bytes | |||
| -rw-r--r-- | doc/fonts | 8 | ||||
| -rw-r--r-- | doc/fonts.pal | 9 | ||||
| -rw-r--r-- | doc/frontmatter.pdf | bin | 0 -> 42849 bytes | |||
| -rw-r--r-- | doc/gridinstall.ms | 136 | ||||
| -rw-r--r-- | doc/gridinstall.pdf | bin | 0 -> 27136 bytes | |||
| -rw-r--r-- | doc/hotchips.ms | 125 | ||||
| -rw-r--r-- | doc/hotchips.pdf | bin | 0 -> 41301 bytes | |||
| -rw-r--r-- | doc/install.ms | 1423 | ||||
| -rw-r--r-- | doc/install.pdf | bin | 0 -> 127086 bytes | |||
| -rw-r--r-- | doc/lego.ms | 642 | ||||
| -rw-r--r-- | doc/lego.pdf | bin | 0 -> 66458 bytes | |||
| -rw-r--r-- | doc/limbo/addendum.ms | 495 | ||||
| -rw-r--r-- | doc/limbo/addendum.pdf | bin | 0 -> 17900 bytes | |||
| -rw-r--r-- | doc/limbo/limbo.ms | 5070 | ||||
| -rw-r--r-- | doc/limbo/limbo.pdf | bin | 0 -> 279092 bytes | |||
| -rwxr-xr-x | doc/limbo/limbo.rc | 20 | ||||
| -rw-r--r-- | doc/limbo/mkfile | 12 | ||||
| -rw-r--r-- | doc/limbo/synsum | 335 | ||||
| -rw-r--r-- | doc/limbotk/tk.ms | 1248 | ||||
| -rw-r--r-- | doc/limbotk/tk.pdf | 35503 | ||||
| -rw-r--r-- | doc/lprof.ms | 514 | ||||
| -rw-r--r-- | doc/lprof.pdf | bin | 0 -> 62112 bytes | |||
| -rw-r--r-- | doc/mk.ms | 1539 | ||||
| -rw-r--r-- | doc/mk.pdf | bin | 0 -> 94338 bytes | |||
| -rw-r--r-- | doc/mkfile | 67 | ||||
| -rw-r--r-- | doc/perform/perform.ms | 982 | ||||
| -rw-r--r-- | doc/perform/perform.pdf | bin | 0 -> 161833 bytes | |||
| -rw-r--r-- | doc/realinferno/real.ms | 611 | ||||
| -rw-r--r-- | doc/realinferno/real.pdf | bin | 0 -> 86736 bytes | |||
| -rw-r--r-- | doc/sh.ms | 2067 | ||||
| -rw-r--r-- | doc/sh.pdf | bin | 0 -> 156359 bytes | |||
| -rw-r--r-- | doc/styx.ms | 737 | ||||
| -rw-r--r-- | doc/styx.pdf | bin | 0 -> 84369 bytes |
63 files changed, 67094 insertions, 0 deletions
diff --git a/doc/20010618.ms b/doc/20010618.ms new file mode 100644 index 00000000..a2de16c7 --- /dev/null +++ b/doc/20010618.ms @@ -0,0 +1,941 @@ +.TL +Inferno 3rd Edition \- June 2001 Revision +.br +Release Notes and Errata +.AI +Vita Nuova +support@vitanuova.com +.br +18 June 2001 +.SP 4 +.NH 1 +Installation +.LP +If you have a previous version of Inferno installed, this one must not +be installed over it. +If you have a Lucent Inferno 2.3 release from 1999 or earlier, you +should make a completely new installation from this CD. +If you have installed the Vita Nuova `Binary and Limited Source' CD you +should also make a new installation from this CD. +If you have previously installed the Vita Nuova Full Source CD from July 2000, +see the section `Updating the July 2000 release' at the end of this document. +(You could also make a fresh installation in a new directory, or remove the old +release and install this one if there are no files you wish to keep.) +.LP +Follow the installation instructions in ``Installation of the Inferno Software'' +at the end of Volume 2. +The printed copy has several mistakes: +.IP \(bu +Page 327 notes that on Unix +if the installation is done as user +.CW root +but a user +.CW inferno +exists the files will be owned by +.CW inferno . +They are not. +Indeed, on Unix there is no reason to install the package as +the super-user +.CW root . +Do the installation as the user, perhaps +.CW inferno , +that is to own the files. +.IP \(bu +It refers on page 327 +to the Windows installation program as +.CW Nt-386.exe . +The correct name is used on the next +page in the actual instructions, namely +.CW \einstall\esetup.exe . +.IP \(bu +The Windows +.CW setup.exe +will offer to create the target installation directory if it does not exist. +On all other systems, you must first create the directory yourself. +.IP \(bu +Solaris and some other commercial Unix systems +do not read the `Joliet' format section of the CD, +which uses Unicode names, and +they +force the names in the non-Joliet portion on the CD to lower case, sometimes +with hyphens converted to underscores. +The installation script on Solaris is therefore +.CW install/solaris_sparc.sh . +The installation script itself works despite this. +Alternatively, if the CD is mounted with the option +.CW nomaplcase +the system will not force the names to lower case +and all names will appear as we intended +(see the Solaris manual entry for +.I mount_hsfs ). +Future CDs will use Rock Ridge format as well as Joliet to avoid the problem. +(We attempted that this time +but ran into trouble on Windows systems because of an error in the CD writing program.) +Linux and FreeBSD show the names we intended. +.LP +When installing on Windows NT or Windows 2000, the installation program determines +if the current user belongs to the +.CW Administrators +group. +If so, the Start Menu entry is created in the +.CW "All Users" +profile, otherwise it is created in the user's private profile. +On Windows 95 and Windows 98, if the user has a private profile the +Start Menu entry is created there, +otherwise it is created in the main system Start Menu. +Furthermore, +.CW setup.exe +looks for +.CW "Start Menu" +to install the shortcut, but that name is locale-dependent, +and thus the shortcut will not be installed correctly in non-English locales, +although Inferno itself will be installed successfully. +.LP +When the installation completes normally, +it prints ``installation complete'', but on some platforms it can then print +``Killed: ...'' followed by the command line used in the installation shell script. +Provided it has said ``installation complete'' and there were no errors noted +prior to that, the installation has succeeded. +The ``Killed'' message results from the installation software +running inside the Inferno environment having shut down that environment. +It does not mean that installation failed. +.LP +If an installation does fail, for instance by running out of space, +delete everything in the target directory before retrying the installation. +Also see the ``Known Problems'' section below. +.NH 1 +CD Number +.LP +There is a set of six unique numbers on the back of the CD case. +You should keep the case or record the numbers: +they identify your subscription, and you will need them +to gain access to subscriber's services we provide electronically. +(They are randomly generated and usable in a 6/49 lottery!) +.NH 1 +Hosted Operating System versions +.LP +The software was compiled on the operating system versions listed below. +UNIX systems show the output from +.CW "uname -a" +and the version of the C compiler, +if known. +See the section +.I "Known problems" +below for a list of known problems for any given release. +.TS +center; +lf(B) lf(R)w(4i) . +Windows Nt Windows NT4.0 SP4 +Linux T{ +Linux vespa 2.2.9-19mdk #1 Wed May 19 19:53:00 GMT 1999 i586 ... +.br +(gcc-2.91.66) +T} +Solaris T{ +SunOS pazzo 5.6 Generic_105181-03 sun4u sparc SUNW,Ultra-5_10 +.br +(gcc 2.95) +T} +FreeBSD 4.x T{ +FreeBSD outside 4.0-RELEASE FreeBSD 4.0-RELEASE #0: ... i386 +.br +(gcc 2.95.2) +T} +HP/UX T{ +HP-UX hpserv1 B.10.20 A 9000/715 2013314861 ... +.br +(c89) +T} +IRIX 5.3 T{ +IRIX invece 5.3 11091812 IP22 mips +.br +(MIPS cc) +T} +Plan9/x86 Third Edition, updates to 5th June 2001 +.TE +.LP +The Windows version has also been tested and +used extensively on the following variants: +.DS +.ft B +Windows '95 +Windows '98 +Windows Me +.ft R +.DE +We have also installed and run the system under Windows 2000, both +client and server, but there is a problem with the cursor under Windows 2000 client (see below). +.LP +Inferno source code is included for the following, but they have neither been +built nor tested: +.DS +.ft B +Plan 9 (mips, sparc, power) +Solaris/386 +Unixware v 2.3 +.ft R +.DE +.NH 1 +Known problems +.LP +See +.CW www.vitanuova.com/inferno/ +for current pointers to information about Inferno. +You should particularly check the Frequently Asked Questions at +.P1 +www.vitanuova.com/inferno/faq.html +.P2 +and the current Bugs list at +.P1 +www.vitanuova.com/inferno/bugs.html +.P2 +The Subscriber area will include online updates after 6 July 2001. +.LP +Now, the bad news: +.IP \(bu +The Windows NT installation program will create a Start Menu shortcut that invokes +.I emu +with a +.CW "-g800x600" +argument. The +.I emu +display will be incorrect if the screen width available is less than 800 pixels and is not a multiple +of four. The problem can be seen if the PC is configured with a resolution of 800x600 pixels +and the Microsoft Office shortcut bar is active. The simplest fix is to change the +.I emu +shortcut to use a +.CW "-g788x600" +argument instead. +.IP \(bu +As mentioned above, the Windows NT installation program looks only for +.CW "Start Menu" +not the locale-dependent name. +.IP \(bu +Changing the cursor image does not work under Windows 2000 Client; +this mainly affects +.I acme , +which changes the cursor when rearranging or resizing frames. +.IP \(bu +The HP version of hosted Inferno was generated by HP/UX version B.10.20. +On the HP platform, +.CW emu +can currently only be run in interpreted mode; the compiled mode (ie, +.CW -c1 +option) +will fault. +.IP \(bu +Some Inferno calls return error strings provided by Windows, without modification. +They can be obscure: +for instance, ``windows error 10049'' is produced by network calls +that attempt to use symbolic names when +.I cs (8) +has not been started. +.IP \(bu +On all systems, the mapping from Inferno names and permissions to the underlying +operating system's names and permissions needs more work, particularly on Windows. +Common problems include: +.RS +.IP \- +File names in the Inferno environment cannot be longer than 27 bytes. +.IP \- +.I Ftpfs +cannot access files with long names or names containing spaces. +.IP \- +The contents of +.CW /dev/user +on Windows will contain the Windows user name, which can contain spaces. +.IP \- +Files created inside the Inferno hierarchy by host system applications +can sometimes have odd permissions when accessed within Inferno. +.IP \- +Readonly files and open files cannot be removed under Windows. +.LP +In general, the mapping between Inferno users and groups and Windows/Nt users and groups +is systematic, as described in +.I sys-stat (2): +.QS +.I Emu +attempts to maintain a limited but consistent map +between Inferno and NT worlds, specifically between Inferno +names and NT security IDs. +Special NT group `Everyone' +represents `other' for file permissions. The Inferno uid is +the file owner under NT; the Inferno gid reported is the +first user in the file's ACL that is neither the owner nor +Everyone; failing that, the gid is the file's owner. +.QE +.LP +The effects of this mapping are sometimes peculiar: for instance, something that +is thought of as a user appears as the group name in +.I ls , +and vice-versa. +Either the implementation or the mapping might need to be rethought. +.RE +.IP \(bu +.I bufio (2) +maintains an internal list of files open for output, +to support its little-used +.CW flush -all +operation. +Unfortunately, that means that if several processes +use the same Bufio module instance (the result of a single +.CW load ) +concurrently for output to different files, they must separately interlock the open, create and close calls. +.IP \(bu +The file +.CW utils/5l/thumb.c +contains comments in the C++ style, which (reasonably enough) are not accepted by the +ANSI C compiler on the HP/UX system we used, and thus the current +.CW 5l +is not compiled for HP/UX; they will be changed to ANSI C comments by +one of the online updates. +.NH 1 +Contents +.LP +This revision offers the following, compared to the July 2000 release. +.SH +.I "Repairs and changes" +.IP \(bu +Many bug fixes and improvements appear throughout. +Many commands have been revised to print usage and diagnostic consistently, and give reliable exit status for +.CW sh . +.IP \(bu +The shell +.CW sh +has repairs and several visible changes: +.I sh-expr (1) +implements a +.CW % +operator for remainder; +a new +.CW @ +operator creates a sub-shell to execute a command, allowing the calling shell to be insulated +by +.CW pctl +(see +.I sh-std (1)) +from changes to name space and environment; +environment variables are stored in printable form; +a newline is allowed after a caret; +and everyone's favourite change, the colon character +.CW : ' ` +is no longer reserved in argument words +(allowing URLs to be given without quoting). +.IP \(bu +Inferno's Acme has been revised to match the version in Plan 9 (Third Edition). +In particular, the +.CW Edit +built-in has been added, allowing the use of structural regular expressions +and the +.CW sam +command language for efficient editing within +Acme, +replacing the +.CW /acme/edit +suite of commands. +The Acme panes have acquired a similar touch of colour. +.IP \(bu +Charon has also had many fixes and improvements, particularly to +Javascript extraction, frames and layout code. +Sometimes the `fix' requires making Charon mimic the interpretation of incorrect HTML +of other browsers. +The PNG image format is now supported. +Cookies are enabled by default (too many sites use them); +parsing and production of the cookie file has been repaired. +The progress bar is more compact. +Support for longer SSL keys is enabled by default. +.IP \(bu +The software installation commands +.CW install/* +have been extensively revised, +and documented by +.I archfs (4) +and +.I create (8). +They are based (though not entirely) on Russ Cox's update +package for Plan 9. +.IP \(bu +.I format (8) +can format an ordinary file, for instance to prepare flash partition +contents in a hosted environment for a native Inferno device. +.IP \(bu +.CW mount +allows the certificate file to be named directly. +.IP \(bu +.CW ns +correctly quotes the fields in its output. +.IP \(bu +.CW /services/server/config +no longer gives the unauthenticated +.CW nobody ') (` +option to +.I styx (8); +some unused entries have also been deleted. +.IP \(bu +.I srv (8) +passes all arguments to servers it spawns, including the command name. +It also ensures each server has its own process group, file descriptors +and name space. +.IP \(bu +.I stack (1) +has a new +.CW -p +option to add names to the source file search list. +.IP \(bu +.I deflate (2) +correctly detects end-of-file; +.I inflate (2) +correctly decodes the combined compressed code-length tables +.IP \(bu +Tk's handling of objects in canvases is better: +raise and lower work properly; stipple is implemented. +.IP \(bu +Tk now knows that a window pops up when resized, and adjusts +the z-order accordingly. +.IP \(bu +Tk's scroller always expands the fraction of a +.CW moveto +when it evaluates the scrolling command. +.SH +.I "New commands and modules" +.IP \(bu +.I ftpfs (4) +provides a way to make a remote FTP site visible in the Inferno name space +(it was documented in the printed manual but not previously included with the system). +.IP \(bu +.I listen (1) +provides a convenient way to listen for incoming calls to one or more Inferno services, +with optional use of +.I ssl (3) +for authentication and encryption. +This can replace the clumsy use of +.I srv (8). +.IP \(bu +.I dial +(see +.I listen (1)) +is the complement of +.I listen ; +it dials a service, with optional authentication and encryption. +.IP \(bu +.I lockfs (4) +enforces multiple reader, exclusive writer access to the contents of a name space. +.IP \(bu +The device +.I prof (3) +serves a name space for controlling the profiling of Limbo modules, +and retrieving the resulting data. +The module +.I profile (2) +offers a convenient interface, relating the profiling data to the source code. +Finally, +.I prof (1) +is the command line interface to enable profiling and display the results. +.IP \(bu +.CW uuencode +and +.CW uudecode +interpret a format used to encode binary data printably on Usenet and in mail messages; +see +.I uuencode (1). +.IP \(bu +.I Read (1) +writes to standard output the result of a single +.I sys-read (2) +of a given number of bytes from standard input, +with optional seek offset. +(See +.I getlines +in +.I sh-std (1) +for a way to read a line from standard input.) +.IP \(bu +.I Tcs (1) +uses +.I convcs (2) +to offer character set conversion on files. +.IP \(bu +.I wm-misc (1) +mentions +.CW wm/mand , +a browser for fractals, +and +.CW wm/polyhedra , +a polyhedra viewer +.IP \(bu +.I cfg (2) +provides a module to read configuration files. +.IP \(bu +.I dividers (2) +provides user-draggable dividing lines to separate Tk widgets, +allowing screen space to be allocated to widgets by dragging a dividing line. +.IP \(bu +.I imagefile (2) +offers support for reading PNG image files +.SH +.I "Interface changes and extensions" +.IP \(bu +.CW Url +.CW /module/url.m ) ( +now requires an +.CW init +function to be invoked before other functions in the module +.IP \(bu +.I convcs (2) +has changed its interface significantly (see the manual page); +it also offers support for UTF-7. +Even the module name has changed, to +.CW Convcs +(from +.CW ConvCS ). +.IP \(bu +.I plumber (8) +now returns an error to a message's sender if it cannot be plumbed, +as was previously documented; +it handles +.CW ^ +correctly in regular expressions +.IP \(bu +.I readdir (2) +returns all file names in union directories +.IP \(bu +.I string (2)'s +quoting and unquoting functions are correct and more efficient +.IP \(bu +.I styxlib (2) +forces an internal process into a new empty name space to +allow detection of the last unmount of the served space by a file server +.IP \(bu +.I translate (2) +supports writing Unicode characters in hexadecimal using Limbo's \f5\eu\fP\fIXXXX\fP +syntax +.IP \(bu +.I workdir (2) +returns a better guess at the current directory on native Inferno +(hosted implementation will be supported in the next update) +.IP \(bu +.I cs (8) +keeps a cache of recent translations; +.I ipsrv (8) +uses UDP/IP by default, not TCP/IP, for domain name lookup +.IP \(bu +.I httpd (8) +can now be said to work as documented +.IP \(bu +.I wm-sh (1) +provides a new control file +.CW /chan/shctl +to allow it to be kept informed +of the current directory (and +.CW /lib/wmsetup +defines a Shell function to do that) +and to implement buttons below the title bar, +as with +.I mash-tk (1). +.IP \(bu +A collection of playing card images has been added in +.CW /icons/cards . +.IP \(bu +.CW /lib/wmsetup +defines a +.CW cd +function to keep +.CW wm/sh +informed of the current directory; +the +.CW Web +menu item is now called +.CW Charon ; +a new +.CW Manual +entry invokes +.I wm-man (1); +and the game +.CW Tetris +has been added to the +.CW Misc +submenu. +.IP \(bu +The manual pages +.I draw-font (2), +.I draw-image (2), +and +.I draw-screen (2) +now document +.CW display +and +.CW screen +members of various data structures. +.IP \(bu +.I security-auth (2) +and +.I security-login (2) +note that +.CW keyring.m +must be included. +.IP \(bu +In +.I sh (2), +the function +.CW exec +has been renamed +.CW run , +to reflect more accurately what it does. +.IP \(bu +In +.I sys-pctl (2), +the type of the second parameter to +.CW Sys->pctl +is actually +.CW "list of int" +not +.CW "list of ref Sys->FD" . +.IP \(bu +.I ssl (3) +documents the new +.CW encalg +and +.CW hashalg +files, which list the supported algorithms. +.IP \(bu +.I canvas (9) +describes the new +.CW -winding +option +.IP \(bu +.CW /services/cs/services +lists the Software Download Server port +and removes others that are obsolete. +.IP \(bu +.CW /services/server/config +no longer gives the unauthenticated +.CW nobody ') (` +option to +.I styx (8); +some unused entries have also been deleted. +.SH +.I "Limbo compiler" +.IP \(bu +The Limbo compiler correctly clears reference values (eg, +.CW list , +.CW ref +and +.CW array ) +when they go out of scope when necessary (eg, in loops), causing the storage to be reclaimed, +and the values to be correctly +.CW nil +when the scope is next entered. +.IP \(bu +A bug that caused temporaries sometimes to be reused too early has been fixed. +.IP \(bu +The compile-time evaluation of floating-point +.CW > +does not calculate +.CW >= +instead. +.IP \(bu +A little context has been added to `syntax error' messages. +.SH +.I "Compilers and architectures" +.IP \(bu +The system now supports the Thumb variant of the ARM architecture, +including full interworking of Thumb code and 32-bit ARM code; +there is a Thumb JIT compiler for the virtual machine, and support for +Thumb mode in the disassembler and debugger. +The Thumb compiler is +.CW tc ; +the existing ARM linker +.CW 5l +links both ARM and Thumb code. +.IP \(bu +A bug in +.CW 5l +has been fixed that could very occasionally place a literal pool inside a case table. +.IP \(bu +The compilers find include files correctly under Nt. +.SH +.I "Hosted and Native Inferno" +.IP \(bu +.I Emu +has the following fixes and improvements: +.RS +.IP \- +support for logging of memory pool usage +.IP \- +FreeBSD support uses +.I rfork +not +.I pthreads . +.IP \- +Linux support no longer relies on being able to set the TSS register. +.IP \- +A memory leak when a kernel process exits has been fixed. +.IP \- +A start has been made on tidying up the audio support; the +.CW svp.c +file has gone and platforms that do not currently support audio +no longer must include a stub driver. +.IP \- +The Linux and +FreeBSD ports use an alternative implementation of Inferno graphics +under X11 that should allow the program to run under 16-bit graphics and higher. +.RE +.IP \(bu +For the native kernels only: +.RS +.IP \- +The native kernel implements Rob Pike's `lexical names' (as in Plan 9), which helps +provide more sensible data to +.I workdir (2). +The hosted Inferno implementation of lexical names will appear in a future update. +Note that +.CW /os/port/ns.c +no longer exists, and native kernel configuration files should no longer mention +.CW ns +in the +.CW port +section. +Drivers that serve a directory hierarchy might need to support the +.CW DEVDOTDOT +value for the table index in their +.CW devgen +function. +.IP \- +.CW os/ip/bootp.c +will correctly time out if there is no response. +.CW os/ip/ihbootp.c +will now work with an RFC1084 BOOTP server. +Note that both are likely to be replaced in future by +Limbo applications that do BOOTP and DHCP. +.IP \- +.CW os/pc/cga.c +provides a replacement for +.CW screen.c +for use when only a simple CGA console is needed or possible. +.IP \- +The file descriptor array is correctly freed when the file descriptor +group is closed, fixing a memory leak. +.IP \- +A few files that were left off the July 2000 CD have been included this time. +.IP \- +ARM/Thumb kernels have been implemented; those implementations +are not included in this update because the hardware is specialised but ask if you could use them. +.RE +.LP +The remaining points are common to both hosted and native Inferno: +.IP \(bu +A write on closed pipe does not produce an exception if the process has been killed. +.IP \(bu +.I Devbwrite +will not lose memory if an error is raised by the device driver (eg, interrupt). +.IP \(bu +.I ssl (3) +has +.CW encalg +and +.CW hashalg +files +.IP \(bu +.I Kfs (3) +offers +.CW readonly +and +.CW readwrite +commands, and an +.CW ro +(readonly) +option to the +.CW init +request. +.IP \(bu +.I Srv (3) +rejects attempts to create an unusable name containing a `/'. +.IP \(bu +The +.CW NODEVS +flag of +.I sys-pctl (2) +is correctly copied when the name space is duplicated. +.\" the following is only in the 386 version +.\" .IP \(bu +.\" .I Prog (3) +.\" can optionally give the correct Dis pc for the debugger even for compiled modules; if +.\" .CW cflag +.\" (or +.\" .CW -c +.\" option for +.\" .I emu ) +.\" is 2 not 1, a mapping table is retained after JIT compilation. +.SH +.I "SA1100 native" +.IP \(bu +A new +.CW archether +function in +.CW arch*.c +(when required) +is invoked by +.CW devether.c +to discover the configuration of Ethernet devices. +.IP \(bu +.CW devuart.c +supports the use of XON/XOFF; +the first line of the +.CW stat +file gives the current UART settings; +it no longer panics if an overrun occurs; +and +.CW setlength +accesses the correct structures. +.IP \(bu +The CS8900 driver +.CW ether8900.c +is more general, supporting the I/O port interface as well as the memory interface. +.IP \(bu +Obsolete definitions have been removed from several include files +(eg, +.CW io.h ) +and obsolete (typically #ifdef'd code) has been removed from source files. +.NH 1 +IDEA™ +.LP +The software includes an implementation of the IDEA encryption algorithm, +for non-commercial use. +IDEA was patented by Ascom-Tech AG (European patent EP 0 482 154 B1, US patent number +US005214703, and patent filed in Japan). +At time of writing, there was no licence fee required for noncommercial use. +If you intend to use IDEA encryption commercially with Inferno, you should consult +.CW http://www.it-sec.com/idea_lic_policy.html +for the current licensing policy of iT_SEC Systec Ltd, which currently holds the patents and trademark. +Note that IDEA is not required for +successful use of Inferno. +It is not by default enabled by +.I rstyxd (8), +and otherwise is used only by SSL3 (for the browser), in +.CW /appl/lib/crypt/ssl3.b , +where it can be disabled. +.NH 1 +Updating the July 2000 Full Source release +.LP +A set of update packages for the July 2000 release is provided in the directory +.CW /updates +on this June 2001 CD. +You should install the updates as the host operating system user who owns the Inferno files and directories +on your system. +You might like to take a backup copy of the existing tree, just in case. +Do the following to update the installation. +(Next time we hope to provide a more automated scheme. +You might check +.CW www.vitanuova.com/inferno/ +to see if there are any more recent instructions.) +.IP 1. +Copy the directory +.CW updates +and its subdirectories from the CD to a directory +.CW updates +in the root of your existing Inferno hierarchy. +Make sure there is sufficient space in the file system holding that hierarchy. +If all platform files are copied and installed, about 45 Mbytes will be needed +to hold the compressed update packages in +.CW updates , +with a further +35 Mbytes needed for an temporary uncompressed copy +of the largest package, and allow 10 Mbytes for new additional material, giving +90 Mbytes in all. +The +.CW updates +directory can be removed after installation. +.IP 2. +Start the existing Inferno +.I emu ; +it will be quicker if you use the +.CW -c1 +option to force compiled mode. +It is best to use only the Inferno console; do not start the window system, since +the updates will change files in the running system. +On the other hand, it is a good idea to make the window in the host +operating system a scrolling one, so that you can scroll back to +see any errors. +All following commands are run in the Inferno environment. +.IP 3. +Change to the directory +.CW updates +and load the standard Inferno shell module: +.RS +.P1 +cd /updates +load std +.P2 +.RE +.NE 1i +.IP 4. +Unpack the updated installation software: +.RS +.P1 +gunzip <install.tgz | {cd /; gettar} +.P2 +.RE +.IP 5. +Update the installed Inferno, source and utility source directories +using the script +.CW applybase : +.RS +.P1 +sh ./applybase +.P2 +.LP +That script updates the +.CW inferno , +.CW src +and +.CW utils +packages. +You will see one warning: +.P1 +skipping /dis/install/inst.dis: locally modified +.P2 +because that file was updated by step 4. +You might see other warnings if you have modified any other files from the original release. +.RE +.IP 6. +Update one or more platform specific files for your platform(s). +The directories are named after the platforms: +.CW Solaris +for Solaris, +.CW Plan9 +for Plan 9, +.CW Nt +for all Windows systems, +and so on. +For each +.I platform +that you run, do: +.RS +.P1 +for (a in \fIplatform\fP/*) {install/inst -v -t $a} +.P2 +.RE +.IP 7. +Quit +.I emu . +The new version of +.I emu +will be called +.CW emu.new +in the platform-specific directory +(eg, +.CW Solaris/sparc/bin/emu.new ). +Rename the old +.CW emu +file as +.CW emu.old , +then rename the new +.CW emu.new +as +.CW emu +on Plan 9 and Unix systems, +or +.CW emu.exe +on Windows. +When run, it should announce itself as +``Inferno Third Edition (18 Jun 2001)''. diff --git a/doc/20010618.ps.gz b/doc/20010618.ps.gz Binary files differnew file mode 100644 index 00000000..7d15a29f --- /dev/null +++ b/doc/20010618.ps.gz diff --git a/doc/20011003.ps.gz b/doc/20011003.ps.gz Binary files differnew file mode 100644 index 00000000..e3f9375f --- /dev/null +++ b/doc/20011003.ps.gz diff --git a/doc/20020628.pdf b/doc/20020628.pdf Binary files differnew file mode 100644 index 00000000..72935407 --- /dev/null +++ b/doc/20020628.pdf diff --git a/doc/20020628.ps.gz b/doc/20020628.ps.gz Binary files differnew file mode 100644 index 00000000..03cab0b3 --- /dev/null +++ b/doc/20020628.ps.gz diff --git a/doc/acid.ms b/doc/acid.ms new file mode 100644 index 00000000..f9193cb9 --- /dev/null +++ b/doc/acid.ms @@ -0,0 +1,2519 @@ +.am DS +.ft I +.. +.am DE +.ft R +.. +.ta 1i 2.3i 4.5i (optional to set tabs) +.TL +Acid Reference Manual +.AU +Phil Winterbottom +philw@plan9.bell-labs.com +.FS +\l'1i' +.br +Previously appeared with minor differences as the +``Acid Manual'' in +.I "Plan 9 Programmer's Manual, Volume 2 (Second Edition)". +.FE +.SH +Introduction +.PP +Acid is a general purpose, source level symbolic debugger. +The debugger is built around a simple command language. +The command language, distinct from the language of the program being debugged, +provides a flexible user interface that allows the debugger +interface to be customized for a specific application or architecture. +Moreover, it provides an opportunity to write test and +verification code independently of a program's source code. +Acid is able to debug multiple +processes provided they share a common set of symbols, such as the processes in +a threaded program. +.PP +Like other language-based solutions, Acid presents a poor user interface but +provides a powerful debugging tool. +Application of Acid to hard problems is best approached by writing functions off-line +(perhaps loading them with the +.CW include +function or using the support provided by +.I acme (1)), +rather than by trying to type intricate Acid operations +at the interactive prompt. +.PP +Acid allows the execution of a program to be controlled by operating on its +state while it is stopped and by monitoring and controlling its execution +when it is running. Each program action that causes a change +of execution state is reflected by the execution +of an Acid function, which may be user defined. +A library of default functions provides the functionality of a normal debugger. +.PP +On Plan 9, a process is controlled by writing messages to a control file in the +.I proc (3) +file system. Each control message has a corresponding Acid function, which +sends the message to the process. These functions take a process id +.I pid ) ( +as an +argument. The memory and text file of the program may be manipulated using +the indirection operators. The symbol table, including source cross reference, +is available to an Acid program. The combination allows complex operations +to be performed both in terms of control flow and data manipulation. +.SH +Input format and \f(CWwhatis\fP +.PP +Comments start with +.CW // +and continue to the end of the line. +Input is a series of statements and expressions separated by semicolons. +At the top level of the interpreter, the builtin function +.CW print +is called automatically to display the result of all expressions except function calls. +A unary +.CW + +may be used as a shorthand to force the result of a function call to be printed. +.PP +Also at the top level, newlines are treated as semicolons +by the parser, so semicolons are unnecessary when evaluating expressions. +.PP +When Acid starts, it loads the default program modules, +enters interactive mode, and prints a prompt. In this state Acid accepts +either function definitions or statements to be evaluated. +In this interactive mode +statements are evaluated immediately, while function definitions are +stored for later invocation. +.PP +The +.CW whatis +operator can be used to report the state of identifiers known to the interpreter. +With no argument, +.CW whatis +reports the name of all defined Acid functions; when supplied with an identifier +as an argument it reports any variable, function, or type definition +associated with the identifier. +Because of the way the interpreter handles semicolons, +the result of a +.CW whatis +statement can be returned directly to Acid without adding semicolons. +A syntax error or interrupt returns Acid to the normal evaluation +mode; any partially evaluated definitions are lost. +.SH +Using the Library Functions +.PP +After loading the program binary, Acid loads the portable and architecture-specific +library functions that form the standard debugging environment. +These files are Acid source code and are human-readable. +The following example uses the standard debugging library to show how +language and program interact: +.P1 +% acid /bin/ls +/bin/ls:mips plan 9 executable + +/sys/lib/acid/port +/sys/lib/acid/mips +acid: new() +75721: system call _main ADD $-0x14,R29 +75721: breakpoint main+0x4 MOVW R31,0x0(R29) +acid: bpset(ls) +acid: cont() +75721: breakpoint ls ADD $-0x16c8,R29 +acid: stk() +At pc:0x0000141c:ls /sys/src/cmd/ls.c:87 +ls(s=0x0000004d,multi=0x00000000) /sys/src/cmd/ls.c:87 + called from main+0xf4 /sys/src/cmd/ls.c:79 +main(argc=0x00000000,argv=0x7ffffff0) /sys/src/cmd/ls.c:48 + called from _main+0x20 /sys/src/libc/mips/main9.s:10 +acid: PC +0xc0000f60 +acid: *PC +0x0000141c +acid: ls +0x0000141c +.P2 +The function +.CW new() +creates a new process and stops it at the first instruction. +This change in state is reported by a call to the +Acid function +.CW stopped , +which is called by the interpreter whenever the debugged program stops. +.CW Stopped +prints the status line giving the pid, the reason the program stopped +and the address and instruction at the current PC. +The function +.CW bpset +makes an entry in the breakpoint table and plants a breakpoint in memory. +The +.CW cont +function continues the process, allowing it to run until some condition +causes it to stop. In this case the program hits the breakpoint placed on +the function +.CW ls +in the C program. Once again the +.CW stopped +routine is called to print the status of the program. The function +.CW stk +prints a C stack trace of the current process. It is implemented using +a builtin Acid function that returns the stack trace as a list; the code +that formats the information is all written in Acid. +The Acid variable +.CW PC +holds the address of the +cell where the current value of the processor register +.CW PC +is stored. By indirecting through +the value of +.CW PC +the address where the program is stopped can be found. +All of the processor registers are available by the same mechanism. +.SH +Types +.PP +An Acid variable has one of four types: +.I integer , +.I float , +.I list , +or +.I string . +The type of a variable is inferred from the type of the right-hand +side of the assignment expression which last set its value. +Referencing a variable that has not yet +been assigned draws a "used but not set" error. Many of the operators may +be applied to more than +one type; for these operators the action of the operator is determined by +the types of its operands. The action of each operator is defined in the +.I Expressions +section of this manual. +.SH +Variables +.PP +Acid has three kinds of variables: variables defined by the symbol table +of the debugged program, variables that are defined and maintained +by the interpreter as the debugged program changes state, and variables +defined and used by Acid programs. +.PP +Some examples of variables maintained by the interpreter are the register +pointers listed by name in the Acid list variable +.CW registers , +and the symbol table listed by name and contents in the Acid variable +.CW symbols . +.PP +The variable +.CW pid +is updated by the interpreter to select the most recently created process +or the process selected by the +.CW setproc +builtin function. +.SH 1 +Formats +.PP +In addition to a type, variables have formats. The format is a code +letter that determines the printing style and the effect of some of the +operators on that variable. The format codes are derived from the format +letters used by +.I db (1). +By default, symbol table variables and numeric constants +are assigned the format code +.CW X , +which specifies 32-bit hexadecimal. +Printing a variable with this code yields the output +.CW 0x00123456 . +The format code of a variable may be changed from the default by using the +builtin function +.CW fmt . +This function takes two arguments, an expression and a format code. After +the expression is evaluated the new format code is attached to the result +and forms the return value from +.CW fmt . +The backslash operator is a short form of +.CW fmt . +The format supplied by the backslash operator must be the format character +rather than an expression. +If the result is assigned to a variable the new format code is maintained +in the variable. For example: +.P1 +acid: x=10 +acid: print(x) +0x0000000a +acid: x = fmt(x, 'D') +acid: print(x, fmt(x, 'X')) +10 0x0000000a +acid: x +10 +acid: x\eo +12 +.P2 +The supported format characters are: +.RS +.IP \f(CWo\fP +Print two-byte integer in octal. +.IP \f(CWO\fP +Print four-byte integer in octal. +.IP \f(CWq\fP +Print two-byte integer in signed octal. +.IP \f(CWQ\fP +Print four-byte integer in signed octal. +.IP \f(CWB\fP +Print four-byte integer in binary. +.IP \f(CWd\fP +Print two-byte integer in signed decimal. +.IP \f(CWD\fP +Print four-byte integer in signed decimal. +.IP \f(CWY\fP +Print eight-byte integer in signed decimal. +.IP \f(CWx\fP +Print two-byte integer in hexadecimal. +.IP \f(CWX\fP +Print four-byte integer in hexadecimal. +.IP \f(CWu\fP +Print two-byte integer in unsigned decimal. +.IP \f(CWU\fP +Print four-byte integer in unsigned decimal. +.IP \f(CWZ\fP +Print eight-byte integer in unsigned decimal. +.IP \f(CWf\fP +Print single-precision floating point number. +.IP \f(CWF\fP +Print double-precision floating point number. +.IP \f(CWg\fP +Print a single precision floating point number in string format. +.IP \f(CWG\fP +Print a double precision floating point number in string format. +.IP \f(CWb\fP +Print byte in hexadecimal. +.IP \f(CWc\fP +Print byte as an ASCII character. +.IP \f(CWC\fP +Like +.CW c , +with +printable ASCII characters represented normally and +others printed in the form \f(CW\ex\fInn\fR. +.IP \f(CWs\fP +Interpret the addressed bytes as UTF characters +and print successive characters until a zero byte is reached. +.IP \f(CWr\fP +Print a two-byte integer as a rune. +.IP \f(CWR\fP +Print successive two-byte integers as runes +until a zero rune is reached. +.IP \f(CWY\fP +Print successive eight-byte integers in hexadecimal. +.IP \f(CWi\fP +Print as machine instructions. +.IP \f(CWI\fP +As +.CW i +above, but print the machine instructions in +an alternate form if possible: +.CW sunsparc +and +.CW mipsco +reproduce the manufacturers' syntax. +.IP \f(CWa\fP +Print the value in symbolic form. +.RE +.SH +Complex types +.PP +Acid permits the definition of the layout of memory. +The usual method is to use the +.CW -a +flag of the compilers to produce Acid-language descriptions of data structures (see +.I 2c (1)) +although such definitions can be typed interactively. +The keywords +.CW complex , +.CW adt , +.CW aggr , +and +.CW union +are all equivalent; the compiler uses the synonyms to document the declarations. +A complex type is described as a set of members, each containing a format letter, +an offset in the structure, and a name. For example, the C structure +.P1 +struct List { + int type; + struct List *next; +}; +.P2 +is described by the Acid statement +.P1 +complex List { + 'D' 0 type; + 'X' 4 next; +}; +.P2 +.SH +Scope +.PP +Variables are global unless they are either parameters to functions +or are declared as +.CW local +in a function body. Parameters and local variables are available only in +the body of the function in which they are instantiated. +Variables are dynamically bound: if a function declares a local variable +with the same name as a global variable, the global variable will be hidden +whenever the function is executing. +For example, if a function +.CW f +has a local called +.CW main , +any function called below +.CW f +will see the local version of +.CW main , +not the external symbol. +.SH 1 +Addressing +.PP +Since the symbol table specifies addresses, +to access the value of program variables +an extra level of indirection +is required relative to the source code. +For consistency, the registers are maintained as pointers as well; Acid variables with the names +of processor registers point to cells holding the saved registers. +.PP +The location in a file or memory image associated with +an address is calculated from a map +associated with the file. +Each map contains one or more quadruples (\c +.I t , +.I b , +.I e , +.I f \|), +defining a segment named +.I t +(usually +.CW text , +.CW data , +.CW regs , +or +.CW fpregs ) +mapping addresses in the range +.I b +through +.I e +to the part of the file +beginning at +offset +.I f . +The memory model of a Plan 9 process assumes +that segments are disjoint. There +can be more than one segment of a given type (e.g., a process +may have more than one text segment) but segments +may not overlap. +An address +.I a +is translated +to a file address +by finding a segment +for which +.I b ++ +.I a +< +.I e ; +the location in the file +is then +.I address ++ +.I f +\- +.I b . +.PP +Usually, +the text and initialized data of a program +are mapped by segments called +.CW text +and +.CW data . +Since a program file does not contain bss, stack, or register data, +these data are +not mapped by the data segment. +The text segment is mapped similarly in the memory image of +a normal (i.e., non-kernel) process. +However, the segment called +.CW *data +maps memory from the beginning to the end of the program's data space. +This region contains the program's static data, the bss, the +heap and the stack. A segment +called +.CW *regs +maps the registers; +.CW *fpregs +maps the floating point registers (if they exist). +.PP +Sometimes it is useful to define a map with a single segment +mapping the region from 0 to 0xFFFFFFFF; such a map +allows the entire file to be examined +without address translation. The builtin function +.CW map +examines and modifies Acid's map for a process. +.SH 1 +Name Conflicts +.PP +Name conflicts between keywords in the Acid language, symbols in the program, +and previously defined functions are resolved when the interpreter starts up. +Each name is made unique by prefixing enough +.CW $ +characters to the front of the name to make it unique. Acid reports +a list of each name change at startup. The report looks like this: +.P1 +/bin/sam: mips plan 9 executable +/lib/acid/port +/lib/acid/mips +Symbol renames: + append=$append T/0xa4e40 +acid: +.P2 +The symbol +.CW append +is both a keyword and a text symbol in the program. The message reports +that the text symbol is now named +.CW $append . +.SH +Expressions +.PP +Operators have the same +binding and precedence as in C. +For operators of equal precedence, expressions are evaluated from left to right. +.SH 1 +Boolean expressions +.PP +If an expression is evaluated for a boolean condition the test +performed depends on the type of the result. If the result is of +.I integer +or +.I floating +type the result is true if the value is non-zero. If the expression is a +.I list +the result is true if there are any members in the list. +If the expression is a +.I string +the result is true if there are any characters in the string. +.DS + primary-expression: + identifier + identifier \f(CW:\fP identifier + constant + \f(CW(\fP expression \f(CW)\fP + \f(CW{\fP elist \f(CW}\fP + + elist: + expression + elist , expression +.DE +An identifier may be any legal Acid variable. The colon operator returns the +address of parameters or local variables in the current stack of a program. +For example: +.P1 +*main:argc +.P2 +prints the number of arguments passed into main. Local variables and parameters +can only be referenced after the frame has been established. It may be necessary to +step a program over the first few instructions of a breakpointed function to properly set +the frame. +.PP +Constants follow the same lexical rules as C. +A list of expressions delimited by braces forms a list constructor. +A new list is produced by evaluating each expression when the constructor is executed. +The empty list is formed from +.CW {} . +.P1 +acid: x = 10 +acid: l = { 1, x, 2\eD } +acid: x = 20 +acid: l +{0x00000001 , 0x0000000a , 2 } +.P2 +.SH 1 +Lists +.PP +Several operators manipulate lists. +.DS + list-expression: + primary-expression + \f(CWhead\fP primary-expression + \f(CWtail\fP primary-expression + \f(CWappend\fP expression \f(CW,\fP primary-expression + \f(CWdelete\fP expression \f(CW,\fP primary-expression +.DE +The +.I primary-expression +for +.CW head +and +.CW tail +must yield a value of type +.I list . +If there are no elements in the list the value of +.CW head +or +.CW tail +will be the empty list. Otherwise +.CW head +evaluates to the first element of the list and +.CW tail +evaluates to the rest. +.P1 +acid: head {} +{} +acid: head {1, 2, 3, 4} +0x00000001 +acid: tail {1, 2, 3, 4} +{0x00000002 , 0x00000003 , 0x00000004 } +.P2 +The first operand of +.CW append +and +.CW delete +must be an expression that yields a +.I list . +.CW Append +places the result of evaluating +.I primary-expression +at the end of the list. +The +.I primary-expression +supplied to +.CW delete +must evaluate to an integer; +.CW delete +removes the +.I n 'th +item from the list, where +.I n +is integral value of +.I primary-expression. +List indices are zero-based. +.P1 + acid: append {1, 2}, 3 + {0x00000001 , 0x00000002 , 0x00000003 } + acid: delete {1, 2, 3}, 1 + {0x00000001 , 0x00000003 } +.P2 +.PP +Assigning a list to a variable copies a reference to the list; if a list variable +is copied it still points at the same list. To copy a list, the elements must +be copied piecewise using +.CW head +and +.CW append . +.SH 1 +Operators +.PP +.DS + postfix-expression: + list-expression + postfix-expression \f(CW[\fP expression \f(CW]\fP + postfix-expression \f(CW(\fP argument-list \f(CW)\fP + postfix-expression \f(CW.\fP tag + postfix-expression \f(CW->\fP tag + postfix-expression \f(CW++\fP + postfix-expression \f(CW--\fP + + argument-list: + expression + argument-list , expression +.DE +The +.CW [ +.I expression +.CW ] +operator performs indexing. +The indexing expression must result in an expression of +.I integer +type, say +.I n . +The operation depends on the type of +.I postfix-expression . +If the +.I postfix-expression +yields an +.I integer +it is assumed to be the base address of an array in the memory image. +The index offsets into this array; the size of the array members is +determined by the format associated with the +.I postfix-expression . +If the +.I postfix-expression +yields a +.I string +the index operator fetches the +.I n 'th +character +of the string. If the index points beyond the end +of the string, a zero is returned. +If the +.I postfix-expression +yields a +.I list +then the indexing operation returns the +.I n 'th +item of the list. +If the list contains less than +.I n +items the empty list +.CW {} +is returned. +.PP +The +.CW ++ +and +.CW -- +operators increment and decrement integer variables. +The amount of increment or decrement depends on the format code. These postfix +operators return the value of the variable before the increment or decrement +has taken place. +.DS + unary-expression: + postfix-expression + \f(CW++\fP unary-expression + \f(CW--\fP unary-expression + + unary-operator: one of + \f(CW*\fP \f(CW@\fP \f(CW+\fP \f(CW-\fP ~ \f(CW!\fP +.DE +The operators +.CW * +and +.CW @ +are the indirection operators. +.CW @ +references a value from the text file of the program being debugged. +The size of the value depends on the format code. The +.CW * +operator fetches a value from the memory image of a process. If either +operator appears on the left-hand side of an assignment statement, either the file +or memory will be written. The file can only be modified when Acid is invoked +with the +.CW -w +option. +The prefix +.CW ++ +and +.CW -- +operators perform the same operation as their postfix counterparts but +return the value after the increment or decrement has been performed. Since the +.CW ++ +and +.CW * +operators fetch and increment the correct amount for the specified format, +the following function prints correct machine instructions on a machine with +variable length instructions, such as the 68020 or 386: +.P1 + defn asm(addr) + { + addr = fmt(addr, 'i'); + loop 1, 10 do + print(*addr++, "\en"); + } +.P2 +The operators +.CW ~ +and +.CW ! +perform bitwise and logical negation respectively. Their operands must be of +.I integer +type. +.DS + cast-expression: + unary-expression + unary-expression \f(CW\e\fP format-char + \f(CW(\fP complex-name \f(CW)\fP unary-expression +.DE +A unary expression may be preceded by a cast. The cast has the effect of +associating the value of +.I unary-expression +with a complex type structure. +The result may then be dereferenced using the +.CW . +and +.CW -> +operators. +.PP +An Acid variable may be associated with a complex type +to enable accessing the type's members: +.P1 +acid: complex List { + 'D' 0 type; + 'X' 4 next; +}; +acid: complex List lhead +acid: lhead.type +10 +acid: lhead = ((List)lhead).next +acid: lhead.type +-46 +.P2 +Note that the +.CW next +field cannot be given a complex type automatically. +.PP +When entered at the top level of the interpreter, +an expression of complex type +is treated specially. +If the type is called +.CW T +and an Acid function also called +.CW T +exists, +then that function will be called with the expression as its argument. +The compiler options +.CW -a +and +.CW -aa +will generate Acid source code defining such complex types and functions; see +.I 2c (1). +.PP +A +.I unary-expression +may be qualified with a format specifier using the +.CW \e +operator. This has the same effect as passing the expression to the +.CW fmt +builtin function. +.DS + multiplicative-expression: + cast-expression + multiplicative-expression \f(CW*\fP multiplicative-expression + multiplicative-expression \f(CW/\fP multiplicative-expression + multiplicative-expression \f(CW%\fP multiplicative-expression +.DE +These operate on +.I integer +and +.I float +types and perform the expected operations: +.CW * +multiplication, +.CW / +division, +.CW % +modulus. +.DS + additive-expression: + multiplicative-expression + additive-expression \f(CW+\fP multiplicative-expression + additive-expression \f(CW-\fP multiplicative-expression +.DE +These operators perform as expected for +.I integer +and +.I float +operands. +Unlike in C, +.CW + +and +.CW - +do not scale the addition based on the format of the expression. +This means that +.CW i=i+1 +will always add 1 but +.CW i++ +will add the size corresponding to the format stored with +.CW i . +If both operands are of either +.I string +or +.I list +type then addition is defined as concatenation. +Adding a string and an integer is treated as concatenation +with the Unicode character corresponding to the integer. +Subtraction is undefined for strings and lists. +.DS + shift-expression: + additive-expression + shift-expression \f(CW<<\fP additive-expression + shift-expression \f(CW>>\fP additive-expression +.DE +The +.CW >> +and +.CW << +operators perform bitwise right and left shifts respectively. Both +require operands of +.I integer +type. +.DS + relational-expression: + relational-expression \f(CW<\fP shift-expression + relational-expression \f(CW>\fP shift-expression + relational-expression \f(CW<=\fP shift-expression + relational-expression \f(CW>=\fP shift-expression + + equality-expression: + relational-expression + relational-expression \f(CW==\fP equality-expression + relational-expression \f(CW!=\fP equality-expression +.DE +The comparison operators are +.CW < +(less than), +.CW > +(greater than), +.CW <= +(less than or equal to), +.CW >= +(greater than or equal to), +.CW == +(equal to) and +.CW != +(not equal to). The result of a comparison is 0 +if the condition is false, otherwise 1. The relational operators can only be +applied to operands of +.I integer +and +.I float +type. The equality operators apply to all types. Comparing mixed types is legal. +Mixed integer and float compare on the integral value. Other mixtures are always unequal. +Two lists are equal if they +have the same number of members and a pairwise comparison of the members results +in equality. +.DS + AND-expression: + equality-expression + AND-expression \f(CW&\fP equality-expression + + XOR-expression: + AND-expression + XOR-expression \f(CW^\fP AND-expression + + OR-expression: + XOR-expression + OR-expression \f(CW|\fP XOR-expression +.DE +These operators perform bitwise logical operations and apply only to the +.I integer +type. +The operators are +.CW & +(logical and), +.CW ^ +(exclusive or) and +.CW | +(inclusive or). +.DS + logical-AND-expression: + OR-expression + logical-AND-expression \f(CW&&\fP OR-expression + + logical-OR-expression: + logical-AND-expression + logical-OR-expression \f(CW||\fP logical-AND-expression +.DE +The +.CW && +operator returns 1 if both of its operands evaluate to boolean true, otherwise 0. +The +.CW || +operator returns 1 if either of its operands evaluates to boolean true, +otherwise 0. +.SH +Statements +.PP +.DS + \f(CWif\fP expression \f(CWthen\fP statement \f(CWelse\fP statement + \f(CWif\fP expression \f(CWthen\fP statement +.DE +The +.I expression +is evaluated as a boolean. If its value is true the statement after +the +.CW then +is executed, otherwise the statement after the +.CW else +is executed. The +.CW else +portion may be omitted. +.DS + \f(CWwhile\fP expression \f(CWdo\fP statement +.DE +In a while loop, the +.I statement +is executed while the boolean +.I expression +evaluates +true. +.DS + \f(CWloop\fP startexpr, endexpr \f(CWdo\fP statement +.DE +The two expressions +.I startexpr +and +.I endexpr +are evaluated prior to loop entry. +.I Statement +is evaluated while the value of +.I startexpr +is less than or equal to +.I endexpr . +Both expressions must yield +.I integer +values. The value of +.I startexpr +is +incremented by one for each loop iteration. +Note that there is no explicit loop variable; the +.I expressions +are just values. +.DS + \f(CWreturn\fP expression +.DE +.CW return +terminates execution of the current function and returns to its caller. +The value of the function is given by expression. Since +.CW return +requires an argument, nil-valued functions should return the empty list +.CW {} . +.DS + \f(CWlocal\fP variable +.DE +The +.CW local +statement creates a local instance of +.I variable , +which exists for the duration +of the instance of the function in which it is declared. Binding is dynamic: the local variable, +rather than the previous value of +.I variable , +is visible to called functions. +After a return from the current function the previous value of +.I variable +is +restored. +.PP +If Acid is interrupted, the values of all local variables are lost, +as if the function returned. +.DS + \f(CWdefn\fP function-name \f(CW(\fP parameter-list \f(CW)\fP body + + parameter-list: + variable + parameter-list , variable + + body: + \f(CW{\fP statement \f(CW}\fP +.DE +Functions are introduced by the +.CW defn +statement. The definition of parameter names suppresses any variables +of the same name until the function returns. The body of a function is a list +of statements enclosed by braces. +.SH +Code variables +.PP +Acid permits the delayed evaluation of a parameter to a function. The parameter +may then be evaluated at any time with the +.CW eval +operator. Such parameters are called +.I "code variables +and are defined by prefixing their name with an asterisk in their declaration. +.PP +For example, this function wraps up an expression for later evaluation: +.P1 +acid: defn code(*e) { return e; } +acid: x = code(v+atoi("100")\eD) +acid: print(x) +(v+atoi("100"))\eD; +acid: eval x +<stdin>:5: (error) v used but not set +acid: v=5 +acid: eval x +105 +.P2 +.SH +Source Code Management +.PP +Acid provides the means to examine source code. Source code is +represented by lists of strings. Builtin functions provide mapping +from address to lines and vice-versa. The default debugging environment +has the means to load and display source files. +.SH +Builtin Functions +.PP +The Acid interpreter has a number of builtin functions, which cannot be redefined. +These functions perform machine- or operating system-specific functions such as +symbol table and process management. +The following section presents a description of each builtin function. +The notation +.CW {} +is used to denote the empty list, which is the default value of a function that +does not execute a +.CW return +statement. +The type and number of parameters for each function are specified in the +description; where a parameter can be of any type it is specified as type +.I item . +.de Ip +.KS +.LP +.tl '\f2\\$1\fP\ \ \f(CW\\$2(\f2\\$3\f(CW)\f1''\\$4' +.IP +.. +.de Ex +.KE +.KS +.IP +.ft CW +.ta 4n +4n +4n +4n +4n +4n +4n +4n +4n +4n +4n +4n +4n +4n +4n +4n +.nf +.in +4n +.br +.. +.de Ee +.fi +.ft 1 +.br +.KE +.. +.\" +.\" +.\" +.Ip integer access string "Check if a file can be read +.CW Access +returns the integer 1 if the file name in +.I string +can be read by the builtin functions +.CW file , +.CW readfile , +or +.CW include , +otherwise 0. A typical use of this function is to follow +a search path looking for a source file; it is used by +.CW findsrc . +.Ex +if access("main.c") then + return file("main.c"); +.Ee +.\" +.\" +.\" +.Ip float atof string "Convert a string to float +.CW atof +converts the string supplied as its argument into a floating point +number. The function accepts strings in the same format as the C +function of the same name. The value returned has the format code +.CW f . +.CW atof +returns the value 0.0 if it is unable to perform the conversion. +.Ex +acid: +atof("10.4e6") +1.04e+07 +.Ee +.\" +.\" +.\" +.Ip integer atoi string "Convert a string to an integer +.CW atoi +converts the argument +.i string +to an integer value. +The function accepts strings in the same format as the C function of the +same name. The value returned has the format code +.CW D . +.CW atoi +returns the integer 0 if it is unable to perform a conversion. +.Ex +acid: +atoi("-1255") +-1255 +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP error string "Generate an interpreter error +.CW error +generates an error message and returns the interpreter to interactive +mode. If an Acid program is running, it is aborted. +Processes being debugged are not affected. The values of all local variables are lost. +.CW error +is commonly used to stop the debugger when some interesting condition arises +in the debugged program. +.Ex +while 1 do { + step(); + if *main != @main then + error("memory corrupted"); +} +.Ee +.\" +.\" +.\" +.Ip list file string "Read the contents of a file into a list +.CW file +reads the contents of the file specified by +.I string +into a list. +Each element in the list is a string corresponding to a line in the file. +.CW file +breaks lines at the newline character, but the newline +characters are not returned as part each string. +.CW file +returns the empty list if it encounters an error opening or reading the data. +.Ex +acid: print(file("main.c")[0]) +#include <u.h> +.Ee +.\" +.\" +.\" +.Ip integer filepc string "Convert source address to text address +.CW filepc +interprets its +.I string +argument as a source file address in the form of a file name and line offset. +.CW filepc +uses the symbol table to map the source address into a text address +in the debugged program. The +.I integer +return value has the format +.CW X . +.CW filepc +returns an address of -1 if the source address is invalid. +The source file address uses the same format as +.I acme (1). +This function is commonly used to set breakpoints from the source text. +.Ex +acid: bpset(filepc("main:10")) +acid: bptab() + 0x00001020 usage ADD $-0xc,R29 +.Ee +.\" +.\" +.\" +.Ip item fmt item,fmt "Set print, \f(CW@\fP and \f(CW*\fP formats +.CW fmt +evaluates the expression +.I item +and sets the format of the result to +.I fmt . +The format of a value determines how it will be printed and +what kind of object will be fetched by the +.CW * +and +.CW @ +operators. The +.CW \e +operator is a short-hand form of the +.CW fmt +builtin function. The +.CW fmt +function leaves the format of the +.I item +unchanged. +.Ex +acid: main=fmt(main, 'i') // as instructions +acid: print(main\eX, "\et", *main) +0x00001020 ADD $-64,R29 +.Ee +.\" +.\" +.\" +.Ip list fnbound integer "Find start and end address of a function +.CW fnbound +interprets its +.I integer +argument as an address in the text of the debugged program. +.CW fnbound +returns a list containing two integers corresponding to +the start and end addresses of the function containing the supplied address. +If the +.I integer +address is not in the text segment of the program then the empty list is returned. +.CW fnbound +is used by +.CW next +to detect stepping into new functions. +.Ex +acid: print(fnbound(main)) +{0x00001050, 0x000014b8} +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP follow integer "Compute follow set +The follow set is defined as the set of program counter values that could result +from executing an instruction. +.CW follow +interprets its +.I integer +argument as a text address, decodes the instruction at +that address and, with the current register set, builds a list of possible +next program counter values. If the instruction at the specified address +cannot be decoded +.CW follow +raises an error. +.CW follow +is used to plant breakpoints on +all potential paths of execution. The following code fragment +plants breakpoints on top of all potential following instructions. +.Ex +lst = follow(*PC); +while lst do +{ + *head lst = bpinst; + lst = tail lst; +} +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP include string "Take input from a new file +.CW include +opens the file specified by +.I string +and uses its contents as command input to the interpreter. +The interpreter restores input to its previous source when it encounters +either an end of file or an error. +.CW include +can be used to incrementally load symbol table information without +leaving the interpreter. +.Ex +acid: include("/sys/src/cmd/acme/syms") +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP interpret string "Take input from a string +.CW interpret +evaluates the +.I string +expression and uses its result as command input for the interpreter. +The interpreter restores input to its previous source when it encounters +either the end of string or an error. The +.CW interpret +function allows Acid programs to write Acid code for later evaluation. +.Ex +acid: interpret("main+10;") +0x0000102a +.Ee +.\" +.\" +.\" +.Ip string itoa integer "Convert integer to string +.CW itoa +takes an integer argument and converts it into an ASCII string +in the +.CW D +format. This function is commonly used to build +.CW rc +command lines. +.Ex +acid: rc("cat /proc/"+itoa(pid)+"/segment") +Stack 7fc00000 80000000 1 +Data 00001000 00009000 1 +Data 00009000 0000a000 1 +Bss 0000a000 0000c000 1 +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP kill integer "Kill a process +.CW kill +writes a kill control message into the control file of the process +specified by the +.I integer +pid. +If the process was previously installed by +.CW setproc +it will be removed from the list of active processes. +If the +.I integer +has the same value as +.CW pid , +then +.CW pid +will be set to 0. +To continue debugging, a new process must be selected using +.CW setproc . +For example, to kill all the active processes: +.Ex +while proclist do { + kill(head proclist); + proclist = tail proclist; +} +.Ee +.\" +.\" +.\" +.Ip list map list "Set or retrieve process memory map +.CW map +either retrieves all the mappings associated with a process or sets a single +map entry to a new value. +If the +.I list +argument is omitted then +.CW map +returns a list of lists. Each sublist has four values and describes a +single region of contiguous addresses in the +memory or file image of the debugged program. The first entry is the name of the +mapping. If the name begins with +.CW * +it denotes a map into the memory of an active process. +The second and third values specify the base and end +address of the region and the fourth number specifies the offset in the file +corresponding to the first location of the region. +A map entry may be set by supplying a list in the same format as the sublist +described above. The name of the mapping must match a region already defined +by the current map. +Maps are set automatically for Plan 9 processes and some kernels; they may +need to be set by hand for other kernels and programs that run on bare hardware. +.Ex +acid: map({"text", _start, end, 0x30}) +.Ee +.\" +.\" +.\" +.Ip integer match item,list "Search list for matching value +.CW match +compares each item in +.I list +using the equality operator +.CW == +with +.I item . +The +.I item +can be of any type. If the match succeeds the result is the integer index +of the matching value, otherwise -1. +.Ex +acid: list={8,9,10,11} +acid: print(list[match(10, list)]\eD) +10 +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP newproc string "Create a new process +.CW newproc +starts a new process with an argument vector constructed from +.I string . +The argument vector excludes the name of the program to execute and +each argument in +.I string +must be space separated. A new process can accept no more +than 512 arguments. The internal variable +.CW pid +is set to the pid of the newly created process. The new pid +is also appended to the list of active processes stored in the variable +.CW proclist . +The new process is created then halted at the first instruction, causing +the debugger to call +.CW stopped . +The library functions +.CW new +and +.CW win +should be used to start processes when using the standard debugging +environment. +.Ex +acid: newproc("-l .") +56720: system call _main ADD $-0x14,R29 +.Ee +.\" +.\" +.\" +.Ip string pcfile integer "Convert text address to source file name +.CW pcfile +interprets its +.I integer +argument as a text address in the debugged program. The address and symbol table +are used to generate a string containing the name of the source file +corresponding to the text address. If the address does not lie within the +program the string +.CW ?file? +is returned. +.Ex +acid: print("Now at ", pcfile(*PC), ":", pcline(*PC)) +Now at ls.c:46 +.Ee +.\" +.\" +.\" +.Ip integer pcline integer "Convert text address to source line number +.CW pcline +interprets its +.I integer +argument as a text address in the debugged program. The address and symbol table +are used to generate an integer containing the line number in the source file +corresponding to the text address. If the address does not lie within the +program the integer 0 is returned. +.Ex +acid: +file("main.c")[pcline(main)] +main(int argc, char *argv[]) +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP print item,item,... "Print expressions +.CW print +evaluates each +.I item +supplied in its argument list and prints it to standard output. Each +argument will be printed according to its associated format character. +When the interpreter is executing, output is buffered and flushed every +5000 statements or when the interpreter returns to interactive mode. +.CW print +accepts a maximum of 512 arguments. +.Ex +acid: print(10, "decimal ", 10\eD, "octal ", 10\eo) +0x0000000a decimal 10 octal 000000000012 +acid: print({1, 2, 3}) +{0x00000001 , 0x00000002 , 0x00000003 } +acid: print(main, main\ea, "\et", @main\ei) +0x00001020 main ADD $-64,R29 +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP printto string,item,item,... "Print expressions to file +.CW printto +offers a limited form of output redirection. The first +.I string +argument is used as the path name of a new file to create. +Each +.I item +is then evaluated and printed to the newly created file. When all items +have been printed the file is closed. +.CW printto +accepts a maximum of 512 arguments. +.Ex +acid: printto("/env/foo", "hello") +acid: rc("echo -n $foo") +hello +.Ee +.\" +.\" +.\" +.Ip string rc string "Execute a shell command +.CW rc +evaluates +.I string +to form a shell command. A new command interpreter is started +to execute the command. The Acid interpreter blocks until the command +completes. The return value is the empty string +if the command succeeds, otherwise the exit status of the failed command. +.Ex +acid: rc("B "+itoa(-pcline(addr))+" "+pcfile(addr)); +.Ee +.\" +.\" +.\" +.Ip string readfile string "Read file contents into a string +.CW readfile +takes the contents of the file specified by +.I string +and returns its contents as a new string. +If +.CW readfile +encounters a zero byte in the file, it terminates. +If +.CW readfile +encounters an error opening or reading the file then the empty list +is returned. +.CW readfile +can be used to read the contents of device files whose lines are not +terminated with newline characters. +.Ex +acid: ""+readfile("/dev/label") +helix +.Ee +.\" +.\" +.\" +.Ip string reason integer "Print cause of program stoppage +.CW reason +uses machine-dependent information to generate a string explaining +why a process has stopped. The +.I integer +argument is the value of an architecture dependent status register, +for example +.CW CAUSE +on the MIPS. +.Ex +acid: print(reason(*CAUSE)) +system call +.Ee +.\" +.\" +.\" +.Ip integer regexp pattern,string "Regular expression match +.CW regexp +matches the +.I pattern +string supplied as its first argument with the +.I string +supplied as its second. +If the pattern matches the result is the value 1, otherwise 0. +.Ex +acid: print(regexp(".*bar", "foobar")) +1 +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP setproc integer "Set debugger focus +.CW setproc +selects the default process used for memory and control operations. It effectively +shifts the focus of control between processes. The +.I integer +argument specifies the pid of the process to look at. +The variable +.CW pid +is set to the pid of the selected process. If the process is being +selected for the first time its pid is added to the list of active +processes +.CW proclist . +.Ex +acid: setproc(68382) +acid: procs() +>68382: Stopped at main+0x4 setproc(68382) +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP start integer "Restart execution +.CW start +writes a +.CW start +message to the control file of the process specified by the pid +supplied as its +.I integer +argument. +.CW start +draws an error if the process is not in the +.CW Stopped +state. +.Ex +acid: start(68382) +acid: procs() +>68382: Running at main+0x4 setproc(68382) +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP startstop integer "Restart execution, block until stopped +.CW startstop +performs the same actions as a call to +.CW start +followed by a call to +.CW stop . +The +.I integer +argument specifies the pid of the process to control. The process +must be in the +.CW Stopped +state. +Execution is restarted, the debugger then waits for the process to +return to the +.CW Stopped +state. A process will stop if a startstop message has been written to its control +file and any of the following conditions becomes true: the process executes or returns from +a system call, the process generates a trap or the process receives a note. +.CW startstop +is used to implement single stepping. +.Ex +acid: startstop(pid) +75374: breakpoint ls ADD $-0x16c8,R29 +.Ee +.\" +.\" +.\" +.Ip string status integer "Return process state +.CW status +uses the pid supplied by its +.I integer +argument to generate a string describing the state of the process. +The string corresponds to the state returned by the +sixth column of the +.I ps (1) +command. +A process must be in the +.CW Stopped +state to modify its memory or registers. +.Ex +acid: ""+status(pid) +Stopped +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP stop integer "Wait for a process to stop +.CW stop +writes a +.CW stop +message to the control file of the process specified by the +pid supplied as its +.I integer +argument. +The interpreter blocks until the debugged process enters the +.CW Stopped +state. +A process will stop if a stop message has been written to its control +file and any of the following conditions becomes true: the process executes or returns from +a system call, the process generates a trap, the process is scheduled or the +process receives a note. +.CW stop +is used to wait for a process to halt before planting a breakpoint since Plan 9 +only allows a process's memory to be written while it is in the +.CW Stopped +state. +.Ex +defn bpset(addr) { + if (status(pid)!="Stopped") then { + print("Waiting...\en"); + stop(pid); + } + ... +} +.Ee +.\" +.\" +.\" +.Ip list strace pc,sp,linkreg "Stack trace +.CW strace +generates a list of lists corresponding to procedures called by the debugged +program. Each sublist describes a single stack frame in the active process. +The first element is an +.I integer +of format +.CW X +specifying the address of the called function. The second element is the value +of the program counter when the function was called. The third and fourth elements +contain lists of parameter and automatic variables respectively. +Each element of these lists +contains a string with the name of the variable and an +.I integer +value of format +.CW X +containing the current value of the variable. +The arguments to +.CW strace +are the current value of the program counter, the current value of the +stack pointer, and the address of the link register. All three parameters +must be integers. +The setting of +.I linkreg +is architecture dependent. On the MIPS linkreg is set to the address of saved +.CW R31 , +on the SPARC to the address of saved +.CW R15 . +For the other architectures +.I linkreg +is not used, but must point to valid memory. +.Ex +acid: print(strace(*PC, *SP, linkreg)) +{{0x0000141c, 0xc0000f74, +{{"s", 0x0000004d}, {"multi", 0x00000000}}, +{{"db", 0x00000000}, {"fd", 0x000010a4}, +{"n", 0x00000001}, {"i", 0x00009824}}}} +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP waitstop integer "Wait for a process to stop +.CW waitstop +writes a waitstop message to the control file of the process specified by the +pid supplied as its +.I integer +argument. +The interpreter will remain blocked until the debugged process enters the +.CW Stopped +state. +A process will stop if a waitstop message has been written to its control +file and any of the following conditions becomes true: the process generates a trap +or receives a note. Unlike +.CW stop , +the +.CW waitstop +function is passive; it does not itself cause the program to stop. +.Ex +acid: waitstop(pid) +75374: breakpoint ls ADD $-0x16c8,R29 +.Ee +.\" +.\" +.\" +.SH +Library Functions +.PP +A standard debugging environment is provided by modules automatically +loaded when +Acid is started. +These modules are located in the directory +.CW /sys/lib/acid . +These functions may be overridden, personalized, or added to by code defined in +.CW $home/lib/acid . +The implementation of these functions can be examined using the +.CW whatis +operator and then modified during debugging sessions. +.\" +.\" +.\" +.Ip \f(CW{}\fP Bsrc integer "Load text editor with source +.CW Bsrc +interprets the +.I integer +argument as a text address. The text address is used to produce a pathname +and line number suitable for the external +.CW B +command +of the text editor +(eg, +.I acme (1)). +.CW Bsrc +builds a shell +command to invoke +.CW B , +which either selects an existing source file or loads a new source file into +the editor. +The line of source corresponding to the text address is then selected. +In the following example +.CW stopped +is redefined so that +the editor +follows and displays the source line currently being executed. +.Ex +defn stopped(pid) { + pstop(pid); + Bsrc(*PC); +} +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP Fpr "" "Display double precision floating registers +For machines equipped with floating point, +.CW Fpr +displays the contents of the floating point registers as double precision +values. +.Ex +acid: Fpr() +F0 0. F2 0. +F4 0. F6 0. +F8 0. F10 0. +\&... +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP Ureg integer "Display contents of Ureg structure +.CW Ureg +interprets the integer passed as its first argument as the address of a +kernel +.CW Ureg +structure. Each element of the structure is retrieved and printed. +The size and contents of the +.CW Ureg +structure are architecture dependent. +This function can be used to decode the first argument passed to a +.I notify (2) +function after a process has received a note. +.Ex +acid: Ureg(*notehandler:ur) + status 0x3000f000 + pc 0x1020 + sp 0x7ffffe00 + cause 0x00004002 +\&... +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP acidinit "" "Interpreter startup +.CW acidinit +is called by the interpreter after all +modules have been loaded at initialization time. +It is used to set up machine specific variables and the default source path. +.CW acidinit +should not be called by user code. +.KE +.\" +.\" +.\" +.Ip \f(CW{}\fP addsrcdir string "Add element to source search path +.CW addsrcdir +interprets its string argument as a new directory +.CW findsrc +should search when looking for source code files. +.CW addsrcdir +draws an error if the directory is already in the source search path. The search +path may be examined by looking at the variable +.CW srcpath . +.Ex +acid: rc("9fs fornax") +acid: addsrcpath("/n/fornax/sys/src/cmd") +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP asm integer "Disassemble machine instructions +.CW asm +interprets its integer argument as a text address from which to disassemble +machine instructions. +.CW asm +prints the instruction address in symbolic and hexadecimal form, then prints +the instructions with addressing modes. Up to twenty instructions will +be disassembled. +.CW asm +stops disassembling when it reaches the end of the current function. +Instructions are read from the file image using the +.CW @ +operator. +.Ex +acid: asm(main) +main 0x00001020 ADD $-0x64,R29 +main+0x4 0x00001024 MOVW R31,0x0(R29) +main+0x8 0x00001028 MOVW R1,argc+4(FP) +main+0xc 0x0000102c MOVW $bin(SB),R1 +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP bpdel integer "Delete breakpoint +.CW bpdel +removes a previously set breakpoint from memory. +The +.I integer +supplied as its argument must be the address of a previously set breakpoint. +The breakpoint address is deleted from the active breakpoint list +.CW bplist , +then the original instruction is copied from the file image to the memory +image so that the breakpoint is removed. +.Ex +acid: bpdel(main+4) +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP bpset integer "Set a breakpoint +.CW bpset +places a breakpoint instruction at the address specified +by its +.I integer +argument, which must be in the text segment. +.CW bpset +draws an error if a breakpoint has already been set at the specified address. +A list of current breakpoints is maintained in the variable +.CW bplist . +Unlike in +.I db (1), +breakpoints are left in memory even when a process is stopped, and +the process must exist, perhaps by being +created by either +.CW new +or +.CW win , +in order to place a breakpoint. +.CW Db "" ( +accepts breakpoint commands before the process is started.) +On the +MIPS and SPARC architectures, +breakpoints at function entry points should be set 4 bytes into the function +because the +instruction scheduler may fill +.CW JAL +branch delay slots with the first instruction of the function. +.Ex +acid: bpset(main+4) +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP bptab "" "List active breakpoints +.CW bptab +prints a list of currently installed breakpoints. The list contains the +breakpoint address in symbolic and hexadecimal form as well as the instruction +the breakpoint replaced. Breakpoints are not maintained across process creation +using +.CW new +and +.CW win . +They are maintained across a fork, but care must be taken to keep control of +the child process. +.Ex +acid: bpset(ls+4) +acid: bptab() + 0x00001420 ls+0x4 MOVW R31,0x0(R29) +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP casm "" "Continue disassembly +.CW casm +continues to disassemble instructions from where the last +.CW asm +or +.CW casm +command stopped. Like +.CW asm , +this command stops disassembling at function boundaries. +.Ex +acid: casm() +main+0x10 0x00001030 MOVW $0x1,R3 +main+0x14 0x00001034 MOVW R3,0x8(R29) +main+0x18 0x00001038 MOVW $0x1,R5 +main+0x1c 0x0000103c JAL Binit(SB) +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP cont "" "Continue program execution +.CW cont +restarts execution of the currently active process. +If the process is stopped on a breakpoint, the breakpoint is first removed, +the program is single stepped, the breakpoint is replaced and the program +is then set executing. This may cause +.CW stopped() +to be called twice. +.CW cont +causes the interpreter to block until the process enters the +.CW Stopped +state. +.Ex +acid: cont() +95197: breakpoint ls+0x4 MOVW R31,0x0(R29) +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP dump integer,integer,string "Formatted memory dump +.CW dump +interprets its first argument as an address, its second argument as a +count and its third as a format string. +.CW dump +fetches an object from memory at the current address and prints it according +to the format. The address is incremented by the number of bytes specified by +the format and the process is repeated count times. The format string is any +combination of format characters, each preceded by an optional count. +For each object, +.CW dump +prints the address in hexadecimal, a colon, the object and then a newline. +.CW dump +uses +.CW mem +to fetch each object. +.Ex +acid: dump(main+35, 4, "X2bi") +0x00001043: 0x0c8fa700 108 143 lwc2 r0,0x528f(R4) +0x0000104d: 0xa9006811 0 0 swc3 r0,0x0(R24) +0x00001057: 0x2724e800 4 37 ADD $-0x51,R23,R31 +0x00001061: 0xa200688d 6 0 NOOP +0x0000106b: 0x2710c000 7 0 BREAK +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP findsrc string "Use source path to load source file +.CW findsrc +interprets its +.I string +argument as a source file. Each directory in the source path is searched +in turn for the file. If the file is found, the source text is loaded using +.CW file +and stored in the list of active source files called +.CW srctext . +The name of the file is added to the source file name list +.CW srcfiles . +Users are unlikely to call +.CW findsrc +from the command line, but may use it from scripts to preload source files +for a debugging session. This function is used by +.CW src +and +.CW line +to locate and load source code. The default search path for the MIPS +is +.CW ./ , +.CW /sys/src/libc/port , +.CW /sys/src/libc/9sys , +.CW /sys/src/libc/mips . +.Ex +acid: findsrc(pcfile(main)); +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP fpr "" "Display single precision floating registers +For machines equipped with floating point, +.CW fpr +displays the contents of the floating point registers as single precision +values. When the interpreter stores or manipulates floating point values +it converts into double precision values. +.Ex +acid: fpr() +F0 0. F1 0. +F2 0. F3 0. +F4 0. F5 0. +\&... +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP func "" "Step while in function +.CW func +single steps the active process until it leaves the current function +by either calling another function or returning to its caller. +.CW func +will execute a single instruction after leaving the current function. +.Ex +acid: func() +95197: breakpoint ls+0x8 MOVW R1,R8 +95197: breakpoint ls+0xc MOVW R8,R1 +95197: breakpoint ls+0x10 MOVW R8,s+4(FP) +95197: breakpoint ls+0x14 MOVW $0x2f,R5 +95197: breakpoint ls+0x18 JAL utfrrune(SB) +95197: breakpoint utfrrune ADD $-0x18,R29 +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP gpr "" "Display general purpose registers +.CW gpr +prints the values of the general purpose processor registers. +.Ex +acid: gpr() +R1 0x00009562 R2 0x000010a4 R3 0x00005d08 +R4 0x0000000a R5 0x0000002f R6 0x00000008 +\&... +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP labstk integer "Print stack trace from label +.CW labstk +performs a stack trace from a Plan 9 +.I label. +The kernel +and C compilers store continuations in a common format. Since the +compilers all use caller save conventions a continuation may be saved by +storing a +.CW PC +and +.CW SP +pair. This data structure is called a label and is used by the +C function +.CW longjmp +and the kernel to schedule threads and processes. +.CW labstk +interprets its +.I integer +argument as the address of a label and produces a stack trace for +the thread of execution. The value of the function +.CW ALEF_tid +is a suitable argument for +.CW labstk . +.Ex +acid: labstk(*mousetid) +At pc:0x00021a70:Rendez_Sleep+0x178 rendez.l:44 +Rendez_Sleep(r=0xcd7d8,bool=0xcd7e0,t=0x0) rendez.l:5 + called from ALEF_rcvmem+0x198 recvmem.l:45 +ALEF_rcvmem(c=0x000cd764,l=0x00000010) recvmem.l:6 +\&... +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP lstk "" "Stack trace with local variables +.CW lstk +produces a long format stack trace. +The stack trace includes each function in the stack, +where it was called from, and the value of the parameters and automatic +variables for each function. +.CW lstk +displays the value rather than the address of each variable and all +variables are assumed to be an integer in format +.CW X . +To print a variable in its correct format use the +.CW : +operator to find the address and apply the appropriate format before indirection +with the +.CW * +operator. It may be necessary to single step a couple of instructions into +a function to get a correct stack trace because the frame pointer adjustment +instruction may get scheduled down into the body of the function. +.Ex +acid: lstk() +At pc:0x00001024:main+0x4 ls.c:48 +main(argc=0x00000001,argv=0x7fffefec) ls.c:48 + called from _main+0x20 main9.s:10 + _argc=0x00000000 + _args=0x00000000 + fd=0x00000000 + buf=0x00000000 + i=0x00000000 +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP mem integer,string "Print memory object +.CW mem +interprets its first +.I integer +argument as the address of an object to be printed according to the +format supplied in its second +.I string +argument. +The format string can be any combination of format characters, each preceded +by an optional count. +.Ex +acid: mem(bdata+0x326, "2c2Xb") +P = 0xa94bc464 0x3e5ae44d 19 +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP new "" "Create new process +.CW new +starts a new copy of the debugged program. The new program is started +with the program arguments set by the variable +.CW progargs . +The new program is stopped in the second instruction of +.CW main . +The breakpoint list is reinitialized. +.CW new +may be used several times to instantiate several copies of a program +simultaneously. The user can rotate between the copies using +.CW setproc . +.Ex +acid: progargs="-l" +acid: new() +60: external interrupt _main ADD $-0x14,R29 +60: breakpoint main+0x4 MOVW R31,0x0(R29) +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP next "" "Step through language statement +.CW next +steps through a single language level statement without tracing down +through each statement in a called function. For each statement, +.CW next +prints the machine instructions executed as part of the statement. After +the statement has executed, source lines around the current program +counter are displayed. +.Ex +acid: next() +60: breakpoint Binit+0x4 MOVW R31,0x0(R29) +60: breakpoint Binit+0x8 MOVW f+8(FP),R4 +binit.c:93 + 88 + 89 int + 90 Binit(Biobuf *bp, int f, int mode) + 91 { +>92 return Binits(bp, f, mode, bp->b, BSIZE); + 93 } +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP notestk integer "Stack trace after receiving a note +.CW notestk +interprets its +.I integer +argument as the address of a +.CW Ureg +structure passed by the kernel to a +.I notify (2) +function during note processing. +.CW notestk +uses the +.CW PC , +.CW SP , +and link register from the +.CW Ureg +to print a stack trace corresponding to the point in the program where the note +was received. +To get a valid stack trace on the MIPS and SPARC architectures from a notify +routine, the program must stop in a new function called from the notify routine +so that the link register is valid and the notify routine's parameters are +addressable. +.Ex +acid: notestk(*notify:ur) +Note pc:0x00001024:main+0x4 ls.c:48 +main(argc=0x00000001,argv=0x7fffefec) ls.c:48 + called from _main+0x20 main9.s:10 + _argc=0x00000000 + _args=0x00000000 +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP pfl integer "Print source file and line +.CW pfl +interprets its argument as a text address and uses it to print +the source file and line number corresponding to the address. The output +has the same format as file addresses in +.I acme (1). +.Ex +acid: pfl(main) +ls.c:48 +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP procs "" "Print active process list +.CW procs +prints a list of active process attached to the debugger. Each process +produces a single line of output giving the pid, process state, the address +the process is currently executing, and the +.CW setproc +command required to make that process current. +The current process is marked in the first column with a +.CW > +character. The debugger maintains a list of processes in the variable +.CW proclist . +.Ex +acid: procs() +>62: Stopped at main+0x4 setproc(62) + 60: Stopped at Binit+0x8 setproc(60) +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP pstop integer "Print reason process stopped +.CW pstop +prints the status of the process specified by the +.I integer +pid supplied as its argument. +.CW pstop +is usually called from +.CW stopped +every time a process enters the +.CW Stopped +state. +.Ex +acid: pstop(62) +0x0000003e: breakpoint main+0x4 MOVW R31,0x0(R29) +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP regs "" "Print registers +.CW regs +prints the contents of both the general and special purpose registers. +.CW regs +calls +.CW spr +then +.CW gpr +to display the contents of the registers. +.KE +.\" +.\" +.\" +.Ip \f(CW{}\fP source "" "Summarize source data base +.CW source +prints the directory search path followed by a list of currently loaded +source files. The source management functions +.CW src +and +.CW findsrc +use the search path to locate and load source files. Source files are +loaded incrementally into a source data base during debugging. A list +of loaded files is stored in the variable +.CW srcfiles +and the contents of each source file in the variable +.CW srctext . +.Ex +acid: source() +/n/bootes/sys/src/libbio/ +./ +/sys/src/libc/port/ +/sys/src/libc/9sys/ +/sys/src/libc/mips/ + binit.c +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP spr "" "Print special purpose registers +.CW spr +prints the contents of the processor control and memory management +registers. Where possible, the contents of the registers are decoded +to provide extra information; for example the +.CW CAUSE +register on the MIPS is +printed both in hexadecimal and using the +.CW reason +function. +.Ex +acid: spr() +PC 0x00001024 main+0x4 ls.c:48 +SP 0x7fffef68 LINK 0x00006264 _main+0x28 main9.s:12 +STATUS 0x0000ff33 CAUSE 0x00000024 breakpoint +TLBVIR 0x000000d3 BADVADR 0x00001020 +HI 0x00000004 LO 0x00001ff7 +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP src integer "Print lines of source +.CW src +interprets its +.I integer +argument as a text address and uses this address to print 5 lines +of source before and after the address. The current line is marked with a +.CW > +character. +.CW src +uses the source search path maintained by +.CW source +and +.CW addsrcdir +to locate the required source files. +.Ex +acid: src(*PC) +ls.c:47 + 42 Biobuf bin; + 43 + 44 #define HUNK 50 + 45 + 46 void +>47 main(int argc, char *argv[]) + 48 { + 49 int i, fd; + 50 char buf[64]; + 51 + 52 Binit(&bin, 1, OWRITE); +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP step "" "Single step process +.CW step +causes the debugged process to execute a single machine level instruction. +If the program is stopped on a breakpoint set by +.CW bpset +it is first removed, the single step executed, and the breakpoint replaced. +.CW step +uses +.CW follow +to predict the address of the program counter after the current instruction +has been executed. A breakpoint is placed at each of these predicted addresses +and the process is started. When the process stops the breakpoints are removed. +.Ex +acid: step() +62: breakpoint main+0x8 MOVW R1,argc+4(FP) +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP stk "" "Stack trace +.CW stk +produces a short format stack trace. The stack trace includes each function +in the stack, where it was called from, and the value of the parameters. +The short format omits the values of automatic variables. +Parameters are assumed to be integer values in the format +.CW X ; +to print a parameter in the correct format use the +.CW : +to obtain its address, apply the correct format, and use the +.CW * +indirection operator to find its value. +It may be necessary to single step a couple of instructions into +a function to get a correct stack trace because the frame pointer adjustment +instruction may get scheduled down into the body of the function. +.Ex +acid: stk() +At pc:0x00001028:main+0x8 ls.c:48 +main(argc=0x00000002,argv=0x7fffefe4) ls.c:48 + called from _main+0x20 main9.s:10 +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP stmnt "" "Execute a single statement +.CW stmnt +executes a single language level statement. +.CW stmnt +displays each machine level instruction as it is executed. When the executed +statement is completed the source for the next statement is displayed. +Unlike +.CW next , +the +.CW stmnt +function will trace down through function calls. +.Ex +acid: stmnt() +62: breakpoint main+0x18 MOVW R5,0xc(R29) +62: breakpoint main+0x1c JAL Binit(SB) +62: breakpoint Binit ADD $-0x18,R29 +binit.c:91 + 89 int + 90 Binit(Biobuf *bp, int f, int mode) +>91 { +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP stopped integer "Report status of stopped process +.CW stopped +is called automatically by the interpreter +every time a process enters the +.CW Stopped +state, such as when it hits a breakpoint. +The pid is passed as the +.I integer +argument. The default implementation just calls +.CW pstop , +but the function may be changed to provide more information or perform fine control +of execution. Note that +.CW stopped +should return; for example, calling +.CW step +in +.CW stopped +will recur until the interpreter runs out of stack space. +.Ex +acid: defn stopped(pid) { + if *lflag != 0 then error("lflag modified"); + } +acid: progargs = "-l" +acid: new(); +acid: while 1 do step(); +<stdin>:7: (error) lflag modified +acid: stk() +At pc:0x00001220:main+0x200 ls.c:54 +main(argc=0x00000001,argv=0x7fffffe8) ls.c:48 + called from _main+0x20 main9.s:10 +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP symbols string "Search symbol table +.CW symbols +uses the regular expression supplied by +.I string +to search the symbol table for symbols whose name matches the +regular expression. +.Ex +acid: symbols("main") +main T 0x00001020 +_main T 0x0000623c +.Ee +.\" +.\" +.\" +.Ip \f(CW{}\fP win "" "Start new process in a window +.CW win +performs exactly the same function as +.CW new +but uses the window system to create a new window for the debugged process. +The variable +.CW progargs +supplies arguments to the new process. +The environment variable +.CW $8½srv +must be set to allow the interpreter to locate the mount channel for the +window system. +The window is created in the top left corner of the screen and is +400x600 pixels in size. The +.CW win +function may be modified to alter the geometry. +The window system will not be able to deliver notes in the new window +since the pid of the created process is not passed when the server is +mounted to create a new window. +.Ex +acid: win() +.Ee diff --git a/doc/acid.pdf b/doc/acid.pdf Binary files differnew file mode 100644 index 00000000..e5226009 --- /dev/null +++ b/doc/acid.pdf diff --git a/doc/acidpaper.ms b/doc/acidpaper.ms new file mode 100644 index 00000000..05e78713 --- /dev/null +++ b/doc/acidpaper.ms @@ -0,0 +1,1327 @@ +.TL +Acid: A Debugger Built From A Language +.AU +.I "Phil Winterbottom" +.AI +.I "Lucent Technologies Inc" +.AB +.FS +\l'1i' +.br +Originally appeared in +.I +Proc. of the Winter 1994 USENIX Conf., +.R +pp. 211-222, +San Francisco, CA; +and subsequently in the +.I "Plan 9 Programmer's Manual, Volume 2 (Second Edition)" . +.FE +Acid is an unusual source-level symbolic debugger for Plan 9. It is implemented +as a language interpreter with specialized primitives that provide +debugger support. Programs written in the language manipulate +one or more target processes; variables in the language represent the +symbols, state, and resources of those processes. +This structure allows complex +interaction between the debugger and the target program and +provides a convenient method of parameterizing differences between +machine architectures. +Although some effort is required to learn +the debugging language, the richness and flexibility of the +debugging environment encourages new ways of reasoning about the way +programs run and the conditions under which they fail. +.AE +.NH +Introduction +.PP +The size and complexity +of programs have increased in proportion to processor speed and memory but +the interface between debugger and programmer has changed little. +Graphical user interfaces have eased some of the tedious +aspects of the interaction. A graphical interface is a convenient +means for navigating through source and data structures but provides +little benefit for process control. +The introduction of a new concurrent language, Alef [Win93], emphasized the +inadequacies of the existing Plan 9 [Pike90] debugger +.I db , +a distant relative of +.I adb , +and made it clear that a new debugger was required. +.PP +Current debuggers like +.I dbx , +.I sdb , +and +.I gdb +are limited to answering only the questions their authors +envisage. As a result, they supply a plethora +of specialized commands, each attempting to anticipate +a specific question a user may ask. +When a debugging situation arises that is beyond the scope +of the command set, the tool is useless. +Further, +it is often tedious or impossible to reproduce an anomalous state +of the program, especially when +the state is embedded in the program's data structures. +.PP +Acid applies some ideas found in CAD software used for +hardware test and simulation. +It is based on the notion that the state and resources of a program +are best represented and manipulated by a language. The state and resources, +such as memory, registers, variables, type information and source code +are represented by variables in the language. +Expressions provide a computation mechanism and control +statements allow repetitive or selective interpretation based +on the result of expression evaluation. +The heart of the Acid debugger is an interpreter for a small typeless +language whose operators mirror the operations +of C and Alef, which in turn correspond well to the basic operations of +the machine. The interpreter itself knows nothing of the underlying +hardware; it deals with the program state and resources +in the abstract. +Fundamental routines to control +processes, read files, and interface to the system are implemented +as builtin functions available to the interpreter. +The actual debugger functionality is coded +in Acid; commands are implemented as Acid functions. +.PP +This language-based approach has several advantages. +Most importantly, programs written in Acid, including most of the +debugger itself, are inherently portable. +Furthermore, Acid avoids the limitations other debuggers impose when +debugging parallel programs. Instead of embedding a fixed +process model in the debugger, Acid allows the +programmer to adapt the debugger to handle an +arbitrary process partitioning or program structure. +The ability to +interact dynamically with an executing process provides clear advantages +over debuggers constrained to probe a static image. +Finally, the Acid language is a powerful vehicle for expressing +assertions about logic, process state, and the contents of data structures. +When combined with dynamic interaction it allows a +limited form of automated program verification without requiring +modification or recompilation of the source code. +The language is also an +excellent vehicle for preserving a test suite for later regression testing. +.PP +The debugger may be customized by its users; standard +functions may be modified or extended to suit a particular application +or preference. +For example, the kernel developers in our group require a +command set supporting assembler-level debugging while the application +programmers prefer source-level functionality. +Although the default library is biased toward assembler-level debugging, +it is easily modified to provide a convenient source-level interface. +The debugger itself does not change; the user combines primitives +and existing Acid functions in different ways to +implement the desired interface. +.NH +Related Work +.PP +DUEL [Gol93], an extension to +.I gdb +[Stal91], proposes using a high level expression evaluator to solve +some of these problems. The evaluator provides iterators to loop over data +structures and conditionals to control evaluation of expressions. +The author shows that complex state queries can be formulated +by combining concise expressions but this only addresses part of the problem. +A program is a dynamic entity; questions asked when the program is in +a static state are meaningful only after the program has been `caught' in +that state. The framework for manipulating the program is still as +primitive as the underlying debugger. While DUEL provides a means to +probe data structures it entirely neglects the most beneficial aspect +of debugging languages: the ability to control processes. Acid is structured +around a thread of control that passes between the interpreter and the +target program. +.PP +The NeD debugger [May92] is a set of extensions to TCL [Ous90] that provide +debugging primitives. The resulting language, NeDtcl, is used to implement +a portable interface between a conventional debugger, pdb [May90], and +a server that executes NeDtcl programs operating on the target program. +Execution of the NeDtcl programs implements the debugging primitives +that pdb expects. +NeD is targeted at multi-process debugging across a network, +and proves the flexibility of a language as a means of +communication between debugging tools. Whereas NeD provides an interface +between a conventional debugger and the process it debugs, Acid is the +debugger itself. While NeD has some of the ideas +found in Acid it is targeted toward a different purpose. Acid seeks to +integrate the manipulation of a program's resources into the debugger +while NeD provides a flexible interconnect between components of +the debugging environment. The choice of TCL is appropriate for its use +in NeD but is not suitable for Acid. Acid relies on the coupling of the type +system with expression evaluation, which are the root of its design, +to provide the debugging primitives. +.PP +Dalek [Ols90] is an event based language extension to gdb. State transitions +in the target program cause events to be queued for processing by the +debugging language. +.PP +Acid has many of the advantages of same process or +.I local +.I agent +debuggers, like Parasight [Aral], without the need for dynamic linking or +shared memory. +Acid improves on the ideas of these other systems by completely integrating +all aspects of the debugging process into the language environment. Of +particular importance is the relationship between Acid variables, +program symbols, source code, registers and type information. This +integration is made possible by the design of the Acid language. +.PP +Interpreted languages such as Lisp and Smalltalk are able to provide +richer debugging environments through more complete information than +their compiled counterparts. Acid is a means to gather and represent +similar information about compiled programs through cooperation +with the compilation tools and library implementers. +.NH +Acid the Language +.PP +Acid is a small interpreted language targeted to its debugging task. +It focuses on representing program state and addressing data rather than +expressing complex computations. Program state is +.I addressable +from an Acid program. +In addition to parsing and executing expressions and providing +an architecture-independent interface to the target process, +the interpreter supplies a mark-and-scan garbage collector +to manage storage. +.PP +Every Acid session begins with the loading of the Acid libraries. +These libraries contain functions, written in Acid, that provide +a standard debugging environment including breakpoint management, +stepping by instruction or statement, stack tracing, and +access to variables, memory, and registers. +The library contains 600 lines of Acid code and provides +functionality similar to +.I dbx . +Following the loading of the system library, Acid loads +user-specified libraries; this load sequence allows the +user to augment or override the standard commands +to customize the debugging environment. When all libraries +are loaded, Acid issues an interactive prompt and begins +evaluating expressions entered by the user. The Acid `commands' +are actually invocations of builtin primitives or previously defined +Acid functions. Acid evaluates each expression as it is entered and +prints the result. +.NH +Types and Variables +.PP +Acid variables are of four basic types: +.I integer , +.I string , +.I float , +and +.I list . +The type of a variable is inferred by the type of the right-hand side of +an assignment expression. +Many of the operators can be applied to more than +one type; for these operators the action of the operator is determined +by the type of its operands. +For example, +the +.CW + +operator adds +.I integer +and +.I float +operands, and concatenates +.I string +and +.I list +operands. +Lists are the only complex type in Acid; there are no arrays, structures +or pointers. Operators provide +.CW head , +.CW tail , +.CW append +and +.CW delete +operations. +Lists can also be indexed like arrays. +.PP +Acid has two levels of scope: global and local. +Function parameters and variables declared in a function body +using the +.CW local +keyword are created at entry to the function and +exist for the lifetime of a function. +Global variables are created by assignment and need not be declared. +All variables and functions in the program +being debugged are entered in the Acid symbol table as global +variables during Acid initialization. +Conflicting variable names are resolved by prefixing enough `$' characters +to make them unique. +Syntactically, Acid variables and target program +symbols are referenced identically. +However, the variables are managed differently in the Acid +symbol table and the user must be aware of this distinction. +The value of an Acid variable is stored in the symbol +table; a reference returns the value. +The symbol table entry for a variable or function in the target +program contains the address of that symbol in the image +of the program. Thus, the value of a program variable is +accessed by indirect reference through the Acid +variable that has the same name; the value of an Acid variable is the +address of the corresponding program variable. +.NH +Control Flow +.PP +The +.CW while +and +.CW loop +statements implement looping. +The former +is similar to the same statement in C. +The latter evaluates starting and ending expressions yielding +integers and iterates while an incrementing loop index +is within the bounds of those expressions. +.P1 +acid: i = 0; loop 1,5 do print(i=i+1) +0x00000001 +0x00000002 +0x00000003 +0x00000004 +0x00000005 +acid: +.P2 +The traditional +.CW if-then-else +statement implements conditional execution. +.NH +Addressing +.PP +Two indirection operators allow Acid to access values in +the program being debugged. +The +.CW * +operator fetches a value from the memory image of an +executing process; +the +.CW @ +operator fetches a value from the text file of the process. +When either operator appears on the left side of an assignment, the value +is written rather than read. +.PP +The indirection operator must know the size of the object +referenced by a variable. +The Plan 9 compilers neglect to include this +information in the program symbol table, so Acid cannot +derive this information implicitly. +Instead Acid variables have formats. +The format is a code +letter specifying the printing style and the effect of some of the +operators on that variable. +The indirection operators look at the format code to determine the +number of bytes to read or write. +The format codes are derived from the format letters used by +.I db . +By default, symbol table variables and numeric constants +are assigned the format code +.CW 'X' +which specifies 32-bit hexadecimal. +Printing such a variable yields output of the form +.CW 0x00123456 . +An indirect reference through the variable fetches 32 bits +of data at the address indicated by the variable. +Other formats specify various data types, for example +.CW i +an instruction, +.CW D +a signed 32 bit decimal, +.CW s +a null-terminated string. +The +.CW fmt +function +allows the user to change the format code of a variable +to control the printing format and +operator side effects. +This function evaluates the expression supplied as the first +argument, attaches the format code supplied as the second +argument to the result and returns that value. +If the result is assigned to a variable, +the new format code applies to +that variable. For convenience, Acid provides the +.CW \e +operator as a shorthand infix form of +.CW fmt . +For example: +.P1 +acid: x=10 +acid: x // print x in hex +0x0000000a +acid: x = fmt(x, 'D') // make x type decimal +acid: print(x, fmt(x, 'X'), x\eX) // print x in decimal & hex +10 0x0000000a 0x0000000a +acid: x // print x in decimal +10 +acid: x\eo // print x in octal +000000000012 +.P2 +The +.CW ++ +and +.CW -- +operators increment or decrement a variable by an amount +determined by its format code. Some formats imply a non-fixed size. +For example, the +.CW i +format code disassembles an instruction into a string. +On a 68020, which has variable length instructions: +.P1 +acid: p=main\ei // p=addr(main), type INST +acid: loop 1,5 do print(p\eX, @p++) // disassemble 5 instr's +0x0000222e LEA 0xffffe948(A7),A7 +0x00002232 MOVL s+0x4(A7),A2 +0x00002236 PEA 0x2f($0) +0x0000223a MOVL A2,-(A7) +0x0000223c BSR utfrrune +acid: +.P2 +Here, +.CW main +is the address of the function of the same name in the program under test. +The loop retrieves the five instructions beginning at that address and +then prints the address and the assembly language representation of each. +Notice that the stride of the increment operator varies with the size of +the instruction: the +.CW MOVL +at +.CW 0x0000223a +is a two byte instruction while all others are four bytes long. +.PP +Registers are treated as normal program variables referenced +by their symbolic assembler language names. +When a +process stops, the register set is saved by the kernel +at a known virtual address in the process memory map. +The Acid variables associated with the registers point +to the saved values and the +.CW * +indirection operator can then be used to read and write the register set. +Since the registers are accessed via Acid variables they may +be used in arbitrary expressions. +.P1 +acid: PC // addr of saved PC +0xc0000f60 +acid: *PC +0x0000623c // contents of PC +acid: *PC\ea +main +acid: *R1=10 // modify R1 +acid: asm(*PC+4) // disassemble @ PC+4 +main+0x4 0x00006240 MOVW R31,0x0(R29) +main+0x8 0x00006244 MOVW $setR30(SB),R30 +main+0x10 0x0000624c MOVW R1,_clock(SB) +.P2 +Here, the saved +.CW PC +is stored at address +.CW 0xc0000f60 ; +its current content is +.CW 0x0000623c . +The +.CW a ' ` +format code converts this value to a string specifying +the address as an offset beyond the nearest symbol. +After setting the value of register +.CW 1 , +the example uses the +.CW asm +command to disassemble a short section of code beginning +at four bytes beyond the current value of the +.CW PC . +.NH +Process Interface +.PP +A program executing under Acid is monitored through the +.I proc +file system interface provided by Plan 9. +Textual messages written to the +.CW ctl +file control the execution of the process. +For example writing +.CW waitstop +to the control file causes the write to block until the target +process enters the kernel and is stopped. When the process is stopped +the write completes. The +.CW startstop +message starts the target process and then does a +.CW waitstop +action. +Synchronization between the debugger and the target process is determined +by the actions of the various messages. Some operate asynchronously to the +target process and always complete immediately, others block until the +action completes. The asynchronous messages allow Acid to control +several processes simultaneously. +.PP +The interpreter has builtin functions named after each of the control +messages. The functions take a process id as argument. +Any time a control message causes the program to execute instructions +the interpreter performs two actions when the control operation has completed. +The Acid variables pointing at the register set are fixed up to point +at the saved registers, and then +the user defined function +.CW stopped +is executed. +The +.CW stopped +function may print the current address, +line of source or instruction and return to interactive mode. Alternatively +it may traverse a complex data structure, gather statistics and then set +the program running again. +.PP +Several Acid variables are maintained by the debugger rather than the +programmer. +These variables allow generic Acid code to deal with the current process, +architecture specifics or the symbol table. +The variable +.CW pid +is the process id of the current process Acid is debugging. +The variable +.CW symbols +contains a list of lists where each sublist contains the symbol +name, its type and the value of the symbol. +The variable +.CW registers +contains a list of the machine-specific register names. Global symbols in the target program +can be referenced directly by name from Acid. Local variables +are referenced using the colon operator as \f(CWfunction:variable\fP. +.NH +Source Level Debugging +.PP +Acid provides several builtin functions to manipulate source code. +The +.CW file +function reads a text file, inserting each line into a list. +The +.CW pcfile +and +.CW pcline +functions each take an address as an argument. +The first +returns a string containing the name of the source file +and the second returns an integer containing the line number +of the source line containing the instruction at the address. +.P1 +acid: pcfile(main) // file containing main +main.c +acid: pcline(main) // line # of main in source +11 +acid: file(pcfile(main))[pcline(main)] // print that line +main(int argc, char *argv[]) +acid: src(*PC) // print statements nearby + 9 + 10 void +>11 main(int argc, char *argv[]) + 12 { + 13 int a; +.P2 +In this example, the three primitives are combined in an expression to print +a line of source code associated with an address. +The +.CW src +function prints a few lines of source +around the address supplied as its argument. A companion routine, +.CW Bsrc , +communicates with the external editor +.CW sam . +Given an address, it loads the corresponding source file into the editor +and highlights the line containing the address. This simple interface +is easily extended to more complex functions. +For example, the +.CW step +function can select the current file and line in the editor +each time the target program stops, giving the user a visual +trace of the execution path of the program. A more complete interface +allowing two way communication between Acid and the +.CW acme +user interface [Pike93] is under construction. A filter between the debugger +and the user interface provides interpretation of results from both +sides of the interface. This allows the programming environment to +interact with the debugger and vice-versa, a capability missing from the +.CW sam +interface. +The +.CW src +and +.CW Bsrc +functions are both written in Acid code using the file and line primitives. +Acid provides library functions to step through source level +statements and functions. Furthermore, addresses in Acid expressions can be +specified by source file and line. +Source code is manipulated in the Acid +.I list +data type. +.NH +The Acid Library +.PP +The following examples define some useful commands and +illustrate the interaction of the debugger and the interpreter. +.P1 +defn bpset(addr) // set breakpoint +{ + if match(addr, bplist) >= 0 then + print("bkpoint already set:", addr\ea, "\en"); + else { + *fmt(addr, bpfmt) = bpinst; // plant it + bplist = append bplist, addr; // add to list + } +} +.P2 +The +.CW bpset +function plants a break point in memory. The function starts by +using the +.CW match +builtin to +search the breakpoint list to determine if a breakpoint is already +set at the address. +The indirection operator, controlled by the format code returned +by the +.CW fmt +primitive, is used to plant the breakpoint in memory. +The variables +.CW bpfmt +and +.CW bpinst +are Acid global variables containing the format code specifying +the size of the breakpoint instruction and the breakpoint instruction +itself. +These +variables are set by architecture-dependent library code +when the debugger first attaches to the executing image. +Finally the address of the breakpoint is +appended to the breakpoint list, +.CW bplist . +.P1 +defn step() // single step +{ + local lst, lpl, addr, bput; + + bput = 0; // sitting on bkpoint + if match(*PC, bplist) >= 0 then { + bput = fmt(*PC, bpfmt); // save current addr + *bput = @bput; // replace it + } + + lst = follow(*PC); // get follow set + + lpl = lst; + while lpl do { // place breakpoints + *(head lpl) = bpinst; + lpl = tail lpl; + } + + startstop(pid); // do the step + + while lst do { // remove breakpoints + addr = fmt(head lst, bpfmt); + *addr = @addr; // replace instr. + lst = tail lst; + } + if bput != 0 then + *bput = bpinst; // restore breakpoint +} +.P2 +The +.CW step +function executes a single assembler instruction. +If the +.CW PC +is sitting +on a breakpoint, the address and size of +the breakpoint are saved. +The breakpoint instruction +is then removed using the +.CW @ +operator to fetch +.CW bpfmt +bytes from the text file and to place it into the memory +of the executing process using the +.CW * +operator. +The +.CW follow +function is an Acid +builtin which returns a follow-set: a list of instruction addresses which +could be executed next. +If the instruction stored at the +.CW PC +is a branch instruction, the +list contains the addresses of the next instruction and +the branch destination; otherwise, it contains only the +address of the next instruction. +The follow-set is then used to replace each possible following +instruction with a breakpoint instruction. The original +instructions need not be saved; they remain +in their unaltered state in the text file. +The +.CW startstop +builtin writes the `startstop' message to the +.I proc +control file for the process named +.CW pid . +The target process executes until some condition causes it to +enter the kernel, in this case, the execution of a breakpoint. +When the process blocks, the debugger regains control and invokes the +Acid library function +.CW stopped +which reports the address and cause of the blockage. +The +.CW startstop +function completes and returns to the +.CW step +function where +the follow-set is used to replace the breakpoints placed earlier. +Finally, if the address of the original +.CW PC +contained a breakpoint, it is replaced. +.PP +Notice that this approach to process control is inherently portable; +the Acid code is shared by the debuggers for all architectures. +Acid variables and builtin functions provide a transparent interface +to architecture-dependent values and functions. Here the breakpoint +value and format are referenced through Acid variables and the +.CW follow +primitive masks the differences in the underlying instruction set. +.PP +The +.CW next +function, similar to the +.I dbx +command of the same name, +is a simpler example. +This function steps through +a single source statement but steps over function calls. +.P1 +defn next() +{ + local sp, bound; + + sp = *SP; // save starting SP + bound = fnbound(*PC); // begin & end of fn. + stmnt(); // step 1 statement + pc = *PC; + if pc >= bound[0] && pc < bound[1] then + return {}; + + while (pc<bound[0] || pc>bound[1]) && sp>=*SP do { + step(); + pc = *PC; + } + src(*PC); +} +.P2 +The +.CW next +function +starts by saving the current stack pointer in a local variable. +It then uses the Acid library function +.CW fnbound +to return the addresses of the first and last instructions in +the current function in a list. +The +.CW stmnt +function executes a single source statement and then uses +.CW src +to print a few lines of source around the new +.CW PC . +If the new value of the +.CW PC +remains in the current function, +.CW next +returns. +When the executed statement is a function call or a return +from a function, the new value of the +.CW PC +is outside the bounds calculated by +.CW fnbound +and the test of the +.CW while +loop is evaluated. +If the statement was a return, the new value of the stack pointer +is greater than the original value and the loop completes without +execution. +Otherwise, the loop is entered and instructions are continually +executed until the value of the +.CW PC +is between the bounds calculated earlier. At that point, execution +ceases and a few lines of source in the vicinity of the +.CW PC +are printed. +.PP +Acid provides concise and elegant expression for control and +manipulation of target programs. These examples demonstrate how a +few well-chosen primitives can be combined to create a rich debugging environment. +.NH +Dealing With Multiple Architectures +.PP +A single binary of Acid may be used to debug a program running on any +of the five processor architectures supported by Plan 9. For example, +Plan 9 allows a user on a MIPS to import the +.I proc +file system from an i486-based PC and remotely debug a program executing +on that processor. +.PP +Two levels of abstraction provide this architecture independence. +On the lowest level, a Plan 9 library supplies functions to +decode the file header of the program being debugged and +select a table of system parameters +and a jump vector of architecture-dependent +functions based on the magic number. +Among these functions are byte-order-independent +access to memory and text files, stack manipulation, disassembly, +and floating point number interpretation. +The second level of abstraction is supplied by Acid. +It consists of primitives and approximately 200 lines +of architecture-dependent Acid library code that interface the +interpreter to the architecture-dependent library. +This layer performs functions such as mapping register names to +memory locations, supplying breakpoint values and sizes, +and converting processor specific data to Acid data types. +An example of the latter is the stack trace function +.CW strace , +which uses the stack traversal functions in the +architecture-dependent library to construct a list of lists describing +the context of a process. The first level of list selects +each function in the trace; subordinate lists contain the +names and values of parameters and local variables of +the functions. Acid commands and library functions that +manipulate and display process state information operate +on the list representation and are independent of the +underlying architecture. +.NH +Alef Runtime +.PP +Alef is a concurrent programming language, +designed specifically for systems programming, which supports both +shared variable and message passing paradigms. +Alef borrows the C expression syntax but implements +a substantially different type system. +The language provides a rich set of +exception handling, process management, and synchronization +primitives, which rely on a runtime system. +Alef program bugs are often deadlocks, synchronization failures, +or non-termination caused by locks being held incorrectly. +In such cases, a process stalls deep +in the runtime code and it is clearly +unreasonable to expect a programmer using the language +to understand the detailed +internal semantics of the runtime support functions. +.PP +Instead, there is an Alef support library, coded in Acid, that +allows the programmer to interpret the program state in terms of +Alef operations. Consider the example of a multi-process program +stalling because of improper synchronization. A stack trace of +the program indicates that it is waiting for an event in some +obscure Alef runtime +synchronization function. +The function itself is irrelevant to the +programmer; of greater importance is the identity of the +unfulfilled event. +Commands in the Alef support library decode +the runtime data structures and program state to report the cause +of the blockage in terms of the high-level operations available to +the Alef programmer. +Here, the Acid language acts +as a communications medium between Alef implementer and Alef user. +.NH +Parallel Debugging +.PP +The central issue in parallel debugging is how the debugger is +multiplexed between the processes comprising +the program. +Acid has no intrinsic model of process partitioning; it +only assumes that parallel programs share a symbol table, +though they need not share memory. +The +.CW setproc +primitive attaches the debugger to a running process +associated with the process ID supplied as its argument +and assigns that value to the global variable +.CW pid , +thereby allowing simple rotation among a group of processes. +Further, the stack trace primitive is driven by parameters +specifying a unique process context, so it is possible to +examine the state of cooperating processes without switching +the debugger focus from the process of interest. +Since Acid is inherently extensible and capable of +dynamic interaction with subordinate processes, the +programmer can define Acid commands to detect and control +complex interactions between processes. +In short, the programmer is free to specify how the debugger reacts +to events generated in specific threads of the program. +.PP +The support for parallel debugging in Acid depends on a crucial kernel +modification: when the text segment of a program is written (usually to +place a breakpoint), the segment is cloned to prevent other threads +from encountering the breakpoint. Although this incurs a slight performance +penalty, it is of little importance while debugging. +.NH +Communication Between Tools +.PP +The Plan 9 Alef and C compilers do not +embed detailed type information in the symbol table of an +executable file. +However, they do accept a command line option causing them to +emit descriptions of complex data types +(e.g., aggregates and abstract data types) +to an auxiliary file. +The vehicle for expressing this information is Acid source code. +When an Acid debugging session is +subsequently started, that file is loaded with the other Acid libraries. +.PP +For each complex object in the program the compiler generates +three pieces of Acid code. +The first is a table describing the size and offset of each +member of the complex data type. Following is an Acid function, +named the same as the object, that formats and prints each member. +Finally, Acid declarations associate the +Alef or C program variables of a type with the functions +to print them. +The three forms of declaration are shown in the following example: +.P1 +struct Bitmap { + Rectangle 0 r; + Rectangle 16 clipr; + 'D' 32 ldepth; + 'D' 36 id; + 'X' 40 cache; +}; +.P2 +.P1 +defn +Bitmap(addr) { + complex Bitmap addr; + print("Rectangle r {\en"); + Rectangle(addr.r); + print("}\en"); + print("Rectangle clipr {\en"); + Rectangle(addr.clipr); + print("}\en"); + print(" ldepth ", addr.ldepth, "\en"); + print(" id ", addr.id, "\en"); + print(" cache ", addr.cache, "\en"); +}; + +complex Bitmap darkgrey; +complex Bitmap Window_settag:b; +.P2 +The +.CW struct +declaration specifies decoding instructions for the complex type named +.CW Bitmap . +Although the syntax is superficially similar to a C structure declaration, +the semantics differ markedly: the C declaration specifies a layout, while +the Acid declaration tells how to decode it. +The declaration specifies a type, an offset, and name for each +member of the complex object. The type is either the name of another +complex declaration, for example, +.CW Rectangle , +or a format code. +The offset is the number of bytes from the start +of the object to the member +and the name is the member's name in the Alef or C declaration. +This type description is a close match for C and Alef, but is simple enough +to be language independent. +.PP +The +.CW Bitmap +function expects the address of a +.CW Bitmap +as its only argument. +It uses the decoding information contained in the +.CW Bitmap +structure declaration to extract, format, and print the +value of each member of the complex object pointed to by +the argument. +The Alef compiler emits code to call other Acid functions +where a member is another complex type; here, +.CW Bitmap +calls +.CW Rectangle +to print its contents. +.PP +The +.CW complex +declarations associate Alef variables with complex types. +In the example, +.CW darkgrey +is the name of a global variable of type +.CW Bitmap +in the program being debugged. +Whenever the name +.CW darkgrey +is evaluated by Acid, it automatically calls the +.CW Bitmap +function with the address of +.CW darkgrey +as the argument. +The second +.CW complex +declaration associates a local variable or parameter named +.CW b +in function +.CW Window_settag +with the +.CW Bitmap +complex data type. +.PP +Acid borrows the C operators +.CW . +and +.CW -> +to access the decoding parameters of a member of a complex type. +Although this representation is sufficiently general for describing +the decoding of both C and Alef complex data types, it may +prove too restrictive for target languages with more complicated +type systems. +Further, the assumption that the compiler can select the proper +Acid format code for each basic type in the language is somewhat +naive. For example, when a member of a complex type is a pointer, +it is assigned a hexadecimal type code; integer members are always +assigned a decimal type code. +This heuristic proves inaccurate when an integer field is a +bit mask or set of bit flags which are more appropriately displayed +in hexadecimal or octal. +.NH +Code Verification +.PP +Acid's ability to interact dynamically with +an executing program allows passive test and +verification of the target program. For example, +a common concern is leak detection in programs using +.CW malloc . +Of interest are two items: finding memory that was allocated +but never freed and detecting bad pointers passed to +.CW free . +An auxiliary Acid library contains Acid functions to +monitor the execution of a program and detect these +faults, either as they happen or in the automated +post-mortem analysis of the memory arena. +In the following example, the +.CW sort +command is run under the control of the +Acid memory leak library. +.P1 +helix% acid -l malloc /bin/sort +/bin/sort: mips plan 9 executable +/lib/acid/port +/lib/acid/mips +/lib/acid/malloc +acid: go() +now +is +the +time +<ctrl-d> +is +now +the +time +27680 : breakpoint _exits+0x4 MOVW $0x8,R1 +acid: +.P2 +The +.CW go +command creates a process and plants +breakpoints at the entry to +.CW malloc +and +.CW free . +The program is then started and continues until it +exits or stops. If the reason for stopping is anything +other than the breakpoints in +.CW malloc +and +.CW free , +Acid prints the usual status information and returns to the +interactive prompt. +.PP +When the process stops on entering +.CW malloc , +the debugger must capture and save the address that +.CW malloc +will return. +After saving a stack +trace so the calling routine can be identified, it places +a breakpoint at the return address and restarts the program. +When +.CW malloc +returns, the breakpoint stops the program, +allowing the debugger +to grab the address of the new memory block from the return register. +The address and stack trace are added to the list of outstanding +memory blocks, the breakpoint is removed from the return point, and +the process is restarted. +.PP +When the process stops at the beginning of +.CW free , +the memory address supplied as the argument is compared to the list +of outstanding memory blocks. If it is not found an error message +and a stack trace of the call is reported; otherwise, the +address is deleted from the list. +.PP +When the program exits, the list of outstanding memory blocks contains +the addresses of all blocks that were allocated but never freed. +The +.CW leak +library function traverses the list producing a report describing +the allocated blocks. +.P1 1m +acid: leak() +Lost a total of 524288 bytes from: + malloc() malloc.c:32 called from dofile+0xe8 sort.c:217 + dofile() sort.c:190 called from main+0xac sort.c:161 + main() sort.c:128 called from _main+0x20 main9.s:10 +Lost a total of 64 bytes from: + malloc() malloc.c:32 called from newline+0xfc sort.c:280 + newline() sort.c:248 called from dofile+0x110 sort.c:222 + dofile() sort.c:190 called from main+0xac sort.c:161 + main() sort.c:128 called from _main+0x20 main9.s:10 +Lost a total of 64 bytes from: + malloc() malloc.c:32 called from realloc+0x14 malloc.c:129 + realloc() malloc.c:123 called from bldkey+0x358 sort.c:1388 + buildkey() sort.c:1345 called from newline+0x150 sort.c:285 + newline() sort.c:248 called from dofile+0x110 sort.c:222 + dofile() sort.c:190 called from main+0xac sort.c:161 + main() sort.c:128 called from _main+0x20 main9.s:10 +acid: refs() +data...bss...stack... +acid: leak() +acid: +.P2 +The presence of a block in the allocation list does not imply +it is there because of a leak; for instance, it may have been +in use when the program terminated. +The +.CW refs() +library function scans the +.I data , +.I bss , +and +.I stack +segments of the process looking for pointers +into the allocated blocks. When one is found, the block is deleted from +the outstanding block list. +The +.CW leak +function is used again to report the +blocks remaining allocated and unreferenced. +This strategy proves effective in detecting +disconnected (but non-circular) data structures. +.PP +The leak detection process is entirely passive. +The program is not +specially compiled and the source code is not required. +As with the Acid support functions for the Alef runtime environment, +the author of the library routines has encapsulated the +functionality of the library interface +in Acid code. +Any programmer may then check a program's use of the +library routines without knowledge of either implementation. +The performance impact of running leak detection is great +(about 10 times slower), +but it has not prevented interactive programs like +.CW sam +and the +.CW 8½ +window system from being tested. +.NH +Code Coverage +.PP +Another common component of software test uses +.I coverage +analysis. +The purpose of the test is to determine which paths through the code have +not been executed while running the test suite. +This is usually +performed by a combination of compiler support and a reporting tool run +on the output generated by statements compiled into the program. +The compiler emits code that +logs the progress of the program as it executes basic blocks and writes the +results to a file. The file is then processed by the reporting tool +to determine which basic blocks have not been executed. +.PP +Acid can perform the same function in a language independent manner without +modifying the source, object or binary of the program. The following example +shows +.CW ls +being run under the control of the Acid coverage library. +.P1 +philw-helix% acid -l coverage /bin/ls +/bin/ls: mips plan 9 executable +/lib/acid/port +/lib/acid/mips +/lib/acid/coverage +acid: coverage() +acid +newstime +profile +tel +wintool +2: (error) msg: pid=11419 startstop: process exited +acid: analyse(ls) +ls.c:102,105 + 102: return 1; + 103: } + 104: if(db[0].qid.path&CHDIR && dflag==0){ + 105: output(); +ls.c:122,126 + 122: memmove(dirbuf+ndir, db, sizeof(Dir)); + 123: dirbuf[ndir].prefix = 0; + 124: p = utfrrune(s, '/'); + 125: if(p){ + 126: dirbuf[ndir].prefix = s; +.P2 +The +.CW coverage +function begins by looping through the text segment placing +breakpoints at the entry to each basic block. The start of each basic +block is found using the Acid builtin function +.CW follow . +If the list generated by +.CW follow +contains more than one +element, then the addresses mark the start of basic blocks. A breakpoint +is placed at each address to detect entry into the block. If the result +of +.CW follow +is a single address then no action is taken, and the next address is +considered. Acid maintains a list of +breakpoints already in place and avoids placing duplicates (an address may be +the destination of several branches). +.PP +After placing the breakpoints the program is set running. +Each time a breakpoint is encountered +Acid deletes the address from the breakpoint list, removes the breakpoint +from memory and then restarts the program. +At any instant the breakpoint list contains the addresses of basic blocks +which have not been executed. +The +.CW analyse +function reports the lines of source code bounded by basic blocks +whose addresses are have not been deleted from the breakpoint list. +These are the basic blocks which have not been executed. +Program performance is almost unaffected since each breakpoint is executed +only once and then removed. +.PP +The library contains a total of 128 lines of Acid code. +An obvious extension of this algorithm could be used to provide basic block +profiling. +.NH +Conclusion +.PP +Acid has two areas of weakness. As with +other language-based tools like +.I awk , +a programmer must learn yet another language to step beyond the normal +debugging functions and use the full power of the debugger. +Second, the command line interface supplied by the +.I yacc +parser is inordinately clumsy. +Part of the problem relates directly to the use of +.I yacc +and could be circumvented with a custom parser. +However, structural problems would remain: Acid often requires +too much typing to execute a simple +command. +A debugger should prostitute itself to its users, doing whatever +is wanted with a minimum of encouragement; commands should be +concise and obvious. The language interface is more consistent than +an ad hoc command interface but is clumsy to use. +Most of these problems are addressed by an Acme interface +which is under construction. This should provide the best of +both worlds: graphical debugging and access to the underlying acid +language when required. +.PP +The name space clash between Acid variables, keywords, program variables, +and functions is unavoidable. +Although it rarely affects a debugging session, it is annoying +when it happens and is sometimes difficult to circumvent. +The current renaming scheme +is too crude; the new names are too hard to remember. +.PP +Acid has proved to be a powerful tool whose applications +have exceeded expectations. +Of its strengths, portability, extensibility and parallel debugging support +were by design and provide the expected utility. +In retrospect, +its use as a tool for code test and verification and as +a medium for communicating type information and encapsulating +interfaces has provided unanticipated benefits and altered our +view of the debugging process. +.NH +Acknowledgments +.PP +Bob Flandrena was the first user and helped prepare the paper. +Rob Pike endured three buggy Alef compilers and a new debugger +in a single sitting. +.NH +References +.LP +[Pike90] R. Pike, D. Presotto, K. Thompson, H. Trickey, +``Plan 9 from Bell Labs'', +.I +UKUUG Proc. of the Summer 1990 Conf., +.R +London, England, +1990. +.LP +[Gol93] M. Golan, D. Hanson, +``DUEL -- A Very High-Level Debugging Language'', +.I +USENIX Proc. of the Winter 1993 Conf., +.R +San Diego, CA, +1993. +.LP +[Lin90] M. A. Linton, +``The Evolution of DBX'', +.I +USENIX Proc. of the Summer 1990 Conf., +.R +Anaheim, CA, +1990. +.LP +[Stal91] R. M. Stallman, R. H. Pesch, +``Using GDB: A guide to the GNU source level debugger'', +Technical Report, Free Software Foundation, +Cambridge, MA, +1991. +.LP +[Win93] P. Winterbottom, +``Alef reference Manual'', +reprinted in this volume. +.LP +[Pike93] Rob Pike, +``Acme: A User Interface for Programmers'', +.I +USENIX Proc. of the Winter 1994 Conf., +.R +San Francisco, CA, +reprinted in this volume. +.LP +[Ols90] Ronald A. Olsson, Richard H. Crawford, and W. Wilson Ho, +``Dalek: A GNU, improved programmable debugger'', +.I +USENIX Proc. of the Summer 1990 Conf., +.R +Anaheim, CA. +.LP +[May92] Paul Maybee, +``NeD: The Network Extensible Debugger'' +.I +USENIX Proc. of the Summer 1992 Conf., +.R +San Antonio, TX. +.LP +[Aral] Ziya Aral, Ilya Gertner, and Greg Schaffer, +``Efficient debugging primitives for multiprocessors'', +.I +Proceedings of the Third International Conference on Architectural +Support for Programming Languages and Operating Systems, +.R +SIGPLAN notices Nr. 22, May 1989. diff --git a/doc/acidpaper.pdf b/doc/acidpaper.pdf Binary files differnew file mode 100644 index 00000000..8bab1c78 --- /dev/null +++ b/doc/acidpaper.pdf diff --git a/doc/acidtut.ms b/doc/acidtut.ms new file mode 100644 index 00000000..0cb9fe92 --- /dev/null +++ b/doc/acidtut.ms @@ -0,0 +1,1062 @@ +.de d0 +.nr dP +1 +.nr dV +1p +.. +.de d1 +.nr dP -1 +.nr dV -1p +.. +.nr dT 4 +.de Af \" acid function +.CW "\\$1(" "\fI\\$2\fP\f(CW)\fP" +.. +.TL +Native Kernel Debugging with Acid +.AU +Tad Hunt +tad@plan9.bell-labs.com +.br +Lucent Technologies Inc +.br +(Revised 22 May 2000 by Vita Nuova) +.SH +Introduction +.PP +This tutorial provides an introduction to the Acid debugger. It assumes that you are familiar with the features of a typical source-level debugger. The Acid debugger is built round a command language with a syntax similar to C. +This tutorial is not an +introduction to Acid as a whole, but +offers a brief tour +of the basic built in and standard library functions, +especially those needed for debugging native Inferno kernels on a target board. +.PP +Acid was originally developed by Phil Winterbottom +to help debug multi-threaded programs in +the concurrent language Alef, and provide more sophisticated +debugging for C programs. +In the paper +.I "Acid: A Debugger Built From a Language" , +Winterbottom +discusses Acid's design, including some worked examples of unusual +applications of Acid to find memory leaks and assist code coverage analysis. +Following that is the +.I "Acid Reference Manual" , +also by Phil Winterbottom, +which gives a more precise specification of the Acid debugging language and its libraries. +.SH +Preliminaries -- the environment +.PP +Acid runs under the host operating system used for cross-development, +in the same way as the Inferno compilers. +Before running either compilers or Acid, the following +environment variables must be set appropriately: +.TS +center; +lf(CW) lf(R)w(4i) . +ROOT T{ +the directory in which Inferno lives (eg, +.CW /usr/inferno ). +T} +SYSHOST T{ +.I host +operating system type: +.CW Nt , +.CW Solaris , +.CW Plan9 , +.CW Linux +or +.CW FreeBSD +T} +OBJTYPE T{ +.I host +machine's architecture type: +.CW 386 , +.CW sparc , +.CW mips , +or +.CW powerpc +T} +.TE +They might be set by a login shell profile +(eg, +Unix +.CW ".profile" , +or +Plan 9 +.CW lib/profile ). +Also ensure that the directory +.P1 +$ROOT/$SYSHOST/$OBJTYPE/bin +.P2 +is on your search path. +For example, on a Solaris sparc, one might use: +.P1 +ROOT=\fIinferno_root\fP +SYSHOST=Solaris +OBJTYPE=sparc +ACIDLIB=$ROOT/lib/acid +PATH=$ROOT/$SYSHOST/$OBJTYPE/bin:$PATH +export ROOT ACIDLIB PATH OBJTYPE SYSHOST +.P2 +where +.I "inferno_root" +is the directory in which Inferno lives (eg, +.CW "/usr/inferno" ). +.SH +An Example Program +.PP +The first example is not kernel code, but a small program that +will be compiled but not run, to demonstrate basic Acid commands for +source and object file inspection. +The code is shown below: +.P1 +int +factorial(int n) +{ + if (n == 1) + return 1; + return n * factorial(n-1); +} + +int f; +void +main(void) +{ + f = factorial(5); +} + +void +_main(void) +{ + main(); +} +.P2 +.SH +Compiling and Linking +.PP +The first step is to create an executable. The example shows the process for creating ARM executables. Substitute the appropriate compiler and linker for other cpu types. +.P1 +% 5c factorial.c +% 5l -o factorial factorial.5 +% ls +factorial +factorial.5 +factorial.c +.P2 +.SH +Starting Acid +.PP +Even without the target machine on which +to run the program, many Acid features are available. +The following command starts debugging the +.CW "factorial" +executable. Note that, upon startup, Acid will attempt to load some libaries from the directory specified in the +.CW "ACIDLIB" +environment variable (defaults to +.CW "/usr/inferno/lib/acid" ). +It will also attempt to load the file +.CW "$HOME/lib/acid" , +in which you can place commands to be executed during startup. +.P1 +% acid factorial +factorial:Arm plan 9 executable + +$ROOT/lib/acid/port +$ROOT/lib/acid/arm +acid: +.P2 +.SH +Exploring the Executable +.PP +To find out what symbols are in the program: +.P1 +acid: symbols("") +etext T 0x00001068 +f D 0x00002000 +setR12 D 0x00002ffc +end B 0x00002008 +bdata D 0x00002000 +edata D 0x00002008 +factorial T 0x00001020 +main T 0x00001048 +_main T 0x0000105c +acid: +.P2 +The output from the +.CW symbols() +function is similar to the output from the +.I nm (10.1) +command. The first column is the symbol name, the second column gives the section the symbol is in, and the third column is the address of the symbol. +.PP +There is also a +.CW "symbols" +global variable. Variables and functions can have the same names. It holds the list of symbol information that the +.CW symbols +function uses to generate the table: +.d0 +.P1 +acid: symbols +{{"etext", T, 0x00001068}, {"f", D, 0x00002000}, {"setR12", D, 0x00002ffc}, + {"end", B, 0x00002008}, {"bdata", D, 0x00002000}, {"edata", D, 0x00002008}, + {"factorial", T, 0x00001020}, {"main", T, 0x00001048}, {"_main", T, 0x00001 +05c}} +acid: +.P2 +.d1 +In large programs, finding the symbol you are interested in from a list that may be thousands of lines long would be difficult. The string argument of +.CW symbols() +is a regular expression against which to match symbols. +All symbols that contain the pattern will be displayed. For example: +.P1 +acid: symbols("main") +main T 0x00001048 +_main T 0x0000105c +acid: symbols("^main") +main T 0x00001048 +acid: +.P2 +The +.CW symbols +function is written in the +.I acid +command language and lives in the +.CW "port" +library +.CW $ACIDLIB/port ). ( +.P1 +defn symbols(pattern) +{ + local l, s; + + l = symbols; + while l do { + s = head l; + if regexp(pattern, s[0]) then + print(s[0], "\t", s[1], "\t", s[2], "\n"); + l = tail l; + } +} +.P2 +Acid retrieves the list of symbols from the executable and turns each one into a global variable whose value is the address of the symbol. If the symbol clashes with a builtin name or keyword or a previously defined function, enough +.CW "$" +characters are prepended to the name to make it unique. The list of such renamings is printed at startup. +.PP +Most acid functions operate on addresses. For example, to view the source code for a given address, use the +.CW src +function: +.P1 +acid: src(main) +/usr/jrf/factorial.c:10 + 5 return n * factorial(n-1); + 6 } + 7 + 8 int f; + 9 void +>10 main(void) + 11 { + 12 f = factorial(5); + 13 } + 14 + 15 void +.P2 +The +.Af "src" addr +function displays a section of source code, with the line containing the address passed as an argument in the middle of the display. To print the assembly code beginning at a given address, use the +.CW asm() +function. +.P1 +acid: asm(factorial) +factorial 0x00001020 MOVW.W R14,#-0x8(R13) +factorial+0x4 0x00001024 CMP.S $#0x1,R0 +factorial+0x8 0x00001028 MOVW.EQ $#0x1,R0 +factorial+0xc 0x0000102c RET.EQ.P #0x8(R13) +factorial+0x10 0x00001030 MOVW R0,n+0(FP) +factorial+0x14 0x00001034 SUB $#0x1,R0,R0 +factorial+0x18 0x00001038 BL factorial +factorial+0x1c 0x0000103c MOVW n+0(FP),R2 +factorial+0x20 0x00001040 MUL R2,R0,R0 +factorial+0x24 0x00001044 RET.P #0x8(R13) +main 0x00001048 MOVW.W R14,#-0x8(R13) +acid: +.P2 +The output contains the symbolic address (symbol name+offset, where symbol name is the name of the enclosing function) followed by the absolute address, followed by the disassembled code. +The +.Af "asm" addr +function prints the assembly beginning at +.I "addr" +and ending after either 30 lines have been printed, or the end of the function has been reached. The +.CW "casm()" +function continues the assembly listing from where it left off, even past the end of the function and into the next one. +.P1 +acid: casm() +main+0x4 0x0000104c MOVW $#0x5,R0 +main+0x8 0x00001050 BL factorial +main+0xc 0x00001054 MOVW R0,$f-SB(SB) +main+0x10 0x00001058 RET.P #0x8(R13) +_main 0x0000105c MOVW.W R14,#-0x4(R13) +acid: +.P2 +All the functions presented so far are written in the acid command language. To see the source of a comand written in the acid command language, use the builtin command +.CW "whatis [" "\fIname\fP\f(CW ]\fP." +It prints the definition of the optional argument +.I "name" . +If +.I "name" +is an Acid builtin, +.CW whatis +prints +.CW "builtin function" . +.P1 +acid: whatis casm +defn casm() { + asm(lasmaddr); +} +acid: +acid: whatis atof +builtin function +acid: +.P2 +If +.I name +is a variable, it prints the type of variable, and for the integer type, gives the format code used to print the value: +.P1 +acid: whatis pid +integer variable format D +acid: +.P2 +With no arguments, +.CW whatis +lists all available functions: +.P1 +acid: whatis +Bsrc bpmask follow new sh +_bpconddel bpneq func newproc source +_bpcondset bpor gpr next spr +_stk bpprint include notestk spsrch +access bppush interpret params src +acidinit bpset itoa pcfile start +addsrcdir bptab kill pcline startstop +asm casm kstk pfl status +atof cont labstk print stk +atoi debug line printto stmnt +bpaddr dump linkreg procs stop +bpand error lkstk rc stopped +bpconddel file locals readfile strace +bpcondset filepc lstk reason symbols +bpdel findsrc map regexp waitstop +bpderef fmt match regs +bpeq fnbound mem setproc +acid: +.P2 +The +.Af "Bsrc" addr +function brings up an editor on the line containing +.I "addr" . +It simply invokes a shell script named +.CW "B" +that takes two arguments, +.I "-line" +and +.I "file" +The shell script invokes +.CW "$EDITOR +" +.I "line file" . +If unset, +.CW "EDITOR" +defaults to +.I vi . +The shell script, or the +.CW Bsrc +function can be easily rewritten to work with your favorite editor. +.PP +Entering a symbol name by itself will print the address of the symbol. Prefixing the symbol name with a +.CW "*" +will print the value at the address in the variable. Continuing to use our +.CW "factorial" +example: +.P1 +acid: f +0x00002000 +acid: *f +0x00000000 +acid: +.P2 +.SH +Remote Debugging +.PP +Now that you have a basic understanding of how to explore the executable, it is time to examine a real remote debugging session. +.PP +We'll use the SA1100 keyboard driver as an example. Examining the kernel configuration file, you'll see the following: +.P1 +dev + keyboard +link driver/keyboard port + scanfujn860 kbd.h keycodes.h +link ./../driver plat + kbdfujitsu ./../common/ssp.h \e + /driver/keyboard/kbd.h \e + /driver/keyboard/keycodes.h +port + const char *defaultkeyboard = "fujitsu"; + const char *defaultkeytable = "scanfujn860"; + int debugkeys = 1; /* 1 = enabled, 0 = disabled */ +.P2 +This describes the pieces of the keyboard driver which are linked into the kernel. The source code lives in two places, +.CW "$ROOT/os/driver/keyboard" , +and +.CW "$ROOT/os/plat/sa1100/driver" . +.PP +The next step is to build a kernel. Use the +.I mk +target +.CW acid +to ensure that the Acid symbolic debugging data is +produced. +For example: +.P1 +% mk 'CONF=sword' acid isword.p9.gz +.P2 +This creates the Acid file +.CW isword.acid , +containing Acid declarations describing kernel structures, +the kernel executable +.CW isword.p9 ; +and finally +.I gzip s +a copy of the kernel in +.CW isword.p9.gz +to load onto the device. Next, copy the gzipped image onto the device and then boot it. Follow the directions found elsewhere for details of this process. +.PP +From a shell prompt on the target device, start the remote debugger by writing the letter +.CW r +(for run) to +.CW "#b/dbgctl" . +Next, start Acid in remote debug mode, specifying the serial port it is connected to with the +.CW "-R" +option. +.CW "$CONF" +is the name of the configuration file used, for example +.CW "sword" . +.P1 +% acid -R /dev/cua/b -l i$CONF.acid i$CONF +isword:Arm plan 9 executable +$ROOT/lib/acid/port +i$CONF.acid +$ROOT/lib/acid/arm +/usr/jrf/lib/acid +acid: +.P2 +You are now debugging the kernel that is running on the target device. All of the previously listed commands will work as described before, in addition, there are many more commands available. +.SH +Kernel Process Listing +.PP +To get a list of kernel processes, use the +.CW "ps()" +function: +.P1 +acid: ps() +PID PC PRI STATE NAME +1 0x00054684 5 Queueing interp +2 0x00000000 1 Wakeme consdbg +3 0x00000000 5 Wakeme tcpack +4 0x00000000 5 Wakeme Fs.sync +5 0x00000000 4 Wakeme touchscreen +6 0x00054684 5 Queueing dis +7 0x00059788 5 Wakeme dis +8 0x00054684 5 Queueing dis +9 0x00054684 5 Queueing dis +10 0x00054684 5 Wakeme dis +11 0x0004c26c 1 Running dbg +acid: +.P2 +The +.CW "PC" +column shows the address the process was executing at when the +.CW ps +command retrieved statistics on it. The +.CW "PRI" +column lists process priorities. The smaller the number the higher the process priority. Notice that the kernel process (kproc) running the debugger is the highest priority process in the system. The only process you will ever see in the +.CW "Running" +state while executing the +.CW ps +command will be the debugger, since it is gathering information about the other processes. +.SH +Breakpoints +.PP +Breakpoints in Inferno, unlike most traditional kernel debuggers, are conditional breakpoints. There are minimally two conditions which must be met. These conditions are address and process id. A breakpoint will only be taken when execution for a specific kernel process reaches the specified address. The user can create additional conditions that are evaluated if the address and process id match. If evaluation of these conditions result in a nonzero value, the breakpoint is taken, otherwise it is ignored, and execution continues. +.PP +Again, the best way to proceed is with an example: +.P1 +acid: setproc(7) +.P2 +The +.Af setproc pid +function selects a kproc to which later commands will be applied; +the one with process ID (\fIpid\fP) +in this case. +.P1 +acid: bpset(keyboardread) +Waiting... +7: stopped flush8to4+0x18c MOVW (R3<<#4),R3 +.P2 +After selecting a kproc, we set a breakpoint at the address referred to by the +.CW "keyboardread" +symbol. As described before, the value of a global variable created from a symbol in the executable is the address of the symbol. In this case the address is the first instruction in the +.CW "keyboardread()" +function. Notice that setting a breakpoint stops the kproc from executing. A bit later, we'll see how to get it to continue execution. +.PP +Next, display the list of breakpoints using +.CW "bptab()" : +.P1 +acid: bptab() +ID PID ADDR CONDITIONS +0 7 keyboardread 0x0003c804 { } +.P2 +The first column is a unique number that identifies the breakpoint. The second column is the process ID in which the breakpoint will be taken. The third and fourth columns are the address of the breakpoint, first in symbolic form, then in numeric form. Finally, the last column is a list of conditions to evaluate whenever the kproc specified in the +.CW "PID" +column hits the the address specified in the +.CW "ADDR" +column. When they match, the list of conditions is evaluated. If the result is nonzero, the breakpoint is taken. Since we used the simplified breakpoint creation function, +.CW "bpset()" +, there are no additional conditions. Later on, we'll see how to set conditional breakpoints. +.PP +Start the selected kproc executing again, and wait for it to hit the breakpoint. +.P1 +acid: cont() +.P2 +The +.CW "cont()" +function will not return until a breakpoint has been hit, and there is no way to interrupt it. This means you should only set breakpoints that will be hit, otherwise you'll have to reboot the target device and restart your debugging session. +.PP +To continue our example, repeatedly hit new line (return, enter) +on the keyboard on the target device, until the breakpoint occurs: +.P1 +break 0: pid 7: stopped keyboardread SUB $#0xa4,R13,R13 +acid: +.P2 +This message, followed by the interactive prompt returning tells you that a breakpoint was hit. It gives the breakpoint id, the kernel process id, then the symbolic address at which execution halted, followed by the disassembly of the instruction at that address. +.PP +The +.CW "kstk()" +function prints a kernel stack trace, beginning with the current frame, all the way back to the call that started the kproc. For each function, it gives the name name, arguments, source file, and line number, followed by the symbolic address, source file, and line number of the caller. +.d0 +.P1 +acid: kstk() +At pc:247812:keyboardread /usr/inferno/os/driver/keyboard/devkey +board.c:350 +keyboardread(offset=0x0000009d,buf=0x001267f8,n=0x00000001) /usr +/inferno/os/driver/keyboard/devkeyboard.c:350 + called from kchanio+0x9c /usr/inferno/os/port/sysfile.c: +75 +kchanio(buf=0x001267f8,n=0x00000001,mode=0x00000000) /usr/infern +o/os/port/sysfile.c:64 + called from consread+0x144 /usr/inferno/os/driver/port/d +evcons +consread(offset=0x0000009d,buf=0x0043d4fc,n=0x00000400,c=0x0044e +c38) / +usr/inferno/os/driver/port/devcons.c:357 + called from kread+0x164 /usr/inferno/os/port/sysfile.c:2 +97 +kread(fd=0x00000006,n=0x00000400,va=0x0043d4fc) /usr/inferno/os/ +port/sysfile.c:272 + called from Sys_read+0x84 /usr/inferno/os/port/inferno.c +:244 +Sys_read() /usr/inferno/os/port/inferno.c:229 + called from mcall+0x98 /usr/inferno/interp/xec.c:590 +mcall() /usr/inferno/interp/xec.c:569 + called from xec+0x128 /usr/inferno/interp/xec.c:1098 +xec(p=0x0044edd8) /usr/inferno/interp/xec.c:1077 + called from vmachine+0xbc /usr/inferno/os/port/dis.c:706 +vmachine() /usr/inferno/os/port/dis.c:677 + called from _main+0x50 /usr/inferno/os/plat/sa1100/infern +o/main.c:237 +acid: +.P2 +.d1 +There is another kernel stack dump function, +.CW "lkstk()" +which shows the same information as +.CW "kstk()" +plus the names and values of local variables. Notice that in addition to the +`called from' +information, each local variable and its value is listed on a line by itself. +.d0 +.P1 +acid: lkstk() +At pc:247812:keyboardread /usr/inferno/os/driver/keyboard/devkeyboard. +c:350 +keyboardread(offset=0x00000018,buf=0x001267f9,n=0x00000001) /usr/inferno +/os/driver/keyboard/devkeyboard.c:350 + called from kchanio+0x9c /usr/inferno/os/port/sysfile.c:75 + tmp=0x00000000 +kchanio(buf=0x001267f9,n=0x00000001,mode=0x00000000) /usr/inferno/os/por +t/sysfile.c:64 + called from consread+0x144 /usr/inferno/os/driver/port/devcons + c=0x0045a858 + r=0x00000001 +consread(offset=0x00000015,buf=0x0043d4fc,n=0x00000400,c=0x0044ec38) /us +r/inferno/os/driver/port/devcons.c:357 + called from kread+0x164 /usr/inferno/os/port/sysfile.c:297 + r=0x00000001 + ch=0x0000006c + eol=0x00000000 + i=0x00000000 + mt=0x60000053 + tmp=0x0007317c + l=0x0044ec38 + p=0x00049754 +kread(fd=0x00000006,n=0x00000400,va=0x0043d4fc) /usr/inferno/os/port/sys +file.c:272 + called from Sys_read+0x84 /usr/inferno/os/port/inferno.c:244 + c=0x0044ec38 + dir=0x00000000 +Sys_read() /usr/inferno/os/port/inferno.c:229 + called from mcall+0x98 /usr/inferno/interp/xec.c:590 + f=0x0044eff0 + n=0x00000400 +mcall() /usr/inferno/interp/xec.c:569 + called from xec+0x128 /usr/inferno/interp/xec.c:1098 + ml=0x0043d92c + f=0x0044eff0 +xec(p=0x0044edd8) /usr/inferno/interp/xec.c:1077 + called from vmachine+0xbc /usr/inferno/os/port/dis.c:706 +vmachine() /usr/inferno/os/port/dis.c:677 + called from _main+0x50 /usr/inferno/os/plat/sa1100/inferno/main. +c:237 + r=0x0044edd8 + o=0x0044ee50 +.P2 +.d1 +The +.CW "step()" +function allows the currently selected process to execute a single instruction, and then stop. +.P1 +acid: step() +break 1: pid 7: stopped keyboardread+0x4 MOVW R14,#0x0(R13) +acid: +.P2 +The +.CW "bpdel" ( +.I id ) +command deletes the breakpoint identified by +.I id : +.P1 +acid: bpdel(0) +.P2 +The +.CW "start()" +command places the kproc back into the state it was in when it was stopped. +.P1 +acid: start(7) +acid: +.P2 +Now lets look at how to set conditional breakpoints. +.d0 +.P1 +acid: bpcondset(7, keyboardread, {bppush(_startup), bpderef()}) +Waiting... +7: stopped sched+0x20 MOVW #0xffffff70(R12),R6 +acid: bptab() +ID PID ADDR CONDITIONS +0 7 keyboardread 0x0003c804 { + {"p", 0x00008020} + {"*", 0x00000000} } +acid: *_startup = 0 +acid: cont() +.P2 +.d1 +Conditional breakpoints are set with +.CW "bpcondset()" +. It takes three arguments, the kernel process id, the address, and a list of stack based operations which are executed if the pid and addr match. The operations push values onto the stack, and if at the end of execution, a nonzero value is on the top of the stack, the breakpoint is taken. Examining the list of breakpoints with the +.CW "bptab()" +function shows the list of conditions to apply. The list is a bit confusing to read, but the +.CW ""p"" +means push and the +.CW ""*"" +means +.I dereference . +.PP +No matter how much you type on the keyboard, this particular breakpoint will never be taken. That's because before continuing, we set the value at the address +.CW "_startup" +to zero, so whenever execution reaches +.CW "keyboardread" +in kproc number 7, it pushes the address +.CW "_startup" , +then pops it and pushes the word at that address. Since the top of the stack is zero, the breakpoint is ignored. +.PP +This contrived example may not be all that useful, but you can use a similar method in your driver to examine some state before making the decision to take the breakpoint. +.SH +Examining Registers +.PP +There are three commands to dump registers: +.CW gpr() , +.CW spr() +and +.CW "regs()" . +The +.CW "gpr()" +function dumps the general purpose registers, +.CW "spr()" +dumps special purpose registers (such as the +.CW "PC" +and +.CW "LINK " +registers), and +.CW "regs()" +dumps both: +.d0 +.P1 +acid: regs() +PC 0x0004a3b0 sched+0x20 /home/tad/inf2.1/os/port/proc.c:82 +LINK 0x0004b8e8 kchanio+0xa4 /home/tad/inf2.1/os/port/sysfile.c:75 +SP 0x00453c4c +R0 0x00458798 R1 0x000fdf9c R2 0x0003c804 R3 0x00000000 +R4 0xffffffff R5 0x00000001 R6 0x00458798 R7 0x00000001 +R8 0x001267f8 R9 0x00000000 R10 0x0044ee50 R11 0x00029f9c +R12 0x000fc854 +acid: +.P2 +.d1 +.SH +Complex Types +.PP +When reading in the symbol table, Acid treats all of the symbols in the executable as pointers to integers. This is fine for global integer variables, but it makes examining more complex types difficult. Luckily there is a solution. Acid allows you to create a description for more complex types, and a function which will automatically be called for these complex types. In fact, the compiler can automatically generate the acid code to describe these complex types. For example, if we wanted to print out the devtab structure for the keyboard driver, we can just give its name: +.P1 +acid: whatis keyboarddevtab +integer variable format a complex Dev +acid: keyboarddevtab + dc 107 + name 0x0010e0ea + reset 0x0003c3fc + init 0x0003c438 + attach 0x0003c5dc + clone 0x000480d0 + walk 0x0003c600 + stat 0x0003c640 + open 0x0003c680 + create 0x0004881c + close 0x0003c768 + read 0x0003c804 + bread 0x0004883c + write 0x0003c968 + bwrite 0x00048900 + remove 0x00048978 + wstat 0x00048998 +acid: +.P2 +Acid knows the keyboarddevtab variable is of type Dev, and it prints it by invoking the function Dev(keyboarddevtab). +.P1 +acid: whatis Dev +complex Dev { + 'D' 0 dc; + 'X' 4 name; + 'X' 8 reset; + 'X' 12 init; + 'X' 16 attach; + 'X' 20 clone; + 'X' 24 walk; + 'X' 28 stat; + 'X' 32 open; + 'X' 36 create; + 'X' 40 close; + 'X' 44 read; + 'X' 48 bread; + 'X' 52 write; + 'X' 56 bwrite; + 'X' 60 remove; + 'X' 64 wstat; +}; +.P3 +defn Dev(addr) { + complex Dev addr; + print("\etdct",addr.dc,"\en"); + print("\etnamet",addr.nameX,"\en"); + print("\etresett",addr.resetX,"\en"); + print("\etinitt",addr.initX,"\en"); + print("\etattacht",addr.attachX,"\en"); + print("\etclonet",addr.cloneX,"\en"); + print("\etwalkt",addr.walkX,"\en"); + print("\etstatt",addr.statX,"\en"); + print("\etopent",addr.openX,"\en"); + print("\etcreatet",addr.createX,"\en"); + print("\etcloset",addr.closeX,"\en"); + print("\etreadt",addr.readX,"\en"); + print("\etbreadt",addr.breadX,"\en"); + print("\etwritet",addr.writeX,"\en"); + print("\etbwritet",addr.bwriteX,"\en"); + print("\etremovet",addr.removeX,"\en"); + print("\etwstatt",addr.wstatX,"\en"); +} +.P2 +Notice the complex type definition and the function to print the type both have the same name. If we know that an address is the address of a complex type, even though acid may not +(say we're storing multiple types of data in a void pointer), +we can print the complex type by calling the type printing function ourselves. +.P1 +acid: print(fmt(keyboarddevtab, 'X')) +0x00106d50 +acid: Dev(0x00106d50) + dc 107 + name 0x0010e0ea + reset 0x0003c3fc + init 0x0003c438 + attach 0x0003c5dc + clone 0x000480d0 + walk 0x0003c600 + stat 0x0003c640 + open 0x0003c680 + create 0x0004881c + close 0x0003c768 + read 0x0003c804 + bread 0x0004883c + write 0x0003c968 + bwrite 0x00048900 + remove 0x00048978 + wstat 0x00048998 +acid: +.P2 +.SH +Conclusion +.PP +This introduction to using Acid for remote debugging Inferno kernels should be enough to get you started. As a tutorial, it only describes how to use some of the features of the debugger, and does not attempt to describe how to do advanced debugging such as writing your own functions, or modifying existing ones. Exploring the source, setting breakpoints, single stepping through code, and examining the contents of variables are the usual uses of a debugger. This tutorial gives examples of all of these. +.PP +For a more in depth discussion of the acid command language, and how to write your own acid functions, see the manual page +.I acid (10.1) +and Phil Winterbottom's papers on the Acid Debugger, +reprinted in this volume. +.TL +Appendix +.LP +There are two important differences between Acid described in the +accompanying paper, and Acid as distributed with Inferno for use in +kernel debugging. +.SH +Connecting Acid to the remote Inferno kernel +.PP +A remote Plan 9 kernel can be debugged in the same +way as a Plan 9 user process, using the +file server +.I rdbfs (4). +It is a user-level file server on Plan 9 that +uses a special debugging protocol on a serial connection to +the remote kernel, but on the Plan 9 side serves a file system interface +like that of +.I proc (3), +for use by Acid. +Acid therefore does not need any special code to access the remote kernel's memory, +or exert control over it. +.PP +Inferno's version of Acid currently runs under the host operating systems, +which do not support such a mechanism (except for Plan 9). +Instead, Acid itself provides a special debugging protocol, +with (host) platform-specific interface code to access a serial port. +This might well be addressed in future by implementing the native kernel debugger +in Limbo. +.SH +Handling of breakpoints +.PP +.de Ip +.KS +.LP +.tl '\f2\\$1\fP\ \ \f(CW\\$2(\f2\\$3\f(CW)\f1''\\$4' +.IP +.. +.de Ex +.KE +.KS +.IP +.ft CW +.ta 4n +4n +4n +4n +4n +4n +4n +4n +4n +4n +4n +4n +4n +4n +4n +4n +.nf +.in +4n +.br +.. +.de Ee +.fi +.ft 1 +.br +.in -4n +.KE +.. +The following functions are provided by the Acid library +.CW $ROOT/lib/acid/$OBJTYPE +for use in native kernel debugging. +In several cases they change the behavior described in the Acid manual. +The functions are: +.P1 + id = bpset(addr) + id = bpcondset(pid, addr, list) + bppush(val) + bpderef() + bpmask() + bpeq() + bpneq() + bpand() + bpor() + bptab() + addr = bpaddr(id) + bpdel(id) + bpconddel(id) +.P2 +.PP +With traditional breakpoints, when a program reaches an address at which a breakpoint is set, execution is halted, and the debugger is notified. In applications programming, this type of breakpoint is sufficient because communicating the break in execution to the debugger is handled by the operating system. The traditional method of handling breakpoints breaks down when program being debugged is the kernel. A breakpoint cannot entirely suspend the execution of the kernel because there is no other program that can handle the communication to the debugger. +.PP +Some operating systems solve this problem by including a +`mini' operating system, +a self-contained program within the kernel that has its own code to handle the hardware used to communicate with the remote debugger or user. There are many problems with this mechanism. First, the debugger code that lives inside the kernel must duplicate a lot of code contained elsewhere in the kernel. This makes the kernel much bigger, and can increase maintenance costs. Typically this type of debug support treats the kernel as having a single thread of control, so a breakpoint stops everything while the user decides what to do about it. The only places in the kernel breakpoints cannot be set are in the debugger itself, and in the code that handles notifying the debugger of the breakpoint. +.PP +The Inferno kernel takes a different approach. The remote debug support is provided by a device driver that makes use of kernel services. Communication with the remote debugger is handled by a kernel process dedicated entirely to that task. All breakpoints can be considered to be minimally conditional on two values. First, the address to take the break at, and second, the kernel process to take the break in. This method allows the kernel debugger to be implemented as a regular Inferno device driver. The device driver can make use of all the APIs available to device drivers, it does not need to be self contained. Additionally, conditional breakpoints can be set anywhere in the kernel, with two exceptions. As with traditional debugger implementations, breakpoints can not be set in the code that handles notifying the debugger of the breakpoint. Unlike traditional implementations, the code that handles the execution and evaluation of the conditions applied to the breakpoint is the only other place breakpoint +cannot be set. Since both of these parts of the kernel code are self contained, the user can set breakpoints in any other kernel routines. For example, the user could set a breakpoint in +.CW kread() , +for a given kernel process, but the debugger can still call +.CW kread() +itself. +.PP +Use of conditional breakpoints can help make the debugging process more efficient. If there is a bug that occurs in the Nth iteration of a loop, with unconditional breakpoints, user intervention is required N-1 times before reaching the state the bug occurs in. Conditional breakpoints give the user the ability to automatically check the value of N, and only take the breakpoint when it reaches the critical value. +.PP +The following changed +and additional functions in the Acid library provide access +to this extended breakpoint support: +.SH +Setting Breakpoints +.LP +.\" +.\" +.\" +.Ip integer bpset integer "Set a breakpoint +.CW bpset +places an unconditional breakpoint for the currently +selected kernel process at the address specified +by its +.I integer +argument. +It returns the ID of the newly created breakpoint, or the nil list on error. +It is simply shorthand for a call +.Ex +bpcondset(pid, addr, {}) +.Ee +where +.I pid +is the global variable identifying the currently selected process, +.I addr +is the user-supplied address for the breakpoint, +and +.CW {} +is the empty list, signifying no conditions. +.Ip integer bpcondset "pid,addr,list" "Set conditional breakpoint +Sets a conditional breakpoint at addr for the kernel process identified by +.I pid . +The +.I list +argument is a list of operations that are executed when execution reaches +.I addr . +If execution results in a a non-zero value on the top of the stack, the breakpoint is taken, otherwise it is skipped. +The +.I list +is in reverse polish notation format, and has these operations: +.Ex +PUSH +DEREF (pop val, push *(ulong*)val) +MASK (pop mask, pop value, push value & mask) +EQ (pop v1, pop v2, push v1 == v2) +NEQ (pop v1, pop v2, push v1 != v2) +AND (pop v1, pop v2, push v1 && v1) +OR (pop v1, pop v2, push v1 || v2) +.Ee +Condition lists are executed in a single pass, starting with the first command in the list, ending with the last. If a nonzero value is on the top of the stack at the end of execution, the breakpoint is taken, otherwise it is skipped. +.RS +.LP +In effect, there are two mandatory conditions, the address of the breakpoint, and the kernel process id. These two conditions must be met for the condition list to be processed. If these conditions are met, the entire condition list is processed, there is no short circuit evaluation path. +.LP +For example, given the following code fragment: +.P1 +.4i +int i; + +for(i=0; i<1000; i++) { + ... +} +.P2 +the following call to +.CW bpcondset() +sets a conditional breakpoint to be taken when execution reaches +.I addr +in kernel process +.I pid +on the 500th iteration of the loop: +.P1 +.4i +bpcondset(pid, addr, {bppush(i), + bpderef(), bppush(500), bpeq()}); +.P2 +.RE +.SH +Condition List Construction +.LP +.Ip list bppush val "Construct breakpoint stack +Push val onto the stack. +.KE +.Ip list bpderef "" "Construct breakpoint stack +Replace the value at the top of the stack with the value found at the address obtained by treating value at the top of the stack as an address. Pop the value on the top of the stack, treat it as a ulong*, and push the value at the address. +.Ex +addr = pop(); +push(*(ulong*)addr); +.Ee +.Ip list bpmask "" "Construct breakpoint stack +Replace the top two values on the stack with the value obtained by masking the second value on the stack with the top of the stack. +.Ex +mask = pop(); +value = pop(); +push(value & mask); +.Ee +.Ip list bpeq "" "Construct breakpoint stack +Comparison of the top two values on the stack. Replace the top two values on the stack with a 1 if the values are equal, or a zero if they are not. +.Ex +v1 = pop(); +v2 = pop(); +push(v1 == v2); +.Ee +.Ip list bpneq "" "Construct breakpoint stack +Negative comparison of the top two values on the stack. Replace the top two values on the stack with a 0 if the values are equal, or 1 if they are not. +.Ex +v1 = pop(); +v2 = pop(); +push(v1 != v2); +.Ee +.Ip list bpand "" "Construct breakpoint stack +Logical and of the top two values on the stack. Replace the top two values on the stack with a 0 if both are zero, or 1 if both are nonzero. +.Ex +v1 = pop(); +v2 = pop(); +push(v1 && v2); +.Ee +.Ip list bpor "" "Construct breakpoint stack +Logical or of the top two values on the stack. Replace the top two values on the stack with a 1 if either is nonzero, 0 otherwise. +.Ex +v1 = pop(); +v2 = pop(); +push(v1 || v2); +.Ee +.SH +Breakpoint Status +.LP +.Ip {} bptab "" "List active breakpoints +Prints the list of breakpoints containing the following information in order: breakpoint number, kernel process id, breakpoint address, and the list of conditions to execute to determine if the breakpoint will be taken. +.Ex +acid: bptab() +ID PID ADDR CONDITIONS +0 1 consread+0x20 0x216cc {} +acid: +.Ee +.Ip integer bpaddr id "Address of breakpoint +Returns the address the breakpoint identified by +.I id +is set to trigger on. +.KE +.SH +Deleting breakpoints +.Ip {} bpdel id "Delete breakpoint +Delete the breakpoint identified by +.I id . +Shorthand for bpconddel(). +.KE +.Ip {} bpconddel id "Delete conditional breakpoint +Delete the conditional breakpoint identified by the integer +.I id . +.KE diff --git a/doc/acidtut.pdf b/doc/acidtut.pdf Binary files differnew file mode 100644 index 00000000..e954bd84 --- /dev/null +++ b/doc/acidtut.pdf diff --git a/doc/acme/acme.ms b/doc/acme/acme.ms new file mode 100644 index 00000000..7314ff2e --- /dev/null +++ b/doc/acme/acme.ms @@ -0,0 +1,1295 @@ +.de EX +.nr x \\$1v +\\!h0c n \\nx 0 +.. +.de FG \" start figure caption: .FG filename.ps verticalsize +.KF +.BP \\$1 \\$2 +.sp .5v +.EX \\$2v +.ps -1 +.vs -1 +.. +.de fg \" end figure caption (yes, it is clumsy) +.ps +.vs +.br +\l'1i' +.KE +.. +.TL +Acme: A User Interface for Programmers +.AU +.I "Rob Pike +.I rob@plan9.bell-labs.com +.SP .22i exactly +.AB +.FS +\l'1i' +.br +Originally appeared in +.I +Proc. of the Winter 1994 USENIX Conf., +.R +pp. 223-234, +San Francisco, CA +.br +Reprinted in +.I "Plan 9 Programmer's Manual: Volume 2" +(Second Edition), AT&T 1995. +.FE +A hybrid of window system, shell, and editor, Acme gives text-oriented +applications a clean, expressive, and consistent style of interaction. +Traditional window systems support interactive client programs and offer libraries of +pre-defined operations such as pop-up menus +and buttons to promote a consistent +user interface among the clients. +Acme instead provides its clients with a fixed user interface and +simple conventions to encourage its uniform use. +Clients access the facilities of Acme through a file system interface; +Acme is in part a file server that exports device-like files that may be +manipulated to access and control the contents of its windows. +Written in a concurrent programming language, +Acme is structured as a set of communicating processes that neatly subdivide +the various aspects of its tasks: display management, input, file server, and so on. +.PP +Acme attaches distinct functions to the three mouse buttons: +the left selects text; +the middle executes textual commands; +and the right combines context search and file opening +functions to integrate the various applications and files in +the system. +.PP +Acme works well enough to have developed +a community that uses it exclusively. +Although Acme discourages the traditional style of interaction +based on typescript windows\(emteletypes\(emits +users find Acme's other services render +typescripts obsolete. +.AE +.SH +History and motivation +.PP +The usual typescript style of interaction with +Unix and its relatives is an old one. +The typescript\(eman intermingling of textual commands and their +output\(emoriginates with the scrolls of paper on teletypes. +The advent of windowed terminals has given each user what +amounts to an array of teletypes, a limited and unimaginative +use of the powers of bitmap displays and mice. +Systems like the Macintosh +that do involve the mouse as an integral part of the interaction +are geared towards general users, not experts, and certainly +not programmers. +Software developers, at least on time-sharing systems, have been left behind. +.FG ./acme.fig1 5i +Figure 1. A small Acme screen\(emnormally it runs on a larger display\(emdemonstrating +some of the details discussed in the text. +The right column contains some guide files, +a mailbox presented by Acme's mail program, +the columnated display of files in Acme's own source directory, +a couple of windows from the OED browser, +a debugger window, +and an error window showing diagnostics from a compilation. +The left column holds a couple of source files +.CW dat.h "" ( +and +.CW acme.l ), +another debugger window displaying a stack trace, +and a third source file +.CW time.l ). ( +.CW Time.l +was opened from the debugger by clicking the right mouse button +on a line in the stack window; +the mouse cursor landed on the offending line of +.CW acme.l +after a click on the compiler message. +.fg +.PP +Some programs have mouse-based editing of +text files and typescripts; +ones I have built include +the window systems +.CW mux +[Pike88] +and +.CW 8½ +[Pike91] +and the text editor +Sam [Pike87]. +These have put the programmer's mouse to some productive work, +but not wholeheartedly. Even experienced users of these programs +often retype text that could be grabbed with the mouse, +partly because the menu-driven interface is imperfect +and partly because the various pieces are not well enough integrated. +.PP +Other programs\(emEMACS [Stal93] is the prime example\(emoffer a high +degree of integration but with a user interface built around the +ideas of cursor-addressed terminals that date from the 1970's. +They are still keyboard-intensive and +dauntingly complex. +.PP +The most ambitious attempt to face these issues was the Cedar +system, developed at Xerox [Swei86]. +It combined a new programming language, compilers, +window system, even microcode\(ema complete system\(emto +construct a productive, highly +integrated and interactive environment +for experienced users of compiled languages. +Although successful internally, the system was so large +and so tied to specific hardware that it never fledged. +.PP +Cedar was, however, the major inspiration for Oberon [Wirt89], +a system of similar scope but much smaller scale. +Through careful selection of Cedar's ideas, Oberon shows +that its lessons can be applied to a small, coherent system +that can run efficiently on modest hardware. +In fact, Oberon probably +errs too far towards simplicity: a single-process system +with weak networking, it seems an architectural throwback. +.PP +Acme is a new program, +a combined window system, editor, and shell, +that applies +some of the ideas distilled by Oberon. +Where Oberon uses objects and modules within a programming language (also called Oberon), +Acme uses files and commands within an existing operating system (Plan 9). +Unlike Oberon, Acme does not yet have support for graphical output, just text. +At least for now, the work on Acme has concentrated on +producing the smoothest user interface possible for a programmer +at work. +.PP +The rest of this paper describes Acme's interface, +explains how programs can access it, +compares it to existing systems, +and finally presents some unusual aspects of its implementation. +.SH +User interface +.PP +.FG ./acme.fig2 3i +Figure 2. An Acme window showing a section of code. +The upper line of text is the tag containing the file name, +relevant commands, and a scratch area (right of the vertical bar); +the lower portion of the window is the +body, or contents, of the file. +Here the scratch area contains a command for the middle button +.CW mk ) ( +and a word to search for with the right button +.CW cxfidalloc ). ( +The user has just +clicked the right button on +.CW cxfidalloc +and Acme has searched for the word, highlighted it, +and moved the mouse cursor there. The file has been modified: +the center of the layout box is black and the command +.CW Put +appears in the tag. +.fg +Acme windows are arrayed in columns (Figure 1) and are used more +dynamically than in an environment like X Windows or +.CW 8½ +[Sche86, Pike91]. +The system frequently creates them automatically and the user +can order a new one with a single mouse button click. +The initial placement of a new window is determined +automatically, but the user may move an existing window anywhere +by clicking or dragging a +.I "layout box +in the upper left corner of +the window. +.PP +Acme windows have two parts: a +.I tag +holding a single line of text, +above a +.I body +holding zero or more lines (Figure 2). +The body typically contains an image of a file being edited +or the editable output of a +program, analogous to an +EMACS shell +window. The tag contains +the name of the window +(usually the name of the associated +file or directory), some built-in commands, and a scratch area to hold arbitrary text. +If a window represents a directory, the name in the tag ends with +a slash and the body contains a list of the names of the files +in the directory. +Finally, each non-empty body holds a scroll bar at the left of the text. +.PP +Each column of windows also has a layout box and a tag. +The tag has no special meaning, although Acme pre-loads it with a few +built-in commands. +There is also a tag across the whole display, also loaded with +helpful commands and a list of active processes started +by Acme. +.PP +Typing with the keyboard and selecting with the left button are as in +many other systems, including the Macintosh, +.CW 8½ , +and Sam. +The middle and right buttons are used, somewhat like the left button, +to `sweep' text, but the indicated text is treated in a way +that depends on the text's location\(em\f2context\f1\(emas well as its content. +This context, based on the directory of the file containing the text, +is a central component of Acme's style of interaction. +.PP +Acme has no single notion of `current directory'. +Instead, every command, file name, +action, and so on is interpreted or executed in the directory named by the +tag of the window containing the command. For example, the string +.CW mammals +in a window labeled +.CW /lib/ +or +.CW /lib/insects +will be interpreted as the file name +.CW /lib/mammals +if such a file exists. +.PP +Throughout Acme, the middle mouse button is used to execute commands +and the right mouse button is used to locate and select files and text. +Even when there are no true files on which to operate\(emfor example +when editing mail messages\(emAcme and its applications use +consistent extensions of these basic functions. +This idea is as vital to Acme as icons are to the Macintosh. +.PP +The middle button executes commands: text swept with the button +pressed is underlined; when the button is released, the underline is +removed and the indicated text is executed. +A modest number of commands are recognized as built-ins: words like +.CW Cut , +.CW Paste , +and +.CW New +name +functions performed directly by Acme. +These words often appear in tags to make them always available, +but the tags are not menus: any text anywhere in Acme may be a command. +For example, in the tag or body of any window one may type +.CW Cut , +select it with the left button, use the middle button to execute it, +and watch it disappear again. +.PP +If the middle button indicates a command that is not recognized as a built-in, +it is executed in the directory +named by the tag of the window holding the text. +Also, the file to be executed is searched for first in that directory. +Standard input is connected to +.CW /dev/null , +but standard and error outputs are connected to an Acme window, +created if needed, called +\f2dir\f(CW/+Errors\f1 where +.I dir +is the directory of the window. +(Programs that need interactive input use a different interface, described below.) +A typical use of this is to type +.CW mk +(Plan 9's +.CW make ) +in the scratch area in the tag of a C source window, say +.CW /sys/src/cmd/sam/regexp.c , +and execute it. +Output, including compiler errors, appears in the window labeled +.CW /sys/src/cmd/sam/+Errors , +so file names in the output are associated with the windows and directory +holding the source. +The +.CW mk +command remains in the tag, serving as a sort of menu item for the associated +window. +.PP +Like the middle button, the right button is used to indicate text by sweeping it out. +The indicated text is not a command, however, but the argument of a generalized +search operator. +If the text, perhaps after appending it to the directory of the window containing it, +is the name of an existing file, Acme creates a new window to hold the file +and reads it in. It then moves the mouse cursor to that window. If the file is +already loaded into Acme, the mouse motion happens but no new window is made. +For example, indicating the string +.CW sam.h +in +.P1 +#include "sam.h" +.P2 +in a window on the file +.CW /sys/src/cmd/sam/regexp.c +will open the file +.CW /sys/src/cmd/sam/sam.h . +.PP +If the file name is followed immediately by a colon and a legal address in +Sam notation (for example a line number or a regular expression delimited in +slashes or a comma-separated compound of such addresses), Acme highlights +the target of that address in the file and places the mouse there. One may jump to +line 27 of +.CW dat.h +by indicating with the right button the text +.CW dat.h:27 . +If the file is not already open, Acme loads it. +If the file name is null, for example if the indicated string is +.CW :/^main/ , +the file is assumed to be that of the window containing the string. +Such strings, when typed and evaluated in the tag of a window, amount to +context searches. +.PP +If the indicated text is not the name of an existing file, it is taken to be literal +text and is searched for in the body of the window containing the text, highlighting +the result as if it were the result of a context search. +.PP +For the rare occasion when a file name +.I is +just text to search for, it can be selected with the left button and used as the +argument to a built-in +.CW Look +command that always searches for literal text. +.SH +Nuances and heuristics +.PP +A user interface should not only provide the necessary functions, it should also +.I feel +right. +In fact, it should almost not be felt at all; when one notices a +user interface, one is distracted from the job at hand [Pike88]. +To approach this invisibility, some of Acme's properties and features +are there just to make the others easy to use. +Many are based on a fundamental principle of good design: +let the machine do the work. +.PP +Acme tries to avoid needless clicking and typing. +There is no `click-to-type', eliminating a button click. +There are no pop-up or pull-down menus, eliminating the mouse action needed to +make a menu appear. +The overall design is intended to make text on the screen useful without +copying or retyping; the ways in which this happens involve +the combination of many aspects of the interface. +.PP +Acme tiles its windows and places them automatically +to avoid asking the user to place and arrange them. +For this policy to succeed, the automatic placement must behave well enough +that the user is usually content with the location of a new window. +The system will never get it right all the time, but in practice most +windows are used at least for a while where Acme first places them. +There have been several complete rewrites of the +heuristics for placing a new window, +and with each rewrite the system became +noticeably more comfortable. The rules are as follows, although +they are still subject to improvement. +The window appears in the `active' column, that most recently used for typing or +selecting. +Executing and searching do not affect the choice of active column, +so windows of commands and such do not draw new windows towards them, +but rather let them form near the targets of their actions. +Output (error) windows always appear towards the right, away from +edited text, which is typically kept towards the left. +Within the column, several competing desires are balanced to decide where +and how large the window should be: +large blank spaces should be consumed; +existing text should remain visible; +existing large windows should be divided before small ones; +and the window should appear near the one containing the action that caused +its creation. +.PP +Acme binds some actions to chords of mouse buttons. +These include +.CW Cut +and +.CW Paste +so these common operations can be done without +moving the mouse. +Another is a way to apply a command in one window to text (often a file name) +in another, avoiding the actions needed to assemble the command textually. +.PP +Another way Acme avoids the need to move the mouse is instead to move the cursor +to where it is likely to be used next. When a new window is made, Acme +moves the cursor to the new window; in fact, to the selected text in that window. +When the user deletes a newly made window, the cursor is +returned to the point it was before the window was made, +reducing the irritation of windows that pop up to report annoying errors. +.PP +When a window is moved, Acme moves the cursor to the layout box in +its new place, to permit further adjustment without moving the mouse. +For example, when a click of the left mouse button on the layout box grows +the window, the cursor moves to the new location of the box so repeated clicks, +without moving the mouse, continue to grow it. +.PP +Another form of assistance the system can offer is to supply precision in +pointing the mouse. The best-known form of this is `double-clicking' to +select a word rather than carefully sweeping out the entire word. +Acme provides this feature, using context to decide whether to select +a word, line, quoted string, parenthesized expression, and so on. +But Acme takes the idea much further by applying it to execution +and searching. +A +.I single +click, that is, a null selection, with either the middle or right buttons, +is expanded automatically to indicate the appropriate text containing +the click. What is appropriate depends on the context. +.PP +For example, to execute a single-word command +such as +.CW Cut , +it is not necessary to sweep the entire word; just clicking the button once with +the mouse pointing at the word is sufficient. `Word' +means the largest string of likely file name characters surrounding the location +of the click: click on a file name, run that program. +On the right button, the rules are more complicated because +the target of the click might be a file name, file name with address, +or just plain text. Acme examines the text near the click to find +a likely file name; +if it finds one, it checks that it names an existing file (in the directory named in the tag, if the name is relative) +and if so, takes that as the result, after extending it with any address +that may be present. If there is no file with that name, Acme +just takes the largest alphanumeric string under the click. +The effect is a natural overloading of the button to refer to plain text as +well as file names. +.PP +First, though, if the click occurs over the left-button-selected text in the window, +that text is taken to be what is selected. +This makes it easy to skip through the occurrences of a string in a file: just click +the right button +on some occurrence of the text in the window (perhaps after typing it in the tag) +and click once for each subsequent occurrence. It isn't even necessary to move +the mouse between clicks; Acme does that. +To turn a complicated command into a sort of menu item, select it: +thereafter, clicking the middle button on it will execute the full command. +.PP +As an extra feature, Acme recognizes file names in angle brackets +.CW <> +as names of files in standard directories of include files, +making it possible for instance to look at +.CW <stdio.h> +with a single click. +.PP +Here's an example to demonstrate how the actions and defaults work together. +Assume +.CW /sys/src/cmd/sam/regexp.c +is +open and has been edited. We write it (execute +.CW Put +in the tag; once the file is written, Acme removes the word from the tag) +and type +.CW mk +in the tag. We execute +.CW mk +and get some errors, which appear in a new window labeled +.CW /sys/src/cmd/sam/+Errors . +The cursor moves automatically to that window. +Say the error is +.P1 +main.c:112: incompatible types on assignment to `pattern' +.P2 +We move the mouse slightly and click the right button +at the left of the error message; Acme +makes a new window, reads +.CW /sys/src/cmd/main.c +into it, selects line 112 +and places the mouse there, right on the offending line. +.SH +Coupling to existing programs +.PP +Acme's syntax for file names and addresses makes it easy for other programs +to connect automatically to Acme's capabilities. For example, the output of +.P1 +grep -n variable *.[ch] +.P2 +can be used to help Acme step through the occurrences of a variable in a program; +every line of output is potentially a command to open a file. +The file names need not be absolute, either: the output +appears in a window labeled with the directory in which +.CW grep +was run, from which Acme can derive the full path names. +.PP +When necessary, we have changed the output of some programs, +such as compiler error messages, to match +Acme's syntax. +Some might argue that it shouldn't be necessary to change old programs, +but sometimes programs need to be updated when systems change, +and consistent output benefits people as well as programs. +A historical example is the retrofitting of standard error output to the +early Unix programs when pipes were invented. +.PP +Another change was to record full path names in +the symbol table of executables, so line numbers reported by the debugger +are absolute names that may be used directly by Acme; it's not necessary +to run the debugger in the source directory. (This aids debugging +even without Acme.) +.PP +A related change was to add lines of the form +.P1 +#pragma src "/sys/src/libregexp" +.P2 +to header files; coupled with Acme's ability to locate a header file, +this provides a fast, keyboardless way to get the source associated with a library. +.PP +Finally, Acme directs the standard output of programs it runs to +windows labeled by the directory in which the program is run. +Acme's splitting of the +output into directory-labeled windows is a small feature that has a major effect: +local file names printed by programs can be interpreted directly by Acme. +By indirectly coupling the output of programs to the input, +it also simplifies the management of software that occupies multiple +directories. +.SH +Coupling to new programs +.PP +Like many Plan 9 programs, +Acme offers a programmable interface to +other programs by acting as a file server. +The best example of such a file server is the window system +.CW 8½ +[Pike91], +which exports files with names such as +.CW screen , +.CW cons , +and +.CW mouse +through which applications may access the I/O capabilities of the windows. +.CW 8½ +provides a +.I distinct +set of files for each window and builds a private file name space +for the clients running `in' each window; +clients in separate windows see distinct files with the same names +(for example +.CW /dev/mouse ). +Acme, like the process file system [PPTTW93], instead associates each +window with a directory of files; the files of each window are visible +to any application. +This difference reflects a difference in how the systems are used: +.CW 8½ +tells a client what keyboard and mouse activity has happened in its window; +Acme tells a client what changes that activity wrought on any window it asks about. +Putting it another way, +.CW 8½ +enables the construction of interactive applications; +Acme provides the interaction for applications. +.PP +The root of +Acme's file system is mounted using Plan 9 operations on the directory +.CW /mnt/acme . +In +that root directory appears a directory for each window, numbered with the window's identifier, +analogous to a process identifier, for example +.CW /mnt/acme/27 . +The window's directory +contains 6 files: +.CW /mnt/acme/27/addr , +.CW body , +.CW ctl , +.CW data , +.CW event , +and +.CW tag . +The +.CW body +and +.CW tag +files contain the text of the respective parts of the window; they may be +read to recover the contents. Data written to these files is appended to the text; +.CW seeks +are ignored. +The +.CW addr +and +.CW data +files provide random access to the contents of the body. +The +.CW addr +file is written to set a character position within the body; the +.CW data +file may then be read to recover the contents at that position, +or written to change them. +(The tag is assumed +small and special-purpose enough not to need special treatment. +Also, +.CW addr +indexes by character position, which is not the same as byte offset +in Plan 9's multi-byte character set [Pike93]). +The format accepted by the +.CW addr +file is exactly the syntax of addresses within the user interface, +permitting regular expressions, line numbers, and compound addresses +to be specified. For example, to replace the contents of lines 3 through 7, +write the text +.P1 +3,7 +.P2 +to the +.CW addr +file, then write the replacement text to the +.CW data +file. A zero-length write deletes the addressed text; further writes extend the replacement. +.PP +The control file, +.CW ctl , +may be written with commands to effect actions on the window; for example +the command +.P1 +name /adm/users +.P2 +sets the name in the tag of the window to +.CW /adm/users . +Other commands allow deleting the window, writing it to a file, and so on. +Reading the +.CW ctl +file recovers a fixed-format string containing 5 textual numbers\(emthe window +identifier, the number of characters in the tag, the number in the body, +and some status information\(emfollowed by the text of the tag, up to a newline. +.PP +The last file, +.CW event , +is the most unusual. +A program reading a window's +.CW event +file is notified of all changes to the text of the window, and +is asked to interpret all middle- and right-button actions. +The data passed to the program is fixed-format and reports +the source of the action (keyboard, mouse, external program, etc.), +its location (what was pointed at or modified), and its nature (change, +search, execution, etc.). +This message, for example, +.P1 +MI15 19 0 4 time +.P2 +reports that actions of the mouse +.CW M ) ( +inserted in the body (capital +.CW I ) +the 4 characters of +.CW time +at character positions 15 through 19; the zero is a flag word. +Programs may apply their own interpretations of searching and +execution, or may simply reflect the events back to Acme, +by writing them back to the +.CW event +file, to have the default interpretation applied. +Some examples of these ideas in action are presented below. +.PP +Notice that changes to the window are reported +after the fact; the program is told about them but is not required to act +on them. Compare this to a more traditional interface in which a program +is told, for example, that a character has been typed on the keyboard and +must then display and interpret it. +Acme's style stems from the basic model of the system, in which any +number of agents\(emthe keyboard, mouse, external programs +writing to +.CW data +or +.CW body , +and so on\(emmay +change the contents of a window. +The style is efficient: many programs are content +to have Acme do most of the work and act only when the editing is completed. +An example is the Acme mail program, which can ignore the changes +made to a message being composed +and just read its body when asked to send it. +A disadvantage is that some traditional ways of working are impossible. +For example, there is no way `to turn off echo': characters appear on the +screen and are read from there; no agent or buffer stands between +the keyboard and the display. +.PP +There are a couple of other files made available by Acme in its root directory +rather than in the directory of each window. +The text file +.CW /mnt/acme/index +holds a list of all window names and numerical identifiers, +somewhat analogous to the output of the +.CW ps +command for processes. +The most important, though, is +.CW /mnt/acme/new , +a directory that makes new windows, similar to the +.CW clone +directory in the Plan 9 network devices [Pres93]. +The act of opening any file in +.CW new +creates a new Acme window; thus the shell command +.P1 +grep -n var *.c > /mnt/acme/new/body +.P2 +places its output in the body of a fresh window. +More sophisticated applications may open +.CW new/ctl , +read it to discover the new window's identifier, and then +open the window's other files in the numbered directory. +.SH +Acme-specific programs +.PP +Although Acme is in part an attempt to move beyond typescripts, +they will probably always have utility. +The first program written for Acme was therefore one +to run a shell or other traditional interactive application +in a window, the Acme analog of +.CW xterm . +This program, +.CW win , +has a simple structure: +it acts as a two-way intermediary between Acme and the shell, +cross-connecting the standard input and output of the shell to the +text of the window. +The style of interaction is modeled after +.CW mux +[Pike88]: standard output is added to the window at the +.I "output point; +text typed after the output point +is made available on standard input when a newline is typed. +After either of these actions, the output point is advanced. +This is different from the working of a regular terminal, +permitting cut-and-paste editing of an input line until the newline is typed. +Arbitrary editing may be done to any text in the window. +The implementation of +.CW win , +using the +.CW event , +.CW addr , +and +.CW data +files, is straightforward. +.CW Win +needs no code for handling the keyboard and mouse; it just monitors the +contents of the window. Nonetheless, it allows Acme's full editing to be +applied to shell commands. +The division of labor between +.CW win +and +.CW Acme +contrasted with +.CW xterm +and the X server demonstrates how much work Acme handles automatically. +.CW Win +is implemented by a single source file 560 lines long and has no graphics code. +.PP +.CW Win +uses the middle and right buttons to connect itself in a consistent way +with the rest of Acme. +The middle button still executes commands, but in a style more suited +to typescripts. Text selected with the middle button is treated as if +it had been typed after the output point, much as a similar feature in +.CW xterm +or +.CW 8½ , +and therefore causes it to be `executed' by the application running in the window. +Right button actions are reflected back to Acme but refer to the appropriate +files because +.CW win +places the name of the current directory in the tag of the window. +If the shell is running, a simple shell function replacing the +.CW cd +command can maintain the tag as the shell navigates the file system. +This means, for example, that a right button click on a file mentioned in an +.CW ls +listing opens the file within Acme. +.PP +Another Acme-specific program is a mail reader that begins by presenting, +in a window, a listing of the messages in the user's mailbox, one per line. +Here the middle and right button actions are modified to refer to +mail commands +and messages, but the change feels natural. +Clicking the right button on a line creates a new window and displays the +message there, or, if it's already displayed, moves the mouse to that window. +The metaphor is that the mailbox is a directory whose constituent files are messages. +The mail program also places some relevant commands in the tag lines of +the windows; for example, executing the word +.CW Reply +in a message's tag creates a new window +in which to compose a message to the sender of the original; +.CW Post +then dispatches it. +In such windows, the addressee is just a list of names +on the first line of the body, which may be edited to add or change recipients. +The program also monitors the mailbox, updating the `directory' as new messages +arrive. +.PP +The mail program is as simple as it sounds; all the work of interaction, +editing, and management of the display is done by Acme. +The only +difficult sections of the 1200 +lines of code concern honoring the external protocols for managing +the mailbox and connecting to +.CW sendmail . +.PP +One of the things Acme does not provide directly is a facility like +Sam's command language to enable actions such as global substitution; +within Acme, all editing is done manually. +It is easy, though, to write external programs for such tasks. +In this, Acme comes closer to the original intent of Oberon: +a directory, +.CW /acme/edit , +contains a set of tools for repetitive editing and a template +or `guide' file that gives examples +of its use. +Acme's editing guide, +.CW /acme/edit/guide , +looks like this: +.P1 +e file | x '/regexp/' | c 'replacement' +e file:'0,$' | x '/.*word.*\en/' | p -n +e file | pipe command args ... +.P2 +The syntax is reminiscent of Sam's command language, but here the individual +one-letter commands are all stand-alone programs connected by pipes. +Passed along the pipes are addresses, analogous to structural expressions +in Sam terminology. +The +.CW e +command, unlike that of Sam, starts the process by generating the address +(default dot, the highlighted selection) in the named files. +The other commands are as in Sam: +.CW p +prints the addressed text on standard output (the +.CW -n +option is analogous to that of +.CW grep , +useful in combination with the right mouse button); +.CW x +matches a regular expression to the addressed (incoming) text, +subdividing the text; +.CW c +replaces the text; and so on. Thus, global substitution throughout a file, +which would be expressed in Sam as +.P1 +0,$ x/regexp/ c/replacement/ +.P2 +in Acme's editor becomes +.P1 +e 'file:0,$' | x '/regexp/' | c 'replacement' +.P2 +.PP +To use the Acme editing commands, open +.CW /acme/edit/guide , +use the mouse and keyboard to edit one of the commands to the right form, +and execute it with the middle button. +Acme's context rules find the appropriate binaries in +.CW /acme/edit +rather than +.CW /bin ; +the effect is to turn +.CW /acme/edit +into a toolbox containing tools and instructions (the guide file) for their use. +In fact, the source for these tools is also there, in the directory +.CW /acme/edit/src . +This setup allows some control of the file name space for binary programs; +not only does it group related programs, it permits the use of common +names for uncommon jobs. For example, the single-letter names would +be unwise in a directory in everyone's search path; here they are only +visible when running editing commands. +.PP +In Oberon, +such a collection would be called a +.I tool +and would consist +of a set of entry points in a module and a menu-like piece of text containing +representative commands that may be edited to suit and executed. +There is, in fact, a tool called +.CW Edit +in Oberon. +To provide related functionality, +Acme exploits the directory and file structure of the underlying +system, rather than the module structure of the language; +this fits well with Plan 9's +file-oriented philosophy. +Such tools are central to the working of Oberon but they are +less used in Acme, at least so far. +The main reason is probably that Acme's program interface permits +an external program to remain executing in the background, providing +its own commands as needed (for example, the +.CW Reply +command in the mail program); Oberon uses tools to +implement such services because its must invoke +a fresh program for each command. +Also, +Acme's better integration allows more +basic functions to be handled internally; the right mouse button +covers a lot of the basic utility of the editing tools in Oberon. +Nonetheless, as more applications are written for Acme, +many are sure to take this Oberon tool-like form. +.SH +Comparison with other systems +.PP +Acme's immediate ancestor is Help [Pike92], an experimental system written +a few years ago as a first try at exploring some of Oberon's ideas +in an existing operating system. +Besides much better engineering, Acme's advances over Help +include the actions of the right button (Help had nothing comparable), +the ability to connect long-running programs to the user interface +(Help had no analog of the +.CW event +file), +and the small but important change to split command output into +windows labeled with the directory in which the commands run. +.PP +Most of Acme's style, however, derives from the user interface and window +system of Oberon [Wirt89, Reis91]. +Oberon includes a programming language and operating system, +which Acme instead borrows from an existing system, Plan 9. +When I first saw Oberon, in 1988, I was struck by the +simplicity of its user interface, particularly its lack of menus +and its elegant use of multiple mouse buttons. +The system seemed restrictive, though\(emsingle process, +single language, no networking, event-driven programming\(emand +failed to follow through on some of its own ideas. +For example, the middle mouse button had to be pointed accurately and +the right button was essentially unused. +Acme does follow through: +to the basic idea planted by Oberon, it adds +the ability to run on different operating systems and hardware, +connection to existing applications including +interactive ones such as shells and debuggers, +support for multiple processes, +the right mouse button's features, +the default actions and context-dependent properties +of execution and searching, +and a host of little touches such as moving the mouse cursor that make the system +more pleasant. +At the moment, though, Oberon does have one distinct advantage: it incorporates +graphical programs well into its model, an issue Acme has not yet faced. +.PP +Acme shares with the Macintosh a desire to use the mouse well and it is +worth comparing the results. +The mouse on the Macintosh has a single button, so menus are essential +and the mouse must frequently move a long way +to reach the appropriate function. +An indication that this style has trouble is that applications provide +keyboard sequences to invoke menu selections and users often prefer them. +A deeper comparison is that the Macintosh uses pictures where Acme uses text. +In contrast to pictures, text can be edited quickly, created on demand, +and fine-tuned to the job at hand; consider adding an option to a command. +It is also self-referential; Acme doesn't need menus because any text can be +in effect a menu item. +The result is that, although a Macintosh screen is certainly prettier and probably +more attractive, especially to beginners, an Acme screen is more dynamic +and expressive, at least for programmers and experienced users. +.PP +For its role in the overall system, +Acme most resembles EMACS [Stal93]. +It is tricky to compare Acme to EMACS, though, because there are +many versions of EMACS and, since it is fully programmable, EMACS +can in principle do anything Acme does. +Also, Acme is much younger and therefore has not +had the time to acquire as many features. +The issue therefore is less what the systems can be programmed to do than +how they are used. +The EMACS versions that come closest to Acme's style are those that +have been extended to provide a programming environment, usually +for a language such as LISP [Alle92, Lucid92]. +For richness of the existing interface, these EMACS versions are certainly superior to Acme. +On the other hand, Acme's interface works equally well already for a variety +of languages; for example, one of its most enthusiastic users works almost +exclusively in Standard ML, a language nothing like C. +.PP +Where Acme excels is in the smoothness of its interface. +Until recently, EMACS did not support the mouse especially well, +and even with the latest version providing features such as `extents' +that can be programmed to behave much like Acme commands, +many users don't bother to upgrade. +Moreover, in the versions that provide extents, +most EMACS packages don't take advantage of them. +.PP +The most important distinction is just that +EMACS is fundamentally keyboard-based, while +Acme is mouse-based. +.PP +People who try Acme find it hard to go back to their previous environment. +Acme automates so much that to return to a traditional interface +is to draw attention to the extra work it requires. +.SH +Concurrency in the implementation +.PP +Acme is about 8,000 lines of code in Alef, a concurrent object-oriented language syntactically similar to C [Alef]. +Acme's structure is a set of communicating +processes in a single address space. +One subset of the processes drives the display and user interface, +maintaining the windows; other processes forward mouse and keyboard +activity and implement the file server interface for external programs. +The language and design worked out well; +as explained elsewhere [Pike89, Gans93, Reppy93], +user interfaces built with concurrent systems +can avoid the clumsy +top-level event loop typical of traditional interactive systems. +.PP +An example of the benefits of the multi-process style +is the management of the state of open +files held by clients of the file system interface. +The problem is that some I/O requests, +such as reading the +.CW event +file, may block if no data is available, and the server must +maintain the state of (possibly many) requests until data appears. +For example, +in +.CW 8½ , +a single-process window system written in C, pending requests were queued in +a data structure associated with each window. +After activity in the window that might complete pending I/O, +the data structure was scanned for requests that could now finish. +This structure did not fit well with the rest of the program and, worse, +required meticulous effort +to guarantee correct behavior under all conditions +(consider raw mode, reads of partial lines, deleting a window, +multibyte characters, etc.). +.PP +Acme instead creates a new dedicated process +for each I/O request. +This process coordinates with the rest of the system +using Alef's synchronous communication; +its state implicitly encodes the state of +the I/O request and obviates the need for queuing. +The passage of the request through Acme proceeds as follows. +.PP +Acme contains a file server process, F, that executes a +.CW read +system call to receive a Plan 9 file protocol (9P) message from the client [AT&T92]. +The client blocks until Acme answers the request. +F communicates with an allocation process, M, +to acquire an object of type +.CW Xfid +(`executing fid'; fid is a 9P term) +to hold the request. +M sits in a loop (reproduced in Figure 2) waiting for either a request for +a new +.CW Xfid +or notification that an existing one has finished its task. +When an +.CW Xfid +is created, an associated process, X, +is also made. +M queues idle +.CW Xfids , +allocating new ones only when the list is empty. +Thus, there is always a pool of +.CW Xfids , +some executing, some idle. +.PP +The +.CW Xfid +object contains a channel, +.CW Xfid.c , +for communication with its process; +the unpacked message; and some associated functions, +mostly corresponding to 9P messages such as +.CW Xfid.write +to handle a 9P write request. +.PP +The file server process F parses the message to see its nature\(emopen, +close, read, write, etc. Many messages, such as directory +lookups, can be handled immediately; these are responded to directly +and efficiently +by F without invoking the +.CW Xfid , +which is therefore maintained until the next message. +When a message, such as a write to the display, requires the attention +of the main display process and interlocked access to its data structures, +F enables X +by sending a function pointer on +.CW Xfid.c . +For example, if the message is a write, F executes +.P1 +x->c <-= Xfid.write; +.P2 +which sends +the address of +.CW Xfid.write +on +.CW Xfid.c , +waking up X. +.PP +The +.CW Xfid +process, X, executes a simple loop: +.P1 +void +Xfid.ctl(Xfid *x) +{ + for(;;){ + (*<-x->c)(x); /* receive and execute message */ + bflush(); /* synchronize bitmap display */ + cxfidfree <-= x; /* return to free list */ + } +} +.P2 +Thus X +will wake up with the address of a function to call (here +.CW Xfid.write ) +and execute it; once that completes, it returns itself to the pool of +free processes by sending its address back to the allocator. +.PP +Although this sequence may seem complicated, it is just a few lines +of code and is in fact far simpler +than the management of the I/O queues in +.CW 8½ . +The hard work of synchronization is done by the Alef run time system. +Moreover, the code worked the first time, which cannot be said for the code in +.CW 8½ . +.SH +Undo +.PP +Acme provides a general undo facility like that of Sam, permitting +textual changes to be unwound arbitrarily. +The implementation is superior to Sam's, though, +with much higher performance and the ability to `redo' changes. +.PP +Sam uses +a multi-pass algorithm that builds +a transcript of changes to be made simultaneously +and then executes them atomically. +This was thought necessary because the elements of a repetitive +command such as a global substitution should all be applied to the same +initial file and implemented simultaneously; forming the complete +transcript before executing any of the changes avoids the +cumbersome management of addresses in a changing file. +Acme, however, doesn't have this problem; global substitution +is controlled externally and may be made incrementally by exploiting +an observation: if the changes are sorted in address order and +executed in reverse, changes will not invalidate the addresses of +pending changes. +.PP +Acme therefore avoids the initial transcript. Instead, changes are applied +directly to the file, with an undo transcript recorded in a separate list. +For example, when text is added to a window, it is added directly and a record +of what to delete to restore the state is appended to the undo list. +Each undo action and the file are marked with a sequence number; +actions with the same sequence number are considered a unit +to be undone together. +The invariant state of the structure +is that the last action in the undo list applies to the current state of the file, +even if that action is one of a related set from, for example, a global substitute. +(In Sam, a related set of actions needed to be undone simultaneously.) +To undo an action, pop the last item on the undo list, apply it to the file, +revert it, and append it to a second, redo list. +To redo an action, do the identical operation with the lists interchanged. +The expensive operations occur +only when actually undoing; in normal editing the overhead is minor. +For example, Acme reads files about seven times faster than Sam, partly +because of this improvement and partly because of a cleaner implementation. +.PP +Acme uses a temporary file to hold the text, keeping in memory only the +visible portion, and therefore can edit large files comfortably +even on small-memory machines such as laptops. +.SH +Future +.PP +Acme is still under development. +Some things are simply missing. +For example, Acme should support non-textual graphics, but this is being +deferred until it can be done using a new graphics model being developed +for Plan 9. Also, it is undecided how Acme's style of interaction should best be +extended to graphical applications. +On a smaller scale, although the system feels smooth and comfortable, +work continues to tune the heuristics and +try new ideas for the user interface. +.PP +There need to be more programs that use Acme. Browsers for +Usenet and AP News articles, the Oxford English Dictionary, and other +such text sources exist, but more imaginative applications will +be necessary to prove that Acme's approach is viable. +One that has recently been started is an interface to the debugger Acid [Wint94], +although it is still +unclear what form it will ultimately take. +.PP +Acme shows that it is possible to make a user interface a stand-alone component +of an interactive environment. By absorbing more of the interactive +functionality than a simple window system, Acme off-loads much of the +computation from its applications, which helps keep them small and +consistent in their interface. Acme can afford to dedicate +considerable effort to making that interface as good as possible; the result +will benefit the entire system. +.PP +Acme is complete and useful enough to attract users. +Its comfortable user interface, +the ease with which it handles multiple tasks and +programs in multiple directories, +and its high level of integration +make it addictive. +Perhaps most telling, +Acme shows that typescripts may not be the most +productive interface to a time-sharing system. +.SH +Acknowledgements +.PP +Howard Trickey, Acme's first user, suffered buggy versions gracefully and made +many helpful suggestions. Chris Fraser provided the necessary insight for the Acme editing +commands. +.SH +References +.LP +[Alef] P. Winterbottom, +``Alef Language Reference Manual'', +.I +Plan 9 Programmer's Manual, +.R +AT&T Bell Laboratories, +Murray Hill, NJ, +1992; +revised in this volume. +.br +[Alle92] +.I +Allegro Common Lisp user Guide, Vol 2, +.R +Chapter 14, "The Emacs-Lisp Interface". +March 1992. +.br +[AT&T92] Plan 9 Programmer's manual, Murray Hill, New Jersey, 1992. +.br +[Far89] Far too many people, XTERM(1), Massachusetts Institute of Technology, 1989. +.br +[Gans93] Emden R. Gansner and John H. Reppy, ``A Multi-threaded Higher-order User Interface Toolkit'', in +.I +Software Trends, Volume 1, +User Interface Software, +.R +Bass and Dewan (Eds.), +John Wiley & Sons 1993, +pp. 61-80. +.br +[Lucid92] Richard Stallman and Lucid, Inc., +.I +Lucid GNU EMACS Manual, +.R +March 1992. +.br +[Pike87] Rob Pike, ``The Text Editor \f(CWsam\fP'', Softw. - Pract. and Exp., Nov 1987, Vol 17 #11, pp. 813-845; reprinted in this volume. +.br +[Pike88] Rob Pike, ``Window Systems Should Be Transparent'', Comp. Sys., Summer 1988, Vol 1 #3, pp. 279-296. +.br +[Pike89] Rob Pike, ``A Concurrent Window System'', Comp. Sys., Spring 1989, Vol 2 #2, pp. 133-153. +.br +[PPTTW93] Rob Pike, Dave Presotto, Ken Thompson, Howard Trickey, and Phil Winterbottom, ``The Use of Name Spaces in Plan 9'', +Op. Sys. Rev., Vol. 27, No. 2, April 1993, pp. 72-76, +reprinted in this volume. +.br +[Pike91] Rob Pike, ``8½, the Plan 9 Window System'', USENIX Summer Conf. Proc., Nashville, June, 1991, pp. 257-265, +reprinted in this volume. +.br +[Pike92] Rob Pike, ``A Minimalist Global User Interface'', Graphics Interface '92 Proc., Vancouver, 1992, pp. 282-293. An earlier version appeared under the same title in USENIX Summer Conf. Proc., Nashville, June, 1991, pp. 267-279. +.br +[Pike93] Rob Pike and Ken Thompson, ``Hello World or Καλημέρα κόσμε or +\f(Jpこんにちは 世界\fP'', USENIX Winter Conf. Proc., San Diego, 1993, pp. 43-50, +reprinted in this volume. +.br +[Pres93] Dave Presotto and Phil Winterbottom, ``The Organization of Networks in Plan 9'', Proc. Usenix Winter 1993, pp. 271-287, San Diego, CA, +reprinted in this volume. +.br +[Reis91] Martin Reiser, \fIThe Oberon System,\fP Addison Wesley, New York, 1991. +.br +[Reppy93] John H. Reppy, +``CML: A higher-order concurrent language'', Proc. SIGPLAN'91 Conf. on Programming, Lang. Design and Impl., June, 1991, pp. 293-305. +.br +[Sche86] Robert W. Scheifler and Jim Gettys, +``The X Window System'', +ACM Trans. on Graph., Vol 5 #2, pp. 79-109. +.br +[Stal93] Richard Stallman, +.I +Gnu Emacs Manual, 9th edition, Emacs version 19.19, +.R +MIT. +.br +[Swei86] Daniel Sweinhart, Polle Zellweger, Richard Beach, and Robert Hagmann, +``A Structural View of the Cedar Programming Environment'', +ACM Trans. Prog. Lang. and Sys., Vol. 8, No. 4, pp. 419-490, Oct. 1986. +.br +[Wint94], Philip Winterbottom, ``Acid: A Debugger based on a Language'', USENIX Winter Conf. Proc., San Francisco, CA, 1993, +reprinted in this volume. +.br +[Wirt89] N. Wirth and J. Gutknecht, ``The Oberon System'', Softw. - Prac. and Exp., Sep 1989, Vol 19 #9, pp 857-894. diff --git a/doc/acme/acme.pdf b/doc/acme/acme.pdf Binary files differnew file mode 100644 index 00000000..0118e1f5 --- /dev/null +++ b/doc/acme/acme.pdf diff --git a/doc/asm.ms b/doc/asm.ms new file mode 100644 index 00000000..26f3b850 --- /dev/null +++ b/doc/asm.ms @@ -0,0 +1,1394 @@ +.ft CW +.ta 8n +8n +8n +8n +8n +8n +8n +.ft +.TL +A Manual for the Plan 9 assembler +.AU +.I "Rob Pike" +.AI +rob@plan9.bell-labs.com +.SH +Machines +.PP +There is an assembler for each of the MIPS, SPARC, Intel 386, +Motorola 68020 and 68000, IBM Power PC, DEC Alpha, and ARM. +The 68020 assembler, +.CW 2a , +is the oldest and in many ways the prototype. +The assemblers are really just variations of a single program: +they share many properties such as left-to-right assignment order for +instruction operands and the synthesis of macro instructions +such as +.CW MOVE +to hide the peculiarities of the load and store structure of the machines. +To keep things concrete, the first part of this manual is +specifically about the 68020. +At the end is a description of the differences among +the other assemblers. +.ig +.PP +The document, ``How to Use the Plan 9 C Compiler'', by Rob Pike, +is a prerequisite for this manual. +.. +.SH +Registers +.PP +All pre-defined symbols in the assembler are upper-case. +Data registers are +.CW R0 +through +.CW R7 ; +address registers are +.CW A0 +through +.CW A7 ; +floating-point registers are +.CW F0 +through +.CW F7 . +.PP +A pointer in +.CW A6 +is used by the C compiler to point to data, enabling short addresses to +be used more often. +The value of +.CW A6 +is constant and must be set during C program initialization +to the address of the externally-defined symbol +.CW a6base . +.PP +The following hardware registers are defined in the assembler; their +meaning should be obvious given a 68020 manual: +.CW CAAR , +.CW CACR , +.CW CCR , +.CW DFC , +.CW ISP , +.CW MSP , +.CW SFC , +.CW SR , +.CW USP , +and +.CW VBR . +.PP +The assembler also defines several pseudo-registers that +manipulate the stack: +.CW FP , +.CW SP , +and +.CW TOS . +.CW FP +is the frame pointer, so +.CW 0(FP) +is the first argument, +.CW 4(FP) +is the second, and so on. +.CW SP +is the local stack pointer, where automatic variables are held +(SP is a pseudo-register only on the 68020); +.CW 0(SP) +is the first automatic, and so on as with +.CW FP . +Finally, +.CW TOS +is the top-of-stack register, used for pushing parameters to procedures, +saving temporary values, and so on. +.PP +The assembler and loader track these pseudo-registers so +the above statements are true regardless of what has been +pushed on the hardware stack, pointed to by +.CW A7 . +The name +.CW A7 +refers to the hardware stack pointer, but beware of mixed use of +.CW A7 +and the above stack-related pseudo-registers, which will cause trouble. +Note, too, that the +.CW PEA +instruction is observed by the loader to +alter SP and thus will insert a corresponding pop before all returns. +The assembler accepts a label-like name to be attached to +.CW FP +and +.CW SP +uses, such as +.CW p+0(FP) , +to help document that +.CW p +is the first argument to a routine. +The name goes in the symbol table but has no significance to the result +of the program. +.SH +Referring to data +.PP +All external references must be made relative to some pseudo-register, +either +.CW PC +(the virtual program counter) or +.CW SB +(the ``static base'' register). +.CW PC +counts instructions, not bytes of data. +For example, to branch to the second following instruction, that is, +to skip one instruction, one may write +.P1 + BRA 2(PC) +.P2 +Labels are also allowed, as in +.P1 + BRA return + NOP +return: + RTS +.P2 +When using labels, there is no +.CW (PC) +annotation. +.PP +The pseudo-register +.CW SB +refers to the beginning of the address space of the program. +Thus, references to global data and procedures are written as +offsets to +.CW SB , +as in +.P1 + MOVL $array(SB), TOS +.P2 +to push the address of a global array on the stack, or +.P1 + MOVL array+4(SB), TOS +.P2 +to push the second (4-byte) element of the array. +Note the use of an offset; the complete list of addressing modes is given below. +Similarly, subroutine calls must use +.CW SB : +.P1 + BSR exit(SB) +.P2 +File-static variables have syntax +.P1 + local<>+4(SB) +.P2 +The +.CW <> +will be filled in at load time by a unique integer. +.PP +When a program starts, it must execute +.P1 + MOVL $a6base(SB), A6 +.P2 +before accessing any global data. +(On machines such as the MIPS and SPARC that cannot load a register +in a single instruction, constants are loaded through the static base +register. The loader recognizes code that initializes the static +base register and treats it specially. You must be careful, however, +not to load large constants on such machines when the static base +register is not set up, such as early in interrupt routines.) +.SH +Expressions +.PP +Expressions are mostly what one might expect. +Where an offset or a constant is expected, +a primary expression with unary operators is allowed. +A general C constant expression is allowed in parentheses. +.PP +Source files are preprocessed exactly as in the C compiler, so +.CW #define +and +.CW #include +work. +.SH +Addressing modes +.PP +The simple addressing modes are shared by all the assemblers. +Here, for completeness, follows a table of all the 68020 addressing modes, +since that machine has the richest set. +In the table, +.CW o +is an offset, which if zero may be elided, and +.CW d +is a displacement, which is a constant between -128 and 127 inclusive. +Many of the modes listed have the same name; +scrutiny of the format will show what default is being applied. +For instance, indexed mode with no address register supplied operates +as though a zero-valued register were used. +For "offset" read "displacement." +For "\f(CW.s\fP" read one of +.CW .L , +or +.CW .W +followed by +.CW *1 , +.CW *2 , +.CW *4 , +or +.CW *8 +to indicate the size and scaling of the data. +.IP +.TS +l lfCW. +data register R0 +address register A0 +floating-point register F0 +special names CAAR, CACR, etc. +constant $con +floating point constant $fcon +external symbol name+o(SB) +local symbol name<>+o(SB) +automatic symbol name+o(SP) +argument name+o(FP) +address of external $name+o(SB) +address of local $name<>+o(SB) +indirect post-increment (A0)+ +indirect pre-decrement -(A0) +indirect with offset o(A0) +indexed with offset o()(R0.s) +indexed with offset o(A0)(R0.s) +external indexed name+o(SB)(R0.s) +local indexed name<>+o(SB)(R0.s) +automatic indexed name+o(SP)(R0.s) +parameter indexed name+o(FP)(R0.s) +offset indirect post-indexed d(o())(R0.s) +offset indirect post-indexed d(o(A0))(R0.s) +external indirect post-indexed d(name+o(SB))(R0.s) +local indirect post-indexed d(name<>+o(SB))(R0.s) +automatic indirect post-indexed d(name+o(SP))(R0.s) +parameter indirect post-indexed d(name+o(FP))(R0.s) +offset indirect pre-indexed d(o()(R0.s)) +offset indirect pre-indexed d(o(A0)) +offset indirect pre-indexed d(o(A0)(R0.s)) +external indirect pre-indexed d(name+o(SB)) +external indirect pre-indexed d(name+o(SB)(R0.s)) +local indirect pre-indexed d(name<>+o(SB)) +local indirect pre-indexed d(name<>+o(SB)(R0.s)) +automatic indirect pre-indexed d(name+o(SP)) +automatic indirect pre-indexed d(name+o(SP)(R0.s)) +parameter indirect pre-indexed d(name+o(FP)) +parameter indirect pre-indexed d(name+o(FP)(R0.s)) +.TE +.in +.SH +Laying down data +.PP +Placing data in the instruction stream, say for interrupt vectors, is easy: +the pseudo-instructions +.CW LONG +and +.CW WORD +(but not +.CW BYTE ) +lay down the value of their single argument, of the appropriate size, +as if it were an instruction: +.P1 + LONG $12345 +.P2 +places the long 12345 (base 10) +in the instruction stream. +(On most machines, +the only such operator is +.CW WORD +and it lays down 32-bit quantities. +The 386 has all three: +.CW LONG , +.CW WORD , +and +.CW BYTE . +The AMD64 adds +.CW QUAD +for 64-bit values.) +.PP +Placing information in the data section is more painful. +The pseudo-instruction +.CW DATA +does the work, given two arguments: an address at which to place the item, +including its size, +and the value to place there. For example, to define a character array +.CW array +containing the characters +.CW abc +and a terminating null: +.P1 + DATA array+0(SB)/1, $'a' + DATA array+1(SB)/1, $'b' + DATA array+2(SB)/1, $'c' + GLOBL array(SB), $4 +.P2 +or +.P1 + DATA array+0(SB)/4, $"abc\ez" + GLOBL array(SB), $4 +.P2 +The +.CW /1 +defines the number of bytes to define, +.CW GLOBL +makes the symbol global, and the +.CW $4 +says how many bytes the symbol occupies. +Uninitialized data is zeroed automatically. +The character +.CW \ez +is equivalent to the C +.CW \e0. +The string in a +.CW DATA +statement may contain a maximum of eight bytes; +build larger strings piecewise. +Two pseudo-instructions, +.CW DYNT +and +.CW INIT , +allow the (obsolete) Alef compilers to build dynamic type information during the load +phase. +The +.CW DYNT +pseudo-instruction has two forms: +.P1 + DYNT , ALEF_SI_5+0(SB) + DYNT ALEF_AS+0(SB), ALEF_SI_5+0(SB) +.P2 +In the first form, +.CW DYNT +defines the symbol to be a small unique integer constant, chosen by the loader, +which is some multiple of the word size. In the second form, +.CW DYNT +defines the second symbol in the same way, +places the address of the most recently +defined text symbol in the array specified by the first symbol at the +index defined by the value of the second symbol, +and then adjusts the size of the array accordingly. +.PP +The +.CW INIT +pseudo-instruction takes the same parameters as a +.CW DATA +statement. Its symbol is used as the base of an array and the +data item is installed in the array at the offset specified by the most recent +.CW DYNT +pseudo-instruction. +The size of the array is adjusted accordingly. +The +.CW DYNT +and +.CW INIT +pseudo-instructions are not implemented on the 68020. +.SH +Defining a procedure +.PP +Entry points are defined by the pseudo-operation +.CW TEXT , +which takes as arguments the name of the procedure (including the ubiquitous +.CW (SB) ) +and the number of bytes of automatic storage to pre-allocate on the stack, +which will usually be zero when writing assembly language programs. +On machines with a link register, such as the MIPS and SPARC, +the special value -4 instructs the loader to generate no PC save +and restore instructions, even if the function is not a leaf. +Here is a complete procedure that returns the sum +of its two arguments: +.P1 +TEXT sum(SB), $0 + MOVL arg1+0(FP), R0 + ADDL arg2+4(FP), R0 + RTS +.P2 +An optional middle argument +to the +.CW TEXT +pseudo-op is a bit field of options to the loader. +Setting the 1 bit suspends profiling the function when profiling is enabled for the rest of +the program. +For example, +.P1 +TEXT sum(SB), 1, $0 + MOVL arg1+0(FP), R0 + ADDL arg2+4(FP), R0 + RTS +.P2 +will not be profiled; the first version above would be. +Subroutines with peculiar state, such as system call routines, +should not be profiled. +.PP +Setting the 2 bit allows multiple definitions of the same +.CW TEXT +symbol in a program; the loader will place only one such function in the image. +It was emitted only by the Alef compilers. +.PP +Subroutines to be called from C should place their result in +.CW R0 , +even if it is an address. +Floating point values are returned in +.CW F0 . +Functions that return a structure to a C program +receive as their first argument the address of the location to +store the result; +.CW R0 +is unused in the calling protocol for such procedures. +A subroutine is responsible for saving its own registers, +and therefore is free to use any registers without saving them (``caller saves''). +.CW A6 +and +.CW A7 +are the exceptions as described above. +.SH +When in doubt +.PP +If you get confused, try using the +.CW -S +option to +.CW 2c +and compiling a sample program. +The standard output is valid input to the assembler. +.SH +Instructions +.PP +The instruction set of the assembler is not identical to that +of the machine. +It is chosen to match what the compiler generates, augmented +slightly by specific needs of the operating system. +For example, +.CW 2a +does not distinguish between the various forms of +.CW MOVE +instruction: move quick, move address, etc. Instead the context +does the job. For example, +.P1 + MOVL $1, R1 + MOVL A0, R2 + MOVW SR, R3 +.P2 +generates official +.CW MOVEQ , +.CW MOVEA , +and +.CW MOVESR +instructions. +A number of instructions do not have the syntax necessary to specify +their entire capabilities. Notable examples are the bitfield +instructions, the +multiply and divide instructions, etc. +For a complete set of generated instruction names (in +.CW 2a +notation, not Motorola's) see the file +.CW /sys/src/cmd/2c/2.out.h . +Despite its name, this file contains an enumeration of the +instructions that appear in the intermediate files generated +by the compiler, which correspond exactly to lines of assembly language. +.PP +The MC68000 assembler, +.CW 1a , +is essentially the same, honoring the appropriate subset of the instructions +and addressing modes. +The definitions of these are, nonetheless, part of +.CW 2.out.h . +.SH +Laying down instructions +.PP +The loader modifies the code produced by the assembler and compiler. +It folds branches, +copies short sequences of code to eliminate branches, +and discards unreachable code. +The first instruction of every function is assumed to be reachable. +The pseudo-instruction +.CW NOP , +which you may see in compiler output, +means no instruction at all, rather than an instruction that does nothing. +The loader discards all +.CW NOP 's. +.PP +To generate a true +.CW NOP +instruction, or any other instruction not known to the assembler, use a +.CW WORD +pseudo-instruction. +Such instructions on RISCs are not scheduled by the loader and must have +their delay slots filled manually. +.SH +MIPS +.PP +The registers are only addressed by number: +.CW R0 +through +.CW R31 . +.CW R29 +is the stack pointer; +.CW R30 +is used as the static base pointer, the analogue of +.CW A6 +on the 68020. +Its value is the address of the global symbol +.CW setR30(SB) . +The register holding returned values from subroutines is +.CW R1 . +When a function is called, space for the first argument +is reserved at +.CW 0(FP) +but in C (not Alef) the value is passed in +.CW R1 +instead. +.PP +The loader uses +.CW R28 +as a temporary. The system uses +.CW R26 +and +.CW R27 +as interrupt-time temporaries. Therefore none of these registers +should be used in user code. +.PP +The control registers are not known to the assembler. +Instead they are numbered registers +.CW M0 , +.CW M1 , +etc. +Use this trick to access, say, +.CW STATUS : +.P1 +#define STATUS 12 + MOVW M(STATUS), R1 +.P2 +.PP +Floating point registers are called +.CW F0 +through +.CW F31 . +By convention, +.CW F24 +must be initialized to the value 0.0, +.CW F26 +to 0.5, +.CW F28 +to 1.0, and +.CW F30 +to 2.0; +this is done by the operating system. +.PP +The instructions and their syntax are different from those of the manufacturer's +manual. +There are no +.CW lui +and kin; instead there are +.CW MOVW +(move word), +.CW MOVH +(move halfword), +and +.CW MOVB +(move byte) pseudo-instructions. If the operand is unsigned, the instructions +are +.CW MOVHU +and +.CW MOVBU . +The order of operands is from left to right in dataflow order, just as +on the 68020 but not as in MIPS documentation. +This means that the +.CW Bcond +instructions are reversed with respect to the book; for example, a +.CW va +.CW BGTZ +generates a MIPS +.CW bltz +instruction. +.PP +The assembler is for the R2000, R3000, and most of the R4000 and R6000 architectures. +It understands the 64-bit instructions +.CW MOVV , +.CW MOVVL , +.CW ADDV , +.CW ADDVU , +.CW SUBV , +.CW SUBVU , +.CW MULV , +.CW MULVU , +.CW DIVV , +.CW DIVVU , +.CW SLLV , +.CW SRLV , +and +.CW SRAV . +The assembler does not have any cache, load-linked, or store-conditional instructions. +.PP +Some assembler instructions are expanded into multiple instructions by the loader. +For example the loader may convert the load of a 32 bit constant into an +.CW lui +followed by an +.CW ori . +.PP +Assembler instructions should be laid out as if there +were no load, branch, or floating point compare delay slots; +the loader will rearrange\(em\f2schedule\f1\(emthe instructions +to guarantee correctness and improve performance. +The only exception is that the correct scheduling of instructions +that use control registers varies from model to model of machine +(and is often undocumented) so you should schedule such instructions +by hand to guarantee correct behavior. +The loader generates +.P1 + NOR R0, R0, R0 +.P2 +when it needs a true no-op instruction. +Use exactly this instruction when scheduling code manually; +the loader recognizes it and schedules the code before it and after it independently. Also, +.CW WORD +pseudo-ops are scheduled like no-ops. +.PP +The +.CW NOSCHED +pseudo-op disables instruction scheduling +(scheduling is enabled by default); +.CW SCHED +re-enables it. +Branch folding, code copying, and dead code elimination are +disabled for instructions that are not scheduled. +.SH +SPARC +.PP +Once you understand the Plan 9 model for the MIPS, the SPARC is familiar. +Registers have numerical names only: +.CW R0 +through +.CW R31 . +Forget about register windows: Plan 9 doesn't use them at all. +The machine has 32 global registers, period. +.CW R1 +[sic] is the stack pointer. +.CW R2 +is the static base register, with value the address of +.CW setSB(SB) . +.CW R7 +is the return register and also the register holding the first +argument to a C (not Alef) function, again with space reserved at +.CW 0(FP) . +.CW R14 +is the loader temporary. +.PP +Floating-point registers are exactly as on the MIPS. +.PP +The control registers are known by names such as +.CW FSR . +The instructions to access these registers are +.CW MOVW +instructions, for example +.P1 + MOVW Y, R8 +.P2 +for the SPARC instruction +.P1 + rdy %r8 +.P2 +.PP +Move instructions are similar to those on the MIPS: pseudo-operations +that turn into appropriate sequences of +.CW sethi +instructions, adds, etc. +Instructions read from left to right. Because the arguments are +flipped to +.CW SUBCC , +the condition codes are not inverted as on the MIPS. +.PP +The syntax for the ASI stuff is, for example to move a word from ASI 2: +.P1 + MOVW (R7, 2), R8 +.P2 +The syntax for double indexing is +.P1 + MOVW (R7+R8), R9 +.P2 +.PP +The SPARC's instruction scheduling is similar to the MIPS's. +The official no-op instruction is: +.P1 + ORN R0, R0, R0 +.P2 +.SH +i386 +.PP +The assembler assumes 32-bit protected mode. +The register names are +.CW SP , +.CW AX , +.CW BX , +.CW CX , +.CW DX , +.CW BP , +.CW DI , +and +.CW SI . +The stack pointer (not a pseudo-register) is +.CW SP +and the return register is +.CW AX . +There is no physical frame pointer but, as for the MIPS, +.CW FP +is a pseudo-register that acts as +a frame pointer. +.PP +Opcode names are mostly the same as those listed in the Intel manual +with an +.CW L , +.CW W , +or +.CW B +appended to identify 32-bit, +16-bit, and 8-bit operations. +The exceptions are loads, stores, and conditionals. +All load and store opcodes to and from general registers, special registers +(such as +.CW CR0, +.CW CR3, +.CW GDTR, +.CW IDTR, +.CW SS, +.CW CS, +.CW DS, +.CW ES, +.CW FS, +and +.CW GS ) +or memory are written +as +.P1 + MOV\f2x\fP src,dst +.P2 +where +.I x +is +.CW L , +.CW W , +or +.CW B . +Thus to get +.CW AL +use a +.CW MOVB +instruction. If you need to access +.CW AH , +you must mention it explicitly in a +.CW MOVB : +.P1 + MOVB AH, BX +.P2 +There are many examples of illegal moves, for example, +.P1 + MOVB BP, DI +.P2 +that the loader actually implements as pseudo-operations. +.PP +The names of conditions in all conditional instructions +.CW J , ( +.CW SET ) +follow the conventions of the 68020 instead of those of the Intel +assembler: +.CW JOS , +.CW JOC , +.CW JCS , +.CW JCC , +.CW JEQ , +.CW JNE , +.CW JLS , +.CW JHI , +.CW JMI , +.CW JPL , +.CW JPS , +.CW JPC , +.CW JLT , +.CW JGE , +.CW JLE , +and +.CW JGT +instead of +.CW JO , +.CW JNO , +.CW JB , +.CW JNB , +.CW JZ , +.CW JNZ , +.CW JBE , +.CW JNBE , +.CW JS , +.CW JNS , +.CW JP , +.CW JNP , +.CW JL , +.CW JNL , +.CW JLE , +and +.CW JNLE . +.PP +The addressing modes have syntax like +.CW AX , +.CW (AX) , +.CW (AX)(BX*4) , +.CW 10(AX) , +and +.CW 10(AX)(BX*4) . +The offsets from +.CW AX +can be replaced by offsets from +.CW FP +or +.CW SB +to access names, for example +.CW extern+5(SB)(AX*2) . +.PP +Other notes: Non-relative +.CW JMP +and +.CW CALL +have a +.CW * +added to the syntax. +Only +.CW LOOP , +.CW LOOPEQ , +and +.CW LOOPNE +are legal loop instructions. Only +.CW REP +and +.CW REPN +are recognized repeaters. These are not prefixes, but rather +stand-alone opcodes that precede the strings, for example +.P1 + CLD; REP; MOVSL +.P2 +Segment override prefixes in +.CW MOD/RM +fields are not supported. +.SH +AMD64 +.PP +The assembler's conventions are similar to those for the 386, above. +The architecture provides extra fixed-point registers +.CW R8 +to +.CW R15 . +All registers are 64 bit, but instructions access low-order 8, 16 and 32 bits +as described in the processor handbook. +For example, +.CW MOVL +to +.CW AX +puts a value in the low-order 32 bits and clears the top 32 bits to zero. +Literal operands are limited to signed 32 bit values, which are sign-extended +to 64 bits in 64 bit operations; the exception is +.CW MOVQ , +which allows 64-bit literals. +MMX registers are +.CW M0 +to +.CW M7 , +and +XMM registers are +.CW X0 +to +.CW X15 . +.PP +There are many new instructions, including the MMX and XMM media instructions, +and conditional move instructions. +As with the 386 instruction names, +all new 64-bit integer instructions, and the MMX and XMM instructions +uniformly use +.CW L +for `long word' (32 bits) and +.CW Q +for `quad word' (64 bits). +Some instructions use +.CW O +(`octword') for 128-bit values, where the processor handbook +variously uses +.CW O +or +.CW DQ . +The assembler also consistently uses +.CW PL +for `packed long' in +XMM instructions, instead of +.CW Q , +.CW DQ +or +.CW PI . +Either +.CW MOVL +or +.CW MOVQ +can be used to move values to and from control registers, even when +the registers might be 64 bits. +The assembler often accepts the handbook's name to ease conversion +of existing code (but remember that the operand order is uniformly +source then destination). +.PP +C's +.CW "long long" +type is 64 bits, but passed and returned by value, not by reference. +More notably, C pointer values are 64 bits, and thus +.CW "long long" +and +.CW "unsigned long long" +are the only integer types wide enough to hold a pointer value. +The C compiler and library use the XMM floating-point instructions, not +the old 387 ones, although the latter are implemented by assembler and loader. +The compiler provides external registers, +allocated from +.CW R15 +down. +.PP +The calling conventions are different from the 386. +.CW CALL +pushes, and +.CW RET +pops a 64-bit return address on the stack. +The first integer or pointer argument is passed in a register, which is +.CW BP +for an integer or pointer (it can be referred to in assembly code by the pseudonym +.CW RARG ). +.CW AX +holds the return value from subroutines as before. +Floating-point results are returned in +.CW X0 , +although currently the first parameter is not passed in a register if floating-point. +All parameters less than 8 bytes in length have 8 byte slots reserved on the stack +to preserve alignment and simplify variable-length argument list access, +including the first parameter when passed in a register, +although bytes 4 to 7 are not initialized. +.PP +The assembler assumes 64-bit mode unless a +.CW MODE +pseudo-operation is given: +.P1 + MODE $32 +.P2 +to change to 32-bit mode. +The effect is mainly to diagnose instructions that are illegal in +the given mode, but the loader will also assume 32-bit operands and addresses, +and 32-bit PC values for call and return. +.SH +Alpha +.PP +On the Alpha, all registers are 64 bits. The architecture handles 32-bit values +by giving them a canonical format (sign extension in the case of integer registers). +Registers are numbered +.CW R0 +through +.CW R31 . +.CW R0 +holds the return value from subroutines, and also the first parameter. +.CW R30 +is the stack pointer, +.CW R29 +is the static base, +.CW R26 +is the link register, and +.CW R27 +and +.CW R28 +are linker temporaries. +.PP +Floating point registers are numbered +.CW F0 +to +.CW F31 . +.CW F28 +contains +.CW 0.5 , +.CW F29 +contains +.CW 1.0 , +and +.CW F30 +contains +.CW 2.0 . +.CW F31 +is always +.CW 0.0 +on the Alpha. +.PP +The extension character for +.CW MOV +follows DEC's notation: +.CW B +for byte (8 bits), +.CW W +for word (16 bits), +.CW L +for long (32 bits), +and +.CW Q +for quadword (64 bits). +Byte and ``word'' loads and stores may be made unsigned +by appending a +.CW U . +.CW S +and +.CW T +refer to IEEE floating point single precision (32 bits) and double precision (64 bits), respectively. +.SH +PowerPC +.PP +The PowerPC follows the Plan 9 model set by the MIPS and SPARC, +not the elaborate ABIs. +The 32-bit instructions of the 60x and 8xx PowerPC architectures are supported; +there is no support for the older POWER instructions. +Registers are +.CW R0 +through +.CW R31 . +.CW R0 +is initialized to zero; this is done by C start up code +and assumed by the compiler and loader. +.CW R1 +is the stack pointer. +.CW R2 +is the static base register, with value the address of +.CW setSB(SB) . +.CW R3 +is the return register and also the register holding the first +argument to a C function, with space reserved at +.CW 0(FP) +as on the MIPS. +.CW R31 +is the loader temporary. +The external registers in Plan 9's C are allocated from +.CW R30 +down. +.PP +Floating point registers are called +.CW F0 +through +.CW F31 . +By convention, several registers are initialized +to specific values; this is done by the operating system. +.CW F27 +must be initialized to the value +.CW 0x4330000080000000 +(used by float-to-int conversion), +.CW F28 +to the value 0.0, +.CW F29 +to 0.5, +.CW F30 +to 1.0, and +.CW F31 +to 2.0. +.PP +As on the MIPS and SPARC, the assembler accepts arbitrary literals +as operands to +.CW MOVW , +and also to +.CW ADD +and others where `immediate' variants exist, +and the loader generates sequences +of +.CW addi , +.CW addis , +.CW oris , +etc. as required. +The register indirect addressing modes use the same syntax as the SPARC, +including double indexing when allowed. +.PP +The instruction names are generally derived from the Motorola ones, +subject to slight transformation: +the +.CW . ' ` +marking the setting of condition codes is replaced by +.CW CC , +and when the letter +.CW o ' ` +represents `OE=1' it is replaced by +.CW V . +Thus +.CW add , +.CW addo. +and +.CW subfzeo. +become +.CW ADD , +.CW ADDVCC +and +.CW SUBFZEVCC . +As well as the three-operand conditional branch instruction +.CW BC , +the assembler provides pseudo-instructions for the common cases: +.CW BEQ , +.CW BNE , +.CW BGT , +.CW BGE , +.CW BLT , +.CW BLE , +.CW BVC , +and +.CW BVS . +The unconditional branch instruction is +.CW BR . +Indirect branches use +.CW "(CTR)" +or +.CW "(LR)" +as target. +.PP +Load or store operations are replaced by +.CW MOV +variants in the usual way: +.CW MOVW +(move word), +.CW MOVH +(move halfword with sign extension), and +.CW MOVB +(move byte with sign extension, a pseudo-instruction), +with unsigned variants +.CW MOVHZ +and +.CW MOVBZ , +and byte-reversing +.CW MOVWBR +and +.CW MOVHBR . +`Load or store with update' versions are +.CW MOVWU , +.CW MOVHU , +and +.CW MOVBZU . +Load or store multiple is +.CW MOVMW . +The exceptions are the string instructions, which are +.CW LSW +and +.CW STSW , +and the reservation instructions +.CW lwarx +and +.CW stwcx. , +which are +.CW LWAR +and +.CW STWCCC , +all with operands in the usual data-flow order. +Floating-point load or store instructions are +.CW FMOVD , +.CW FMOVDU , +.CW FMOVS , +and +.CW FMOVSU . +The register to register move instructions +.CW fmr +and +.CW fmr. +are written +.CW FMOVD +and +.CW FMOVDCC . +.PP +The assembler knows the commonly used special purpose registers: +.CW CR , +.CW CTR , +.CW DEC , +.CW LR , +.CW MSR , +and +.CW XER . +The rest, which are often architecture-dependent, are referenced as +.CW SPR(n) . +The segment registers of the 60x series are similarly +.CW SEG(n) , +but +.I n +can also be a register name, as in +.CW SEG(R3) . +Moves between special purpose registers and general purpose ones, +when allowed by the architecture, +are written as +.CW MOVW , +replacing +.CW mfcr , +.CW mtcr , +.CW mfmsr , +.CW mtmsr , +.CW mtspr , +.CW mfspr , +.CW mftb , +and many others. +.PP +The fields of the condition register +.CW CR +are referenced as +.CW CR(0) +through +.CW CR(7) . +They are used by the +.CW MOVFL +(move field) pseudo-instruction, +which produces +.CW mcrf +or +.CW mtcrf . +For example: +.P1 + MOVFL CR(3), CR(0) + MOVFL R3, CR(1) + MOVFL R3, $7, CR +.P2 +They are also accepted in +the conditional branch instruction, for example +.P1 + BEQ CR(7), label +.P2 +Fields of the +.CW FPSCR +are accessed using +.CW MOVFL +in a similar way: +.P1 + MOVFL FPSCR, F0 + MOVFL F0, FPSCR + MOVFL F0, $7, FPSCR + MOVFL $0, FPSCR(3) +.P2 +producing +.CW mffs , +.CW mtfsf , +or +.CW mtfsfi +as appropriate. +.SH +ARM +.PP +The assembler provides access to +.CW R0 +through +.CW R14 +and the +.CW PC . +The stack pointer is +.CW R13 , +the link register is +.CW R14 , +and the static base register is +.CW R12 . +.CW R0 +is the return register and also the register holding +the first argument to a subroutine. +The assembler supports the +.CW CPSR +and +.CW SPSR +registers. +It also knows about coprocessor registers +.CW C0 +through +.CW C15 . +Floating registers are +.CW F0 +through +.CW F7 , +.CW FPSR +and +.CW FPCR . +.PP +As with the other architectures, loads and stores are called +.CW MOV , +e.g. +.CW MOVW +for load word or store word, and +.CW MOVM +for +load or store multiple, +depending on the operands. +.PP +Addressing modes are supported by suffixes to the instructions: +.CW .IA +(increment after), +.CW .IB +(increment before), +.CW .DA +(decrement after), and +.CW .DB +(decrement before). +These can only be used with the +.CW MOV +instructions. +The move multiple instruction, +.CW MOVM , +defines a range of registers using brackets, e.g. +.CW [R0-R12] . +The special +.CW MOVM +addressing mode bits +.CW W , +.CW U , +and +.CW P +are written in the same manner, for example, +.CW MOVM.DB.W . +A +.CW .S +suffix allows a +.CW MOVM +instruction to access user +.CW R13 +and +.CW R14 +when in another processor mode. +Shifts and rotates in addressing modes are supported by binary operators +.CW << +(logical left shift), +.CW >> +(logical right shift), +.CW -> +(arithmetic right shift), and +.CW @> +(rotate right); for example +.CW "R7>>R2" or +.CW "R2@>2" . +The assembler does not support indexing by a shifted expression; +only names can be doubly indexed. +.PP +Any instruction can be followed by a suffix that makes the instruction conditional: +.CW .EQ , +.CW .NE , +and so on, as in the ARM manual, with synonyms +.CW .HS +(for +.CW .CS ) +and +.CW .LO +(for +.CW .CC ), +for example +.CW ADD.NE . +Arithmetic +and logical instructions +can have a +.CW .S +suffix, as ARM allows, to set condition codes. +.PP +The syntax of the +.CW MCR +and +.CW MRC +coprocessor instructions is largely as in the manual, with the usual adjustments. +The assembler directly supports only the ARM floating-point coprocessor +operations used by the compiler: +.CW CMP , +.CW ADD , +.CW SUB , +.CW MUL , +and +.CW DIV , +all with +.CW F +or +.CW D +suffix selecting single or double precision. +Floating-point load or store become +.CW MOVF +and +.CW MOVD . +Conversion instructions are also specified by moves: +.CW MOVWD , +.CW MOVWF , +.CW MOVDW , +.CW MOVWD , +.CW MOVFD , +and +.CW MOVDF . diff --git a/doc/asm.pdf b/doc/asm.pdf Binary files differnew file mode 100644 index 00000000..75e9c0ff --- /dev/null +++ b/doc/asm.pdf diff --git a/doc/backmatter.pdf b/doc/backmatter.pdf Binary files differnew file mode 100644 index 00000000..44b5bb5d --- /dev/null +++ b/doc/backmatter.pdf diff --git a/doc/bltj.ms b/doc/bltj.ms new file mode 100644 index 00000000..8c305adf --- /dev/null +++ b/doc/bltj.ms @@ -0,0 +1,1073 @@ +.TL +The Inferno Operating System +.AU +Sean Dorward +Rob Pike +David Leo Presotto +Dennis M. Ritchie +Howard Trickey +Phil Winterbottom +.AI +Computing Science Research Center +Lucent Technologies, Bell Labs +Murray Hill, New Jersey +USA +.FS +.FA +Originally appeared in the +.I "Bell Labs Technical Journal" , +Vol. 2, No. 1, Winter 1997, pp. 5-18. +.br +Minor revisions have been made by Vita Nuova to reflect subsequent changes to Inferno. +.br +Copyright © 1997 Lucent Technologies Inc. All rights reserved. +.FE +.AB +Inferno is an operating system for creating and supporting distributed services. +It was originally developed by the Computing Science Research Center of Bell Labs, the R&D arm of Lucent Technologies, and +further developed by other groups in Lucent. +.LP +Inferno was designed specifically as a commercial product, both for licensing +in the marketplace and for use within new Lucent offerings. +It encapsulates many years of Bell Labs research in operating systems, languages, on-the-fly compilers, graphics, security, networking and portability. +.AE +.SH +Introduction +.LP +Inferno is intended to be used in a variety of network environments, for example those supporting +advanced telephones, hand-held devices, TV set-top boxes attached to cable or satellite systems, and inexpensive Internet computers, but also in conjunction with traditional computing systems. +.LP +The most visible new environments involve cable television, direct satellite broadcast, the Internet, and other networks. As the entertainment, telecommunications, and computing industries converge and interconnect, a variety of public data networks are emerging, each potentially as useful and profitable as the telephone system. Unlike the telephone system, which started with standard terminals and signaling, these networks are developing in a world of diverse terminals, network hardware, and protocols. Only a well-designed, economical operating system can insulate the various providers of content and services from the equally varied transport and presentation +platforms. Inferno is a network operating system for this new world. +.LP +Inferno's definitive strength lies in its portability and versatility across several dimensions: +.IP • +Portability across processors: it currently runs on Intel, Sparc, MIPS, ARM, HP-PA, and PowerPC architectures and is readily portable to others. +.IP • +Portability across environments: it runs as a stand-alone operating system on small terminals, and also as a user application under Windows NT, Windows 95, Unix (Irix, Solaris, FreeBSD, Linux, AIX, HP/UX) and Plan 9. In all of these environments, Inferno applications see an identical interface. +.IP • +Distributed design: the identical environment is established at the user's terminal and at the server, and each may import the resources (for example, the attached I/O devices or networks) of the other. Aided by the communications facilities of the run-time system, applications may be split easily (and even dynamically) between client and server. +.IP • +Minimal hardware requirements: it runs useful applications stand-alone on machines with as little as 1 MB of memory, and does not require memory-mapping hardware. +.IP • +Portable applications: Inferno applications are written in the type-safe language Limbo, whose binary representation is identical over all platforms. +.IP • +Dynamic adaptability: applications may, depending on the hardware or other resources available, load different program modules to perform a specific function. For example, a video player application might use any of several different decoder modules. +.LP +Underlying the design of Inferno is a model of the diversity of application areas it intends to stimulate. Many providers are interested in purveying media and services: telephone network service providers, WWW servers, cable companies, merchants, various information providers. +There are many connection technologies: ordinary telephone modems, ISDN, ATM, the Internet, analog broadcast or cable TV, cable modems, digital video on demand, and other interactive TV systems. +.LP +Applications more clearly related to Lucent's current and planned product offerings include +control of switches and routers, and the associated operations system facilities needed to support them. +For example, Inferno software controls an IP switch/router for voice and data being +developed by Lucent's Bell Labs research and Network Systems organizations. +An Inferno-based firewall (Signet) is being used to secure outside access to the Research +Internet connection. +.LP +Finally, there are existing or potential hardware endpoints. Some are in consumers' homes: PCs, +game consoles, newer set-top boxes. Some are inside the networks themselves: nodes for billing, network monitoring or provisioning. The higher ends of these spectra, epitomized by fully interactive TV with video on demand, may be fascinating, but have developed more slowly than expected. One reason is the cost of the set-top box, especially its memory requirements. Portable terminals, because of weight and cost considerations, are similarly constrained. +.LP +Inferno is parsimonious enough in its resource requirements to support interesting applications on today's hardware, while being versatile enough to grow into the future. In particular, it enables developers to create applications that will work across a range of facilities. An example: an interactive shopping catalog that works in text mode over a POTS modem, shows still pictures (perhaps with audio) of the merchandise over ISDN, and includes video clips over digital cable. +.LP +Clearly not everyone who deploys an Inferno-based solution will want to span the whole range of possibilities, but the system architecture should be constrained only by the desired markets and the available interconnection and server technologies, not by the software. +.SH +Inferno interfaces +.LP +The role of the Inferno system is to +.I "create" +several standard interfaces for its applications: +.IP • +Applications use various resources internal to the system, such as a consistent virtual machine that runs the application programs, together with library modules that perform services as simple as string manipulation through more sophisticated graphics services for dealing with text, pictures, +higher-level toolkits, and video. +.IP • +Applications exist in an external environment containing resources such as data files that can be read and manipulated, together with objects that are named and manipulated like files but are more active. Devices (for example a hand-held remote control, an MPEG decoder or a network interface) present themselves to the application as files. +.IP • +Standard protocols exist for communication within and between separate machines running Inferno, so that applications can cooperate. +.LP +At the same time, Inferno +.I uses +interfaces supplied by an existing environment, either bare hardware or standard operating systems and protocols. +.LP +Most typically, an Inferno-based service would consist of many relatively cheap terminals running Inferno as a native system, and a smaller number of large machines running Inferno as a hosted system. On these server machines Inferno might interface to databases, transaction systems, existing OA&M facilities, and other resources provided under the native operating system. The Inferno applications themselves would run either on the client or server machines, or both. +.SH +External Environment of Inferno Applications +.LP +The purpose of most Inferno applications is to present information or media to the user; thus applications must locate the information sources in the network and construct a local representation of them. The information flow is not one-way: the user's terminal (whether a network computer, TV set-top, PC, or videophone) is also an information source and its devices represent resources to applications. Inferno draws heavily on the design of the Plan 9 operating system [1] in the way it presents resources to these applications. +.LP +The design has three principles. +.IP • +All resources are named and accessed like files in a forest of hierarchical file systems. +.IP • +The disjoint resource hierarchies provided by different services are joined together into a single private hierarchical +.I "name space" . +.IP • +A communication protocol, called +.I "Styx" , +is applied uniformly to access these resources, whether local or remote. +.LP +In practice, most applications see a fixed set of files organized as a directory tree. Some of the files contain ordinary data, but others represent more active resources. Devices are represented as files, and device drivers (such as a modem, an MPEG decoder, a network interface, or the TV screen) attached to a particular hardware box present themselves as small directories. These directories typically containing two files, +.CW "data" +and +.CW "ctl" , +which respectively perform actual device input/output and control operations. System services also live behind file names. For example, an Internet domain name server might be attached to an agreed-upon name (say +.CW "/net/dns" ); +after writing to this file a string representing a symbolic Internet domain name, a subsequent read from the file would return the corresponding numeric Internet address. +.LP +The glue that connects the separate parts of the resource name space together is the Styx protocol. +Within an instance of Inferno, all the device drivers and other internal resources respond to the procedural version of Styx. The Inferno kernel implements a +.I "mount driver" +that transforms file system operations into remote procedure calls for transport over a network. On the other side of the connection, a server unwraps the Styx messages and implements them using resources local to it. Thus, it is possible to import parts of the name space (and thus resources) from other machines. +.LP +To extend the example above, it is unlikely that a set-top box would store the code needed for an Internet domain name-server within itself. Instead, an Internet browser would import the +.CW "/net/dns" +resource into its own name space from a server machine across a network. +.LP +The Styx protocol lies above and is independent of the communications transport layer; it is readily carried over TCP/IP, PPP, ATM or various modem transport protocols. +.SH +Internal Environment of Inferno Applications +.LP +Inferno applications are written in a new language called Limbo [2], which was designed specifically for the Inferno environment. Its syntax is influenced by C and Pascal, and it supports the standard data types common to them, together with several higher-level data types such as lists, tuples, strings, dynamic arrays, and simple abstract data types. +.LP +In addition, Limbo supplies several advanced constructs carefully integrated into the Inferno virtual machine. In particular, a communication mechanism called a +.I "channel" +is used to connect different Limbo tasks on the same machine or across the network. +A channel transports typed data in a machine-independent fashion, so that complex data structures (including channels themselves) may be passed between Limbo tasks or attached to files in the name space for language-level communication between machines. +.LP +Multi-tasking is supported directly by the Limbo language: independently scheduled threads of control may be spawned, and an +.CW "alt" +statement is used to coordinate the channel communication +between tasks (that is, +.CW "alt" +is used to select one of several channels that are ready to communicate). +By building channels and tasks into the language and its virtual machine, Inferno encourages a communication style that is easy to use and safe. +.LP +Limbo programs are built of +.I "modules" , +which are self-contained units with a well-defined interface +containing functions (methods), abstract data types, and constants defined by the module and visible outside it. Modules are accessed dynamically; that is, when one module wishes to make use of another, it dynamically executes a +.CW "load" +statement naming the desired module, and uses a returned handle to access the new module. +When the module is no longer in use, its storage and code will be released. +The flexibility of the modular structure contributes to the smallness of typical Inferno applications, and also to their adaptability. +For example, in the shopping catalog described above, +the application's main module checks dynamically for the existence of the video resource. +If it is unavailable, the video-decoder module is never loaded. +.LP +Limbo is fully type-checked at compile- and run-time; for example, pointers, besides being more +restricted than in C, are checked before being dereferenced, and the type-consistency of a dynamically loaded module is checked when it is loaded. Limbo programs run safely on a machine +without memory-protection hardware. +Moreover, all Limbo data and program objects are subject to +a garbage collector, built deeply into the Limbo run-time system. All system data objects are tracked by the virtual machine and freed as soon as they become unused. For example, if an application task creates a graphics window and then terminates, the window automatically disappears the instant the last reference to it has gone away. +.LP +Limbo programs are compiled into byte-codes representing instructions for a virtual machine called +Dis. The architecture of the arithmetic part of Dis is a simple 3-address machine, supplemented with a few specialized operations for handling some of the higher-level data types like arrays and strings. Garbage collection is handled below the level of the machine language; the scheduling of tasks is similarly hidden. When loaded into memory for execution, the byte-codes are expanded +into a format more efficient for execution; there is also an optional on-the-fly compiler that turns a Dis instruction stream into native machine instructions for the appropriate real hardware. This can be done efficiently because Dis instructions match well with the instruction-set architecture of today's machines. The resulting code executes at a speed approaching that of compiled C. +.LP +Underlying Dis is the Inferno kernel, which contains the interpreter and on-the-fly compiler as well as memory management, scheduling, device drivers, protocol stacks, and the like. +The kernel also contains the core of the file system (the name evaluator and the code that turns file system operations into remote procedure calls over communications links) as well as the small file systems implemented internally. +.LP +Finally, the Inferno virtual machine implements several standard modules internally. These include +.CW "Sys" , +which provides system calls and a small library of useful routines (e.g. creation of network connections, string manipulations). Module +.CW "Draw" +is a basic graphics library that handles raster graphics, fonts, and windows. Module +.CW "Prefab" +builds on +.CW "Draw" +to provide structured complexes containing images and text inside of windows; these elements may be scrolled, selected, and changed by the methods of +.CW "Prefab" . +Module +.CW "Tk" +is an all-new implementation of the Tk graphics toolkit [18], with a Limbo interface. A +.CW "Math" +module encapsulates the procedures for numerical programming. +.SH +The Environment of the Inferno System +.LP +Inferno creates a standard environment for applications. Identical application programs can run +under any instance of this environment, even in distributed fashion, and see the same resources. +Depending on the environment in which Inferno itself is implemented, there are several versions of the Inferno kernel, Dis/Limbo interpreter, and device driver set. +.LP +When running as the native operating system, the kernel includes all the low-level glue (interrupt handlers, graphics and other device drivers) needed to implement the abstractions presented to applications. +For a hosted system, for example under Unix, Windows NT or Windows 95, Inferno runs as a set of ordinary processes. +Instead of mapping its device-control functionality to real hardware, +it adapts to the resources provided by the operating system under which it runs. +For example, under Unix, the graphics library might be implemented using the X window system and the networking using the socket interface; under Windows, it uses the native Windows graphics and Winsock calls. +.LP +Inferno is, to the extent possible, written in standard C and most of its components are independent of the many operating systems that can host it. +.SH +Security in Inferno +.LP +Inferno provides security of communication, resource control, and +system integrity. +.LP +Each external communication channel may be transmitted in the clear, +accompanied by message digests to prevent corruption, or encrypted to +prevent corruption and interception. Once communication is set up, +the encryption is transparent to the application. Key exchange is +provided through standard public-key mechanisms; after key exchange, +message digesting and line encryption likewise use standard symmetric +mechanisms. +.LP +Inferno is secure against erroneous or malicious applications, and +encourages safe collaboration between mutually suspicious service +providers and clients. The resources available to applications appear +exclusively in the name space of the application, and standard +protection modes are available. This applies to data, to +communication resources, and to the executable modules that constitute +the applications. Security-sensitive resources of the system are +accessible only by calling the modules that provide them; in +particular, adding new files and servers to the name space is +controlled and is an authenticated operation. For example, if the +network resources are removed from an application's name space, then +it is impossible for it to establish new network connections. +.LP +Object modules may be signed by trusted authorities who guarantee +their validity and behavior, and these signatures may be checked by +the system the modules are accessed. +.LP +Although Inferno provides a rich variety of authentication and security +mechanisms, as detailed below, few application programs need to +be aware of them or explicitly include coding to make use of them. +Most often, access to resources across a secure communications link +is arranged in advance by the larger system in which the application operates. +For example, when a client system uses a server system +and connection authentication or link encryption is appropriate, +the server resources will most naturally be supplied +as a part of the application's name space. +The communications channel that carries the Styx protocol +can be set to authenticate or encrypt; thereafter, +all use of the resource is automatically protected. +.SH +Security mechanisms +.LP +Authentication and digital signatures are performed using +public key cryptography. Public keys are certified by +Inferno-based or other certifying authorities that sign the public keys with their +own private key. +.LP +Inferno uses encryption for: +.IP • +mutual authentication of communicating parties; +.IP • +authentication of messages between these parties; and +.IP • +encryption of messages between these parties. +.LP +The encryption algorithms provided by Inferno +include the SHA, MD4, and MD5 secure hashes; +Elgamal public key signatures and signature verification [4]; +RC4 encryption; +DES encryption; +and public key exchange based on the Diffie-Hellman scheme. +The public key signatures use keys with moduli up to 4096 bits, +512 bits by default. +.LP +There is no generally accepted national or international authority +for storing or generating public or private encryption keys. +Thus Inferno includes tools for using or implementing a trusted authority, +but it does not itself provide the authority, +which is an administrative function. +Thus an organization using Inferno (or any other security +and key-distribution scheme) must design its system to suit its +own needs, and in particular decide whom to trust as a Certifying +Authority (CA). However, the Inferno design is sufficiently flexible +and modular to accommodate the protocols likely to be attractive in practice. +.LP +The certifying authority that signs a user's +public key determines the size of the key and the public key +algorithm used. Tools provided with +Inferno use these signatures for authentication. Library +interfaces are provided for Limbo programs to sign and verify +signatures. +.LP +Generally authentication is performed using public key cryptography. Parties +register by having their public keys signed by the certifying authority (CA). +The signature covers a secure hash (SHA, MD4, or MD5) of +the name of the party, his public key, and an expiration time. The signature, +which contains the name of the signer, along with the signed information, +is termed a +.I "certificate" . +.LP +When parties communicate, they use the Station to Station protocol[5] to +establish the identities of the two parties and to create a mutually known secret. +This STS protocol uses the Diffie-Hellman algorithm [6] to create this shared +secret. +The protocol is protected against replay attacks by choosing new random +parameters for each conversation. It is secured against `man in +the middle' attacks by having the parties exchange certificates and then +digitally signing key parts of the protocol. To masquerade as another +party an attacker would have to be able to forge that party's signature. +.SH +Line Security +.LP +A network conversation can be secured against modification alone +or against both modification and snooping. To secure against +modification, Inferno can append a secure MD5 or SHA hash (called a digest), +.P1 +hash(secret, message, messageid) +.P2 +to each message. +.I "Messageid" +is a 32 bit number that starts at 0 and is incremented by +one for each message sent. Thus messages can be neither +changed, removed, reordered or inserted into the stream without knowing +the secret or breaking the secure hash algorithm. +.LP +To secure against snooping, Inferno supports encryption of the complete conversation +using either RC4 or DES with either DES chain block coding (DESCBC) +and electronic code book (DESECB). +.LP +Inferno uses the same encapsulation format as Netscape's Secure Sockets Layer [7]. +It is possible to encapsulate +a message stream in multiple encapsulations to provide varying degrees of +security. +.SH +Random Numbers +.LP +The strength of cryptographic algorithms depends in part on strength +of the random numbers +used for choosing keys, Diffie-Hellman parameters, initialization vectors, etc. +Inferno achieves this in two steps: a slow (100 to 200 bit +per second) random bit stream comes from sampling the low order bits of a +free running counter whenever a clock ticks. The clock must be unsynchronized, +or at least poorly synchronized, with the counter. This generator is then used to +alter the state of a faster pseudo-random number generator. +Both the slow and fast generators were tested on a number of architectures +using self correlation, random walk, and repeatability tests. +.SH +Introduction to Limbo +.LP +Limbo is the application programming language for the Inferno operating system. Although Limbo looks syntactically like C, it has a number of features that make it easier to use, safer, and more suited to the heterogeneous, networked Inferno environment: a rich set of basic types, strong typing, garbage collection, concurrency, communications, and modules. Limbo may be interpreted or compiled `just in time' for efficient, portable execution. +.LP +This paper introduces the language by studying an example of a complete, useful Limbo program. The program illustrates general programming as well as aspects of concurrency, graphics, module loading, and other features of Limbo and Inferno. +.SH +The problem +.LP +Our example program is a stripped-down version of the Inferno[14] program +.CW "view" , +which displays graphical image files on the screen, one per window. This version sacrifices some functionality, generality, and error-checking but performs the basic job. The files may be in either GIF[12, 13] or JPEG[19] format and must be converted before display, or they may already be in the Inferno standard format that needs no conversion. +.CW "View" +`sniffs' each file to determine what processing it requires, maps the colors if necessary, creates a new window, and copies the converted image to it. Each window is given a title bar across the top to identify it and hold the buttons to move and delete the window. +.SH +The Source +.LP +Here is the complete Limbo source for our version of +.CW "view" , +annotated with line numbers for easy reference (Limbo, of course, does not use line numbers). Subsequent sections explain the workings of the program. Although the program is too large to absorb as a first example without some assistance, it's worth skimming before moving to the next section, to get an idea of the style of the language. Control syntax derives from C[11], while declaration syntax comes from the Pascal family of languages[17]. Limbo borrows features from a number of languages (e.g., tuples on lines 45 and 48) and introduces a few new ones (e.g. explicit module loading on lines 90 and 92). +.P1 + 1 implement View; +.P3 + 2 include "sys.m"; + 3 sys: Sys; +.P3 + 4 include "draw.m"; + 5 draw: Draw; + 6 Rect, Display, Image: import draw; +.P3 + 7 include "bufio.m"; +.P3 + 8 include "imagefile.m"; +.P3 + 9 include "tk.m"; +10 tk: Tk; +.P3 +11 include "wmlib.m"; +12 wmlib: Wmlib; +.P3 +13 include "string.m"; +14 str: String; +.P3 +15 View: module +16 { +17 init: fn(ctxt: ref Draw->Context, + argv: list of string); +18 }; +.P3 +19 init(ctxt: ref Draw->Context, + argv: list of string) +20 { +21 sys = load Sys Sys->PATH; +22 draw = load Draw Draw->PATH; +23 tk = load Tk Tk->PATH; +24 wmlib = load Wmlib Wmlib->PATH; +25 str = load String String->PATH; +26 wmlib->init(); +.P3 +27 imageremap := load Imageremap + Imageremap->PATH; +28 bufio := load Bufio Bufio->PATH; +.P3 +29 argv = tl argv; +30 if(argv != nil + && str->prefix("-x ", hd argv)) +31 argv = tl argv; +.P3 +32 viewer := 0; +33 while(argv != nil){ +34 file := hd argv; +35 argv = tl argv; +.P3 +36 im := ctxt.display.open(file); +37 if(im == nil){ +38 idec := filetype(file); +39 if(idec == nil) +40 continue; +.P3 +41 fd := bufio->open(file, + Bufio->OREAD); +42 if(fd == nil) +43 continue; +.P3 +44 idec->init(bufio); +45 (ri, err) := idec->read(fd); +46 if(ri == nil) +47 continue; +.P3 +48 (im, err) = imageremap->remap( + ri, ctxt.display, 1); +49 if(im == nil) +50 continue; +51 } +.P3 +52 spawn view(ctxt, im, file, + viewer++); +53 } +54 } +.P3 +55 view(ctxt: ref Draw->Context, + im: ref Image, file: string, + viewer: int) +56 { +57 corner := string(25+20*(viewer%5)); +.P3 +58 (nil, file) = str->splitr(file, "/"); +59 (t, menubut) := wmlib->titlebar(ctxt.screen, + " -x "+corner+" -y "+corner+ + " -bd 2 -relief raised", + "View: "+file, Wmlib->Hide); +.P3 +60 event := chan of string; +61 tk->namechan(t, event, "event"); +.P3 +62 tk->cmd(t, "frame .im -height " + + string im.r.dy() + + " -width " + + string im.r.dx()); +63 tk->cmd(t, "bind . <Configure> "+ + "{send event resize}"); +64 tk->cmd(t, "bind . <Map> "+ + "{send event resize}"); +65 tk->cmd(t, "pack .im -side bottom"+ + " -fill both -expand 1"); +66 tk->cmd(t, "update"); +.P3 +67 t.image.draw(posn(t), im, ctxt.display.ones, im.r.min); +68 for(;;) alt{ +69 menu := <-menubut => +70 if(menu == "exit") +71 return; +72 wmlib->titlectl(t, menu); +73 <-event => +74 t.image.draw(posn(t), im, + ctxt.display.ones, im.r.min); +75 } +76 } +.P3 +77 posn(t: ref Tk->Toplevel): Rect +78 { +79 minx := int tk->cmd(t, + ".im cget -actx"); +80 miny := int tk->cmd(t, + ".im cget -acty"); +81 maxx := minx + int tk->cmd(t, + ".im cget -actwidth"); +82 maxy := miny + int tk->cmd(t, + ".im cget -actheight"); +.P3 +83 return ((minx, miny), (maxx, maxy)); +84 } +.P3 +85 filetype(file: string): RImagefile +86 { +87 if(len file>4 + && file[len file-4:]==".gif") +88 r := load RImagefile + RImagefile->READGIFPATH; +89 if(len file>4 + && file[len file-4:]==".jpg") +90 r = load RImagefile + RImagefile->READJPGPATH; +91 return r; +92 } +.P2 +.SH +Modules +.LP +Limbo programs are composed of modules that are loaded and linked at run-time. Each Limbo source file is the implementation of a single module; here line 1 states this file implements a module called +.CW "View" , +whose declaration appears in the +.CW "module" +declaration on lines 15-18. The declaration states that the module has one publicly visible element, the function +.CW "init" . +Other functions and variables defined in the file will be compiled into the module but only accessible internally. +.LP +The function +.CW "init" +has a type signature (argument and return types) that makes it callable from the Inferno shell, a convention not made explicit here. The type of +.CW "init" +allows +.CW "View" +to be invoked by typing, for example, +.P1 +view *.jpg +.P2 +at the Inferno command prompt to view all the JPEG files in a directory. This interface is all that is required for the module to be callable from the shell; all programs are constructed from modules, and some modules are directly callable by the shell because of their type. In fact the shell invokes +.CW "View" +by loading it and calling +.CW "init" , +not for example through the services of a system +.CW "exec" +function as in a traditional operating system. +.LP +Not all modules, of course, implement shell commands; modules are also used to construct libraries, services, and other program components. The module +.CW "View" +uses the services of other modules for I/O, graphics, file format conversion, and string processing. These modules are identified on lines 2-14. Each module's interface is stored in a public `include file' that holds a definition of a module much like lines 15-18 of the +.CW "View" +program. For example, here is an excerpt from the include file +.CW "sys.m" : +.P1 +Sys: module +{ + PATH: con "$Sys"; + + FD: adt # File descriptor + { + fd: int; + }; + + OREAD: con 0; + OWRITE: con 1; + ORDWR: con 2; + + open: fn(s: string, mode: int): ref FD; + print: fn(s: string, *): int; + read: fn(fd: ref FD, buf: array of byte, n: int): int; + write: fn(fd: ref FD, buf: array of byte, n: int): int; +}; +.P2 +This defines a module type, called +.CW "Sys" , +that has functions with familiar names like +.CW "open" +and +.CW "print" , +constants like +.CW "OREAD" +to specify the mode for opening a file, an aggregate type +.CW "adt" ) ( +called +.CW "FD" , +returned by +.CW "open" , +and a constant string called +.CW "PATH" . +.LP +After including the definition of each module, +.CW "View" +declares variables to access the module. Line 3, for example, declares the variable +.CW "sys" +to have type +.CW "Sys" ; +it will be used to hold a reference to the implementation of the module. Line 6 imports a number of types from the +.CW "draw" +(graphics) module to simplify their use; this line states that the implementation of these types is by default to be that provided by the module referenced by the variable +.CW "draw" . +Without such an +.CW "import" +statement, calls to methods of these types would require explicit mention of the module providing the implementation. +.LP +Unlike most module languages, which resolve unbound references to modules automatically, Limbo requires explicit `loading' of module implementations. +Although this requires more bookkeeping, it allows a program to have fine control over the loading (and unloading) of modules, an important property in the small-memory systems in which Inferno is intended to run. +Also, it allows easy garbage collection of unused modules and allows multiple implementations to serve a single interface, a style of programming we will exploit in +.CW "View" . +.LP +Declaring a module variable such as +.CW "sys" +is not sufficient to access a module; an implementation must also be loaded and bound to the variable. Lines 21-25 load the implementations of the standard modules used by +.CW "View" . +The +.CW "load" +operator, for example +.P1 +sys = load Sys Sys->PATH; +.P2 +takes a type +.CW "Sys" ), ( +the file name of the implementation +.CW "Sys->PATH" ), ( +and loads it into memory. If the implementation matches the specified type, a reference to the implementation is returned and stored in the variable +.CW "sys" ). ( +If not, the constant +.CW "nil" +will be returned to indicate an error. Conventionally, the +.CW "PATH" +constant defined by a module names the default implementation. Because +.CW "Sys" +is a built-in module provided by the system, it has a special form of name; other modules' +.CW "PATH" +variables name files containing actual code. For example, +.CW "Wmlib->PATH" +is \f5"/dis/lib/wmlib.dis"\fP. +Note, though, that the name of the implementation of the module in a +.CW "load" +statement can be any string. +.LP +Line 26 initializes the +.CW "wmlib" +module by invoking its +.CW "init" +function (unrelated to the +.CW "init" +of +.CW "View" ). +Note the use of the +.CW "->" +operator to access the member function of the module. The next two lines load modules, but add a new wrinkle: they also +.I "declare" +and +.I "initialize" +the module variables storing the reference. Limbo declarations have the general form +.P1 +\fIvar\fP: \fItype\fP = \fIvalue\fP; +.P2 +If the type is missing, it is taken to be the type of the value, so for example, +.P1 +bufio := load Bufio Bufio->PATH; +.P2 +on line 28 declares a variable of type +.CW "Bufio" +and initializes it to the result of the +.CW "load" +expression. +.SH +The main loop +.LP +The +.CW "init" +function takes two parameters, a graphics context, +.CW "ctxt" , +for the program and a list of command-line argument strings, +.CW "argv" . +.CW "Argv" +is a +.CW "list" +.CW "of" +.CW "string" ; +strings are a built-in type in Limbo and lists are a built-in form of constructor. Lists have several operations defined: +.CW "hd" +(head) returns the first element in the list, +.CW "tl" +(tail) the remainder after the head, and +.CW "len" +(length) the number of elements in the list. +.LP +Line 29 throws away the first element of +.CW "argv" , +which is conventionally the name of the program being invoked by the shell, and lines 30-31 ignore a geometry argument passed by the window system. The loop from lines 33 to 53 processes each file named in the remaining arguments; when +.CW "argv" +is a +.CW "nil" +list, the loop is complete. Line 34 picks off the next file name and line 35 updates the list. +.LP +Line 36 is the first method call we have seen: +.P1 +im := ctxt.display.open(file); +.P2 +The parameter +.CW "ctxt" +is an +.CW "adt" +that contains all the relevant information for the program to access its graphics environment. One of its elements, called +.CW "display" , +represents the connection to the frame buffer on which the program may write. The +.CW "adt" +.CW "display" +(whose type is imported on line 6) has a member function +.CW "open" +that reads a named image file into the memory associated with the frame buffer, returning a reference to the new image. (In X[20] terminology, +.CW "display" +represents a connection to the server and +.CW "open" +reads a pixmap from a file and instantiates it on that server.) +.LP +The +.CW "display.open" +method succeeds only if the file exists and is in the standard Inferno image format. If it fails, it will return +.CW "nil" +and lines 38-50 will attempt to convert the file into the right form. +.SH +Decoding the file +.LP +Line 38 calls +.CW "filetype" +to determine what format the file has. The simple version here, on lines 85-92, just looks at the file suffix to determine the type. A realistic implementation would work harder, but even this version illustrates the utility of program-controlled loading of modules. +.LP +The decoding interface for an image file format is specified by the module type +.CW "RImagefile" . +However, unlike the other modules we have looked at, +.CW "RImagefile" +has a number of implementations. If the file is a GIF file, +.CW "filetype" +returns the implementation of +.CW "RImagefile" +that decodes GIFs; if it is a JPEG file, +.CW "filetype" +returns an implementation that decodes JPEGs. In either case, the +.CW "read" +method has the same interface. Since reference variables like +.CW "r" +are implicitly initialized to +.CW "nil" , +that is what +.CW "filetype" +will return if it does not recognize the image format. +.LP +Thus, +.CW "filetype" +accepts a file name and returns the implementation of a module to decode it. +.LP +A couple of other points about +.CW "filetype" . +First, the expression +.CW "file[len file-4:]" +is a +.I "slice" +of the string +.CW "file" ; +it creates a string holding the last four characters of the file name. The colon separates the starting and ending indices of the slice; the missing second index defaults to the end of the string. As with lists, +.CW "len" +returns the number of characters (not bytes; Limbo uses Unicode[21] throughout) in the string. +.LP +Second, and more important, this version of +.CW "filetype" +loads the decoder module anew every time it is called, which is clearly inefficient. It's easy to do better, though: just store the module in a global, as in this fragment: +.P1 +readjpg: RImagefile; +filetype(...)... +{ + if(isjpg()){ + if(readjpg == nil) + readjpg = load RImagefile + RImagefile->READJPGPATH; + return readjpg; + } +} +.P2 +The program can form its own policies on loading and unloading modules based on time/space or other tradeoffs; the system does not impose its own. +.LP +Returning to the main loop, after the type of the file has been discovered, line 41 opens the file for I/O using the buffered I/O package. Line 44 calls the +.CW "init" +function of the decoder module, passing it the instance of the buffered I/O module being used (if we were caching decoder modules, this call to +.CW "init" +would be done only when the decoder is first loaded.) Finally, the Limbo-characteristic line 45 reads in the file: +.P1 +(ri, err) := idec->read(fd); +.P2 +The +.CW "read" +method of the decoder does the hard job of cracking the image format, which is beyond the scope of this paper. The result is a +.I "tuple" : +a pair of values. The first element of the pair is the image, while the second is an error string. If all goes well, the +.CW "err" +will be +.CW "nil" ; +if there is a problem, however, +.CW "err" +may be printed by the application to report what went wrong. The interesting property of this style of error reporting, common to Limbo programs, is that an error can be returned even if the decoding was successful (that is, even if +.CW "ri" +is non- +.CW "nil" ). +For example, the error may be recoverable, in which case it is worth returning the result but also worth reporting that an error did occur, leaving the application to decide whether to display the error or ignore it. +.CW "View" "\ " ( +ignores it, for brevity.) +.LP +In a similar manner, line 48 remaps the colors from the incoming colormap associated with the file to the standard Inferno color map. The result is an image ready to be displayed. +.SH +Creating a process +.LP +By line 52 in the main loop, we have an image ready in the variable +.CW "im" +and use the Limbo primitive +.CW "spawn" +to create a new process to display that image on the screen. +.CW "Spawn" +operates on a function call, creating a new process to execute that function. The process doing the spawning, here the main loop, continues immediately, while the new process begins execution in the specified function with the specified parameters. Thus line 52 begins a new process in the function +.CW "view" +with arguments the graphics context, the image to display, the file name, and a unique identification number used in placing the windows. +.LP +The new process shares with the calling process all variables except the stack. Shared memory can therefore be used to communicate between them; for synchronization, a more sophisticated mechanism is needed, a subject we will cover in the section on communications. +.SH +Starting Tk +.LP +The function +.CW "view" +uses the Inferno Tk graphics toolkit (a re-implementation for Limbo of Ousterhout's Tcl/Tk toolkit [18]) to place the image on the screen in a new window. Line 57 computes the position of the corner of the window, using the viewer number to stagger the positions of successive windows. The +.CW "string" +keyword is a conversion; in this example the conversion does an automatic translation from an integer expression into a decimal representation of the number. Thus +.CW "corner" +is a string variable, a form more useful in the calls to the Tk library. +.LP +The Inferno Tk implementation uses Limbo as its controlling language. +Rather than building a rich procedural interface, the interface passes strings to a generic Tk command processor, which returns strings as results. +This is similar to the use Tk within Tcl, but with most of the control flow, arithmetic, and so on written in Limbo. +.LP +A good introduction to the style is the function +.CW "posn" +on lines 77-84. The calls to +.CW "tk->cmd" +evaluate the textual command in the context defined by the +.CW "Tk->Toplevel" +variable +.CW "t" +(created on line 57 and passed to +.CW "posn" ); +the result is a decimal integer, converted to binary by the explicit +.CW "int" +conversion. On line 83, all the coordinates of the rectangle are known, and the function returns a nested tuple defining the rectangular position of the +.CW ".im" +component of the Toplevel. This tuple is automatically promoted to the +.CW "Rect" +type by the return statement. +.LP +Back in function +.CW "view" , +line 58 uses a function from the higher-level +.CW "String" +module to strip off the basename of the file name, for use in the banner of the window. Note that one component of the tuple is nil; the value of this component is discarded. +Line 58 calls the window manager function +.CW "wmlib->titlebar" +to establish a title bar on the window +The arguments are +.CW "ctxt.screen" , +a data structure representing the window stack on the frame buffer, +a string specifying the size and properties of the new window, the window's +label, and the set of control buttons required. +The +.CW "+" +operator on strings performs concatenation. +The window is labelled \f5"View"\fP +and the file basename, with a control button to hide the window. +Titlebars always include a control button to dismiss the window. +(The size and properties argument is more commonly nil or the empty string, +leaving the choice of position and style to the window manager.) +The first value +in the tuple returned by +.CW "wmlib->titlebar" +is a reference to a `top-level' widget\-a window\-upon which the program will assemble its display. +.SH +Communications +.LP +The second value in the tuple +returned from +.CW "wmlib->titlebar" +is a built-in Limbo type called a channel +.CW "chan" "" ( +is the keyword). A channel is a communications mechanism in the manner of Hoare's CSP[15]. Two processes that wish to communicate do so using a shared channel; data sent on the channel by one process may be received by another process. The communication is +.I "synchronous" : +both processes must be ready to communicate before the data changes hands, and if one is not ready the other blocks until it is. Channels are a feature of the Limbo language: they have a declared type +.CW "chan" "" ( +.CW "of" +.CW "int" , +.CW "chan" +.CW "of" +.CW "list" +.CW "of" +.CW "string" , +etc.) and only data of the correct type may be sent. There is no restriction on what may be sent; one may even send a channel on a channel. Channels therefore serve both to communicate and to synchronize. +.LP +Channels are used throughout Inferno to provide interfaces to system functions. The threading and communications primitives in Limbo are not designed to implement efficient multicomputer algorithms, but rather to provide an elegant way to build active interfaces to devices and other programs. +.LP +One example is the +.CW "menubut" +channel returned by +.CW "wmlib->titlebar" , +a channel of textual commands sent by the window manager. The expression on line 69, +.P1 +menu := <-menubut +.P2 +receives the next message on the channel and assigns it to the variable menu. The communications operator, +.CW "<-" , +receives a datum when prefixed to channel and transmits a datum when combined with an assignment operator (e.g. +.CW "channel<-=2" ). +This use of menubut appears inside an +.CW "alt" +(alternation) statement, a construct we'll discuss later. +.LP +Lines 60 and 61 create and register a new channel, +.CW "event" , +to be used by the Tk module to report user interface events. Lines 62-66 use simple Tk operations to make the window in which the image may be drawn. Lines 63 and 64 bind events within this window to messages to be sent on the channel +.CW "event" . +For example, line 63 defines that when the configuration of the window is changed, presumably by actions of the window manager, the string +\f5"resize"\fP +is to be transmitted on +.CW "event" +for interpretation by the application. This translation of events into messages on explicit channels is fundamental to the Limbo style of programming. +.SH +Displaying the image +.LP +The payoff occurs on line 67, which steps outside the Tk model to draw the image +.CW "im" +directly on the window: +.P1 +t.image.draw(posn(t), im, ctxt.display.ones, im.r.min); +.P2 +.CW "Posn" +calculates where on the screen the image is to go. The +.CW "draw" +method is the fundamental graphics operation in Inferno, whose design is outside our scope here. In this statement, it just copies the pixels from +.CW "im" +to the window's own image, +.CW "t.image" ; +the argument +.CW "ctxt.display.ones" +is a mask that selects every pixel. +.SH +Multi-way communications +.LP +Once the image is on the screen, +.CW "view" +waits for any changes in the status of the window. Two things may happen: either the buttons on the title bar may be used, in which case a message will appear on +.CW "menubut" , +or a configuration or mapping operation will apply to the window, in which case a message will appear on +.CW "event" . +.LP +The Limbo +.CW "alt" +statement provides control when more than one communication may proceed. Analogous to a +.CW "case" +statement, the +.CW "alt" +evaluates a set of expressions and executes the statements associated with the correct expression. Unlike a +.CW "case" , +though, the expressions in an +.CW "alt" +must each be a communication, and the +.CW "alt" +will execute the statements associated with the communication that can first proceed. If none can proceed, the +.CW "alt" +waits until one can; if more than one can proceed, it chooses one randomly. +.LP +Thus the loop on lines 68-75 processes messages received by the two classes of actions. When the window is moved or resized, line 73 will receive a \f5"resize"\fP +message due to the bindings on lines 63 and 64. The message is discarded but the action of receiving it triggers the repainting of the newly placed window on line 74. Similarly, messages triggered by buttons on the title bar send a message on +.CW "menubut" , +and the value of that is examined to see if it is +\f5"exit"\fP, +which should be handled locally, or anything else, which can be passed on to the underlying library. +.SH +Cleanup +.LP +If the exit button is pushed, line 71 will return from +.CW "view" . +Since +.CW "view" +was the top-level function in this process, the process will exit, freeing all its resources. All memory, open file descriptors, windows, and other resources held by the process will be garbage collected when the return executes. +.LP +The Limbo garbage collector [16] uses a hybrid scheme that combines reference counting to reclaim memory the instant its last reference disappears with a real-time sweeping algorithm that runs as an idle-time process to reclaim unreferenced circular structures. +The instant-free property means that system resources like file descriptors and windows can be tied to the collector for recovery as soon as they become unused; there is no pause until a sweeper discovers it. +This property allows Inferno to run in smaller memory arenas than are required for efficient mark-and-sweep algorithms, as well as providing an extra level of programmer convenience. +.SH +Summary +.LP +Inferno supplies a rich environment for constructing distributed applications that are portable\-in fact identical\-even when running on widely divergent underlying hardware. Its unique advantage over other solutions is that it encompasses not only a virtual machine, but also a complete virtual operating system including network facilities. +.SH +Acknowledgment +.LP +The cryptographic elements of Inferno owe much +to the cryptographic library of Lacy et al. [22]. +.SH +References +.LP +.nr PS -1 +.nr VS -1 +.IP 1. +R. Pike, D. Presotto, S. Dorward, B. Flandrena, K. Thompson, H. Trickey, and P. Winterbottom. ``Plan 9 from Bell Labs'', +.I "J. Computing Systems" +8:3, Summer 1995, pp. 221-254. +.IP 2. +S. Dorward, R. Pike, and P. Winterbottom. ``Programming in Limbo'', +.I "IEEE Compcon 97 Proceedings" , +1997. +.IP 3. +J. K. Ousterhout. +.I "Tcl and the Tk Toolkit" , +Addison-Wesley, 1994. +.IP 4. +T. Elgamal, ``A Public-Key Cryptosystem and a Signature Scheme Based on Discrete Logarithms'', +.I "Advances in Cryptography: Proceedings of CRYPTO 84, " +Springer Verlag, 1985, pp. 10-18 +.IP 5. +B. Schneier, ``Applied Cryptography'', Wiley, 1996, p. 516 +.IP 6. +D. Stinson, ``Cryptography, Theory and Practice'', +.I "CRC Press" , +1996, p. 271 +.IP 7. +K. Hickman and T. Elgamal, ``The SSL Protocol (V3.0)'', +.I "IETF Internet-draft" +.IP 8. +S. M. Bellovin and M. Merritt, ``Encrypted Key Exchange: Password-Based Protocols Secure Against Dictionary Attack'', Proceedings of the 1992 IEEE Computer Society Conference on Research in Security and Privacy, 1992, pp. 72-84 +.IP 9. +M. Blaze, J. Feigenbaum, J. Lacy, ``Decentralized Trust Management'', +.I "Proceedings 1996 IEEE Symposium on Security and Privacy" , +May 1996 +.IP 10. +R. Rivest and B. Lampson, ``SDSI - A Simple Distributed Security Architecture'', unpublished, +.I "http://theory.lcs.mit.edu/~rivest/sdsi10.ps" +.IP 11. +.I "American National Standard for Information Systems Programming Language C" , +American National Standards Institute, X3.159-1989. +.IP 12. +.I "GIF Graphics Interchange Format: A standard defining a mechanism for the storage and transmission of bitmap-based graphics information" , +CompuServe Incorporated, Columbus, OH, 1987. +.IP 13. +.I "GIF Graphics Interchange Format: Version 89a" , +CompuServe Incorporated, Columbus, OH, 1990. +.IP 14. +S. Dorward et al., ``Inferno'', +.I "IEEE Compcon 97 Proceedings" , +1997. +.IP 15. +C. A. R. Hoare, ``Communicating Sequential Processes''. +.I "Comm. ACM" +21:8, pp. 666-677, 1978. +.IP 16. +L. Huelsbergen, and P. Winterbottom, ``Very Concurrent Mark & Sweep Garbage Collection without Fine-Grain Synchronization'', Submitted +.I "International Conference of Functional Programming" , +Amsterdam, 1997. +.IP 17. +K. Jensen, and N. Wirth, +.I "PascalUser Manual and Report" . +Springer-Verlag, 1974. +.IP 18. +John K. Ousterhout, +.I "Tcl and the Tk Toolkit" , +Addison-Wesley, 1994. +.IP 19. +W. B. Pennebaker. and J. L. Mitchell, +.I "JPEG Still Image Data Compression" , +Van Nostrand Reinhold, New York, 1992. +.IP 20. +R. W. Scheifler, J. Gettys, and R. Newman, +.I "X Window System" , +Digital Press, 1988. +.IP 21. +The Unicode Consortium, +.I "The Unicode Standard, Version 2.0, " +Addison Wesley, 1996. +.IP 22. +J. B. Lacy, D. P. Mitchell, and W. M. Schell, ``CryptoLib: Cryptography in Software,'' +.I "UNIX Security Symposium IV Proceedings" , +USENIX Association, 1993 pp. 1-17. +.nr PS +1 +.nr VS +1 diff --git a/doc/bltj.pdf b/doc/bltj.pdf Binary files differnew file mode 100644 index 00000000..d3839de0 --- /dev/null +++ b/doc/bltj.pdf diff --git a/doc/changes.pdf b/doc/changes.pdf Binary files differnew file mode 100644 index 00000000..fb605a29 --- /dev/null +++ b/doc/changes.pdf diff --git a/doc/changes.ps.gz b/doc/changes.ps.gz Binary files differnew file mode 100644 index 00000000..e91035ff --- /dev/null +++ b/doc/changes.ps.gz diff --git a/doc/compiler.ms b/doc/compiler.ms new file mode 100644 index 00000000..1f6bc713 --- /dev/null +++ b/doc/compiler.ms @@ -0,0 +1,1174 @@ +.TL +Plan 9 C Compilers \(dg +.AU +.I "Ken Thompson" +.AI +ken@plan9.bell-labs.com +.AB +.FS +\l'1i' +.br +\(dg Originally appeared, in a different form, in +.I +Proceedings of the Summer 1990 UKUUG Conference, +.R +pp. 41-51, +London, 1990. +This version first appeared in +.I "Plan 9 Programmer's Manual, Volume 2 (Second Edition)" . +The Plan 9 compiler suite forms the basis for the portable Inferno compiler suite, +making this paper still relevant. +.FE +This paper describes the overall structure and function of the Plan 9 C compilers. +A more detailed implementation document +for any one of the compilers +is yet to be written. +.AE +.NH +Introduction +.LP +There are many compilers in the series. +Eight of the compilers (MIPS 3000, SPARC, Intel 386, AMD64, Power PC, ARM, DEC Alpha, and Motorola 68020) +are considered active and are used to compile +current versions of Plan 9 or Inferno. +Several others (Motorola 68000, Intel 960, AMD 29000) have had only limited use, such as +to program peripherals or experimental devices. +.NH +Structure +.LP +The compiler is a single program that produces an +object file. +Combined in the compiler are the traditional +roles of preprocessor, lexical analyzer, parser, code generator, +local optimizer, +and first half of the assembler. +The object files are binary forms of assembly +language, +similar to what might be passed between +the first and second passes of an assembler. +.LP +Object files and libraries +are combined by a loader +program to produce the executable binary. +The loader combines the roles of second half +of the assembler, global optimizer, and loader. +The names of the compliers, loaders, and assemblers +are as follows: +.DS +.ta 1.5i +.de Ta +\\$1 \f(CW\\$2\fP \f(CW\\$3\fP \f(CW\\$4\fP +.. +.Ta SPARC kc kl ka +.Ta PowerPC qc ql qa +.Ta MIPS vc vl va +.Ta Motorola\ 68000 1c 1l 1a +.Ta Motorola\ 68020 2c 2l 2a +.Ta ARM 5c 5l 5a +.Ta AMD64 6c 6l 6a +.Ta DEC\ Alpha 7c 7l 7a +.Ta Intel\ 386 8c 8l 8a +.Ta AMD\ 29000 9c 9l 9a +.DE +There is a further breakdown +in the source of the compilers into +object-independent and +object-dependent +parts. +All of the object-independent parts +are combined into source files in the +directory +.CW /sys/src/cmd/cc . +The object-dependent parts are collected +in a separate directory for each compiler, +for example +.CW /sys/src/cmd/vc . +All of the code, +both object-independent and +object-dependent, +is machine-independent +and may be cross-compiled and executed on any +of the architectures. +.NH +The Language +.LP +The compiler implements ANSI C with some +restrictions and extensions +[ANSI90]. +Most of the restrictions are due to +personal preference, while +most of the extensions were to help in +the implementation of Plan 9. +There are other departures from the standard, +particularly in the libraries, +that are beyond the scope of this +paper. +.NH 2 +Register, volatile, const +.LP +The keyword +.CW register +is recognized syntactically +but is semantically ignored. +Thus taking the address of a +.CW register +variable is not diagnosed. +The keyword +.CW volatile +disables all optimizations, in particular registerization, of the corresponding variable. +The keyword +.CW const +generates warnings (if warnings are enabled by the compiler's +.CW -w +option) of non-constant use of the variable, +but does not affect the generated code. +.NH 2 +The preprocessor +.LP +The C preprocessor is probably the +biggest departure from the ANSI standard. +.LP +The preprocessor built into the Plan 9 compilers does not support +.CW #if , +although it does handle +.CW #ifdef +and +.CW #include . +If it is necessary to be more standard, +the source text can first be run through the separate ANSI C +preprocessor, +.CW cpp . +.NH 2 +Unnamed substructures +.LP +The most important and most heavily used of the +extensions is the declaration of an +unnamed substructure or subunion. +For example: +.DS +.CW +.ta .1i .6i 1.1i 1.6i + typedef + struct lock + { + int locked; + } Lock; + + typedef + struct node + { + int type; + union + { + double dval; + float fval; + long lval; + }; + Lock; + } Node; + + Lock* lock; + Node* node; +.R +.DE +The declaration of +.CW Node +has an unnamed substructure of type +.CW Lock +and an unnamed subunion. +One use of this feature allows references to elements of the +subunit to be accessed as if they were in +the outer structure. +Thus +.CW node->dval +and +.CW node->locked +are legitimate references. +.LP +When an outer structure is used +in a context that is only legal for +an unnamed substructure, +the compiler promotes the reference to the +unnamed substructure. +This is true for references to structures and +to references to pointers to structures. +This happens in assignment statements and +in argument passing where prototypes have been +declared. +Thus, continuing with the example, +.DS +.CW +.ta .1i .6i 1.1i 1.6i + lock = node; +.R +.DE +would assign a pointer to the unnamed +.CW Lock +in +the +.CW Node +to the variable +.CW lock . +Another example, +.DS +.CW +.ta .1i .6i 1.1i 1.6i + extern void lock(Lock*); + func(...) + { + ... + lock(node); + ... + } +.R +.DE +will pass a pointer to the +.CW Lock +substructure. +.LP +Finally, in places where context is insufficient to identify the unnamed structure, +the type name (it must be a +.CW typedef ) +of the unnamed structure can be used as an identifier. +In our example, +.CW &node->Lock +gives the address of the anonymous +.CW Lock +structure. +.NH 2 +Structure displays +.LP +A structure cast followed by a list of expressions in braces is +an expression with the type of the structure and elements assigned from +the corresponding list. +Structures are now almost first-class citizens of the language. +It is common to see code like this: +.DS +.CW +.ta .1i + r = (Rectangle){point1, (Point){x,y+2}}; +.R +.DE +.NH 2 +Initialization indexes +.LP +In initializers of arrays, +one may place a constant expression +in square brackets before an initializer. +This causes the next initializer to assign +the indicated element. +For example: +.DS +.CW +.ta .1i .6i 1.6i + enum errors + { + Etoobig, + Ealarm, + Egreg + }; + char* errstrings[] = + { + [Ealarm] "Alarm call", + [Egreg] "Panic: out of mbufs", + [Etoobig] "Arg list too long", + }; +.R +.DE +In the same way, +individual structures members may +be initialized in any order by preceding the initialization with +.CW .tagname . +Both forms allow an optional +.CW = , +to be compatible with a proposed +extension to ANSI C. +.NH 2 +External register +.LP +The declaration +.CW extern +.CW register +will dedicate a register to +a variable on a global basis. +It can be used only under special circumstances. +External register variables must be identically +declared in all modules and +libraries. +The feature is not intended for efficiency, +although it can produce efficient code; +rather it represents a unique storage class that +would be hard to get any other way. +On a shared-memory multi-processor, +an external register is +one-per-processor and neither one-per-procedure (automatic) +or one-per-system (external). +It is used for two variables in the Plan 9 kernel, +.CW u +and +.CW m . +.CW U +is a pointer to the structure representing the currently running process +and +.CW m +is a pointer to the per-machine data structure. +.NH 2 +Long long +.LP +The compilers accept +.CW long +.CW long +as a basic type meaning 64-bit integer. +On all of the machines +this type is synthesized from 32-bit instructions. +.NH 2 +Pragma +.LP +The compilers accept +.CW #pragma +.CW lib +.I libname +and pass the +library name string uninterpreted +to the loader. +The loader uses the library name to +find libraries to load. +If the name contains +.CW $O , +it is replaced with +the single character object type of the compiler +(e.g., +.CW v +for the MIPS). +If the name contains +.CW $M , +it is replaced with +the architecture type for the compiler +(e.g., +.CW mips +for the MIPS). +If the name starts with +.CW / +it is an absolute pathname; +if it starts with +.CW . +then it is searched for in the loader's current directory. +Otherwise, the name is searched from +.CW /$M/lib . +Such +.CW #pragma +statements in header files guarantee that the correct +libraries are always linked with a program without the +need to specify them explicitly at link time. +.LP +They also accept +.CW #pragma +.CW packed +.CW on +(or +.CW yes +or +.CW 1 ) +to cause subsequently declared data, until +.CW #pragma +.CW packed +.CW off +(or +.CW no +or +.CW 0 ), +to be laid out in memory tightly packed in successive bytes, disregarding +the usual alignment rules. +Accessing such data can cause faults. +.LP +Similarly, +.CW #pragma +.CW profile +.CW off +(or +.CW no +or +.CW 0 ) +causes subsequently declared functions, until +.CW #pragma +.CW profile +.CW on +(or +.CW yes +or +.CW 1 ), +to be marked as unprofiled. +Such functions will not be profiled when +profiling is enabled for the rest of the program. +.LP +Two +.CW #pragma +statements allow type-checking of +.CW print -like +functions. +The first, of the form +.P1 +#pragma varargck argpos error 2 +.P2 +tells the compiler that the second argument to +.CW error +is a +.CW print +format string (see the manual page +.I print (2)) +that specifies how to format +.CW error 's +subsequent arguments. +The second, of the form +.P1 +#pragma varargck type "s" char* +.P2 +says that the +.CW print +format verb +.CW s +processes an argument of +type +.CW char* . +If the compiler's +.CW -F +option is enabled, the compiler will use this information +to report type violations in the arguments to +.CW print , +.CW error , +and similar routines. +.NH +Object module conventions +.LP +The overall conventions of the runtime environment +are important +to runtime efficiency. +In this section, +several of these conventions are discussed. +.NH 2 +Register saving +.LP +In the Plan 9 compilers, +the caller of a procedure saves the registers. +With caller-saves, +the leaf procedures can use all the +registers and never save them. +If you spend a lot of time at the leaves, +this seems preferable. +With callee-saves, +the saving of the registers is done +in the single point of entry and return. +If you are interested in space, +this seems preferable. +In both, +there is a degree of uncertainty +about what registers need to be saved. +Callee-saved registers make it difficult to +find variables in registers in debuggers. +Callee-saved registers also complicate +the implementation of +.CW longjmp . +The convincing argument is +that with caller-saves, +the decision to registerize a variable +can include the cost of saving the register +across calls. +For a further discussion of caller- vs. callee-saves, +see the paper by Davidson and Whalley [Dav91]. +.LP +In the Plan 9 operating system, +calls to the kernel look like normal procedure +calls, which means +the caller +has saved the registers and the system +entry does not have to. +This makes system calls considerably faster. +Since this is a potential security hole, +and can lead to non-determinism, +the system may eventually save the registers +on entry, +or more likely clear the registers on return. +.NH 2 +Calling convention +.LP +Older C compilers maintain a frame pointer, which is at a known constant +offset from the stack pointer within each function. +For machines where the stack grows towards zero, +the argument pointer is at a known constant offset +from the frame pointer. +Since the stack grows down in Plan 9, +the Plan 9 compilers +keep neither an +explicit frame pointer nor +an explicit argument pointer; +instead they generate addresses relative to the stack pointer. +.LP +On some architectures, the first argument to a subroutine is passed in a register. +.NH 2 +Functions returning structures +.LP +Structures longer than one word are awkward to implement +since they do not fit in registers and must +be passed around in memory. +Functions that return structures +are particularly clumsy. +The Plan 9 compilers pass the return address of +a structure as the first argument of a +function that has a structure return value. +Thus +.DS +.CW +.ta .1i .6i 1.1i 1.6i + x = f(...) +.R +.DE +is rewritten as +.DS +.CW +.ta .1i .6i 1.1i 1.6i + f(&x, ...)\f1. +.R +.DE +This saves a copy and makes the compilation +much less clumsy. +A disadvantage is that if you call this +function without an assignment, +a dummy location must be invented. +.LP +There is also a danger of calling a function +that returns a structure without declaring +it as such. +With ANSI C function prototypes, +this error need never occur. +.NH +Implementation +.LP +The compiler is divided internally into +four machine-independent passes, +four machine-dependent passes, +and an output pass. +The next nine sections describe each pass in order. +.NH 2 +Parsing +.LP +The first pass is a YACC-based parser +[Joh79]. +Declarations are interpreted immediately, +building a block structured symbol table. +Executable statements are put into a parse tree +and collected, +without interpretation. +At the end of each procedure, +the parse tree for the function is +examined by the other passes of the compiler. +.LP +The input stream of the parser is +a pushdown list of input activations. +The preprocessor +expansions of +macros +and +.CW #include +are implemented as pushdowns. +Thus there is no separate +pass for preprocessing. +.NH 2 +Typing +.LP +The next pass distributes typing information +to every node of the tree. +Implicit operations on the tree are added, +such as type promotions and taking the +address of arrays and functions. +.NH 2 +Machine-independent optimization +.LP +The next pass performs optimizations +and transformations of the tree, such as converting +.CW &*x +and +.CW *&x +into +.CW x . +Constant expressions are converted to constants in this pass. +.NH 2 +Arithmetic rewrites +.LP +This is another machine-independent optimization. +Subtrees of add, subtract, and multiply of integers are +rewritten for easier compilation. +The major transformation is factoring: +.CW 4+8*a+16*b+5 +is transformed into +.CW 9+8*(a+2*b) . +Such expressions arise from address +manipulation and array indexing. +.NH 2 +Addressability +.LP +This is the first of the machine-dependent passes. +The addressability of a processor is defined as the set of +expressions that is legal in the address field +of a machine language instruction. +The addressability of different processors varies widely. +At one end of the spectrum are the 68020 and VAX, +which allow a complex mix of incrementing, +decrementing, +indexing, and relative addressing. +At the other end is the MIPS, +which allows only registers and constant offsets from the +contents of a register. +The addressability can be different for different instructions +within the same processor. +.LP +It is important to the code generator to know when a +subtree represents an address of a particular type. +This is done with a bottom-up walk of the tree. +In this pass, the leaves are labeled with small integers. +When an internal node is encountered, +it is labeled by consulting a table indexed by the +labels on the left and right subtrees. +For example, +on the 68020 processor, +it is possible to address an +offset from a named location. +In C, this is represented by the expression +.CW *(&name+constant) . +This is marked addressable by the following table. +In the table, +a node represented by the left column is marked +with a small integer from the right column. +Marks of the form +.CW A\s-2\di\u\s0 +are addressable while +marks of the form +.CW N\s-2\di\u\s0 +are not addressable. +.DS +.B +.ta .1i 1.1i + Node Marked +.CW + name A\s-2\d1\u\s0 + const A\s-2\d2\u\s0 + &A\s-2\d1\u\s0 A\s-2\d3\u\s0 + A\s-2\d3\u\s0+A\s-2\d1\u\s0 N\s-2\d1\u\s0 \fR(note that this is not addressable)\fP + *N\s-2\d1\u\s0 A\s-2\d4\u\s0 +.R +.DE +Here there is a distinction between +a node marked +.CW A\s-2\d1\u\s0 +and a node marked +.CW A\s-2\d4\u\s0 +because the address operator of an +.CW A\s-2\d4\u\s0 +node is not addressable. +So to extend the table: +.DS +.B +.ta .1i 1.1i + Node Marked +.CW + &A\s-2\d4\u\s0 N\s-2\d2\u\s0 + N\s-2\d2\u\s0+N\s-2\d1\u\s0 N\s-2\d1\u\s0 +.R +.DE +The full addressability of the 68020 is expressed +in 18 rules like this, +while the addressability of the MIPS is expressed +in 11 rules. +When one ports the compiler, +this table is usually initialized +so that leaves are labeled as addressable and nothing else. +The code produced is poor, +but porting is easy. +The table can be extended later. +.LP +This pass also rewrites some complex operators +into procedure calls. +Examples include 64-bit multiply and divide. +.LP +In the same bottom-up pass of the tree, +the nodes are labeled with a Sethi-Ullman complexity +[Set70]. +This number is roughly the number of registers required +to compile the tree on an ideal machine. +An addressable node is marked 0. +A function call is marked infinite. +A unary operator is marked as the +maximum of 1 and the mark of its subtree. +A binary operator with equal marks on its subtrees is +marked with a subtree mark plus 1. +A binary operator with unequal marks on its subtrees is +marked with the maximum mark of its subtrees. +The actual values of the marks are not too important, +but the relative values are. +The goal is to compile the harder +(larger mark) +subtree first. +.NH 2 +Code generation +.LP +Code is generated by recursive +descent. +The Sethi-Ullman complexity completely guides the +order. +The addressability defines the leaves. +The only difficult part is compiling a tree +that has two infinite (function call) +subtrees. +In this case, +one subtree is compiled into the return register +(usually the most convenient place for a function call) +and then stored on the stack. +The other subtree is compiled into the return register +and then the operation is compiled with +operands from the stack and the return register. +.LP +There is a separate boolean code generator that compiles +conditional expressions. +This is fundamentally different from compiling an arithmetic expression. +The result of the boolean code generator is the +position of the program counter and not an expression. +The boolean code generator makes extensive use of De Morgan's rule. +The boolean code generator is an expanded version of that described +in chapter 8 of Aho, Sethi, and Ullman +[Aho87]. +.LP +There is a considerable amount of talk in the literature +about automating this part of a compiler with a machine +description. +Since this code generator is so small +(less than 500 lines of C) +and easy, +it hardly seems worth the effort. +.NH 2 +Registerization +.LP +Up to now, +the compiler has operated on syntax trees +that are roughly equivalent to the original source language. +The previous pass has produced machine language in an internal +format. +The next two passes operate on the internal machine language +structures. +The purpose of the next pass is to reintroduce +registers for heavily used variables. +.LP +All of the variables that can be +potentially registerized within a procedure are +placed in a table. +(Suitable variables are any automatic or external +scalars that do not have their addresses extracted. +Some constants that are hard to reference are also +considered for registerization.) +Four separate data flow equations are evaluated +over the procedure on all of these variables. +Two of the equations are the normal set-behind +and used-ahead +bits that define the life of a variable. +The two new bits tell if a variable life +crosses a function call ahead or behind. +By examining a variable over its lifetime, +it is possible to get a cost +for registerizing. +Loops are detected and the costs are multiplied +by three for every level of loop nesting. +Costs are sorted and the variables +are replaced by available registers on a greedy basis. +.LP +The 68020 has two different +types of registers. +For the 68020, +two different costs are calculated for +each variable life and the register type that +affords the better cost is used. +Ties are broken by counting the number of available +registers of each type. +.LP +Note that externals are registerized together with automatics. +This is done by evaluating the semantics of a ``call'' instruction +differently for externals and automatics. +Since a call goes outside the local procedure, +it is assumed that a call references all externals. +Similarly, +externals are assumed to be set before an ``entry'' instruction +and assumed to be referenced after a ``return'' instruction. +This makes sure that externals are in memory across calls. +.LP +The overall results are satisfactory. +It would be nice to be able to do this processing in +a machine-independent way, +but it is impossible to get all of the costs and +side effects of different choices by examining the parse tree. +.LP +Most of the code in the registerization pass is machine-independent. +The major machine-dependency is in +examining a machine instruction to ask if it sets or references +a variable. +.NH 2 +Machine code optimization +.LP +The next pass walks the machine code +for opportunistic optimizations. +For the most part, +this is highly specific to a particular +processor. +One optimization that is performed +on all of the processors is the +removal of unnecessary ``move'' +instructions. +Ironically, +most of these instructions were inserted by +the previous pass. +There are two patterns that are repetitively +matched and replaced until no more matches are +found. +The first tries to remove ``move'' instructions +by relabeling variables. +.LP +When a ``move'' instruction is encountered, +if the destination variable is set before the +source variable is referenced, +then all of the references to the destination +variable can be renamed to the source and the ``move'' +can be deleted. +This transformation uses the reverse data flow +set up in the previous pass. +.LP +An example of this pattern is depicted in the following +table. +The pattern is in the left column and the +replacement action is in the right column. +.DS +.CW +.ta .1i .6i 1.6i 2.1i 2.6i + MOVE a->b \fR(remove)\fP +.R + (sequence with no mention of \f(CWa\fP) +.CW + USE b USE a +.R + (sequence with no mention of \f(CWa\fP) +.CW + SET b SET b +.R +.DE +.LP +Experiments have shown that it is marginally +worthwhile to rename uses of the destination variable +with uses of the source variable up to +the first use of the source variable. +.LP +The second transform will do relabeling +without deleting instructions. +When a ``move'' instruction is encountered, +if the source variable has been set prior +to the use of the destination variable +then all of the references to the source +variable are replaced by the destination and +the ``move'' is inverted. +Typically, +this transformation will alter two ``move'' +instructions and allow the first transformation +another chance to remove code. +This transformation uses the forward data flow +set up in the previous pass. +.LP +Again, +the following is a depiction of the transformation where +the pattern is in the left column and the +rewrite is in the right column. +.DS +.CW +.ta .1i .6i 1.6i 2.1i 2.6i + SET a SET b +.R + (sequence with no use of \f(CWb\fP) +.CW + USE a USE b +.R + (sequence with no use of \f(CWb\fP) +.CW + MOVE a->b MOVE b->a +.R +.DE +Iterating these transformations +will usually get rid of all redundant ``move'' instructions. +.LP +A problem with this organization is that the costs +of registerization calculated in the previous pass +must depend on how well this pass can detect and remove +redundant instructions. +Often, +a fine candidate for registerization is rejected +because of the cost of instructions that are later +removed. +.NH 2 +Writing the object file +.LP +The last pass walks the internal assembly language +and writes the object file. +The object file is reduced in size by about a factor +of three with simple compression +techniques. +The most important aspect of the object file +format is that it is independent of the compiling machine. +All integer and floating numbers in the object +code are converted to known formats and byte +orders. +.NH +The loader +.LP +The loader is a multiple pass program that +reads object files and libraries and produces +an executable binary. +The loader also does some minimal +optimizations and code rewriting. +Many of the operations performed by the +loader are machine-dependent. +.LP +The first pass of the loader reads the +object modules into an internal data +structure that looks like binary assembly language. +As the instructions are read, +code is reordered to remove +unconditional branch instructions. +Conditional branch instructions are inverted +to prevent the insertion of unconditional branches. +The loader will also make a copy of a few instructions +to remove an unconditional branch. +.LP +The next pass allocates addresses for +all external data. +Typical of processors is the MIPS, +which can reference ±32K bytes from a +register. +The loader allocates the register +.CW R30 +as the static pointer. +The value placed in +.CW R30 +is the base of the data segment plus 32K. +It is then cheap to reference all data in the +first 64K of the data segment. +External variables are allocated to +the data segment +with the smallest variables allocated first. +If all of the data cannot fit into the first +64K of the data segment, +then usually only a few large arrays +need more expensive addressing modes. +.LP +For the MIPS processor, +the loader makes a pass over the internal +structures, +exchanging instructions to try +to fill ``delay slots'' with useful work. +If a useful instruction cannot be found +to fill a delay slot, +the loader will insert +``noop'' +instructions. +This pass is very expensive and does not +do a good job. +About 40% of all instructions are in +delay slots. +About 65% of these are useful instructions and +35% are ``noops.'' +The vendor-supplied assembler does this job +more effectively, +filling about 80% +of the delay slots with useful instructions. +.LP +On the 68020 processor, +branch instructions come in a variety of +sizes depending on the relative distance +of the branch. +Thus the size of branch instructions +can be mutually dependent. +The loader uses a multiple pass algorithm +to resolve the branch lengths +[Szy78]. +Initially, all branches are assumed minimal length. +On each subsequent pass, +the branches are reassessed +and expanded if necessary. +When no more expansions occur, +the locations of the instructions in +the text segment are known. +.LP +On the MIPS processor, +all instructions are one size. +A single pass over the instructions will +determine the locations of all addresses +in the text segment. +.LP +The last pass of the loader produces the +executable binary. +A symbol table and other tables are +produced to help the debugger to +interpret the binary symbolically. +.LP +The loader places absolute source line numbers in the symbol table. +The name and absolute line number of all +.CW #include +files is also placed in the +symbol table so that the debuggers can +associate object code to source files. +.NH +Performance +.LP +The following is a table of the source size of the MIPS +compiler. +.DS +.ta .1i .6i + lines module + \0509 machine-independent headers + 1070 machine-independent YACC source + 6090 machine-independent C source + + \0545 machine-dependent headers + 6532 machine-dependent C source + + \0298 loader headers + 5215 loader C source +.DE +.LP +The following table shows timing +of a test program +that plays checkers, running on a MIPS R4000. +The test program is 26 files totaling 12600 lines of C. +The execution time does not significantly +depend on library implementation. +Since no other compiler runs on Plan 9, +the Plan 9 tests were done with the Plan 9 operating system; +the other tests were done on the vendor's operating system. +The hardware was identical in both cases. +The optimizer in the vendor's compiler +is reputed to be extremely good. +.DS +.ta .1i .9i + \0\04.49s Plan 9 \f(CWvc\fP \f(CW-N\fP compile time (opposite of \f(CW-O\fP) + \0\01.72s Plan 9 \f(CWvc\fP \f(CW-N\fP load time + 148.69s Plan 9 \f(CWvc\fP \f(CW-N\fP run time + + \015.07s Plan 9 \f(CWvc\fP compile time (\f(CW-O\fP implicit) + \0\01.66s Plan 9 \f(CWvc\fP load time + \089.96s Plan 9 \f(CWvc\fP run time + + \014.83s vendor \f(CWcc\fP compile time + \0\00.38s vendor \f(CWcc\fP load time + 104.75s vendor \f(CWcc\fP run time + + \043.59s vendor \f(CWcc\fP \f(CW-O\fP compile time + \0\00.38s vendor \f(CWcc\fP \f(CW-O\fP load time + \076.19s vendor \f(CWcc\fP \f(CW-O\fP run time + + \0\08.19s vendor \f(CWcc\fP \f(CW-O3\fP compile time + \035.97s vendor \f(CWcc\fP \f(CW-O3\fP load time + \071.16s vendor \f(CWcc\fP \f(CW-O3\fP run time +.DE +.LP +To compare the Intel compiler, +a program that is about 40% bit manipulation and +about 60% single precision floating point was +run on the same 33 MHz 486, once under Windows +compiled with the Watcom compiler, version 10.0, +in 16-bit mode and once under +Plan 9 in 32-bit mode. +The Plan 9 execution time was 27 sec while the Windows +execution time was 31 sec. +.NH +Conclusions +.LP +The new compilers compile +quickly, +load slowly, +and produce +medium quality +object code. +The compilers are relatively +portable, +requiring but a couple of weeks' work to +produce a compiler for a different computer. +For Plan 9, +where we needed several compilers +with specialized features and +our own object formats, +this project was indispensable. +It is also necessary for us to +be able to freely distribute our compilers +with the Plan 9 distribution. +.LP +Two problems have come up in retrospect. +The first has to do with the +division of labor between compiler and loader. +Plan 9 runs on multi-processors and as such +compilations are often done in parallel. +Unfortunately, +all compilations must be complete before loading +can begin. +The load is then single-threaded. +With this model, +any shift of work from compile to load +results in a significant increase in real time. +The same is true of libraries that are compiled +infrequently and loaded often. +In the future, +we may try to put some of the loader work +back into the compiler. +.LP +The second problem comes from +the various optimizations performed over several +passes. +Often optimizations in different passes depend +on each other. +Iterating the passes could compromise efficiency, +or even loop. +We see no real solution to this problem. +.NH +References +.LP +[Aho87] A. V. Aho, R. Sethi, and J. D. Ullman, +.I +Compilers \- Principles, Techniques, and Tools, +.R +Addison Wesley, +Reading, MA, +1987. +.LP +[ANSI90] \f2American National Standard for Information Systems \- +Programming Language C\f1, American National Standards Institute, Inc., +New York, 1990. +.LP +[Dav91] J. W. Davidson and D. B. Whalley, +``Methods for Saving and Restoring Register Values across Function Calls'', +.I +Software\-Practice and Experience, +.R +Vol 21(2), pp. 149-165, February 1991. +.LP +[Joh79] S. C. Johnson, +``YACC \- Yet Another Compiler Compiler'', +.I +UNIX Programmer's Manual, Seventh Ed., Vol. 2A, +.R +AT&T Bell Laboratories, +Murray Hill, NJ, +1979. +.LP +[Set70] R. Sethi and J. D. Ullman, +``The Generation of Optimal Code for Arithmetic Expressions'', +.I +Journal of the ACM, +.R +Vol 17(4), pp. 715-728, 1970. +.LP +[Szy78] T. G. Szymanski, +``Assembling Code for Machines with Span-dependent Instructions'', +.I +Communications of the ACM, +.R +Vol 21(4), pp. 300-308, 1978. diff --git a/doc/compiler.pdf b/doc/compiler.pdf Binary files differnew file mode 100644 index 00000000..1ddea746 --- /dev/null +++ b/doc/compiler.pdf diff --git a/doc/descent/descent.ms b/doc/descent/descent.ms new file mode 100644 index 00000000..7132d8cd --- /dev/null +++ b/doc/descent/descent.ms @@ -0,0 +1,2056 @@ +.de EX +.nr x \\$1v +\\!h0c n \\nx 0 +.. +.de FG \" start figure caption: .FG filename.ps verticalsize +.KF +.BP \\$1 \\$2 +.sp .5v +.EX \\$2v +.ps -1 +.vs -1 +.. +.de fg \" end figure caption (yes, it is clumsy) +.ps +.vs +.br +.KE +.. +.TL +A Descent into Limbo +.AU +Brian W. Kernighan +.AI +bwk@bell-labs.com +.br +Revised April 2005 by Vita Nuova +.AB +.DS B +.ps -2 +.vs -1 +``If, reader, you are slow now to believe +What I shall tell, that is no cause for wonder, +For I who saw it hardly can accept it.'' +.ft R + Dante Alighieri, \fIInferno\fP, Canto XXV. +.ps +2 +.vs +1 +.DE +.LP +Limbo is a new programming language, designed by +Sean Dorward, Phil Winterbottom, and Rob Pike. +Limbo borrows from, among other things, +C (expression syntax and control flow), +Pascal (declarations), +Winterbottom's Alef (abstract data types and channels), +and Hoare's CSP and Pike's Newsqueak (processes). +Limbo is strongly typed, provides automatic garbage collection, +supports only very restricted pointers, +and compiles into machine-independent byte code for execution on +a virtual machine. +.LP +This paper is a brief introduction to Limbo. +Since Limbo is an integral part of the Inferno system, +the examples here illustrate not only +the language but also a certain amount about how to write +programs to run within Inferno. +.AE +.NH 1 +Introduction +.LP +This document is a quick look at the basics +of Limbo; it is not a replacement for the reference manual. +The first section is a short overview of +concepts and constructs; +subsequent sections illustrate the language with examples. +Although Limbo is intended to be used in Inferno, +which emphasizes networking and graphical interfaces, +the discussion here begins with standard text-manipulation +examples, since they require less background to understand. +.SH +Modules: +.LP +A Limbo program is a set of modules that cooperate +to perform a task. +In source form, a module consists of a +.CW "module" +declaration that specifies the public interface \- the functions, +abstract data types, +and constants that the module makes visible to other modules \- +and an implementation that provides the actual code. +By convention, the module declaration is usually placed in a separate +.CW ".m" +file so it can be included by other modules, +and the implementation is stored in a +.CW ".b" +file. +Modules may have multiple implementations, +each in a separate implementation file. +.LP +Modules are always loaded dynamically, at run time: the Limbo +.CW "load" +operator fetches the code and performs run-time type checking. +Once a module has been loaded, its functions can be called. +Several instances of the same module type can be in use at once, +with possibly different implementations. +.LP +Limbo is strongly typed; programs are checked at compile time, +and further when modules are loaded. +The Limbo compiler compiles each source file into a +machine-independent byte-coded +.CW ".dis" +file that can be loaded at run time. +.SH +Functions and variables: +.LP +Functions are associated with specific modules, either directly or +as members of abstract data types within a module. +Functions are visible outside their module only +if they are part of the module interface. +If the target module is loaded, specific names +can be used in a qualified form like +.CW "sys->print" +or without the qualifier if imported with an explicit +.CW "import" +statement. +.LP +Besides normal block structure within functions, +variables may have global scope within a module; +module data can be accessed via the module pointer. +.SH +Data: +.LP +The numeric types are: +.RS +.TS +lf(CW) lf(R)w(3i) . +byte unsigned, 8 bits +int signed, 32 bits +big signed, 64 bits +real IEEE long float, 64 bits +.TE +.RE +The size and signedness of integral types are +as specified above, and will be the same everywhere. +Character constants are enclosed in single quotes +and may use escapes like +.CW "'\en'" +or +.CW "'\eudddd'" , +but the characters themselves +are in Unicode and have type +.CW "int" . +There is no enumeration type, but there is a +.CW "con" +declaration that creates a named constant, and a special +.CW "iota" +operation that can be used to generate unique values. +.LP +Limbo also provides +Unicode strings, +arrays of arbitrary types, +lists of arbitrary types, +tuples (in effect, unnamed structures with unnamed members of arbitrary types), +abstract data types or adt's (in effect, named structures with function +members as well as data members), +reference types (in effect, restricted pointers that can point only to adt objects), +and +typed channels (for passing objects between processes). +.LP +A channel is a mechanism for synchronized communication. +It provides a place for one process to send or receive +an object of a specific type; +the attempt to send or receive blocks until a matching receive or send +is attempted by another process. +The +.CW "alt" +statement selects randomly but fairly among channels +that are ready to read or write. +The +.CW "spawn" +statement creates a new process that, +except for its stack, shares memory with other processes. +Processes are pre-emptively scheduled by the Inferno kernel. +(Inferno processes are sometimes called ``threads'' in +other operating systems.) +.LP +Limbo performs automatic garbage collection, so there is no +need to free dynamically created objects. +Objects are deleted and their resources freed when +the last reference to them goes away. +This release of resources happens immediately +(``instant free'') for non-cyclic structures; +release of cyclic data structures might be delayed but will happen eventually. +(The language allows the programmer to ensure a given structure is non-cyclic +when required.) +.SH +Operators and expressions: +.LP +Limbo provides many of C's operators, +but not the +.CW "?:" +or +`comma' (sequential execution) operators. +Pointers, or `references', created with +.CW "ref" , +are restricted compared to C: they can only refer to adt values on the heap. +There is no +.CW "&" +(address of) operator, nor is address arithmetic possible. +Arrays are also reference types, however, +and since +array slicing is supported, that replaces +many of C's pointer constructions. +.LP +There are no implicit coercions between types, +and only a handful of explicit casts. +The numeric types +.CW "byte" , +.CW "int" , +etc., can be used to convert a numeric expression, as in +.P1 +nl := byte 10; +.P2 +and +.CW "string" +can be used as a unary operator to convert any numeric expression +to a string (in +.CW "%g" +format) and to convert an array of bytes in UTF-8 format to a Limbo +.CW string +value. +In the other direction, the cast +.CW "array of byte" +converts a string to its UTF-8 representation in an array of bytes. +.SH +Statements: +.LP +Statements and control flow in Limbo are similar to those in C. +A statement is an expression followed by a semicolon, +or a sequence of statements enclosed in braces. +The similar control flow statements are +.P1 +if (\fIexpr\fP) \fIstat\fP +if (\fIexpr\fP) \fIstat\fP else \fIstat\fP +while (\fIexpr\fP) \fIstat\fP +for (\fIexpr\fP; \fIexpr\fP; \fIexpr\fP) \fIstat\fP +do \fIstat\fP while (\fIexpr\fP) ; +return \fIexpr\fP ; +exit ; +.P2 +The +.CW "exit" +statement terminates a process and frees its resources. +There is also a +.CW "case" +statement analogous to C's +.CW "switch" , +but it differs in that it also supports string and range tests, +and more critically, control flow does not ``flow through'' one arm of the case to another +but stops without requiring an explicit +.CW break +(in that respect it is closer to Pascal's +.CW case +statement, hence the change of name). +A +.CW "break" +or +.CW "continue" +followed by a label +causes a break out of, or the next iteration of, the enclosing +construct that is labeled with the same label. +.LP +Comments begin with +.CW "#" +and extend to the end of the line. +There is no preprocessor, but an +.CW "include" +statement can be used to include source code, usually module declaration files. +.SH +Libraries: +.LP +Limbo has an extensive and growing set of standard libraries, +each implemented as a module. +A handful of these +(notably +.CW "Sys" , +.CW "Draw" , +and +.CW "Tk" ) +are included in the Inferno kernel because they will be +needed to support almost any Limbo program. +Among the others are +.CW "Bufio" , +a buffered I/O package based on Plan 9's Bio; +.CW "Regex" , +for regular expressions; +and +.CW "Math" , +for mathematical functions. +Some of the examples that follow provide the sort +of functionality that might be a suitable module. +.NH 1 +Examples +.LP +The examples in this section are each complete, in the sense that they +will run as presented; I have tried to avoid code fragments +that merely illustrate syntax. +.NH 2 +Hello, World +.LP +The first example is the traditional ``hello, world'', +in the file +.CW "hello.b" : +.P1 +implement Hello; + +include "sys.m"; + sys: Sys; +include "draw.m"; + +Hello: module +{ + init: fn(ctxt: ref Draw->Context, args: list of string); +}; + +init(ctxt: ref Draw->Context, args: list of string) +{ + sys = load Sys Sys->PATH; + sys->print("hello, world\en"); +} +.P2 +An implementation file implements a single module, +named in the +.CW "implement" +declaration at the top of the file. +The two +.CW "include" +lines copy interface definitions from two other modules, +.CW "Sys" +(which describes a variety of system functions like +.CW "print" ), +and +.CW "Draw" +(which describes a variety of graphics types and functions, +only one of which, +.CW "Context" , +is used here). +.LP +The +.CW "module" +declaration defines the external interface that this module +presents to the rest of the world. +In this case, it's a single function named +.CW "init" . +Since this module is to be called from a command interpreter +(shell), by convention its +.CW "init" +function takes two arguments, +the graphical context +and a list of strings, the command-line arguments, +though neither is used here. +This is like +.CW "main" +in a C program. +Essentially all of the other examples begin with this standard code. +Commands are unusual, though, in that a command's module declaration +appears in the same file as its implementation. +.LP +Most modules have a more extensive set of declarations; for example, +.CW "draw.m" +is 298 lines of constants, function prototypes, and +type declarations for graphics types like +.CW "Point" +and +.CW "Rect" , +and +.CW "sys.m" +is 160 lines of declarations for functions like +.CW "open" , +.CW "read" , +and +.CW "print" . +Most module declarations are therefore stored in separate files, +conventionally suffixed with +.CW ".m" , +so they can be included in other modules. +The system library module declaration files are collected in the +.CW module +directory at the root of the Inferno source tree. +Modules that are components of a single program are typically +stored in that program's source directory. +.LP +The last few lines of +.CW "hello.b" +are the implementation of the +.CW "init" +function, which loads the +.CW "Sys" +module, then calls its +.CW "print" +function. +By convention, each module declaration includes a pathname constant +that points to the code for the module; this is the second parameter +.CW "Sys->PATH" +of the +.CW "load" +statement. +Note that the +.CW Draw +module is not loaded because none of its functions is used, but +it is included to define the type +.CW Draw->Context . +.SH +Compiling and Running Limbo Programs +.LP +With this much of the language described, +we can compile and run this program. +On Unix or Windows, the command +.P1 +$ limbo -g hello.b +.P2 +creates +.CW "hello.dis" , +a byte-coded version of the program for the Dis +virtual machine. +The +.CW "-g" +argument adds a symbol table, useful for subsequent debugging. +(Another common option is +.CW -w , +which causes the compiler to produce helpful warnings about possible errors.) +The program can then be run as +.CW "hello" +in Inferno; this shows execution under the Inferno emulator +on a Unix system: +.P1 +$ limbo -g hello.b +$ emu +; /usr/bwk/hello +hello, world +; +.P2 +From within Inferno, it's also possible to run a +program by selecting it from a menu. +In any case, as the program runs, it loads as necessary other modules that it uses. +.NH 2 +A Graphical "Hello World" +.LP +The following module creates and displays a window containing only +a button with the label ``hello, world'' as shown in the screen shot in Figure 1. +.P1 +implement Hello2; + +include "sys.m"; + sys: Sys; +include "draw.m"; + draw: Draw; +include "tk.m"; + tk: Tk; +include "tkclient.m"; + tkclient: Tkclient; + +Hello2: module +{ + init: fn(ctxt: ref Draw->Context, args: list of string); +}; + +init(ctxt: ref Draw->Context, args: list of string) +{ + sys = load Sys Sys->PATH; + tk = load Tk Tk->PATH; + tkclient = load Tkclient Tkclient->PATH; + + tkclient->init(); + + (t, nil) := tkclient->toplevel(ctxt, "", "Hello", Tkclient->Plain); + + tk->cmd(t, "button .b -text {hello, world}"); + tk->cmd(t, "pack .b"); + tk->cmd(t, "update"); + + tkclient->onscreen(t, nil); + + sys->sleep(10000); # wait 10 seconds +} +.P2 +.FG "f1.ps" 3i +.ce +.I "Figure 1. `Hello, world' button." +.fg +This is not very exciting, but it illustrates the absolute +minimum required to get a picture on the screen. +The +.CW "Tk" +module is modeled closely after John Ousterhout's Tk interface toolkit, +but Limbo is used as the programming language instead of Tcl. +The Inferno version +is similar in functionality to the original Tk +but it does not support any Tcl constructs, +such as variables, procedures, or expression evaluation, +since all processing is done using Limbo. +There are ten functions in the +.CW "Tk" +interface, only one of which +is used here: +.CW "cmd" , +which executes a command string. +(It is the most commonly used +.CW Tk +function.) +.LP +Tk itself displays graphics and handles mouse and keyboard interaction +within a window. +There can however be many different windows on a display. +A separate window manager, +.CW wm , +multiplexes control of input and output among those windows. +The module +.CW Tkclient +provides the interface between the window manager and Tk. +Its function +.CW "toplevel" , +used above, +makes a top-level window and returns a reference to it, for subsequent use by Tk. +The contents of the window are prepared by calls to +.CW tk->cmd +before the window is finally displayed by the call to +.CW onscreen . +(The second parameter to +.CW onscreen , +a string, +controls the position and style of window; +here we take the default by making that +.CW nil .) +.LP +Note that +.CW Tkclient +must also be explicitly initialized by calling its +.CW init +function after loading. +This is a common convention, although some modules do +not require it (typically those built in +to the system, such as +.CW Sys +or +.CW Tk ). +.LP +The +.CW "sleep" +delays exit for 10 seconds so the button can be seen. +If you try to interact with the window, for instance by pressing the button, +you will see no response. +That is because the program has not done what is required to receive mouse or keyboard input in the window. +In a real application, some action would also be bound to pressing the button. +Such actions are handled by setting up a connection (a `channel') from +the Tk module to one's own code, and processing the +messages (`events') that appear on this channel. +The Tk module and its interface to the window manager +is explained in more detail later, +as are a couple of other constructions, +after we have introduced processes and channels. +.NH 2 +Echo +.LP +The next example, +.CW "echo" , +prints its command-line arguments. +Declarations are the same as in the first +example, and have been omitted. +.P1 +# declarations omitted... + +init(ctxt: ref Draw->Context, args: list of string) +{ + sys = load Sys Sys->PATH; + + args = tl args; # skip over program name + for (s := ""; args != nil; args = tl args) + s += " " + hd args; + if (s != "") # something was stored in s + sys->print("%s\en", s[1:]); +} +.P2 +The arguments are stored in a +.CW "list" . +Lists may be of any type; +.CW "args" +is a +.CW "list" +.CW "of" +.CW "string" . +There are three list operators: +.CW "hd" +and +.CW "tl" +return the head and tail of a list, and +.CW "::" +adds a new element to the head. +In this example, the +.CW "for" +loop walks along the +.CW "args" +list until the end, +printing the head element +.CW "hd args" ), ( +then advancing +.CW "args = tl args" ). ( +.LP +The value +.CW "nil" +is the ``undefined'' or ``explicitly empty'' value +for non-numeric types. +.LP +The operator +.CW ":=" +combines the declaration of a variable and assignment of a value to it. +The type of the variable on the left of +.CW ":=" +is the type +of the expression on the right. +Thus, the expression +.P1 +s := "" +.P2 +in the +.CW "for" +statement +declares a string +.CW "s" +and initializes it to empty; +if after the loop, +.CW "s" +is not empty, +something has been written in it. +By the way, there is no distinction between the values +.CW "nil" +and +\f5""\fP +for strings. +.LP +The +.CW "+" +and +.CW "+=" +operators concatenate strings. +The expression +.CW "s[1:]" +is a +.I slice +of the string +.CW "s" +that starts at index 1 +(the second character of the string) and goes +to the end; this excludes the unwanted +blank at the beginning of +.CW "s" . +.NH 2 +Word Count +.LP +The word count program +.CW "wc" +reads its standard input +and counts the number of lines, words, and characters. +Declarations have again been omitted. +.P1 +# declarations omitted... + +init(nil: ref Draw->Context, args: list of string) +{ + sys = load Sys Sys->PATH; + buf := array[1] of byte; + + stdin := sys->fildes(0); + + OUT: con 0; + IN: con 1; + + state := OUT; + nl := 0; nw := 0; nc := 0; + for (;;) { + n := sys->read(stdin, buf, 1); + if (n <= 0) + break; + c := int buf[0]; + nc++; + if (c == '\en') + nl++; + if (c == ' ' || c == '\et' || c == '\en') + state = OUT; + else if (state == OUT) { + state = IN; + nw++; + } + } + sys->print("%d %d %d\en", nl, nw, nc); +} +.P2 +.LP +This program contains several instances of the +.CW ":=" +operator. +For example, the line +.P1 + nl := 0; nw := 0; nc := 0; +.P2 +declares three integer variables +and assigns zero to each. +.LP +A Limbo program starts with three open files for standard +input, standard output, and standard error, as in Unix. +The line +.P1 + stdin := sys->fildes(0); +.P2 +declares a variable +.CW "stdin" +and assigns the corresponding file descriptor to it. +The type of +.CW "stdin" +is whatever the type of +.CW "sys->fildes(0)" +is, and it's possible to get by without +ever knowing the name of that type. +(We will return to this shortly.) +.NE 3v +.LP +The lines +.P1 + OUT: con 0; + IN: con 1; +.P2 +declare two integer constants with values zero and one. +There is no +.CW "enum" +type in Limbo; the +.CW "con" +declaration is the closest equivalent. +When the values are arbitrary, a different form is normally used: +.P1 + OUT, IN: con iota; +.P2 +The operator +.CW "iota" , +when used in +.CW con +declarations will produce the sequence of values 0, 1, ...., +one value in turn for each name declared in the same declaration. +It can appear in more complex expressions: +.P1 + M1, M2, M4, M8: con 1 << iota; + N1, N3, N5, N7: con (2*iota)+1; +.P2 +The first example generates a set of bitmask values; the second generates a +sequence of odd numbers. +.LP +Given the declarations of +.CW "IN" +and +.CW "OUT" , +the line +.P1 + state := OUT; +.P2 +declares +.CW "state" +to be an integer with initial value zero. +.LP +The line +.P1 + buf := array[1] of byte; +.P2 +declares +.CW "buf" +to be a one-element array of +.CW "byte" s. +Arrays are indexed from zero, so +.CW "buf[0]" +is the only element. +Arrays in Limbo are dynamic, so this array is created at +the point of the declaration. +An alternative would be to declare the array and +create it in separate statements: +.P1 + buf : array of byte; # no size at declaration + + buf = array[1] of byte; # size needed at creation +.P2 +.LP +Limbo does no automatic coercions between types, +so an explicit coercion is required to convert the +single byte read from +.CW "stdin" +into an +.CW "int" +that can be used in subsequent comparisons with +.CW "int" 's; +this is done by the line +.P1 + c := int buf[0]; +.P2 +which declares +.CW "c" +and assigns the integer value of the input byte to it. +.NH 2 +Word Count Version 2 +.LP +The word count program above tacitly assumes that its input is +in the ASCII subset of Unicode, since it reads +input one byte at a time instead of one Unicode character +at a time. +If the input contains any multi-byte Unicode characters, +this code is plain wrong. +The assignment to +.CW "c" +is a specific example: the integer value of the first byte +of a multi-byte Unicode character is not the character. +.LP +There are several ways to address this shortcoming. +Among the possibilities are +rewriting to use the +.CW "Bufio" +module, which does string I/O, +or checking each input byte sequence to see if it is +a multi-byte character. +The second version of word counting uses +.CW "Bufio" . +This example will also illustrate rules for accessing objects +within modules. +.P1 +# declarations omitted... + +include "bufio.m"; + bufio: Bufio; + Iobuf: import bufio; + +init(nil: ref Draw->Context, nil: list of string) +{ + sys = load Sys Sys->PATH; + bufio = load Bufio Bufio->PATH; + if (bufio == nil) { + sys->fprint(sys->fildes(2), "wc: can't load %s: %r\en", Bufio->PATH); + raise "fail:load"; + } + + stdin := sys->fildes(0); + iob := bufio->fopen(stdin, bufio->OREAD); + if (iob == nil) { + sys->fprint(sys->fildes(2), "wc: can't open stdin: %r\en"); + raise "fail:open"; + } + + OUT, IN: con iota; + + state := OUT; + nl := big 0; nw := big 0; nc := big 0; + for (;;) { + c := iob.getc(); + if (c == Bufio->EOF) + break; + nc++; + if (c == '\en') + nl++; + if (c == ' ' || c == '\et' || c == '\en') + state = OUT; + else if (state == OUT) { + state = IN; + nw++; + } + } + sys->print("%bd %bd %bd\en", nl, nw, nc); +} +.P2 +The lines +.P1 +include "bufio.m"; + bufio: Bufio; +.P2 +include the declarations from +.CW "bufio.m" +and declare a variable +.CW "bufio" +that will serve as a handle when we load an implementation of the +.CW "Bufio" +module. +(The use of a module's type in lower case as the name of a loaded instance is a common convention in Limbo programs.) +With this handle, we can +refer to the functions and types +the module defines, which are in the file +.CW "/usr/inferno/module/bufio.m" +(the full name might be different on your system). +Parts of this declaration are shown here: +.P1 +Bufio: module # edited to fit your screen +{ + PATH: con "/dis/bufio.dis"; + EOF: con -1; + Iobuf: adt { + fd: ref Sys->FD; # the file + buffer: array of byte; # the buffer + # other variables omitted + getc: fn(b: self ref Iobuf) : int; + gets: fn(b: self ref Iobuf, sep: int) : string; + close: fn(b: self ref Iobuf); + }; + open: fn(name: string, mode: int) : ref Iobuf; + fopen: fn(fd: ref Sys->FD, mode: int) : ref Iobuf; +}; +.P2 +.LP +The +.CW "bufio" +module defines +.CW "open" +and +.CW "fopen" +functions that return references to an +.CW "Iobuf" ; +this is much like a +.CW "FILE*" +in the C standard I/O library. +A reference is necessary so that all uses +refer to the same entity, the object maintained by the module. +.LP +Given the name of a module (e.g., +.CW "Bufio" ), +how do we refer to its contents? +It is always possible to use fully-qualified names, +and the +.CW "import" +statement permits certain abbreviations. +We must also distinguish between the name of the module itself +and a specific implementation returned by +.CW "load" , +such as +.CW "bufio" . +.LP +The fully-qualified name of a type or constant from a module +is +.P1 +\fIModulename\fP->\fIname\fP +.P2 +as in +.CW "Bufio->Iobuf" +or +.CW "Bufio->EOF" . +To refer to members of an adt or functions or variables from a module, however, +it is necessary to use a module value instead of a module name: +although the interface +is always the same, the implementations of different instances +of a module will be different, and we must refer to a specific +implementation. +A fully-qualified name is +.P1 +\fImoduleval\fP->\fIfunctionname\fP +\fImoduleval\fP->\fIvariablename\fP +\fImoduleval\fP->\fIadtname\fP.\fImembername\fP +.P2 +where adt members can be variables or functions. +Thus: +.P1 +iob: ref bufio->Iobuf; +... +bufio->open(...) +bufio->iob.getc() +bufio->iob.fd +.P2 +It is also legal to refer to module types, constants, and variables +with a module handle, as in +.CW "bufio->EOF" . +.LP +An +.CW "import" +statement makes a specific list of names from +a module accessible without need for a fully-qualified name. +Each name must be imported explicitly, and adt member names +can not be imported. +Thus, the line +.P1 +Iobuf: import bufio; +.P2 +imports the adt name +.CW "Iobuf" , +which means that functions within that adt (like +.CW "getc)" +can be used +without module qualification, i.e., without +.CW "bufio->" . +(It is still necessary to say +.CW "iob.getc()" +for reasons given below.) +In all cases, imported names must be unique. +.LP +The second parameter of +.CW "load" +is a string giving the location of the module implementation, +typically a +.CW ".dis" +file. +(The string need not be static.) +Some modules are part of the system; +these have location names that begin with +.CW "$" +but are otherwise the same for users. +By convention, modules include a constant called +.CW "PATH" +that points to their default location. +.LP +The call to +.CW "bufio->fopen" +attaches the I/O buffer to the already open file +.CW "stdin" ; +this is rather like +.CW "freopen" +in +.CW "stdio" . +.LP +The function +.CW "iob.getc" +returns the next Unicode character, +or +.CW "bufio->EOF" +if end of file was encountered. +.LP +A close look at the calls to +.CW "sys->print" +shows a new format conversion character, +.CW "%r" , +for which there is no corresponding argument in the +expression list. +The value of +.CW "%r" +is the text of the most recent system error message. +.LP +Several other small changes were made as realistic examples: +it keeps the counts as +.CW big +to cope with larger files (hence the use of +.CW %bd +as the output format); +it prints diagnostics on the standard error stream, +.CW sys->fildes(2) , +using +.CW sys->fprint , +a variant of +.CW sys->print +that takes an explicit file descriptor; +and it returns an error status to its caller (typically the shell) by +raising an exception. +.NH 2 +An Associative Array Module +.LP +This section describes a module that implements a conventional +associative array (a hash table +pointing to chained lists of name-value strings). +This module is meant to be part of a larger program, +not a standalone program like the previous examples. +.LP +The +.CW "Hashtab" +module stores a name-value pair as a tuple of +.CW "(string," +.CW "string)" . +A tuple is a type consisting of an ordered collection +of objects, each with its own type. +The hash table implementation uses several different tuples. +.LP +The hash table module defines a type to hold the +data, using an +.CW "adt" +declaration. +An adt defines a type and optionally a set of functions +that manipulate an object of that type. +Since it provides only the ability to group variables and functions, +it is like a really slimmed-down version of a C++ class, +or a slightly fancier C +.CW "struct" . +In particular, an adt does not provide information hiding +(all member names are visible if the adt itself is visible), +does not support inheritance, +and has no constructors, destructors or overloaded method names. +It is different from C or C++, however: when an adt is declared by a +.CW module +declaration, the adt's implementation (the bodies of its functions) +will be defined by the module's implementation, and there can be more than one. +To create an instance of an adt, +.P1 +\fIadtvar\fP := \fIadtname\fP(\fIlist of values for all members, in order\fP); +\fIadtvar\fP := ref \fIadtname\fP(\fIlist of values for all members, in order\fP); +.P2 +Technically these are casts, from tuple to adt; +that is, the adt is created from a tuple that +specifies all of its members in order. +.LP +The +.CW "Hashtab" +module contains an +.CW "adt" +declaration for a type +.CW "Table" ; +the operations are a function +.CW "alloc" +for initial allocation +(in effect a constructor), +a hash function, and methods to add and look up elements by name. +Here is the module declaration, which is contained in file +.CW "hashtab.m" : +.nr dT 4 +.nr dP \n(dP+1 +.P1 +Hashtab: module +{ + PATH: con "/usr/bwk/hashtab.dis"; # temporary name + + Table: adt { + tab: array of list of (string, string); + + alloc: fn(n: int) : ref Table; + + hash: fn(ht: self ref Table, name: string) : int; + add: fn(ht: self ref Table, name: string, val: string); + lookup: fn(ht: self ref Table, name: string) : (int, string); + }; +}; +.P2 +.nr dT 8 +.nr dP \n(dP-1 +The implementation is in file +.CW "hashtab.b" : +.P1 +implement Hashtab; + +include "hashtab.m"; + +Table.alloc(n: int) : ref Table +{ + return ref Table(array[n] of list of (string,string)); +} + +Table.hash(ht: self ref Table, s: string) : int +{ + h := 0; + for (i := 0; i < len s; i++) + h = (h << 1) ^ int s[i]; + h %= len ht.tab; + if (h < 0) + h += len ht.tab; + return h; +} + +Table.add(ht: self ref Table, name: string, val: string) +{ + h := ht.hash(name); + for (p := ht.tab[h]; p != nil; p = tl p) { + (tname, nil) := hd p; + if (tname == name) { + # illegal: hd p = (tname, val); + return; + } + } + ht.tab[h] = (name, val) :: ht.tab[h]; +} + +Table.lookup(ht: self ref Table, name: string) : (int, string) +{ + h := ht.hash(name); + for (p := ht.tab[h]; p != nil; p = tl p) { + (tname, tval) := hd p; + if (tname == name) + return (1, tval); + } + return (0, ""); +} + +.P2 +This is intentionally simple-minded, to focus on the language +rather than efficiency or flexibility. +The function +.CW "Table.alloc" +creates and returns a +.CW "Table" +with a specified size and an array of elements, +each of which is a list of +.CW "(string," +.CW "string)" . +.LP +The +.CW "hash" +function is trivial; the only interesting point +is the +.CW "len" +operator, which returns the number of items in a string, array or list. +For a string, +.CW "len" +.CW "s" +is the number of Unicode characters. +.LP +The +.CW "self" +declaration says that the first +argument of every call of this function is implicit, and refers to the +value itself; this argument does not appear in the actual parameter list at any call site. +.CW "Self" +is similar to +.CW "this" +in C++. +.LP +The +.CW "lookup" +function searches down the appropriate list for +an instance of the +.CW "name" +argument. +If a match is found, +.CW "lookup" +returns a tuple consisting of 1 and the value field; +if no match is found, it returns a tuple of 0 and an empty string. +These return types match the function return type, +.CW "(int," +.CW "string)" . +.LP +The line +.P1 + (tname, tval) := hd p; +.P2 +shows a tuple on the left side of a declaration-assignment. +This splits the pair of strings referred to by +.CW "hd" +.CW "p" +into components and assigns them to the newly declared variables +.CW "tname" +and +.CW "tval" . +.LP +The +.CW "add" +function is similar; +it searches the right list for an instance of +the name. +If none is found, +.P1 + ht.tab[h] = (name, val) :: ht.tab[h]; +.P2 +combines the name and value into a tuple, then uses +.CW "::" +to stick it on the front of the proper list. +.LP +The line +.P1 + (tname, nil) := hd p; +.P2 +in the loop body is a less obvious use of a tuple. +In this case, only the first component, the name, +is assigned, to a variable +.CW "tname" +that is declared here. +The other component is ``assigned'' to +.CW "nil" , +which causes it to be ignored. +.LP +The line +.P1 + # illegal: hd p = (tname, val); +.P2 +is commented out because it's illegal: +Limbo does not permit the assignment of a new name-value +to a list element; +list elements are immutable. +.LP +To create a new +.CW "Table" , +add some values, then retrieve one, we can write: +.P1 + nvtab = Table.alloc(101); # make a Table + + nvtab.add("Rob", "Pike"); + nvtab.add("Howard", "Trickey"); + (p, phil) := nvtab.lookup("Phil"); + (q, sean) := nvtab.lookup("Sean"); +.P2 +Note that the +.CW "ref" +.CW "Table" +argument does not appear in these calls; +the +.CW "self" +mechanism renders it unnecessary. +Remember that a module using +.CW Table +must +.CW import +it from some instance of +.CW Hashtab , +or qualify all references to it by a module value. +.NH 2 +An AWK-like Input Module +.LP +This example presents a simple module based on Awk's input mechanism: +it reads input a line at a time from a list of of files, +splits each line into an array of +.CW "NF+1" +strings (the original input line and the individual fields), and +sets +.CW "NF" , +.CW "NR" , +and +.CW "FILENAME" . +It comes in the usual two parts, a module: +.P1 +.nr dP \n(dP+1 +.nr dT 4 +Awk: module +{ + PATH: con "/usr/bwk/awk.dis"; + + init: fn(args: list of string); + getline: fn() : array of string; + NR: fn() : int; + NF: fn() : int; + FILENAME: fn() : string; +}; +.P2 +.nr dP \n(dP-1 +.nr dT 8 +and an implementation: +.nr dP \n(dP+1 +.nr dT 4 +.P1 +implement Awk; + +include "sys.m"; + sys: Sys; +include "bufio.m"; + bufio: Bufio; +Iobuf: import bufio; + iobuf: ref Iobuf; + +include "awk.m"; + +_NR: int; +_NF: int; +_FILENAME: string; +args: list of string; + +.P3 +init(av: list of string) +{ + args = tl av; + if (len args == 0) # no args => stdin + args = "-" :: nil; + + sys = load Sys Sys->PATH; + bufio = load Bufio Bufio->PATH; +} + +.P3 +getline() : array of string +{ + t := array[100] of string; + fl: list of string; + + top: + while (args != nil) { + if (_FILENAME == nil) { # advance to next file + _FILENAME = hd args; + if (_FILENAME == "-") + iobuf = bufio->fopen(sys->fildes(0), bufio->OREAD); + else + iobuf = bufio->open(_FILENAME, bufio->OREAD); + if (iobuf == nil) { + sys->fprint(sys->fildes(2), "can't open %s: %r\en", _FILENAME); + args = nil; + return nil; + } + } + +.P3 + s := iobuf.gets('\en'); + if (s == nil) { + iobuf.close(); + _FILENAME = nil; + args = tl args; + continue top; + } + +.P3 + t[0] = s[0:len s - 1]; + _NR++; + (_NF, fl) = sys->tokenize(t[0], " \et\en\er"); + for (i := 1; fl != nil; fl = tl fl) + t[i++] = hd fl; + return t[0:i]; + } + return nil; +} + +NR() : int { return _NR; } +NF() : int { return _NF; } +FILENAME() : string { return _FILENAME; } +.P2 +.nr dT 8 +.nr dP \n(dP-1 +Since +.CW "NR" , +.CW "NF" +and +.CW "FILENAME" +should not be modified by users, they +are accessed as functions; the actual variables have +related names like +.CW "_NF" . +It would also be possible to make them ordinary variables +in the +.CW "Awk" +module, and refer to them via a module value (i.e., +.CW awk->NR ). +.LP +The +.CW "tokenize" +function in the line +.P1 + (_NF, fl) = sys->tokenize(t[0], " \et\en\er"); +.P2 +breaks the argument string +.CW "t[0]" +into tokens, as separated by the characters of the second argument. +It returns a tuple consisting of a length and a list +of tokens. +Note that this module has an +.CW "init" +function that must be called explicitly before +any of its other functions are called. +.NH 2 +A Simple Formatter +.LP +This program is a simple-minded text formatter, modeled after +.CW "fmt" , +that tests the Awk module: +.P1 +implement Fmt; + +include "sys.m"; + sys: Sys; +include "draw.m"; + +Fmt: module +{ + init: fn(nil: ref Draw->Context, args: list of string); +}; + +include "awk.m"; + awk: Awk; + getline, NF: import awk; + +out: array of string; +nout: int; +length: int; +linelen := 65; + +.P3 +init(nil: ref Draw->Context, args: list of string) +{ + t: array of string; + out = array[100] of string; + + sys = load Sys Sys->PATH; + awk = load Awk Awk->PATH; + if (awk == nil) { + sys->fprint(sys->fildes(2), "fmt: can't load %s: %r\en", + Awk->PATH); + raise "fail:load"; + } + awk->init(args); + + nout = 0; + length = 0; + while ((t = getline()) != nil) { + nf := NF(); + if (nf == 0) { + printline(); + sys->print("\en"); + } else for (i := 1; i <= nf; i++) { + if (length + len t[i] > linelen) + printline(); + out[nout++] = t[i]; + length += len t[i] + 1; + } + } + printline(); +} +.P3 +printline() +{ + if (nout == 0) + return; + for (i := 0; i < nout-1; i++) + sys->print("%s ", out[i]); + sys->print("%s\en", out[i]); + nout = 0; + length = 0; +} +.P2 +The functions +.CW "getline" +and +.CW "NF" +have been imported so their names need no qualification. +It is more usual Limbo style to use explicit references such as +.CW sys->read +or +.CW Bufio->EOF +for clarity, and import only adts (and perhaps commonly used constants). +.NH 2 +Channels and Communications +.LP +Another approach to a formatter is to use one process to fetch words and +pass them to another process that formats and prints them. +This is easily done with a channel, as in this +alternative version: +.P1 +# declarations omitted... + +WORD, BREAK, EOF: con iota; +wds: chan of (int, string); + +init(nil: ref Draw->Context, nil: list of string) +{ + sys = load Sys Sys->PATH; + bufio = load Bufio Bufio->PATH; + + stdin := sys->fildes(0); + iob = bufio->fopen(stdin, bufio->OREAD); + + wds = chan of (int, string); + spawn getword(wds); + putword(wds); +} + +.P3 +getword(wds: chan of (int, string)) +{ + while ((s := iob.gets('\en')) != nil) { + (n, fl) := sys->tokenize(s, " \et\en"); + if (n == 0) + wds <-= (BREAK, ""); + else for ( ; fl != nil; fl = tl fl) + wds <-= (WORD, hd fl); + } + wds <-= (EOF, ""); +} + +.P3 +putword(wds: chan of (int, string)) +{ + for (length := 0;;) { + (wd, s) := <-wds; + case wd { + BREAK => + sys->print("\en\en"); + length = 0; + WORD => + if (length + len s > 65) { + sys->print("\en"); + length = 0; + } + sys->print("%s ", s); + length += len s + 1; + EOF => + sys->print("\en"); + exit; + } + } +} +.P2 +This omits declarations and error checking in the interest +of brevity. +.LP +The channel passes a tuple of +.CW "int" , ( +.CW "string" ); +the +.CW "int" +indicates what kind of string is present \- +a real word, a break caused by an empty input line, +or +.CW "EOF" . +.LP +The +.CW "spawn" +statement creates a separate process by calling the specified function; +except for its own stack, +this process shares memory with the process that spawned it. +Any synchronization between processes is handled by channels. +.LP +The operator +.CW "<-=" +sends an expression to a channel; +the operator +.CW "<-" +receives from a channel. +(Receive is combined here with +.CW ":=" +to receive a tuple, and assign its elements to newly-declared variables.) +In this example, +.CW "getword" +and +.CW "putword" +alternate, because each input word +is sent immediately on the shared channel, +and no subsequent word is processed until the previous one has been +received and printed. +.LP +The +.CW "case" +statement consists of a list of case values, +which must be string or numeric constants, followed by +.CW "=>" +and associated code. +The value +.CW "*" +(not used here) labels the default. +Multiple labels can be used, separated by the +.CW "or" +operator, +and ranges of values can appear delimited by +.CW "to" , +as in +.P1 + 'a' to 'z' or 'A' to 'Z' => +.P2 +Remember that control does not flow from one case arm to the next, unlike C, +thus no +.CW break +statements appear. +.NH 2 +Tk and Interface Construction +.LP +Inferno supports a rather complete implementation of +the Tk interface toolkit developed by John Ousterhout. +In other environments, Tk is normally accessed from +Tcl programs, although there are also versions for Perl, +Scheme and other languages that call Ousterhout's C code. +The Inferno Tk was implemented from scratch, and is meant to be called +from Limbo programs. +As we saw earlier, +there is a module declaration +.CW "tk.m" +and a kernel module +.CW "Tk" . +.LP +The +.CW "Tk" +module provides all the widgets of the original Tk +with almost all their options, +the +.CW "pack" +command for geometry management, +and the +.CW "bind" +command for attaching code to user actions. +It also provides a +.CW grid +command to simplify the common case of objects arranged in a matrix or grid. +In this implementation +.CW "Tk" +commands are +written as strings and presented to one function, +.CW "tk->cmd" ; +Limbo calls this function and captures +its return value, which is the string that the Tk command produces. +For example, widget creation commands like +.CW "button" +return the widget name, so this will be the string +returned by +.CW "tk->cmd" . +.LP +There is one unconventional aspect: +the use of channels to send data and events from the interface +into the Limbo program. +To create a widget, as we saw earlier, one writes +.P1 +tk->cmd("button .b -text {Push me} -command {send cmd .bpush}"); +.P2 +to create a button +.CW ".b" +and attach a command to be executed when the button is pushed. +That command sends +the (arbitrary) string +.CW ".bpush" +on the channel named +.CW "cmd" . +The Limbo code that reads from this channel will look +for the string +.CW ".bpush" +and act accordingly. +The function +.CW "tk->namechan" +establishes a correspondence between a Limbo channel value +and a channel named as a string in the Tk module. +When an event occurs in a Tk widget with a +.CW "-command" +option, +.CW "send" +causes the string to be sent on the channel and the Limbo code +can act on it. +The program will often use a +.CW "case" +to process the strings that might appear on the channel, +particularly when the same channel is used for several widgets. +.LP +We observed earlier that +.CW Tk +provides a user interface for an application's window, +but there might be many windows on the screen. +Normally, a graphical application is meant to run under +the window manager +.CW "wm" +as a window that can be managed, +reshaped, etc. +This is done by calling functions in the module +.CW "Tkclient" , +which provides the interface between +.CW Tk +and +.CW wm . +.LP +Several functions must be called to create a window, +put it on the screen, and start giving it input. +We have already seen +.CW Tkclient 's +.CW toplevel +for window creation and +.CW onscreen +to give a window space on the screen. +Input arrives from several sources: +from the mouse and keyboard, from the +higher-level Tk widgets such as buttons, +and from the window manager itself. +In Limbo, each input source is represented by a channel, either given to the program +by the window manager, or associated with one by +.CW namechan , +as above. +.LP +This is all illustrated in the complete program below, which +implements a trivial version of Etch-a-Sketch, shown in action in Figure 2. +.FG "f3.ps" 4.8i +.ce +.I "Figure 2. Etch-a-Sketch display." +.fg +.nr dT 4 +.nr dP \n(dP+1 +.P1 +implement Etch; + +include "sys.m"; + sys: Sys; +include "draw.m"; +include "tk.m"; + tk: Tk; +include "tkclient.m"; + tkclient: Tkclient; + +Etch: module +{ + init: fn(ctxt: ref Draw->Context, args: list of string); +}; +.P3 +init(ctxt: ref Draw->Context, nil: list of string) +{ + sys = load Sys Sys->PATH; + tk = load Tk Tk->PATH; + tkclient = load Tkclient Tkclient->PATH; + + tkclient->init(); + + (t, winctl) := tkclient->toplevel(ctxt, nil, "Etch", Tkclient->Appl); + + cmd := chan of string; + tk->namechan(t, cmd, "cmd"); + tk->cmd(t, "canvas .c -height 400 -width 600 -background white"); + tk->cmd(t, "frame .f"); + tk->cmd(t, "button .f.c -text {Clear} -command {send cmd clear}"); + tk->cmd(t, "button .f.d -text {Done} -command {send cmd quit}"); + tk->cmd(t, "pack .f.c .f.d -side left -fill x -expand 1"); + tk->cmd(t, "pack .c .f -side top -fill x"); + tk->cmd(t, "bind .c <ButtonPress-1> {send cmd b1down %x %y}"); + tk->cmd(t, "bind .c <Button-1-Motion> {send cmd b1motion %x %y}"); + tk->cmd(t, "update"); + + tkclient->startinput(t, "ptr" :: "kbd" :: nil); + tkclient->onscreen(t, nil); + + lastx, lasty: int; + for (;;) { + alt { + s := <-cmd => + (nil, cmdstr) := sys->tokenize(s, " \et\en"); + case hd cmdstr { + "quit" => + exit; + "clear" => + tk->cmd(t, ".c delete all; update"); + "b1down" => + lastx = int hd tl cmdstr; + lasty = int hd tl tl cmdstr; + cstr := sys->sprint(".c create line %d %d %d %d -width 2", + lastx, lasty, lastx, lasty); + tk->cmd(t, cstr); + "b1motion" => + x := int hd tl cmdstr; + y := int hd tl tl cmdstr; + cstr := sys->sprint(".c create line %d %d %d %d -width 2", + lastx, lasty, x, y); + tk->cmd(t, cstr); + lastx = x; lasty = y; + } + + p := <-t.ctxt.ptr => + tk->pointer(t, *p); + + c := <-t.ctxt.kbd => + tk->keyboard(t, c); + + ctl := <-winctl or + ctl = <-t.ctxt.ctl or + ctl = <-t.wreq => + tkclient->wmctl(t, ctl); + } + tk->cmd(t, "update"); + } +} +.P2 +.nr dT 8 +.nr dP \n(dP-1 +.LP +The function +.CW "toplevel" +returns a tuple containing the +.CW Tk->Toplevel +for the new window and a channel upon which the +window manager will send messages for events such as +hitting the exit button. +An earlier example assigned the channel value to +.CW nil , +discarding it; here it is assigned the name +.CW winctl . +The parameters to +.CW toplevel +includes a graphics context +.CW ctxt +where the window will be created, +a configuration string (simply +.CW nil +here), +the program name (which appears in the window's ``title bar'' if it has one), +and a value +.CW Tkclient->Appl +that denotes a style of window suitable for most applications. +Note that +.CW ctxt +was one of the arguments to +.CW init . +(We do not use the argument list for +.CW init , +and so declare it as +.CW nil ). +.LP +The program creates a canvas for drawing, +a button to clear the canvas, and a button to quit. +The sequence of calls to +.CW "tk->cmd" +creates the picture and sets up the bindings. +The buttons are created with a +.CW -command +to send a suitable string on channel +.CW cmd , +and two +.CW bind +commands make the same channel the target +for messages about mouse button presses and movement in the canvas. +Note the +.CW %x +and +.CW %y +parameters in the latter case to include the mouse's coordinates in the string. +.LP +The window manager sends keyboard and mouse input +to the currently selected window using two more channels +.CW t.ctxt.kbd +and +.CW t.ctxt.ptr . +A further channel +.CW t.wreq +is used by the +.CW Tk +module itself to request changes to the window displaying +.CW Toplevel +.CW t . +.LP +Now there are many channels watching events: +one for the buttons and canvas created by the drawing program +itself, one for the mouse, +and three for window management. +We use an +.CW "alt" +statement to select from events on any of those channels. +The expression +.P1 +s := <-cmd +.P2 +declares a variable +.CW "s" +of the type carried by the channel +.CW "cmd" , +i.e., a +.CW "string" ; +when a string is received on the channel, the assignment is executed, +and the subsequent +.CW case +decodes the message. +The channel +.CW t.ctxt.ptr +carries references to +.CW Draw->Pointer +values, which give the state and position of the pointing device +(mouse or stylus). +They are handed as received to +.CW tk->pointer +for processing by Tk. +Similarly, Unicode characters from the keyboard are given to Tk using +.CW tk->keyboard . +Internally, Tk hands those values on to the various widgets for processing, possibly +resulting in messages being sent on one of the other channels. +Finally, a value received from any of the +.CW "winctl" , +.CW t.ctxt.ctl +or +.CW t.wreq +channels is passed back to +.CW Tkclient 's +.CW "wmctl" +function to be handled there. +.LP +As another example, +here is the startup code for an implementation of +Othello, adapted from a Java version +by Muffy Barkocy, Arthur van Hoff, and Ben Fry. +.nr dT 4 +.nr dP \n(dP+1 +.P1 +init(ctxt: ref Draw->Context, args: list of string) +{ + sys = load Sys Sys->PATH; + tk = load Tk Tk->PATH; + tkclient = load Tkclient Tkclient->PATH; + + sys->pctl(Sys->NEWPGRP, nil); + + tkclient->init(); +.P3 + (t, winctl) := tkclient->toplevel(ctxt, nil, "Othello", Tkclient->Appl); +.P3 + cmd := chan of string; + tk->namechan(t, cmd, "cmd"); + tk->cmd(t, "canvas .c -height 400 -width 400 -background green"); + tk->cmd(t, "frame .f"); + tk->cmd(t, "label .f.l -text {Othello?} -background white"); + tk->cmd(t, "button .f.c -text {Reset} -command {send cmd Reset}"); + tk->cmd(t, "button .f.d -text {Quit} -command {send cmd Quit}"); + tk->cmd(t, "pack .f.l .f.c .f.d -side left -fill x -expand 1"); + tk->cmd(t, "pack .c .f -side top -fill x"); + tk->cmd(t, "bind .c <ButtonRelease-1> {send cmd B1up %x %y}"); + + for (i := 1; i < 9; i++) + for (j := 1; j < 9; j++) { + coord := sys->sprint("%d %d %d %d", + SQ*i, SQ*j, SQ*(i+1), SQ*(j+1)); + tk->cmd(t, ".c create rectangle " + coord + + " -outline black -width 2"); + } + tk->cmd(t, "update"); + lasterror(t, "init"); + tkclient->startinput(t, "ptr" :: "kbd" :: nil); + tkclient->onscreen(t, nil); + + board = array[10] of {* => array[10] of int}; + score = array[10] of {* => array[10] of int}; + reinit(); +.P3 + for (;;) { + alt { + s := <- cmd => + (n, l) := sys->tokenize(s, " \et"); + case hd l { + "Quit" => + exit; + "Reset" => + reinit(); + "B1up" => + x := int hd tl l; + y := int hd tl tl l; + mouseUp(int x, int y); + } + + p := <-t.ctxt.ptr => + tk->pointer(t, *p); + + c := <-t.ctxt.kbd => + tk->keyboard(t, c); + + ctl := <-winctl or + ctl = <-t.ctxt.ctl or + ctl = <-t.wreq => + tkclient->wmctl(t, ctl); + } + } +} +.P2 +.nr dP \n(dP-1 +.nr dT 4 +.FG "f2.ps" 4.8i +.ce +.I "Figure 3. Screen shot of Inferno display showing Othello window." +.fg +.LP +If some call to the +.CW "Tk" +module results in an error, +an error string is made available in a pseudo-variable +.CW "lasterror" +maintained by +.CW "Tk" . +When this variable is read, it is reset. +The function +.CW "lasterror" +shows how to test and print this variable: +.P1 +lasterror(t: ref Tk->Toplevel, where: string) +{ + s := tk->cmd(t, "variable lasterror"); + if (s != nil) + sys->print("%s: tk error %s\en", where, s); +} +.P2 +In general, the Inferno implementation of +.CW "Tk" +does not provide variables except for a few special ones like this. +The most common instance is a variable that links +a set of radiobuttons. +.NH 2 +Acknowledgements +.LP +I am very grateful to +Steven Breitstein, +Ken Clarkson, +Sean Dorward, +Eric Grosse, +Doug McIlroy, +Rob Pike, +Jon Riecke, +Dennis Ritchie, +Howard Trickey, +Phil Winterbottom, +and +Margaret Wright +for explaining mysteries of Limbo and Inferno +and for valuable suggestions on this paper. diff --git a/doc/descent/descent.pdf b/doc/descent/descent.pdf Binary files differnew file mode 100644 index 00000000..054fb746 --- /dev/null +++ b/doc/descent/descent.pdf diff --git a/doc/dev.ms b/doc/dev.ms new file mode 100644 index 00000000..07d9e454 --- /dev/null +++ b/doc/dev.ms @@ -0,0 +1,497 @@ +.TL +Program Development under Inferno +.AU +Roger Peppé +rog@vitanuova.com +.SH +Introduction +.PP +Inferno provides a set of programs that, used in +combination, provide a powerful development environment +in which to write Limbo programs. +.I Limbo (1) +is the compiler for the Limbo language; there +are versions that run inside and outside the Inferno +environment. +.I Acme (1) +is an integrated window system and editor, and the +preferred source-code editing tool within Inferno. +The Limbo debugger, +.I wm-debug (1), +allows interactive inspection of running Limbo programs. +.I Stack (1) +allows a quick inspection of the execution stack of a +currently running process. +.SH +Getting started +.PP +This document assumes that you have already managed +to install Inferno and have managed to obtain an Inferno +window, running the Inferno window manager, +.I wm (1). +The document +\&``Installing Inferno'' in this volume has details on this. +If running within emu, it is worth giving Inferno +as large a window as possible, as it cannot be resized later. +This paper assumes that you are using a three-button mouse, as it is +not feasible to use Acme without a three-button mouse. +(if you have a two button mouse with a ``mouse wheel'', +the wheel can be used as the middle button). +The first thing to do is to get Acme going. By clicking +on the Vita Nuova logo at the bottom left of the window, +you can display a menu naming some preconfigured commands. +If this has an ``Acme'' entry, then just clicking on that entry +will start acme. If not, then click on the ``Shell'' entry, +and type +.P1 +acme +.P2 +to start it up. The Acme window should then appear, +filling most of the screen (the window manager toolbar +should still be visible). +.SH +Acme basics +.PP +For a general overview and the rationale behind Acme, see ``Acme: +A User Interface for Programmers'', elsewhere in this volume, +and for detailed documentation, see +.I acme (1). +The basics are as follows: +.PP +Acme windows are text-only and organised into columns. +A distinctive feature of Acme is that there are no graphical +title bars to windows; instead, each window (and additionally +each column, and the whole Acme window itself) has +a textual +.I tag , +which can be edited at will, and is initially primed to contain +a few appropriate commands. +.PP +An Acme command is just represented by text; any textual +command word may be executed simply by clicking with the middle +mouse button on the word. (See ``Acme mouse commands'', below). +If Acme recognizes the word that has been clicked on +as one of its internal commands (e.g. Put, Undo), then it will take the appropriate +action; otherwise it will run the text as a shell command. +(See +.I sh (1)). +.SH +Acme mouse commands +.PP +Mouse usage within Acme is somewhat more versatile +than in most other window systems. Each of the three +mouse buttons has its own action, and there are also +actions bound to +.I chords +of mouse buttons (i.e. mouse buttons depressed simultaneously). +Mouse buttons are numbered from left (1) to right (3). +Button 1 follows similar conventions to other window systems - +it selects text; a double click will select a line if at the beginning or end +of a line, or match brackets if on a bracket character, or select +a word otherwise. +Button 2, as mentioned above, executes an +Acme command; a single click with button 2 will execute +the single word under the click, otherwise the swept text +will be executed. +Button 3 is a general ``look'' operator; if the text under the +click represents a filename, then Acme will open a new +window for the file and read it in, otherwise it will search +within the current window for the next occurrence of the +text. +Clicking button 2 or button 3 on some text already selected +by button 1 causes the click to refer exactly to the text +selected, rather than gathering likely-looking characters +from around the click as is the default. +.PP +There are two mouse chord sequences which are +commonly used in Acme (and you will find that some +other programs in the system also recognise these sequences, +e.g. +.I wm-sh (1)). +They are both available once some text +has been selected by dragging the mouse with button 1, +but before the button has been released. At this point, +touching button 2 will delete the selected text and save +it in Acme's +.I snarf +buffer; clicking button 3 replaces the selected text with the contents +of the snarf buffer. Before button 1 has been released, +these two buttons reverse each other's actions, so, for +example, selecting some text with button 1, keeping button 1 +held down, then clicking button 2 and button 3 in succession, +will save the selected text in the snarf buffer while leaving the +original intact. +The following table summarises the mouse commands in +Acme: +.KS +.TS +center box; +l l . +B1 Select text. +B2 Execute text. +B3 Open file or search for text. +B1-B2 Cut text. +B1-B3 Paste text. +B2-B3 Cancel the pending B2 action. +B3-B2 Cancel the pending B3 action. +.TE +.ce +.I "Acme mouse command summary" +.KE + +.SH +Scrolling and resizing Acme windows +.PP +The scroll bars in Acme are somewhat different from +conventional scroll bars (including the scroll bars found +in other parts of Inferno). Clicking, or dragging, with +button-2 on the scrollbar acts the most like the conventional +behaviour, namely that the further down the scroll bar +you click, the further down the file you are shown. +.PP +True to form, however, Acme doesn't omit to make +the other buttons useful: button-1 and button-3 +move backwards and forwards through the file respectively. +The nearer the top of the scrollbar the mouse, the +slower the movement. Holding one of these buttons +down on the scrollbar will cause the scrolling motion +to auto-repeat, so it is easy to scroll gently through the +entire file, for instance. +.PP +The small square at the top left of each Acme window is +the handle for resizing the window. Dragging this square +from one place to another (within Acme) will move the +window to the new place. A single button click in this square +will grow the window: button 1 grows it a little bit; button 2 +grows it as much as possible without obscuring the other +window titles in the column; button 3 grows it so it covers +the whole column (all other windows in the column are +obscured). +.SH +Creating a new file +.PP +All Limbo programs are composed of +.I modules +and each module is stored in its own file. To write a Limbo +program, you need to write at least one module, +the Limbo +.I "source file" , +which will then be compiled into Dis code which can +then be run by the Inferno Virtual Machine (VM). +The first step is to decide where to store the file. +When Acme starts up, it creates a new window containing +a list of all the files in the directory in which it was started +(usually your home directory). As a consequence of the +mouse rules above, a click of button-3 on any of those +filenames in that window will open a new window +showing that file or, if it is a directory, a list of the +files and directories it contains. +.PP +An important aspect in Acme's mouse commands, is +that the command is interpreted +.I "relative to the window's current directory", +where the current directory is determined from +the filename in the window's tag. For instance, +Acme commands executed in the tag or body of +a window on the file +.CW "/usr/joebloggs/myfile.txt" +would run in the directory +.CW /usr/joebloggs . +.PP +So, to create a new file in Acme, first open the +directory in which to create the file. (If this is +your home directory, then it's probably already on the screen; +otherwise, you can just type (anywhere) the name of +the directory, and button-3 click on it. If the directory +does not exist, then no window will be created. +Then, within the directory's window or its tag, +choose a name, +.I filename , +for your file (I'll use +.CW myprog +from here on, +for explanatory convenience) +, type the text: +.P1 +New \fIfilename\fP.b +.P2 +select this text (the Escape key can also be used to highlight +text that you have just typed), and button-2 click on it. +This should create a new empty window in which you +can edit your Limbo source file. It will also create a +window giving a warning that the file does not +currently exist - you can get rid of this by clicking +with button-2 on the text +.CW Del +in the tag of that window. +.SH +Editing the source file +.PP +You can now edit text in the new window. +Type in the following program: +.P1 +implement Myprog; +include "sys.m"; + sys: Sys; +include "draw.m"; + +Myprog: module { + init: fn(nil: ref Draw->Context, argv: list of string); +}; + +init(nil: ref Draw->Context, argv: list of string) +{ + sys = load Sys Sys->PATH; + sys->print("Hello, world\en"); +} +.P2 +When typing it in, note that two new commands have appeared +in the tag of the new window: +.CW Put +and +.CW Undo . +.CW Put +saves the file; +.CW Undo +undoes the last change to the file, and successive +executions of +.CW Undo +will move further back in time. In case you move +too far back accidentally, there is also +.CW Redo , +which redoes a change that you have just undone. +Changes in the body of any window in Acme can be undone +this way. +.PP +Click with button-2 on the +.CW Put +command, and the file is now saved and ready to be +compiled. If you have problems at this point (say +Acme complains about not being able to write the +file), you have probably chosen an inappropriate +directory, one in which you do not have write permission, +in which to put the file. In this case you can change the +name of the file simply by editing its name in the window's +tag, and clicking on +.CW Put +again. +.SH +Compiling the source file +.PP +Now, you are in a position to compile the Limbo program. +Although you can execute the Limbo compiler directly +from the tag of the new file's window, it is usually more +convenient to do it from a shell window. To start a shell +window, type +.CW win '' `` +at the right of the tag of the new file's window, select +it, and click with button-2 on it. +A new window should appear showing a shell prompt (usually +.CW "; " '' `` +or +.CW "% " ''). `` +At this, you can type any of the commands mentioned +in Section 1 of the Programmer's Manual. +Note that, following Acme's usual rule, the shell has +started up in the same directory as the new file; +typing +.P1 +lc +.P2 +at the prompt will show all the files in the directory, +including hopefully the newly written Limbo file. +.PP +Type the following command to the shell: +.P1 +limbo -g myprog.b +.P2 +If you typed in the example program correctly, +then you'll get a short pause, and then another shell +prompt. This indicates a successful compilation (no +news is good news), in which case you will now have +two new files in the current directory, +.CW myprog.sbl +and +.CW myprog.dis . +The +.CW -g +option to the +.CW limbo +command directed it to produce the +.CW myprog.sbl +file, which contains symbolic information +relating the source code to the Dis executable file. +The +.CW myprog.dis +file contains the actual executable file. +At this point, if you type +.CW lc , +to get a listing of the files in the current directory, +and then click with button-2 on the +.CW myprog.dis +file, and you should see the output ``Hello, world''. +You could also just type +.CW myprog +at the shell prompt. +.PP +If you are normal, however, the above compilation +probably failed because of some mistyped characters +in the source code; and for larger newly created programs, +in my experience, this +is almost invariably the case. +If you got no errors in the above +compilation, try changing +.CW sys->print +to +.CW print , +saving the file again, +and continue with the next section. +.SH +Finding compilation errors +.PP +When the Limbo compiler finds errors, it prints +the errors, one per line, each one looking something +like the following: +.P1 +myprog.b:13: print is not declared +.P2 +This shows the filename where the error has occurred, +its line number in the file, and a description of the error. +Acme's button-3 mouse clicking makes it extremely easy +to see where in the source code the error has occurred. +Click with button-3 anywhere in the filename on the +line of the compilation error, and Acme will automatically +take the cursor to the file of that name and highlight +the correct line. +.PP +If there had been no currently appropriate open Acme +window representing the file, then a new one would +be created, and the appropriate line selected. +.PP +Edit +.CW myprog.b +until you have a program that compiles successfully +and produces the ``Hello, world'' output. +For a program as simple as this, that's all there +is to it - you now know the essential stages involved in +writing a Limbo program; there's just the small matter +of absorbing the Limbo language and familiarising +yourself with the libraries (``The Limbo Programming Language'' +elsewhere in this volume, +and +.I intro (2) +are the two essential starting points here). +.SH +Finding run-time errors +.PP +For larger programs, there is the problem of programs +that die unexpectedly with a run-time error. This +will happen when, for instance, a Limbo program uses a reference +that has not been initialised, or refers to an out-of-bounds +array element. +.PP +When a Limbo program dies with a run-time exception, +it does not go away completely, but remains hanging +around, dormant, in a +.I broken +state; the state that it was in when it died may +now be examined at leisure. To experiment with this, +edit the Myprog module above to delete the line +that loads the +.CW Sys +module +.CW "sys = load Sys" ...), ( +and recompile the program. +.PP +This time when you come to run +.CW myprog , +it will die, printing a message like: +.P1 +sh: 319 "Myprog":module not loaded +.P2 +The number +.CW 319 +is the +.I "process id" +(or just +.I pid ) +of the broken process. The command +.CW ps , +which shows all currently running processes, +can be used at this point - you will see a line like this: +.P1 + 319 245 rog broken 64K Myprog +.P2 +The first number is the pid of the process; +the second is the +.I "process group" +id of the process; the third field gives the +owner of the process; the fourth gives its state +(broken, in this case); the fifth shows the current +size of the process, and the last gives the name +of the module that the process is currently running. +.PP +The +.CW stack +command can be used to quickly find the line +at which the process has broken; type: +.P1 + stack \fIpid\fP +.P2 +where +.I pid +is the number mentioned in the ``module not loaded'' +message (319 in this case). +It produces something like the following output: +.P1 +init() myprog.b:12.1, 29 +unknown fn() Module /dis/sh.dis PC 1706 +.P2 +As usual, a quick button-3 click on the +.CW myprog.b +part of the first line takes you to the appropriate +part of the source file. The reason that the program +has died here is that, in Limbo, all external modules +must be explicitly loaded before they can be used; to +try to call an uninitialised module is an error +and causes an exception. +.SH +More sophisticated debugging +.PP +.CW Stack +is fine for getting a quick summary of the state +in which a program has died, but there are +times when such a simple post-mortem analysis +is inadequate. The +.CW wm/deb +(see +.I wm-deb\fR(1))\fP +command provides an interactive windowing +debugger for such occasions. +It runs outside Acme, +in the default window system. A convenient way +to start debugging an existing process is +to raise +.CW wm/task +(``Task Manager'' on the +main menu), select with the mouse the process +to debug, and click ``Debug''. This will start +.CW wm/deb +on that process. Before it can start, the debugger will ask +for the names of any source files that it has not been +able to find (usually this includes the source for +the shell, as the module being debugged is often +started by the shell, and so the top-level function will +be in the shell's module). +.PP +.CW Wm/deb +can be used to debug multiple threads, to inspect +the data structures in a thread, and to interactively +step through the running of a thread (single stepping). +See +.I wm-deb (1) +for details. + +\" further afield? +\" other development tools? +\" tools to come? diff --git a/doc/dev.pdf b/doc/dev.pdf Binary files differnew file mode 100644 index 00000000..66de9366 --- /dev/null +++ b/doc/dev.pdf diff --git a/doc/dis.ms b/doc/dis.ms new file mode 100644 index 00000000..be03f82d --- /dev/null +++ b/doc/dis.ms @@ -0,0 +1,1824 @@ +.so /sys/lib/tmac/tmac.uni +.TL +Dis Virtual Machine Specification +.AU +.I "Lucent Technologies Inc" +.I "30 September 1999" + +.I "Extensively revised by Vita Nuova Limited" +.I "5 June 2000, 9 January 2003" +.NH 1 +Introduction +.LP +The Dis virtual machine provides the execution environment for programs running under the Inferno operating system. The virtual machine models a CISC-like, three operand, memory-to-memory architecture. Code can either be interpreted by a C library or compiled on-the-fly into machine code for the target architecture. +.LP +This paper defines the virtual machine informally. +A separate paper by Winterbottom and Pike[2] discusses its design. +The Dis object file format is also defined here. +Literals and keywords are in +.CW typewriter +typeface. +.NH 1 +Addressing Modes +.SH +Operand Size +.LP +Operand sizes are defined as follows: a byte is 8 bits, a word or pointer is 32 bits, a float is 64 bits, a big integer is 64 bits. The operand size of each instruction is encoded explicitly by the operand code. The operand size and type are specified by the last character of the instruction mnemonic: +.IP +.TS +lf(CW) lfR . +W word, 32-bit two's complement +B byte, 8-bit unsigned +F float, 64-bit IEEE format +L big, 64-bit two's complement +P pointer +C Unicode string encoded in UTF-8 +M memory +MP memory containing pointers +.TE +.LP +Two more operand types are defined to provide `short' +types for use by languages other than Limbo: +signed 16-bit integers, called `short word' +here, and 32-bit IEEE format floating-point numbers, called `short float' or `short real' here. +Support for them is limited to conversion to and from words or floats respectively; +the instructions are marked below with a dagger (†). +.SH +Memory Organization +.LP +Memory for a thread is divided into several separate regions. The code segment stores either a decoded virtual machine instruction stream suitable for execution by the interpreter or flash compiled native machine code for the host CPU. Neither type of code segment is addressable from the instruction set. At the object code level, PC values are offsets, counted in instructions, from the beginning of the code space. +.LP +Data memory is a linear array of bytes, addressed using 32-bit pointers. Words are stored in the native representation of the host CPU. Data types larger than a byte must be stored at addresses aligned to +a multiple of the data size. A thread executing a module has access to two regions of addressable data memory. A module pointer +.CW "mp" \& ( +register) defines a region of global storage for a particular module, a frame pointer +.CW "fp" \& ( +register) defines the current activation record or frame for the thread. Frames are allocated dynamically from a stack by function call and return instructions. The stack is extended automatically from the heap. +.LP +The +.CW mp +and +.CW fp +registers cannot be addressed directly, and therefore, can be modified only by call and return instructions. +.SH +Effective Addresses +.LP +Each instruction can potentially address three operands. The source and destination operands are general, but the middle operand can use any address mode except double indirect. If the middle operand of a three address instruction is omitted, it is assumed to be the same as the destination operand. +.LP +The general operands generate an effective address from three basic modes: immediate, indirect and double indirect. The assembler syntax for each mode is: +.IP +.TS +lf(CW) lfR . +10(fp) 30-bit signed indirect from fp +20(mp) 30-bit signed indirect from mp +$0x123 30-bit signed immediate value +10(20(fp)) two 16-bit unsigned offsets double indirect from fp +10(20(mp)) two 16-bit unsigned offsets double indirect from mp +.TE +.SH +Garbage Collection +.LP +The Dis machine performs both reference counted and real time mark and sweep garbage collection. This hyrbrid approach allows code to be generated in several styles: pure reference counted, mark and sweep, or a hybrid of the two approaches. Compiler writers have the freedom to choose how specific types are handled by the machine to optimize code for performance or language implementation. Instruction selection determines which algorithm will be applied to specific types. +.LP +When using reference counting, pointers are a special operand type and should only be manipulated using the pointer instructions in order to ensure the correct functioning of the garbage collector. Every memory location that stores a pointer must be known to the interpreter so that it can be initialized and deallocated correctly. The information is transmitted in the form of type descriptors in the object module. Each type descriptor contains a bit vector for a particular type where each bit corresponds to a word in memory. Type descriptors are generated automatically by the Limbo compiler. The assembler syntax for a type descriptor is: +.P1 +desc $10, 132, "001F" +.P2 +The first parameter is the descriptor number, the second is the size in bytes, and the third a pointer map. The map contains a list of hex bytes where each byte maps eight 32 bit words. The most significant bit represents the lowest memory address. +A one bit indicates a pointer in memory. The map need not have an entry for every byte and unspecified bytes are assumed zero. +.LP +Throughout this description, the symbolic constant +.CW H +refers to a nil pointer. +.NH 1 +Instruction Set +.SH +add\fIx\fP \- Add +.P1 +Syntax: addb src1, src2, dst + addf src1, src2, dst + addw src1, src2, dst + addl src1, src2, dst +Function: dst = src1 + src2 +.P2 +.LP +The +.CW "add" +instructions compute the sum of the operands addressed by +.CW "src1" +and +.CW "src2" +and stores the result in the +.CW " dst" +operand. For +.CW "addb" +the result is truncated to eight bits. +.SH +addc \- Add strings +.P1 +Syntax: addc src1, src2, dst +Function: dst = src1 + src2 +.P2 +.LP +The +.CW "addc" +instruction concatenates the two UTF strings pointed to by +.CW " src1" +and +.CW "src2" ; +the result is placed in the pointer addressed by +.CW "dst" . +If both pointers are +.CW "H" +the result will be a zero length string rather than +.CW "H" . +.SH +alt \- Alternate between communications +.P1 +Syntax: alt src, dst +.P2 +The +.CW "alt" +instruction selects between a set of channels ready to communicate. The +.CW src +argument is the address of a structure of the following form: +.P1 +struct Alt { + int nsend; /* Number of senders */ + int nrecv; /* Number of receivers */ + struct { + Channel* c; /* Channel */ + void* val; /* Address of lval/rval */ + } entry[]; +}; +.P2 +The vector is divided into two sections; the first lists the channels ready to send values, the second lists channels either ready to receive or an array of channels each of which may be ready to receive. The counts of the sender and receiver channels are stored as the first and second words addressed by +.CW src . +An +.CW "alt" +instruction proceeds by testing each channel for readiness to communicate. A ready channel is added to a list. If the list is empty after each channel has been considered, the thread blocks at the +.CW "alt" +instruction waiting for a channel to become ready; otherwise, a channel is picked at random from the ready set. +.LP +The +.CW "alt" +instruction then uses the selected channel to perform the communication using the +.CW "val" +address as either a source for send or a destination for receive. The numeric index of the selected vector element is placed in +.CW "dst" . +.SH +and\fIx\fP \- Logical AND +.P1 +Syntax: andb src1, src2, dst + andw src1, src2, dst + andl src1, src2, dst +Function: dst = src1 & src2 +.P2 +The instructions compute the bitwise AND of the two operands addressed by +.CW "src1" +and +.CW "src2" +and stores the result in the +.CW "dst" +operand. +.SH +beq\fIx\fP \- Branch equal +.P1 +Syntax: beqb src1, src2, dst + beqc src1, src2, dst + beqf src1, src2, dst + beqw src1, src2, dst + beql src1, src2, dst +Function: if src1 == src2 then pc = dst +.P2 +If the +.CW "src1" +operand is equal to the +.CW "src2" +operand, then control is transferred to the program counter specified by the +.CW "dst" +operand. +.SH +bge\fIx\fP \- Branch greater or equal +.P1 +Syntax: bgeb src1, src2, dst + bgec src1, src2, dst + bgef src1, src2, dst + bgew src1, src2, dst + bgel src1, src2, dst +Function: if src1 >= src2 then pc = dst +.P2 +If the +.CW "src1" +operand is greater than or equal to the +.CW "src2" +operand, then control is transferred to program counter specified by the +.CW "dst" +operand. This instruction performs a signed comparison. +.SH +bgt\fIx\fP \- Branch greater +.P1 +Syntax: bgtb src1, src2, dst + bgtc src1, src2, dst + bgtf src1, src2, dst + bgtw src1, src2, dst + bgtl src1, src2, dst +Function: if src1 > src2 then pc = dst +.P2 +If the +.CW "src1" +operand is greater than the +.CW "src2" +operand, then control is transferred to the program counter specified by the +.CW "dst" +operand. This instruction performs a signed comparison. +.SH +ble\fIx\fP \- Branch less than or equal +.P1 +Syntax: bleb src1, src2, dst + blec src1, src2, dst + blef src1, src2, dst + blew src1, src2, dst + blel src1, src2, dst +Function: if src1 <= src2 then pc = dst +.P2 +If the +.CW "src1" +operand is less than or equal to the +.CW "src2" +operand, then control is transferred to the program counter specified by the +.CW "dst" +operand. This instruction performs a signed comparison. +.SH +blt\fIx\fP \- Branch less than +.P1 +Syntax: bltb src1, src2, dst + bltc src1, src2, dst + bltf src1, src2, dst + bltw src1, src2, dst + bltl src1, src2, dst +Function: if src1 < src2 then pc = dst +.P2 +If the +.CW "src1" +operand is less than the +.CW "src2" +operand, then control is transferred to the program counter specified by the +.CW "dst" +operand. +.SH +bne\fIx\fP \- Branch not equal +.P1 +Syntax: bneb src1, src2, dst + bnec src1, src2, dst + bnef src1, src2, dst + bnew src1, src2, dst + bnel src1, src2, dst +Function: if src1 != src2 then pc = dst +.P2 +If the +.CW "src1" +operand is not equal to the +.CW "src2" +operand, then control is transferred to the program counter specified by the +.CW "dst" +operand. +.SH +call \- Call local function +.P1 +Syntax: call src, dst +Function: link(src) = pc + frame(src) = fp + mod(src) = 0 + fp = src + pc = dst +.P2 +The +.CW "call" +instruction performs a function call to a routine in the same module. The +.CW "src" +argument specifies a frame created by +.CW "new" . +The current value of +.CW "pc" +is stored in link(src), the current value of +.CW "fp" +is stored in frame(src) and the module link register is set to 0. The value of +.CW "fp" +is then set to +.CW "src" +and control is transferred to the program counter specified by +.CW dst . +.SH +case \- Case compare integer and branch +.P1 +Syntax: case src, dst +Function: pc = 0..i: dst[i].pc where + dst[i].lo >= src && dst[i].hi < src +.P2 +The +.CW "case" +instruction jumps to a new location specified by a range of values. The +.CW "dst" +operand points to a table in memory containing a table of +.CW "i" +values. Each value is three words long: the first word specifies a low value, the second word specifies a high value, and the third word specifies a program counter. The first word of the table gives the number of entries. The +.CW "case" +instruction searches the table for the first matching value where the +.CW "src" +operand is greater than or equal to the low word and less than the high word. Control is transferred to the program counter stored in the first word of the matching entry. +.SH +casec \- Case compare string and branch +.P1 +Syntax: casec src, dst +Function: pc = 0..i: dst[i].pc where + dst[i].lo >= src && dst[i].hi < src +.P2 +The +.CW "casec" +instruction jumps to a new location specified by a range of string constants. The table is the same as described for the +.CW case +instruction. +.SH +cons\fIx\fP \- Allocate new list element +.P1 +Syntax: consb src, dst + consc src, dst + consf src, dst + consl src, dst + consm src, dst + consmp src, dst + consp src, dst + consw src, dst +Function: p = new(src, dst) + dst = p +.P2 +The +.CW "cons" +instructions add a new element to the head of a list. A new list element is composed from the +.CW "src" +operand and a pointer to the head of an extant list specified by +.CW "dst" . +The resulting element is stored back into +.CW "dst" . +.SH +cvtac \- Convert byte array to string +.P1 +Syntax: cvtac src, dst +Function: dst = string(src) +.P2 +The +.CW "src" +operand must be an array of bytes, which is converted into a character string and stored in +.CW "dst" . +The new string is a copy of the bytes in +.CW "src" . +.SH +cvtbw \- Convert byte to word +.P1 +Syntax: cvtbw src, dst +Function: dst = src & 0xff +.P2 +A byte is fetched from the +.CW "src" +operand extended to the size of a word and then stored into +.CW "dst" . +.SH +cvtca \- Convert string to byte array +.P1 +Syntax: cvtca src, dst +Function: dst = array(src) +.P2 +The +.CW "src" +operand must be a string which is converted into an array of bytes and stored in +.CW "dst" . +The new array is a copy of the characters in src. +.SH +cvtcf \- Convert string to real +.P1 +Syntax: cvtcf src, dst +Function: dst = (float)src +.P2 +The string addressed by the +.CW "src" +operand is converted to a floating point value and stored in the +.CW "dst" +operand. Initial white space is ignored; conversion ceases at the first character in the string that is not part of the representation of the floating point value. +.SH +cvtcl \- Convert string to big +.P1 +Syntax: cvtcl src, dst +Function: dst = (big)src +.P2 +The string addressed by the +.CW "src" +operand is converted to a big integer and stored in the +.CW "dst" +operand. Initial white space is ignored; conversion ceases at the first non-digit in the string. +.SH +cvtcw \- Convert string to word +.P1 +Syntax: cvtcw src, dst +Function: dst = (int)src +.P2 +The string addressed by the +.CW "src" +operand is converted to a word and stored in the +.CW "dst" +operand. Initial white space is ignored; after a possible sign, conversion ceases at the first non-digit in the string. +.SH +cvtfc \- Convert real to string +.P1 +Syntax: cvtfc src, dst +Function: dst = string(src) +.P2 +The floating point value addressed by the +.CW "src" +operand is converted to a string and stored in the +.CW "dst" +operand. The string is a floating point representation of the value. +.SH +cvtfw \- Convert real to word +.P1 +Syntax: cvtfw src, dst +Function: dst = (int)src +.P2 +The floating point value addressed by +.CW "src" +is converted into a word and stored into +.CW "dst" . +The floating point value is rounded to the nearest integer. +.SH +cvtfl \- Convert real to big +.P1 +Syntax: cvtfl src, dst +Function: dst = (big)src +.P2 +The floating point value addressed by +.CW "src" +is converted into a big integer and stored into +.CW "dst" . +The floating point value is rounded to the nearest integer. +.SH +cvtfr \- Convert real to short real† +.P1 +Syntax: cvtfr src, dst +Function: dst = (short float)src +.P2 +The floating point value addressed by +.CW "src" +is converted to a short (32-bit) floating point value and stored into +.CW "dst" . +The floating point value is rounded to the nearest integer. +.SH +cvtlc \- Convert big to string +.P1 +Syntax: cvtlc src, dst +Function: dst = string(src) +.P2 +The big integer addressed by the +.CW "src" +operand is converted to a string and stored in the +.CW "dst" +operand. The string is the decimal representation of the big integer. +.SH +cvtlw \- Convert big to word +.P1 +Syntax: cvtlw src, dst +Function: dst = (int)src +.P2 +The big integer addressed by the +.CW "src" +operand is converted to a word and stored in the +.CW "dst" +operand. +.SH +cvtsw \- Convert short word to word† +.P1 +Syntax: cvtsw src, dst +Function: dst = (int)src +.P2 +The short word addressed by the +.CW "src" +operand is converted to a word and stored in the +.CW "dst" +operand. +.SH +cvtwb \- Convert word to byte +.P1 +Syntax: cvtwb src, dst +Function: dst = (byte)src; +.P2 +The +.CW "src" +operand is converted to a byte and stored in the +.CW "dst" +operand. +.SH +cvtwc \- Convert word to string +.P1 +Syntax: cvtwc src, dst +Function: dst = string(src) +.P2 +The word addressed by the +.CW "src" +operand is converted to a string and stored in the +.CW "dst" +operand. The string is the decimal representation of the word. +.SH +cvtwl \- Convert word to big +.P1 +Syntax: cvtwl src, dst +Function: dst = (big)src; +.P2 +The word addressed by the +.CW "src" +operand is converted to a big integer and stored in the +.CW "dst" +operand. +.SH +cvtwf \- Convert word to real +.P1 +Syntax: cvtwf src, dst +Function: dst = (float)src; +.P2 +The word addressed by the +.CW "src" +operand is converted to a floating point value and stored in the +.CW "dst" +operand. +.SH +cvtws \- Convert word to short word† +.P1 +Syntax: cvtws src, dst +Function: dst = (short)src; +.P2 +The word addressed by the +.CW "src" +operand is converted to a short word and stored in the +.CW "dst" +operand. +.SH +cvtlf \- Convert big to real +.P1 +Syntax: cvtlf src, dst +Function: dst = (float)src; +.P2 +The big integer addressed by the +.CW "src" +operand is converted to a floating point value and stored in the +.CW "dst" +operand. +.SH +cvtrf \- Convert short real to real† +.P1 +Syntax: cvtrf src, dst +Function: dst = (float)src; +.P2 +The short (32 bit) floating point value addressed by the +.CW "src" +operand is converted to a 64-bit floating point value and stored in the +.CW "dst" +operand. +.SH +div\fIx\fP \- Divide +.P1 +Syntax: divb src1, src2, dst + divf src1, src2, dst + divw src1, src2, dst + divl src1, src2, dst +Function: dst = src2/src1 +.P2 +The +.CW "src2" +operand is divided by the +.CW "src1" +operand and the quotient is stored in the +.CW "dst" +operand. Division by zero causes the thread to terminate. +.SH +exit \- Terminate thread +.P1 +Syntax: exit +Function: exit() +.P2 +The executing thread terminates. All resources held in the stack are deallocated. +.SH +frame \- Allocate frame for local call +.P1 +Syntax: frame src1, src2 +Function: src2 = fp + src1->size + initmem(src2, src1); +.P2 +The frame instruction creates a new stack frame +for a call to a function in the same module. The frame is initialized according to the type descriptor supplied as the +.CW src1 +operand. A pointer to the newly created frame is stored in the +.CW src2 +operand. +.SH +goto \- Computed goto +.P1 +Syntax: goto src, dst +Function: pc = dst[src] +.P2 +The +.CW "goto" +instruction performs a computed goto. The +.CW "src" +operand must be an integer index into a table of PC values specified by the +.CW "dst" +operand. +.SH +head\fIx\fP \- Head of list +.P1 +Syntax: headb src, dst + headf src, dst + headm src, dst + headmp src, dst + headp src, dst + headw src, dst + headl src, dst +Function: dst = hd src +.P2 +The +.CW "head" +instructions make a copy of the first data item stored in a list. The +.CW "src" +operand must be a list of the correct type. The first item is copied into the +.CW "dst" +operand. The list is not modified. +.SH +indc \- Index by character +.P1 +Syntax: indc src1, src2, dst +Function: dst = src1[src2] +.P2 +The +.CW "indc" +instruction indexes Unicode strings. The +.CW "src1" +instruction must be a string. The +.CW "src2" +operand must be an integer specifying the origin-0 index in +.CW src1 +of the (Unicode) character to store in the +.CW "dst" +operand. +.SH +indx \- Array index +.P1 +Syntax: indx src1, dst, src2 +Function: dst = &src1[src2] +.P2 +The +.CW "indx" +instruction computes the effective address of an array element. The +.CW "src1" +operand must be an array created by the +.CW "newa" +instruction. The +.CW "src2" +operand must be an integer. The effective address of the +.CW "src2" +element of the array is stored in the +.CW "dst" +operand. +.SH +ind\fIx\fP \- Index by type +.P1 +Syntax: indb src1, dst, src2 + indw src1, dst, src2 + indf src1, dst, src2 + indl src1, dst, src2 +Function: dst = src1[src2] +.P2 +The +.CW "indb" , +.CW "indw" , +.CW "indf" +and +.CW "indl" +instructions index arrays of the basic types. The +.CW "src1" +operand must be an array created by the +.CW "newa" +instruction. The +.CW "src2" +operand must be a non-negative integer index less than the array size. The value of the element at the index is loaded into the +.CW "dst" +operand. +.SH +insc \- Insert character into string +.P1 +Syntax: insc src1, src2, dst +Function: src1[src2] = dst +.P2 +The +.CW "insc" +instruction inserts a character into an existing string. +The index in +.CW "src2" +must be a non-negative integer less than the length of the string plus one. +(The character will be appended to the string if the index is equal to +the string's length.) +The +.CW "src1" +operand must be a string (or nil). +The character to insert must be a valid 16-bit unicode value represented as a word. +.SH +jmp \- Branch always +.P1 +Syntax: jmp dst +Function: pc = dst +.P2 +Control is transferred to the location specified by the +.CW "dst" +operand. +.SH +lea \- Load effective address +.P1 +Syntax: lea src, dst +Function: dst = &src +.P2 +The +.CW "lea" +instruction computes the effective address of the +.CW "src" +operand and stores it in the +.CW "dst" +operand. +.SH +lena \- Length of array +.P1 +Syntax: lena src, dst +Function: dst = nelem(src) +.P2 +The +.CW "lena" +instruction computes the length of the array specified by the +.CW "src" +operand and stores it in the +.CW "dst" +operand. +.SH +lenc \- Length of string +.P1 +Syntax: lenc src, dst +Function: dst = utflen(src) +.P2 +The +.CW "lenc" +instruction computes the number of characters in the UTF string addressed by the +.CW "src" +operand and stores it in the +.CW "dst" +operand. +.SH +lenl \- Length of list +.P1 +Syntax: lenl src, dst +Function: dst = 0; + for(l = src; l; l = tl l) + dst++; +.P2 +The +.CW "lenl" +instruction computes the number of elements in the list addressed by the +.CW "src" +operand and stores the result in the +.CW "dst" +operand. +.SH +load \- Load module +.P1 +Syntax: load src1, src2, dst +Function: dst = load src2 src1 +.P2 +The +.CW "load" +instruction loads a new module into the heap. The module might optionally be compiled into machine code depending on the module header. The +.CW "src1" +operand is a pathname to the file containing the object code for the module. The +.CW "src2" +operand specifies the address +of a linkage descriptor for the module (see below). +A reference to the newly loaded module is stored in the +.CW "dst" +operand. +If the module could not be loaded for any reason, then +.CW "dst" +will be set to +.CW H . +.LP +The linkage descriptor referenced by the +.CW src2 +operand is a table in data space that lists the functions +imported by the current module from the module to be loaded. +It has the following layout: +.P1 +int nentries; +struct { /* word aligned */ + int sig; + byte name[]; /* UTF encoded name, 0-terminated */ +} entry[]; +.P2 +The +.CW nentries +value gives the number of entries in the table and can be zero. +It is followed by that many linkage entries. +Each entry is aligned on a word boundary; there can therefore +be padding before each structure. +The entry names the imported function in the UTF-encoded string in +.CW name , +which is terminated by a byte containing zero. +The MD5 hash of the function's type signature is given in the value +.CW sig . +For each entry, +.CW load +instruction checks that a function with the same name in the newly loaded +exists, with the same signature. +Otherwise the load will fail and +.CW dst +will be set to +.CW H . +.LP +The entries in the linkage descriptor form an array of linkage records +(internal to the virtual machine) associated with the +module pointer returned in +.CW dst , +that is indexed by operators +.CW mframe , +.CW mcall +and +.CW mspawn +to refer to functions in that module. +The linkage scheme provides a level of indirection that allows +a module to be loaded using any module declaration that is a valid +subset of the implementation module's declaration, +and allows entry points to be added to modules without invalidating +calling modules. +.SH +lsr\fIx\fP \- Logical shift right +.P1 +Syntax: lsrw src1, src2, dst + lsrl src1, src2, dst +Function: dst = (unsigned)src2 >> src1 +.P2 +The +.CW "lsr" +instructions shift the +.CW "src2" +operand right by the number of bits specified by the +.CW "src1" +operand, replacing the vacated bits by 0, and store the result in the +.CW "dst" +operand. Shift counts less than 0 or greater than the number of bits in the object have undefined results. +This instruction is included for support of languages other than Limbo, +and is not used by the Limbo compiler. +.SH +mcall \- Inter-module call +.P1 +Syntax: mcall src1, src2, src3 +Function: link(src1) = pc + frame(src1) = fp + mod(src1) = current_moduleptr + current_moduleptr = src3->moduleptr + fp = src1 + pc = src3->links[src2]->pc +.P2 +The +.CW "mcall" +instruction calls a function in another module. The first argument specifies a new frame for the called procedure and must have been built using the +.CW "mframe" +instruction. +The +.CW "src3" +operand is a module reference generated by a successful +.CW "load" +instruction. +The +.CW "src2" +operand specifies the index for the called +function in the array of linkage records associated with that module reference +(see the +.CW load +instruction). +.SH +mframe \- Allocate inter-module frame +.P1 +Syntax: mframe src1, src2, dst +Function: dst = fp + src1->links[src2]->t->size + initmem(dst, src1->links[src2]) +.P2 +The +.CW mframe +instruction allocates a new frame for a procedure call into another module. The +.CW src1 +operand specifies the location of a module pointer created as the result of a successful load instruction. The +.CW src2 +operand specifies the index for the called function in +the array of linkage records associated +with that module pointer (see the +.CW load +instruction). +A pointer to the initialized frame is stored in +.CW dst . +The +.CW src2 +operand specifies the linkage number of the function to be called in the module specified by +.CW src1 . +.SH +mnewz \- Allocate object given type from another module +.P1 +Syntax: mnewz src1, src2, dst +Function: dst = malloc(src1->types[src2]->size) + initmem(dst, src1->types[src2]->map) +.P2 +The +.CW mnewz +instruction allocates and initializes storage to a new +area of memory. +The +.CW src1 +operand specifies the location of a module pointer created as the result of a successful load instruction. +The size of the new memory area and the location of +pointers within it are specified by the +.CW src2 +operand, which gives a +type descriptor number within that module. +Space not occupied by pointers is initialized to zero. +A pointer to the initialized object is stored in +.CW dst . +This instruction is not used by Limbo; it was added to implement other languages. +.SH +mod\fIx\fP \- Modulus +.P1 +Syntax: modb src1, src2, dst + modw src1, src2, dst + modl src1, src2, dst +Function: dst = src2 % src1 +.P2 +The modulus instructions compute the remainder of the +.CW "src2" +operand divided by the +.CW "src1" +operand and store the result in +.CW "dst" . +The operator preserves the condition that the absolute value of a%b is less than the absolute value of +.CW "b" ; +.CW "(a/b)*b + a%b" +is always equal to +.CW a . +.SH +mov\fIx\fP \- Move scalar +.P1 +Syntax: movb src, dst + movw src, dst + movf src, dst + movl src, dst +Function: dst = src +.P2 +The move operators perform assignment. The value specified by the +.CW "src" +operand is copied to the +.CW "dst" +operand. +.SH +movm \- Move memory +.P1 +Syntax: movm src1, src2, dst +Function: memmove(&dst, &src1, src2) +.P2 +The +.CW "movm" +instruction copies memory from the +.CW "src1" +operand to the +.CW "dst" +operand for +.CW "src2" +bytes. The +.CW "src1" +and +.CW "dst" +operands specify the effective address of the memory rather than a pointer to the memory. +.SH +movmp \- Move memory and update reference counts +.P1 +Syntax: movmp src1, src2, dst +Function: decmem(&dst, src2) + memmove(&dst, &src1, src2->size) + incmem(&src, src2) +.P2 +The +.CW "movmp" +instructions performs the same function as the +.CW "movm" +instruction but increments the reference count of pointers contained in the data type. For each pointer specified by the +.CW "src2" +type descriptor, the corresponding pointer reference count in the destination is decremented. The +.CW "movmp" +instruction then copies memory from the +.CW "src1" +operand to the +.CW "dst" +operand for the number of bytes described by the type descriptor. For each pointer specified by the type descriptor the corresponding pointer reference count in the source is incremented. +.SH +movp \- Move pointer +.P1 +Syntax: movp src, dst +Function: destroy(dst) + dst = src + incref(src) +.P2 +The +.CW "movp" +instruction copies a pointer adjusting the reference counts to reflect the new pointers. +.SH +movpc \- Move program counter +.P1 +Syntax: movpc src, dst +Function: dst = PC(src); +.P2 +The +.CW "movpc" +instruction computes the actual address of an immediate PC value. The +.CW "dst" +operand is set to the actual machine address of the instruction addressed by the +.CW "src" +operand. This instruction must be used to calculate PC values for computed branches. +.SH +mspawn \- Module spawn function +.P1 +Syntax: mspawn src1, src2, src3 +Function: fork(); + if(child){ + link(src1) = 0 + frame(src1) = 0 + mod(src1) = src3->moduleptr + current_moduleptr = src3->moduleptr + fp = src1 + pc = src3->links[src2]->pc + } +.P2 +The +.CW "mspawn" +instruction creates a new thread, which starts executing a function in another module. +The first argument specifies a new frame for the called procedure and must have been built using the +.CW "mframe" +instruction. +The +.CW "src3" +operand is a module reference generated by a successful +.CW "load" +instruction. +The +.CW "src2" +operand specifies the index for the called function in +the array of linkage records associated with that module reference (see the +.CW load +instruction above). +.SH +mul\fIx\fP - Multiply +.P1 +Syntax: mulb src1, src2, dst + mulw src1, src2, dst + mulf src1, src2, dst + mull src1, src2, dst +Function: dst = src1 * src2 +.P2 +The +.CW src1 +operand is multiplied by the +.CW src2 +operand and the product is stored in the +.CW dst +operand. +.SH +nbalt \- Non blocking alternate +.P1 +Syntax: nbalt src, dst +.P2 +The +.CW "nbalt" +instruction has the same operands and function as +.CW "alt" +, except that if no channel is ready to communicate, the instruction does not block. When no channels are ready, control is transferred to the PC in the last element of the table addressed by +.CW dst . +.SH +negf \- Negate real +.P1 +Syntax: negf src, dst +Function: dst = -src +.P2 +The floating point value addressed by the +.CW "src" +operand is negated and stored in the +.CW "dst" +operand. +.SH +new, newz \- Allocate object +.P1 +Syntax: new src, dst + newz src, dst +Function: dst = malloc(src->size); + initmem(dst, src->map); +.P2 +The +.CW "new" +instruction allocates and initializes storage to a new area of memory. The size and locations of pointers are specified by the type descriptor number given as the +.CW "src" +operand. A pointer to the newly allocated object is placed in +.CW "dst" . +Any space not occupied by pointers has undefined value. +.LP +The +.CW "newz" +instruction additionally guarantees that all non-pointer values are set to zero. +It is not used by Limbo. +.SH +newa, newaz \- Allocate array +.P1 +Syntax: newa src1, src2, dst + newaz src1, src2, dst +Function: dst = malloc(src2->size * src1); + for(i = 0; i < src1; i++) + initmem(dst + i*src2->size, src2->map); +.P2 +The +.CW "newa" +instruction allocates and initializes an array. The number of elements is specified by the +.CW "src1" +operand. The type of each element is specified by the type descriptor number given as the +.CW "src2" +operand. +Space not occupied by pointers has undefined value. +The +.CW newaz +instruction additionally guarantees that all non-pointer values are set to zero; +it is not used by Limbo. +.SH +newc\fIx\fP \- Allocate channel +.P1 +Syntax: newcw dst + newcb dst + newcl dst + newcf dst + newcp dst + newcm src, dst + newcmp src, dst +Function: dst = new(Channel) +.P2 +The +.CW "newc" +instruction allocates a new channel of the specified type and stores a reference to the channel in +.CW "dst" . +For the +.CW "newcm" +instruction the source specifies the number of bytes of memory used by values sent on the channel (see the +.CW movm +instruction above). +For the +.CW "newcmp" +instruction the first operand specifies a type descriptor giving the length of the structure and the location of pointers within the structure (see the +.CW movmp +instruction above). +.SH +or\fIx\fP \- Logical OR +.P1 +Syntax: orb src1, src2, dst + orw src1, src2, dst + orl src1, src2, dst +Function: dst = src1 | src +.P2 +These instructions compute the bitwise OR of the two operands addressed by +.CW "src1" +and +.CW "src2" +and store the result in the +.CW "dst" +operand. +.SH +recv \- Receive from channel +.P1 +Syntax: recv src, dst +Function: dst = <-src +.P2 +The +.CW "recv" +instruction receives a value from some other thread on the channel specified by the +.CW "src" +operand. Communication is synchronous, so the calling thread will block until a corresponding +.CW "send" +or +.CW "alt" +is performed on the channel. The type of the received value is determined by the channel type and the +.CW "dst" +operand specifies where to place the received value. +.SH +ret \- Return from function +.P1 +Syntax: ret +Function: npc = link(fp) + mod = mod(fp) + fp = frame(fp) + pc = npc +.P2 +The +.CW "ret" +instruction returns control to the instruction after the call of the current function. +.SH +send \- Send to channel +.P1 +Syntax: send src, dst +Function: dst <-= src +.P2 +The +.CW "send" +instruction sends a value from this thread to some other thread on the channel specified by the +.CW "dst" +operand. Communication is synchronous so the calling thread will block until a corresponding +.CW "recv" +or +.CW "alt" +is performed on the channel. The type of the sent value is determined by the channel type and the +.CW "dst" +operand specifies where to retrieve the sent value. +.SH +shl\fIx\fP \- Shift left arithmetic +.P1 +Syntax: shlb src1, src2, dst + shlw src1, src2, dst + shll src1, src2, dst +Function: dst = src2 << src1 +.P2 +The +.CW "shl" +instructions shift the +.CW "src2" +operand left by the number of bits specified by the +.CW "src1" +operand and store the result in the +.CW "dst" +operand. Shift counts less than 0 or greater than the number of bits in the object have undefined results. +.SH +shr\fIx\fP \- Shift right arithmetic +.P1 +Syntax: shrb src1, src2, dst + shrw src1, src2, dst + shrl src1, src2, dst +Function: dst = src2 >> src1 +.P2 +The +.CW "shr" +instructions shift the +.CW "src2" +operand right by the number of bits specified by the +.CW "src1" +operand and store the result in the +.CW "dst" +operand. Shift counts less than 0 or greater than the number of bits in the object have undefined results. +.SH +slicea \- Slice array +.P1 +Syntax: slicea src1, src2, dst +Function: dst = dst[src1:src2] +.P2 +The +.CW "slicea" +instruction creates a new array, which contains the elements from the index at +.CW "src1" +to the index +.CW "src2-1" . +The new array is a reference array which points at the elements in the initial array. The initial array will remain allocated until both arrays are no longer referenced. +.SH +slicec \- Slice string +.P1 +Syntax: slicec src1, src2, dst +Function: dst = dst[src1:src2] +.P2 +The +.CW "slicec" +instruction creates a new string, which contains characters from the index at +.CW "src1" +to the index +.CW "src2-1" . +Unlike +.CW "slicea" +, the new string is a copy of the elements from the initial string. +.SH +slicela \- Assign to array slice +.P1 +Syntax: slicela src1, src2, dst +Function: dst[src2:] = src1 +.P2 +The +.CW "src1" +and +.CW "dst" +operands must be arrays of equal types. The +.CW "src2" +operand is a non-negative integer index. The +.CW "src1" +array is assigned to the array slice +.CW "dst[src2:]" ; +.CW "src2 + nelem(src1)" +must not exceed +.CW "nelem(dst)" . +.SH +spawn \- Spawn function +.P1 +Syntax: spawn src, dst +Function: fork(); + if(child) + dst(src); +.P2 +The +.CW "spawn" +instruction creates a new thread and calls the function specified by the +.CW "dst" +operand. The argument frame passed to the thread function is specified by the +.CW "src" +operand and should have been created by the +.CW "frame" +instruction. +.SH +sub\fIx\fP \- Subtract +.P1 +Syntax: subb src1, src2, dst + subf src1, src2, dst + subw src1, src2, dst + subl src1, src2, dst +Function: dst = src2 - src1 +.P2 +The +.CW "sub" +instructions subtract the operands addressed by +.CW "src1" +and +.CW "src2" +and stores the result in the +.CW "dst" +operand. For +.CW "subb" , +the result is truncated to eight bits. +.SH +tail \- Tail of list +.P1 +Syntax: tail src, dst +Function: dst = src->next +.P2 +The +.CW "tail" +instruction takes the list specified by the +.CW "src" +operand and creates a reference to a new list with the head removed, which is stored in the +.CW "dst" +operand. +.SH +tcmp \- Compare types +.P1 +Syntax: tcmp src, dst +Function: if(typeof(src) != typeof(dst)) + error("typecheck"); +.P2 +The +.CW "tcmp" +instruction compares the types of the two pointers supplied by the +.CW "src" +and +.CW "dst" +operands. The comparison will succeed if the two pointers were created from the same type descriptor or the +.CW "src" +operand is +.CW "nil" ; +otherwise, the program will error. The +.CW "dst" +operand must be a valid pointer. +.SH +xor\fIx\fP \- Exclusive OR +.P1 +Syntax: xorb src1, src2, dst + xorw src1, src2, dst + xorl src1, src2, dst +Function: dst = src1 ^ src2 +.P2 +These instructions compute the bitwise exclusive-OR of the two operands addressed by +.CW "src1" +and +.CW "src2" +and store the result in the +.CW "dst" +operand. +.NH 1 +Object File Format +.LP +An object file defines a single module. The file has the following structure: +.P1 +Objfile +{ + Header; + Code_section; + Type_section; + Data_section; + Module_name; + Link_section; +}; +.P2 +The following data types are used in the description of the file encoding: +.IP +.TS +lf(CW) lw(4i)fR . +OP T{ +encoded integer operand, encoding selected by the two most significant bits as follows: +.nf +00 signed 7 bits, 1 byte +.br +10 signed 14 bits, 2 bytes +.br +11 signed 30 bits, 4 bytes +T} +B unsigned byte +W 32 bit signed integer +F canonicalized 64-bit IEEE754 floating point value +SO 16 bit unsigned small offset from register +SI 16 bit signed immediate value +LO 30 bit signed large offset from register +.TE +.LP +All binary values are encoded in two's complement format, most significant byte first. +.SH +The Header Section +.P1 +Header +{ + OP: magic_number; + Signature; + OP: runtime_flag; + OP: stack_extent; + OP: code_size; + OP: data_size; + OP: type_size; + OP: link_size; + OP: entry_pc; + OP: entry_type; +}; +.P2 +The magic number is defined as 819248 +(symbolically +.CW XMAGIC ), +for modules that have not been signed cryptographically, and 923426 +(symbolically +.CW "SMAGIC" ), +for modules that contain a signature. +On the Inferno system, the symbolic names +.CW "XMAGIC" +and +.CW SMAGIC +are defined by the C include file +.CW "/include/isa.h" +and the Limbo module +.CW /module/dis.m . +.LP +The signature field is only present if the magic number is +.CW "SMAGIC" . +It has the form: +.P1 +Signature +{ + OP: length; + array[length] of byte: signature; +}; +.P2 +A digital signature is defined by a length, followed by an array of untyped bytes. +Data within the signature should identify the signing authority, algorithm, and data to be signed. +.LP +The +.CW runtime_flag +is a bit mask that defines various execution options for a Dis module. The flags currently defined are: +.P1 +MUSTCOMPILE = 1<<0 +DONTCOMPILE = 1<<1 +SHAREMP = 1<<2 +.P2 +The +.CW "MUSTCOMPILE" +flag indicates that a +.CW "load" +instruction should draw an error if the implementation is unable to compile the module into native instructions using a just-in-time compiler. +.LP +The +.CW "DONTCOMPILE" +flag indicates that the module should not be compiled into native instructions, even though it is the default for the runtime environment. This flag may be set to allow debugging or to save memory. +.LP +The +.CW "SHAREMP" +flag indicates that each instance of the module should use the same module data for all instances of the module. There is no implicit synchronization between threads using the shared data. +.LP +The +.CW stack_extent +value indicates the number of bytes by which the thread stack of this module should be extended in the event that procedure calls exhaust the allocated stack. While stack extension is transparent to programs, increasing this value may improve the efficiency of execution at the expense of using more memory. +.LP +The +.CW code_size +is a count of the number of instructions stored in the Code_section. +.LP +The +.CW data_size +gives the size in bytes of the module's global data, which is initialized +by evaluating the contents of the data section. +.LP +The +.CW type_size +is a count of the number of type descriptors stored in the Type_section. +.LP +The +.CW link_size +is a count of the number of external linkage directives stored in the Link_section. +.LP +The +.CW entry_pc +is an integer index into the instruction stream that is the default entry point for this module. The +.CW entry_pc +should point to the first instruction of a function. Instructions are numbered from a program counter value of zero. +.LP +The +.CW entry_type +is the index of the type descriptor that corresponds to the function entry point set by +.CW entry_pc . +.SH +The Code Section +.LP +The code section describes a sequence of instructions for the virtual machine. An instruction is encoded as follows: +.P1 +Instruction +{ + B: opcode; + B: address_mode; + Middle_data; + Source_data; + Dest_data; +}; +.P2 +.LP +The +.CW opcode +specifies the instruction to execute, encoded as follows: +.IP +.TS +tab(:); +l l l l l . +00 nop:20 headb:40 mulw:60 blew:80 shrl +01 alt:21 headw:41 mulf:61 bgtw:81 bnel +02 nbalt:22 headp:42 divb:62 bgew:82 bltl +03 goto:23 headf:43 divw:63 beqf:83 blel +04 call:24 headm:44 divf:64 bnef:84 bgtl +05 frame:25 headmp:45 modw:65 bltf:85 bgel +06 spawn:26 tail:46 modb:66 blef:86 beql +07 runt:27 lea:47 andb:67 bgtf:87 cvtlf +08 load:28 indx:48 andw:68 bgef:88 cvtfl +09 mcall:29 movp:49 orb:69 beqc:89 cvtlw +0A mspawn:2A movm:4A orw:6A bnec:8A cvtwl +0B mframe:2B movmp:4B xorb:6B bltc:8B cvtlc +0C ret:2C movb:4C xorw:6C blec:8C cvtcl +0D jmp:2D movw:4D shlb:6D bgtc:8D headl +0E case:2E movf:4E shlw:6E bgec:8E consl +0F exit:2F cvtbw:4F shrb:6F slicea:8F newcl +10 new:30 cvtwb:50 shrw:70 slicela:90 casec +11 newa:31 cvtfw:51 insc:71 slicec:91 indl +12 newcb:32 cvtwf:52 indc:72 indw:92 movpc +13 newcw:33 cvtca:53 addc:73 indf:93 tcmp +14 newcf:34 cvtac:54 lenc:74 indb:94 mnewz +15 newcp:35 cvtwc:55 lena:75 negf:95 cvtrf +16 newcm:36 cvtcw:56 lenl:76 movl:96 cvtfr +17 newcmp:37 cvtfc:57 beqb:77 addl:97 cvtws +18 send:38 cvtcf:58 bneb:78 subl:98 cvtsw +19 recv:39 addb:59 bltb:79 divl:99 lsrw +1A consb:3A addw:5A bleb:7A modl:9A lsrl +1B consw:3B addf:5B bgtb:7B mull:9B eclr +1C consp:3C subb:5C bgeb:7C andl:9C newz +1D consf:3D subw:5D beqw:7D orl:9D newaz +1E consm:3E subf:5E bnew:7E xorl +1F consmp:3F mulb:5F bltw:7F shll +.TE +.LP +The +.CW address_mode +byte specifies the addressing mode of each of the three operands: middle, source and destination. The source and destination operands are encoded by three bits and the middle operand by two bits. The bits are packed as follows: +.P1 +bit 7 6 5 4 3 2 1 0 + m1 m0 s2 s1 s0 d2 d1 d0 +.P2 +The middle operand is encoded as follows: +.IP +.TS +lf(CW) lf(CW) lw(3i)fR . +00 \fInone\fP no middle operand +01 $SI small immediate +10 SO(FP) small offset indirect from FP +11 SO(MP) small offset indirect from MP +.TE +.LP +The source and destination operands are encoded as follows: +.IP +.TS +lf(CW) lf(CW) lw(3i)fR . +000 LO(MP) offset indirect from MP +001 LO(FP) offset indirect from FP +010 $OP 30 bit immediate +011 \fInone\fP no operand +100 SO(SO(MP)) double indirect from MP +101 SO(SO(FP)) double indirect from FP +110 \fIreserved\fP +111 \fIreserved\fP +.TE +.LP +The +.CW middle_data +field is only present if the middle operand specifier of the address_mode is not `none'. +If the field is present it is encoded as an +.CW "OP" . +.LP +The +.CW source_data +and +.CW dest_data +fields are present only if the corresponding +.CW address_mode +field is not `none'. +For offset indirect and immediate modes the field contains a single +.CW "OP" . +For double indirect modes the values are encoded as two +.CW "OP" +values: the first value is the register indirect offset, and the second value is the final indirect offset. The offsets for double indirect addressing cannot be larger than 16 bits. +.SH +The Type Section +.LP +The type section contains type descriptors describing the layout of pointers within data types. The format of each descriptor is: +.P1 +Type_descriptor +{ + OP: desc_number; + OP: size; + OP: number_ptrs; + array[number_ptrs] of B: map; +}; +.P2 +.LP +The +.CW desc_number +is a small integer index used to identify the descriptor to instructions such as +.CW "new" . +.LP +The +.CW "size" +field is the size in bytes of the memory described by this type. +.LP +The +.CW number_ptrs +field gives the size in bytes of the +.CW "map" +array. +.LP +The +.CW "map" +array is a bit vector where each bit corresponds to a word in memory. +The most significant bit corresponds to the lowest address. +For each bit in the map, +the word at the corresponding offset in the type is a pointer iff the bit is set to 1. +.SH +The Data Section +.LP +The data section encodes the contents of the +.CW "MP" +data for the module. The section contains a sequence of items; each item contains +a control byte and an offset into the section, +followed by one or more data items. +A control byte of zero marks the end of the data section. +Otherwise, it gives the type of data to be loaded and selects between +two representations of an item: +.P1 +Short_item +{ + B: code; + OP: offset; + array[code & 16rF] of type[code>>4]: data; +}; +.P3 +Long_item +{ + B: code; + OP: count; + OP: offset; + array[ndata] of type[code>>4]: data; +}; +.P2 +A +.CW Short_item +is generated for 15 or fewer items, otherwise a +.CW "Long_item" +is generated. In a +.CW "Long_item" +the count field (bottom 4 bits of code) is set to zero and the count follows as an +.CW "OP" . +The top 4 bits of code determine the type of the datum. +The defined values are: +.IP +.TS +lf(CW) lw(3i)f(R) . +0001 8 bit bytes +0010 32 bit words +0011 utf encoded string +0100 real value IEEE754 canonical representation +0101 Array +0110 Set array address +0111 Restore load address +1000 64 bit big +.TE +.LP +The byte, word, real and big operands are encoded as sequences +of bytes (of appropriate length) in big-endian form, converted to native +format before being stored in the data space. +The `string' code takes a UTF-encoded sequence of +.CW count +bytes, which is converted to an array of 16-bit Unicode values stored in an +implementation-dependent structure on +the heap; a 4-byte pointer to the string descriptor is stored in the data space. +The `array' code takes two 4-byte operands: the first is the index of the array's type +descriptor in the type section; the second is the length of the array to be created. +The result in memory is a 4-byte pointer to an implementation-dependent +array descriptor in the heap. +.LP +Each item's data is stored at the address formed by adding the +.CW offset +in that item to a base address maintained by the loader. +Initially that address is the base of the data space of the module instance. +A new base for loading subsequent items can be set or restored by +the following operations, used to initialize arrays. +The `set array index' item must appear immediately following an `array' +item. +Its operand is a 4-byte big-endian integer that gives an index into that +array, at which address subsequent data should be loaded; the +previous load address is stacked internally. +Subsequent data will be loaded at offsets from the new base address. +The `restore load address' item has no operands; it pops a load address +from the internal address stack and makes that the new +base address. +.SH +The Module Name +.LP +The module name immediately follows the data section. +It contains the name of the implementation module, in UTF encoding, +terminated by a zero byte. +.SH +The Link Section +.LP +The link section contains an array of external linkage items: +the list of functions exported by this module. +Each item describes one exported function in the following form: +.P1 +Linkage_item +{ + OP: pc; + OP: desc_number; + W: sig; + array[] of byte: name; +}; +.P2 +The +.CW pc +is the instruction number of the function's entry point. +The +.CW desc_number +is the index, in the type section, of the type descriptor for the function's stack frame. +The +.CW sig +word is a 32-bit hash of the function's type signature. +Finally, +the name of the function is stored as a variable length array of bytes +in UTF-8 encoding, +with the end of the array marked by a zero byte. +The names of member functions of an exported adt are qualified +by the name of the adt. +The next linkage item, if any, follows immediately. +.NH 1 +Symbol Table File Format +.LP +The object file format does not include type information for debuggers. +The Limbo compiler can optionally produce a separate symbol table file. +Its format is defined in the entry +.I sbl (6) +of [1]. +.NH 1 +References +.IP 1. +.I "Inferno Programmer's Manual" +(Third Edition), +Volume 1 (`the manual'), +Vita Nuova Holdings Limited, June 2000. +.IP 2. +P Winterbottom and R Pike, +``The Design of the Inferno Virtual Machine'', +reprinted in this volume. diff --git a/doc/dis.pdf b/doc/dis.pdf Binary files differnew file mode 100644 index 00000000..26ec4241 --- /dev/null +++ b/doc/dis.pdf diff --git a/doc/ebookimp.ms b/doc/ebookimp.ms new file mode 100644 index 00000000..79e3fc2a --- /dev/null +++ b/doc/ebookimp.ms @@ -0,0 +1,389 @@ +.TL +Navigating Large XML Documents on Small Devices +.AU +Roger Peppe +.AI +Vita Nuova +.br +April 2002 +.AB +Browsing eBooks on platforms with limited memory presents an +interesting problem: how can memory usage be bounded despite +the need to view documents that may be much larger than the +available memory. A simple interface to an XML parser enables +this whilst retaining much of the ease of access afforded +by XML parsers that read all of a document into memory at once. +.AE +.SH +Introduction +.LP +The Open Ebook Publication Structure was devised by the Open Ebook Forum +in order to ``provide a specification for representing the content of electronic +books''. It is based on many existing standards, notably XML and HTML. +An Open eBook publication consists of a set of documents bound together +with an Open eBook package file which enumerates all the documents, +pictures and other items that make up the book +.LP +The underlying document format is essentially HTML compatible, +which is where the first problem arises: HTML was not designed to +make it easy to view partial sections of a document. Conventionally +an entire HTML document is read in at once and rendered onto +the device. When viewing an eBook on a limited-memory device, +however, this may not be possible; books tend to be fairly large. +For such a device, the ideal format would keep the book itself +in non-volatile storage (e.g. flash or disk) and make it possible +for reader to seek to an arbitrary position in the book and render +what it finds there. +.LP +This is not possible in an HTML or XML document, as the +arbitrarily nested nature of the format means that every +position in the document has some unknown surrounding context, +which cannot be discovered without reading sequentially through +the document from the beginning. +.SH +SAX and DOM +.LP +There are two conventional programming interfaces to an XML +parser. A SAX parser provides a stream of XML entities, leaving +it up to the application to maintain the context. It is not possible +to rewind the stream, except, perhaps, to the beginning. +Using a SAX parser is +fairly straightforward, but awkward: the stream-like nature +of the interface does not map well to the tree-like structure +that is XML. A DOM parser reads a whole document into an internal +data structure representation, so a program can treat it exactly +as a tree. This also enables a program to access parts of the +document in an arbitrary order. +The DOM approach is all very well for small documents, but for large +documents the memory usage can rapidly grow to exceed +the available memory capacity. For eBook documents, this is unacceptable. +.SH +A different approach +.LP +The XML parser used in the eBook browser is akin to a SAX parser, +in that only a little of the XML structure is held in memory at one time. +The first significant difference is that the XML entities returned are +taken from one level of the tree - if the program does not wish to +see the contents of a particular XML tag, it is trivial to skip over. +The second significant difference is that random access is possible. +This possibility comes from the observation that if we have visited +a part of the document we can record the context that we found there +and restore it later if necessary. In this scheme, if we wish to return later to +a part of a document that we are currently at, we can create a ``mark'', +a token that holds the current context; at some later time we can use +that mark to return to this position. +.LP +The eBook browser uses this technique to enable random access +to the document on a page-by-page basis. Moreover a mark +can be written to external storage, thus allowing an external +``index'' into the document so it is not always necessary to +read the entire document from the start in order to jump to a particular +page in that document. +.SH +The programming interface +.LP +The interface is implemented by a module named +.CW Xml , +which provides a +.CW Parser +adt which gives access to the contents of an XML document. +Xml items are represented by an +.CW Item +pick adt with one branch of the pick corresponding to each +type of item that might be encountered. +.LP +The interface to the parser looks like this: +.P1 +open: fn(f: string, warning: chan of (Locator, string)): (ref Parser, string); +Parser: adt { + next: fn(p: self ref Parser): ref Item; + down: fn(p: self ref Parser); + up: fn(p: self ref Parser); + mark: fn(p: self ref Parser): ref Mark; + atmark: fn(p: self ref Parser, m: ref Mark): int; + goto: fn(p: self ref Parser, m: ref Mark); + str2mark: fn(p: self ref Parser, s: string): ref Mark; +}; +.P2 +To start parsing an XML document, it must first be +.CW open ed; +.CW warning +is a channel on which non-fatal error messages will be sent +if they are encountered during the parsing of the document. +It can be nil, in which case warnings are ignored. +If the document is opened successfully, a new +.CW Parser +adt, say +.I p , +is returned. +Calling +.CW \fIp\fP.next +returns the next XML item at the current level of the tree. If there +are no more items in the current branch at the current level, it +returns +.CW nil . +When a +.CW Tag +item is returned, +.CW \fIp\fP.down +can be used to descend ``into'' that tag; subsequent calls of +.CW \fIp\fP.next +will return XML items contained within the tag, +and +.CW \fIp\fP.up +returns to the previous level. +.LP +An +.CW Item +is a pick adt: +.P1 +Item: adt { + fileoffset: int; + pick { + Tag => + name: string; + attrs: Attributes; + Text => + ch: string; + ws1, ws2: int; + Process => + target: string; + data: string; + Doctype => + name: string; + public: int; + params: list of string; + Stylesheet => + attrs: Attributes; + Error => + loc: Locator; + msg: string; + } +}; +.P2 +.CW Item.Tag +represents a XML tag, empty or not. The XML +fragments +.CW "<tag></tag>" '' `` +and +.CW "<tag />" '' `` +look identical from the point of view of this interface. +A +.CW Text +item holds text found in between tags, with adjacent whitespaces merged +and whitespace at the beginning and end of the text elided. +.CW Ws1 +and +.CW ws2 +are non-zero if there was originally whitespace at the beginning +or end of the text respectively. +.CW Process +represents an XML processing request, as found between +.CW "<?....?>" '' `` +delimiters. +.CW Doctype +and +.CW Stylesheet +are items found in an XML document's prolog, the +former representing a +.CW "<!DOCTYPE...>" '' `` +document type declaration, and the latter an XML +stylesheet processing request. +.LP +When most applications are processing documents, they +will wish to ignore all items other than +.CW Tag +and +.CW Text . +To this end, it is conventional to define a ``front-end'' function +to return desired items, discard others, and take an appropriate +action when an error is encountered. Here's an example: +.P1 +nextitem(p: ref Parser): ref Item +{ + while ((gi := p.next()) != nil) { + pick i := gi { + Error => + sys->print("error at %s:%d: %s\n", + i.loc.systemid, i.loc.line, i.msg); + exit; + Process => + ; # ignore + Stylesheet => + ; # ignore + Doctype => + ; # ignore + * => + return gi; + } + } + return nil; +} +.P2 +When +.CW nextitem +encounters an error, it exits; it might instead handle the +error another way, say by raising an exception to be caught at the +outermost level of the parsing code. +.SH +A small example +.LP +Suppose we have an XML document that contains some data that we would +like to extract, ignoring the rest of the document. For this example we will +assume that the data is held within +.CW <data> +tags, which contain zero or more +.CW <item> +tags, holding the actual data as text within them. +Tags that we do not recognize we choose to ignore. +So for example, given the following XML document: +.P1 +<metadata> + <a>hello</a> + <b>goodbye</b> +</metadata> +<data> + <item>one</item> + <item>two</item> + <item>three</item> +</data> +<data> + <item>four</item> +</data> +.P2 +we wish to extract all the data items, but ignore everything inside +the +.CW <metadata> +tag. First, let us define another little convenience function to get +the next XML tag, ignoring extraneous items: +.P1 +nexttag(p: ref Parser): ref Item.Tag +{ + while ((gi := nextitem(p)) != nil) { + pick i := gi { + Tag => + return i; + } + } + return nil; +} +.P2 +Assuming that the document has already been opened, +the following function scans through the document, looking +for top level +.CW <data> +tags, and ignoring others: +.P1 +document(p: ref Parser) +{ + while ((i := nexttag(p)) != nil) { + if (i.name == "data") { + p.down(); + data(p); + p.up(); + } + } +} +.P2 +The function to parse a +.CW <data> +tag is almost as straightforward; it scans for +.CW <item> +tags and extracts any textual data contained therein: +.P1 +data(p: ref Parser) +{ + while ((i := nexttag(p)) != nil) { + if (i.name == "item") { + p.down(); + if ((gni := p.next()) != nil) { + pick ni := gni { + Text => + sys->print("item data: %s\n", ni.ch); + } + } + p.up(); + } + } +} +.P2 +The above program is all very well and works fine, but +suppose that the document that we are parsing is very +large, with data items scattered through its length, and that +we wish to access those items in an order that is not necessarily +that in which they appear in the document. +This is quite straightforward; every time we see a +data item, we record the current position with a mark. +Assuming the global declaration: +.P1 +marks: list of ref Mark; +.P2 +the +.CW document +function might become: +.P1 +document(p: ref Parser) +{ + while ((i := nexttag(p)) != nil) { + if (i.name == "data") { + p.down(); + marks = p.mark() :: marks; + p.up(); + } + } +} +.P2 +At some later time, we can access the data items arbitrarily, +for instance: +.P1 + for (m := marks; m != nil; m = tl m) { + p.goto(hd m); + data(p); + } +.P2 +If we wish to store the data item marks in some external index +(in a file, perhaps), the +.CW Mark +adt provides a +.CW str +function which returns a string representation of the mark. +.CW Parser 's +.CW str2mark +function can later be used to recover the mark. Care must +be taken that the document it refers to has not been changed, +otherwise it is likely that the mark will be invalid. +.SH +The eBook implementation +.LP +The Open eBook reader software uses the primitives described above +to maintain display-page-based access to arbitrarily large documents +while trying to bound memory usage. +Unfortunately it is difficult to unconditionally bound memory usage, +given that any element in an XML document may be arbitrarily +large. For instance a perfectly legal document might have 100MB +of continuous text containing no tags whatsoever. The described +interface would attempt to put all this text in one single item, rapidly +running out of memory! Similar types of problems can occur when +gathering the items necessary to format a particular tag. +For instance, to format the first row of a table, it is necessary to lay out +the entire table to determine the column widths. +.LP +I chose to make the simplifying assumption that top-level items within +the document would be small enough to fit into memory. +From the point of view of the display module, the document +looks like a simple sequence of items, one after another. +One item might cover more than one page, in which case a different +part of it will be displayed on each of those pages. +.LP +One difficulty is that the displayed size of an item depends on many +factors, such as stylesheet parameters, size of installed fonts, etc. +When a document is read, the page index must have been created +from the same document with the same parameters. It is difficult in +general to enumerate all the relevant parameters; they would need +to be stored inside, or alongside the index; any change would invalidate +the index. Instead of doing this, as the document is being displayed, +the eBook display program constantly checks to see if the results +it is getting from the index match with the results it is getting +when actually laying out the document. If the results differ, the +index is remade; the discrepancy will hopefully not be noticed by +the user! diff --git a/doc/ebookimp.pdf b/doc/ebookimp.pdf Binary files differnew file mode 100644 index 00000000..f7288e8d --- /dev/null +++ b/doc/ebookimp.pdf diff --git a/doc/fonts b/doc/fonts new file mode 100644 index 00000000..bd3c6f4b --- /dev/null +++ b/doc/fonts @@ -0,0 +1,8 @@ +# mkfile rules to get fonts in Lucida Sans. +# if you don't have Lucida fonts, change this next line to +# FONTS='' +FONTS='.fp 1 R LucidaSans +.fp 2 I LucidaSansI +.fp 3 B LucidaSansB +.fp 5 CW LucidaCW +' diff --git a/doc/fonts.pal b/doc/fonts.pal new file mode 100644 index 00000000..54cd99e1 --- /dev/null +++ b/doc/fonts.pal @@ -0,0 +1,9 @@ +# mkfile rules to get fonts in Lucida Sans. +# if you don't have Lucida fonts, change this next line to +# FONTS='' +FONTS='.fp 1 R PA +.fp 2 I PI +.fp 3 B PB +.fp 4 PX +....fp 5 L LucidaCW +' diff --git a/doc/frontmatter.pdf b/doc/frontmatter.pdf Binary files differnew file mode 100644 index 00000000..8d57a248 --- /dev/null +++ b/doc/frontmatter.pdf diff --git a/doc/gridinstall.ms b/doc/gridinstall.ms new file mode 100644 index 00000000..66f0002c --- /dev/null +++ b/doc/gridinstall.ms @@ -0,0 +1,136 @@ +.FP palatino +.TL +Installing the Vita Nuova grid software +.AU +Vita Nuova +.br +5 May 2005 +.NH 1 +Package contents +.LP +The installation CD contains software for both grid client and the server (scheduler), +in separate directories in the root directory of the CD: +.B client +and +.B server . +.NH 1 +Client software +.LP +The grid client software will be installed on Windows NT4/2000/XP machines, +in the directory (folder) +.CW C:\eVNClient . +.IP 1. +On a Windows machine with the CD loaded, +use Windows Explorer (or equivalent) to move to the directory named +.CW \eclient\einstall +on the CD. +.IP 2. +Double-click +.CW setup.exe +in that directory. +It will display a new window that prompts for a destination directory. +The directory need not exist but if it does, it should be empty. +The default should be +.CW C:\eVNClient . +You can change the name if required (eg, because +.CW C: +lacks space), but +you will then need to edit several files, as discussed below, +and make appropriate changes to the instructions below. +Hit the +.SM ENTER +key to start installation. +The program will prompt for permission to create the directory if it does not already exist. +It will then populate it with all files required by the client. +.IP 3. +Move in Explorer to the directory +.CW C:\eVNClient\egrid\eslave . +Check that the file +.CW schedaddr +contains the right address for your scheduler machine. +If you changed the drive letter, you must also change the +four +.CW .bat +files in the directory to replace the +.CW C: +drive letter by the one you used. +.IP 4. +You can now add the grid client as a Windows service by running the appropriate +.CW .bat +file on the client. +Use +.RS +.IP +\f5install_service.bat\fP +for Windows 2000 and Windows XP +.IP \fIOR\fP +\f5install_service_nt4.bat\fP +for Windows NT4 +.LP +Just double-clicking in Explorer on the chosen name should install the service. +.RE +.LP +Once installed as a service the client software will start automatically when +the client machine next boots. +You can start it manually using the Windows Services Manager in the usual way. +There are two +.CW .bat +files to remove the service (when desired): \f5remove_service.bat\fP +for 2000/XP and \f5remove_service_nt4.bat\fP for NT4. +.LP +The manual page +.I scheduler-intro (1) +in the PDF file +.CW \escheduler.pdf +on the CD gives more details on running and configuring the client software. +The manual page +.I scheduler-monitor (1) +in the same PDF file describes the use of the Client Monitor software. +.LP +On Windows machines you can remove the directory +.CW C:\eVNClient\eLinux +to reduce the space required on Windows clients. +.NH 1 +Server software +.LP +The grid server software will be installed on Linux (Redhat 8 or 9), in the directory +.CW /grid/inferno , +which should either not exist or be empty. +.LP +Linux will usually mount the CD at +.CW /mnt/cdrom . +.IP 1. +In a shell (`New Terminal') window, type the following command: +.P1 +sh /mnt/cdrom/server/install/Linux-grid-386.sh +.P2 +Assuming it has permission to do so, it will populate +.CW /grid/inferno +with the Inferno distribution, including the grid scheduler components. +.IP 2. +The file +.CW /mnt/cdrom/server/install/gridsched.sh +contains a Bourne shell script that can be copied to an appropriate +place on your system, or used as the basis for one of your own, +to simplify starting the scheduler. +In particular it sets the right bin directory in +.CW PATH +to find Inferno's +.I emu , +and starts +.I emu +with the right parameters to find the +.CW /grid/inferno +directory and start the scheduler in the right environment. +.LP +Now check that +.CW /grid/inferno/grid/master/config +contains the right network address for your scheduler. +The manual pages +.I scheduler-intro (1) +and +.I scheduler (1) +in +.CW scheduler.pdf +on the CD give more details on invoking the scheduler in +different ways. diff --git a/doc/gridinstall.pdf b/doc/gridinstall.pdf Binary files differnew file mode 100644 index 00000000..c11b0811 --- /dev/null +++ b/doc/gridinstall.pdf diff --git a/doc/hotchips.ms b/doc/hotchips.ms new file mode 100644 index 00000000..c56004b0 --- /dev/null +++ b/doc/hotchips.ms @@ -0,0 +1,125 @@ +.TL +The design of the Inferno virtual machine +.AU +.I "Phil Winterbottom" +.I "Rob Pike" +.AI +.I "Bell Labs, Lucent Technologies" +.FS +Originally appeared in +.I "IEEE Compcon 97 Proceedings" , +1997. +.FE +.SP .22i exactly +.AB +Virtual machines are an important component of modern portable environments such as Inferno and Java because they provide an architecture-independent representation of executable code. Their performance is critical to the success of such environments, but they are difficult to design well because they are subject to conflicting goals. On the one hand, they offer a way to hide the differences between instruction architectures; on the other, they must be implemented efficiently on a variety of underlying machines. A comparison of the engineering and evolution of the Inferno and Java virtual machines provides insight into the tradeoffs in their design and implementation. We argue that the design of virtual machines should be rooted in the nature of modern processors, not language interpreters, with an eye towards on-the-fly compilation rather than interpretation or special-purpose silicon. +.AE +.SH +Dis, the Inferno Virtual Machine +.LP +In early 1995, we set out to apply the ideas of the Plan 9 operating system [1] to a wider range of devices and networks. The resulting system, Inferno [2], is a small operating system and execution environment that supports application portability across a wide variety of processors and operating systems. Unaware of the contemporary work to establish Java [3] from the technology of the Oak project, we independently concluded that a virtual machine (VM) was a necessary component of such a system [4]. Because of improvements in processor speed and the feasibility of on-the-fly compilers, a VM can execute quickly enough to be economically viable. +.LP +The Inferno virtual machine, called Dis, has several unusual aspects to its design: the instruction set, the module system, and the garbage collector. +.LP +The Dis instruction set provides a close match to the architecture of existing processors. Instructions are of the form +.DS +.ft I +OP src1, src2, dst +.ft P +.DE +The +.I "src1" +and +.I "dst" +operands specify general addresses or arbitrary-sized constants, while the +.I "src2" +operand is restricted to smaller constants and stack offsets to reduce code space. Each operand specifies an address either in the stack frame of the executing procedure or in the global data of its module. +.LP +The types of operands are set by the instructions. Basic types are +.CW "word" +(32-bit signed), +.CW "big" +(64-bit signed), +.CW "byte" +(8-bit unsigned), +.CW "real" +(64-bit IEEE floating point), and pointer (implementation-dependent). The instruction set follows the example of CISC processors, providing three-operand memory-to-memory operations for arithmetic, data motion, and so on. It also has instructions to allocate memory, to load modules, and to create, synchronize, and communicate between processes. +.LP +A module is the unit of dynamically loaded code and data. Modules are loaded by a VM instruction that returns a pointer to a method table for the module. That pointer is managed by the VM's garbage collector, so code and data for the module are garbage collected like any other memory. Type safety is preserved by checking method types at module load time using an MD5 signature of the type. +.LP +Memory management is intimately tied to the instruction set of the VM. Dis uses a hybrid garbage collection scheme: most garbage is collected by simple reference counting, while a real-time coloring collector gathers cyclic data. Because reference counting is an exact rather than conservative form of garbage collection, the type of all data items must be known to the VM run-time system. For this reason, the language-to-VM compiler generates a type descriptor for all compound types. This descriptor reports the location of all pointers within the type, allowing the VM to track references as items are copied. +.SH +Garbage collection +.LP +Memory dominates the cost of small systems, so the VM should be designed to keep memory usage as small as possible. Through reference-counted garbage collection, Dis reclaims memory the moment it becomes unused. Reference counting also eliminates the need for a large arena as required for efficient mark-and-sweep collection. Both these results reduce the memory requirements of the VM and its applications. +.LP +Compare this to the Java VM, whose instruction set makes it difficult to track references as objects are copied. This biases against reference counting, so JVM implementations choose lazier techniques such as mark-and-sweep, inducing a larger arena and delayed collection, both of which increase the memory use and therefore the cost of the overall system. +.SH +Issues in compiling +.LP +It is easy to interpret the individual instructions of a stack-based virtual machine (SM) such as the Java virtual machine (JVM), because most operands are implicit. However, a high-level language implementation of the interpreter generates more memory traffic than the equivalent set of instructions in a memory transfer machine (MM) such as Dis. Consider the code to execute +.P1 +c = a + b; +.P2 +An SM would execute this by a code burst such as this, which we have annotated with its memory traffic using +.I L +for load and +.I S +for store: +.P1 +push a # \fILS\fP +push b # \fILS\fP +add # \fILLS\fP +store c # \fILS\fP +.P2 +The corresponding MM code burst would be the plain three-operand instruction +.P1 +add a,b,c # \fILLS\fP +.P2 +When interpreting, the extra memory traffic of the SM is masked by the time saved by not decoding any operand fields. The operand fields are implicit in the SM instructions, while the MM they are explicit: three operand fields must be decoded in every instruction, even those without operands. +.LP +When compiling, the tradeoffs are different. Clearly, either design can produce the same native instructions from its just-in-time compiler (JIT), but in the SM case most of the work must be done in the JIT, whereas in the MM design the front end has done most of the work and the JIT can be substantially simpler and faster. +.LP +A JIT for an SM is forced to do most of the work of register allocation in the JIT itself. Because the types of stack cells change as the program executes, the JIT must track their types as it compiles. In an MM, however, the architecture maps well to native instructions. This produces a continuum of register allocation strategies from none, to simple mapping of known cells to registers, to flow-based register allocation. Most of the work of any of these strategies can be done in the language-to-VM compiler. It can generate code for an infinite-register machine, and the JIT can then allocate as many as are available in the native architecture. Again, this distribution of work keeps the JIT simple. +.SH +Processors +.LP +The same issues that face the JIT writer also face the designer of special-purpose processors to support a VM. Register allocation in the JIT is analogous to register relabeling in silicon, and an SM design adds unnecessary complexity to an already difficult problem. One might argue that a stack-based processor design would mitigate the difficulties, but our experience with the implementation of a stack machine in the AT&T Crisp microprocessor [5] leads us to believe that stack architectures are inherently slower than register-based machines. Their design lengthens the critical path by replacing simple registers with a complex stack cache mechanism. +.LP +In other words, it is a better idea to match the design of the VM to the processor than the other way around. +.LP +Dis fits this criterion better, but we do not plan to implement Dis in silicon. The idea of a VM is to be architecture-independent; offering a special processor to run it negates the original goal by favoring one instruction set. Ignoring that for the moment, though, there could still be two reasons to consider designing silicon for Dis: performance and cost. +.LP +On performance, history shows that language-specific CPUs are not competitive. The investment in the special design takes energy away from the systems issues that ultimately dominate performance. Performance gains realized through language-specific support tend to be offset by parallel improvements in general-purpose processors during the life cycle of the CPU. +.LP +Dis compiles quickly into native code that runs only 30-50% slower than native C. At the current rate of processor improvement, that is only a few months of processor design time. It is wiser to focus on improving execution on commodity, general purpose processors than on inventing a new architecture. +.LP +The issue of cost is more subtle. Dis is close enough to familiar architectures that a special chip with high integration of systems facilities could be cost-effective on small platforms. The real reason for that, though, is that the memory management design of the virtual machine makes it easy to implement Dis in small memory. By contrast, whatever cost gains an integrated Java processor might realize will likely be lost in the extra memory required by its conservative garbage collection scheme [6]. +.SH +References +.nr PS -1 +.nr VS -1 +.IP 1. +R. Pike, D. Presotto, S. Dorward, B. Flandrena, K. Thompson, H. Trickey, and P. Winterbottom. ``Plan 9 from Bell Labs'', +.I "J. Computing Systems" +8:3, Summer 1995, pp. 221-254. +.IP 2. +Dorward, S., et al., ``Inferno'', +.I "IEEE Compcon 97 Proceedings" , +1997. +.IP 3. +Arnold, K. and Gosling, J., +.I "The Java Programming Language" , +Addison-Wesley, 1996. +.IP 4. +Nori, K. V., Ammann, U., Nabeli, H. H., and Jacobi, Ch., ``Pascal P Implementation notes'', in Barron, D. W. (ed.), +.I "Pascal\-The Language and its Implementation" , +Wiley, 1981, pp. 125-170. +.IP 5. +Ditzel, D. R. and McLellan, R., ``Register Allocation for Free: The C Machine Stack Cache'', +.I "Proc. of Symp. on Arch. Supp. for Prog. Lang. and Op. Sys." , +March, 1982, pp. 48-56. +.IP 6. +Case, B., ``Implementing the Java Virtual Machine'', +.I "Microprocessor Report" , +March 25, 1996, pp. 12-17. diff --git a/doc/hotchips.pdf b/doc/hotchips.pdf Binary files differnew file mode 100644 index 00000000..16e812fa --- /dev/null +++ b/doc/hotchips.pdf diff --git a/doc/install.ms b/doc/install.ms new file mode 100644 index 00000000..cdec392b --- /dev/null +++ b/doc/install.ms @@ -0,0 +1,1423 @@ +.de EX +.nr x \\$1v +\\!h0c n \\nx 0 +.. +.de FG \" start figure caption: .FG filename.ps verticalsize +.KF +.BP \\$1 \\$2 +.sp .5v +.EX \\$2v +.ps -1 +.vs -1 +.. +.de fg \" end figure caption (yes, it is clumsy) +.ps +.vs +.br +\l'1i' +.KE +.. +\" step numbers +.nr ,s 0 1 +.af ,s a +.am NH +.nr ,s 0 1 +.. +.de Sn \" .Sn "step" +•\ Step \\n(H1\\n+(,s: \\$1 +.. +.de Ss +.P1 +.B +.Sn "\\$1" +.P2 +.. +.TL +Installing the Inferno Software +.AU +Vita Nuova +.br +support@vitanuova.com +.br +12 June 2003 +.SP 4 +.LP +Inferno can run as either a native operating system, in the usual way, or as a +.I hosted +virtual operating system, +running as an application on another operating system. +This paper explains how to install Inferno from the distribution media +to a hosted environment and how to configure the system for +basic networking. +.LP +Inferno can run as a hosted virtual operating system on top of +Plan 9, Unix or Windows. +In this paper, the term +.I Unix +is used to cover all supported variants, currently FreeBSD, Linux, HP/UX, Irix and Solaris, +and the term +.I Windows +covers Microsoft Windows (98, Me, Nt, 2000, and XP). +(Windows 98 might first require installation of the Unicode layer update from Microsoft.) +.NH +Preparation +.LP +You should ensure at least 150 Mbytes of free space on the filesystem. +The installation program will copy files from the distribution CD to a +directory on the filesystem called the +.I inferno_root +directory. +You can choose the location of this directory. +If you are installing to a multiuser filesystem outside your control a subdirectory of your home +directory might be most sensible. If you plan to share the Inferno +system with other users then common choices for +.I inferno_root +are +.CW /usr/inferno +on Unix and Plan 9 systems, and +.CW c:\einferno +on Windows systems. +Where these appear in examples in this paper you should substitute +your own +.I inferno_root +directory. +.Ss "Choose the \fIinferno_root\fP directory." +Ensure that the user who will run the installation program has +appropriate filesystem permissions to create the +.I inferno_root +directory and +files and subdirectories beneath it. +.NH +Copying Files +.LP +On all platforms the files will be owned by the user doing the installation, +except for installation onto a FAT file system (eg, on Windows), where the files +appear to be owned by +.CW Everyone +because FAT does not record ownership. +.Ss "Insert the distribution CD into the CD drive." +On Unix and Plan 9, +mount the CD to a suitable location on the filesystem, call this location +.I cd_path . +On Windows, note the drive letter of the CD, call this drive letter +.I cd_drive . +The files will be copied by an Inferno hosted installation program which runs +directly from the CD. +The directory +.CW /install +on the CD contains an installation program for each supported platform \- a shell +script for Unix and Plan 9 and an executable for Windows. +The Plan 9 install script is called +.CW Plan9.rc +and determines the CPU type from the environment variable +.CW cputype . +The Unix install scripts all have names of the form +.CW \fIhost_os\fP-\fIhost_arch\fP.sh +where +.I host_os +will be one of: +.CW FreeBSD , +.CW Linux , +or +.CW Solaris +and +.I host_arch +will be one of: +.CW 386 , +.CW mips , +.CW power +or +.CW sparc . +Most platforms offer just the one obvious combination. +The Windows installation program is called +.CW setup.exe ; +it is used on all varieties of Windows. +The next step describes how to begin the installation by running the program +that corresponds to your host system. +.Ss "Run the installation script." +The installation program will copy files from the CD to the filesystem. +The Windows installation program will also create registry entries and add +an Inferno item to the Windows +.I start +menu. +On Plan 9, run +.P1 +rc \fIcd_path\fP/install/Plan9.rc \fIinferno_root\fP +.P2 +Where +.I inferno_root +is the path to the chosen Inferno root directory. The CPU architecture +will be inferred from the environment variable +.CW cputype . +On Unix, run +.P1 +sh \fIcd_path\fP/install/\fIhost-os\fP-\fIhost_arch\fP.sh \fIinferno_root\fP +.P2 +Where +.I host_os +is the Unix variant name +.CW FreeBSD , ( +.CW Irix , +.CW Linux +or +.CW Solaris ). +.I host_arch +is the CPU type (eg, +.CW 386 ), +and +.I inferno_root +is the path to the chosen Inferno directory. +On Windows, run +.P1 +\fIcd_drive\f(CW:\einstall\esetup.exe +.P2 +The Windows installation program will ask you to choose the location of the installation +directory on the hard disk. +.LP +On all platforms, a copy of Inferno +on the CD will install from various installation packages on the CD to the +.I inferno_root +subtree on the filesystem. +On any platform it installs support for all. +.LP +Inferno is now installed, but it needs to be configured +for your site. +The process acts as a quick tour of parts of the system. +The main tasks are to add local parameters to the network data base, +and to set up the authentication system. +If you are going to run Inferno standalone, for instance to experiment with Limbo +and the file serving interface, +most of what follows can be deferred indefinitely. +It is still worthwhile skimming through it, because the first few sections tell how +to start up Inferno with correct parameters (eg, root directory and graphics resolution). +(A configuration program that runs under the window system would be more convenient, +and fairly easy to do, but that has not yet been done.) +.NH +Running Inferno +.LP +Inferno host executables are all kept in a single directory corresponding +to the combination of host operating system and CPU architecture \- the Inferno +.CW bin +directory. +.P1 +\fIinferno_root\fP/\fIhost_os\fP/\fIhost_arch\fP/bin +.P2 +(On Windows the path might need +.CW \e +not +.CW / +of course.) +That directory can be added to the search path of the host system's command interpreter, +and that process will be described first, although as discussed later one can use a script +instead and that is sometimes more convenient. +(Of course, the script will still need to refer to that directory.) +.LP +.I "Plan 9:\ \ " +Plan 9 users should add a line to their +.CW lib/profile +file that binds this directory after their +.CW /bin +directory. +.P1 +bind -a /usr/inferno/Plan9/$cputype/bin /bin +.P2 +The bind is done after the existing +.I bin +directory to avoid hiding the existing Plan 9 compilers. +If, at a later stage, you build either the hosted or native Inferno kernels for ARM or StrongARM +you should ensure that the Inferno compilers are used rather than +the Plan 9 compilers, since they differ in the implementation of +floating-point instructions (the Plan 9 ARM suite uses a byte order that is more plausible +than the order ARM dictates but therefore wrong). +That difference is likely to be resolved at some point but it has not yet been done. +.LP +.I "Windows:\ \" +The +.I host_os +is always +.CW Nt +(even for Windows 98, 2000 or XP) +and +.I host_arch +is always +.CW 386 +and the installation program will create an entry on the +.I "start menu" +to invoke Inferno. +For Unix systems or Windows systems in which Inferno will be started +from a command shell, the environment variable +.CW PATH +should be set to include the Inferno +.CW bin +directory. +For Windows 95 and Windows 98 this should be done in the +.CW \eautoexec.bat +file by adding a line like +.P1 +PATH=c:\einferno\eNt\e386\ebin;%PATH% +.P2 +You will need to reboot Windows to have the system reread the +.CW \eautoexec.bat +file. +For Windows NT and Windows 2000 modify the +.CW Path +environment variable through +.I "Control Panel -> System -> Environment" . +.LP +If you are using an MKS or Cygwin Unix-like shell environment, +you might instead set: +.P1 +PATH="c:/inferno/Nt/386/bin;$PATH" +.P2 +and export it if necessary. +.LP +.I "Unix:\ \" +For Unix systems, for +.CW sh +derivatives, the environment variable +.CW PATH +should be set to include the Inferno +.CW bin +directory. +This might be done in your +.CW .profile +file by adding a line like +.P1 +PATH="/usr/inferno/Linux/386/bin:$PATH" +.P2 +Don't forget to ensure that +.CW PATH +is exported. +You may need to log out and back in again for the changes to take effect. +.KS +.Ss "Start Inferno." +Hosted inferno is run by invoking an executable called +.I emu . +.KE +On Windows, select the Inferno option from the +.I "start menu" . +This will invoke +.I emu +with appropriate arguments to find its files in +.I inferno_root . +If you need to change any of the options passed to +.I emu +when invoked from the +.I "start menu" +you need to do this by clicking the right mouse button +on the Windows task bar and choosing +.I "Properties -> Start Menu Programs -> Advanced" +to modify the shortcut used for Inferno. +For Unix and Plan 9, you will need to tell +.I emu +where to find the Inferno file tree by passing it the +.CW -r\fIrootpath\f(CW +command line option. For example +.P1 +emu -r/usr/john/inferno +.P2 +Without the +.CW -r +option it will look for the file tree in +.CW /usr/inferno +on Plan 9 and Unix and, when invoked from the command line on WIndows, +the default is +.CW \einferno +on the current drive. +(The Windows start menu by contrast has already been set to use the right directory by the installation software.) +.LP +When using graphics, +.I emu +will use a window with a resolution of 640 x 480 pixels by default. To use a larger resolution +you will need to pass +.I emu +an option +.CW -g\fIXsize\f(CWx\fIYsize\f(CW +on the command line. So, for example, to invoke +.I emu +as above but with a resolution of 1024 x 768 pixels the full command line +would be +.P1 +emu -r/usr/john/inferno -g1024x768 +.P2 +When invoked in this way +.I emu +displays a command window running the Inferno shell +.CW /dis/sh.dis . +To avoid typing the command line options each time you invoke +.I emu +you can store them in the environment variable +.CW EMU +which is interrogated when +.I emu +is started and might as well be set along side the +.CW PATH +environment variable if the same configuration options are to be used on +each invocation. +.P1 +set EMU="-rd:\eDocuments and Settings\ejohn\einferno -g1024x768" +.P2 +for Windows. +.P1 +EMU=(-r/usr/john/inferno -g1024x768) +.P2 +for Plan 9, and +.P1 +EMU="-r/usr/john/inferno -g1024x768" +.P2 +for Unix. +An alternative to using the +.CW EMU +environment variable is to place the correct invocation in a +script file (or batch file, for Windows) and invoke that instead +of running +.I emu +directly. +It is important to note that for Windows the +.CW -r +option also serves to indicate both the drive and directory on to which the software +has been installed. Without a drive letter the system will assume the +current drive and will fail if the user changes to an alternative drive. +Once the environment variables or scripts are set up, as described above, invoking plain +.P1 +emu +.P2 +or the appropriate script file, +should result in it starting up Inferno's command interpreter +.I sh (1), +which prompts with a semicolon: +.P1 +; +.P2 +You can add a further option +.CW -c1 +to start up +.I emu +in a +mode in which the system compiles a module's +Dis operations to native machine instructions when a module +is loaded. +(See the +.I emu (1) +manual page.) +In +.I compile +mode programs that do significant computation will run much faster. +Whether in compiled or interpreted mode you should now have a functional +hosted Inferno system. +When Inferno starts the initial +.CW /dis/sh.dis +it reads commands from the file +.CW /lib/sh/profile +before becoming interactive. See the manual pages for the shell +.I sh (1) +to learn more about tailoring the initial environment. +.LP +The semicolon is the default shell prompt. From this command window +you should be able to see the installed Inferno files and directories +.P1 +lc / +.P2 +The command +.I lc +presents the contents of its directory argument in columnar fashion to standard +output in the command window. +.P1 +; lc / +FreeBSD/ Unixware/ icons/ libkern/ man/ prof/ +Hp/ acme/ include/ libkeyring/ mkconfig prog/ +Inferno/ appl/ keydb/ libmath/ mkfile services/ +Irix/ asm/ legal/ libmemdraw/ mkfiles/ tmp/ +LICENCE chan/ lib/ libmemlayer/ mnt/ tools/ +Linux/ dev/ lib9/ libtk/ module/ usr/ +MacOSX/ dis/ libbio/ licencedb/ n/ utils/ +NOTICE doc/ libcrypt/ limbo/ net/ wrap/ +Nt/ emu/ libdraw/ locale/ nvfs/ +Plan9/ env/ libfreetype/ mail/ o/ +Solaris/ fonts/ libinterp/ makemk.sh os/ +; +.P2 +Only the files and directories in and below the +.I inferno_root +directory on the host filesystem are immediately visible to an Inferno process; +these files are made visible in the root of the Inferno file namespace. +If you wish to import or export files +from and to the host filesystem you will need to use tools on your +host to move them in or out of the Inferno visible portion of your host +filesystem (see the manual pages +.I os (1) +and +.I cmd (3) +for an interface to host commands). +(We plan to make such access direct, but the details are still being worked out.) +From this point onwards in this paper all file paths not qualified with +.I inferno_root +are assumed to be in the Inferno namespace. +Files created in the host filesystem will be created with the user id of +the user that started +.I emu +and on Unix systems with that user's group id. +.NH +Setting the site's time zone +.LP +Time zone settings are defined by +files in the directory +.CW /locale/timezone . +The setting affects only how the time is displayed; the internal representation does not vary. +For instance, the file +.CW /locale/GMT +defines Greenwich Mean Time, +.CW /locale/GB-Eire +defines time zones for Great Britain and the Irish Republic +(GMT and British Summer Time), and +.CW /locale/US_Eastern +defines United States +Eastern Standard Time and Eastern Daylight Time. +The time zone settings used by applications are read +(by +.I daytime (2)) +from the file +.CW /locale/timezone , +which is initially a copy of +.CW /locale/GB-Eire . +If displaying time as the time in London is adequate, you need change nothing. +To set a different time zone for the whole site, +copy the appropriate time zone file into +.CW /locale/timezone : +.P1 +cp /locale/US_Eastern /locale/timezone +.P2 +To set a different time zone for a user or window, +.I bind (1) +the file containing the time zone setting over +.CW /locale/timezone , +either in the user's profile or in a name space description file: +.P1 +bind /locale/US_Eastern /locale/timezone +.P2 +.NH +Running the +Window Manager +.I wm +.LP +Graphical Inferno programs normally run under the window manager +.I wm (1). +Inferno has a simple editor, +.I wm/edit , +that can be used to edit the inferno configuration files. +The `power environment' for editing and program development is +.I acme (1), +but rather that throwing you in at the deep end, we shall stick to +the simpler one for now. +If you already know Acme from +Plan 9, however, or perhaps Wily from Unix, feel free to use Inferno's +.I acme +instead of +.I edit . +.Ss "Start the window manager." +Invoke +.I wm +by typing +.P1 +wm/wm +.P2 +You should see a new window open with a blue-grey background and a small +.I "Vita Nuova" +logo in the bottom left hand corner. Click on the logo with mouse button 1 +to reveal a small menu. +Selecting the +.I Edit +entry will start +.I wm/edit . +In common with most +.I wm +programs the editor has three small buttons in a line at its top right hand corner. +Clicking on the X button, the rightmost button, +will close the program down. The leftmost of the three buttons will allow the window +to be resized \- after clicking it drag the window from a point near to either one of its +edges or one of its corners. The middle button will minimise the window, creating +an entry for it in the application bar along the bottom of the main +.I wm +window. You can restore a minimised window by clicking on its entry in the application bar. +The initial +.I wm +configuration is determined by the contents of the shell +script +.CW /lib/wmsetup +(see +.I toolbar (1) +and +.I sh (1)). +.Ss "Open a shell window." +Choose the +.I shell +option from the menu to open up a shell window. The configuration of Inferno +will be done from this shell window. +.NH +Manual Pages +.LP +Manual pages for all of the system commands are available from a shell +window. Use the +.I man +or +.I wm/man +commands. For example, +.P1 +man wm +.P2 +will give information about +.I wm . +And +.P1 +man man +.P2 +will give information about using +.I man . +.I Wm/man +makes use of the Tk text widget to produce slightly more +attractive output than the plain command +.I man . +Here, and in other Inferno documentation you will see references to manual page +entries of the form \fIcommand\f(CW(\fIsection\f(CW)\fR. +You can display the manual page for the command by running +.P1 +man \fIcommand\fP +.P2 +or +.P1 +man \fIsection\fP \fIcommand\fP +.P2 +if the manual page appears in more than one section. +.NH +Initial Namespace +.LP +The initial Inferno namespace is built +by placing the root device '#/' (see +.I root (3)) +at the root of the namespace and binding +.nr ,i 0 1 +.af ,i i +.IP \n+(,i) +the host filesystem device '#U' (see +.I fs (3)) +containing the +.I inferno_root +subtree of the host filesystem at the root of the Inferno filesystem, +.IP \n+(,i) +the console device '#c' (see +.I cons (3)) +in +.CW /dev , +.IP \n+(,i) +the prog device '#p' (see +.I prog (3)) +onto +.CW /prog , +.IP \n+(,i) +the IP device '#I' (see +.I ip (3)) +in +.CW /net , +and +.IP \n+(,i) +the environment device '#e' (see +.I env (3)) +at +.CW /dev/env . +.rr ,i +.LP +You can see the sequence of commands required to construct the current namespace +by running +.P1 +ns +.P2 +.NH +Inferno's network +.LP +If you are just going to use Inferno for local Limbo programming, and not use its +networking interface, you can skip to the section ``Adding new users'' at the end of this document. +You can always come back to this step later. +.LP +To use IP networking, the IP device +.I ip (3)) ( +must have been bound into +.CW /net . +Typing +.P1 +ls -l /net +.P2 +(see +.I ls (1)) +should result in something like +.P1 +--rw-rw-r-- I 0 network john 0 May 31 07:11 /net/arp +--rw-rw-r-- I 0 network john 0 May 31 07:11 /net/ndb +d-r-xr-xr-x I 0 network john 0 May 31 07:11 /net/tcp +d-r-xr-xr-x I 0 network john 0 May 31 07:11 /net/udp +.P2 +There might be many more names on some systems. +.LP +A system running Inferno, whether native or hosted, can by agreement attach to any or all resources that +are in the name space of another Inferno system (or even its own). +That requires: +.IP • +the importing system must know where to find them +.IP • +the exporting system must agree to export them +.IP • +the two systems must authenticate the access (not all resources will be permitted to all systems or users) +.IP • +the conversation can be encrypted to keep it safe from prying eyes and interference +.LP +On an Inferno network, there is usually one secure machine that acts as authentication server. +All other systems variously play the rôles of server and client as required: any system can import some resources (or none) +and export others (or none), simultaneously, and differently in different name spaces. +In following sections, we shall write as though there were three distinct machines: +authentication server (signer); server (exporting resources); and client (importing resources). +With Inferno, you can achieve a similar effect on a single machine by starting up distinct +instances of +.I emu +instead. +That is the easiest way to become familiar with the process (and also avoids having to install +the system on several machines to start). +It is still worthwhile setting up a secured +authentication server later, especially if you are using Windows on a FAT file system +where the host system's file protections are limited. +.LP +We shall now configure Inferno to allow each of the functions listed above: +.IP • +change the network database to tell where to find local network resources +.IP • +set up the authentication system, specifically the authentication server or `signer' +.IP • +start network services (two distinct sets: one for the authentication services and the other for +all other network services) +.NH +Network database files +.LP +In both hosted and native modes, Inferno uses a collection of text files +of a particular form to store all details of network and service configuration. +When running hosted, Inferno typically gets most of its data from the host operating system, +and the database contains mainly Inferno-specific data. +.LP +The file +.CW /lib/ndb/local +is the root of the collection of network database files. +The format is defined by +.I ndb (6), +but essentially it is a collection of groups of attribute/value pairs of the form +\fIattribute\fP\f(CW=\fP\fIvalue\fP. +Attribute names and most values are case-sensitive. +.LP +Related attribute/value pairs are grouped into database `entries'. +An entry can span one or more +lines: the first line starts with a non-blank character, +and any subsequent lines in that entry start +with white space (blank or tab). +.NH 2 +Site parameters +.LP +The version of +.CW /lib/ndb/local +at time of writing looks like this: +.P1 +database= + file=/lib/ndb/local + file=/lib/ndb/dns + file=/lib/ndb/inferno + file=/lib/ndb/common + +infernosite= + #dnsdomain=your.domain.com + #dns=1.2.3.4 # resolver + SIGNER=your_Inferno_signer_here + FILESERVER=your_Inferno_fileserver_here + smtp=your_smtpserver_here + pop3=your_pop3server_here + registry=your_registry_server +.P2 +The individual files forming the data base are listed in order in the +.CW database +entry. +They can be ignored for the moment. +The entry labelled +.CW infernosite= +defines a mapping from symbolic host names of the form +.CW $\fIservice\f(CW +to a host name, domain name, or a numeric Internet address. +For instance, an application that needs an authentication service +will refer to +.CW $SIGNER +and an Inferno naming service will translate that at run-time to the appropriate network name for +that environment. +Consequently, +the entries above need to be customised for a given site. +(The items that are commented out are not needed when the host's own DNS resolver is used instead +of Inferno's own +.I dns (8).) +For example, our +.CW infernosite +entry in the +.CW local +file might look something like this +.P1 +infernosite= + dnsdomain=vitanuova.com + dns=200.1.1.11 # resolver + SIGNER=doppio + FILESERVER=doppio + smtp=doppio + pop3=doppio + registry=doppio +.P2 +where +.CW doppio +is the host name of a machine that is offering the given services to Inferno, +and +.CW 200.1.1.11 +is the Internet address of a local DNS resolver. +.Ss "Enter defaults for your site" +.LP +The only important names initially are: +.IP \f(CWSIGNER\fP 20 +the host or domain name, or address of the machine that will act as signer +.IP \f(CWregistry\fP +the name or address of a machine that provides the local dynamic service +.I registry (4) +.IP \f(CWFILESERVER\fP +the primary file server (actually needed only by clients with no storage of their own) +.LP +All others are used by specific applications such as +.I acme (1) +mail or +.I ftpfs (4). +.LP +If you are using a single machine for signer and server/client, put its name in those three entries. +.NH 2 +Connection server +.I cs (8) +and name translation +.LP +The connection server +.I cs (8) +uses the network database +and other +data (such as that provided by the host system and +the Internet DNS servers) to translate symbolic network names and services into instructions +for connecting to a given service. +In hosted mode, +network and service names are passed through to the host for conversion to numeric IP +addresses and port numbers. If the host is unable to convert a service name +the connection server will attempt to convert the name using mappings +of service and protocol names to Internet port numbers +in the file +.CW /lib/ndb/inferno : +.P1 +tcp=infgamelogin port=6660 # inferno games login service +tcp=styx port=6666 # main file service +tcp=mpeg port=6667 # mpeg stream +tcp=rstyx port=6668 # remote invocation +tcp=infdb port=6669 # database server +tcp=infweb port=6670 # inferno web server +tcp=infsigner port=6671 # inferno signing services +tcp=infcsigner port=6672 # inferno countersigner +tcp=inflogin port=6673 # inferno credential service +tcp=infsds port=6674 # software download +tcp=registry port=6675 # registry(4) +udp=virgil port=2202 # naming service +.P2 +For the moment, leave that file as it is. +You will only need to modify this file if in future +you add new statically-configured services to Inferno. +(Services that come and go dynamically might use +.I registry (4) +instead, a registry manager that allows a service to be found +using a description of it.) +.NH +Configuring a Signer +.LP +Before an Inferno machine can authenticate establish a secure connection to an Inferno +service on another machine, each system needs to obtain a certificate from a common signer.† +We talk here as though there is only one `signer' per site but in fact there can be application- or +group-specific ones. +For instance, a version of the Inferno games server automatically starts its own signing service to +keep the identities and keys used for game service separate from those of the primary +system, allowing users to set up their own gaming groups without fuss. +.FS +.FA +†The authentication system will shortly expand to a rôle-based one allowing a chain of certificates to be used, +from several signers, with delegation etc. +.FE +To use authenticated connections for the primary +file services we need to set up a signer to generate +certificates for users (see +.I createsignerkey (8) +and +.I logind (8)). +.LP +Choose an Inferno machine to become the signer. +If this is the first or only +Inferno machine on your network then make this machine the signer. +(It is more realistic if you start up a separate copy of +.I emu +and leave it in `console' mode without starting the window system.) +You can always move the function elsewhere later. +.Ss "Empty the secret file of secrets." +The authentication server verifies a user's identity by checking that the user knows a shared secret. +(In fact the secret is not used directly, but instead a scrambled value that was derived from it.) +The file +.CW /keydb/keys +holds those secrets; it is encrypted using a secret password or phrase known only to the +manager of the authentication server. +Having just installed Inferno, the file +should exist and be readable only by you (or the user as which the authentication service will run). +On the signer machine, type +.P1 +ls -l /keydb/keys +.P2 +You should see something like: +.P1 +--rw------- M 7772 yourname inf 0 Jun 12 03:08 /keydb/keys +.P2 +You should see something like the above. +If the file does not exist or is not empty or has the wrong mode, use: +.P1 +cp /dev/null /keydb/keys; chmod 600 /keydb/keys +.P2 +to set it right. +.Ss "Generate a signer key." +Next on the signer machine, run +.P1 +auth/createsignerkey \fIname\fP +.P2 +In place of +.I name +enter the network name of the signer. A fully-qualified domain name of a +host or individual is fine. +This value will appear as the signer name in each +certificate generated by the signer. +.I Createsignerkey +creates public and private keys that are used by the signer when generating +certificates. +They are stored in +.CW /keydb/signerkey ; +check that it has permissions that limit access to the user that will run the +authentication services: +.P1 +; ls -l /keydb/signerkey +--rw------- M 32685 secrets inf 1010 Jul 07 2000 /keydb/signerkey +.P2 +Use +.I chmod (1) +to set the mode to read/write only for the owner if necessary: +.P1 +chmod 600 /keydb/signerkey +.P2 +.Ss "Start the authentication network services" +Still at the signer console, type +.P1 +svc/auth +.P2 +That script (see +.I svc (8)) +will check that the +.CW /keydb/keys +and +.CW /keydb/signerkey +files exist, and then +start the program +.I keyfs (4), +which manages the +.CW keys +file. +It will prompt for the password (pass phrase) you wish to use to protect the +.CW keys +file, now and on subsequent runs: +.P1 +; svc/auth +Key: +Confirm key: +.P2 +It prompts twice to confirm it. +If successfully confirmed, it will then +start the +network services used by Inferno to authenticate local and remote users and hosts. +(If confirmation fails, retry by running +.CW svc/auth +again.) +.LP +You can check that they are running by typing: +.P1 +ps +.P2 +which should show something like the following: +.P1 + 1 1 john release 74K Sh[$Sys] + 3 2 john alt 15K Cs + 10 9 john recv 25K Keyfs + 11 9 john release 44K Styx[$Sys] + 12 9 john recv 25K Keyfs + 14 1 john alt 8K Listen + 16 1 john release 8K Listen[$Sys] + 18 1 john alt 9K Listen + 20 1 john release 9K Listen[$Sys] + 22 1 john alt 9K Listen + 24 1 john release 9K Listen[$Sys] + 26 1 john alt 8K Listen + 28 1 john release 8K Listen[$Sys] + 29 1 john ready 73K Ps[$Sys] +.P2 +There should be +.CW Keyfs +and +.CW Listen +processes. +.Ss "Enter user names and secrets." +For each user to be authenticated by the signer run +.P1 +auth/changelogin \fIusername\fP +.P2 +You will be prompted to supply a secret (ie, password or pass phrase) and expiration date. +The expiration date will be used +as the maximum expiration date of authentication certificates granted to that user. +.I Changelogin +(see +.I changelogin (8)) +accesses the name space generated by +.I keyfs (4), +which has just been started above by +.CW svc/auth . +A user can later change the stored secret using the +.I passwd (1) +command. +For the signer to generate a certificate there must be at least one entry in the +password file. +If you are not sure at this stage of the names of the users that you want to +authenticate then create an entry for the user +.CW inferno +and yourself. +.NH +Establishing a Secure Connection +.LP +To establish a secure connection between two Inferno machines, each needs to present a public key with +a certificate signed by a common signer. +We shall make two public/private key sets, one for the server and one for a client +(they differ only in where they are stored). +We shall do the server first, because the usual network services require +the server possess some keys before they can start. +We shall then start those services, and finally sort out the client. +.Ss "Start the connection service." +The server still needs to make contact with the signer, so we need to start the basic connection service +.I cs (8). +If you are using the same instance of +.I emu +in which you invoked +.CW svc/auth +above, you should skip this step. +To check, you should see a new file in the +.CW /net +directory called +.CW cs . +Run the command +.P1 +ls /net +.P2 +You should see at least the following names in the output: +.P1 +/net/cs +/net/ndb +/net/tcp +/net/udp +.P2 +Otherwise, type +.P1 +ndb/cs +.P2 +That starts +.I cs (8). +Try the +.CW "ls /net" +again to check that the +.CW cs +file has appeared. +.LP +.Ss "Generate a server key set." +On the server machine (or in the `server' window), +use +.I getauthinfo (8) +to obtain a certificate and save it in a file named +.CW default +by running +.P1 +getauthinfo default +.P2 +.I Getauthinfo +will prompt for the address of your signer (you can often +just use its host name or even +.CW localhost ) +and for a remote username and password +combination. +.I Getauthinfo +will connect to the +.I inflogin +service on the signer and authenticate you against its user and password database, +.CW /keydb/keys , +using the username and password that you entered above. +Answer +.CW yes +to the question that asks if you want to save the certificate in a file. +.I Getauthinfo +will save a certificate in the file +.CW /usr/\fIuser\f(CW/keyring/default +where +.I user +is the name in +.CW /dev/user . +.NH +Network Services +.LP +As mentioned above, in a full Inferno network +the authentication services will usually be run on a secured machine of their own (the signer), +and the ordinary network services such as file service are not run on a signer. +If you are, however, using one machine for all functions, you can get the right +effect by starting another instance of +.I emu , +to act as an Inferno host that is not a signer. +This one will run the services of a primary file server +and the site +.I registry (4). +.LP +Commands described in +.I svc (8) +start listeners for various local network services. +(The commands are actually shell scripts.) +As we saw above, +.CW svc/auth +starts the services on a signer. +.LP +Here we shall start the usual set of services. +.KS +.Ss "Start the network listener services." +Type +.P1 +svc/net +.P2 +.KE +Various network services will (should!) now be running. To confirm this type +.P1 +ps +.P2 +which should show something like the following: +.P1 +; ps + 1 1 inferno release 74K Sh[$Sys] + 7 6 inferno alt 15K Cs + 13 1 inferno recv 15K Registry + 14 1 inferno release 44K Styx[$Sys] + 15 1 inferno recv 15K Registry + 17 1 inferno alt 8K Listen + 19 1 inferno release 8K Listen[$Sys] + 22 1 inferno alt 8K Listen + 24 1 inferno release 8K Listen[$Sys] + 25 1 inferno ready 74K Ps[$Sys] +.P2 +There should be a few +.CW Listen +processes and perhaps a +.CW Registry . +.LP +You can also try +.P1 +netstat +.P2 +.I Netstat +prints information about network connections. You should see +several lines of output, each one describing an announced TCP or UDP service. +Depending upon the contents of the network configuration files we included on the CD, +you might see output something like this: +.P1 +tcp/1 Announced inferno 200.1.1.89!6668 ::!0 +tcp/2 Announced inferno 200.1.1.89!6666 ::!0 +tcp/3 Announced inferno 200.1.1.89!6675 ::!0 +.P2 +Each line corresponds to a network connection: +the connection name, the name of the user running the server, +the address of the local end of the connection, +the address of the remote end of the connection, +and the connection status. +The connection name is actually the protocol and conversation directory +in +.CW /net . +The connection addresses are all of the form \fIhost\f(CW!\fIport\fR +for these IP based services, and the remote addresses are not filled in +because they all represent listening services that are in the +.CW Announced +state. +In this example the fourth line shows a TCP service listening on port 6673. +Examining +.CW /lib/ndb/inferno +with +.CW grep +(see +.I grep (1)) +shows that the listener on port 6675 is the Inferno registry service +.P1 +grep 6675 /lib/ndb/inferno +.P2 +gives +.P1 +tcp=registry port=6675 # default registry +.P2 +.LP +Now the server is ready but we need a client. +.LP +Either use a third machine or (more likely at first) simply start another +.I emu +instance in a new window. +Start its connection server, again by typing +.P1 +ndb/cs +.P2 +The connection server is fundamental to the Inferno network. +Once networking is set up, when subsequently starting up +a client you should start +.I cs +before starting the window system. +Note that if you are running the Inferno instance as a server, or combined +server and client, +the +.CW svc/net +that starts the network services +automatically starts +.I cs , +and you need not do so explicitly. +.LP +.Ss "Generate a client certificate." +Obtain a certificate for the client in the same way as on the server. +We shall obtain a certificate for use with a specific server +by storing +it in a file whose name exactly matches the network address of the server +.P1 +getauthinfo tcp!\fIhostname\fP +.P2 +Use the current machine's +.I hostname . +.I Getauthinfo +stores the certificate in the file +.CW /usr/\fIuser\fP/keyring/\fIkeyname\fP +where +.I user +is the name in +.CW /dev/user +and +.I keyname +is the argument given to +.I getauthinfo . +Again, +answer +.CW yes +to the question that asks if you want to save the certificate in a file. +.LP +Now that both client and server have a certificate obtained from the same signer +it is possible to establish a secure connection between them. +Note that getting keys and certificates with +.I getauthinfo +is normally done just once (or at most once per server when the +.CW default +key is not used). +In short, all the work done up to now need not be repeated. +After this, provided the keys were saved to a keyring file, +as many authenticated connections can be made as desired +until the certificate expires (which by default is whenever the password entry +was set to expire). +Also note that the certificates for different machines can have +different signers, and one can even use different certificates for the same machine +when the remote user name is to differ +(the +.CW -f +option of +.I getauthinfo +can then be useful to force an appropriate keyring name). +.Ss "Make an authenticated connection." +The script +.CW svc/net +on the server started fundamental name services and also a Styx file service. +That can also be started separately using +.CW svc/styx . +In either case the namespace that is served +is the one in which the command was invoked. +Now you can test the service. +.LP +Confirm that +.CW /n/remote +is an empty directory by typing +.P1 +lc /n/remote +.P2 +You can now mount the server's name space +onto the client's directory +.CW /n/remote +by typing +.P1 +mount \fIserveraddr\fP /n/remote +.P2 +Where +.I serveraddr +is the IP address of the server or a name that the host can resolve to the +IP address of the server. +Now +.P1 +lc /n/remote +.P2 +should reveal the files and directories in the namespace being served by the server. +Those files are now also visible in the namespace of your shell. +You will notice that these changes only affect the shell in which you ran the +.I mount +command \- other windows are unaffected. +You can create, remove or modify files and directories in and under +.CW /n/remote +much as you can any other file or directory in your namespace. +In fact, in general, a process does not need to know whether a file +actually resides locally or remotely. +You can unmount the mounted directory with +.I unmount . +Type +.P1 +unmount /n/remote +.P2 +You can confirm that it has gone by running +.P1 +ls /n/remote +.P2 +All connections made by Inferno are authenticated. The default connection +made by +.I mount +is authenticated but uses neither encryption nor secure digests. +You can pass an argument to +.I mount +to specify +a more secure connection: +its +.CW -C +option gives it a hashing and an encryption algorithm to be applied to +the connection. +.KS +.Ss "Make a secure authenticated connection." +For example, +.P1 +mount -C sha1/rc4_256 \fIserveraddr\fP /n/remote +.P2 +makes an authenticated connection to the machine given by +.I serveraddr , +then engages SHA1 hashing for message digesting and 256-bit RC4 for encryption. +.KE +It mounts the namespace served by +.I serveraddr 's +Styx service on the local Inferno directory +.CW /n/remote . +.NH +Adding new users +.LP +Every inferno process has an associated +.I "user name" . +At boot time the user name is set equal to your login name on the host +operating system. +The user name is used by +.I wm/logon +to select the home directory, and +by other programs like +.I mount +when it searches for certificates. +(It can also control permission for file access on the local system in native Inferno +and some hosted Inferno configurations.) +When you attach to a server on another +system the user name in the authenticating certificate can be used by +the remote file service to set the user name appropriately there.† +.FS +.FA +†The details are system-dependent and currently subject to change. +.FE +.LP +To create a new user, copy the directory +.CW /usr/inferno +into +\f(CW/usr/\fP\fIusername\fP. +If the user is to have access to services on the network, +make an authentication server entry using +.I changelogin (8). +The user can change the stored secret using +.I passwd (1), +if desired. +Having logged in for the first time, the user should generate +a default public/private key set using +.I getauthinfo (8). +(The authentication services must be running somewhere.) +.LP +The +.I wm +window manager program +.I wm/logon +allows a user to login to the local Inferno system as an Inferno +user (different from the host user name). +Its use is shown next. +.Ss "Re-start Inferno." +You should now close down any instances of +.I emu +that you are currently running. +The quickest way to do this is to +type +.I control-c +in the emu window in which you ran +.I wm/wm . +Start a new +.I emu , +as before, by either running +.P1 +emu +.P2 +or by choosing the appropriate entry from your start menu on +Windows machines. This time, start network services +.P1 +svc/net +.P2 +and then run +.P1 +wm/wm wm/logon +.P2 +and log in as user +.I inferno . +When you log in, +.I wm/logon +will change directory to +.CW /usr/inferno +and then write the name +.CW inferno +to +.CW /dev/user . +If the file +.CW /usr/inferno/namespace +exists it will be used to construct a new namespace for the user +based on the commands that it contains (see +.I newns (2)). +.NH +What next +.LP +You should now have a fully functional Inferno system. +You will need to have a three button mouse to use +.I acme , +.I wm , +or +.I plumbing . +.LP +To learn more you could start with the manual pages for: +.I intro (1), +.I emu (1), +.I wm (1), +.I wm-misc (1), +.I sh (1), +.I acme (1), +and +.I limbo (1) +and also the papers in sections 1, 2 and 3 +of Volume 2 of +.I "The Inferno Programmer's Manual" . diff --git a/doc/install.pdf b/doc/install.pdf Binary files differnew file mode 100644 index 00000000..84066197 --- /dev/null +++ b/doc/install.pdf diff --git a/doc/lego.ms b/doc/lego.ms new file mode 100644 index 00000000..04a12fdc --- /dev/null +++ b/doc/lego.ms @@ -0,0 +1,642 @@ +.TL +Styx-on-a-Brick +.AU +Chris Locke +.br +chris@vitanuova.com +.AI +Vita Nuova +.br +June 2000 +.SH +Background +.LP +The aim of the Vita-Nuova ``styx-on-a-brick'' project was +to demonstrate the simplicity of the Styx protocol and the ease +with which a Styx `stub' can be implemented on tiny devices. +We also aimed to demonstrate the effectiveness of a protocol based approach +to resource management and sharing, whether the resource be a physical device +or a software service. +.LP +Adopting a protocol-centric view of resource and service management, as opposed to +a language-centric approach (as emphasised for instance by Jini™ with Java) +greatly eased the software burden on our tiny target device \- +implementing a simple protocol in firmware required much less work than trying to +implement a virtual machine. We are confident that if we had adopted a language-centric +approach, we would not have completed the project within our aggressive space and implementation time constraints.† +.FS +.FA +†Indeed, we later discovered that in the application of Jini to load code into an RCX robot no part +of Jini was actually on the brick. +.FE +.LP +The project took 2 weeks from start to finish. +In this time the firmware was developed and all client software +was written: firmware download, IR-link protocol support, +clockface application and worldclock application. +Two people worked on the project, one full-time, the other (Nigel Roles) part-time. +.LP +The demo was then taken on a Press Conference tour of the US +and later appeared at the Usenix2000 Plan 9/Inferno BOF at the request +of Dennis Ritchie. +.LP +I should stress that the project was a demonstration of the ease of +supporting Styx on small devices \- it was not a demo of robotics! +(Indeed, the design of the IR-link protocol, Styx name space and the +services provided by the firmware would be considerably different for +serious robotics.) +.LP +The project used a standard Lego™ Mindstorms™ robotics kit \- +the ``Robotics Invention System''. This consists of the RCX brick, +2 motors, 2 button sensors, a light sensor and a whole load of +lego pieces \- including wheels, gears and axles; which all adds up +to a whole load of fun! +.LP +The RCX brick is an Hitachi H8 microcontroller with 32K of RAM and +a 16K ROM BIOS. The RCX provides 3 motor outputs and 3 sensor inputs. +Communication with the RCX is via IR. An IR tower is supplied with the +``Robotics Invention System'' that connects to a PC via a serial port. +.SH +Acknowledgements +.LP +Before going any further I must acknowledge the work of Kekoa Proudfoot at +Stanford and Russ Nelson at Crynwr Software. +Without their valiant efforts we would not have been able to pursue this project. +Our work relied on the documents and librcx suite provided by Kekoa: +.P1 +http://graphics.stanford.edu/~kekoa/rcx/ +.P2 +and on information from Russ Nelson's web site +.P1 +http://www.crynwr.com/lego-robotics/ +.P2 +.SH +Files +.LP +The files in the +.CW legostyx.tar +file are shown in Table 1. +.KF +.TS +center; +lf(CW) lfR . +llp.h Link level protocol constants +styx.c The firmware implementation +styx.srec The firmware image (S-record format) +styx_abp.srec The firmware with the alternating bit part of the link protocol enabled +send.b Test app \- sends RCX op codes to the brick +firmdl.b Firmware download app +rcxsend.m Util module header +rcxsend.b Util module \- supports RCX ROM message format on serial link +timers.m Timer module header +timers.b Util module \- general purpose timers +legolink.b Implements the link protocol via a limbo file2chan() +clockface.b The controller app for our Clockface robot +.TE +.fi +.ce 10 +.I "Table 1.\ "\c +Files in the Styx-on-a-Brick package +.ce 0 +.KE +.SH +Project details +.NH 1 +Firmware Download +.LP +The RCX brick comes supplied with Lego firmware to be downloaded into the RAM via +the IR link. The ROM implements a monitor which provides for the firmware download, +as well as other 'op-codes'. +.LP +We wrote our own firmware in C using the GNU H8 compiler suite on a FreeBSD machine. +The code used Kekoa's +.CW librcx +library for interfacing to the RCX ROM routines. +(We should have liked to have done an H8 code generator for our own compiler suite, +but time did not permit this!) +The +.CW gnuh8 +list is accessible via: +.P1 +http://www.pcserv.demon.co.uk/ +.P2 +First up we had to write a Limbo application to communicate with the ROM, via +the IR tower in order that we could get our firmware downloaded onto the RCX. +This is the firmdl application. Source files: +.CW firmdl.b , +.CW rcxsend.b +and +.CW timers.b +.NH 1 +Styx Comms Link +.LP +Having got a means of installing our firmware we needed a means of delivering +Styx messages to and from the Brick. +.LP +Styx makes certain demands of its transport media: +.TS +l l . +Reliable messages must not get 'lost' +Ordered messages must not get transposed +.TE +The RCX ROM provides a couple of functions for IR comms \- a routine to check +for message reception and a routine for message delivery. +The message reception routine receives the data of a RCX "Transfer Data" +message (RCX op-code 0x45) +.LP +We chose to use this facility as a means of delivering Styx messages to our Firmware +on the Brick. But it did not provide the Transport properties that Styx requires. +To meet the Styx requirements we implemented a simple 'alternating bit' protocol whose +payload was the Styx messages themselves. These Link protocol messages become the +payload of the RCX "Transfer Data" messages. +.LP +The IR link is very slow, the baud rate of the IR tower serial link is 2400 +and the ROM message format requires that every byte of a message be doubled up with +its complement. (e.g. the byte 0x7e is transmitted as 0x7e, 0x81) +This is because of the simple way that the RCX ROM and hardware handle elimination +of the ambient IR signal level \- all message have the same number of 1s and 0s so +the ambient IR level can be negated by subtracting the average level. +All RCX messages are also prefixed by a header and suffixed with a checksum: +.P1 +0x55 0xff 0x00 \fID1 ~D1 D2 ~D2 ... Dn ~Dn C ~C\fP +.P2 +where +.I D1 +\&... +.I Dn +are the bytes in the message body and \fIC = D1+D2+ ... Dn\fP. +.LP +Therefore, the effective data rate is considerably less than 1200 baud. +.LP +We noted that many Styx messages, especially +.CW Twstat +and +.CW Rstat , +contained a high +proportion of 0 byte values.† +.FS +.FA +The protocol has since been revised to reduce that. +.FE +Consequently, we decided to incorporate a 0-run-length +compression scheme in our simple link protocol. +.LP +Within the payload of the link messages: +.TS +l l . +0x88 0x00 represents 0x88 +0x88 n represents n + 2 0's +others represent themselves +.TE +.LP +An additional burden is that communication with the Brick via the IR tower has to be strictly +synchronous. The IR tower echoes back all data transmitted to it on the serial link +as well as any data received on the IR link. Therefore the brick must not send IR data +while the PC is sending serial data to the tower. In order to achieve this a 'ping-pong' +communication scheme must be employed. The PC is the master, the brick is the slave. +The master sends a request and waits for the reply from the slave. +Only the master is allowed to start an exchange. +.LP +The problem with the master/slave style of communication is that a Styx Server +implements blocking requests, e.g. reads and writes, by simply not responding to the +request until the operation is completed. This does not fit with the link protocol +requirement that the server (slave) always respond and the requirement that the brick +cannot instigate a data exchange. +The firmware could simply reply with an empty Link protocol message but it then has no +way of giving timely notification of the completion of a pending Styx request as it is not +allowed to start a link-protocol message exchange. +.LP +To get around the pending Styx reply problem, the link protocol header incorporates a flag +that the slave (brick) can set to indicate that it is holding outstanding requests and that the +master (PC) should continue to poll the slave in order to receive their replies in a timely +fashion. +.LP +The link protocol message format is as follows. +Request from Master (PC) to Slave (RCX): +.LP +.TS +l l . +0x45/4d RCX Transfer Data op-code (including RCX alternating bit) +0 LSB of "Data" block number +0 MSB of "Data" block number +* LSB of "Data" payload length (lost to ROM firmware) +* MSB of "Data" payload length (lost to ROM firmware) (n+2) +* LSB of Link protocol payload length +* MSB of Link protocol payload length (n+1) +* Link protocol header +*[n-1] Link protocol payload (0 or 1 Styx messages) +* "Transfer Data" cksum (Last byte of Link protocol payload) +.TE +.LP +Note that the 0x45 ROM op-code ("Transfer Data") message incorporates a checksum byte at the +end, but the ROM doesn't bother to check it so we moved the last byte of the Link protocol +payload (or the link header if the payload is empty) into the checksum position of +the ROM message. +.LP +Reply from Slave to Master: +.LP +.TS +l l . +? Junk from ROM +* LSB of Link protocol payload length +* MSB of Link protocol payload length (n+1) +* Link protocol header +*[n] Link protocol payload +.TE +.LP +The Link protocol header has the following flags: +.LP +.TS +l l . +bit 0 Alternating bit +bit 1 Poll immediate (requested by slave) +bit 2 Poll periodic (requested by slave) +bit 3 compressed (payload is 0-run-length compressed) +bits 4-7 reserved (should be 0) +.TE +.LP +The master flips the +.I Alternating +.I bit +for every message that it successfully delivers. +If a slave reply is lost or corrupted the master will re-send the message using the same +alternating bit value. The slave should not act on a repeated message but should +re-send it's last response. The value of the alternating bit in the slave response +is the same as in the request from the master. +.LP +The +.I Poll +.I immediate +bit indicates that the slave has more data to send to the master. +The master should immediately send another Link-protocol message, even if it has no +data to send, so as the slave can reply with its pending data. +.LP +The +.I Poll +.I periodic +bit indicates that the slave has pending (blocked) requests that +it will reply to sometime in the future. The master should periodically poll the +slave, even if the master has no data to send. The polling period should be small +enough that reply latencies are acceptable. +.NH 1 +The name space +.LP +We now have a means of getting Styx messages to and from the brick. +But what does the name space provided by the firmware on the brick look like? +.LP +We wanted a generic name space; one that reflected the functions of the brick, not +the model attached to it, so that the same firmware could be used with many +different robots. +.LP +The brick has 3 motor outputs and 3 sensor inputs. +The motors can be run forwards or reverse with 8 different power settings. +They can be stalled, also with 8 power levels, and they can be left 'floating' +[A stalled motor presents resistance to turning proportional to the stall power level] +.LP +There are 2 types of sensor \- buttons and light-sensors. +[You can also get a 'rotation sensor', but we had not got one in our kit!] +.LP +We decided on a name space comprised of 2 directories, +.CW motor +and +.CW sensor . +We didn't need to use subdirectories for our name space but it was easy, so we did! +.LP +The motor directory contains 4 files \- +.CW 0 , +.CW 1 , +.CW 2 +and +.CW 012 . +The files +.CW 0 , +.CW 1 +and +.CW 2 +represent the individual motor outputs and +accept command messages of the form +.I 'XP' +where +.I X +is a direction and +.I P +is the power level. +.LP +.I X +can be one of +.TS +l l . +f forward +r reverse +s stall +F float +.TE +.LP +.I P +is a digit in the range +.CW '0..7' +.LP +The file +.CW 012 +takes messages of the form +.I 'XPXPXP' +enabling the state of all the motors to be modified with a single message. +The first +.I XP +pair affects motor 0, the middle pair affects motor 1 and the +last pair affects motor 2. +.I XP +can be +.CW '--' +indicating that the state should remain the same as before. +.LP +.LP +The sensor directory contains three files +.CW 0 , +.CW 1 +and +.CW 2 , +corresponding to the three sensor inputs on the brick. +.LP +Before a sensor file can be read it must be configured by writing a configuration +message to the file. These message take the form +.I 'Tv*' +where +.I T +is the sensor type and +.I v* +is a threshold value. +The idea of the threshold value is that reads of the sensor file wil block until +the threshold value has been achieved. +.LP +Reads of a sensor file return its current value. +When a sensor file is configured any pending reads of the sensor are +failed with the error message +.CW 'reset' . +.LP +The available sensor types are: +.LP +.TS +l l . +b button +l light sensor +.TE +.LP +The threshold value for a button sensor is a click count. +So the control message +.CW 'b0' +configures a sensor to be a button and subsequent reads +of the file will yield the current click count. +.br +The message +.CW 'b20' +will cause subsequent reads to block until the click count reaches +20 or more. +.LP +The threshold value for a light sensor is a raw sensor value qualified by +.CW '<' +or +.CW '>' . +.LP +The control message +.CW 'l>600' +configures the input to be a light sensor and subsequent +reads will block until the sensor value exceeds 600. +If the +.CW '<' +qualifier is used, reads block until the value drops below the threshold. +.SH +Using the Styx firmware +.NH 1 +Download the firmware +.LP +Use the +.CW firmdl +command to download the firmware to the brick +.P1 +% firmdl 0 styx.srec +% +.P2 +.LP +The first argument is the number of the inferno serial port ( +.CW /dev/eia0 +in this example). +The second argument is the file containing the firmware image in s-record format. +.LP +The firmdl app prints the response code from the ROM. +On successful download the ROM reports: +.P1 +Just a bit off the block! +.P2 +.LP +Once the firmware is downloaded it is immediately run. +The RCX display should be showing the 'running man' symbol. +If at any time the Styx firmware encounters an error, the 'running man' +is changed to a 'standing man' and the source code line number of the error +is displayed on the LCD. +The firmware doesn't stay resident: it monitors the on/off button and +restarts the ROM monitor when it is pressed. +.NH 1 +Start the link protocol +.LP +.P1 +% legolink 0 +% +.P2 +.LP +The legolink argument is the serial port over which to run the link protocol. +This will be the same as the first argument to the firmdl command. +.LP +Once started the legolink command creates the file +.CW /net/legolink +in the Inferno +name space. Any reads/writes of this file are the payload data of the link protocol. +.NH 1 +Mount the brick name space +.LP +.P1 +% mount -o -A /net/legolink /n/remote +.P2 +.LP +The +.CW -A +flag to mount prevents the command from trying to +do authentication +on the link before running the Styx protocol over it. +The +.CW -o +option uses an older version of Styx. +The second argument to mount is the the file over which the Styx protocol will be run. +Raw Styx messages are written to and read from this file. +The third argument is the directory on which to mount the name space presented by the +Styx server on the other end of the link \- the firmware on the Brick. +.NH 1 +Explore the name space +.LP +.P1 +% cd /n/remote +% ls +motor +sensor +% ls motor +motor/0 +motor/1 +motor/2 +motor/012 +% ls sensor +sensor/0 +sensor/1 +sensor/2 +% +.P2 +.LP +Attach a motor to the first output and a button sensor to the first input +and then try the following... +.LP +Start motor... +.P1 +% cd motor +% echo -n f7 > 0 +% +.P2 +.LP +Reverse the motor... +.P1 +% echo -n r7 > 0 +% +.P2 +.LP +Stop the motor (float)... +.P1 +% echo -n F0 > 0 +% +.P2 +.LP +Notice the need for the +.CW -n +flag to echo. The firmware is a bit touchy about +the format of the motor control messages \- they have to be 2 bytes long. +.LP +Run the motor for (a little more than) 5 seconds... +.P1 +% echo -n r7 > 0; sleep 5; echo -n F0 > 0 +% +.P2 +.LP +It takes time on the slow link to open the file for the control message to +stop the motor. It should be possible to reduce the delay by keeping the file open: +.P1 +% {echo -n r7; sleep 5; echo -n F0} > 0 +% +.P2 +but the firmware only accepts command messages written to file offset 0. +.br +[Fixing this is left as an exercise for the reader!] +.LP +Ok, lets play with a sensor... +.P1 +% cd /n/remote/sensor +% echo b0 > 0 +% cat 0 +0% +.P2 +.LP +Note that the sensor file isn't as fussy about its message format as the motor file. +.LP +Click the button a few times and then try reading the sensor file again +.P1 +% cat 0 +4% +.P2 +.LP +Let's try a blocking read on the sensor +.P1 +% echo b5 > 0 +% cat 0 +\fR[click the button 5 times]\fP +5% +.P2 +.LP +Ok, we're done playing \- unmount the brick name space +.P1 +% cd +% ls /n/remote +/n/remote/motor +/n/remote/sensor +% unmount /n/remote +% ls /n/remote +% +.P2 +.SH +The Clockface robot +.LP +So we have a means of controlling the brick via Styx. +We now needed to design a robot suitable for demonstrating the software. +.LP +The robot needed to be static; the IR link needs to maintain line-of-sight contact +between the IR tower and the brick. +The operation of the robot needed to be clearly visible to a group of people in a +conference room. +We also wanted a robot that we could layer services on top of each other to demonstrate +the versatility of Inferno name spaces. +.LP +We decided on a clock robot. The robot is static; it doesn't move around the room! +The clockface would be visible and its operation obvious +to a group of people in a reasonably large room. +.LP +The clockface robot also allowed us to layer services: +.LP +Initially we just mount the Brick name space. +This name space represents the services of the brick \- nothing is known of the +robot model that is attached to the brick. +.LP +We then start the clockface service. This knows how to use the name space of +the brick to control the motors and sensors of the clockface model. +The clockface service provides a +.CW clockface +file which accepts +time values (e.g. +.CW '14:35' ), +the service then runs motors and reads sensors +to set the hands of the robot to the specified time. +.LP +On top of the clockface service we can run a world-clock service. +This periodically reads the system clock and writes time messages to the +.CW clockface +file resented by the clockface service. +The world-clock service also provides a configuration file so that the user +can set the time zone of the clock display. Writing a time zone abbreviation into +the control file causes the world-clock service to write new time messages into +the +.CW clockface +file to reflect the new time zone setting. +.LP +By using Inferno's ability to export a name space, any of the clock services +could be running anywhere in the network. +The Lego brick could be attached to machine A. +Machine B could be running the legolink application using +.CW /dev/eia0 +imported from machine A. +Machine C could mount the +.CW /net/legolink +file imported from machine B's +name space. +Machine D could then run the clockface service over the brick's name space +imported from machine C, etc. etc. +.LP +The source of the clockface service is +.CW clockface.b . +.br +The source of the world-clock service is +.CW worldclock.b . +.SH +Final Notes +.LP +The firmware could do with some more work on it, such as the overly strict +length restriction on motor control messages, or the fact that control messages +must be written at offset 0. +.LP +Please feel free to fix problems and make modifications. I am more than happy +to discuss the software and answer any questions you may have. +.LP +Have Fun! diff --git a/doc/lego.pdf b/doc/lego.pdf Binary files differnew file mode 100644 index 00000000..2f07ac7a --- /dev/null +++ b/doc/lego.pdf diff --git a/doc/limbo/addendum.ms b/doc/limbo/addendum.ms new file mode 100644 index 00000000..557115fa --- /dev/null +++ b/doc/limbo/addendum.ms @@ -0,0 +1,495 @@ +.TL +Addendum to +.I "The Limbo Programming Language" +.AU +Vita Nuova +.br +30 March 2005 +.NH 1 +Introduction +.LP +This addendum provides a brief summary of several language changes to +Limbo since +.I "The Limbo Programming Language" +was last revised: +.RS +.IP • +buffered channels +.IP • +unrestricted \f5alt\f1 +.IP • +function references +.IP • +exceptions +.IP • +exponentiation +.IP • +fixed-point types +.RE +.NH 1 +Buffered channels +.LP +A buffered channel can now be declared: +.P1 +c := chan[1] of int; +.P2 +Here the buffer size is 1. A send on this channel will succeed immediately +if there is a receiver waiting or if the buffer is empty. A receive on this +channel will succeed immediately if there is a data item in the buffer. This allows us to +write a very simple locking mechanism: +.P1 +acquire(c: chan of int) +{ + c <-= 0; +} + +release(c: chan of int) +{ + <-c; +} + +new(): chan of int +{ + return chan[1] of int; +} +.P2 +The declaration +.P1 +c := chan[0] of int; +.P2 +is equivalent to +.P1 + c := chan of int; +.P2 +An attempt to create a channel with a negative buffer size will raise +an exception. An attempt to create a channel with a very large buffer +may result in an immediate memory exception if there is not enough +room for the buffer. +.NH 1 +Unrestricted +.B alt +.LP +The implementation has changed to remove the restriction that only one process can be +waiting in an +.CW alt +to send or receive on a particular channel. +The busy exception never occurs now. Thus you can do +.P1 +i() +{ + c := chan of int; + c1 := chan of int; + spawn p(c, c1); + <-c; + spawn p(c, c1); + <-c; + for(i := 0; i < 20; i++) + c1 <-= i; +} + +p(c: chan of int, c1: chan of int) +{ + c <-= 0; + for(;;) + alt{ + i := <-c1 => + ; + } +} +.P2 +The two spawned processes can both wait on +.CW c1 +without fuss. +Processes are queued on a strict FIFO basis so, in +the example above, the two processes receive on +.CW c1 +alternately. +.NH 1 +Function references +.LP +Function references may be declared as follows: +.P1 +fp: ref fn(s1: string, s2: string): int; +.P2 +Given the function +.P1 +cmp(s1: string, s2: string): int +{ + if(s1 < s2) + return -1; + if(s1 > s2) + return 1; + return 0; +} +.P2 +a reference to it can be created by assignment: +.P1 +fp = cmp; +.P2 +where the name can be qualified by an explicit module reference as usual: +.P1 +fp = mod->cmp; +.P2 +or it can be returned from a function: +.P1 +Cmp: type ref fn(s1: string, s2: string): int; + +rcmp(s1: string, s2: string): int +{ + return -cmp(s1, s2); +} + +choose(i: int): Cmp +{ + if(i) + return rcmp; + return cmp; +} +.P2 +(the declaration of the synonym +.CW Cmp +was done only for clarity). +They may be declared and passed as parameters: +.P1 +sort(a: array of string, f: ref fn(s1, s2: string): int): array of string +{ + # ... +} + # ... +b := sort(a, cmp); +c := sort(a, rcmp); +.P2 +The function is called via the reference by +.P1 + r := fp("fred", "bloggs"); +.P2 +Otherwise function references behave just like any other reference type. +.NH 1 +Exceptions +.LP +Both string exceptions and user defined exceptions are now provided. +The +.CW Sys +module interface to exceptions +has been removed and replaced by new language constructs in limbo. +.NH 2 +String exceptions +.LP +Simple string exceptions can be raised as follows +.P1 +raise \fIs\fP; +.P2 +where +.I s +is any value of type string (it need not be constant). +.LP +Exception handlers may be attached to a block (or sequence of statements) :- +.P1 +{ + foo(); + bar(); +} exception e { +"a" or "b" => + sys->print("caught %s\en", e); + raise; +"ab*" => + sys->print("caught %s\en", e); + exit; +"abcd*" => + sys->print("caught %s\en", e); + raise e; +"a*" => + sys->print("caught %s\en", e); + raise "c"; +"*" => + sys->print("caught %s\en", e); +} +LL: +.P2 +.LP +Any exception occurring within the block (and in nested function calls within the block) can +potentially be caught by the exception handler. An exception is caught by a guard exactly +maching the exception string or by a guard +\f5\&"\fP\fIs\fP\f5*"\fP +where +.I s +is a prefix of the exception string. +The most specific match is used. Thus a raise of "a" will be caught by the first +guard and not by the fourth guard. A raise of "abcde" is caught by the third and not the second +or fourth. If a match is found, the sequence of statements following the guard are executed. +If not, the system searches for a handler at a higher level. +.LP +As shown above, the exception is available through the exception identifier (e in this case) if given following the exception keyword. +.LP +The exception is reraised using +.P1 +raise; +.P2 +or +.P1 +raise e; +.P2 +.LP +Both the block and the exception code will fall through to the statement labelled +LL unless, of course, they do an explicit exit, return or raise first. +.NH 2 +User-defined exceptions +.LP +You can declare your own exceptions: +.P1 +implement Fibonacci; + +include "sys.m"; +include "draw.m"; + +Fibonacci: module +{ + init: fn(nil: ref Draw->Context, argv: list of string); +}; +.P3 + +init(nil: ref Draw->Context, nil: list of string) +{ + sys := load Sys Sys->PATH; + for(i := 0; ; i++){ + f := fibonacci(i); + if(f < 0) + break; + sys->print("F(%d) = %d\en", i, f); + } +} +.P3 + +FIB: exception(int, int); +.P3 + +fibonacci(n: int): int +{ + { + fib(1, n, 1, 1); + }exception e{ + FIB => + (x, nil) := e; + return x; + "*" => + sys->print("unexpected string exception %s raised\en", e); + * => + sys->print("unexpected exception raised\en"); + } + return 0; +} +.P3 + +fib(n: int, m: int, x: int, y: int) raises (FIB) +{ + if(n >= m) + raise FIB(x, y); + + { + fib(n+1, m, x, y); + }exception e{ + FIB => + (x, y) = e; + x = x+y; + y = x-y; + raise FIB(x, y); + } +} +.P2 +.LP +.CW FIB +is a declared exception that returns two integers. The values are supplied when raising the exception: +.P1 +raise FIB(3, 4); +.P2 +When caught the values can be recovered by treating the declared exception identifier +as if it were a tuple of 2 integers: +.P1 +(x, y) = e; +.P2 +In general each exception alternative treats the exception identifier appropriately : as a string +when the exception qualifier is a string, as the relevant tuple when the exception is declared. +.LP +If you do +.P1 +"abcde" or FIB => + (x, y) = e; + sys->print("%s\en", e); +.P2 +you will get a compiler error as +.CW e 's +type is indeterminate within this alternative. +.LP +Reraising is the same as in the case of string exceptions. +.LP +Note also the difference between the string guard +\&\f5"*"\fP and the guard +.CW * +in +the function fibonacci. +The former will match any string exception, the latter any exception. If a +string exception does occur it matches the former as it is the most specific. +If an unexpected user defined +exception occurs it matches the latter. +.LP +The main difference between declared exceptions and string exceptions is +that the former must be caught by the immediate caller of a function that +raises them, otherwise they turn into a string exception whose name is derived +from that of the exception declaration. +.NH 2 +The +.CW raises +clause +.LP +The definition of the function fib in the above example also lists the user defined exceptions it can raise via the use of a +.CW raises +clause. In this case there is just the one exception (\f5FIB\f1). These +clauses (if given) must be compatible between any declaration and definition of the function. +.LP +The compiler reports instances of functions which either raise some exception which +is not mentioned in their raises clause or does not raise some exception which is +mentioned in their raises clause. Currently the report is a warning. +.NH 1 +Exponentiation +.LP +The exponentiation operator (written as +.CW ** ) +is now part of the Limbo language. +Its precedence is above that of multiplication, division and modulus but below +that of the unary operators. It is right associative. Thus +.P1 +3**4*2 = (3**4)*2 = 81*2 = 162 +-3**4 = (-3)**4 = 81 +2**3**2 = 2**(3**2) = 2**9 = 512 +.P2 +The type of the left operand must be +.CW int , +.CW big +or +.CW real . +The type of the right operand must be +.CW int . +The type of the result is the type of the left operand. +.NH 1 +Fixed point types +.LP +A declaration of the form +.P1 +x: fixed(0.2, 12345.0); +.P2 +declares +.CW x +to be a variable of a fixed point type. The scale of the type is +1/5 and the maximum absolute value of the type is 12345.0. +.LP +Similarly +.P1 +x: fixed(0.125, 4096.0) +.P2 +specifies a scale of 0.125 and a maximum absolute value of 4096. +This requires only 17 bits so the underlying type will be +.CW int +and the compiler +is free to allocate the remaining 15 bits to greater range or greater +accuracy. In fact the compiler always chooses the latter. +.LP +The maximum absolute value is optional :- +.P1 +x: fixed(0.125); +.P2 +is equivalent to +.P1 +x: fixed(0.125, 2147483647.0 * 0.125); +.P2 +and ensures the underlying type is exactly an int ie the compiler has +no scope to add any extra bits for more accuracy. +.LP +A binary fixed point type with 8 bits before the binary point and 24 after +might therefore be declared as +.P1 +x: fixed(2.0**-24); +.P2 +.LP +The scale must be static: its value known at compile time and +it must be positive and real; similarly for the maximum absolute +value when specified. +.LP +Currently the only underlying base type supported is +.CW int . +.LP +A shorthand for fixed point types is available through the use of +.CW type +declarations: +.P1 +fpt: type fixed(2.0**-16); +.P2 +We can then do +.P1 +x, y, z: fpt; +zero: con fpt(0); + +x = fpt(3.21); +y = fpt(4.678); +z = fpt(16r1234.5678); +z = -x; +z = x+y; +z = x-y; +z = x*y; +z = x/y; +sys->print("z=%f", real z); +.P2 +There is no implicit numerical casting in Limbo so we have to use explicit +casts to initialize fixed point variables. Note the use of a base to +initialize +.CW z +using a new literal representation. +.LP +Given +.P1 +fpt1: type fixed(0.12345); +x: fpt1; +fpt2: type fixed(0.1234); +y: fpt2; +fpt3: type fixed(0.123); +z: fpt3; +.P2 +then +.P1 +z = x*y; +.P2 +is illegal. We must add casts and do +.P1 +z = fpt3(x)*fpt3(y); +.P2 +ie type equivalence between fixed point types requires equivalence of scale +(and of maximum absolute value when specified). +.LP +Fixed point types may be used where any other numerical type (byte, int, big, real) can be used. So you can compare them, have a list of them, have a channel of them, cast them to or from string and so on. +.LP +You cannot use complement(~), not(!), and(&), or(|), xor(^) or modulus(%) on them as fixed point types are basically a form of real type. +.NH 2 +Accuracy +.LP +A fixed point value is a multiple of its scale. Given fixed point values X, Y and +Z of scale s, t and u respectively, we can write +.P1 +X = sx +Y = ty +Z = uz +.P2 +where x, y and z are integers. +.LP +For the multiplication Z = X*Y the accuracy achieved is given by +.P1 +| z - (st/u)xy | < 1 +.P2 +and for the division Z = X/Y +.P1 +| z - (s/(tu))x/y | < 1 +.P2 +That is, the result is always within the result scale of the correct real value. +.LP +This also applies when casting a fixed point type to another, casting an +integer to a fixed point type and casting a fixed point type to an integer. These +are all examples of the multiplication law with t = y = 1 since an +integer may be thought of as a fixed point type with a scale of 1. diff --git a/doc/limbo/addendum.pdf b/doc/limbo/addendum.pdf Binary files differnew file mode 100644 index 00000000..04f9dfc1 --- /dev/null +++ b/doc/limbo/addendum.pdf diff --git a/doc/limbo/limbo.ms b/doc/limbo/limbo.ms new file mode 100644 index 00000000..84f25533 --- /dev/null +++ b/doc/limbo/limbo.ms @@ -0,0 +1,5070 @@ +...FP lucidasans +...FP palatino +.FP palatino +." .fp 6 RR R +.nr PI 2n +.de P1 +.DS L +.ft CW +.ps -1 +.vs -1u +.ta .75i 1.5i 2.25i 3i 3.75i 4.5i 5.25i 6i 6.75i 7.5i +.. +.de P2 +.ft R +.ps +1 +.vs +1u +.DE +.. +.de s1 +.DS +.br +.ft I +.. +.de s2 +.br +.DE +.ft R +.. +...ds CF "Copyright 2000 Lucent Technologies Inc. Modifications Vita Nuova Limited. +.TL +The Limbo Programming Language +.AU +Dennis M. Ritchie +.br +(Revised 2005 by Vita Nuova) +.SP .5i exactly +.PP +Limbo is a programming language intended for applications +running distributed systems on small computers. +It supports modular programming, +strong type checking at compile- and run-time, +interprocess communication over typed channels, +automatic garbage collection, +and simple abstract data types. +It is designed for safe execution even on +small machines without hardware memory protection. +.PP +In its implementation for the Inferno operating system, +object programs generated by the Limbo compiler run +using an interpreter for a fixed virtual machine. +Inferno and its accompanying virtual machine run either stand-alone +on bare hardware +or as an application under conventional operating systems like +Unix, Windows 2000, Linux, FreeBSD, MacOSX, and Plan 9. +For most architectures, including +Intel x86, ARM, PowerPC, MIPS and Sparc, Limbo object programs +are transformed on-the-fly into instructions for the underlying hardware. +.NH 1 +Overview and introduction +.PP +A Limbo application consists of one or more +.I modules , +each of which supplies an interface declaration and +an implementation part. +A module that uses another module +includes its declaration part. +During +execution, a module dynamically attaches another module by +stating the other module's type identifier and a place from which to load +the object code for its implementation. +.PP +A module declaration specifies the functions and data it will make visible, +its data types, and constants. +Its implementation part defines the functions and data visible at its interface and +any functions associated with its data types; +it may also contain definitions for functions used only internally and +for data local to the module. +.PP +Here is a simple module to illustrate the flavour of the language. +.P1 +1 implement Command; + +2 include "sys.m"; +3 include "draw.m"; + +4 sys: Sys; + +5 Command: module + { +6 init: fn (ctxt: ref Draw->Context, argv: list of string); +7 }; +.P2 +.P1 +8 # The canonical "Hello world" program, enhanced +9 init(ctxt: ref Draw->Context, argv: list of string) +10 { +11 sys = load Sys Sys->PATH; +12 sys->print("hello world\en"); +13 for (; argv!=nil; argv = tl argv) +14 sys->print("%s ", hd argv); +15 sys->print("\en"); +16 } +.P2 +A quick glance at the program reveals that +the syntax of Limbo is influenced by C in its expressions, +statements, and some conventions (for example, look at lines 13-14), +and also by Pascal and its successors (the declarations on lines 4, 6, 9). +When executed in the Inferno environment, the program writes +.CW hello +.CW world +somewhere, then echoes its arguments. +.PP +Let's look at the program line-by-line. +It begins (line 1) by saying that this is the implementation of module +.CW Command . +Line 2 includes a file (found in a way analogous to C's +.CW #include +mechanism) named +.CW sys.m . +This file defines the interface to module +.CW Sys ; +.ds CF +it says, in part, +.P1 +Sys: module { + PATH: con "$Sys"; + . . . + print: fn (s: string, *): int; + . . . +}; +.P2 +This declares +.CW Sys +to be the type name for a module containing among other things a +function named +.CW print ; +the first argument of +.CW print +is a string. +The +.CW * +in the argument list specifies that further arguments, of +unspecified type, may be given. +.PP +Line 3 includes +.CW draw.m ; +only one piece of information, mentioned below, +is used from it. +Line 4 declares the variable +.CW sys +to be of type +.CW Sys ; +its name will be visible throughout the remainder of the file +describing this module. +It will be used later to refer to an instance of the +.CW Sys +module. +This declaration initializes it to +.CW nil ; +it still needs to be set to a useful value. +.PP +Lines 5-7 constitute the declaration of +.CW Command , +the module being implemented. +It contains only a function named +.CW init , +with two arguments, a +.CW ref +.CW Draw->Context +and a list of strings, +and it doesn't +return any value. +The +.CW ref +.CW Draw->Context +argument would be used if the program did any +graphics; it is a data type defined in +.CW draw.m +and refers to the display. +Since the program just writes text, it won't be used. +The +.CW init +function isn't special to the Limbo language, +but it is conventional in the environment, +like +.CW main +in C. +.PP +In a module designed to be useful +to other modules in an application, it would be wise to +take the module declaration for +.CW Command +out, put it in a separate file called +.CW command.m +and use +.CW "include +.CW command.m +to allow this module and others to refer to it. +It is called, for example, by the program loader in the Inferno +system to start the execution of applications. +.PP +Line 8 is a comment; everything from the +.CW # +to the end of line is ignored. +.PP +Line 9 begins the definition for the +.CW init +function that was promised in the module's declaration +(line 6). +The argument that is a list of strings is named +.CW argv . +.PP +Line 11 connects the program +being written to the +.CW Sys +module. +The first token after +.CW load +is the target module's name as defined by its interface +(here found in the +.CW include +on line 2) +The next token is the place +where the code for the module can be found; it is a string +that usually names a file. +Conventionally, in the Inferno system, +each module contains a constant declaration for the name +.CW PATH +as a string that names the file where +the object module can be found. +Loading the file is performed dynamically during +execution except for a few modules built +into the execution environment. +(These include +.CW Sys ; +this accounts for the peculiar file name +.CW "$Sys" +as +the value of +.CW PATH .) +.PP +The value of +.CW load +is a reference to the +named module; line 11 assigns it +to the variable +.CW sys +for later use. +The +.CW load +operator dynamically loads the code for the named +module if it is not already present and instantiates +a new instance of it. +.PP +Line 12 starts the work by printing a familiar message, +using the facilities provided by module +.CW Sys +through its handle +.CW sys ; +the notation +.CW sys->print(...) +means to call the +.CW print +function of the module referred to by +.CW sys . +The interface of +.CW Sys +resembles a binding to some of +the mechanisms of Unix and the ISO/ANSI C library. +.PP +The loop at lines 13-14 takes the +.CW "list +.CW of +.CW string +argument to +.CW init +and iterates over it using the +.CW hd +(head) and +.CW tl +(tail) operators. +When executed, this module combines the +traditional `Hello world' and +.CW echo . +.NH 1 +Lexical conventions +.PP +There are several kinds of tokens: +keywords, identifiers, constants, strings, expression operators, +and other separators. +White space (blanks, tabs, new-lines) is ignored except that +it serves to separate tokens; sometimes it is required +to separate tokens. +If the input has been parsed into tokens up to a particular +character, the next token is taken to include the longest +string of characters that could constitute a token. +.PP +The native character set of Limbo is Unicode, +which is identical with the first 16-bit plane of the ISO 10646 standard. +Any Unicode character may be used in comments, or in strings +and character constants. +The implementation assumes that source files use the UTF-8 representation, +in which 16-bit Unicode characters are represented as sequences +of one, two, or three bytes. +.NH 2 +Comments +.PP +Comments begin with the +.CW # +character and extend to the end of the line. +Comments are ignored. +.NH 2 +Identifiers +.PP +An identifier is a sequence of letters and digits +of which the first is a letter. +Letters are the Unicode characters +.CW a +through +.CW z +and +.CW A +through +.CW Z , +together with the underscore character, and +all Unicode characters with encoded values greater than 160 +(A0 hexadecimal, the beginning of the range corresponding to Latin-1). +.PP +Only the first 256 characters in an identifier +are significant. +.NH 2 +Keywords +.PP +The following identifiers are reserved for use as keywords, +and may not be used otherwise: +.P1 +.ta 1i 2i 3i 4i 5i + adt alt array big + break byte case chan + con continue cyclic do + else exit fn for + hd if implement import + include int len list + load module nil of + or pick real ref + return self spawn string + tagof tl to type + while +.P2 +The word +.CW union +is not currently used by the language. +.NH 2 +Constants +.PP +There are several kinds of constants for denoting values of the +basic types. +.PP +.NH 3 +Integer constants +.PP +Integer constants have type +.CW int +or +.CW big . +They can be represented in several ways. +.PP +Decimal integer constants consist of a sequence of decimal +digits. +A constant with an explicit radix +consists of a decimal radix followed by +.CW R +or +.CW r +followed by the digits of the number. +The radix is between 2 and 36 inclusive; +digits above 10 in the number +are expressed using letters +.CW A +to +.CW Z +or +.CW a +to +.CW z . +For example, +.CW 16r20 +has value 32. +.PP +The type of a decimal or explicit-radix number is +.CW big +if its value exceeds +.CW 2\u31\d\(mi1 , +otherwise it is +.CW int . +.PP +Character constants consist of a single Unicode +character enclosed within single-quote characters +.CW ' . +Inside the quotes the following escape sequences represent +special characters: +.DS +\f(CW\e\e\fR backslash +\f(CW\e'\fR single quote +\f(CW\e"\fR double quote +\f(CW\ea\fR bell (BEL) +\f(CW\eb\fR backspace (BS) +\f(CW\et\fR horizontal tabulation (HT) +\f(CW\en\fR line feed (LF) +\f(CW\ev\fR vertical tabulation (VT) +\f(CW\ef\fR form feed (FF) +\f(CW\er\fR carriage return (CR) +\f(CW\eu\fIdddd \fRUnicode character named by 4 hexadecimal digits +\f(CW\e0\fR NUL +.DE +Character constants have type +.CW int . +.NH 3 +Real constants +.PP +Real constants consist of a sequence of decimal digits +containing one period +.CW . +and optionally followed by +.CW e +or +.CW E +and then by a possibly signed integer. +If there is an explicit exponent, the period is +not required. +Real constants have type +.CW real . +.NH 3 +Strings +.PP +String constants are sequences of Unicode characters contained in double +quotes. +They cannot extend across source lines. +The same escape sequences listed above for character +constants are usable within string constants. +Strings have type +.CW string . +.NH 3 +The nil constant +.PP +The constant +.CW nil +denotes a reference to nothing. +It may be used where an object of a reference +type is expected; +otherwise uninitialized values of reference type +start off with this value, it can be assigned to +reference objects, and reference types can be +tested for equality with it. +(The keyword has other uses as well.) +.NH 2 +Operators and other separators +.PP +The operators are +.P1 +.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6.0i 6.5i + + - * / % & | ^ + == < > <= >= != << >> + && || <- :: + = += -= *= /= %= &= |= ^= <<= >>= + := + ~ ++ -- ! ** +.P2 +The other separators are +.P1 +.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i + : ; ( ) { } [ ] + , . -> => +.P2 +.NH 1 +Syntax notation +.PP +In this manual, Limbo syntax is described by a modified BNF +in which syntactic categories are named in an +.I italic +font, and literals in +.CW typewriter +font. +Alternative productions are listed on separate lines, and +an optional symbol is indicated with +the subscript ``opt.'' +.NH 1 +Types and objects +.PP +Limbo has three kinds of objects. +.I Data +objects exist in the storage associated with +a module; they can be manipulated by arithmetic operations, +assignment, selection of component entities, and other concrete +operations. +Each data object has a type that determines what can be stored +in it and what operations are applicable. +.PP +The second kind of object is the +.I function . +Functions are characterized by the types of the arguments they +accept and the values they return, and are associated with +the modules in which they are defined. +Their names can be made visible in their module's declaration, +or they can be encapsulated within the +.CW adt +(abstract data types) of their modules, +or they can exist privately within their module. +.PP +Finally, Limbo programs are organized into +.I modules : +a named collection of constants, abstract data types, +data, and functions made available by that module. +A module declaration displays the +members visible to other modules; +the module's implementation +defines both the publicly visible members and its +private parts, including the data objects it uses. +A module that wishes to use +the facilities of another includes its declaration in order to +understand what it exports, but +before using them it explicitly loads the new module. +.NH 2 +Types +.PP +Limbo has several basic types, some built-in higher abstractions, +and other ways of composing new types. +In declarations and some other places, constructions naming +a type are used. +The syntax is: +.s1 +type: + data-type + function-type +.s2 +Functions will be discussed in §7 below. +First, data types will be explored. +.NH 2 +Data types +.PP +The syntax of data types is +.s1 +data-type: + CbyteI + CintI + CbigI + CrealI + CstringI + tuple-type + Carray of Idata-type + Clist of Idata-type + Cchan of Idata-type + adt-type + Cref Iadt-type + Cref Ifunction-type + module-type + module-qualified-type + type-name + +data-type-list: + data-type + data-type-list C,I data-type +.s2 +Objects of most data types have +.I value +semantics; when they +are assigned or passed to functions, the destination receives a copy of the +object. +Subsequent changes to the assigned object itself have no effect on +the original object. +The value types are +.CW byte , +.CW int , +.CW big , +.CW real , +.CW string , +the +.CW tuple +types, and +abstract data types or +.CW adt . +The rest have +.I reference +semantics. +When they are assigned, the quantity actually assigned +is a reference to (a pointer to) an underlying object +that is not copied; thus changes or operations on +the assigned value affect the original object. +Reference types include lists, arrays, channels, modules, +.CW ref +.CW adt , +and +.CW ref +.CW fn +types. +.NH 3 +Basic types +.PP +The five basic data types are denoted by +.CW byte , +.CW int , +.CW big , +.CW real , +and +.CW string . +.PP +Bytes are unsigned 8-bit quantities. +.PP +Integers +.CW int ) ( +are 32-bit signed quantities represented in two's complement +notation. +Large integers +.CW big ) ( +are 64-bit signed quantities represented in two's complement notation. +.PP +Real numbers +.CW real ) ( +are 64-bit quantities represented in the +IEEE long floating notation. +.PP +The +.CW byte , +.CW int , +.CW big , +and +.CW real +types are collectively called arithmetic types. +.PP +Strings are rows of Unicode characters. +They may be concatenated and extended character-by-character. +When a string is indexed with a single subscript, it yields an integer +with the Unicode encoding of the character; +when it is indexed by a range, it yields another string. +.NH 3 +Tuple type +.PP +The +.I tuple +type, denoted +.s1 +tuple-type: + C( Idata-type-listC )I +.s2 +is a type consisting of an ordered collection of two or more objects, +each having its own data type. +For each tuple type, the types of the members are +fixed, but need not be identical; +for example, a function might return a tuple containing +an integer and a string. +Each tuple type is characterized solely by the +the order and identity of the types it contains. +Objects of tuple type may be assigned to a list of identifiers (to pick out the +components), and a parenthesized, comma-separated list of expressions +denotes a tuple. +.NH 3 +Array types +.PP +The +.I array +type describes a dynamically-sized row of objects, all of the same +type; it is indexed starting from 0. +An array type is denoted by +.s1 + Carray of Idata-type +.s2 +The size of an array is not part of its type; instead +it is part of the value. +The +.I data-type +may itself be an array, to achieve a multidimensional array. +.NH 3 +List types +.PP +A +.I list +is a sequence of like-typed objects; its denotation is +.s1 + Clist of Idata-type +.s2 +A list is a stack-like object, optimized for +a few operations: get the head (the first object), +get the tail (the rest of the list), place an object at the beginning. +.NH 3 +Channel types +.PP +A +.I channel , +whose type is written +.s1 + Cchan of Idata-type +.s2 +is a communication mechanism capable of sending and receiving objects of the +specified type to another agent in the system. +Channels may be used to communicate between local processes; +using library procedures, they may be connected +to named destinations. +In either case +.I send +and +.I receive +operations may be directed to them. +For example, +.P1 + chan of (int, string) +.P2 +is the type of a channel that transmits tuples consisting of +an integer and an string. +Once an instance of such a channel (say +.CW c ) +has been declared and initialized, +the statement +.P1 + c <-= (123, "Hello"); +.P2 +sends such a tuple across it. +.NH 3 +Abstract data types +.PP +An abstract data type or +.I adt +is an object that can contain data objects of several +different types and declare +functions that operate on them. +The syntax for declaring an +.CW adt +is given later. +Once an +.CW adt +has been declared, the identifier associated with it +becomes a data-type name. +.s1 +adt-type: + identifier + module-qualified-type +.s2 +.PP +There is also a +.CW ref +.CW adt +type representing a reference (pointer) to an +.CW adt . +It is denoted +.s1 + Cref Iadt-type +.s2 +where the identifier is the name of an +.CW adt +type. +.NH 3 +Module types +.PP +A module type name is an identifier: +.s1 +module-type: + identifier +.s2 +The identifier is declared as a module identifier by a +.I module-declaration , +as described in §6.5 below. +An object of module type serves as a handle for the +module, and is used to access its functions. +.NH 3 +Module-qualified type +.PP +When an +.CW adt +is declared within a module declaration, the type name of that +.CW adt +is not generally visible to the rest of the program unless a specific +.CW import +request is given (see §6.6, §10 below). +Without such a request, when +.CW adt +objects implemented by a module are declared by a client +of that module, the +.CW adt +type name is qualified: +.s1 +module-qualified-type: + identifier C->I identifier +.s2 +Here the first identifier is either the name of a module +or a variable of the module type; +the second is the name of a type +mentioned in the module declaration. +.NH 3 +Function reference types +.PP +A function reference type represents a reference to a function of a given type. +It is written as +.s1 + Cref Ifunction-type +.s2 +Function types are discussed in §4.3 below. +.NH 3 +Named types +.PP +Finally, data types may be named, using a +.CW type +declaration; this is discussed in §6.4 below. +.s1 +type-name: + identifier +.s2 +.NH 2 +Function types +.PP +A function type characterizes the arguments and return value of +a function. The syntax is +.s1 +function-type: + Cfn Ifunction-arg-ret + +function-arg-ret: + C( Iformal-arg-listOC ) IraisesO + C( Iformal-arg-listOC ) : Idata-type raisesO + +formal-arg-list: + formal-arg + formal-arg-listC , Iformal-arg + +formal-arg: + nil-or-ID-listC : Itype + nil-or-IDC : self refO Iidentifier + nil-or-IDC : self Iidentifier + C*I + +nil-or-ID-list: + nil-or-ID + nil-or-ID-list C, Inil-or-ID + +nil-or-ID: + identifier + CnilI + +raises: + Craises ( Inil-or-ID-listC )I + CraisesI nil-or-ID + +.s2 +That is, the denotation of a function type has the keyword +.CW fn +followed by a comma-separated list of its arguments +enclosed in parentheses, +and perhaps followed by the type the function returns. +Absence of a return value means that the function returns no +value: it is a procedure. +The names and types of arguments are specified. +However, the name of an argument may be replaced by +.CW nil ; +in this case it is nameless. +For example, +.P1 + fn (nil: int, nil: int): int + fn (radius: int, angle: int): int + fn (radius, angle: int): int +.P2 +all denote exactly the same type, +namely a function of two integers that returns an integer. +As another example, +.P1 + fn (nil: string) +.P2 +is the type of a function that takes a string argument +and returns no value. +.PP +The +.CW self +keyword has a specialized use within +.CW adt +declarations. +It may be used only for the first argument +of a function declared within an +.CW adt ; +its meaning is discussed in §6.3 below. +.PP +The star character +.CW * +may be given as the last argument in a function type. +It declares that +the function is variadic; during a call, actual arguments at its +position and following are passed in a manner +unspecified by the language. +For example, the type of the +.CW print +function of the +.CW Sys +module is +.P1 + fn (s: string, *): int +.P2 +This means that the first argument of +.CW print +is a string and that other arguments may be given when the function +is called. +The Limbo language itself has no way of accessing these arguments; +the notation is an artifice for describing facilities +built into the runtime system, such as the +.CW Sys +module. +.PP +The type of a function includes user-defined exceptions that it raises, +which must be listed in a corresponding +.CW raises +clause. +.NH 1 +Limbo programs +.PP +Limbo source programs that implement modules are stored in files, +conventionally named with the suffix +.CW .b . +Each such file begins with a single +.CW implement +directive naming the type of the module being implemented, +followed by a sequence of declarations. +Other files, conventionally named with the suffix +.CW .m , +contain declarations for things obtainable from other modules. +These files are incorporated by an +.CW include +declaration in the implementation modules that need them. +At the top level, a program consists of a sequence +of declarations. +The syntax is +.s1 +program: + Cimplement Iidentifier-listC ; Itop-declaration-sequence + +top-declaration-sequence: + top-declaration + top-declaration-sequence top-declaration + +top-declaration: + declaration + identifier-listC := IexpressionC ;I + identifier-listC = IexpressionC ;I + C( Iidentifier-listC ) := IexpressionC ;I + module-declaration + function-definition + adt-declaration +.s2 +The +.CW implement +declaration at the start identifies the type of the module that +is being implemented. +The rest of the program consists of a sequence of various kinds of +declarations and definitions that announce the names +of data objects, types, and functions, and also create +and initialize them. +It must include a module declaration for the module +being implemented and the objects it announces, +and may also include declarations for the functions, data +objects, types, and constants used privately within the module +as well as declarations for modules used by it. +.PP +Declarations are used both at the top +level (outside of functions) and also inside functions +and module declarations. +Some styles of declaration +are allowed only in certain of these places, +but all will be discussed together. +.PP +Most implementation modules provide an implementation for one type of module. +Several module types may be listed, however, in the +.CW implement +declaration, when the implementation module implements them all. +When the same name appears in more than one such module type, it must +have the same type. +.NH 1 +Declarations +.PP +Declarations take several forms: +.s1 +declaration: + identifier-listC : ItypeC ;I + identifier-listC : ItypeC = IexpressionC ;I + identifier-listC : con IexpressionC ;I + Iidentifier-listC : import Iidentifier C;I + identifier-listC : typeI typeC ;I + identifier-listC : exceptionI tuple-typeO + Cinclude Istring-constantC ;I + +identifier-list: + identifier + identifier-listC , Iidentifier + +expression-list: + expression + expression-listC , Iexpression +.s2 +.NH 2 +Data declarations +.PP +These forms constitute the basic way to declare and +initialize data: +.s1 + identifier-listC : ItypeC ;I + identifier-listC : ItypeC = IexpressionC ;I +.s2 +A comma-separated sequence of identifiers is followed by a colon +and then the name of a type. +Each identifier is declared as having that type and denotes a +particular object +for rest of its scope (see §11 below). +If the declaration contains +.CW = +and an expression, the type must be a data type, and +all the objects are initialized from +the value of the expression. +In a declaration at the top level +(outside of a function), the expression must be +constant (see §8.5) or an array initialized with constant expressions; +the bound of any array must be a constant expression. +Lists and +.CW ref +.CW adt +types may not be initialized at the top level. +If an object is not explicitly initialized, then +it is always set to +.CW nil +if it has a reference type; +if it has arithmetic type, then it is set to 0 +at the top level and is undefined if it occurs +within a function. +.PP +For example, +.P1 + i, j: int = 1; + r, s: real = 1.0; +.P2 +declares +.CW i +and +.CW j +as integers, +.CW r +and +.CW s +as real. +It sets +.CW i +and +.CW j +to 1, +and +.CW r +and +.CW s +to 1.0. +.PP +Another kind of declaration is a shorthand. +In either of +.s1 + identifierC := IexpressionC ;I + C( Iidentifier-listC ) := IexpressionC ;I + +.s2 +identifiers on the left are declared using the type of the expression, +and are initialized with the value of the expression. +In the second case, the expression must be a tuple or an +.CW adt , +and the types and values attributed to the identifiers +in the list are taken from the members of the tuple, or the +data members of the +.CW adt +respectively. +For example, +.P1 + x: int = 1; +.P2 +and +.P1 + x := 1; +.P2 +are the same. +Similarly, +.P1 + (p, q) := (1, 2.1); +.P2 +declares the identifiers on the left as +.CW int +and +.CW real +and initializes them to 1 and 2.1 respectively. +Declarations with +.CW := +can also be expressions, and are discussed again in §8.4.4 below. +.NH 2 +Constant declarations +.PP +The +.CW con +declaration +.s1 + Iidentifier-listC : conI expressionC ;I +.s2 +declares a name (or names) for constants. +The +.I expression +must be constant (see §8.5). +After the declaration, +each identifier in the list may be used anywhere a constant +of the appropriate type is needed; +the type is taken from the type of the constant. +For example, after +.P1 + Seven: con 3+4; +.P2 +the name +.CW Seven +is exactly the same as the constant 7. +.PP +The identifier +.CW iota +has a special meaning in the expression in a +.CW con +declaration. +It is equivalent to the integer constant +.CW 0 +when evaluating the expression for the first (leftmost) identifier declared, +.CW 1 +for the second, and so on numerically. +For example, the declaration +.P1 + M0, M1, M2, M3, M4: con (1<<iota); +.P2 +declares several constants +.CW M0 +through +.CW M4 +with the values 1, 2, 4, 8, 16 respectively. +.PP +The identifier +.CW iota +is not reserved except inside the expression +of the +.CW con +declaration. +.NH 2 +adt declarations +.PP +An +.CW adt +or abstract data type contains data objects and functions that +operate on them. +The syntax is +.s1 +adt-declaration: + IidentifierC : adt { Iadt-member-listOC } ;I + +adt-member-list: + adt-member + adt-member-list adt-member + +adt-member: + identifier-listC : cyclicO Idata-typeC ;I + identifier-listC : con IexpressionC ;I + identifier-listC : Ifunction-typeC ;I + Cpick { Ipick-member-listC }I +.s2 +After an +.I adt-declaration , +the identifier becomes the name of the type of that +.CW adt . +For example, after +.P1 + Point: adt { + x, y: int; + add: fn (p: Point, q: Point): Point; + eq: fn (p: Point, q: Point): int; + }; +.P2 +the name +.CW Point +is a type name for an +.CW adt +of two integers and two +functions; the fragment +.P1 + r, s: Point; + xcoord: int; + ... + xcoord = s.x; + r = r.add(r, s); +.P2 +makes sense. +The first assignment selects one of the data members of +.CW s ; +the second calls one of the function members of +.CW r . +.PP +As this example indicates, +.CW adt +members are accessed by mentioning an object with the +.CW adt +type, a dot, and then the name of the member; +the details will be discussed in §8.13 below. +A special syntactic indulgence is available for functions declared within an +.CW adt : +frequently such a function +receives as an argument the same object used to access it +(that is, the object before the dot). +In the example just above, +.CW r +was both the object being operated on and the first argument to the +.CW add +function. +If the first formal argument of a function declared in an +.CW adt +is marked with the +.CW self +keyword, then in any calls to the function, the +.CW adt +object is implicitly passed to the function, and +is not mentioned explicitly in the actual argument list +at the call site. +For example, in +.P1 + Rect: adt { + min, max: Point; + contains: fn(r: self Rect, p: Point): int; + }; + + r1: Rect; + p1: Point; + ... + if (r1.contains(p1)) ... +.P2 +because the first argument of the +.CW contains +function is declared with +.CW self , +the subsequent call to it automatically passes +.CW r1 +as its first argument. The +.CW contains +function itself is defined elsewhere with this first +argument explicit. +(This mechanism is analogous to the +.I this +construct in C++ and other languages, +but puts the special-casing at the declaration site and makes it explicit.) +.PP +If +.CW self +is specified in the declaration of a function, it must also be +specified in the definition as well. For example, +.CW contains +would be defined +.P1 + Rect.contains(r: self Rect, p: Point) + { + . . . + } +.P2 +.PP +The +.CW adt +type in Limbo +does not provide control over the visibility +of its individual members; if any are accessible, all are. +.PP +Constant +.CW adt +members follow the same rules as ordinary constants (§6.2). +.PP +The +.CW cyclic +modifier will be discussed in §11.1. +.NH 3 +pick adts +.PP +An +.CW adt +which contains a +.CW pick +member is known as a +.I pick +.I adt . +A +.CW pick +.CW adt +is Limbo's version of a +.I "discriminated union" . +An +.CW adt +can only contain one +.CW pick +member and it must be the last component of the +.CW adt . +Each +.I identifier +enumerated in the +.I pick-tag-list +names a variant type of the +.CW pick +.CW adt . +The syntax is +.s1 +pick-member-list: + pick-tag-listC =>I + pick-member-list pick-tag-listC =>I + pick-member-list identifier-listC : cyclicO Idata-typeC ;I +.s2 +.s1 +pick-tag-list: + identifier + pick-tag-listC or Iidentifier +.s2 +.PP +The +.I pick-member-list +contains a set of data members for each +.I pick-tag-list . +These data members are specific to those variants of the +.CW pick +.CW adt +enumerated in the +.I pick-tag-list . +The +.CW adt +data members found outside of the +.CW pick +are common to all variants of the +.CW adt . +A +.CW pick +.CW adt +can only be used as a +.CW ref +.CW adt +and can only be initialized from a value of one of its variants. +For example, if +.CW Constant +is a +.CW pick +.CW adt +and +.CW Constant.Real +is one of its variant types then +.P1 + c : ref Constant = ref Constant.Real("pi", 3.1); +.P2 +will declare +.CW c +to have type +.CW ref +.CW Constant +and initialize it with a value of the variant type +.CW ref +.CW Constant.Real . +.NH 2 +Type declarations +.PP +The type declaration +.s1 + Iidentifier-listC : typeI data-type ;I +.s2 +introduces the identifiers as synonyms for the +given type. +Type declarations are transparent; that is, +an object declared with the newly-named +type has the same type as the one it abbreviates. +.NH 2 +Module declarations +.PP +A module declaration collects and packages declarations of +.CW adt , +functions, constants and simple types, and creates an +interface with a name +that serves to identify the type of the module. +The syntax is +.s1 +module-declaration: + IidentifierC : module { Imod-member-listOC } ;I + +mod-member-list: + mod-member + mod-member-list mod-member + +mod-member: + identifier-listC : Ifunction-typeC ;I + identifier-listC : Idata-typeC ;I + adt-declarationC ;I + identifier-listC : con Iexpression C;I + identifier-listC : type Itype C;I +.s2 +After a module declaration, the named +.I identifier +becomes the name of the type of that module. +For example, the declaration +.P1 +Linear: module { + setflags: fn (flag: int); + TRUNCATE: con 1; + Vector: adt { + v: array of real; + add: fn (v1: self Vector, v2: Vector): Vector; + cross: fn (v1: self Vector, v2: Vector): Vector; + dot: fn (v1: self Vector, v2: Vector); + make: fn (a: array of real): Vector; + }; + Matrix: adt { + m: array of array of real; + add: fn (m1: self Matrix, m2: Matrix): Matrix; + mul: fn (m1: self Matrix, m2: Matrix): Matrix; + make: fn (a: array of array of real): Matrix; + }; +}; +.P2 +is a module declaration for a linear algebra package that +implements two +.CW adt , +namely +.CW Vector +and +.CW Matrix , +a constant, +and a function +.CW setflags . +The name +.CW Linear +is the type name for the module, and it may be used to declare +an object referring to an instance of the module: +.P1 + linearmodule: Linear; +.P2 +Before the module can be used, it must be loaded, for example in +the style: +.P1 + linearmodule = load Linear "/usr/dmr/limbo/linear.dis"; + if (linearmodule == nil) { + sys->print("Can't load Linear\en"); + exit; + } +.P2 +The +.CW load +operator is discussed more fully in §8.4.5 below. +.PP +To initialize data declared as part of a module +declaration, an assignment expression may be used at the top level. +For example: +.P1 + implement testmod; + testmod: module { + num: int; + }; + . . . + num = 5; +.P2 +The right side of the assignment must be a constant expression (§8.5). +.NH 2 +Declarations with +.CW import +.PP +These declarations take the form +.s1 + Iidentifier-listC : import Iidentifier C;I +.s2 +Identifiers for entities +declared within a module declaration are normally +meaningful only in a context that +identifies the module. +The +.CW import +declaration lifts the names of specified members of a module +directly into the current scope. +The use of +.CW import +will be discussed more fully in §8.1.4 below, after the syntax +for expressions involving modules has been presented. +.NH 2 +Exception declarations +.PP +Exceptions represent run-time errors not data objects or values. +Exception declarations have the form: +.s1 + identifier-listC : exceptionI tuple-typeO +.s2 +Each identifier gives a compile-time name to a distinct user-defined run-time error, +signaled at run-time by a +.CW raise +statement that quotes that identifier, as described below. +An exception optionally includes a tuple of data values that qualifies the exception; +the types of those values are provided by the tuple type in this declaration. +.NH 2 +Declarations with +.CW include +.PP +The string following the +.CW include +keyword names +a file, which is inserted into the program's +text at that point. +The included +text is treated like text literally present. +Conventionally, included files declare +module interfaces and are named with the suffix +.CW .m . +The directories to be searched for included files +may be specified to the Limbo compiler command. +Include files may be nested. +.NH 1 +Function definitions +.PP +All executable code +is supplied as part of a function definition. +The syntax is +.s1 +function-definition: + function-name-part function-arg-retC { IstatementsC }I + +function-name-part: + identifier + function-name-partC . Iidentifier +.s2 +The syntax of the statements in a function will be discussed in §9 below. +As a brief example, +.P1 + add_one(a: int): int + { + return a+1; + } +.P2 +is a simple function +that might be part of the top level of a module. +.PP +Functions that are declared within an +.CW adt +use the qualified form of definition: +.P1 + Point: adt { + x, y: int; + add: fn (p: Point, q: Point): Point; + eq: fn (p: Point, q: Point): int; + } + . . . + Point.add(p: Point, q: Point): Point + { + return Point(p.x+q.x, p.y+q.y); + } +.P2 +Because an +.CW adt +may contain an +.CW adt , +more than one qualification is possible. +.NH 1 +Expressions +.PP +Expressions in Limbo resemble those of C, although some +of the operators are different. +The most salient difference between Limbo's expression +semantics and those of C is that Limbo +has no automatic coercions between types; in Limbo every +type conversion is explicit. +.NH 2 +Terms +.PP +The basic elements of expressions are terms: +.s1 +term: + identifier + constant + real-constant + string-constant + CnilI + C( Iexpression-listC )I + termC . Iidentifier + termC -> Iterm + termC ( Iexpression-listOC )I + termC [ IexpressionC ]I + termC [ IexpressionC : IexpressionC ]I + termC [ IexpressionC : ]I + termC ++I + termC --I +.s2 +The operators on terms all associate to the left, +and their order of precedence, with tightest listed first, is as follows: +.P1 + . + -> + () [] ++ -- +.P2 +.NH 3 +Simple terms +.PP +The first five kinds of term are constants and identifiers. +Constants have a type indicated by their syntax. +An identifier used in an expression is often a previously declared +data object with a particular data type; when used as a term +in an expression +it denotes the value stored in the object, and the term has +the declared object's type. +Sometimes, as discussed below, identifiers used in expressions +are type names, function names, or module identifiers. +.NH 3 +Parenthesized terms +.PP +A comma-separated list of expressions enclosed in parentheses +is a term. +If a single expression is present in the list, +the type and value are those of the expression; +the parentheses affect only the binding +of operators in the expression of which the term +is a part. +If there is more than one expression in the list, +the value is a tuple. +The member types +and values are taken from those of the expressions. +.NH 3 +Selection +.PP +A term of the form +.s1 + termC . Iidentifier +.s2 +denotes selection of a member of an +.CW adt . +The term must be a +type name or yield an object; +its type must be +.CW adt +or +.CW ref +.CW adt ; +the identifier must be a member of the +.CW adt . +The result denotes the named member (either a data object +or a function). +.NH 3 +Module qualification +.PP +A term of the form +.s1 + termC -> Iterm +.s2 +denotes module qualification. +The first term identifies a module: either it is a module type name, +or it is an expression of module type. +The second term is a constant name, type, or function specified within +that module's declaration. +Either the module type name or +an object of the module's type suffices to qualify constants and types; +functions directly exported by the module or contained within its +.CW adt +must be qualified by an object of the module's type, initialized with +.CW load . +.PP +An example using an abridged version of an example above: given +.P1 + Linear: module { + setflags: fn(flag: int); + TRUNCATE: con 1; + Vector: adt { + make: fn(v: array of real): Vector; + v: array of real; + }; + }; +.P2 +one might say +.P1 + lin := load Linear "/dis/linear.dis"; + a: array of real; + + v1: lin->Vector; + v2: Linear->Vector; + lin->setflags(Linear->TRUNCATE); + v1 = lin->(Linear->Vector).make(a); + v1 = lin->v1.make(a); + v1 = lin->v1.add(v1); + v1.v = nil; +.P2 +Here, the declarations for +.CW v1 +and +.CW v2 +are equivalent; either a module type name (here, +.CW Linear ) +or a handle (here, +.CW lin ) +suffices to identify the module. +In the call to +.CW setflags , +a handle +is required for the call itself; +the type name is sufficient for the constant. +.PP +When calling a function associated with an +.CW adt +of another module, it is necessary to identify +both the module and the +.CW adt +as well as the function. +The two calls to the +.CW make +function illustrate two ways of doing this. +In the first, +.P1 + v1 = lin->(Linear->Vector).make(a); +.P2 +the module handle +.CW lin +is specified first, then +the type name of the +.CW Vector +.CW adt +within it, and then the function. +In the second call +.P1 + v1 = lin->v1.make(a); +.P2 +instead of using a type name to specify the +.CW adt , +an instance of an object of the appropriate type is +used instead. +In the first example, the parentheses are required because +the qualification operators associate to the left. +.P1 + v1 = lin->Vector.make(a); # Wrong + v1 = lin->Linear->Vector.make(a); # Wrong +.P2 +The first is wrong because the same +.CW lin +can't serve as a qualifier for both the type and the call; +the second is wrong because +.CW lin->Linear +is meaningless. +.PP +Using +.CW import +makes the code less verbose: +.P1 + lin := load Linear "/usr/dmr/limbo/linear.dis"; + Vector, TRUNCATE, setflags: import lin; + a: array of real; + + v1: Vector; + v2: Vector; + setflags(TRUNCATE); + v1 = Vector.make(a); + v1 = v1.make(a); + v1 = v1.add(v1); + v1.v = nil; +.P2 +.NH 3 +Function calls +.PP +The interpretation of an expression in the form +.s1 + termC ( Iexpression-listOC ) +.s2 +depends on the declaration of the term. +If it is the (perhaps qualified) name of an +.CW adt , +then the expression is a cast; this is discussed in §8.2.11 below. +If the term is either the (perhaps qualified) name of a function +or a value of a function reference type, and +the expression means a function call; this is discussed here. +.PP +A plain identifier as the +.I term +can name a function defined +in the current module or imported into it. +A term qualified by using the selection operator +.CW . +specifies a function member of an +.CW adt ; +a term using +.CW -> +specifies a function defined in another module. +.PP +The +.I term , +including a plain identifier denoting a variable of function reference type, +can also yield a function reference value. +The value specifies both a function and its module, +established when the value was created, +and cannot be qualified by the +.B -> +specifier. +.PP +Function calls in Limbo +create a copy of each argument of value type, +and the execution of a function cannot +affect the value of the corresponding actual argument. +For arguments of reference type, +execution of the function may affect the value of the object +to which the reference refers, although it cannot +change the argument itself. +The actual arguments to a function are evaluated +in an unspecified order, +although any side effects caused by argument evaluation +occur before the function is called. +.PP +Function calls may be directly or indirectly recursive; +objects declared within each function are distinct from +those in their dynamic predecessors. +.PP +Functions (§4.3, §7) may either return a value +of a specified type, or return no value. +If a function returns a value, it has the specified type. +A call to a function that returns no value may appear only as the +sole expression in a statement (§9.1). +.PP +A function name is converted to a reference to that function when it appears +in a context requiring a function reference type, including assignment to a variable, +as an actual parameter, or the return value of a function. +The resulting reference value includes the appropriate module value for the function name, +following the rules given above for implicit and explicit qualifiers, and imports. +For example, the following program fragment defines a table of commands: +.P1 + Cmd: adt { + c: int; + f: ref fn(a: array of string): int; + }; + + mkcmds(): array of Cmd + { + return array[] of { + ('.', editdot), + ('a', editadd), + ('d', editdel), + ('?', edithelp), + ('w', editwrite), + ('q', editquit), + }; + } + + editdot(a: array of string): int + { + ... + } + \&... + editquit(a: array of string): int + { + ... + } +.P2 +which might be used as follows: +.P1 + cmd := mkcmds(); + ... + for(i := 0; i < len cmd; i++) + if(cmd[i].c == c){ + cmd[i].f(args); + return; + } + error("unknown command"); +.P2 +.NH 3 +Subscripting and slicing +.PP +In a term of the form +.s1 + termC [ IexpressionC ]I +.s2 +the first term must be an array or a string, and the +bracketed expression must have +.CW int +type. +The whole term +designates a member of the array or string, indexed by the bracketed expression; +the index origin is 0. +For an array, the type of the whole term is +the type from which the array is constructed; +for a string, the type is an +.CW int +whose value is the Unicode character at that position in the string. +.PP +It is erroneous to refer to a nonexisting +part of an array or string. +(A single exception to this rule, discussed in §8.4.1 below, +allows extending a string by assigning a character at its end.) +.PP +In a term of the form +.s1 + termC [ IexpressionC : IexpressionC ]I +.s2 +the first term must be an array or a string, and the whole term +denotes a slice of it. +The first expression is the lower bound, and the second +is the upper. +If +.CW e1 +is the first expression and +.CW e2 +is the second, then in +.CW a[e1:e2] +it must be the case that +.CW "0<=e1, e1<=e2, e2<=len a" , +where +.CW len +gives the number of elements in the array or string. +When the term is an array, the value is an +array of the same type beginning at the indicated +lower bound and extending to the element just before +the upper bound. +When the term is a string, the value is similarly the substring +whose first character is indexed by the lower bound +and whose last character lies just before the upper bound. +.PP +Thus, for both arrays and strings, the number of elements in +.CW "a[e1:e2] +is equal to +.CW e2-e1 . +.PP +A slice of the form +.CW a[e:] +means +.CW "a[e:len a]. +.PP +When a string slice is assigned to another string or passed as an +argument, a copy of its value is made. +.PP +A slice of an array produces a reference to the designated subarray; +a change to an element of either the original array or +the slice is reflected in the other. +.PP +In general, slice expressions cannot be the subject of +assignments. +However, as a special case, an array slice expression of the +form +.CW a[e1:] +may be assigned to. +This is discussed in §8.4.1. +.PP +The following example shows how slices +can be used to accomplish what would +need to be done with pointer arithmetic in C: +.P1 + fd := sys->open( ... ); + want := 1024; + buf := array[want] of byte; + b := buf[0:]; + while (want>0) { + got := sys->read(fd, b, want); + if (got<=0) + break; + b = b[got:]; + want -= got; + } +.P2 +Here the array +.CW buf +is filled by successive calls to +.CW sys->read +that may supply fewer bytes than requested; each call +stores up to +.CW want +bytes +starting at +.CW b[0] , +and returns the number of bytes stored. +The invariant is that the slice +.CW b +always refers to the part of the array still to be stored into. +.NH 3 +Postfix increment and decrement +.PP +A term of the form +.s1 + termC ++I +.s2 +is called a +.I post-increment . +The term must be an lvalue (see §8.4 below) and must have an +arithmetic type. +The type and value of the whole term is +that of the incremented term. +After the value is taken, 1 of the appropriate +type is added to the lvalue. +The result is undefined if the same object is changed +more than once in the same expression. +.PP +The term +.s1 + termC --I +.s2 +behaves analogously to the increment case except +that 1 is subtracted from the lvalue. +.PP +.NH 2 +Monadic expressions +.PP +Monadic expressions are expressions with +monadic operators, together with a few more +specialized notations: +.s1 +monadic-expression: + term + monadic-operator monadic-expression + Carray [ IexpressionC ] of Idata-type + Carray [ IexpressionOC ] of { Iinit-listC }I + Clist of { Iexpression-listC }I + Cchan of Idata-type + Cchan [ IexpressionC ] of Idata-type + data-type monadic-expression + +monadic-operator: one of + C+ - ! ~ ref * ++ -- <- hd tl lenI +.s2 +.NH 3 +Monadic additive operators +.PP +The +.CW - +operator produces the negative of its operand, which +must have an arithmetic type. +The type of the result is the same as the type of +its operand. +.PP +The +.CW + +operator has no effect; it is supplied only for +symmetry. +However, its argument must have an arithmetic type +and the type of the result is the same. +.NH 3 +Logical negation +.PP +The +.CW ! +operator yields the +.CW int +value 1 if its operand +has the value 0, and yields 0 otherwise. +The operand must have type +.CW int . +.NH 3 +One's complement +.PP +The +.CW ~ +operator yields the 1's complement of its +operand, which must have type +.CW int +or +.CW byte . +The type of the result is the same as that of its operand. +.NH 3 +Reference and indirection operators +.PP +If +.I e +is an expression of an +.CW adt +type, then +.CW ref +.I e +is an expression of +.CW ref +.CW adt +type whose value refers to (points to) an anonymous object with value +.I e . +The +.CW ref +operator differs from the unary +.CW & +operator of C; it makes a new object and returns a reference +to it, rather than generating a reference to an existing object. +.PP +If +.I e +is an expression of type +.CW ref +.CW adt , +then +.CW * +.I e +is the value +of the +.CW adt +itself. +The value of +.I e +must not be +.CW nil . +.PP +For example, in +.P1 + Point: adt { ... }; + p: Point; + pp: ref Point; + p = Point(1, 2); + pp = ref p; # pp is a new Point; *pp has value (1, 2) + p = Point(3, 4); # This makes *pp differ from p + *pp = Point(4, 5); # This does not affect p +.P2 +the expression +.CW *pp +at first refers to a copy of the value stored in +.CW p , +so +.CW "*pp == p +is true; however, when +.CW p +is changed later, +.CW *pp +does not change. +.NH 3 +Prefix increment and decrement +.PP +A monadic expression of the form +.s1 + C++ Imonadic-expression +.s2 +is called a +.I pre-increment . +The monadic expression must be an lvalue (see §8.4 below) and must have an +arithmetic type. +Before the value is taken, 1 of the appropriate type +is added to the lvalue. +The type and value of the whole expression is +that of the now incremented term. +The result is undefined if the same object is changed +more than once in the same expression. +.PP +The term +.s1 + C-- Imonadic-expression +.s2 +behaves analogously to the increment case except +that 1 is subtracted from the lvalue. +.NH 3 +Head and tail +.PP +The operand of the +.CW hd +operator must be a non-empty list. +The value is the first member of the list +and has that member's type. +.PP +The operand of the +.CW tl +operator must be a non-empty list. +The value is the tail of the list, +that is, the part of the list after its +first member. +The tail of a list with one member is +.CW nil . +.NH 3 +Length +.PP +The operand of the +.CW len +operator is a string, an array, or a list. +The value is an +.CW int +giving the number of elements currently in the item. +.NH 3 +Tagof +.PP +The operand of the +.CW tagof +operator is a monadic expression of type +.CW ref +.CW adt +that refers to a +.CW pick +.CW adt . +or the type name of a +.CW pick +.CW adt +or one of its variants. +The value is an +.CW int +giving a unique value for each of the variants and for the +.CW pick +.CW adt +type itself. +.NH 3 +Channel communication +.PP +The operand of the communication operator +.CW <- +has type +.CW chan +.CW of +.I sometype . +The value of the expression +is the first unread object previously sent over that +channel, and has the type associated with the channel. +If the channel is empty, the program delays +until something is sent. +.PP +As a special case, the operand of +.CW <- +may have type +.CW array +.CW of +.CW chan +.CW of +.I sometype . +In this case, all of the channels in the array are tested; +one is fairly selected from those that have data. +The expression yields a tuple of type +.CW (int, +.I sometype +.CW ) ; +its first member gives the index of the channel from +which data was read, and its second member is the +value read from the channel. +If no member of the array has data ready, the expression delays. +.PP +Communication channels are treated more fully in §9.8 and +§9.13 below with the discussion of the +.CW alt +and +.CW spawn +statements. +.NH 3 +Creation of arrays +.PP +In the expressions +.s1 + Carray [ IexpressionC ] of Idata-type + Carray [ IexpressionOC ] of { Iinit-listC ,OC }I +.s2 +the value is a new array of the specified type. +In both forms, the +.I expression +must be of type +.CW int , +and it supplies the size of the array. +In the first form, the type is given, +and the values in the array are initialized as +appropriate to the underlying type. +In the second form, a comma-separated list of values to initialize +the array is given, optionally followed by a trailing comma. +The type of the array is taken from the types of +the initializers, which must all be the same. +The list of initializers has the syntax +.s1 +init-list: + element + init-listC , Ielement + +element: + expression + expressionC => Iexpression + C* => Iexpression +.s2 +In an +.I init-list +of plain expressions (without +.CW => ), +the members of the array +are successively initialized with the corresponding +elements of the init-list. +An element of the form +.CW e1=>e2 +initializes the member of the array at subscript +.CW e1 +with the expression +.CW e2 . +After such an element has been given, subsequent +simple elements (without +.CW => ) +begin initializing at position +.CW e1+1 +and so on. +Each of the first expressions must be of type +.CW int +and must evaluate to a constant (§8.5). +.PP +If an element of the form +.CW * +.CW =>e2 +is present, all members of the array not otherwise +initialized are set to the value +.CW e2 . +The expression +.CW e2 +is evaluated for each subscript position, +but in an undefined order. +For example, +.P1 + arr := array[3] of { * => array[3] of { * => 1 } }; +.P2 +yields a 2-dimensional array (actually an array of arrays) filled with +.CW 1 's. +.PP +If the expression giving the size of the array is omitted, its size +is taken from the largest subscript of +a member explicitly initialized. +It is erroneous to initialize a member twice. +.NH 3 +Creation of lists +.PP +The value of an expression +.s1 + Clist of { Iexpression-listC }I +.s2 +is a list consisting of the expressions given. +The types of the expressions must be identical, +and this type is the underlying type of the list. +The first expression is the head of the list, and the +remaining expressions are a list constituting its tail. +Where a list is expected, +.CW nil +specifies an empty list. +.NH 3 +Creation of channels +.PP +The value of +.s1 + Cchan of Idata-type +.s2 +is an initialized channel of the specified type. +Just a declaration of a channel leaves it initialized only to +.CW nil ; +before it can be used it must be created. For example, +.P1 + ch: chan of int; # just declares, sets ch to nil + . . . + ch = chan of int; # creates the channel and assigns it +.P2 +Such a channel is unbuffered. +The value of +.s1 + Cchan [ IexpressionC ] of Idata-type +.s2 +is an initialized channel of the specified type. +The +.I expression +must be of type +.CW int , +and sets the size of the channel's buffer. +If the size is zero, the channel is unbuffered, as for the first form. +.NH 3 +Casts +.PP +An expression of the form +.s1 + data-type monadic-expression +.s2 +in which a type name is followed by an expression +is called a +.I cast , +and converts the monadic expression to the named type. +Only certain specialized forms are provided for. +.NH 4 +Arithmetic casts +.PP +In arithmetic casts, the named type must be one of +.CW byte , +.CW int , +.CW big , +or +.CW real , +and the monadic-expression must have arithmetic type. +For example, +.P1 + byte 10 +.P2 +is an expression of +.CW byte +type and value 10. +When real values are converted to integral ones, +they are rounded to the nearest integer, and away from 0 +if there is a tie. +The effect of overflow during conversion is undefined. +.NH 4 +Casts to strings +.PP +Here the named data type is +.CW string . +In a first form, the monadic expression has arithmetic type +.CW byte , ( +.CW int , +.CW big , +or +.CW real ) +and the value is a string containing the decimal representation +of the value, which may be either positive or negative. +A +.CW real +operand is converted as if by format +.CW %g , +and if the result is converted back to +.CW real , +the original value will be recovered exactly. +.PP +In a second form, +the monadic expression has type +.CW array +.CW of +.CW byte . +The value is a new string containing the Unicode characters +obtained by interpreting the bytes in the array as a UTF-8 representation +of that string. +(UTF-8 is a representation of 16-bit Unicode characters as one, +two, or three bytes.) +The result of the conversion is undefined if the byte array +ends within a multi-byte UTF-8 sequence. +.NH 4 +Casts from strings +.PP +In a first form, the monadic expression is a string, +and the named type is an arithmetic type. +The value is obtained by converting the string to +that type. Initial white space is ignored; after a possible +sign, conversion +ceases at the first character not part of a number. +.PP +In a second form, the named type is +.CW array +.CW of +.CW byte +and the monadic-expression is a string. +The value is a new array of bytes containing the UTF-8 representation +of the Unicode characters in the string. +For example, +.P1 + s := "Ångström"; + a := array of byte s; + s = string a; +.P2 +takes the string +.CW s +apart into bytes in the second line, +and puts it back in the third. +The length of +.CW s +is 8, because it contains that many characters; +the length of +.CW a +is larger, because some of its characters require more than +one byte in the UTF-8 representation. +.NH 4 +Casts to +.CW adt +and +.CW ref +.CW adt +.PP +Here the named type is that of an +.CW adt +or +.CW ref +.CW adt , +and the monadic expression is a comma-separated list of expressions +within parentheses. +The value of the expression is an instance of an +.CW adt +of the named type whose data members are initialized with +the members of the list, or whose single data member +is initialized with the parenthesized expression. +In case the type is +.CW ref +.CW adt , +the value is a reference to the new +instance of the +.CW adt . +.PP +The expressions in the list, read in order, correspond with the data +members of the +.CW adt +read in order; their types and number must agree. +Placement of any function members of the +.CW adt +is ignored. +For example, +.P1 + Point: adt { + x: int; + eq: fn (p: Point): int; + y: int; + }; + . . . + p: Point; + p = Point(1, 2); +.P2 +puts in +.CW p +a +.CW Point +whose +.CW x +value is 1 and whose +.CW y +value is 2. +The declaration and assignment could also be written +.P1 + p := Point(1, 2); +.P2 +.NH 2 +Binary expressions +.PP +Binary expressions are either monadic expressions, +or have two operands and an infix operator; +the syntax is +.s1 +binary-expression: + monadic-expression + binary-expression binary-operator binary-expression + +binary-operator: one of + C** * / % + - << >> < > <= >= == != & ^ | :: && ||I +.s2 +All these binary operators are left-associative except for +.CW ** +and +.CW :: , +which associate to the right. +Their precedence is as listed here, with tightest first: +.P1 + ** + * / % + + - + << >> + < > <= >= + == != + & + ^ + | + :: + && + || +.P2 +.NH 3 +Exponentiation +.PP +The +.CW ** +operator accomplishes exponentiation. +The type of the left operand must be +.CW int , +.CW big +or +.CW real . +The type of the right operand must be +.CW int . +The result has the type of the left operand. +The operator is right associative, thus +.P1 + 3**4*2 = (3**4)*2 = 81*2 = 162 + -3**4 = (-3)**4 = 81 + 2**3**2 = 2**(3**2) = 2**9 = 512 +.P2 +.NH 3 +Multiplicative operators +.PP +The +.CW * , +.CW / , +and +.CW % +operators respectively accomplish multiplication, division, and remainder. +The operands must be of identical arithmetic type, and the result has that +same type. +The remainder operator does not apply to type +.CW real . +If overflow or division by 0 occurs, the result is undefined. +The absolute value of +.CW a%b +is less than the absolute value of +.CW b ; +.CW "(a/b)*b + a%b +is always equal to +.CW a ; +and +.CW a%b +is non-negative if +.CW a +and +.CW b +are. +.NH 3 +Additive operators +.PP +The +.CW + +and +.CW - +operators respectively accomplish addition and subtraction +of arithmetic operands of identical type; +the result has the same type. +The behavior on overflow or underflow is undefined. +The +.CW + +operator may also be applied to strings; +the result is a string that is the concatenation of the operands. +.NH 3 +Shift operators +.PP +The shift operators are +.CW << +and +.CW >> . +The left operand may be +.CW big , +.CW int , +or +.CW byte ; +the right operand is +.CW int . +The type of the value is the same as its left operand. +The value of the right operand must be non-negative +and smaller than the number of bits in the left operand. +For the left-shift operator +.CW << , +the fill bits are 0; +for the right-shift operator +.CW >> , +the fill bits are a copy of the sign for the +.CW int +case, and 0 for the +.CW byte +case. +.NH 3 +Relational operators +.PP +The relational operators are +.CW < +(less than), +.CW > +(greater than), +.CW <= +(less than or equal), +.CW >= +(greater than or equal), +.CW == +(equal to), +.CW != +(not equal to). +The first four operators, which generate orderings, +apply only to arithmetic types +and to strings; the types of their operands +must be identical, except that a string may be +compared to +.CW nil . +Comparison on strings is lexicographic over the +Unicode character set. +.PP +The equality operators +.CW == +and +.CW != +accept operands of arithmetic, string, and reference types. +In general, the operands must have identical type, +but reference types and strings may be compared for identity with +.CW nil . +Equality for reference types occurs when the operands +refer to the same object, or when both are +.CW nil . +An uninitialized string, or one set to +.CW nil , +is identical to the empty string denoted +.CW \&"" +for all the relational operators. +.PP +The value of any comparison is the +.CW int +value 1 if the stated +relation is true, 0 if it is false. +.NH 3 +Bitwise logical operators +.PP +The logical operators +.CW & +(and), +.CW ^ +(exclusive or) and +.CW | +(inclusive or) +require operands of the same type, +which must be +.CW byte , +.CW int , +or +.CW big . +The result has the same type and its +value is obtained by applying the operation +bitwise. +.NH 3 +List concatenation +.PP +The concatenation operator +.CW :: +takes a object of any data type +as its left operand and a list as its right operand. +The list's underlying type must be the same as +the type of the left operand. +The result is a new list with the left operand +tacked onto the front: +.P1 + hd (a :: l) +.P2 +is the same as +.CW a . +.NH 3 +Logical operators +.PP +The logical +.I and +operator +.CW && +first evaluates its left operand. +If the result is zero, then the value of the +whole expression is the +.CW int +value 0. +Otherwise the right operand is evaluated; if +the result is zero, the value of the whole +expression is again 0; otherwise it is 1. +The operands must have the same arithmetic type. +.PP +The logical +.I or +operator +.CW || +first evaluates its left operand. +If the result is non-zero, then the value of the +whole expression is the +.CW int +value 1. +Otherwise the right operand is evaluated; if +the result is non-zero, the value of the whole +expression is again 1; otherwise it is 0. +The operands must have the same arithmetic type. +.NH 2 +General Expressions +.PP +The remaining syntax for expressions is +.s1 +expression: + binary-expression + lvalue-expression assignment-operator expression + C( Ilvalue-expression-listC ) = Iexpression + send-expression + declare-expression + load-expression + +assignment-operator: one of + C= &= |= ^= <<= >>= += -= *= /= %=I +.s2 +The left operand of an assignment can take only certain forms, called lvalues. +.s1 +lvalue-expression: + identifier + CnilI + termC [ IexpressionC ]I + termC [ IexpressionC : ]I + termC . Iidentifier + C( Ilvalue-expression-listC )I + C* Imonadic-expression + +lvalue-expression-list: + lvalue + lvalue-expression-listC , Ilvalue +.s2 +.NH 3 +Simple assignments with +.CW = +.PP +In general, the types of the left and right operands +must be the same; this type must be a data type. +The value of an assignment is its new left operand. +All the assignment operators associate right-to-left. +.PP +In the ordinary assignment with +.CW = , +the value of the right side is assigned to the object +on the left. +For simple assignment only, the left operand may be a +parenthesized list of lvalues and the right operand +either a tuple or an +.CW adt +whose data members correspond +in number and type to the lvalues in the list. +The members of the tuple, or +the data members of the +.CW adt , +are assigned in sequence to +lvalues in the list. +For example, +.P1 + p: Point; + x, y: int; + (x, y) = p; +.P2 +splits out the coordinates of the point into +.CW x +and +.CW y . +These rules apply recursively, so that if one of the +components of the left side is a parenthesized list of lvalues, +it is assigned from a corresponding +.CW adt +or tuple on the right. +.PP +If the left operand of a simple assignment is an +.CW adt +and the right side is a tuple, then the assignment +assigns the members of the tuple to the +.CW adt +data members; these must correspond in number and type +with the members of the tuple. +.PP +The constant +.CW nil +may be assigned to an lvalue of any reference type. +This lvalue will compare equal to +.CW nil +until it is subsequently reassigned. +Such an assignment also +triggers the removal of the object referred to unless other references +to it remain. +.PP +The left operand of an assignment may be the constant +.CW nil +to indicate that a value is discarded. +This applies in particular to any of the lvalues in +a tuple appearing on the left; to extend the examples above, +.P1 + (x, nil) = p; +.P2 +assigns the +.CW x +member of the Point +.CW p +to the variable +.CW x . +.PP +A special consideration applies to +strings. +If an +.CW int +containing a Unicode character is assigned to a subscripted +string, the subscript +is normally required to lie within the string. +As a special case, the subscript's value may be equal to +the length of the string (that is, just beyond its end); +in this case, the character is appended to +the string, and the string's length increases by 1. +.PP +A final special case applies to array slices in the form +.CW e1[e2:] . +Such expressions may lie on the left of +.CW = . +The right side must be an array of the same type as +.CW e1 , +and its length must be less than or equal to +.CW "(len e1)-e2. +In this case, the +elements in the array on the right replace the elements of +.CW e1 +starting at position +.CW e2 . +The length of the array is unchanged. +.NH 3 +Compound assignments +.PP +A compound assignment with +.I op\f(CW=\fP +is interpreted in terms of the plain assignment; +.P1 + e1 \fIop\f(CW= e2; +.P2 +is equivalent to +.P1 + e1 \f(CW= (e1) \fIop \f(CW(e2); +.P2 +except that +.CW e1 +is evaluated only once. +.NH 3 +Send expressions +.PP +A +.I send-expression +takes the form +.s1 +send-expression: + lvalue-expressionC <- = Iexpression +.s2 +In the expression +.P1 + e1 <- = e2 +.P2 +the lvalue +.CW e1 +must have type +.CW chan +.CW of +.I type , +and +.CW e2 +must be of that type. +The value of +.CW e2 +is sent over the channel. +If no task is executing a +channel receive operation on the specified channel, and the channel is unbuffered or its buffer +is full, the sender blocks. +Task synchronization is discussed in §9.8 and §9.13 below. +.NH 3 +Declare-expressions +.PP +A +.I declare-expression +is an assignment that also declares identifiers on its left: +.s1 +declare-expression: + lvalue-expressionC := Iexpression +.s2 +Each of the constituent terms in the +.I lvalue-expression +must be an identifier or +.CW nil . +A plain identifier on the left +is declared as having the type of the expression, +and it is initialized with the expression's value. +When a parenthesized list of identifiers is given, the expression +must be a tuple or an +.CW adt , +and the individual identifiers in the list are declared and initialized +with the members of the tuple, or the data members of the +.CW adt . +As with ordinary assignments, the keyword +.CW nil +may stand for an identifier whose declaration and assignment +are skipped. +.PP +The value and type of a declare-expression are the same as those of the expression. +.NH 3 +Load expressions +.PP +A +.I load-expression +has the form +.s1 +load-expression: + Cload Iidentifier expression +.s2 +The identifier is the identifier of a module, that is, the type +name declared in a +.CW module +declaration. +The expression following +.CW load +has type +.CW string +and names a file containing the +compiled form of the module. +The +.CW load +expression yields a handle for referring to the functions provided +by a module and its +.CW adt . +.PP +Execution of +.CW load +brings the file containing the module into local memory and dynamically type-checks +its interface: the run-time system ascertains that +the declarations exported by the module are compatible +with the module declaration visible in the scope of the +.CW load +operator (see §11.2). +In the scope of a module declaration, the types and constants +exported by the module may be referred to without a handle, but +the functions and data exported by the module +(directly at its top level, or within its +.CW adt ) +may be called only using a valid +handle acquired by the +.CW load +operator. +.PP +The value of +.CW load +is +.CW nil +if the attempt to load fails, either because the file containing +the module can not be found, or because the found module does not +export the specified interface. +.PP +Each evaluation of +.CW load +creates a separate instance of the specified module; +it does not share data with any other instance. +.NH 2 +Constant expressions +.PP +In several places a constant expression is required. +Such an expression contains operands that are +identifiers previously declared with +.CW con , +or +.CW int , +.CW big , +.CW real , +or +.CW string +constants. +These may be connected by any of the following operators: +.P1 +.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i + + - * / % & | ^ + == < > <= >= != << >> + && || + ~ ! +.P2 +together with arithmetic and string casts, and parentheses for +grouping. +.NH 2 +Expression evaluation +.PP +Expressions in Limbo are not reordered by the compiler; +values are computed in accordance with the parse of the expression. +However there is no guarantee of temporal evaluation order for expressions +with side effects, except in the following circumstances: +function arguments are fully evaluated before the function +is called; the logical operators +.CW && +and +.CW || +have fully defined order of evaluation, as explained above. +All side effects from an expression in one statement are +completed before the next statement is begun. +.PP +In an expression containing a constant subexpression (in the +sense of §8.5), the constant subexpression is evaluated at +compile-time with all exceptions ignored. +.PP +Underflow, overflow, and zero-divide conditions during integer +arithmetic produce undefined results. +.PP +The +.CW real +arithmetic of Limbo is all performed in IEEE double precision, +although denormalized numbers may not be supported. +By default, +invalid operations, zero-divide, overflow, and underflow +during real arithmetic are fatal; inexact-result is quiet. +The default rounding mode is round-to-nearest-even. +A set of routines in the +.CW Math +library module permits independent control of these modes within each thread. +.NH 1 +Statements +.PP +The executable code within a function definition consists +of a sequence of statements and declarations. +As discussed in the Scope section §11 below, +declarations become effective at the place they appear. +Statements are executed in sequence except as discussed below. +In particular, the optional labels on some of the statements are used with +.CW break +and +.CW continue +to exit from or re-execute the labeled statement. +.s1 +statements: + (empty) + statements declaration + statements statement + +statement: + expressionC ;I + C;I + C{ IstatementsC }I + Cif ( IexpressionC ) Istatement + Cif ( IexpressionC ) IstatementC else Istatement + labelO Cwhile ( IexpressionOC ) Istatement + labelO Cdo IstatementC while ( IexpressionOC ) ;I + labelO Cfor ( IexpressionOC ; IexpressionOC ; IexpressionOC ) Istatement + labelO Ccase IexpressionC { Iqual-statement-sequenceC }I + labelO Calt { Iqual-statement-sequenceC }I + labelO Cpick IidentifierC := IexpressionC { Ipqual-statement-sequenceC }I + Cbreak IidentifierOC ;I + Ccontinue IidentifierOC ;I + Creturn IexpressionOC ;I + Cspawn ItermC ( Iexpression-listOC ) ;I + Cexit ;I + C{ IstatementsC } exceptionI identifierOC{ Iqual-statement-sequenceC }I + Craise IexpressionOC ;I +.s2 +.s1 +label: + identifier C:I +.s2 +.NH 2 +Expression statements +.PP +Expression statements consist of an expression followed by +a semicolon: +.s1 + expressionC ;I +.s2 +Most often expression statements are assignments, but other expressions +that cause effects are often useful, for example calling a function +or sending or receiving on a channel. +.NH 2 +Null statement +.PP +The null statement consists of a lone semicolon. +It is most useful for supplying an empty body +to a looping statement with internal side effects. +.NH 2 +Blocks +.PP +Blocks are +.I statements +enclosed in +.CW {} +characters. +.s1 + C{ IstatementsC }I +.s2 +A block starts a new scope. +The effect of any declarations within a block disappears +at the end of the block. +.NH 2 +Conditional statements +.PP +The conditional statement takes two forms: +.s1 + Cif ( IexpressionC ) Istatement + Cif ( IexpressionC ) IstatementC else Istatement +.s2 +The +.I expression +is evaluated; it must have type +.CW int . +If it is non-zero, then the first +.I statement +is executed. +In the second form, the second +.I statement +is executed if the +.I expression +is 0. +The statement after +.CW else +is connected to the nearest +.CW else -less +.CW if . +.NH 2 +Simple looping statements +.PP +The simple looping statements are +.s1 + labelO Cwhile ( IexpressionOC ) Istatement + labelO Cdo IstatementC while ( IexpressionOC ) ;I +.s2 +In both cases the expression must be of type +.CW int . +In the first form, the +.I expression +is first tested against 0; +while it is not equal, the +.I statement +is repeatedly executed. +In the second form, the +.I statement +is executed, and then, while the +.I expression +is not 0, the statement is repeatedly executed. +If the +.I expression +is missing, it is understood to be non-zero. +.NH 2 +.CW for +statement +.PP +The +.CW for +statement has the form +.s1 + labelO Cfor ( Iexpression-1OC ; Iexpression-2OC ; Iexpression-3OC ) Istatement +.s2 +It is equivalent to +.s1 + expression-1C ;I + Cwhile ( Iexpression-2C ) { + Istatement + expression-3C ; + C}I +.s2 +in the absence of +.CW continue +or +.CW break +statements. +Thus (just as in C), the first expression is an initialization, +the second a test for starting and continuing the loop, and the third +a re-initialization for subsequent travels around the loop. +.NH 2 +.CW case +statement +.PP +The +.CW case +statement transfers control to one of several places +depending on the value of an expression: +.s1 + labelO Ccase IexpressionC { Iqual-statement-sequenceC }I +.s2 +The expression must have type +.CW int , +.CW big +or +.CW string . +The +.CW case +statement is followed by sequence of +qualified statements, which are statements labeled by +expressions or expression ranges: +.s1 +qual-statement-sequence: + qual-listC =>I + qual-statement-sequence qual-listC =>I + qual-statement-sequence statement + qual-statement-sequence declaration + +qual-list: + qualifier + qual-listC or Iqualifier + +qualifier: + expression + expressionC to Iexpression + C*I +.s2 +A +.I qual-statement-sequence +is a sequence of +statements and declarations, each of which +is preceded by one or more qualifiers. +Syntactically, the qualifiers are +expressions, expression ranges with +.CW to , +or +.CW * . +If the expression mentioned after +.CW case +has +.CW int +or +.CW big +type, +all the expressions appearing in the qualifiers +must evaluate to integer constants of the same type (§8.5). +If the expression has +.CW string +type, all the qualifiers must be +string constants. +.PP +The +.CW case +statement is executed by comparing +the expression at its head with the constants +in the qualifiers. +The test is for equality in the case +of simple constant qualifiers; +in range qualifiers, the test determines +whether the expression is greater than or +equal to the first constant and less than +or equal to the second. +.PP +None of the ranges or constants may overlap. +If no qualifier is selected and +there is a +.CW * +qualifier, +then that qualifier is selected. +.PP +Once a qualifier is selected, control passes +to the set of statements headed by that +qualifier. +When control reaches the end of that set +of statements, control passes to the end +of the +.CW case +statement. +If no qualifier is selected, the +.CW case +statement is skipped. +.PP +Each qualifier and the statements following it +up to the next qualifier together form a separate +scope, like a block; declarations within this scope +disappear at the next qualifier (or at the end of +the statement.) +.PP +As an example, this fragment separates small numbers +by the initial letter of their spelling: +.P1 + case i { + 1 or 8 => + sys->print("Begins with a vowel\en)"; + 0 or 2 to 7 or 9 => + sys->print("Begins with a consonant\en"); + * => + sys->print("Sorry, didn't understand\en"); + } +.P2 +.NH 2 +.CW alt +statement +.PP +The +.CW alt +statement transfers control to one of several groups +of statements depending on the readiness of communication +channels. +Its syntax resembles that of +.CW case : +.s1 + labelO Calt { Iqual-statement-sequenceC }I +.s2 +However, the qualifiers take a form different +from those of +.CW case . +In +.CW alt , +each qualifier must be a +.CW * , +or an expression containing a communication +operator +.CW <- +on a channel; +the operator may specify either sending or receiving. +For example, +.P1 + outchan := chan of string; + inchan := chan of int; + alt { + i := <-inchan => + sys->print("Received %d\en", i); + + outchan <- = "message" => + sys->print("Sent the message\en"); + } +.P2 +The +.CW alt +statement is executed by testing each of +the channels mentioned in the +.I qual-list +expressions for ability to send or receive, +depending on the operator; +if none is ready, the program blocks +until at least one is ready. +Then a random choice from the ready channels is selected +and control passes to the associated set +of statements. +.PP +If a qualifier of the form +.CW * +is present, then the statement does not block; +if no channel is ready the statements associated with +.CW * +are executed. +.PP +If two communication operators are present +in the same qualifier expression, only the leftmost one is +tested by +.CW alt . +If two or more +.CW alt +statements referring to the same receive (or send) +channel are executed in different +threads, the requests are queued; +when the channel becomes unblocked, the thread +that executed +.CW alt +first is activated. +.PP +As with +.CW case , +each qualifier and the statements following it +up to the next qualifier together form a separate +scope, like a block; declarations within this scope +disappear at the next qualifier (or at the end of +the statement.) +Thus, in the example above, the scope of +.CW i +in the arm +.P1 + i := <-inchan => + sys->print("Received %d\en", i); +.P2 +is restricted to these two lines. +.PP +As mentioned in the specification +of the channel receive operator +.CW <- +in §8.2.8, that operator can take an array of channels as an argument. +This notation serves as a kind of simplified +.CW alt +in which all the channels have the same type +and are treated similarly. +In this variant, +the value of the communication expression is a tuple +containing the index of the +channel over which a communication was received and +the value received. +For example, in +.P1 + a: array [2] of chan of string; + a[0] = chan of string; + a[1] = chan of string; + . . . + (i, s) := <- a; + # s has now has the string from channel a[i] +.P2 +the +.CW <- +operator waits until at least one of the +members of +.CW a +is ready, selects one of them at random, +and returns the index and the transmitted string +as a tuple. +.PP +During execution of an +.CW alt , +the expressions in the qualifiers are evaluated in an undefined +order, and in particular subexpressions may be evaluated before +the channels are tested for readiness. +Therefore qualifying expressions should not invoke side effects, +and should avoid subparts that might delay execution. +For example, in the qualifiers +.P1 + ch <- = getchar() => # Bad idea + ich <- = next++ => # Bad idea +.P2 +.CW getchar() +may be called early in the elaboration of the +.CW alt +statement; if it delays, the entire +.CW alt +may wait. +Similarly, the +.CW next++ +expression may be evaluated before testing the readiness of +.CW ich . +.NH 2 +.CW pick +statement +.PP +The +.CW pick +statement transfers control to one of several groups of statements +depending upon the resulting variant type of a +.CW pick +.CW adt +expression. The syntax resembles that of +.CW case : +.s1 + labelO Cpick IidentifierC := IexpressionC { Ipqual-statement-sequenceC }I +.s2 +The expression must have type +.CW ref +.CW adt +and the +.CW adt +must be a +.CW pick +.CW adt . +The +.CW pick +statement is followed by a sequence of qualified statements, which are +statements labeled by the +.CW pick +variant names: +.s1 +pqual-statement-sequence: + pqual-listC =>I + pqual-statement-sequence pqual-listC =>I + pqual-statement-sequence statement + pqual-statement-sequence declaration + +pqual-list: + pqualifier + pqual-listC or Ipqualifier + +pqualifier: + identifier + C*I +.s2 +A +.I pqual-statement-sequence +is a sequence of statements and declarations, each of which +is preceded by one or more qualifiers. +Syntactically, the qualifiers are identifiers, identifier lists (constructed with +.CW or ), +or +.CW * . +The identifiers must be names of the variant types of the +.CW pick +.CW adt . +The +.CW pick +statement is executed by comparing the variant type of the +.CW pick +.CW adt +referenced by the expression at its head with the variant type names in the qualifiers. +The matching qualifier is selected. +None of the variant type names may appear more than once. +If no qualifier is selected and there is a +.CW * +qualifier, then that qualifier is selected. +.PP +Once a qualifier is selected, control passes +to the set of statements headed by that qualifier. +When control reaches the end of that set of statements, +control passes to the end of the +.CW pick +statement. +If no qualifier is selected, the +.CW pick +statement is skipped. +.PP +Each qualifier and the statements following it +up to the next qualifier together form a separate +scope, like a block; declarations within this scope +disappear at the next qualifier (or at the end of +the statement.) +.PP +The +.I identifier +and +.I expression +given in the +.CW pick +statement are used to bind a new variable to a +.CW pick +.CW adt +reference expression, and within the statements associated with the +selected qualifier the variable can be used as if it were of the corresponding +variant type. +.PP +As an example, given a +.CW pick +.CW adt +of the following form: +.P1 + Constant: adt { + name: string; + pick { + Str or Pstring => + s: string; + Real => + r: real; + } + }; +.P2 +the following function could be used to print out the value of +an expression of type +.CW "ref Constant" : +.P1 + printconst(c: ref Constant) + { + sys->print("%s: ", c.name); + pick x := c { + Str => + sys->print("%s\en", x.s); + Pstring => + sys->print("[%s]\en", x.s); + Real => + sys->print("%f\en", x.r); + }; + } +.P2 +.NH 2 +.CW break +statement +.PP +The +.CW break +statement +.s1 + Cbreak IidentifierO C;I +.s2 +terminates execution of +.CW while , +.CW do , +.CW for , +.CW case , +.CW alt , +and +.CW pick +statements. +Execution of +.CW break +with no identifier +transfers control to +the statement after the innermost +.CW while , +.CW do , +.CW for , +.CW case , +.CW alt , +or +.CW pick +statement in which it appears as a substatement. +Execution of +.CW break +with an identifier +transfers control to the next statement after the unique enclosing +.CW while , +.CW do , +.CW for , +.CW case , +.CW alt , +or +.CW pick +labeled with that identifier. +.NH 2 +.CW continue +statement +.PP +The +.CW continue +statement +.s1 + Ccontinue IidentifierO C;I +.s2 +restarts execution of +.CW while , +.CW do , +and +.CW for +statements. +Execution of +.CW continue +with no identifier +transfers control to the end of +the innermost +.CW while , +.CW do , +or +.CW for +statement in which the +.CW continue +appears as a substatement. +The expression that controls the loop is tested +and if it succeeds, execution continues in the loop. +The initialization portion of +.CW for +is not redone. +.PP +Similarly, execution of +.CW continue +with an identifier transfers control to the end of the enclosing +.CW while , +.CW do , +or +.CW for +labeled with the same identifier. +.NH 2 +.CW return +statement +.PP +The +.CW return +statement, +.s1 + Creturn IexpressionOC ;I +.s2 +returns control to the caller of a function. +If the function returns a value (that is, if its definition +and declaration mention a return type), +the expression must be given and it must have the same type that the +function returns. +If the function returns no value, the expression +must generally be omitted. +However, if a function returns no value, and its +last action before returning is to call +another function with no value, then it may +use a special form of +.CW return +that names the function being called. +For example, +.P1 + f, g: fn(a: int); + f(a: int) { + . . . + return g(a+1); + } +.P2 +is permitted. +Its effect is the same as +.P1 + f(a: int) { + . . . + g(a+1); + return; + } +.P2 +This +.I "ad hoc +syntax offers the compiler a cheap opportunity to recognize +tail-recursion. +.PP +Running off the end of a function is equivalent to +.CW return +with no expression. +.NH 2 +.CW spawn +statement +.PP +The +.CW spawn +statement creates a new thread of control. +It has the form +.s1 + Cspawn ItermC ( Iexpression-listOC ) ;I +.s2 +The term and expression-list are taken to be +a function call. +Execution of +.CW spawn +creates an asynchronous, independent thread +of control, which calls the function in the new thread context. +This function may access the accessible objects +in the spawning thread; the two threads share +a common memory space. +These accessible objects include the data global to +the current module and reference data passed to the +spawned function. +Threads are preemptively scheduled, so that +changes to objects used in common between +threads may occur at any time. +The Limbo language provides no explicit synchronization +primitives; §12.3 shows examples of how to use channel +communication to control concurrency. +.NH 2 +.CW exit +statement +.PP +The +.CW exit +statement +.s1 + Cexit ;I +.s2 +terminates a thread and frees any resources +belonging exclusively to it. +.NH 2 +.CW raise +statement +.PP +The +.CW raise +statement +.s1 + Craise IexpressionOC ;I +.s2 +raises an exception in a thread. +The +.I expression +is either a string describing the failure, or an exception name and its parameter values, if any. +If an expression is not given, the +.CW raise +statement must appear in the body of an exception handler; it raises the currently active exception. +.NH 2 +Exception handler +.PP +Various errors in a Limbo program can be detected only at run-time. +These include programming errors such as an attempt to index outside the bounds of an array, +system errors such as exhausting memory, and user-defined exceptions +declared at compile-time by exception declarations and caused at run-time by the +.CW raise +statement. +A group of statements can have an associated exception handler: +.s1 + C{ IstatementsC } exceptionI identifierOC{ Iqual-statement-sequenceC }I +.s2 +The first run-time exception raised by any of the +.I statements , +or functions they call, +that is not handled by an exception handler enclosing the statement raising the exception +will terminate execution of the +.I statements +at that point, and transfer control to the clause in the sequence of qualified statements +that matches the exception. +An exception represented by a string is matched by a qualifier that is either the same +string value, or a prefix of it followed by +.CW * . +The optional identifier following +.CW exception +is set to the value of the exception string for the execution of the qualified statement. +If execution of the qualified statement completes, control passes to the statement following +the exception-handling statement. +.PP +A qualified statement labeled by a user-defined exception name matches that exception. +If the exception has parameters, the identifier following +.CW exception +will be be declared and initialized as a tuple of the parameter values for the scope +of the qualified statement, allowing the values to be recovered by tuple assigment. +.PP +The qualifier +.CW * +matches any string or user-defined exception. +An exception that is raised and not successfully handled by a thread will terminate the thread. +.NH +Referring to modules; +.CW import +.PP +As discussed above, modules present +constants, functions, and types +in their interface. +Their names may be the same as names +in other modules or of local objects or types within +a module that uses another. +Name clashes are avoided because references +to the entities presented by a module are +qualified by the module type name or an object +of that module type. +.PP +For example, +after the module and variable declarations +.P1 + M: module { + One: con 1; + Thing: adt { + t: int; + f: fn(); + }; + g: fn(); + }; + m: M; +.P2 +the name +.CW One +refers to the constant defined in +module +.CW M +only in the contexts +.CW M->One +or +.CW m->One ; +the name +.CW Thing +as the particular data type +associated with the +.CW M +module can be referred to only in contexts +like +.P1 + th1: M->Thing; + th2: m->Thing; +.P2 +Finally, to call a function defined either as a top-level +member of the module, or as a member of one of its +.CW adt , +it is necessary to declare, and also dynamically initialize using +.CW load , +a handle for the module. +Then calls of the form +.P1 + m->g(); + m->th1.f(); +.P2 +become appropriate. +It is possible to use just the type name of a module to qualify +its constants and types because constants and types can be understood +without having the code and data present. +Calling a function declared by a module or one of its +.CW adt +requires loading the module. +.PP +The +.CW import +declaration +.s1 + Iidentifier-listC : import Iidentifier C;I +.s2 +lifts the identifiers in the +.I identifier-list +into the scope in which +.CW import +appears, so that they are usable without a qualifier. +The identifier after the +.CW import +keyword is either +a module identifier, or an identifier declared as having +that type. +The initial list of identifiers specifies those +constants, +types, +and functions of the module whose names are promoted. +In the case of constants and types, +.CW import +merely makes their names accessible without using a qualifier. +In the example above, if the +.CW module +declaration above had been followed by +.P1 + One, Thing: import M; +.P2 +then one could refer to just +.CW One +instead of +.CW M->One ; +similarly an object could be declared like +.P1 + th: Thing; +.P2 +For functions, and also +.CW adt +with functions as members, +.CW import +must specify a module +variable (as opposed to a module identifier). +Each imported name is associated with the specified module +variable, and the current value of this module variable +controls which instance of the module will +be called. +For example, after +.P1 + g, Thing: import m; +.P2 +then +.P1 + g(); +.P2 +is equivalent to +.P1 + m->g(); +.P2 +and +.P1 + th: Thing; + th.f(); +.P2 +is equivalent to +.P1 + th: M.Thing; + m->th.f(); +.P2 +When the module declaration for the module being +implemented is encountered, an implicit +.CW import +of all the names of the module is executed. +That is, given +.P1 + implement Mod; + . . . + Mod: module { + . . . + }; +.P2 +the constants and types of +.CW Mod +are accessed as if they had been imported; +the functions declared in +.CW Mod +are imported as well, and refer dynamically to the +current instance of the module being implemented. +.NH +Scope +.PP +The scope of an identifier is the lexical range of +a program throughout which the identifier means a particular +type of, or instance of, an object. +The same identifier may be associated with several +different objects in different parts of the same program. +.PP +The names of members of an +.CW adt +occupy a separate, nonconflicting space from other identifiers; +they are declared in a syntactically distinct position, +and are always used in a distinguishable way, namely +after the +.CW . +selection operator. +Although the same scope rules apply to +.CW adt +members as to other identifiers, their names may +coincide with other entities in the same scope. +.PP +Similarly, the names of constants, functions, and +.CW adt +appearing +within a +.CW module +declaration are ordinarily qualified either with +the name of the module or with a module variable +using the +.CW -> +notation. +As discussed above, the +.CW import +declaration lifts these names into the current scope. +.PP +Identifiers declared in a top-declaration +(§5) have scope that lasts from the +declaration throughout the remainder of the +file in which it occurs, unless it is overridden +by a redeclaration of that name within an inner +scope. +Each function definition, and each block +within a function, +introduces a new scope. +A name declared within the block or function +(including a formal argument name of a function) +has a scope that begins +at the completion of its declaration and lasts until +the end of the block or function. +If an already-declared identifier is redeclared within +such an inner scope, the declaration previously in +force is used in any initialization expression +that is part of the new declaration. +.PP +As discussed above, within +.CW case +.CW alt +and +.CW pick , +each qualifier +and the statements following it form an inner +scope just like a block. +.PP +The scope of a label is restricted to the +labeled statement, +and label names may coincide with those of other +entities in the same scope. +.NH 2 +Forward referencing +.PP +In general, names must be declared before they are used. +.PP +The first exception to this rule is that a +function local to a module need not have a +declaration at all; it is sufficient to give +its definition, and that definition may appear anywhere +in the module. +.PP +The general rule implies that no +.CW adt +may contain, as a member, an +.CW adt +not previously declared (including an instance of itself). +A second exception to this rule applies to +.CW ref +.CW adt +types. +An +.CW adt +may contain a member whose type is a +.CW ref +to itself, or to another +.CW adt +even if the second +.CW adt +has not yet been declared. +Unless a special notation is used, such +references are restricted: +all mutual or self references among +.CW adt +are checked statically throughout all the +.CW adt +visible in a module to determine which +members refer to other +.CW adt . +Any member of an +.CW adt +of +.CW ref +.CW adt +type that refers directly, or indirectly through a chain of references, +back to its own underlying type may not be assigned to individually; +it can gain a value only by an assignment to the +.CW adt +as a whole. +For example, in +.P1 + Tree: adt { + l: ref Tree; + r: ref Tree; + t: ref Ntree; + }; + Ntree: adt { + t: ref Tree; + }; + + t1 := Tree(nil, nil, nil); # OK + t2 := Tree(ref t1, ref t1, nil); # OK + t1 = Tree(ref t1, ref t2, nil); # OK + t1.l = ... ; # not OK + + nt := ref Ntree(nil); # OK + nt.t = ... # not OK +.P2 +the first three assignments are correct, but +any assignment to +.CW t1.l +is forbidden, because it is self-referential. +The situation is the same with the mutually +referential fields of the +.CW Tree +and +.CW Ntree +.CW adt . +.PP +These restrictions suffice +to prevent the creation of circular data structures. +Limbo implementations guarantee to +destroy all data objects not involved in such circularity +immediately after they become non-referenced by active +tasks, whether because +their names go out of scope or because they are assigned new values. +This property has visible effect because certain system resources, +like windows and file descriptors, can be seen outside the program. +In particular, if a reference to such a resource is held only within an +.CW adt , +then that resource too is destroyed when the +.CW adt +is. +.PP +The default rules are burdensome because they impede the construction even +of harmless structures like trees. +Therefore an escape is provided: using the word +.CW cyclic +before the type in an +.CW adt +member removes the circular-reference restriction for that member. +For example, +.P1 + Tree: adt { + l: cyclic ref Tree; + r: cyclic ref Tree; + t: ref Ntree; + }; + Ntree: adt { + t: cyclic ref Tree; + }; + + t1 := Tree(nil, nil, nil); # OK + t2 := Tree(ref t1, ref t1, nil); # OK + t1 = Tree(ref t1, ref t2, nil); # OK + t1.l = ... ; # OK now + + nt := ref Ntree(nil); # OK + nt.t = ... # OK now +.P2 +With the use of +.CW cyclic , +circular data structures can be created. +When they become unreferenced except by themselves, they will +be garbage-collected eventually, but not instantly. +.NH 2 +Type equality and compatibility +.PP +In an assignment and in passing an actual argument to a function, +the types of the target and the expression being assigned or +passed must be equal (with certain exceptions, e.g. assignment of +.CW nil +to a reference type). +When a function is defined, its type must be equal to the type +of a function with the same name if one is in scope. +Type equality is determined as follows. +.PP +Two basic types are equal if and only if they are identical. +.PP +Two tuple types are equal if and only if they are composed +of equal types in the same order. +.PP +Two array types are equal if and only if they are arrays +of equal types. +The size of an array is not part of its type. +.PP +Two list types are equal if and only if they are composed +of equal types. +.PP +Two channel types are equal if and only if they transmit +equal types. +.PP +Two +.CW adt +types are equal if and only if their data members +have the same names and correspondingly +equal types, including any +.CW cyclic +attribute. +The order of member declaration is insignificant, and +constant and function members of an +.CW adt +do not enter into the comparison, +nor does the name of the +.CW adt +type itself. +In particular, with the declarations +.P1 + A: adt { x: ref B; }; + B: adt { x: ref A; }; +.P2 +the types +.CW A +and +.CW B +are equal. +.PP +Two +.CW ref +.CW adt +types are equal if and only if they are references to equal +.CW adt +types. +.PP +Two module types are equal if and only if their data and function members +have the same names and correspondingly equal types; the order +of their mention is insignificant. +Constant members and type members do not enter into the comparison. +.PP +Two function types are equal if and only if their return +values have the same type +and their argument lists have correspondingly equal types. +Any +.CW self +attributes given to arguments much match. +Names given to arguments do not enter into the comparison. +.PP +A type name has the same type as the type from +which it was constructed. +.PP +When a module is loaded, the module stored +in the file system must have a type that is +.I compatible +with the type mentioned in the +.CW load +expression. +The type of the stored module +type is compatible with the mentioned type if and only if +all data members of the two types are equal in name and type, +and all +.CW adt +or functions actually mentioned by the program executing +.CW load +have names and types equal to corresponding members of +the stored module. +.NH +Examples +.PP +Because Limbo was designed for the Inferno environment, several +of these examples consist of simplified versions of already simple +Inferno applications in a prototype Inferno implementation. +Some appreciation for the resources available in this environment +should become evident, but its full description is available +elsewhere; +the discussion here will focus on language features. +However, several of the programs use facilities +from the module +.CW Sys , +which provides an interface to a file system and its methods +resembling those of Unix or Plan 9, +as well as other useful library facilities. +.PP +Some of the programs are annotated with line numbers; +they are there only for descriptive purposes. +.NH 2 +A simple command interpreter module +.PP +This version of a shell program reads from a keyboard and +executes `commands' typed by the user. +Its own interface has the type of a +.CW Command +module, and that is the type of the things it executes. +In particular, it can call modules like the +.CW hello +example at the beginning of the paper. +.P1 +1 implement Command; + +2 include "sys.m"; +3 include "draw.m"; + +4 sys: Sys; +5 stdin: ref Sys->FD; + +6 Command: module +7 { +8 init: fn(nil: ref Draw->Context, nil: list of string); +9 }; +.P2 +After the boilerplate on lines 1-3, the variables +.CW sys +and +.CW stdin +are declared on lines 4 and 5. +The I/O operations of the +.CW Sys +module use the +.CW ref +.CW FD +type to refer to open files. +.P1 +10 init(ctx: ref Draw->Context, nil: list of string) +11 { +12 +13 +14 buf := array[256] of byte; + +15 sys = load Sys Sys->PATH; +16 stdin = sys->fildes(0); + +17 for(;;) { +18 sys->print("$ "); +19 n := sys->read(stdin, buf, len buf); +20 if(n <= 0) +21 break; +22 (nw, arg) := + sys->tokenize(string buf[0:n], " \et\en"); +23 if(nw != 0) +24 exec(ctx, arg); +25 } +26 } +.P2 +Line 10: conventionally, stand-alone modules are started +by calling their +.CW init +functions. +The +.CW Command +module follows this convention. +The arguments are presented as a list of strings. +In this simple example, the command interpreter itself +ignores its argument, so it need not be given a name. +.PP +Local variables are declared on lines 12-14; line 15 +loads the +.CW Sys +module and stores a handle for it in the variable +.CW sys . +Line 16 creates an +.CW FD +for the standard input by calling the +.CW fildes +function of the +.CW Sys +module using the +.CW -> +operator; the notation +.CW modhandle->func(...) +specifies a call to the function named +.CW func +in the module currently referred to by +.CW modhandle . +(In general there can be several modules of the same type and name +active, and there can also be unrelated modules containing identically +named functions. +The +.CW import +declaration, described in §6.6 above, can be used to abbreviate +the references when names do not clash.) +.PP +The loop on lines 17-25 prints a prompt (line 18), reads a line from +the standard input (line 19), parses it into tokens (line 22), and +executes the command. +.PP +The function call +.CW sys->tokenize +is worth discussing as an example of style. +It takes two strings as arguments. +The characters in the second string are interpreted as separators +of tokens in the first string. +It returns a tuple whose first member is the number of +tokens found, and whose second is a list of strings +containing the tokens found: its declaration is +.P1 + tokenize: fn (s: string, sep: string): (int, list of string); +.P2 +In the example, the second argument is +\f(CW" \et\en"\fP, +so that the routine returns the number of, and a list of, +`words' separated by blanks, tabs, and new-lines. +The free use of strings, lists, and tuple-returning +functions is common in Limbo. +.PP +The +.CW sys->read +routine gathers an array of bytes into +.CW buf . +Thus the expression for the first argument of +.CW sys->tokenize +converts this array to a string by slicing the +array with +.CW [0:n] , +using the actual number of bytes +gathered by the +.CW read , +and using a cast. +.PP +At lines 23-24, if there were any words found, +.CW exec +is called: +.P1 +27 exec(ctx: ref Draw->Context, args: list of string) +28 { +29 c: Command; +30 cmd, file: string; + +31 cmd = hd args; + +32 file = cmd + ".dis"; +33 c = load Command file; +34 if(c == nil) +35 c = load Command "/dis/"+file; + +36 if(c == nil) { +37 sys->print("%s: not found\en", cmd); +38 return; +39 } +40 c->init(ctx, args); +41 } +.P2 +On lines 31 and 32 of +.CW exec , +.CW cmd +is set to the first of the words in the argument list, +and the string +.CW .dis +is concatenated to it (to account for the fact that Limbo +object program files are conventionally named using this suffix). +On line 33 an attempt is made to load the named module +from the derived file name; it will fail if the file +does not exist. +The attempt will succeed, +and a non-nil handle assigned to +.CW c , +if the file is found, and if +the module stored in that file does in fact implement the +.CW Command +module type. +In case this fails, lines 34-35 make another attempt, after prefixing +.CW /dis/ +to the file name. +.PP +If either attempt to get a handle to the named module +succeeds, +.CW c +will contain a valid handle to it; line 40 calls its +.CW init +function, passing it the whole argument list. +When it returns, the +.CW exec +function returns, and the main loop resumes. +.NH 2 +Infrared remote control +.PP +This example shows two instances of a module +for interfacing to a TV remote control; one +is for the real remote, which in this case +is connected to a serial port on a set-top +box, and the other is simulated for testing +programs running on a regular operating +system. +The techniques of special interest are the +dynamic use of modules and the communication +using a channel. +.PP +The module is used by creating a channel and passing +it to the module's +.CW init +function, +which returns a success/error indicator and starts an +asynchronous process to read the remote control. +The user of the module executes a receive +on the channel whenever it wishes to accept +a button-push. +.PP +The (abridged) module declaration is +.P1 +Ir: module +{ + # Codes buttons on IR remote control + Zero: con 0; + One: con 1; + . . . + Mute: con 23; + Error: con 9999; + + init: fn(chan of int): int; + PATH: con "/dis/ir.dis"; + SIMPATH: con "/dis/irsim.h"; +}; +.P2 +The implementation for the `real' remote control is +.P1 +implement Ir; + +include "ir.m"; +include "sys.m"; +FD, Dir: import Sys; + +sys: Sys; + +init(keys: chan of int): int +{ + cfd, dfd: ref FD; + + sys = load Sys Sys->PATH; + + cfd = sys->open("/dev/eia1ctl", sys->OWRITE); + if(cfd == nil) + return -1; + sys->fprint(cfd, "b9600"); + + dfd = sys->open("/dev/eia1", sys->OREAD); + cfd = nil; + + spawn reader(keys, dfd); + return 0; +} +.P2 +The +.CW init +routine accepts a +.CW chan +argument; it will be used by the module to +send codes for the buttons pressed by the user. +In this routine, the calls to +.CW sys->open +and +.CW sys->fprint +open and set up the device data and control files +.CW /dev/eia1 +and +.CW /dev/eia1ctl +used to communicate with the device itself. +The important step is at the end: the +.CW spawn +statement creates a new, +asynchronous task to read the device, using a routine +that is passed the communications channel and the +FD for the device: +.P1 +reader(keys: chan of int, dfd: ref FD) +{ + n, ta, tb: int; + dir: Dir; + b1:= array[1] of byte; + b2:= array[1] of byte; + + # find the number of bytes already + # queued and flush that many + (n, dir) = sys->fstat(dfd); + if(n >= 0 && dir.length > 0) { + while(dir.length) { + n = sys->read(dfd, + array[dir.length] of byte, + dir.length); + if(n < 0) + break; + dir.length -= n; + } + } +.P2 +.P1 +loop: for(;;) { + n = sys->read(dfd, b1, len b1); + if(n <= 0) + break; + ta = sys->millisec(); + # Button pushes are pairs of characters + # that arrive closer together than + # 200 ms. Longer than that is likely + # to be noise. + for(;;) { + n = sys->read(dfd, b2, 1); + if(n <= 0) + break loop; + tb = sys->millisec(); + if(tb - ta <= 200) + break; + ta = tb; + b1[0] = b2[0]; + } + # map the character pair; the significant + # bits are the lowest 5. + case ((int b1[0]&16r1f)<<5) | (int b2[0]&16r1f) { + 975 => n = Ir->Zero; + 479 => n = Ir->One; + . . . + 791 => n = Ir->Mute; + * => n = Ir->Error; + } + # found a button-push; send the value + keys <-= n; + } + keys <-= Ir->Error; +} +.P2 +The code in the middle is related to noise-filtering +and is uninteresting in detail except as it illustrates +some of the methods provided by the +.CW Sys +module; the crucial actions are found at the bottom, +where the routine sends either +a true button-push or an error code over the channel to +the module's client. +.PP +Here is another implementation of the same interface. +Its +.CW init +function performs the same kind of initialization +as the other version, but using the operating system's +keyboard files +.CW /dev/cons +and +.CW /dev/consctl . +In the Inferno environment, operations corresponding to the Unix +`stty' primitive are accomplished by writing messages to +a control file associated with the file that handles the data. +.P1 +implement Ir; + +include "ir.m"; +include "sys.m"; +FD: import Sys; + +sys: Sys; +cctlfd: ref FD; + +init(keys: chan of int): int +{ + dfd: ref FD; + + sys = load Sys Sys->PATH; + + cctlfd = sys->open("/dev/consctl", sys->OWRITE); + if(cctlfd == nil) + return -1; + sys->write(cctlfd, array of byte "rawon", 5); + + dfd = sys->open("/dev/cons", sys->OREAD); + if(dfd == nil) + return -1; + + spawn reader(keys, dfd); + return 0; +} +.P2 +A fine point: the variable +.CW cctlfd +that contains the FD for the control device is +declared external to the +init function, even though it appears to be used +only inside it. +Programming cleanliness suggests that +its declaration be moved inside, but here that +won't work; +device control files +in Inferno retain settings like `raw mode' only +while they remain open. +If +.CW cctlfd +were declared inside +.CW init , +then returning from +.CW init +would destroy the last reference to the FD for the control file, +and the device would be closed automatically. +.PP +The reader function for this module has the same structure as the first +example, but doesn't have to worry about a noisy infrared detector: +.P1 +reader(keys: chan of int, dfd: ref FD) +{ + n: int; + b:= array[1] of byte; + + for(;;) { + n = sys->read(dfd, b, 1); + if(n != 1) + break; + case int b[0] { + '0' => n = Ir->Zero; + '1' => n = Ir->One; + . . . + 16r7f => n = Ir->Mute; + * => n = Ir->Error; + } + keys <-= n; + } + keys <-= Ir->Error; +} +.P2 +The following module can be used to test the above code. +It simply prints the name of the button that was pressed. +.P1 +implement Irtest; + +include "sys.m"; +include "draw.m"; +FD: import Sys; +include "ir.m"; + +Irtest: module +{ + init: fn(nil: ref Draw->Context, nil: list of string); +}; +ir: Ir; +sys: Sys; +.P2 +.P1 +init(nil: ref Draw->Context, nil: list of string) +{ + c: int; + stderr: ref FD; + irchan := chan of int; + + sys = load Sys Sys->PATH; + stderr = sys->fildes(2); + + # If the real IR remote application can + # be found, use it, otherwise use the simulator: + ir = load Ir Ir->PATH; + if(ir == nil) + ir = load Ir Ir->SIMPATH; + if(ir == nil) { + # %r format code means the last system error string + sys->fprint(stderr, "load ir: %r\en"); + return; + } + if(ir->init(irchan) != 0) { + sys->fprint(stderr, "Ir.init: %r\en"); + return; + } + names := array[] of { + "Zero", + "One", + . . . + "Mute", + }; + for(;;) { + c = <-irchan; + if(c == ir->Error) + sys->print("Error %d\en", c); + else + sys->print("%s\en", names[c]); + } +} +.P2 +Finally, here is a snippet from a movie application that +uses the IR module; it demonstrates how +.CW alt +is useful for dealing with multiple events. +This is only one of the functions of the +movie module, so not everything is defined. +It uses the +.CW Mpeg +module, which actually +copies the MPEG data stream to the screen +asynchronously. +Its +.CW play +function takes, as one of its arguments, +a channel; +before starting to play it writes a +string on the channel. +An empty string indicates success at +locating the movie; a non-empty +string contains an error message. +When it finishes, it writes another string. +.P1 +movie(entry: ref Dbinfo, cc: chan of int) +{ + i: int; + m: Mpeg; + b: ref Image; + + m = load Mpeg Mpeg->PATH; + if (m == nil) + return; + # make a place on the screen + w := screen.window(screen.image.r); + + mr := chan of string; + s := m->play(w, 1, w.r, entry.movie, mr); + if(s != "") + return; + # wait for the end of the movie + # while watching for button pushes + for(;;) { + alt { + <-mr => + return; + i = <-cc => + case i { + Ir->Select => + m->ctl("stop"); + Ir->Up or Ir->Dn => + m->ctl("pause"); + } + } + } +} +.P2 +.NH 2 +Monitors +.PP +Statically allocated storage within a module is accessible to +all the functions of that module, +and there is no explicit mechanism in Limbo for synchronizing +concurrent updates to this storage from several tasks. +However, it is straightforward to build a variety of concurrency-control +mechanisms by using channel communications. +.PP +An example is a module that implements a +.CW Monitor +abstract data type. +Each instance of +.CW Monitor +has a +.CW lock +and an +.CW unlock +operation; +calling +.CW lock +delays if another task holds the lock; calling +.CW unlock +releases the lock and enables any other task attempting +to execute +.CW lock . +.P1 +implement Monitors; + +Monitors: module +{ + Monitor: adt { + create: fn(): Monitor; + lock: fn(m: self Monitor); + unlock: fn(m: self Monitor); + ch: chan of int; + }; +}; +.P2 +.P1 +Monitor.create(): Monitor +{ + m := Monitor(chan of int); + spawn lockproc(m.ch); + return m; +} +.P2 +.P1 +Monitor.lock(m: self Monitor) +{ + m.ch <- = 0; +} +.P2 +.P1 +Monitor.unlock(m: self Monitor) +{ + <- m.ch; +} +.P2 +.P1 +lockproc(ch: chan of int) +{ + for (;;) { + <- ch; # wait for someone to lock + ch <- = 0; # wait for someone to unlock + } +} +.P2 +It would be used like this: +.P1 +mp: Mon; +Monitor: import mp; +mp = load Mon "..."; +l := Monitor.create(); +\. . . +l.lock(); +# region of code to be protected; +# only one thread can execute here at once. +l.unlock(); +.P2 +The +.CW create +method of +.CW Monitor +allocates an instance of a +.CW Monitor +containing an initialized channel. +It also creates a thread executed in the +.CW lockproc +routine, which repeatedly reads from the channel, +then writes on it. +The values transmitted over the channel are of no +interest; it is the pure fact of communication that is put to use. +The +.CW lock +routine sends a message; in the idle state, the +.CW lockproc +thread reads it and the sender proceeds. +Meanwhile, +.CW lockproc +tries to send a message over the same channel. +If another thread attempts to +.CW lock , +there is no reader for the channel, and so its transmission will block. +At some point, the thread that gained the lock +calls +.CW unlock , +which receives from the channel. +Depending on timing, this reception enables execution of either +.CW lockproc +or one of the threads attempting to send via +.CW lock . +.PP +There is a simpler implementation of +.CW Monitor , +using a buffered channel. +The +.CW create +operation simply allocates a channel with a one-element buffer: +.P1 +Monitor.create(): Monitor +{ + return Monitor(chan[1] of int); +} +.P2 +The +.CW lock +and +.CW unlock +operations have the same implementation. +Because of the buffer, when a process locks an unlocked +.CW Monitor , +the send succeeds but fills the channel. +Subsequent attempts to +.CW lock +will therefore block as long as the channel is full. +.CW Unlock +removes the value from the channel, making it empty, +and allowing another +.CW lock +to proceed. +The +.CW lockproc +is not needed. +Note that a program using the module would not need to be recompiled to +use the new implementation, because the module's signature and use +remains the same. +This is the implementation of the +.CW Lock +module in the Limbo library for Inferno. +.PP +Limbo channels are usually unbuffered: +a sender blocks until there +is a receiver, and processes synchronise at each communication. +Buffered channels are used sparingly in Limbo programs, typically to improve throughput or, +less often, in specialized ways as in the monitor example above. +.NH 2 +Guarding sends and receives +.PP +In some applications, a process takes input from one channel, +and sends it on to another channel, possibly having transformed it. +In case the input and output processes run at different rates, +the process itself acts as a buffer, holding a queue of values internally. +If the input process were faster than the output process, the queue +would accumulate values faster than they are consumed, exhausting memory. +To prevent that, when the queue reaches a specified limit, the process should guard against +receiving from the input channel, but continue sending to the output channel. +Conversely, when the queue is empty, it should not attempt to send. +The +.CW alt +statement allows a process to choose between sending and receiving based on +which channels are ready, but the process must also account for the current state +of the queue. +This example shows a way to make a buffered +channel of strings from an unbuffered channel. +It is written as a module whose +.CW bufchan +function takes a +.CW chan +.CW of +.CW string +and a size as argument, and returns a new channel; +it creates an asynchronous task that accepts input from the argument +channel and saves up to +.CW size +strings, meanwhile trying to send them to its user. +.P1 +implement Bufchan; +Bufchan: module { + bufchan: fn(c: chan of string, size: int): chan of string; +}; + +xfer(oldchan, newchan: chan of string, size: int) +{ + temp := array[size] of string; + fp := 0; # first string in buffer + n := 0; # number of strings in buffer + dummy := chan of string; + sendch, recvch: chan of string; + s: string; + + for (;;) { + sendch = recvch = dummy; + if (n > 0) + sendch = newchan; + if (n < size) + recvch = oldchan; + alt { + s = <-recvch => + temp[(fp+n)%size] = s; + n++; + + sendch <- = temp[fp] => + temp[fp++] = nil; + n--; + if (fp>=size) + fp -= size; + } + } +} +.P2 +.P1 +bufchan(oldchan: chan of string, size: int): chan of string +{ + newchan := chan of string; + spawn xfer(oldchan, newchan, size); + return newchan; +} +.P2 +The module is somewhat specialized, but it illustrates +useful programming techniques. +The most interesting occurs in +.CW xfer , +which does the work. +The problem +.CW xfer +faces is that it doesn't want to receive input when its +buffer is full, nor to try to send when it has nothing to +transmit. +The solution here is to use a dummy channel +on which nothing is ever sent or received; in the +.CW alt +statement, +that channel substitutes for the real input channel +when the buffer is full, and for the output channel +when the buffer is empty. +.PP +The module could be used in the following way: +.P1 +Bufchan: module { + PATH: con "/dis/lib/bufchan.dis"; + bufchan: fn(c: chan of string, size: int): chan of string; +}; +\. . . +bufc := load Bufchan Bufchan->PATH; +sourcech := chan of string; + +# ... (here, hand off sourcech to a process that +# reads strings from it and copies them to ch) +ch: chan of string = bufc->bufchan(sourcech, 10); +\. . . +s := <- ch; +\. . . +.P2 +.NH 1 +Syntax summary +.PP +This section summarizes the grammar of Limbo +above the lexical level; constants and identifiers +are left undefined. +.PP diff --git a/doc/limbo/limbo.pdf b/doc/limbo/limbo.pdf Binary files differnew file mode 100644 index 00000000..b153c6aa --- /dev/null +++ b/doc/limbo/limbo.pdf diff --git a/doc/limbo/limbo.rc b/doc/limbo/limbo.rc new file mode 100755 index 00000000..ac21ad91 --- /dev/null +++ b/doc/limbo/limbo.rc @@ -0,0 +1,20 @@ +#!/bin/rc +cat limbo.ms synsum | awk 'BEGIN { inside = 0 } + + { if ($1==".s1") { + inside = 1; + } + if ($1==".s2") { + inside = 0; + } + if (inside) { + gsub(/C/, "\\f(CW") + gsub(/ID/, "@D") + gsub(/I/, "\\fI") + gsub(/@D/, "ID") + gsub(/O/, "\\fI\\s-3\\v''+2p''opt\\v''-2p''\\s+3") + } + print $0 + } +' + diff --git a/doc/limbo/mkfile b/doc/limbo/mkfile new file mode 100644 index 00000000..39cd3ee5 --- /dev/null +++ b/doc/limbo/mkfile @@ -0,0 +1,12 @@ +<../fonts + +all:V: limbo.pdf addendum.pdf + +limbo.ps:D: limbo.ms limbo.rc synsum mkfile + rc limbo.rc | troff -mpm | lp -d stdout >limbo.ps + +%.pdf: %.ps + ps2pdf <$stem.ps >$stem.pdf + +addendum.ps:D: addendum.ms mkfile + cat addendum.ms |troff -mpm | lp -d stdout >$target diff --git a/doc/limbo/synsum b/doc/limbo/synsum new file mode 100644 index 00000000..c0270d9f --- /dev/null +++ b/doc/limbo/synsum @@ -0,0 +1,335 @@ +.s1 +program: + Cimplement Iidentifier-listC ; Itop-declaration-sequence +.s2 +.s1 +top-declaration-sequence: + top-declaration + top-declaration-sequence top-declaration +.s2 +.s1 +top-declaration: + declaration + identifier-listC := IexpressionC ;I + identifier-listC = IexpressionC ;I + C( Iidentifier-listC ) := IexpressionC ;I + module-declaration + function-definition + adt-declaration +.s2 +.s1 +declaration: + identifier-listC : ItypeC ;I + identifier-listC : ItypeC = IexpressionC ;I + identifier-listC : con IexpressionC ;I + Iidentifier-listC : import Iidentifier C;I + identifier-listC : typeI typeC ;I + identifier-listC : exceptionI tuple-typeO + Cinclude Istring-constantC ;I +.s2 +.s1 +identifier-list: + identifier + identifier-listC , Iidentifier +.s2 +.s1 +expression-list: + expression + expression-listC , Iexpression +.s2 +.s1 +type: + data-type + function-type +.s2 +.s1 +data-type: + CbyteI + CintI + CbigI + CrealI + CstringI + tuple-type + Carray of Idata-type + Clist of Idata-type + Cchan of Idata-type + adt-type + Cref Iadt-type + Cref Ifunction-type + module-type + module-qualified-type + type-name +.s2 +.s1 +tuple-type: + C( Idata-type-listC )I +.s2 +.s1 +data-type-list: + data-type + data-type-list C,I data-type +.s2 +.s1 +adt-type: + identifier + module-qualified-type +.s2 +.s1 +module-type: + identifier +.s2 +.s1 +module-qualified-type: + identifier C->I identifier +.s2 +.s1 +type-name: + identifier +.s2 +.s1 +function-type: + Cfn Ifunction-arg-ret +.s2 +.s1 +function-arg-ret: + C( Iformal-arg-listOC ) IraisesO + C( Iformal-arg-listOC ) : Idata-type raisesO +.s2 +.s1 +formal-arg-list: + formal-arg + formal-arg-listC , Iformal-arg +.s2 +.s1 +formal-arg: + nil-or-ID-listC : Itype + nil-or-IDC : self refO Iidentifier + nil-or-IDC : self Iidentifier + C*I +.s2 +.s1 +nil-or-ID-list: + nil-or-ID + nil-or-ID-list C, Inil-or-ID +.s2 +.s1 +nil-or-ID: + identifier + CnilI +.s2 +.s1 +raises: + Craises ( Inil-or-ID-listC )I + CraisesI nil-or-ID +.s2 +.s1 +module-declaration: + IidentifierC : module { Imod-member-listOC } ;I +.s2 +.s1 +mod-member-list: + mod-member + mod-member-list mod-member +.s2 +.s1 +mod-member: + identifier-listC : Ifunction-typeC ;I + identifier-listC : Idata-typeC ;I + adt-declarationC I + identifier-listC : con Iexpression C;I + identifier-listC : type Itype C;I +.s2 +.s1 +adt-declaration: + IidentifierC : adt { Iadt-member-listOC } ;I +.s2 +.s1 +adt-member-list: + adt-member + adt-member-list adt-member +.s2 +.s1 +adt-member: + identifier-listC : cyclicO Idata-typeC ;I + identifier-listC : con IexpressionC ;I + identifier-listC : Ifunction-typeC ;I + Cpick { Ipick-member-listC }I +.s2 +.s1 +pick-member-list: + pick-tag-listC =>I + pick-member-list pick-tag-listC =>I + pick-member-list identifier-listC : cyclicO Idata-typeC ;I +.s2 +.s1 +pick-tag-list: + identifier + pick-tag-listC or Iidentifier +.s2 +.s1 +function-definition: + function-name-part function-arg-retC { IstatementsC }I +.s2 +.s1 +function-name-part: + identifier + function-name-partC . Iidentifier +.s2 +.s1 +statements: + (empty) + statements declaration + statements statement +.s2 +.s1 +statement: + expressionC ;I + C;I + C{ IstatementsC }I + Cif ( IexpressionC ) Istatement + Cif ( IexpressionC ) IstatementC else Istatement + labelO Cwhile ( IexpressionOC ) Istatement + labelO Cdo IstatementC while ( IexpressionOC ) ;I + labelO Cfor ( IexpressionOC ; IexpressionOC ; IexpressionOC ) Istatement + labelO Ccase IexpressionC { Iqual-statement-sequenceC }I + labelO Calt { Iqual-statement-sequenceC }I + labelO Cpick IidentifierC := IexpressionC { Ipqual-statement-sequenceC }I + Cbreak IidentifierOC ;I + Ccontinue IidentifierOC ;I + Creturn IexpressionOC ;I + Cspawn ItermC ( Iexpression-listOC ) ;I + Cexit ;I + Craise IexpressionOC ;I + C{ IstatementsC } exceptionI identifierOC{ Iqual-statement-sequenceC }I +.s2 +.s1 +label: + identifier C:I +.s2 +.s1 +qual-statement-sequence: + qual-listC =>I + qual-statement-sequence qual-listC =>I + qual-statement-sequence statement + qual-statement-sequence declaration +.s2 +.s1 +qual-list: + qualifier + qual-listC or Iqualifier +.s2 +.s1 +qualifier: + expression + expressionC to Iexpression + C*I +.s2 +.s1 +pqual-statement-sequence: + pqual-listC =>I + pqual-statement-sequence pqual-listC =>I + pqual-statement-sequence statement + pqual-statement-sequence declaration +.s2 +.s1 +pqual-list: + pqualifier + pqual-listC or Ipqualifier +.s2 +.s1 +pqualifier: + identifier + C*I +.s2 +.s1 +expression: + binary-expression + lvalue-expression assignment-operator expression + C( Ilvalue-expression-listC ) = Iexpression + send-expression + declare-expression + load-expression +.s2 +.s1 +binary-expression: + monadic-expression + binary-expression binary-operator binary-expression +.s2 +.s1 +binary-operator: one of + C** * / % + - << >> < > <= >= == != & ^ | :: && ||I +.s2 +.s1 +assignment-operator: one of + C= &= |= ^= <<= >>= += -= *= /= %=I +.s2 +.s1 +lvalue-expression: + identifier + CnilI + termC [ IexpressionC ]I + termC [ IexpressionC : ]I + termC . Iidentifier + C( Ilvalue-expression-listC )I + C* Imonadic-expression +.s2 +.s1 +lvalue-expression-list: + lvalue-expression + lvalue-expression-listC , Ilvalue-expression +.s2 +.s1 +expression: + term + monadic-operator monadic-expression + Carray [ IexpressionC ] of Idata-type + Carray [ IexpressionOC ] of { Iinit-listC }I + Clist of { Iexpression-listC }I + Cchan of Idata-type + Cchan [ IexpressionOC ] of Idata-type + data-type monadic-expression +.s2 +.s1 +term: + identifier + constant + real-constant + string-constant + CnilI + C( Iexpression-listC )I + termC . Iidentifier + termC -> Iterm + termC ( Iexpression-listOC )I + termC [ IexpressionC ]I + termC [ IexpressionC : IexpressionC ]I + termC [ IexpressionC : ]I + termC ++I + termC --I +.s2 +.s1 +monadic-operator: one of + C+ - ! ~ ref * ++ -- <- hd tl len tagofI +.s2 +.s1 +init-list: + element + init-listC , Ielement +.s2 +.s1 +element: + expression + expressionC => Iexpression + C* => Iexpression +.s2 +.s1 +send-expression: + lvalue-expressionC <- = Iexpression +.s2 +.s1 +declare-expression: + lvalue-expressionC := Iexpression +.s2 +.s1 +load-expression: + Cload Iidentifier expression +.s2 diff --git a/doc/limbotk/tk.ms b/doc/limbotk/tk.ms new file mode 100644 index 00000000..4400afa3 --- /dev/null +++ b/doc/limbotk/tk.ms @@ -0,0 +1,1248 @@ +.nr dT 4 +.nr P1 .2i +.de EX +.nr x \\$1v +\\!h0c n \\nx 0 +.. +.nr Pd \n(PD +.de FG \" start figure caption: .FG filename.ps verticalsize +.KF +.BP \\$1 \\$2 +.sp .5v +.EX \\$2v +.ps -1 +.vs -1 +.. +.de fg \" end figure caption (yes, it is clumsy) +.ps +.vs +.br +.KE +.. +.de Tk \" Tk option name and option +.CW \\$1 +.I \\$2 \\$3 +.. +.de Tc \" Tk command string +.IP "\\f(CW\\$1\\fP \\$2" \w'\f(CWburble\fP'u +.br +.. +.de Kp \" Keypress +.IP "\\f(CW\\$1\\fP" \w'\f(CWKeypress\fP'u +.br +.. +.de d0 \" no gap between paragraphs +.nr PD 0 +.. +.de d1 \" restore gap +.nr PD \n(Pd +.. +.ds Op "\fR[\fP\fIoptions ...\fP\fR]\fP +.TL +An Overview of Limbo/Tk +.AU +.I "Lucent Technologies Inc." +.br +Revised June 2000 by Vita Nuova +.SH +Overview +.LP +Limbo/Tk is a concise and powerful way to construct graphical user interfaces without directly using the Draw module primitives. +Standard interfaces can quickly be created from collections of menus, buttons, and other widgets that are part of Limbo/Tk's visual toolkit. +It is modelled on Ousterhout's Tk 4.0 [1,2], commonly deployed +with the scripting language Tcl as `Tcl/Tk'. +Although inspired by Tk 4.0, Inferno's Tk implementation is new, and unrelated to Ousterhout's. +It is intended to be used with the new programming language Limbo, not Tcl. +Limbo/Tk applications make +extensive use of Limbo's concurrent programming constructions and data structures, +and that is reflected in the interface. +Section 9 of Volume 1 of the +.I "Inferno Programmer's Manual" +provides a detailed reference for Limbo/Tk. +This paper provides an overview of its use in some simple staged examples, and +concludes with +a summary of the differences between the Limbo/Tk implementation and Tk 4.0. +In the rest of this paper, `Tk' refers to Limbo/Tk, and `Tk 4.0' refers to Ousterhout's +original implementation. +.NH 1 +The Limbo/Tk environment +.LP +Limbo applications access Tk by means of a built-in module, +.CW "$Tk" . +The standard distribution also includes the window manager +.CW "wm" +and the Limbo module +.CW Wmlib . +Unlike +.CW Tk , +.CW Wmlib +is not built-in but implemented in Limbo by +.CW /appl/lib/wmlib.b . +It simplifies and standardises the construction of windowed applications; +it also contains some graphical devices such as tabbed notebooks not provided +directly by Limbo/Tk. +The essentials of both +.CW Tk +and +.CW Wmlib +are discussed here. +.LP +Programmers usually need only three functions from the +.CW Tk +module: +.IP • +.CW toplevel +.br +Creates a graphical window \- a Tk `top level' widget \- +that can be used to build a Limbo/Tk application. +The function returns a reference to an adt +.CW "\%Tk->Toplevel" +adt that represents the window in subsequent Tk operations. +.IP • +.CW cmd +.br +Creates and arranges graphic objects within the toplevel window by processing Limbo/Tk command strings. +The interface to Tk is primarily the passing of strings between +the application and Tk +of the toolkit using +.CW cmd . +Each call to +.CW cmd +returns a string representing the result of the Tk command; +a string starting with +.CW ! ' ` +diagnoses an error. +.IP • +.CW namechan +.br +Gives a name within Tk (in the scope of a given window) to a Limbo +.CW "chan of string" +that Tk commands can use to send data to a Limbo program. +.LP +Other functions in the module have more specialised uses that will not be discussed here. +For instance, +.CW "mouse" +and +.CW "keyboard" +are used by a window manager to send mouse and keyboard events +to the Tk implementation for distribution to applications. +.LP +Even +.CW toplevel +is not commonly used in the window manager environment: +a function +.CW Wmlib->titlebar +provides the usual interface to +.CW toplevel . +The low-level interface will be described first, for completeness, +then the normal case using +.CW titlebar . +.NH 1 +Basic Limbo/Tk +.LP +This section shows a simple Tk application that uses only the fundamental Tk functions. +.NH 2 +Preliminaries +.LP +The example assumes that the +.CW "Tk" +module is loaded as +.CW "tk" : +.P1 +include "tk.m"; + tk: Tk; + ... +init(ctxt: ref Draw->Context, nil: list of string) +{ + tk = load Tk Tk->PATH; + ... +} +.P2 +.NH 2 +Creating a toplevel +.LP +The following fragment makes the Limbo identifier +.CW "top" +refer to a new +.CW "ref Tk->Toplevel" +for use in later Tk commands: +.P1 + top := tk->toplevel(ctxt.screen, "-x 150 -y 150"); +.P2 +The upper left corner of this window will be at point (150, 150), where (0,0) is the upper left corner of the screen; +.I x +coordinates increase from left to right, and +.I y +coordinates increase from top to bottom. +.LP +In general, +.CW "Tk->toplevel" +takes a screen argument and a string containing further options, and it returns a reference to a top-level Limbo/Tk widget on the given screen. +The options argument contains +.Tk -option value +pairs, such as +.CW "-relief raised" . +As well as the generic options, +.CW "toplevel" +accepts the options +.Tk -x int +and +.Tk -y int +to specify the upper left corner of the toplevel widget, where (0,0) is the top left corner of the screen, +and +.Tk -debug bool +to cause a trace of all Tk commands to be printed, +if the boolean value is true. +.NH 2 +Creating a named channel to Tk +.LP +The following fragment creates a +.CW "chan of string" +called +.CW "c" , +then associates the name +.CW "cmdchan" +within Tk with the Limbo channel +.CW "c" : +.P1 + c := chan of string; + tk->namechan(top, c, "cmdchan"); +.P2 +The named channel +.CW "cmdchan" +can now be used in a special Tk +.CW send +command +to send strings to be processed by a Limbo program, typically notifying it of an event. +Note that the Limbo identifer name need not match the name given to Tk, +although it is invariably easier to follow the code if the two are the same. +.NH 2 +Defining and positioning widgets +.LP +The following fragment uses +.CW "tk->cmd" +to define four widgets: two buttons, a label, and an entry widget. The widgets are positioned in their parent window (in this case the toplevel window +.CW "top" ) +using the Tk command +.CW "pack" : +.P1 +.ps -1 +.vs -1 + \fI# define widgets\fP + tk->cmd(top, "button .b1 -text Exit -command {send cmdchan exit}"); + tk->cmd(top, "button .b2 -text Send -command {send cmdchan send}"); + tk->cmd(top, "label .l -text {Name: }"); + tk->cmd(top, "entry .e"); + + \fI# bind newline character in entry widget to command\fP + tk->cmd(top, "bind .e <Key-\en> {send cmdchan send}"); + + \fI# pack widgets\fP + tk->cmd(top, "pack .b1 .b2 .l .e -side left; update"); +.ps +1 +.vs +1 +.P2 +This particular pack command packs the widgets named +.CW ".b1" , +.CW ".b2" , +.CW ".l" , +and +.CW ".e" +into the +.CW "top" +window beginning at the left side. The +.CW "update" +command forces Tk to update the screen right away. The result is shown in Figure 1. +.FG "f1.ps" 0.21i +.ce +.I "Figure 1. Two buttons, a label and an entry widget." +.fg +.LP +Entering a newline (`return' or `enter' key)\-the character +.CW \en ' ` +in Limbo\- +in the entry box results in the execution of the Tk command +.CW "{send cmdchan send}" , +because of the binding set by +.CW "bind .e <Key-\en>" +previously executed by +.CW tk->cmd . +The +.CW "bind" +command is often used to bind specific widget events (including key presses, mouse button presses, and mouse motion) to Tk +.CW send +commands. +.NH 2 +Processing widget events +.LP +This next fragment defines what will happen when a user selects either the +.CW "Exit" +or the +.CW "Send" +buttons. The +.CW "Exit" +behaviour is simple: the program ends. If a user touches +.CW Send , +the program executes +.CW "tk->cmd" +to get whatever text is in the entry widget +.CW ".e" +then prints it to standard output. +.P1 + for(;;) { + s := <- c; + case s { + "exit" => + return; + + "send" => + sys->print("name was: %s\en", tk->cmd(top, ".e get")); + } + } +.P2 +.NH 1 +Example - using Tk and Wmlib +.LP +This section uses both Tk and Wmlib to create a simple window manager application with a titlebar, including resize and exit buttons. +This is the usual way to create new windows. +.NH 1 +Preamble +.LP +The example assumes that the +.CW "Tk" +module is loaded as before, as module variable +.CW "tk" , +but furthermore that the +.CW "Wmlib" +module is also loaded, as +.CW "wmlib" : +.P1 +include "tk.m"; + tk: Tk; +include "wmlib.m"; + wmlib: Wmlib; + ... + tk = load Tk Tk->PATH; + wmlib = load Wmlib Wmlib->PATH; + wmlib->init(); +.P2 +Note that +.CW wmlib->init +is called once to initialise the +.CW wmlib +module just loaded, before any other functions are called. +.LP +In window manager applications the +.CW Tk->toplevel +function is not normally used directly. +Instead, a window manager interface is used to create both +the top level widget and a channel to receive events from the window manager. +The +.CW titlebar +function has the signature: +.ps -1 +.vs -1 +.P1 + titlebar(scr: Draw->Screen, tkargs: string, title: string, buts: int): + (ref Tk->Toplevel, chan of string); +.P2 +.vs +1 +.ps +1 +The +.CW Screen +is the one on which the window is to be created, normally the +one passed in the +.CW Context +parameter to a program's +.CW init +function. +The +.I tkargs +parameter can control the position and appearance of the window, +but is best left nil (or the empty string) to use the window manager's +defaults (see +.I wmlib (2) +for details otherwise), +including automatic placement. +The +.I title +string gives the title that appears in the title bar. +Finally, +.I buts +is a bit set that selects the buttons to appear. +The value +.CW Wmlib->Appl +gives the usual resize and hide buttons; +the exit (delete) button always appears. +The following is used in the example: +.P1 + (top, titlechan) := wmlib->titlebar(ctxt.screen, nil, + "Text Browser", Wmlib->Appl); +.P2 +Note that +.CW titlebar +returns a tuple. +The first element is a reference to the Tk top level widget +for use in later Tk commands. +The second element of the tuple +is a Limbo channel of type +.CW "chan of string" +that passes window manager events to the application. +.LP +The channel +.CW "titlechan" +is used by +.CW "wmlib" +to send messages, but it is normally necessary +to create a channel to Tk to receive events from widgets the application creates: +.P1 + cmdchan := chan of string; + tk->namechan(top, cmdchan, "cmdchan"); +.P2 +.NH 2 +Defining and positioning widgets +.LP +The function +.CW "Wmlib->tkcmds" +takes two arguments, a +.CW "ref Tk->Toplevel" +that identifies a top level window, +and an +.CW "array of string" . +Each element of the array is a Tk command acceptable to +.CW "Tk->cmd" ; +.CW Wmlib->tkcmds +simply applies it +to each element of the array. +.LP +Most of the following fragment consists of Tk command strings that are members of the array of strings +.CW "tk_config" . +The comments describe the widgets being created. Not all widgets and menu items in this example are functional. +The last line executes the array of commands using +.CW "wmlib->tkcmds" : +.nr dP +1 +.nr dV +1p +.P1 + tk_config := array[] of { + + \fI# define menubar frame, widget frame, text frame\fP + "frame .mbar -relief groove -bd 2", + "frame .w", + "frame .text", + + \fI# define and pack menus\fP + "menubutton .file -text File -menu .file.m", + "menubutton .edit -text Edit -menu .edit.m", + "menubutton .help -text Help -menu .help.m", + + "menu .file.m", + ".file.m add command -label Send -command {send cmdchan send}", + ".file.m add command -label Exit -command {send cmdchan exit}", + "menu .edit.m", + ".edit.m add command -label Cut", + + "menu .help.m", + ".help.m add command -label Index -underline 0", + + "pack .file .edit -side left -in .mbar; update", + "pack .help -side right -in .mbar", +.P3 + + \fI# define and pack buttons and text entry box (for file name)\fP + "button .b1 -text Send -command {send cmdchan send}", + "button .b2 -text Open -command {send cmdchan open}", + "label .l -text {Name: }", + + "entry .e", + "bind .e <Key-\en> {send cmdchan open}", + + "pack .b1 .b2 .l .e -side left -in .w", +.P3 + + \fI# define and pack text panel and its scrollbar\fP + "text .t -yscrollcommand {.scroll set} -bg white", + "scrollbar .scroll -command {.t yview}", + "pack .scroll -side left -fill y -in .text", + "pack .t -side right -in .text -expand 1 -fill both", + + \fI# pack frames\fP + "pack .text -side bottom -fill both -expand 1", + "pack .mbar .w -fill x; update", + "pack propagate . 0", + }; + + \fI# run the Tk commands\fP + wmlib->tkcmds(top, tk_config); +.P2 +.nr dP -1 +.nr dV -1p +The result of executing these Tk commands is shown in Figure 2. +.LP +The arrays defining Tk widgets are sometimes made global to a module +when they can sensibly be used by several functions. +It is also common to use small Limbo functions to replicate +similar widgets by building Tk commands from the value of parameters, +using Limbo string concatenation +or +.CW sys->sprint . +.FG "f2.ps" 2.16i +.ce +.I "Figure 2. A Wm application with a menu bar, a tool bar, and a text window." +.fg +.LP +.NH 2 +Processing widget events +.LP +This fragment uses an +.CW "alt" +block to wait for strings to arrive from either +.CW "titlechan" +or +.CW "cmdchan" . +.LP +When a string is received on +.CW "titlechan" , +the +.CW "case" +statement either handles it directly (as with +.CW exit ) +or passes it to +.CW "wmlib->titlectl" +for normal handling by the window manager. +.LP +When a string is received on +.CW cmdchan , +the program acts accordingly: it writes the text in the entry widget to standard output +.CW send ); ( +calls +.CW "do_open" +to open the file name currently in the entry box +.CW open ); ( +or returns from the processing loop +.CW exit ). ( +.P1 + for(;;) { + alt { + s := <-titlechan => \fI# message from title bar buttons\fP + case s { + "exit" => + return; + * => + wmlib->titlectl(top,s); + } + + com := <-cmdchan => \fI# message from widgets created above\fP + case com { + "send" => + sys->print("name was: %s\en", tk->cmd(top, ".e get")); + "open" => + do_open(top, tk->cmd(top, ".e get")); + "exit" => + return; + } + } + } +.P2 +Although this example uses a Tk text entry widget, +.CW Wmlib +provides a function +.CW filename +that pops up a graphical device that allows a user to +select a file by typing a name, browsing the file system, or a mixture of both. +See +.I wmlib (2) +for details. +.NH 2 +Putting text into the text widget +.LP +The +.CW "do_open" +function below uses +the buffered I/O module +.CW Bufio +to read lines from the file named in the entry widget and add them to the text currently in the text widget +.CW ".t" . +.P1 +do_open(top: ref Tk->Toplevel, file: string) +{ + iofd := bufio->open(file, Bufio->OREAD); + if(iofd == nil){ + wmlib->dialog(top, "error -fg red", "Open file", + sys->sprint("%s: %r", file), 0, "Ok"::nil); + return; + } + + tk->cmd(top, ".t delete 1.0 end"); + tk->cmd(top, "cursor -bitmap cursor.wait"); + + for(;;){ + line := iofd.gets('\en'); + if(line == nil) + break; + tk->cmd(top, ".t insert end '" + line); + } + tk->cmd(top, "cursor -default"); +} +.P2 +If the file cannot be opened, +.CW do_open +calls +.CW wmlib->dialog +to pop up a diagnostic message panel, rather than (say) printing a message to standard +error, +and returns. +If the file was opened, +.CW do_open +deletes the current +contents of the frame, and reads the +file into it, inserts one line at a time. +Tk allows the data inserted to contain embedded newlines, and +a more efficient implementation could read blocks +of data from the file and insert them, but some care is required. +A text file in Inferno contains Unicode characters in UTF-encoding, and the +bytes of a single character might be split across separate reads. +.CW Iobuf.gets +by contrast is guaranteed to reassemble complete Unicode characters from +the buffered input stream. +A program using +.CW Iobuf.read +(or +.CW Sys->read ) +to fetch blocks of data would typically use +.CW Sys->utfbytes +to find maximal sequences of UTF-encoded characters +and insert large chunks of text at once. +See the function +.CW loadtfile +in +.CW /appl/wm/edit.b +for example. +.NH 1 +Limbo/Tk command syntax +.LP +Once a toplevel widget has been built, an application calls +.CW "tk->cmd" +to issue commands to Tk and receive results. +This section describes in more detail the contents of the string argument +that conveys the commands. +.NH 2 +Command strings +.LP +The command string may contain one or more commands, separated by semicolons. A semicolon is not a command separator when it is nested in braces +.CW "{}" ) ( +or brackets +.CW "[]" ), ( +or it is escaped by a backslash (\e). +.LP +Each command is divided into +.I "words" : +sequences of characters separated by one or more blanks or tabs, +subject to the following quoting rules: +.IP +.br +A word beginning with an opening brace +.CW { ) ( +continues until the balancing closing brace +.CW } ) ( +is reached. +The outer brace characters are stripped. +A backslash +.CW \e ) ( +can be used to escape a brace, preventing special interpretation. +.IP +.br +A word beginning with an opening bracket +.CW [ ) ( +continues until the balancing closing bracket +.CW ] ) ( +is reached. The enclosed string is then evaluated as if it were a command string, and the resulting value is used as the contents of the word. +.IP +.br +At any point in the command string a single quote (\f5'\fP) causes the rest of the string to be treated as one word. +.LP +Single commands are executed in order until they are all done or an error is encountered. By convention, an error is signalled by a return value starting with an exclamation mark. The return value from +.CW "cmd" +is the return value of the first error-producing command or else the return value of the final single command. +.LP +To execute a single command, the first word is examined. It can be one of the following: +.IP \(bu +One of the following widget creating commands: +.RS +.TS +lf(CW) lf(CW) . +button menu +canvas menubutton +checkbutton radiobutton +entry scale +frame scrollbar +label text +listbox +.TE +The second word of each of these commands is the name of the widget to be created. The remaining words are option/value pairs. +.RE +.IP \(bu +A widget name (beginning with a dot +.CW . ') ` +that corresponds to an existing widget. The second word gives the name of a particular widget subcommand and the remaining words are arguments for the subcommand. +.IP \(bu +A +.CW "pack" , +.CW "bind" , +.CW "focus" , +.CW "grab" , +.CW "put" , +.CW "destroy" , +.CW "image" , +or +.CW "update" +command. +These commands manipulate existing widgets or control Tk. +Most are the same as documented for Tk 4.0. +The +.CW "bind" +command is significantly different, and the +.CW "image" +command is more limited. +.IP \(bu +The +.CW " send " +command, +which sends a string to a Limbo process. +The second word is the Tk name of a Limbo channel (previously registered with +.CW "namechan" ), +and the rest of the command is sent as a single string along the channel. +.IP \(bu +The +.CW "variable" +command. +Limbo/Tk generally does not provide the variables of Tcl/Tk; radio buttons are an exception. The +.CW "variable" +command takes the name of a variable defined in a radio button as the second word, and the value of the variable is the result of the command. Furthermore, there is one predefined variable whose value can be retrieved this way: the +.CW "lasterror" +variable is set every time a Tk command returns an error. The value is the offending command (possibly truncated) followed by the error return value. The +.CW "lasterror" +variable is cleared whenever it is retrieved using the variable command. This allows several +Tk commands to be executed without checking error returns each time. A call to the +.CW "variable" +command with +.CW "lasterror" +at strategic points can make sure that an unexpected error has not occurred. +.IP \(bu +The +.CW "cursor" +command. This command takes a number of option/value pairs to control the appearance and placement of the cursor. Available options are: +.Tk -x int +and +.Tk -y int , +to change the cursor position to align its hotpoint at the given point (in screen coordinates); +.Tk -bitmap filename +or +.Tk -image imagename +to change the appearance of the cursor; and +.CW -default +to change back to the default appearance of the cursor. +.LP +Because the language accepted by the +.CW "cmd" +function has no user-defined functions, no control flow and very few variables, almost all applications need to have some of their logic in Limbo programs. +The modern concurrency constructions provided by Limbo \- +processes, channels, send/receive operators and +.CW alt \- +replace unstructured interrupts (`call backs'), often used by +other graphics systems, by structured control flow. +(The Inferno shell does provide support, however, for rapid prototyping using Tk +and a scripting language: see the manual pages for +.I sh-tk (1) +and +.I wish (1) +in Volume 1.) +.NH 2 +Widget options +.LP +In Tk, all widget creation commands, and all +.CW "cget" +widget commands accept a common set of generic options in addition to widget-specific options. +Except as noted otherwise, the meanings are the same as they are in Tk 4.0. The allowable forms of things like +.I "color" , +.I "dist" , +and +.I "font" +are slightly different in Limbo/Tk. +See +.I types (9) +in Volume 1 +for precise definitions. +The generic options are as follows: +.DS +.fi +.Tk -activebackground color +.br +.Tk -activeforeground color +.br +.Tk -actwidth dist +.br +.Tk -actheight dist +.DE +.QS +Note: +the +.CW -actwidth +and +.CW -actheight +variables are overridden by the +packer, but are useful as arguments to +.CW cget +to retrieve the actual +width and height (inside the border) of a widget after packing. +.QE +.DS +.fi +.Tk -background color +(or +.Tk -bg color ) +.br +.Tk -borderwidth dist +(or +.Tk -bd dist ) +.br +.Tk -font font +.br +.Tk -foreground color +(or +.Tk -fg color ) +.br +.Tk -height dist +.br +.Tk -padx dist +.br +.Tk -pady dist +.br +.Tk -relief relief +.br +.Tk -state normal , +.Tk -state active , +or +.Tk -state disabled +.DE +.QS +Note: +.CW -state +is only relevant for some widgets (for example, +entry widgets). +.QE +.DS +.fi +.Tk -selectbackground color +.br +.Tk -selectborderwidth dist +.br +.Tk -selectcolor color +.DE +.QS +Note: +.CW -selectcolor +is the colour of the box in selection menu +items. +.QE +.DS +.fi +.Tk -selectforeground colour +.br +.Tk -width dist +.DE +In general, the manual page for each widget in section 9 of Volume 1 tells which of the +generic Tk options the widget accepts. +.LP +The +.I "dist" +parameters are lengths, expressed in the following form: +an optional minus sign, then one or more decimal digits (with possible embedded decimal point), then an optional units specifier. +The unit specifiers are the following: +.IP +.TS +lf(CW) lf(R)w(3i) . +c centimetres +m millimetres +i inches +p points +h height of widget's font (*) +w T{ +width of `\f(CW0\fP' character in widget's font (*) +T} +.TE +.LP +The ones marked (*) are specific to Limbo/Tk. +.LP +Tcl/Tk 4.0 widgets do not uniformly take +.CW "-width" +and +.CW "-height" +options; instead, each widget may take either or both, and the interpretation +of a number lacking a unit specifier varies from widget to widget. For example, in Tk 4.0 +.CW "-width 25" +means 25 characters to an entry widget, but 25 pixels to a canvas widget. In Limbo/Tk, all widgets may specify width and height, and bare numbers always mean screen pixels. +.LP +A +.I "colour" +parameter can be a colour name or an RGB value. +Only a few names are known: +.IP +.TS +lf(CW) lf(CW) lf(CW) lf(CW) lf(CW) . +aqua fuchsia maroon purple yellow +black gray navy red +blue green olive teal +darkblue lime orange white +.TE +.LP +For RGB values, either +.CW "#" \fIrgb\fP +or +.CW "#" \fIrrggbb\fP +can be used, where +.I r , +.I rr , +etc. +are hexadecimal values for the corresponding colour components. +.LP +A +.I "font" +parameter gives the full path name of an Inferno font file; for example, +.CW "/fonts/pelm/unicode.9.font" . +.LP +A +.I bitmap +parameter is not used by any of the generic options, but is worth mentioning here. +Unlike Tk 4.0, a +.I bitmap +in Limbo/Tk is not restricted to a 1-bit deep bitmap to be coloured with foreground and background. +Instead, it can be a full-colour image (`pixmap' in X11 terminology), +which is displayed as is. If +.I "bitmap" +begins with a +.CW @ ', ` +the remaining characters should be the path name of an Inferno image file. If +.I "bitmap" +begins with the character +.CW < ', ` +the remaining characters must be a decimal integer giving a file descriptor number of an open file from which the bitmap can be loaded. Otherwise, +.I bitmap +should be the name of a bitmap file in the directory +.CW "/icons/tk" . +.NE 1i +.SH +Options not supported in Limbo/Tk +.LP +The following options provided by Tk 4.0 are not supported by any Limbo/Tk widget: +.P1 +-cursor -insertofftime -wraplength +-disabledforeground -insertontime +-exportselection -insertwidth +-geometry -repeatdelay +-highlightbackground -repeatinterval +-highlightcolor -setgrid +-highlightthickness -takefocus +-insertbackground -textvariable +-insertborderwidth -troughcolor +.P2 +.NH 1 +Limbo/Tk commands +.LP +This section lists all the commands documented in the Tk 4.0 man pages, giving the differences between the behaviour specified in those man pages and the behaviour implemented in Limbo/Tk. +Some common Tcl commands are listed as well. +Bear in mind that some Tk 4.0 options are unsupported, as noted above. +.Tc "bell" "[\f(CW-displayof \fP\fIwindow\fP]" +Not implemented. +.Tc "bind" "\fIwidget\fP <\fIevent-event-...-event\fP> \fIcommand\fP" +.d0 +.Tc "bind" "\fIwidget\fP <\fIevent-event-...-event\fP> + \fIcommand\fP" +.d1 +The bind command is perhaps the command that differs most from Tk 4.0. +In general, only a subset of its functionality is implemented. One difference is that +.I widget +must be the name of an existing widget. +The notion of a widget class is completely absent in Limbo/Tk. +Event sequence specifications are also more restricted. A sequence is either a single character (rune), meaning a +.CW "KeyPress" +of that character, or a sequence of +.I "events" +in angle brackets. +.I "Events" +are separated by blanks or minus signs. +See +.I bind (9) +for a complete discussion. +.Tc "bindtags" "\fIwindow\fP [\fItaglist\fP]" +Not implemented. +.Tc button "\fIpathname\fP \*(Op" +As in Tk 4.0 (but note difference in units for +.CW "-height" +and +.CW "-width" ). +.Tc canvas "\fIpathname\fP \*(Op" +The Postscript subcommand is not implemented. +.Tc checkbutton "\fIpathname\fP \*(Op" +Unimplemented options: +.CW "-indicatoron" , +.CW "-offvalue" , +.CW "-onvalue" , +and +.CW "-selectimage" . +The +.CW flash +subcommand is not implemented. +.Tc clipboard \fIoperation\fP [\fIarg ...\fP]" +Not implemented. +.Tc "\fIpathname\fP configure [" "option ...\f5]\f1" +Configure options for widget +.I pathname . +Widget-specific; see the manual entry for the widget in +section 9 of Volume 1. +.Tc destroy "[\fIwindow ...\fP]" +As in Tk 4.0, but +note that +.CW "destroy ." ' ` +is rarely needed because top level windows are automatically +destroyed by the Inferno garbage collector immediately when the last reference vanishes. +.Tc entry "\fIpathname\fP \*(Op" +The +.CW scan +subcommand is not implemented. Some key bindings are not implemented when there is currently no way to type those keys to Inferno (for example, +.CW "Home" ). +Note difference in units for +.CW "-height" +and +.CW "-width" . +.Tc "event" \fIoperation\fP [\fIarg ...\fP]" +Not implemented: normally replaced by Tk +.CW send +or Limbo channel send operation within the application. +.Tc focus \fIwindow\fP +The focus model in Inferno is different. Only one widget has the keyboard focus at a given time. Limbo/Tk does not maintain a private keyboard focus for each toplevel tree and automatically move the focus there whenever the tree is entered. (Canvas and text widgets, however, do maintain a private keyboard focus.) +The Limbo/Tk +.CW "focus" +command moves the keyboard focus to the given +.I window . +By default, the first press of the primary button in an +.CW "entry" , +.CW "listbox" +or +.CW "text" +widget causes the focus to be moved to that widget. Just entering a menu widget gives it the focus. +The +.CW "-displayof" , +.CW "-force" +and +.CW "-lastfor" +options are not implemented. +.Tc frame "\fIpathname\fP \*(Op" +Unimplemented options: +.CW "class" , +.CW "colormap" , +and +.CW "visual" . +.Tc grab "\fIwindow\fP" +.d0 +.Tc grab "\fIoption\fP [\fIarg ...\fP]" +.d1 +Limbo/Tk implements only global grabs, so the +.CW "-global" +option is not recognised. The +.CW "grab current" +command is not implemented. The +.CW "grab" +command is not recognised as a synonym for +.CW "grab set" . +.Tc "grid" "\fIoperation\fP [\fIarg ...\fP]" +Not implemented. +.Tc "image create bitmap" "[\fIname\fP] [\fIoptions\fP]" +.d0 +.Tc image "\fIoption\fP [\fIarg arg ...\fP]" +.d1 +Only bitmap image types are implemented, but, as documented under +.CW "bitmap" , +Inferno `bitmaps' are not just 1-bit deep; +they encompass both bitmaps and `photo' (colour) images +as provided by Tk/4.0. +Limbo/Tk does not, however, recognise the wide variety of graphics formats that Tk 4.0 does. +Instead, only Inferno's own format is supported internally, and external programs +are provided to convert between that and other formats such as JPEG. +The file descriptor syntax for specifying bitmaps is useful when an external program writes the bitmap to a file descriptor. +If a maskfile is given, it may also have a depth greater than 1 bit; the meaning is that if a pixel of the mask is non-zero then the corresponding pixel of the image should be drawn. +(But see the handling of bitmaps used as stipples in +.I canvas (9).) +The +.CW -data +and +.CW -maskdata +options are not implemented. +.Tc label "\fIpathname\fP \*(Op" +Unimplemented options: +.CW "-justify" +and +.CW "-wraplength" . +Note difference in units for +.CW "-height" +and +.CW "-width" . +.Tc listbox "\fIpathname\fP \*(Op" +The +.CW "bbox" +and +.CW "scan" +subcommands are not implemented. Note difference in units for +.CW "-height" +and +.CW "-width" . +.Tc lower \fIwindow\fP +The +.CW "belowThis" +optional parameter is not recognised. +.Tc menu "\fIpathname\fP \*(Op" +Unimplemented options: +.CW "-postcommand" , +.CW "-tearoff" , +.CW "-tearoff" +command, and +.CW "-transient" . +In the +.CW add +subcommand, the +.CW "-accelerator" , +.CW "-indicatoron" , +and +.CW "-selectimage" +options are not implemented. In the +.CW "index" +subcommand, the +.CW "last" +and +.CW "pattern" +index forms are not implemented. The +.CW "configure" +and +.CW "entrycget" +subcommands are not implemented. +.Tc menubutton "\fIpathname\fP \*(Op" +Unimplemented options: +.CW "-indicatoron" , +.CW "-justify" , +and +.CW "-wraplength" . +.Tc "message" "\fIpathname\fP \*(Op" +Not implemented (subsumed by +.CW "label" ). +.Tc "option" "\fIoperation\fP [\fIarg ...\fP]" +Not implemented. There is no option database. +.Tc pack "\fIoption arg ...\fP" +.d0 +.Tc pack "\fIslave\fP ...\*(Op" +.Tc "pack configure" "\fIslave\fP ... \*(Op" +.Tc "pack forget" "\fIslave\fP ..." +.Tc "pack propagate" "\fImaster\fP [0 | 1]" +.Tc "pack slaves" "\fImaster\fP" +.d1 +The +.CW "info" +subcommand is not implemented. +.Tc place "\fIoperation\fP [\fIarg ...\fP]" +Not implemented. +.Tc radiobutton "\fIpathname\fP \*(Op" +Unimplemented options: +.CW "-indicatoron" , +.CW "-justify" , +.CW "-selectimage" , +and +.CW -wraplength . +The +.CW "flash" +subcommand is not implemented. +.Tc raise \fIwindow\fP +The +.CW "aboveThis" +optional parameter is not recognised. +.Tc scale "\fIpathname\fP \*(Op" +Unimplemented options: +.CW "-digits " +and +.CW "-variable" . +.Tc scrollbar "\fIpathname\fP \*(Op" +The old syntax of +.CW "set" +and +.CW "get" +is not supported. +.Tc "selection" +Not implemented. +.Tc send "\fIchanname string\fP" +Rather than sending data to a different application, the +.CW "send" +command sends a given +.I string +down the Limbo channel associated with +.I channame , +as set by +.CW namechan . +.Tc text "\fIpathname\fP \*(Op" +The +.CW "dump" +subcommand is not implemented. The +.CW "-regexp" +mode of the +.CW "search" +subcommand is not implemented. +.Tc tk "\fIoperation\fP [\fIarg ...\fP]" +Not implemented. +.Tc "tkerror" +Not implemented. +.Tc "tkwait" "\fIoperation name\fP" +Not implemented. +.Tc "toplevel" "\fIpathname\fP [\fIoption value\fP...]" +There is no +.CW "toplevel" +Tk command implemented by the +.CW "cmd" +function; instead, the Tk module entry point +.CW "toplevel" +is used to make toplevel widgets (windows) +as described above. +.Tc update +In Tcl/Tk, +.CW update +is a Tcl command that invokes the `event handler loop'. +In Limbo/Tk, +it flushes any pending updates to the screen. +The optional +.CW "idletasks" +argument is not recognised. +.Tc "winfo" "\fIoperation\fP [\fIarg ...\fP]" +Not implemented. Much of the information that +.CW "winfo" +would return can be got by applying +.CW "cget" +to each widget. +.Tc "wm" "\fIoperation window\fP [\fIarg ...\fP]" +Not implemented. +.NH 2 +References +.IP 1. +John K Ousterhout, +.I "Tcl and the Tk Toolkit" , +Addison-Wesley Publishing Company, Reading, Massachusetts, 1994. +.IP 2. +Paul Raines and Jeff Trantor, +.I "Tcl/Tk in a Nutshell" , +O'Reilly, Sebastopol, California, 1999. +.IP 3. +B W Kernighan, +``Descent into Limbo'', +elsewhere in this volume. +.IP 4. +See +.I draw-intro (2), +.I tk (2) +and +.I wmlib (2) +in +.I "The Inferno Programmer's Manual", +Volume 1. diff --git a/doc/limbotk/tk.pdf b/doc/limbotk/tk.pdf new file mode 100644 index 00000000..fc6b4831 --- /dev/null +++ b/doc/limbotk/tk.pdf @@ -0,0 +1,35503 @@ +%!PS-Adobe-3.0 +%%Pages: (atend) +%%BoundingBox: 0 0 505 751 +%%HiResBoundingBox: 0.000000 0.000000 504.100000 750.900000 +%......................................... +%%Creator: AFPL Ghostscript 704 (pswrite) +%%CreationDate: 2004/08/30 16:08:44 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%EndComments +%%BeginProlog +% This copyright applies to everything between here and the %%EndProlog: +% Copyright (C) 2001 artofcode LLC, Benicia, CA. All rights reserved. +%%BeginResource: procset GS_pswrite_2_0_1001 +/GS_pswrite_2_0_1001 80 dict dup begin +/PageSize 2 array def/setpagesize{ PageSize aload pop 3 index eq exch +4 index eq and{ pop pop pop}{ PageSize dup 1 +5 -1 roll put 0 4 -1 roll put dup where{ exch get exec} +{ pop/setpagedevice where +{ pop 1 dict dup /PageSize PageSize put setpagedevice} +{ /setpage where{ pop PageSize aload pop pageparams 3 {exch pop} repeat +setpage}if}ifelse}ifelse}ifelse} bind def +/!{bind def}bind def/#{load def}!/N/counttomark # +/rG{3{3 -1 roll 255 div}repeat setrgbcolor}!/G{255 div setgray}!/K{0 G}! +/r6{dup 3 -1 roll rG}!/r5{dup 3 1 roll rG}!/r3{dup rG}! +/w/setlinewidth #/J/setlinecap # +/j/setlinejoin #/M/setmiterlimit #/d/setdash #/i/setflat # +/m/moveto #/l/lineto #/c/rcurveto # +/p{N 2 idiv{N -2 roll rlineto}repeat}! +/P{N 0 gt{N -2 roll moveto p}if}! +/h{p closepath}!/H{P closepath}! +/lx{0 rlineto}!/ly{0 exch rlineto}!/v{0 0 6 2 roll c}!/y{2 copy c}! +/re{4 -2 roll m exch dup lx exch ly neg lx h}! +/^{3 index neg 3 index neg}! +/f{P fill}!/f*{P eofill}!/s{H stroke}!/S{P stroke}! +/q/gsave #/Q/grestore #/rf{re fill}! +/Y{P clip newpath}!/Y*{P eoclip newpath}!/rY{re Y}! +/|={pop exch 4 1 roll 3 array astore cvx exch 1 index def exec}! +/|{exch string readstring |=}! +/+{dup type/nametype eq{2 index 7 add -3 bitshift 2 index mul}if}! +/@/currentfile #/${+ @ |}! +/B{{2 copy string{readstring pop}aload pop 4 array astore cvx +3 1 roll}repeat pop pop true}! +/Ix{[1 0 0 1 11 -2 roll exch neg exch neg]exch}! +/,{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}! +/Ic{exch Ix false 3 colorimage}! +/F{/Columns counttomark 3 add -2 roll/Rows exch/K -1/BlackIs1 true>> +/CCITTFaxDecode filter}!/FX{<</EndOfBlock false F}! +/X{/ASCII85Decode filter}!/@X{@ X}!/&2{2 index 2 index}! +/@F{@ &2<<F}!/@C{@X &2 FX}! +/$X{+ @X |}!/&4{4 index 4 index}!/$F{+ @ &4<<F |}!/$C{+ @X &4 FX |}! +/IC{3 1 roll 10 dict begin 1{/ImageType/Interpolate/Decode/DataSource +/ImageMatrix/BitsPerComponent/Height/Width}{exch def}forall +currentdict end image}! +end readonly def +%%EndResource +/pagesave null def +%%EndProlog +%%Page: 1 1 +%%BeginPageSetup +GS_pswrite_2_0_1001 begin +612 792 /letter setpagesize +/pagesave save store 100 dict begin +0.1 0.1 scale +%%EndPageSetup +gsave mark +K +0 0 0 0 rf +Q q +0 0 6120 7920 re +Y +2146 6580 94 83 /6F +$C +4;h]qCB+)h0L\>a(dWb]$N9;@s4^3F.t=V&rft7Kf6u)fX6T^c7\dQ+qVQGO?%#rR>OK5-YH@Ol +p=ImmV>G&ngA:c*pXch?Ir"?GpXSs(5Q~> +, +K +2239 6580 73 56 /1R +$C +4:O]/;?,_YZ9X?W-s")is8W-!s8W-!s8W-!s8W-!s8Vckrk%li)W?:b*:P@$K3s)Z%h@+S%b-FC +(f5Ai*#L(~> +, +2351 6578 89 86 /6M +$C +,(N(4L1HJW83l*cKH1:'Jq>!E,6L(1%FP^4:"!p@DO&bc4XTK@HJY7&VtXP*DtWdQn,!(7s8W-! +s8Vu"?f1bZI=C)%rO)<JBj\<8>BOd7XgG4,D(?#@$oG%&+KU-D:rFbs(f4V5_+9q1P+[m~> +, +2443 6580 68 55 /1X +$C ++CT\B?2F!$o_h#<K'rY1^\6o@ks,&e^N?+*H<8sin%C7?9)mYBpT<b`pT;t+^h>,#lG*;~> +, +2517 6578 50 59 /6Q +$C +-,Cq4f`VcrE.ahL::*9t3$<*j%nJR23j,krInThAa>VI4?6K90^l/6ls4Y6<qeLN3gSep7@>0Fc +e1dSs$5cTM-"$~> +, +2569 6580 50 57 /2B +$C +4q3#;+>uRofDkmNs8W-!s8W-!pTpUJ%r6n9+/0.(X3ZBQn,E&tl51"#"`SYj%Lj'0\,~> +, +2616 6580 1X , +2683 6580 39 85 /6U +$C +4q1k\_aT9-J,fQKs8W-!s8W-!s8Vba"X!WeTnsU%64OMJr^ISEl-lQps8TLo>."be~> +, +2731 6578 6Q , +2783 6580 101 56 /2F +$C +,f1.tSTf5QmcqF\qkh-aeUOt+9l_'mIcM:eh(H1n[=6q;Fai.mqsC3Ps0e3YhQ=!X]ir0sl[AIW +f(EeXpMX'^s%W7\?$?,<X/>.,"'$7j7dJ[@3_`DG7Dsff^]~> +, +2922 6578 57 59 /6Y +$C +-,Cq4f`VcrF;uFeJKF"th#uO\qpKCa?VT/HY-7<oYH.^'s8W-!FmK(:s.t4rf(Em.>?bfG$!:Ud +'auTh_Li"8!?_~> +, +2981 6580 49 86 /2J +$C +4rU'hcl9k+X8i5"s8W-!s8W-!s8W#@IO#gR]KA?eHQe@b+92B@rVsXGmG&7R_@/=;NSWAO\8^@~> +, +3066 6580 64 82 /7C +$C +2?eTJhB1DT$2FZVqu-QpJ,fG)#64`'s8W-!s8W-!s8W-!s8W-!rh#\h\MXh's*t~> +, +3131 6580 6U , +3171 6580 106 56 /2N +$C +3"759UnAEOs5a9Sl5CoR^sHg2VQ9ass8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s4)Veri<F)g04lc +#(m:M3P[7;#,:&+h>9ocmg!M`3X-L;;h\qb"u*n&-ob`c5Yq~> +, +3278 6578 70 88 /7G +$C ++CQNTS/B-L4bOk"mgj[FrZ2=a[,.0rDb]K2ID>LSs5/<Us1eU5s8QI+fCeHFf5%at_Vp0R(`[t, +f7)=eYdeJQ\7'>a\GuU/s8W,N_TdXmr#Tqg8oV"Z49~> +, +3359 6578 6Y , +3418 6578 39 88 /2R +$C +/f3DoqtK"As1\I+rP.g9IJ`L1J)>_PrnmJ-^Ak\@^[Jpcs)7f'hgaD[htQ!c~> +, +3454 6580 81 82 /7K +$C +.K`oTC.*\cX'bo,s8W-!s8W-!s8W-!s8W-!s8;c88&+nCs8W-!s8REF`..W5J,~> +, +3534 6580 75 86 /2V +$C +4:OcQfrhoL"(Wfg+KZct?$]d0>qVI:V:+\Xp!W)H\m6qT9-1L&_!AD^m<@skqgH39Dn"Kf52U:_ +qgF7Sm"UGU^OH*1s8W-!s8Vbnn/),BcCp(3((V\G~> +, +2372 6364 53 69 /0C +$C +0FXQE0\`lF?O/l7^&@p0n(W?i+79+,p](!Fs5/>+Du]dNs7ZKmmf&g=iK\l~> +, +2428 6363 52 49 /3C +$C +1br@`BKS-G%hA=EGEH=>3tI)8h[Su?iSCr[g\ZJ=]>!%6hs^",gV2SF[RVtk[ep*<msfia]C5cF +`SEHL&)i8HA%V7/pibWkEiso~> +, +2483 6363 40 49 /0G +$C +-j^/!+R.k4$gs*1oGc8$K7#W86i[2dJ+rF1^O>"&otU4tpA99M[]mT"f\tene/0S~> +, +2524 6363 39 49 /3G +$C +-P?\G#>U(]%gY*b0_fOIDm8jU^E<LMqtJ03&f;3)_%rpQ*sNeq4(3osICltsmsBE;hfdlODf&U$ +@ARIgTr9Z<~> +, +2563 6363 52 49 /0K +$C +4d;!Q$pDM^GDGXrjB)oa)r;P$pC7*#qqp<0\,6("HggF>&a',eqec;?s7ZHL[dNOtDjss[*O,M0 +gb@96f\#/epNUZOG]<0!2#~> +, +2618 6363 32 65 /3K +$C +1HH$WHc+]/\(H'eG5-OaIJ<cUs7cEis*rqpq7t.c*ZGNGG:3q!huEH>p]%^IG^'~> +, +2677 6364 64 69 /0Q +$C +,R.TQL^Rttqg\Wos8B_4pAb0Is8T_2rpTma^Rh`;hr"D2mskB:s51:[OIA`Ai]k3~> +, +2738 6363 3G , +2777 6363 0G , +2817 6363 48 74 /3Q +$C +09hbl>TVA,5COXAaL:g$L\BU9fR*)%mr/6_pAa#sg])`WYXF!8pAMGWIdR.5[sbaQpL4$8D;Pad +Z1kbV^CS6OeZo/QhuC=g^\qf]O!k."KnI5"~> +, +2867 6363 0K , +2923 6363 42 49 /0U +$C +-k[(P#>U(N%ZkTp\lYd+Id')2hu3<Ds7ZKihZ!QRmf.e*IJ_p0HFM^IV/9XqQ&:<iW%_$~> +, +2967 6363 26 74 /3U +$C +4QnmjiU7:$_r8<HGAE95s7ZKehtR$Is*rpUqsXQ5s6]jcn,M;>qlJ-\n8,!:*&m~> +, +2995 6363 0U , +3032 6336 59 76 /0Y +$C +.DjA]Se*q+-la@!U7d,L:!sL9lJA/jrVs"uY?P^`[["5%X>U]qcqqVP(bh0kW%bWZ>1Kfkp?ulc +"G-kEd0[Y96+T@;VY&\_^9>$GJ+)h*s1\O#pI#f=qeL*(6sPH`;LmS\L7s;*$3~> +, +3090 6363 27 72 /3Y +$C +1T2<V4lPiRgUL\cpjJ/%h>ata\,Wr9p\jjaid<iF$oP<-GDEgn2';iEpd*Bdn$m*~> +, +3117 6363 3G , +3156 6363 36 49 /1C +$C +1D4L?KH;1$9KN@diA[Y2ID9uEhuE+/X_T6!k>9J-TkGn_K#hFi6B$NJfApN?s0pmoS[Go7(g(:V +(aq(7~> +, +3220 6364 36 69 /4C +$C +/d=P/"STRus7ZKmg].:ls8B_4pAb0Is8R$;rP/C0s5D*#`o$~> +, +3253 6363 0K , +3309 6363 0G , +3350 6363 17 12 /1G +$C +1HH&qqtJgP~> +, +2196 6244 65 69 /4G +$C +/d;Z5Hh=1d:b,Of]l^hdrg0e$.s9I?l`Wq:Fm45<d^NM.?Fod2f3Xg?+b4FGneb+2nAFY_h7!30 +qg\"f^Ams-g].8fg0_Er/MNJVq+1UpKn=g~> +, +2263 6243 3G , +2302 6243 49 49 /1K +$C +2%'[N%\3idSEM*PS)LqQp@\.VID>LSpV$=q^?tsV\,GcDhY4b_^Y+U\gYMb7hmV(DblQhPmqb2A +]2h^#:]~> +, +2352 6243 3Y , +2379 6243 1C , +2418 6243 3G , +2457 6243 49 74 /4K +$C +3+QNlE;"q%\p(Z2D^*hS3-oKO4s+^PLZ,rDDEYW!rVpfjme=0iA9./6^A!'SrSQAernG3bDgUAj +hflPQf#%Zr_qTs!,"=f+s51Tgp]#]J2@Jl/JeFbC_gh~> +, +2524 6224 45 89 /1O +$C +4BObh$Ji=;rP,u5n)*U6mJm4[s8VNes6]jdh>dNCs8VhCs5!_Tmf3=%:.>FhJ,~> +, +2565 6243 3C , +2621 6243 0K , +2677 6243 3G , +2741 6244 45 70 /4O +$C +/e,Ph[sKGtEOTiBmG#*fh7MFt]6<Srh7Ime]6h#*GMU#Pmf.b5r6t+Qe\9J@m;+JB(g@`U<hZI# +6%XU~> +, +2791 6243 49 71 /1S +$C +22$Pd$.0R,TS%?UUu%TAHFgl*h(Q8:h1'kQn,<4bs4`&'msjf@s1e$kh>d3KpAamUHMtVPd_ENh +D0K&cBio(:$mf?s2$OB~> +, +2841 6243 1S , +2891 6243 1S , +2966 6243 44 74 /4S +$C +-l*@R6-s^?pio*<2r!`a^>HQ3rnd+Wn%ZR7^YdlArpKdbqu,Bf&at2;g\1AMqgG^#@BRYYCd/HJ +>T2X@s7_$;n,E?gpb00C,h+@d%f~> +, +3012 6217 50 75 /1W +$C +3&j1e3dDA@TS%P"l+_F[mDHCShXA3tg\\__L>/WQIdW]oh<jbb^V0@?g\1*Fh;>^8n&O,%pqH_* +p]#1/Hf+_tn,In+mU*]#_[gY&?5WS6DBHV&#/cW9~> +, +3095 6243 68 70 /4W +$C +.F+RChYuiRMECiV?Z*@1\,P9u4^7[<hgXFbYOB5Ehg]a?\*q)GrolB!hf&J-ot<<`hg^'cqJX-` +IHu;BC!!:j-,I@k~> +, +3159 6243 3Y , +3187 6243 3K , +3220 6243 42 49 /2A +$C +2\D;ZK>WI>pNUZOGoaF9^>@ac@H"[)GK71@^Y@SZ^$WSDq]hB`lsB\cqg[AXmI.gHh>d3+h7iis +h:pnp5diannAo!b(a/;~> +, +3290 6243 81 70 /5A +$C +.jZEmIqsL\7,b>Q>Q'!Ck_MG"m4\K3qY.1hqu2rZl$#etm4\K3m_>s$qu2l<qHlnQoUkl"^6ek6 +Is\#AqHlnQoUc$R^6ek6GMa-]s0):1^:6f#SBM6_5i6n'~> +, +3367 6243 3C , +3423 6243 0U , +3467 6243 1K , +3517 6243 2A , +720 5930 79 71 /2E +$C +,,$7f'L<:D#RDCmi<Mb-H_LpJ*$BlU&8m\RK6hF#dVlfLmF(lSp%I_;p\sjYqu?]rs8Vh#l[S?: +^MSJcgA8D8Xeg0KQ*dZi@ARCcX>#kn$Igc&_Li"96)"~> +, +803 5932 55 46 /5E +$C ++N308lb?6ErglC\e\-CBqJO$>h0h4h:&_W"YGV>(e(40jlhdkb*0(n+@AEk<~> +, +859 5930 46 49 /2I +$C ++U++g6m1FjKH4dS%@Npn#4R8n%;9Hkde`s0run4!%=!O$"j!oDs6oj9f)MddD(?#G0i6DS%7:I2 +M4a~> +, +909 5932 39 47 /5I +$C +0H$MYTKVuJs8W-!s8W-!pTf^+(gLC'+S,W)pYU$GG9Me#iPF:~> +, +948 5932 5E , +1003 5932 30 71 /2M +$C +0H#A(KA-A*s8W-!s8W-!s8?^e)F*gYGmktL:jE#]AO4eC?2sl,C=Fr1~> +, +1037 5930 2I , +1087 5932 82 47 /5M +$C +,6]M"h=[]<s0\utlW`*CC"M)"&:B+jl!8dG[nZ0pY@"\U^Zt+Lg:ut@XjZJ3Is^h[TCmWh[H[/3 +p?M[YK\^0XbG#hehs6@imtg$u2Z~> +, +719 5754 60 69 /2T +$C +1BfGjiK1'#,=ctPrr<#qs8MRA)uos<s8W-!s8W-!s8W-!s8T[WEraVc~> +, +780 5754 28 69 /5T +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +809 5754 88 47 /2X +$C +0Eoc'K:jmrq)D8+/;`aO>(?SPs8W-!s8W-!s8W-!s8W-!s8W-!ri?'Cm5<d*9l_ZL&>Ouf@AMUU +!4rFJ@)DUq/%!gM.m^-W@A]^a-57F:+CLi~> +, +897 5753 51 73 /5X +$C +5EglT+SH@k^#U$'FpL$[_nllJqgH5-rV-'chuE_+s8Vrqrg*Md?)<,t[I'gC0OD_A]3VSk$n_r) ++92B@s8W+%2$O#4bf,_b~> +, +953 5752 52 49 /3B +$C +-,RJ#Jd4TY+S0[\0^1M^2l>gu<qXnToWS5,FoUmEs8W%)rjpk_Fh_cG[d)RJ9#F9R9#61SMQibj +PlW!~> +, +1015 5742 45 85 /6B +$C +/mdGEmJh+ZpA_VhqgRGrrP*:*rnk3Ps)6ZcrP.asIc%X5^Mhm+hm`"MJ(s\q^Mj!W~> +, +1068 5754 60 69 /3F +$C +226&?X:j(Vs8W-!s8W-!s8W-!s8W-!s3*SAs8Vcls8W)e]ja4A~> +, +1129 5753 56 73 /6F +$C ++LJp$5kmV@ADpOa$L)XK9;U)$FLka1QV41'l#aLB/sf3GX^kL=qgH2riP+2XpA99P(k'-9mIh'p +IJ`R7s8W-!s8K>)a7J5P5dOC>~> +, +1217 5754 5T , +1246 5752 40 49 /3J +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +1321 5753 48 48 /6J +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +1404 5752 42 49 /3N +$C +-,RJ0,D$.,dtC(&BFm314U.0';Uopg0D5AFqu:T"GOO;dD/K!tg22NP(b6GB_Li1('E~> +, +1448 5752 3B , +1503 5754 58 47 /6N +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qcY0ReuU^)_0-YK@^p/t4&U'%SJqnU0Mh~> +, +1561 5752 3N , +1606 5754 5T , +1635 5752 3J , +1677 5752 46 49 /3R +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +1757 5753 6J , +1807 5754 6N , +1865 5753 59 74 /6R +$C +,6PadBFG%9o].Bt<'f[3Jd*;_2s<!EI=:?D^Ak&0qZ$Tqs8DutIK/3^Iqs28[alB*$o"p%K#8Q` +"?mZ-1+_tqs8W-!s8?J%(]Hk@a^F0ZLO]~> +, +1959 5726 56 75 /3V +$C +/d=P.LUCpts8W-!s8W*W++t[YiU7o"_nlWIR!K5#0_F9"If'$2n,<4bs7cQnYPu4PGO6ub73.&n +$mep_/@[=OG.U\h_[93uT^3@4(ao~> +, +2019 5752 3B , +2074 5753 82 48 /6V +$C +--V`>h0uuM[/YPgrB9d@+!SJRhOje2e\;&ZVUk)5[%C.MH@FT)^[7iQJ+m9?>HRpIY?pm>YNtG4 +lW<i0='tEF]"Q[tSt*;=F&6Q9h].OYhu~> +, +2157 5752 3R , +2205 5754 38 47 /3Z +$C +0H#A^_V2d)s8W-!s8W-!hqnUF[?3rg<K18!0`S\NG9dORiPEE.~> +, +2244 5754 35 73 /6Z +$C +0Esb+"P*PPs8W-!s8W-!s8V6a07FEB%#Z/ks8W,Vqtkj:[L0nZ`p\\%_LM~> +, +2278 5753 59 48 /4D +$C +,6G^d:()^rSt(K"WZ[OKKH'R@829B/hbX7Os8W-!s8W-!s8W-!s8K(pJ6^S3s7>3jJF\7`JS/"W +3,n?~> +, +2338 5754 28 72 /7D +$C +0EsY0/Z\pOs8W-!s8W-!s8W-!s8W-!s8W-!lS&`s4p`JB2)k~> +, +2400 5753 6V , +2483 5753 6J , +2533 5726 55 74 /4H +$C +3%Y6hmI,4)4=>r&qn9amhgXIsrOVILFl0+]j?`gAhs!)u2d]ipr?hQFX8\<4pIY>3Is(D_lMA*j +\l\aa"r!=,"Tb7n~> +, +2622 5753 33 63 /7H +$C +22MSu?.7U@]^UPYFoVLAs8W-!s8W,u?o*0m2B4J$*'aK's6osmLPLB~> +, +2655 5752 3B , +2743 5752 3N , +2787 5752 3B , +2842 5754 6N , +2900 5752 3J , +2943 5753 7H , +2975 5754 3Z , +3015 5753 4D , +3075 5752 3N , +3119 5753 7H , +3185 5725 55 76 /4M +$C ++p6(UU(D9p_BI4g&2<;jh&tN#o\CkkFnFSgJ,d.Xs(u]/=CJ9h&r&_O@t^O*>/J*d6!EuahV:&- +aAQDs_@@-!5s.7@DNJb"HG82g\$+]hs53/>Bn"bZS_ZAA[]D/Z`.uhrTnOs!J,~> +, +3241 5754 3Z , +3280 5753 6J , +3330 5726 3V , +3390 5754 58 72 /7M +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qco"??GfF?_0Zp7?*;dfE5?Pos8W-!s7M]^ +s+AH!#Cl~> +, +3448 5754 5T , +3477 5752 3N , +3522 5753 6J , +3572 5754 7D , +3634 5753 4D , +3694 5752 3J , +3737 5752 3R , +3785 5754 3Z , +3857 5754 5T , +3886 5754 6N , +3944 5753 7H , +3977 5752 3R , +4025 5754 3Z , +4064 5754 6Z , +4098 5753 6J , +4148 5752 3N , +4192 5752 3R , +4240 5752 3J , +4315 5753 6V , +4398 5754 5T , +4427 5753 7H , +4460 5754 7M , +4518 5752 3B , +4573 5753 4D , +4633 5753 7H , +4699 5753 6R , +4760 5754 5T , +4789 5754 3Z , +4829 5752 3R , +4877 5752 3N , +4921 5753 7H , +4954 5754 7D , +4983 5726 4H , +719 5633 4D , +779 5632 3J , +822 5634 5T , +851 5634 6N , +909 5605 4M , +990 5633 7H , +1023 5634 7M , +1081 5632 3R , +1155 5634 76 69 /4Q +$C +4rTguUl69IG!RVg_C>RG2fQ\%nDA/ng[4b&qsX!g^Ae/es8Du4s6p!fs8W,k^]4>1s':%ql$D[D +l#;sqE.Y&i$gac#&;2K_363NOOB!t~> +, +1232 5634 3Z , +1272 5633 6J , +1322 5633 6V , +1431 5634 2X , +1519 5632 3B , +1574 5633 6R , +1635 5633 4D , +1695 5634 7D , +1724 5632 3R , +1798 5606 3V , +1858 5634 3Z , +1898 5634 5T , +1927 5634 2X , +2015 5634 5T , +2044 5633 7H , +2077 5634 5T , +2106 5633 55 47 /0B +$C +.aN80rp/h061h@qkr8H5rjSg"8c@(ef(At+5J$]0oUGf-2d]Y_\*g;!Eo<U`1]Mt~> +, +2162 5632 3R , +2210 5632 3J , +2261 5633 11 12 /4U +$X +*rnNUJ&)*Bs5<q8s5<q8s5<pmJ&!-+~> +, +2329 5632 51 73 /0F +$C +3eBr>]F[%gd07f:#T.^j2hW.!H>cOTn(ZCm^V@hHl`-t<Tk"Qfa?[n4i6aRf>U9\C$@u_DF[QV( +6o1X#^sjhA>1_C+gk"A^mf2\K?1uk'fO6iM/21^fM\)S6K*<aDJ,~> +, +2382 5633 7H , +2414 5633 6J , +2464 5634 6N , +2522 5633 6R , +2583 5633 6J , +2633 5634 3Z , +2673 5633 6R , +2759 5634 5T , +2788 5634 6N , +2846 5633 7H , +2879 5632 3R , +2927 5634 3Z , +2966 5634 6Z , +3000 5633 6J , +3050 5632 3N , +3094 5632 3R , +3142 5632 3J , +3209 5632 3N , +3254 5633 6J , +3304 5634 6N , +3387 5606 57 75 /5A +$C +,=.UUTKS!Ys8W-!s8W,i0IHuF$1o<*o_K^&&"nOq"<UE2o^ndPs%EClYQ+Y&qu?]`s1eG\mIpGH +fNSeECb:8CL,`^#>Hgm-#[d~> +, +3443 5633 4D , +3503 5634 5T , +3532 5632 3N , +3577 5633 6F , +3632 5634 7D , +3661 5606 4H , +3742 5633 5X , +3797 5632 3R , +3870 5632 3N , +3915 5634 3Z , +3954 5632 3R , +4002 5633 6J , +4052 5633 7H , +4085 5632 3R , +4132 5633 6R , +4219 5634 6Z , +4252 5634 3Z , +4291 5632 3B , +4346 5634 2X , +4459 5632 3N , +4504 5632 3B , +4558 5634 7D , +4587 5634 7D , +4616 5632 3R , +4664 5632 3N , +4709 5633 7H , +4741 5634 5T , +4770 5632 3B , +4825 5634 6N , +4883 5632 3J , +4951 5632 3B , +5005 5634 6Z , +719 5514 2X , +807 5512 3R , +855 5514 6N , +913 5513 4D , +974 5512 3J , +1016 5499 23 27 /0L +$C +0k&hmpMY93^MeSYh7p_lq5@]N~> +, +1072 5513 5X , +1127 5513 4D , +1188 5513 7H , +1220 5513 7H , +1253 5512 3B , +1307 5514 6N , +1366 5512 3J , +1408 5499 0L , +1465 5513 6J , +1515 5514 6N , +1573 5513 6R , +1666 5512 3B , +1721 5513 7H , +1753 5514 7M , +1811 5512 3R , +1859 5514 3Z , +1932 5513 6V , +2015 5514 5T , +2044 5513 6R , +2106 5485 4M , +2161 5512 3R , +2209 5513 7H , +2242 5512 3J , +2316 5513 7H , +2349 5514 7M , +2407 5513 6J , +2457 5513 7H , +2522 5513 6J , +2572 5514 3Z , +2612 5512 3R , +2692 5486 3V , +2752 5513 6J , +2802 5514 3Z , +2842 5513 7H , +2907 5512 3B , +2962 5514 6Z , +3028 5514 2T , +3089 5514 5T , +3118 5514 2X , +3206 5513 5X , +3262 5512 3B , +3324 5502 6B , +3377 5514 3F , +3438 5513 6F , +3494 5559 24 26 /5E +$C +4`80npM\gBpUfn^qtp@3,7GK@~> +, +3522 5512 3J , +3597 5513 0B , +3654 5514 5T , +3683 5512 3J , +3725 5513 4D , +3785 5513 6J , +3835 5514 7D , +3897 5513 7H , +3930 5512 3B , +3984 5512 3B , +4039 5514 7D , +4068 5513 6F , +4123 5514 5T , +4153 5513 7H , +4193 5513 4U , +4270 5514 33 69 /0P +$C +0H%XJ!UM?&s8W-!s8W-!s8W-!s8W-!s8W-!s)k!s!MdF~> +, +4304 5513 7H , +4370 5514 5T , +4399 5512 3J , +4474 5514 2X , +4562 5512 3B , +4617 5513 6R , +4678 5512 3R , +4726 5514 7D , +4755 5514 7D , +4784 5512 3R , +4832 5513 6R , +4926 5512 3B , +4981 5514 6N , +719 5392 78 73 /5I +$C +,@H[r)o3*1<Y05+0Q?6.V[a8(LHu..-Kt^T-L!H]kr22IF`1>_e^_?U^A@/FfA$7RlMpnas8Uo) +YM8pQosObaCO3S[Xeg0KQI<4+2O1YN0U7A(:r.`[a?P@e6A#FG6+Ja%,Q~> +, +798 5393 4D , +858 5392 3J , +900 5393 7H , +933 5392 3R , +981 5394 3Z , +1020 5394 7M , +1078 5392 3B , +1133 5393 4D , +1193 5393 7H , +1226 5439 5E , +1254 5392 3J , +1350 5394 3F , +1411 5393 6F , +1520 5394 48 69 /0T +$C +21n\f@.;aLJ,fQKjhY/&h3M<(5D*m`rnmU$^\7]^mJjZphf&J-rqh34p\3GBDnj$Dq]5Y(]D+KN~> +, +1578 5393 4U , +1595 5392 47 71 /5M +$C ++p(%4KH3$?0=h9*Uu%T:h0h4h:&_W*^Uj:An%\m0?iC$)s8W-!s82i"otU8$qka8c?WR/k^SPda +V/7^e'!Y9_0VH6I~> +, +1706 5376 22 91 /0X +$C +,DOO+ItH5Ds8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!hku6kfPBm~> +, +1731 5394 43 69 /5Q +$C +-jHk!!TAb"J,fQKs8W-!s8W-!s8W-!s8U<pLX:JlKAhU%NZJ]A#D\(iJ,~> +, +1781 5379 0L , +1806 5394 48 69 /1B +$C +0FGP^n$52ZaH1;q]6<Sr]t8ITgUFe<mG#+^GIP22]tO;mGPhA[s8B.im<rhtm49s$@$QdRX[?,' +(f4`k^]~> +, +1856 5376 26 91 /5U +$C +3#auA%M%t-s4@;Ns8W-!s8W-!s8W-!s8W-!s8W,Vs8K#4i,&,~> +, +1890 5379 0L , +1967 5392 3N , +2011 5392 3B , +2066 5394 2X , +2154 5394 2X , +2243 5392 3B , +2297 5394 6N , +2355 5394 7D , +2384 5366 4H , +2493 5393 6R , +2554 5392 3R , +2602 5366 3V , +2662 5394 7D , +2691 5392 3B , +2746 5366 4H , +2801 5392 3R , +2849 5393 6R , +2964 5393 6V , +3047 5394 5T , +3076 5393 7H , +3109 5394 7M , +3220 5393 7H , +3253 5394 7M , +3311 5392 3R , +3412 5392 3J , +3454 5392 3N , +3499 5394 3Z , +3538 5394 5T , +3567 5366 3V , +3627 5393 7H , +3660 5394 5T , +3689 5394 6N , +3747 5365 4M , +3856 5394 7D , +3885 5393 6J , +3935 5394 6N , +3993 5365 4M , +4049 5393 4D , +4109 5393 6J , +4159 5365 4M , +4215 5392 3R , +4316 5394 3F , +4377 5392 3N , +4422 5394 7D , +4502 5393 6J , +4552 5392 3J , +4646 5439 24 26 /1F +$C +4RdSWJ)B.-pUBV'g\1)S_dTJ~> +, +4674 5394 3F , +4735 5392 3N , +4779 5394 7D , +4817 5382 6B , +4869 5394 3F , +4930 5393 6F , +4986 5439 5E , +5022 5393 4U , +719 5274 77 70 /5Y +$C +/d_ribJ29<O`89m(g$03D:`"Cqka1(IsocD[(gLij0e8bea:smqb-YKXh*hJBn"l\\+Hlk/,QKX +rg!GYIs#nSX6TPreb+?8~> +, +797 5274 7D , +826 5273 7H , +858 5274 7M , +917 5272 3B , +971 5273 4D , +1032 5245 4M , +1087 5274 7M , +1173 5274 5T , +1202 5274 6N , +1260 5272 3J , +1303 5246 3V , +1363 5274 5T , +1392 5274 3Z , +1431 5272 3R , +1479 5273 6R , +1567 5273 5X , +1622 5246 4H , +1705 5274 3F , +1766 5273 6F , +1849 5274 0T , +1907 5273 4U , +1924 5272 5M , +1974 5259 0L , +2026 5274 0P , +2060 5274 6N , +2118 5274 6Z , +2151 5272 3R , +2199 5274 3Z , +2239 5274 6N , +2297 5272 3B , +2351 5319 5E , +2379 5272 3J , +2449 5274 3F , +2510 5273 6F , +2593 5274 5T , +2622 5274 2X , +2710 5246 3V , +2770 5274 7D , +2800 5272 3R , +2847 5274 2X , +2936 5272 3R , +2984 5274 6N , +3042 5273 7H , +3074 5273 6J , +3124 5273 7H , +3157 5274 5T , +3186 5272 3B , +3241 5274 6N , +3327 5274 5T , +3356 5272 3J , +3426 5274 6N , +3484 5272 3R , +3532 5273 6V , +3615 5259 0L , +3668 5273 6J , +3718 5274 6N , +3776 5273 6R , +3865 5273 4D , +3925 5274 6N , +3983 5274 3Z , +4023 5272 3R , +4071 5274 7D , +4100 5273 6J , +4150 5273 7H , +4183 5272 3R , +4230 5273 6R , +4320 5273 7H , +4353 5272 3B , +4436 5272 5I , +4515 5273 4D , +4575 5272 3J , +4617 5273 7H , +4650 5272 3R , +4698 5274 3Z , +4737 5274 7M , +4795 5272 3B , +4850 5273 4D , +4910 5273 7H , +4943 5319 5E , +4971 5272 3J , +5021 5273 4U , +719 5154 0P , +753 5153 7H , +817 5154 5T , +846 5152 3J , +919 5154 5T , +948 5154 6N , +1006 5153 7H , +1039 5152 3R , +1087 5154 6N , +1145 5153 6R , +1206 5152 3R , +1254 5153 6R , +1346 5153 7H , +1379 5152 3B , +1465 5153 5X , +1520 5152 3R , +1599 5153 4D , +1659 5152 3J , +1702 5152 3R , +1750 5153 6R , +1841 5153 6V , +1924 5154 5T , +1953 5153 7H , +1986 5154 7M , +2074 5153 7H , +2107 5154 7M , +2165 5152 3R , +2243 5154 6N , +2301 5152 3R , +2349 5153 6V , +2462 5126 3V , +2522 5154 3Z , +2562 5152 3B , +2616 5125 4M , +2672 5154 3Z , +2711 5153 6J , +2761 5154 2X , +2850 5154 2X , +2938 5154 5T , +2967 5154 6N , +3025 5125 4M , +3112 5154 7D , +3141 5153 6J , +3191 5154 6N , +3249 5125 4M , +3305 5153 4D , +3365 5153 6J , +3415 5125 4M , +3471 5152 3R , +3549 5154 2T , +3610 5154 5T , +3639 5154 2X , +3727 5153 5X , +3783 5152 3B , +3837 5139 0L , +3892 5154 6N , +3950 5152 3B , +4005 5153 7H , +4068 5154 3F , +4129 5152 3N , +4174 5154 7D , +4211 5153 4U , +4282 5154 2T , +4343 5154 5T , +4372 5154 2X , +4460 5153 5X , +4516 5152 3B , +4578 5142 6B , +4631 5154 3F , +4692 5153 6F , +4778 5153 6J , +4828 5126 3V , +4888 5126 3V , +4948 5154 7D , +4977 5154 5T , +5006 5176 32 7 /1J +$C +0H"*/rO`~> +, +719 5032 3N , +763 5033 6J , +813 5033 7H , +846 5034 5T , +875 5032 3B , +930 5034 6N , +988 5032 3J , +1070 5034 2X , +1158 5033 6J , +1208 5033 6F , +1264 5032 3R , +1352 5032 3R , +1400 5034 51 47 /6C +$C +0HhbLCT6iu*o7X>[[4%/>?fXbXeft#>>!^U>GYf:I8\U0m^,;BmF&STVWhAmPBq,U8\.XIjoKYt +a@E.\>`fE~> +, +1451 5033 7H , +1484 5032 3R , +1532 5034 6N , +1590 5032 3J , +1633 5034 5T , +1662 5033 0B , +1718 5032 3R , +1807 5033 4D , +1867 5032 3J , +1910 5032 3R , +1998 5032 3B , +2053 5034 6Z , +2127 5034 2T , +2188 5034 5T , +2217 5034 2X , +2305 5033 5X , +2361 5032 3B , +2415 5079 5E , +2443 5032 3J , +2526 5032 3N , +2570 5032 3B , +2625 5034 6N , +2683 5032 3N , +2728 5033 4D , +2788 5034 3Z , +2827 5034 3Z , +2867 5032 3R , +2915 5034 6N , +2973 5033 7H , +3047 5006 3V , +3107 5034 3Z , +3147 5032 3B , +3201 5005 4M , +3257 5034 3Z , +3296 5033 6J , +3346 5034 2X , +3435 5034 2X , +3523 5034 5T , +3552 5034 6N , +3610 5005 4M , +3708 5032 3N , +3752 5032 3B , +3807 5034 6N , +3865 5032 3J , +3908 5033 7H , +3940 5034 3Z , +3980 5033 4D , +4040 5032 3N , +4084 5033 7H , +4117 5034 5T , +4146 5032 3B , +4201 5034 6N , +4259 5032 3J , +4342 5033 6J , +4392 5034 6N , +4450 5033 6R , +4552 5033 6R , +4613 5033 6J , +4663 5033 7H , +4696 5033 6J , +4787 5032 3J , +4829 5033 7H , +4862 5034 3Z , +4901 5033 4D , +4962 5032 3N , +5006 5056 1J , +719 4913 7H , +752 4913 4D , +812 4914 3Z , +851 4912 3R , +899 4912 3J , +942 4899 0L , +993 4913 6J , +1043 4914 6N , +1101 4913 6R , +1188 4913 7H , +1221 4914 7M , +1279 4913 6J , +1329 4913 7H , +1388 4914 5T , +1417 4912 3J , +1484 4914 3Z , +1524 4912 3R , +1572 4914 6Z , +1605 4914 7D , +1634 4912 3R , +1682 4912 3N , +1727 4913 7H , +1759 4912 3R , +1807 4913 6R , +1893 4914 5T , +1922 4914 6N , +2005 4913 7H , +2038 4914 7M , +2096 4912 3R , +2169 4914 5T , +2198 4914 6N , +2256 4913 7H , +2289 4912 3R , +2337 4914 3Z , +2376 4914 6Z , +2410 4913 6J , +2460 4912 3N , +2504 4912 3R , +2560 4913 4U , +2627 4912 0F , +2680 4912 3R , +2727 4912 3N , +2772 4913 7H , +2804 4914 5T , +2833 4912 3B , +2888 4914 6N , +2971 4912 46 71 /1N +$C +-fG0#Ee,@L_[[W?*OoP4[gh*J]6C`rmea`sk-8e0L-H"6K5R;WU(9306,*[[Bg"L`o_t2lfDkm& +n+H?ls%;26g>+9-L6]!.K*bYY@7(ApM#~> +, +3046 4912 3B , +3101 4914 6Z , +3159 4913 72 70 /6G +$C +,%^^slb?6lGn>CBqKh"i\,AI.:L!gi\,&i!:"T=js/,,]PCKEWrR-2Ho`")>l["&&TCol^\mK?h +]!q+.9f[18+Mkhf~> +, +3231 4912 3B , +3286 4914 7D , +3315 4913 4D , +3375 4914 2X , +3464 4912 3R , +3537 4914 5Q , +3612 4912 3B , +3666 4914 6Z , +3724 4913 7H , +3757 4914 7M , +3815 4912 3R , +3889 4914 4C , +3922 4913 0K , +3962 4887 58 100 /1R +$C +,EE>P_qsamH4ASG/c1"Sh=pl_pOBsH^\tqI\,Y@#qtL,?hgb[<ruqOq_;VnKA75Ans1a'XIsp3u ++fK;GXg#5d*qmL+TE~> +, +4006 4913 3G , +4045 4913 39 49 /6K +$C +4lg/As8.<CJ,A^3J+)9E#`n#MM#Y3gp>9c^g[0SkC>l<:a)?;/]o.,Yh8?k7G7=c~> +, +4083 4913 0K , +4139 4913 0U , +4208 4914 61 69 /1V +$C +/fB/`!ntEghuDS`s*aqGp\CJP&I%IHG2`7opk*rJqgH(pg[5$Mmb@d!J)9Yos*iT"9D_Ac$#l1r +nOWbjKn=g~> +, +4270 4913 6K , +4308 4913 0U , +4345 4886 0Y , +4403 4913 6K , +4442 4913 2A , +4486 4913 75 49 /6O +$C +4cl(.nk$p@#I`!/LOT!8pO2+,GOWNI[sf7_j*e]>rr)6!qu:TkmJjri[dO1-rqj=D&bZKkGJEiA +XH,SaDYri#pAMGe^"^!a\$sVa]tY'0H[b\^*Q&=gG/NZ_@?)9:pMenIGIrWc%NZMn%6s~> +, +4564 4913 6O , +4642 4913 3G , +4681 4913 6K , +4728 4963 19 24 /1Z +$C +,PZHLmeaK*ms!Zu^UrsNZW@~> +, +4747 4913 1C , +4803 4912 103 71 /6S +$C +.UM;S\rd#[mtU:`+UQ7EnBu0%X5Ep@qu:SVs!!Nuhs'RohuDQjHN(&Dg].#FrkH.U^]'`![sS,H +huE!!DuWQ3Dqb0`s'PKVg:.*s:&TOthu!@:F`61;DtWhS^[;$0^>7iKhlH2FA,W>*J'r3MjL>cB +&8Upr~> +, +4906 4913 2A , +4950 4913 0K , +5006 4936 31 6 /2D +$C +0H#?:g]~> +, +719 4793 3C , +775 4793 2A , +819 4793 3U , +890 4766 3V , +950 4794 3Z , +990 4792 3B , +1044 4793 0B , +1101 4794 5T , +1130 4793 6R , +1191 4792 3R , +1239 4792 3J , +1317 4793 6J , +1403 4793 6R , +1464 4792 3R , +1512 4793 7H , +1545 4793 6J , +1595 4794 5T , +1624 4794 7D , +1653 4792 3R , +1701 4793 6R , +1798 4794 3Z , +1838 4792 3R , +1885 4794 6Z , +1919 4792 3R , +1967 4794 3Z , +2006 4792 3R , +2054 4794 6N , +2112 4792 3N , +2157 4792 3R , +2241 4794 6Z , +2274 4792 3B , +2329 4794 3Z , +2405 4794 2T , +2466 4794 5T , +2495 4794 2X , +2583 4793 5X , +2639 4792 3B , +2701 4782 6B , +2754 4794 3F , +2815 4793 6F , +2879 4793 4U , +2957 4794 3F , +3018 4794 7M , +3076 4794 5T , +3106 4792 3J , +3183 4766 3V , +3243 4793 6J , +3293 4766 3V , +3353 4792 3R , +3401 4794 3Z , +3477 4766 3V , +3537 4794 3Z , +3577 4792 3B , +3631 4793 0B , +3688 4794 5T , +3717 4793 6R , +3778 4792 3R , +3826 4792 3J , +3905 4793 6J , +3955 4794 6N , +4049 4792 3B , +4104 4793 0B , +4160 4792 3R , +4208 4794 3Z , +4247 4793 0B , +4304 4794 5T , +4333 4792 3R , +4381 4793 6V , +4502 4792 3B , +4557 4794 6Z , +4626 4794 5T , +4655 4793 7H , +4688 4792 3J , +4766 4793 4D , +4826 4792 3J , +4869 4792 3R , +4952 4794 5T , +4981 4794 6N , +719 4672 3J , +761 4672 3B , +816 4674 2X , +904 4672 3R , +995 4672 3J , +1037 4674 5T , +1066 4674 2X , +1155 4646 3V , +1215 4674 7D , +1244 4672 3R , +1334 4672 3J , +1376 4673 7H , +1409 4673 6J , +1459 4645 4M , +1515 4672 3R , +1562 4673 6R , +1667 4672 3R , +1715 4674 6C , +1766 4673 6J , +1816 4674 2X , +1905 4646 3V , +1965 4674 7D , +1994 4672 3R , +2042 4672 3J , +2084 4659 0L , +2151 4673 6J , +2201 4674 6N , +2259 4673 6R , +2362 4672 3N , +2406 4672 3B , +2461 4674 6N , +2519 4672 3N , +2564 4674 7D , +2593 4673 4D , +2653 4673 6R , +2714 4672 3R , +2762 4672 3J , +2845 4673 6V , +2928 4674 5T , +2957 4673 7H , +2990 4674 7M , +3090 4673 6J , +3182 4672 3J , +3224 4673 4D , +3285 4674 2X , +3373 4674 2X , +3461 4673 6J , +3511 4674 3Z , +3551 4646 4H , +3648 4672 3B , +3703 4674 6Z , +3778 4673 7H , +3811 4674 7M , +3869 4672 3R , +3959 4673 6R , +4020 4674 5T , +4049 4674 6Z , +4082 4674 6Z , +4116 4672 3R , +4164 4674 3Z , +4203 4672 3R , +4251 4674 6N , +4309 4672 3N , +4354 4672 3R , +4402 4672 3J , +4485 4673 5X , +4540 4672 3R , +4588 4673 7H , +4621 4673 6V , +4704 4672 3R , +4752 4672 3R , +4800 4674 6N , +4900 4673 7H , +4933 4674 7M , +4991 4672 3R , +719 4554 2T , +780 4554 5T , +809 4554 2X , +897 4553 5X , +953 4552 3B , +1015 4542 6B , +1068 4554 3F , +1129 4553 6F , +1212 4554 5T , +1241 4554 2X , +1329 4526 3V , +1389 4554 7D , +1419 4552 3R , +1466 4554 2X , +1555 4552 3R , +1603 4554 6N , +1661 4553 7H , +1693 4553 6J , +1743 4553 7H , +1776 4554 5T , +1805 4552 3B , +1860 4554 6N , +1945 4553 6J , +1995 4554 6N , +2053 4553 6R , +2141 4554 3F , +2202 4553 6F , +2285 4554 0T , +2343 4553 4U , +2360 4552 5M , +2418 4553 4U , +2487 4554 0P , +2521 4554 6N , +2607 4553 7H , +2640 4554 7M , +2698 4552 3R , +2774 4554 3Z , +2814 4552 3R , +2861 4552 3J , +2904 4553 7H , +2965 4552 3B , +3020 4554 6Z , +3081 4553 7H , +3114 4554 7M , +3172 4554 5T , +3201 4552 3J , +3271 4526 3V , +3331 4553 6J , +3381 4526 3V , +3441 4552 3R , +3489 4554 3Z , +3529 4539 0L , +3582 4599 1F , +3610 4554 3F , +3671 4553 6F , +3727 4599 5E , +3783 4554 3Z , +3823 4552 3R , +3870 4554 6Z , +3904 4552 3R , +3952 4554 3Z , +3991 4552 3J , +4062 4553 7H , +4095 4552 3B , +4178 4554 2T , +4239 4554 5T , +4268 4554 2X , +4356 4553 5X , +4412 4552 3B , +4474 4542 6B , +4527 4554 3F , +4588 4553 6F , +4644 4539 0L , +4697 4553 6J , +4747 4554 6N , +4805 4553 6R , +4894 4599 1F , +4922 4554 3F , +4983 4553 6F , +719 4434 0T , +777 4433 4U , +794 4432 5M , +844 4479 5E , +897 4434 3Z , +936 4432 3R , +984 4434 6Z , +1017 4432 3R , +1065 4434 3Z , +1105 4432 3J , +1172 4433 7H , +1205 4432 3B , +1284 4432 5I , +1363 4433 4D , +1423 4432 3J , +1466 4433 7H , +1498 4432 3R , +1546 4434 3Z , +1586 4434 7M , +1644 4432 3B , +1699 4433 4D , +1759 4433 7H , +1791 4479 5E , +1819 4432 3J , +1887 4432 3B , +1941 4434 3Z , +1981 4434 5T , +2010 4405 4M , +2065 4434 5T , +2095 4434 6N , +2153 4433 6J , +2203 4434 7D , +2257 4434 5T , +2286 4434 2X , +2374 4406 3V , +2434 4434 7D , +2463 4432 3R , +2511 4434 2X , +2600 4432 3R , +2648 4434 6N , +2706 4433 7H , +2738 4433 6J , +2788 4433 7H , +2821 4434 5T , +2850 4432 3B , +2905 4434 6N , +2971 4433 4U , +720 4122 46 67 /6W +$C +4rW=((^sTUs8W-!s8W-!s8W-!s8W-!S6ZBXr'(_0n\`3(0\H\`_nk9d*ZBP~> +, +770 4121 20 15 /2H +$C +1`Rl=FT;<CC)Bb~> +, +845 4122 65 68 /7A +$C +.D_q^.KGB-^]4?6s8W-!s8W-!s8W-!s3*T]J,[4_s8Tk1e(531rV~> +, +912 4122 59 72 /2L +$C +/fA4$TE!.:j:ducs8W-!s8W-!s8W-!s8W-!YP,S6V1od-6]^VX]C=E\G.;'Nq#CBos8Vbn\7kod +_;m<nn9=~> +, +973 4120 2I , +1048 4122 58 68 /7G +$C +4q,'94n"JT*ZtF^qu>RBOg*aCs8W-!s8W-!s8W-!s8W,JT]X(grr~> +, +1109 4122 2M , +1142 4122 86 47 /2R +$C +/f@-r.*sdMrB=m)FU+"'Bs740s8W-!s8W-!s8W-!s8W-!s8W-!s/Q+QIdM<I<5NE;3H3>8%'hj( +p6tFJT[_="2"DKC2$[PDT](P4'E~> +, +1231 4120 55 74 /7K +$C +.LKf,!c/Ep#WtK1LQKo%":RC8hODu?^>H[(s4dRgs8N&up&Fu?95CrQ9+2UOORMR[]3I5IiJ#/Q +a8c2>s8T9b_aj]R*_6nS,<,~> +, +1292 4120 52 49 /2V +$C ++U++g6m-H$K]n$]*<H\uDNfBa^72=,YM9*AIfKHJs8W&LYOB6S^Uh#29@^83L6ODnTnNn(#T`~> +, +1340 4120 38 74 /7O +$C +4t!i<^[;&>s)7dag]-%-htI*Ds0qsAmJlSRDu5%]J(st[pAaja~> +, +1377 4122 7A , +1444 4122 60 72 /2Z +$C +0H!84,PBKR"/)b=\m6u]\m6qT9;U)0dd,?GFLkSVA2rn_hmM5+nDA/ng[4_3&)V<0q[]t?hYm?A +s8W-!s8T11B`H;mj=qeJ,Cf~> +, +1530 4120 2I , +1580 4122 59 47 /0D +$C +/fA4$TE!.:j:ducs8W-!s8W-!s8W-!s8W-!YP,S6V*Tg/bD(U.Ap1dlk(&#^$q:pOW&S<Uhu~> +, +1641 4122 55 46 /5E +$C ++N308lb?6ErglC\e\-CBqJO$>h0h4h:&_W"YGV>(e(40jlhdkb*0(n+@AEk<~> +, +1697 4122 2M , +1730 4122 39 47 /2K +$C +0H$MYTKVuJs8W-!s8W-!pTf^+(gLC'+S,W)pYU$GG9Me#iPF:~> +, +1769 4120 2V , +1825 4122 0D , +1886 4122 2R , +1975 4120 2I , +2025 4122 0D , +2086 4120 32 65 /3D +$C +.EZ`8VbXVnZpArR#H(r/s8W-!s8W-!q/FU2G7Ntp8,rVhs7Ni+LP*L[~> +, +719 3944 2T , +780 3944 5T , +809 3944 2X , +897 3943 5X , +953 3942 3B , +1034 3943 6J , +1084 3916 3V , +1144 3916 3V , +1204 3944 7D , +1233 3944 5T , +1262 3942 3N , +1307 3943 6J , +1357 3943 7H , +1389 3944 5T , +1418 3942 3B , +1473 3944 6N , +1531 3942 3J , +1600 3943 6J , +1650 3942 3N , +1694 3942 3N , +1739 3942 3R , +1787 3942 3J , +1829 3942 3J , +1897 3944 3F , +1958 3943 6F , +2041 3943 5X , +2096 3916 4H , +2179 3944 2X , +2267 3942 3R , +2315 3943 6J , +2365 3944 6N , +2423 3942 3J , +2493 3942 3B , +2548 3944 6Z , +2609 3943 6J , +2687 3943 5X , +2742 3943 4D , +2803 3944 5T , +2832 3944 7D , +2861 3943 7H , +2893 3966 1J , +2927 3944 5T , +2956 3944 6N , +3041 3944 2X , +3129 3942 3B , +3184 3943 6R , +3245 3943 4D , +3305 3944 7D , +3334 3942 3R , +3382 3929 0L , +3442 3935 43 75 /0K +$C ++Zb,Qs8W,0X<)A5#Jq")nKJr8&3#1MkWYKbs%WCNqUK:H_GXbmKEmWi]F[n-(XWfS&J[V993S1l +r2[<_4oK6"[DN@\(a:C*("cLp+d1r&s8TJ~> +, +3502 3944 47 56 /3K +$C +-Oe`/+Q*5!s8W-!s8W-!s8W-!,J;WWs8W-!s7hZE~> +, +3562 3944 48 60 /0O +$C +,D@S_MVl*@fa*!YQV41'l#aLB/sf5-db7nuBjmiqb8kc<I>?S9^>Ek<fR:IQmIpF)L'3#)Y!;sd +s8V/![Jg~> +, +3623 3943 4U , +3693 3944 3F , +3754 3944 7M , +3812 3942 3R , +3888 3942 3J , +3930 3943 7H , +3963 3943 6J , +4013 3944 6N , +4071 3943 6R , +4132 3943 6J , +4182 3944 3Z , +4222 3943 6R , +4311 3943 6R , +4372 3944 5T , +4401 3942 3J , +4444 3943 7H , +4476 3944 3Z , +4516 3944 5T , +4545 3943 5X , +4600 3943 4D , +4660 3943 7H , +4693 3944 5T , +4722 3942 3B , +4777 3944 6N , +4863 3943 6J , +4913 3944 7D , +4942 3942 3J , +4984 3942 3B , +719 3824 5T , +748 3824 6N , +806 3822 3N , +851 3824 7D , +880 3823 4D , +940 3823 6R , +1001 3822 3R , +1049 3822 3J , +1120 3823 7H , +1153 3824 7M , +1211 3822 3R , +1289 3823 6V , +1372 3824 5T , +1401 3824 6N , +1460 3823 6R , +1521 3822 3B , +1575 3823 6V , +1688 3824 2X , +1776 3823 6J , +1826 3824 6N , +1884 3823 6J , +1934 3795 4M , +1990 3822 3R , +2038 3824 3Z , +2107 3824 59 42 /3O +$C +.En\QohYJ]jr\`Q9RhBgrn!t<huDF/ldtg:S+$CWBlou^n*MdCl9;T4J,c[8hqsLnFh[nRi%@<M +4o<_~> +, +2167 3824 61 43 /0S +$C +2AdhJ:_A3Oo1(F=qu?]rs8W-!s8W-!s8W-!s8W-!s8W-!pO;Seqb;8cG?JF`D.WiQ<gR9_Y1)/_ +(f=s(~> +, +2258 3823 6J , +2308 3824 6N , +2366 3823 6R , +2457 3823 7H , +2490 3824 7M , +2548 3822 3R , +2626 3824 2T , +2687 3824 5T , +2716 3824 2X , +2804 3823 5X , +2860 3822 3B , +2944 3824 2X , +3032 3822 3B , +3087 3823 6R , +3148 3823 4D , +3208 3824 7D , +3237 3822 3R , +3314 3824 60 56 /3S +$C +3XgW_qX=IL\M;mKlgOl.?hOHu^M^X[lgM9sli6p4hu:4egK+"!s8)]/rI=h#p$)/Ds6[#ds8A#O +rTi=4p$r(^riPMa&Ie=7Xo%#~> +, +3374 3824 0S , +3442 3824 45 60 /0W +$C +2@YoEU`9@6s8W-!s8W-!s8W-!s8W-!s3/9>qu~> +, +3502 3824 45 62 /3W +$C +2@YoEU`9@6s8W-!s8W-!s8V[E,.I+BaFaHls6p~> +, +3554 3822 56 62 /1A +$C +,Ap0V:'Cb1Tg"9*%d8k,,W$'NTS%Y>qG#tA:$KCgqg/:sYQ+Y&m<\c`f%9dlBk<=V[[1h`_[1Jp +-.o@;>VNZrEW?(=s7sI<pOE~> +, +3623 3823 4U , +3695 3822 77 71 /4A +$C +,=&o*!t[`V#=64K5_.]WbIRs<5mHuRS'uJOqJZ%VHN2m[s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8TL/cs\qRBI1I/p]~> +, +3773 3824 6N , +3831 3824 7D , +3860 3824 5T , +3889 3823 6F , +3945 3822 3R , +4029 3824 3K , +4089 3824 0O , +4142 3809 0L , +4195 3824 3S , +4255 3824 0S , +4323 3824 0W , +4383 3824 3W , +4435 3822 1A , +4525 3824 5T , +4554 3822 3J , +4625 3824 6N , +4683 3822 3B , +4738 3823 7H , +4800 3823 5X , +4855 3823 4D , +4916 3824 5T , +4945 3824 7D , +4974 3823 7H , +5006 3846 1J , +719 3704 5T , +748 3704 6N , +838 3703 5X , +893 3703 4D , +954 3703 7H , +1018 3704 5T , +1047 3704 2X , +1135 3676 3V , +1195 3704 7D , +1225 3702 3R , +1272 3704 2X , +1361 3702 3R , +1409 3704 6N , +1467 3703 7H , +1499 3702 3R , +1547 3703 6R , +1640 3704 5T , +1669 3704 6N , +1759 3704 2T , +1820 3704 5T , +1849 3704 2X , +1937 3703 5X , +1993 3702 3B , +2079 3703 5X , +2134 3676 4H , +2229 3696 43 75 /1E +$C +4]cj`pO1qCh=pBMmea`e]C,R1rV(`tGMW"Ahfnt3n%8#b^@/]%s**;nICi;~> +, +2289 3702 48 45 /4E +$C +3k744+D-15#AAdpoL9e"#TK*e&7PNu60UU_rVuijpY5GpI>50sLP@d5A2Znl&'+_Ml`/:<Y\T>r +/6!H_C23s&~> +, +2341 3685 56 62 /1I +$C +3!q,3aUeFOs8W,sL(f.]^j&07KBS.Ncm,Lc$,2!#oUEfYVpfsAH@Pgis8W,r?GEo@[G>\?a(]_F +m=`,+Ph9rm$$Ii'Xr("?'E~> +, +2401 3685 1I , +2469 3704 0W , +2529 3696 1E , +2589 3704 0W , +2649 3704 3W , +2701 3702 1A , +2769 3696 1E , +2821 3704 3O , +2881 3704 0S , +2949 3704 0W , +3009 3704 3W , +3061 3702 1A , +3145 3702 15 14 /4I +$X +"2GHB5Q!bFJ,XrsJ,XrsJ,XrsJ,V\1+8>rR~> +, +3181 3702 1A , +3250 3703 4U , +3324 3704 0P , +3358 3703 7H , +3424 3702 3J , +3466 3704 5T , +3495 3704 2X , +3584 3676 3V , +3644 3704 7D , +3673 3704 5T , +3702 3704 6Z , +3735 3704 5T , +3764 3702 3R , +3812 3702 3J , +3886 3703 6J , +3936 3704 6N , +3994 3703 6R , +4088 3702 3J , +4130 3703 7H , +4163 3703 6J , +4213 3704 6N , +4271 3703 6R , +4332 3703 6J , +4382 3704 3Z , +4422 3703 6R , +4483 3704 5T , +4512 3702 3J , +4554 3702 3R , +4602 3702 3J , +4677 3703 7H , +4710 3704 7M , +4768 3702 3R , +4849 3702 3N , +4893 3702 3B , +4948 3704 6N , +5006 3726 1J , +719 3582 3J , +761 3583 7H , +794 3584 3Z , +833 3583 4D , +894 3582 3N , +938 3583 7H , +971 3584 5T , +1000 3582 3B , +1054 3584 6N , +1143 3582 3B , +1198 3584 6Z , +1261 3583 6V , +1344 3584 5T , +1373 3584 6N , +1432 3583 6R , +1493 3582 3B , +1547 3583 6V , +1631 3582 3R , +1679 3583 6R , +1769 3583 6J , +1819 3556 3V , +1879 3556 3V , +1939 3584 7D , +1968 3584 5T , +1997 3582 3N , +2042 3583 6J , +2092 3583 7H , +2124 3584 5T , +2153 3582 3B , +2208 3584 6N , +2266 3582 3J , +2309 3569 23 61 /1M +$C +0k&hmpMY93^MeSYh=p[<GW$"$s8V\cKH39Qs(g>C'E~> +, +2363 3584 5T , +2392 3583 7H , +2455 3583 6J , +2505 3584 7D , +2534 3582 3J , +2576 3582 3B , +2661 3582 3N , +2705 3582 3B , +2760 3584 6N , +2818 3583 7H , +2851 3583 6J , +2901 3584 5T , +2930 3584 6N , +2988 3582 3J , +3060 3582 3J , +3102 3582 3B , +3157 3584 2X , +3245 3582 3R , +3323 3555 4M , +3379 3584 3Z , +3418 3583 6J , +3468 3556 3V , +3528 3584 7M , +3586 3584 5T , +3615 3582 3N , +3660 3583 6J , +3710 3584 7D , +3769 3583 6R , +3830 3582 3R , +3878 3583 0B , +3934 3584 5T , +3964 3582 3N , +4008 3582 3R , +4056 3582 3J , +4127 3582 3J , +4169 3583 4D , +4230 3582 3N , +4274 3584 7M , +4360 3583 6J , +4410 3582 3J , +4481 3583 7H , +4514 3583 6J , +4564 3583 5X , +4619 3583 5X , +4674 3582 3R , +4722 3583 6R , +4812 3584 6N , +4870 3582 3B , +4925 3583 7H , +4957 3582 3R , +5005 3606 1J , +719 3463 5X , +774 3462 3B , +829 3462 3B , +883 3463 6F , +939 3462 3J , +1017 3464 6N , +1075 3462 3B , +1130 3463 7H , +1198 3436 3V , +1258 3464 3Z , +1298 3462 3B , +1352 3463 0B , +1409 3464 5T , +1438 3463 6R , +1499 3462 3R , +1547 3463 6R , +1644 3463 6R , +1705 3464 5T , +1734 3464 3Z , +1774 3462 3R , +1822 3462 3N , +1866 3463 7H , +1899 3464 7D , +1928 3436 4H , +2019 3463 5X , +2074 3436 4H , +2166 3464 2T , +2227 3464 5T , +2256 3464 2X , +2344 3463 5X , +2400 3462 3B , +2462 3452 6B , +2515 3464 3F , +2576 3463 6F , +2640 3463 4U , +2718 3464 3F , +2779 3464 7M , +2837 3462 3R , +2921 3462 3R , +2969 3462 3J , +3011 3462 3J , +3054 3462 3R , +3102 3464 6N , +3160 3463 7H , +3192 3464 5T , +3221 3463 6J , +3271 3464 7D , +3301 3462 3J , +3378 3462 3B , +3433 3464 6Z , +3502 3463 5X , +3557 3462 3B , +3612 3463 7H , +3644 3464 7M , +3746 3464 3K , +3806 3464 0O , +3895 3463 6J , +3945 3464 6N , +4003 3463 6R , +4099 3464 3S , +4159 3464 0S , +4227 3464 0W , +4287 3464 3W , +4339 3462 1A , +4436 3463 6J , +4486 3464 3Z , +4526 3462 3R , +4610 3463 6R , +4671 3464 5T , +4700 3462 3J , +4743 3462 3N , +4787 3463 4D , +4847 3462 3J , +4890 3462 3J , +4932 3462 3R , +4980 3463 6R , +719 3344 7M , +777 3342 3R , +825 3344 3Z , +865 3342 3R , +920 3343 4U , +719 3166 59 69 /4M +$C +0H%XJ!UM?&s8W-!s8W-!s78N96ntkUT_tep`#I[Lhf$!Ys)7o6s53kVli3g\QX1<'9+2Gd.UX,J +Z5ZsI~> +, +779 3166 3Z , +819 3164 3B , +873 3137 55 76 /4M +$C ++p6(UU(D9p_BI4g&2<;jh&tN#o\CkkFnFSgJ,d.Xs(u]/=CJ9h&r&_O@t^O*>/J*d6!EuahV:&- +aAQDs_@@-!5s.7@DNJb"HG82g\$+]hs53/>Bn"bZS_ZAA[]D/Z`.uhrTnOs!J,~> +, +929 3166 3Z , +969 3165 6J , +1019 3166 2X , +1107 3166 2X , +1195 3164 3R , +1243 3166 3Z , +1283 3164 3J , +1350 3165 4D , +1410 3164 3J , +1453 3165 4D , +1513 3165 6J , +1563 3166 7D , +1592 3166 7D , +1621 3138 4H , +1702 3166 6N , +1760 3164 3R , +1808 3164 3R , +1856 3165 6R , +1942 3164 3B , +1996 3166 6N , +2055 3166 7D , +2084 3138 4H , +2164 3165 7H , +2197 3166 7M , +2255 3166 3Z , +2295 3164 3R , +2343 3164 3R , +2415 3166 6Z , +2449 3165 4D , +2509 3166 6N , +2567 3164 3N , +2612 3165 7H , +2644 3166 5T , +2673 3164 3B , +2728 3166 6N , +2786 3164 3J , +2854 3166 6Z , +2887 3166 3Z , +2926 3164 3B , +2981 3166 2X , +3094 3165 7H , +3127 3166 7M , +3185 3164 3R , +3266 3166 3K , +3326 3166 0O , +3404 3166 2X , +3492 3164 3B , +3547 3165 6R , +3608 3165 4D , +3668 3166 7D , +3697 3164 3R , +3753 3165 11 47 /4O +$X +*WSETJ&)*Bs5<q8s5<q8s58CB5CagUzzzzzzzzzzz!!")@5Ce7!s5<q8s5<q8s5<pmJ&":!*WQ~> +, +730 3000 35 34 /1T +$C +3XZ'#&9Qk9:Xc6+s%i[g^U<H4p7[1T(f4V5~> +, +968 2986 52 58 /4T +$C ++Dt22n;'$mK;'!rU-/Uq+pCM##-'`as8W-!s8W-!s8P8$eb5lLs8W-!qLA~> +, +1036 2986 47 45 /1X +$C ++PbNY":bub6JI/]+?BW7cp>6;dVhoQ]fg:0<qZHofDkmNmA9jMDd-Gsf%O0Q[[%b4@>(^9K!A.h +L(kIQ~> +, +1088 2969 1I , +1156 2988 0W , +1216 2986 46 45 /4X +$C ++O4a+i.reS6.$'k_BN_8!X@j2h&tE;W_I/@C:^R_oWehD^WDC>HN)Lg[CpEoV/7fdL6]!.K*7m( +:t.1mJq*~> +, +1268 2988 59 42 /2B +$C +-3a&@>IqP[\#uk!pK,sIp!p`u]g'*B]!niOVlf4`<qY"VFhKqV]\mHa#(<CEo`~> +, +1336 2986 4X , +1396 2988 0W , +969 2866 68 73 /5B +$C +,(YRQ!t[`UJ\hm/%0QnAJHaj2#G?]gJe(-OdL@`W<Mc^%Q_j@^YNtl]s8W&srVl9Qqdd,6hf$9D +hf$!ACLO,LKn^Eq0OV-+A+7Db0N'/"jJ4%~> +, +1040 2868 3Z , +1079 2866 3R , +1127 2867 6J , +1177 2867 7H , +1210 2866 3R , +1258 2866 3J , +1353 2867 6J , +1455 2839 4M , +1511 2868 3Z , +1550 2867 6J , +1600 2840 3V , +1660 2868 7M , +1718 2868 5T , +1747 2866 3N , +1792 2867 6J , +1842 2868 7D , +1924 2867 6V , +2007 2868 5T , +2036 2868 6N , +2095 2867 6R , +2156 2866 3B , +2210 2867 6V , +2349 2895 43 6 /2F +$C +0FaZL~> +, +2449 2867 6J , +2552 2868 3F , +2613 2867 6F , +2722 2913 1F , +2750 2867 7H , +2782 2866 3B , +2837 2840 3V , +2951 2868 7D , +2980 2866 3R , +3028 2867 0B , +3084 2866 3R , +3132 2868 7D , +3161 2913 24 26 /0N +$C +4`80npM\gBpUfn^qtp@3,7GK@~> +, +3243 2867 6V , +3326 2868 5T , +3355 2867 6R , +3417 2839 4M , +3472 2866 3R , +3520 2867 7H , +3609 2895 2F , +3709 2867 7H , +3742 2868 7M , +3800 2867 6J , +3850 2867 7H , +3936 2866 3N , +3980 2867 6J , +4030 2868 6N , +4141 2867 5X , +4196 2866 3R , +4297 2867 4D , +4357 2866 3J , +4400 2866 3R , +4448 2867 6R , +4561 2867 7H , +4594 2866 3B , +4702 2867 5X , +4757 2867 4D , +4818 2868 5T , +4847 2868 7D , +4876 2867 6R , +4989 2867 6J , +969 2748 2T , +1030 2748 5T , +1059 2748 2X , +1147 2747 5X , +1203 2746 3B , +1265 2736 6B , +1318 2748 3F , +1379 2747 6F , +1466 2747 6J , +1516 2720 3V , +1576 2720 3V , +1636 2748 7D , +1665 2748 5T , +1694 2746 3N , +1739 2747 6J , +1789 2747 7H , +1821 2748 5T , +1850 2746 3B , +1905 2748 6N , +1971 2747 4U , +2044 2748 3F , +2105 2748 7M , +2163 2746 3R , +2242 2748 6Z , +2275 2747 4D , +2336 2748 6N , +2394 2746 3N , +2438 2747 7H , +2471 2748 5T , +2500 2746 3B , +2554 2748 6N , +2643 2748 3Z , +2683 2746 3R , +2730 2747 7H , +2763 2747 4D , +2823 2748 3Z , +2863 2748 6N , +2921 2746 3J , +2994 2747 6J , +3074 2748 3Z , +3114 2746 3R , +3161 2748 6Z , +3195 2746 3R , +3243 2748 3Z , +3282 2746 3R , +3330 2748 6N , +3388 2746 3N , +3433 2746 3R , +3511 2747 7H , +3544 2746 3B , +3629 2747 6J , +3679 2748 6N , +3767 2747 6J , +3817 2747 6R , +3878 2747 7H , +3948 2748 3K , +4008 2748 0O , +4068 2774 47 4 /2H +$C +/ddj:TE~> +, +4128 2752 46 48 /5H +$C +0W7)r4)i)l*&-_=DA[?1L)l$X3,TRP_hK1e%DrYmE5TO"&5\Vq#Uhu*$50#*"UHMK&6'>dT`k`h +$A*pH(9An~> +, +4188 2748 3K , +4248 2746 1X , +4300 2729 1I , +4368 2748 0W , +4428 2746 4X , +4480 2748 2B , +4548 2746 4X , +4608 2748 0W , +4691 2747 6J , +4741 2747 6R , +4802 2747 7H , +4865 2747 7H , +4898 2748 7M , +4956 2747 6J , +5006 2747 7H , +969 2628 3Z , +1009 2626 3R , +1056 2600 3V , +1116 2628 3Z , +1156 2626 3R , +1204 2626 3J , +1246 2626 3R , +1294 2628 6N , +1352 2627 7H , +1385 2626 3J , +1452 2627 7H , +1485 2628 7M , +1543 2626 3R , +1616 2627 6V , +1699 2628 5T , +1729 2628 6N , +1787 2627 6R , +1848 2626 3B , +1902 2627 6V , +2011 2628 5T , +2040 2628 6N , +2123 2626 3J , +2166 2627 4D , +2226 2627 5X , +2281 2626 3J , +2324 2626 3R , +2371 2600 5A , +2427 2627 4D , +2488 2626 3R , +2536 2628 6N , +2594 2627 7H , +2651 2628 3F , +2713 2627 6F , +2793 2626 3B , +2848 2600 3V , +2908 2626 3R , +2956 2628 3Z , +2995 2627 6J , +3045 2627 7H , +3078 2628 5T , +3107 2626 3B , +3162 2628 6N , +3220 2626 3J , +3270 2627 4U , +730 2462 1T , +976 2448 47 45 /2L +$C ++WT&@_B@Xm#7-+#k_lB]&2ulZkm$>udX4)MBPXeWJ,fQ'r/,hrrqlRsCN%j0CLMq$@1c#I'uLE6 +'2W(k~> +, +1028 2450 0S , +1096 2448 52 62 /5L +$C ++rokY#W"`MK<U/9H6SI9Jd1>]"Q)ebODiWjSs/p#8cSY$^]4?6s0]W?Xo5C#XgD4-C[Eb.?%s!Y +(e]T6Yde+\@<)>Is8W'dK%Ji~> +, +969 2328 5B , +1040 2330 3Z , +1079 2328 3R , +1127 2329 6J , +1177 2329 7H , +1210 2328 3R , +1258 2328 3J , +1331 2329 6J , +1381 2330 6N , +1439 2329 6R , +1531 2329 6J , +1581 2330 3Z , +1621 2330 3Z , +1660 2329 6J , +1710 2330 6N , +1768 2301 4M , +1824 2328 3R , +1872 2328 3J , +1946 2301 4M , +2002 2330 3Z , +2041 2329 6J , +2091 2302 3V , +2151 2330 7M , +2209 2330 5T , +2238 2328 3N , +2314 2328 3B , +2369 2329 5X , +2416 2302 26 97 /2P +$C +4EtrfS>!QA\%D+`s*juts8W-!s8W-!s8W-!s8W-!rG+1n5ENe-@_q!ms5c>8l-oX8C;PK~> +, +2447 2328 3R , +2495 2328 3N , +2540 2329 7H , +2572 2328 3J , +2645 2329 6V , +2728 2330 5T , +2757 2329 7H , +2790 2330 7M , +2848 2330 5T , +2877 2330 6N , +2966 2329 7H , +2999 2330 7M , +3057 2328 3R , +3136 2329 7H , +3169 2328 3B , +3223 2302 3V , +3283 2330 7D , +3312 2328 3R , +3360 2329 0B , +3417 2328 3R , +3465 2330 7D , +3526 2329 6V , +3609 2330 5T , +3638 2330 6N , +3697 2329 6R , +3758 2328 3B , +3812 2329 6V , +3926 2329 5X , +3981 2302 4H , +4068 2302 3V , +4128 2330 3Z , +4168 2328 3B , +4222 2328 3N , +4267 2328 3R , +4314 2328 3J , +4357 2328 3J , +4399 2330 5T , +4428 2330 6N , +4487 2301 4M , +4573 2330 2T , +4634 2330 5T , +4663 2330 2X , +4751 2329 5X , +4807 2328 3B , +4869 2318 6B , +4922 2330 3F , +4983 2329 6F , +969 2208 3N , +1013 2208 3B , +1068 2210 2X , +1156 2210 2X , +1245 2209 6J , +1295 2210 6N , +1353 2209 6R , +1441 2208 3J , +1483 2209 7H , +1516 2210 3Z , +1555 2210 5T , +1585 2210 6N , +1643 2181 4M , +1698 2208 3J , +1749 2209 4U , +1819 2210 3F , +1880 2210 7M , +1938 2208 3R , +2014 2210 5T , +2043 2210 6N , +2101 2209 7H , +2134 2208 3R , +2182 2210 3Z , +2221 2210 6Z , +2255 2209 6J , +2305 2208 3N , +2349 2208 3R , +2425 2209 7H , +2458 2208 3B , +2541 2210 3F , +2602 2209 6F , +2686 2210 5T , +2715 2208 3J , +2785 2182 3V , +2845 2210 3Z , +2885 2210 5T , +2914 2210 2X , +3002 2209 6J , +3052 2210 3Z , +3091 2210 5T , +3121 2210 7D , +3150 2182 4H , +3234 2209 7H , +3267 2210 7M , +3325 2208 3R , +3401 2182 3V , +3461 2209 6J , +3511 2208 3J , +3553 2208 3J , +3596 2210 5T , +3625 2210 6N , +3683 2181 4M , +3766 2208 3B , +3821 2210 6Z , +3882 2208 3J , +3924 2209 7H , +3957 2210 3Z , +3996 2210 5T , +4026 2210 6N , +4084 2181 4M , +4139 2208 3J , +4210 2209 5X , +4265 2208 3R , +4313 2209 7H , +4346 2209 6V , +4429 2208 3R , +4477 2208 3R , +4525 2210 6N , +4611 2209 7H , +4644 2210 7M , +4702 2208 3R , +4778 2209 6J , +4828 2182 3V , +4888 2182 3V , +4948 2210 7D , +4977 2210 5T , +5006 2232 1J , +969 2088 3N , +1013 2089 6J , +1063 2089 7H , +1096 2090 5T , +1125 2088 3B , +1180 2090 6N , +1273 2089 6J , +1323 2090 6N , +1381 2089 6R , +1477 2090 3F , +1538 2089 6F , +1629 2088 3B , +1684 2090 6Z , +1752 2089 7H , +1785 2090 7M , +1843 2088 3R , +1926 2089 7H , +1959 2088 3B , +2013 2088 3B , +2068 2090 7D , +2097 2089 6F , +2152 2090 5T , +2182 2089 7H , +2251 2089 4D , +2311 2088 3J , +2354 2090 5T , +2383 2090 6N , +2441 2061 4M , +2538 2088 2L , +2590 2090 0S , +2658 2088 5L , +2719 2089 4U , +2796 2090 58 69 /5P +$C +2?s3(!F!QE)ak,7huE0FJ,A1(s88h1s8W,brYH[V+pd[fp](9nnc/Xh+F!kcs0)I>F;YW2LG/r4Du~> +, +2857 2089 6J , +2907 2088 3N , +2951 2090 7M , +3044 2088 3N , +3088 2089 6J , +3138 2090 7D , +3167 2090 7D , +3231 2089 7H , +3264 2088 3B , +3361 2088 2L , +3413 2090 0S , +3481 2088 5L , +3569 2090 3Z , +3609 2088 3R , +3656 2089 7H , +3689 2089 4D , +3749 2090 3Z , +3789 2090 6N , +3847 2088 3J , +3925 2089 6J , +4010 2088 3J , +4052 2089 7H , +4085 2090 3Z , +4124 2090 5T , +4154 2090 6N , +4212 2061 4M , +4304 2090 3Z , +4344 2088 3R , +4391 2062 3V , +4451 2090 3Z , +4491 2088 3R , +4539 2088 3J , +4581 2088 3R , +4629 2090 6N , +4687 2089 7H , +4720 2090 5T , +4749 2090 6N , +4807 2061 4M , +4900 2089 7H , +4933 2090 7M , +4991 2088 3R , +969 1970 3Z , +1009 1968 3R , +1056 1968 3J , +1099 1969 4D , +1159 1970 7D , +1188 1969 7H , +1246 1968 3B , +1300 1970 6Z , +1359 1969 7H , +1391 1970 7M , +1449 1968 3R , +1522 1970 3F , +1584 1969 6F , +1664 1968 3N , +1709 1968 3B , +1763 1970 2X , +1852 1970 2X , +1940 1969 6J , +1990 1970 6N , +2048 1969 6R , +2109 1955 1M , +2159 1969 6J , +2234 1968 3J , +2277 1969 7H , +2309 1970 3Z , +2349 1970 5T , +2378 1970 6N , +2436 1941 4M , +2517 1968 3J , +2559 1969 7H , +2592 1969 6J , +2642 1970 3Z , +2681 1969 7H , +2714 1970 5T , +2743 1970 6N , +2801 1941 4M , +2882 1969 6V , +2965 1970 5T , +2994 1969 7H , +3027 1970 7M , +3110 2015 1F , +3162 1969 14 63 /2T +$X +&+C\95Q!bD5Q!bD5PuVu&+BUMzzzzzz!It9f"2G#S"2G#S"2G#S"2G#S#J^S[#N,jF#N,jF#N,jF +#N,jF#N,jF#N,jF#N,jF#N,jF&)[uV&+C,!&+C,!&+C,!&+C,!&+Bh^"2F~> +, +3199 2015 0N , +3252 1969 6R , +3313 1970 5T , +3342 1969 6J , +3392 1941 4M , +3448 1970 6N , +3506 1968 3B , +3560 1968 3J , +3603 1968 3R , +3651 1968 3J , +3718 1969 6J , +3768 1970 6N , +3851 1968 3R , +3899 1970 3Z , +3939 1970 3Z , +3978 1968 3B , +4033 1970 3Z , +4080 1969 4U , +730 1804 1T , +968 1792 56 43 /5T +$C +1Bn:Ro[EN6F_)fts8W-!s8W-!s8W-!s8W)srHDINZ.ep"nC!a.@>)."]2rE/0VA~> +, +1036 1790 4E , +1088 1792 0S , +1156 1790 4X , +1216 1790 2L , +1268 1792 57 60 /2X +$C +1Bn>>`B3dnFC`;hs8W-!s8W-!s8W-!s8W)sqd%e)/9[@sHYIX?9<hd*(gJc)s8W-!r:jIm^]~> +, +1336 1790 4E , +1388 1792 5T , +969 1670 74 73 /5X +$C +,(YRQ%&b?ZH3,5AE/5&C$ueTN/fZ!"kS)Bh6$0\D"k*EDV<b=f^:O1;e<G\E7)6k9`k)3Ms8N&e +htqm"\I5n([s%Xtpi!ULf%S"M-Xag/"q(io.>&2)aCuWNJVbia~> +, +1045 1672 28 69 /2V +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +1074 1671 0B , +1131 1670 3R , +1179 1670 3J , +1256 1671 6J , +1341 1672 6N , +1399 1671 6J , +1449 1672 88 47 /5V +$C +0Eoc'K:jmrq)D8+/;`aO>(?SPs8W-!s8W-!s8W-!s8W-!s8W-!ri?'Cm5<d*9l_ZL&>Ouf@AMUU +!4rFJ@)DUq/%!gM.m^-W@A]^a-57F:+CLi~> +, +1537 1670 3R , +1620 1671 6V , +1703 1672 2V , +1732 1671 7H , +1765 1672 7M , +1823 1672 2V , +1852 1672 6N , +1945 1672 3F , +2006 1671 6F , +2097 1651 31 93 /3B +$C +"KA5$<2ioaX%J_TkuZ=+f<21RX8]1"oY:G+s8W,ds8D]jp[@j)hqRkn]A*&HgV(4BmCQ0~> +, +2130 1672 2V , +2159 1672 6N , +2252 1671 7H , +2285 1672 7M , +2343 1670 3R , +2426 1670 3J , +2468 1670 3N , +2513 1670 52 49 /5Z +$C +-,RJ#Jd4TY+S0[\0^1M^2l>gu<qXnToWS5,FoUmEs8W%)rjpk_Fh_cG[d)RJ9#F9R9#61SMQibj +PlW!~> +, +2567 1644 3V , +2627 1670 3R , +2711 1670 5Z , +2766 1672 6Z , +2835 1671 6J , +2921 1643 4M , +2977 1672 2V , +3006 1671 0B , +3062 1670 3R , +3110 1672 6N , +3205 1671 6V , +3288 1672 2V , +3317 1672 6N , +3376 1671 6R , +3437 1670 5Z , +3491 1671 6V , +3575 1651 28 93 /3D +$C +3RbHUG4"&?]C+PE]C,RirpTT2^[Jr;^An65s3grIWrK*t='h6DF^7nJWD_7r<2jY:J,~> +, +3643 1671 7H , +3676 1670 5Z , +3767 1671 6J , +3853 1672 60 69 /5R +$C +1BfGjiK1'#,=ctPrr<#qs8MRA)uos<s8W-!s8W-!s8W-!s8T[WEraVc~> +, +3914 1672 2V , +3943 1672 5V , +4031 1671 51 73 /2Z +$C +5EglT+SH@k^#U$'FpL$[_nllJqgH5-rV-'chuE_+s8Vrqrg*Md?)<,t[I'gC0OD_A]3VSk$n_r) ++92B@s8W+%2$O#4bf,_b~> +, +4087 1670 5Z , +4184 1670 2L , +4236 1672 2X , +4304 1670 4E , +4356 1672 5T , +4495 1670 1X , +4555 1672 48 60 /6D +$C +3#\:_Rc"/Fs8W-!s8W-!s8SZ":&Re)s8W)TmI%f]?&K12K-?0~> +, +4686 1670 43 45 /3H +$C +--Bs+k9*%T&:G,"nKk6P"+"kk2m9\ds6X:'>#;Fq8V0QRcT29O5bS`qZp[t!6#*3fV#UJ^D6DID +fJ$MB6gQEDC((Zh~> +, +4738 1670 4T , +4806 1672 48 43 /6H +$C +0H-5NSR;Ess8W-!s8Tdkms/EWheWql2"95c2)l)`$#mk,\7%cB:]~> +, +4866 1672 3W , +4918 1672 5T , +4986 1653 50 62 /3L +$C +,QSa(*Ou4e)i(n?qnDP!s33hh+FG=,:SK,l5_4^;62F=JK7,(0FIu?9:]Jjms8W-$<YS$/^Tl+6_/^72='lfl"W]"Y>NX/kOJ@=k"( +:Aq2C~> +, +1871 1252 1A , +1939 1252 1X , +1999 1252 4E , +2059 1254 6H , +2119 1252 5L , +2210 1253 6J , +2260 1254 3Z , +2300 1252 3R , +2386 1253 4D , +2446 1252 3J , +2489 1252 3R , +2537 1253 6R , +2635 1253 2Z , +2690 1226 4H , +2784 1253 6J , +2872 1253 6V , +2955 1254 2V , +2984 1254 6N , +3043 1253 6R , +3104 1252 5Z , +3158 1253 6V , +3279 1254 5V , +3367 1253 6J , +3417 1254 6N , +3475 1253 6J , +3525 1225 4M , +3581 1252 3R , +3629 1254 3Z , +3707 1253 7H , +3740 1252 5Z , +3833 1252 3J , +3875 1252 3R , +3923 1254 6N , +3981 1253 6R , +4080 1254 5V , +4168 1252 5Z , +4223 1253 4D , +4283 1252 3J , +4326 1252 3R , +4411 1253 6J , +4461 1254 6N , +4519 1253 6R , +4618 1253 6F , +4674 1252 3R , +4721 1226 4H , +4777 1253 2Z , +4832 1252 5Z , +4887 1253 6J , +4937 1254 3Z , +4976 1253 6R , +719 1132 3R , +767 1133 0B , +823 1132 3R , +871 1134 6N , +929 1133 7H , +962 1132 3J , +1029 1133 7H , +1062 1132 5Z , +1142 1133 7H , +1174 1134 7M , +1232 1132 3R , +1305 1134 3F , +1367 1133 6F , +1447 1134 2V , +1476 1134 5V , +1565 1106 3V , +1625 1134 7D , +1654 1132 3R , +1702 1134 5V , +1790 1132 3R , +1838 1134 6N , +1896 1133 7H , +1929 1133 6J , +1979 1133 7H , +2011 1134 2V , +2040 1132 5Z , +2095 1134 6N , +2178 1134 6Z , +2212 1132 5Z , +2266 1134 3Z , +2331 1133 6R , +2392 1134 2V , +2421 1132 3J , +2463 1133 7H , +2496 1134 3Z , +2535 1134 2V , +2564 1133 2Z , +2620 1133 4D , +2680 1133 7H , +2713 1134 2V , +2742 1132 5Z , +2796 1134 6N , +2880 1133 7H , +2912 1132 5Z , +2992 1133 6J , +3042 1106 3V , +3102 1106 3V , +3162 1134 7D , +3191 1134 2V , +3220 1132 3N , +3265 1133 6J , +3315 1133 7H , +3347 1134 2V , +3376 1132 5Z , +3431 1134 6N , +3489 1132 3J , +3539 1133 4U , +719 956 5P , +780 955 0B , +837 954 3R , +884 956 6N , +1001 954 4T , +1069 954 1X , +1121 937 1I , +1189 956 0W , +1249 954 4X , +1301 956 2B , +1369 954 4X , +1429 956 0W , +1541 956 2V , +1570 954 3J , +1671 956 6N , +1729 954 5Z , +1784 955 7H , +1876 954 3N , +1920 954 5Z , +1975 956 5V , +2063 956 5V , +2152 954 5Z , +2206 956 6N , +2264 956 7D , +2293 928 4H , +2408 955 4D , +2468 954 3J , +2511 954 3R , +2559 955 6R , +2678 956 2V , +2707 956 6N , +2824 955 7H , +2857 956 7M , +2915 954 3R , +3023 955 6V , +3106 956 2V , +3135 956 6N , +3194 955 6R , +3255 954 5Z , +3309 955 6V , +3452 956 5V , +3540 955 6J , +3590 956 6N , +3648 955 6J , +3698 927 4M , +3754 954 3R , +3802 956 3Z , +3902 954 3R , +3950 956 6N , +4008 955 0B , +4065 956 2V , +4094 956 3Z , +4133 954 5Z , +4188 956 6N , +4246 956 5V , +4334 954 3R , +4382 956 6N , +4440 955 7H , +4481 955 4O , +4559 955 6J , +4669 956 6Z , +4702 955 4D , +4763 956 6N , +4821 954 3N , +4865 955 7H , +4898 956 2V , +4927 954 5Z , +4981 956 6N , +718 836 3S , +778 836 0S , +846 836 0W , +906 836 3W , +958 834 1A , +1026 862 2H , +1086 840 5H , +1138 834 4T , +1206 836 3W , +1258 834 4T , +1326 836 0W , +1386 834 4X , +1438 834 1A , +1506 834 4E , +1566 836 6H , +1657 808 3V , +1717 836 3Z , +1757 834 5Z , +1811 835 0B , +1868 836 2V , +1897 835 6R , +1958 834 3R , +2006 834 3J , +2087 835 7H , +2120 836 7M , +2178 834 3R , +2264 835 4D , +2324 834 3J , +2367 835 4D , +2427 835 6J , +2477 836 7D , +2543 836 2V , +2572 836 6N , +2630 835 7H , +2663 834 3R , +2711 836 3Z , +2750 836 6Z , +2784 835 6J , +2834 834 3N , +2878 834 3R , +2964 835 7H , +2997 834 5Z , +3089 834 4T , +3157 834 1X , +3209 817 1I , +3277 836 0W , +3337 834 4X , +3389 836 2B , +3457 834 4X , +3517 836 0W , +3578 835 4U , +3657 836 3F , +3718 836 7M , +3776 834 3R , +3861 836 7D , +3890 834 5Z , +3945 835 6V , +4028 858 1J , +4061 836 7D , +4090 834 3R , +4138 835 0B , +4195 834 3R , +4243 836 7D , +4309 836 2V , +4338 836 6N , +4396 835 7H , +4429 834 3R , +4477 836 3Z , +4516 836 6Z , +4550 835 6J , +4600 834 3N , +4644 834 3R , +4729 835 6V , +4812 836 2V , +4841 836 7D , +4871 836 7D , +4936 835 2Z , +4991 834 3R , +719 715 6R , +780 714 3R , +828 714 3J , +870 714 3N , +915 716 3Z , +954 716 2V , +983 715 2Z , +1039 714 3R , +1087 715 6R , +1173 716 6Z , +1206 716 2V , +1235 716 3Z , +1275 714 3J , +1317 715 7H , +1350 701 0L , +1400 716 6Z , +1433 714 5Z , +1487 716 3Z , +1552 714 3N , +1596 714 5Z , +1651 716 5V , +1739 688 3V , +1799 716 7D , +1828 714 3R , +1876 715 7H , +1909 714 3R , +1957 716 6N , +2015 714 3R , +2063 714 3J , +2105 714 3J , +2148 701 0L , +2198 715 7H , +2230 716 7M , +2289 714 3R , +2336 716 6N , +2420 715 7H , +2452 716 7M , +2510 714 3R , +2583 716 6N , +2642 714 5Z , +2696 716 3Z , +2736 716 5V , +2824 715 6J , +2874 716 7D , +2928 714 3N , +2972 715 6J , +3022 714 3J , +3065 714 3R , +3138 715 4D , +3198 714 3J , +3240 716 2V , +3270 716 6N , +3328 687 4M , +3406 714 4T , +3474 716 3W , +3526 714 4T , +3594 716 0W , +3654 714 4X , +3706 714 1A , +3774 714 4E , +3834 716 6H , +3895 715 4U , +cleartomark end end pagesave restore showpage +%%PageTrailer +%%Page: 2 2 +%%BeginPageSetup +GS_pswrite_2_0_1001 begin +612 792 /letter setpagesize +/pagesave save store 100 dict begin +0.1 0.1 scale +%%EndPageSetup +gsave mark +K +Q q +0 0 6120 7920 re +Y +2796 7462 32 7 /6A +$C +0H"*/rO`~> +, +K +2854 7440 48 69 /1B +$C +0FGP^n$52ZaH1;q]6<Sr]t8ITgUFe<mG#+^GIP22]tO;mGPhA[s8B.im<rhtm49s$@$QdRX[?,' +(f4`k^]~> +, +2929 7462 6A , +720 7080 47 66 /4A +$C +/df5imdBG!U=fSWgUD(V]6<Sr[r1$6G5#n2n%3q\rpRT]s*t%I\+[LY\7o?eEF2euTnNqC$5b3/2u~> +, +770 7079 20 15 /2H +$C +1`Rl=FT;<CC)Bb~> +, +845 7080 61 68 /4C +$C +4q2cHC7&tVgT^5YLV^^^%JKhVs1\O-s8W,qp&;\:oX\9Rbl^EY@'U4jr&fVY*sNeq52U:_s6mGs +qu?]rp&@[g8t`O@C_ZBCZ5\)i~> +, +912 7078 48 49 /7C +$C ++e0*'9_`6r:#XV_"O!ed6$V>jkWYWRs82iRDn"AILVk7I@?(jB!PGH;,Rcp:^1i">p"EUXO&q(0 +WsT7`0Mh~> +, +962 7078 40 49 /4G +$C +3f>g'n3Oo%%j7D36+e>sT3%oiqqqCITh04KCBXhpb6^M`XXX\d$A^)?6ToH"%MlEM^]+8HpKJ%X +L).gSG[X3`GQ~> +, +1006 7080 30 71 /5K +$C +0H#A(KA-A*s8W-!s8W-!s8?^e)F*gYGmktL:jE#]AO4eC?2sl,C=Fr1~> +, +1039 7078 41 49 /4I +$C ++N9T']F[%ge#bGo7o1=Q5gn17;Yp%#qZ$Tos!&T^s1`I=XnrMYL)(WnLN)4+"pt~> +, +1109 7080 58 68 /2P +$C +4q,'94n"JT*ZtF^qu>RBOg*aCs8W-!s8W-!s8W-!s8W,JT]X(grr~> +, +1170 7080 5K , +1203 7080 86 47 /7I +$C +/f@-r.*sdMrB=m)FU+"'Bs740s8W-!s8W-!s8W-!s8W-!s8W-!s/Q+QIdM<I<5NE;3H3>8%'hj( +p6tFJT[_="2"DKC2$[PDT](P4'E~> +, +1292 7078 55 74 /2T +$C +.LKf,!c/Ep#WtK1LQKo%":RC8hODu?^>H[(s4dRgs8N&up&Fu?95CrQ9+2UOORMR[]3I5IiJ#/Q +a8c2>s8T9b_aj]R*_6nS,<,~> +, +1353 7078 52 49 /7M +$C ++U++g6m-H$K]n$]*<H\uDNfBa^72=,YM9*AIfKHJs8W&LYOB6S^Uh#29@^83L6ODnTnNn(#T`~> +, +1401 7078 38 74 /2X +$C +4t!i<^[;&>s)7dag]-%-htI*Ds0qsAmJlSRDu5%]J(st[pAaja~> +, +1438 7080 65 68 /7A +$C +.D_q^.KGB-^]4?6s8W-!s8W-!s8W-!s3*T]J,[4_s8Tk1e(531rV~> +, +1505 7080 60 72 /2Z +$C +0H!84,PBKR"/)b=\m6u]\m6qT9;U)0dd,?GFLkSVA2rn_hmM5+nDA/ng[4_3&)V<0q[]t?hYm?A +s8W-!s8T11B`H;mj=qeJ,Cf~> +, +719 6921 60 69 /3F +$C +226&?X:j(Vs8W-!s8W-!s8W-!s8W-!s3*SAs8Vcls8W)e]ja4A~> +, +780 6921 58 72 /7M +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qco"??GfF?_0Zp7?*;dfE5?Pos8W-!s7M]^ +s+AH!#Cl~> +, +838 6921 28 69 /2V +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +868 6919 40 49 /6H +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +935 6919 6H , +977 6919 46 49 /3R +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +1025 6919 42 49 /6L +$C +-,RJ0,D$.,dtC(&BFm314U.0';Uopg0D5AFqu:T"GOO;dD/K!tg22NP(b6GB_Li1('E~> +, +1070 6920 33 63 /4J +$C +22MSu?.7U@]^UPYFoVLAs8W-!s8W,u?o*0m2B4J$*'aK's6osmLPLB~> +, +1102 6921 2V , +1131 6919 52 49 /5Z +$C +-,RJ#Jd4TY+S0[\0^1M^2l>gu<qXnToWS5,FoUmEs8W%)rjpk_Fh_cG[d)RJ9#F9R9#61SMQibj +PlW!~> +, +1186 6921 58 47 /3P +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qcY0ReuU^)_0-YK@^p/t4&U'%SJqnU0Mh~> +, +1269 6919 6H , +1312 6921 7M , +1370 6919 5Z , +1424 6920 82 48 /6V +$C +--V`>h0uuM[/YPgrB9d@+!SJRhOje2e\;&ZVUk)5[%C.MH@FT)^[7iQJ+m9?>HRpIY?pm>YNtG4 +lW<i0='tEF]"Q[tSt*;=F&6Q9h].OYhu~> +, +1508 6919 6H , +1575 6920 48 48 /3L +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +1650 6919 6H , +1693 6921 2V , +1722 6921 88 47 /5V +$C +0Eoc'K:jmrq)D8+/;`aO>(?SPs8W-!s8W-!s8W-!s8W-!s8W-!ri?'Cm5<d*9l_ZL&>Ouf@AMUU +!4rFJ@)DUq/%!gM.m^-W@A]^a-57F:+CLi~> +, +1810 6893 56 75 /3V +$C +/d=P.LUCpts8W-!s8W*W++t[YiU7o"_nlWIR!K5#0_F9"If'$2n,<4bs7cQnYPu4PGO6ub73.&n +$mep_/@[=OG.U\h_[93uT^3@4(ao~> +, +1870 6921 28 72 /7D +$C +0EsY0/Z\pOs8W-!s8W-!s8W-!s8W-!s8W-!lS&`s4p`JB2)k~> +, +1899 6919 3R , +1972 6921 3F , +2033 6920 56 73 /3H +$C ++LJp$5kmV@ADpOa$L)XK9;U)$FLka1QV41'l#aLB/sf3GX^kL=qgH2riP+2XpA99P(k'-9mIh'p +IJ`R7s8W-!s8K>)a7J5P5dOC>~> +, +2114 6920 3L , +2164 6893 3V , +2224 6893 3V , +2284 6921 7D , +2313 6921 2V , +2342 6919 6L , +2387 6920 3L , +2437 6920 4J , +2469 6921 2V , +2498 6919 5Z , +2553 6921 3P , +2636 6920 4J , +2669 6921 7M , +2727 6920 3L , +2777 6920 4J , +2835 6920 59 48 /7B +$C +,6G^d:()^rSt(K"WZ[OKKH'R@829B/hbX7Os8W-!s8W-!s8W-!s8K(pJ6^S3s7>3jJF\7`JS/"W +3,n?~> +, +2895 6919 6H , +2937 6919 3R , +2985 6919 6H , +3053 6919 5Z , +3107 6921 3P , +3165 6921 7D , +3195 6893 55 74 /4H +$C +3%Y6hmI,4)4=>r&qn9amhgXIsrOVILFl0+]j?`gAhs!)u2d]ipr?hQFX8\<4pIY>3Is(D_lMA*j +\l\aa"r!=,"Tb7n~> +, +3275 6920 4J , +3308 6921 7M , +3366 6919 3R , +3439 6921 35 73 /6Z +$C +0Esb+"P*PPs8W-!s8W-!s8V6a07FEB%#Z/ks8W,Vqtkj:[L0nZ`p\\%_LM~> +, +3472 6920 7B , +3532 6921 3P , +3591 6920 59 74 /3T +$C +,6PadBFG%9o].Bt<'f[3Jd*;_2s<!EI=:?D^Ak&0qZ$Tqs8DutIK/3^Iqs28[alB*$o"p%K#8Q` +"?mZ-1+_tqs8W-!s8?J%(]Hk@a^F0ZLO]~> +, +3652 6920 3L , +3702 6921 5V , +3790 6919 3R , +3838 6921 3P , +3896 6920 4J , +3929 6920 3L , +3979 6921 7D , +4033 6921 3F , +4094 6920 3H , +4175 6921 6Z , +4208 6920 7B , +4268 6921 3P , +4327 6919 6L , +4371 6920 4J , +4404 6921 2V , +4433 6919 5Z , +4487 6921 3P , +4545 6919 6H , +4596 6920 11 12 /0D +$X +*rnNUJ&)*Bs5<q8s5<q8s5<pmJ&!-+~> +, +720 6670 4A , +770 6669 2H , +795 6670 46 67 /6W +$C +4rW=((^sTUs8W-!s8W-!s8W-!s8W-!S6ZBXr'(_0n\`3(0\H\`_nk9d*ZBP~> +, +845 6669 2H , +920 6670 59 68 /7I +$C +2@X$h3"]p%s8W-!s8W-!s6"uU6NQC8&)SW7nDA/ng[FV0^]33ks6K]g?$]a-0U3!7"YF,d:]~> +, +981 6670 39 47 /2K +$C +0H$MYTKVuJs8W-!s8W-!pTf^+(gLC'+S,W)pYU$GG9Me#iPF:~> +, +1020 6668 46 49 /5G +$C ++U++g6m1FjKH4dS%@Npn#4R8n%;9Hkde`s0run4!%=!O$"j!oDs6oj9f)MddD(?#G0i6DS%7:I2 +M4a~> +, +1070 6670 30 72 /4M +$C +0H#A/"5dJcs8W-!s8W-!s8W-!s8W-!s8W,lQOP&4THo7;eo5j~> +, +1103 6670 5K , +1137 6670 86 47 /2R +$C +/f@-r.*sdMrB=m)FU+"'Bs740s8W-!s8W-!s8W-!s8W-!s8W-!s/Q+QIdM<I<5NE;3H3>8%'hj( +p6tFJT[_="2"DKC2$[PDT](P4'E~> +, +1225 6670 5K , +1259 6670 59 47 /0D +$C +/fA4$TE!.:j:ducs8W-!s8W-!s8W-!s8W-!YP,S6V*Tg/bD(U.Ap1dlk(&#^$q:pOW&S<Uhu~> +, +1320 6668 7C , +1370 6670 2K , +1409 6670 5K , +1442 6668 5G , +1492 6668 4G , +719 6511 3F , +780 6511 7M , +838 6509 3R , +911 6509 3R , +959 6511 51 47 /1L +$C +0HhbLCT6iu*o7X>[[4%/>?fXbXeft#>>!^U>GYf:I8\U0m^,;BmF&STVWhAmPBq,U8\.XIjoKYt +a@E.\>`fE~> +, +1011 6510 3L , +1061 6511 5V , +1149 6483 3V , +1209 6511 7D , +1238 6509 3R , +1311 6510 3L , +1361 6509 6H , +1404 6509 6H , +1446 6510 7B , +1506 6511 5V , +1595 6509 3R , +1643 6509 6H , +1710 6510 4J , +1743 6511 7M , +1801 6510 3L , +1851 6510 4J , +1908 6510 4J , +1941 6511 7M , +1999 6509 3R , +2078 6511 47 56 /0M +$C +-Oe`/+Q*5!s8W-!s8W-!s8W-!,J;WWs8W-!s7hZE~> +, +2138 6511 48 60 /3M +$C +,D@S_MVl*@fa*!YQV41'l#aLB/sf5-db7nuBjmiqb8kc<I>?S9^>Ek<fR:IQmIpF)L'3#)Y!;sd +s8V/![Jg~> +, +2216 6511 5V , +2304 6509 5Z , +2359 6510 3T , +2420 6510 7B , +2480 6511 7D , +2509 6509 3R , +2582 6511 2V , +2611 6509 6H , +2679 6511 7D , +2708 6509 5Z , +2762 6510 3L , +2812 6510 3T , +2874 6509 3R , +2921 6510 3T , +3008 6510 3L , +3058 6509 6H , +3123 6509 52 58 /1V +$C ++Dt22n;'$mK;'!rU-/Uq+pCM##-'`as8W-!s8W-!s8P8$eb5lLs8W-!qLA~> +, +3191 6511 3M , +3252 6510 11 47 /4O +$X +*WSETJ&)*Bs5<q8s5<q8s58CB5CagUzzzzzzzzzzz!!")@5Ce7!s5<q8s5<q8s5<pmJ&":!*WQ~> +, +872 6346 38 56 /4P +$C +,DN$XWNH4#s8W-!s8W-!s-s8YmiVATs8W,W~> +, +923 6346 44 40 /0A +$C +-D7or'5@D&4N`HZs8W-!s8W-!s8W-!rr)e>>?nGN?J8::N#53m?)r\o6OH..~> +, +979 6344 41 42 /4T +$C +.EY!]i<+`R#=MDD+G#<$)k_gt3^NJ=&(Q-Ds8DhWYG],6qeL-&>AIZ$Y[E9^iJR#A_J0Jja`R~> +, +1034 6346 38 54 /0E +$C +,DN$XWNH4#s8W-!s8W-!s8W-!s8W+h"mbU~> +, +1084 6344 45 40 /4X +$C +24P6g0HeTYT^;uY7s.?AQ]r?O57a[\huE`Vs8W-!s8W-!s8W,@W)HM??esW~> +, +1140 6344 46 56 /0I +$C +24TCB&8#?;%o5Ss3hSan^Hjg,%J6%[p%7qLp&Cris8W+7qu>C-g=ooW51j2q?%s!Y0UH7\$\l0" +Eh.4Ms8W"J"L#H~> +, +1193 6344 42 42 /5B +$C ++qA`!i<+`R#7-,NF9mg@JdnLoU`Vrs<Rl6lU)QS9o#/-4^?`AAm]E=%-#IHPQ%K4@6F@4M0N)1A~> +, +1309 6374 28 27 /0O +$C +3Lr3Fdng#Dl[RXgs8VD3?iU0)Ds`"D~> +, +1354 6344 41 53 /5H +$C ++pr&gi<,b:3[5fp76'KO+P.W`s8W-!s8W-!q)&U5qbp#bs8W,,~> +, +1410 6346 43 54 /0S +$C +,D7oY.\F=OlkqJ)l#aLB/sekG\m6qT95.h2MUknq^Mg@ODn"KgpA5B0gYokC$iBVSO8o7[r^R9%hu~> +, +1478 6344 14 13 /5L +$X +!rsG$5Oa0tJ,''As8;opJ,"Ng5O]cQ#Cl~> +, +1513 6346 53 40 /0W +$C +,D$Sb:*i!:X&[JDoe4)[s8W-!s8W-!s8W-!s8W-!s8VhCrSP!6GO6%aV'Cjf,a`@J2Cl/bg1i/] +_Na7$-i~> +, +1579 6374 0O , +1632 6333 20 51 /5P +$C +,JD]Qhm`?ln([a5rpB[]EW>Te&3=q!^T6YL2#~> +, +1084 6244 5H , +1140 6246 0S , +1208 6244 14 40 /1A +$X +!rsG$5Oa0tJ,''As8;opJ,"Ng5O]cQ#CldSzzzzzz!!!*$+5fBQJ,"Ngs8;ops8;opJ+u7t5N!'f~> +, +1302 6246 42 51 /5T +$C +1CU:4e;SnWs8W-!s8W-!s8W'gZ`RR6s8W-!plFn~> +, +1356 6246 0S , +1416 6233 5P , +1100 6144 5L , +1154 6144 5L , +1208 6144 5L , +872 6046 4P , +923 6046 0A , +980 6046 4P , +1030 6044 5H , +1107 6035 14 66 /1E +$X +!#tu$!.4co!;HQh!Up-Z"5j:>#J^S[%tG1@++PF5*rnM*4odbHIK4`qHiSNoHiX'EquHKlp]1'h +p]1'hp]1'hp]1'hp]1'hquHWpquD*EHiSNoIK2P34odbH*rmA_*rlh%%tG2+#J^S["5j:>!Up*Y +!;HP=!.4c/!#ttE~> +, +1141 6044 4T , +1192 6044 5H , +1246 6046 46 38 /5X +$C +,D,!,?Cg=aGVWt6=D:u3)aR\#g/cY1Q*dZiD(B=)9#XuAl-k;W_kc*8km$B28\.XEDLubiFIRk) +j9)9MlV@~> +, +1300 6044 5H , +1370 6044 1A , +1465 6046 42 39 /1I +$C +,D/u\C/Fs1s8W-!s81[ILR($hp;&?uC$gU.*J4YuMW(Uj'LP[~> +, +1517 6044 5B , +1575 6046 40 54 /6B +$C +,D/u\C.NjSs8W-!s8W-!s5h(sT=#q/s8RQ(]GMcm6ZCNl:]~> +, +1678 6046 43 51 /1M +$C +-D?cY_m_VM5r^g@HoKrlg[FUG^Ams)s8W-!s8VE`J$6#h](ER>H<_c@5pXquon?eH~> +, +1735 6046 1I , +1788 6044 43 42 /6F +$C +,TP#L&8#>o#A?74OQqE%jo#D[9RK$r^OP_N^O<i4p-YS`GDD9t#2F_.rjn\eJV:<EMT%qZ@6oSk'E~> +, +1838 6046 50 38 /1Q +$C +,T3QTor[V2r55mG]"e:BBn,tcheb%Hs3k[fIJs1f^\oS8m=50#Y.K.s5NuO)r^R2;!U6`b2#~> +, +1896 6069 42 4 /6J +$C +,D0PjVu~> +, +1951 6050 41 43 /1U +$C +,P3#tLCMmT_hK-biO]R:E5RDM2[hbX(i[BIiJ2:`KG5Q&"[PIOJqOg\W$k7L:kF?8"URL&JtT?M5Q~> +, +2004 6044 42 54 /6N +$C ++pr&iKH),u3(-.q"<4"dFG"\)TUXabTPLRm^[(q"s8Vilp-u60pY0'0>ALXN_Ur9/O0E#Y$s-kV +_J0Jj^]~> +, +2058 6044 42 42 /1Y +$C +.EZ`;KH),n#=Lqj":`^D\kUUk:J&5_DbobKli7"^?[CH*g0_:R[&p0Z(;gGG"qXfbe1dQ38;.~> +, +2111 6046 0A , +2164 6044 5H , +2219 6044 5B , +2272 6046 5X , +2326 6044 5H , +2388 6033 19 26 /6R +$C +,LlJ^II@"0^AdT7hg]k-J,~> +, +2489 6046 0A , +2546 6046 4P , +2600 6046 0E , +2666 6044 1A , +2762 6046 0E , +2816 6046 4P , +2871 6044 36 42 /2C +$C +3g?-NOmn"#&:Fe?)%QiZi<JeD[pK+$,onI3YY&[9PQl@TTb&?"6]=EJcra9t4X^6@s(uR+\1h," +6fG2bC()8Se,~> +, +2920 6044 5H , +3030 6044 1Y , +3087 6046 6B , +3195 6044 2C , +3244 6044 5H , +3301 6046 1I , +3356 6046 4P , +3407 6046 0A , +3462 6029 45 57 /6V +$C +-O)9opF=.7E8A.oqnN1,$nhlM&:H_S'Al'+^4Hgj%J6%P5.\JBp&Cris8VJ9Ir"psqeL$a5@H1^ +$$I.X64Ut:CLL0Z6RgL~> +, +3523 6035 15 66 /2G +$X +?i]Zrp],[AHiQ>1*WR8^%fd,j#J^S[#J^H""5j4L!Up-Z!;HQh!;HQl!.4co!.4cq!.Fos!'UBH +!'UBH!'UBH!'UBH!'UBH!.Fos!.4co!.4eE!;HQh!;HTi!Up-Z"5j:>#N,j&#J^k#%tG`%*rnJ) +490a/p]0d`n,P]R~> +, +881 5935 20 66 /6Z +$C ++dHh8M=jqWs8W-!s8Vrl:eDAOmEZffJ,fQKs8W,un%/g5gM.0_~> +, +1084 5844 5H , +1140 5846 0S , +1246 5863 46 17 /2K +$C +,D)aTW;jrsWD@7~> +, +1412 5846 0E , +1464 5844 1Y , +1518 5844 6F , +1572 5844 0I , +1680 5846 5T , +1734 5846 0S , +1842 5846 5T , +1896 5846 0S , +1950 5869 6J , +2005 5850 1U , +2056 5846 41 51 /7D +$C +-D4jteGK:Gs8W-!aD;=s%hC<paMIB'Dng5*^&S-*rjqa5oXIPG;JI+r_QZi~> +, +2107 5846 52 51 /2O +$C +-D3Z'#hSdJ)%qG-^9.?^>@1aG^9.16I:\c"?WZrfmB<_J?WZrfmB<_J?WUObmB<_J=dV/E]D~> +, +2166 5846 5T , +2219 5846 45 51 /7H +$C +-D81?0@RY(Sn1:hs8W-!s8W-!s8W+[s-BG[s8W-!s8W-!s8U8s$3BF_^J-r~> +, +2280 5833 5P , +1100 5744 5L , +1154 5744 5L , +1208 5744 5L , +881 5635 20 66 /2S +$C +,F8(AGji9Es8W-!s8Vi\fK0T9V*t,4YQ+Y&s8W,tF]]pr;RKo*~> +, +720 5395 4A , +770 5394 2H , +795 5395 4A , +845 5394 2H , +920 5393 69 71 /7L +$C +,lqOI'M&cl_$:)Q';l+j>hos/,=)E?!XD!qW=GjV<4skb<55:&rI2N]s8Th5^YR"9hg]j"ID5Zo +g=U1X2AfI3:r.agLC>Rb:gg(q)o)~> +, +992 5395 39 47 /5I +$C +0H$MYTKVuJs8W-!s8W-!pTf^+(gLC'+S,W)pYU$GG9Me#iPF:~> +, +1031 5393 5G , +1081 5393 7C , +1131 5393 32 65 /0F +$C +.EZ`8VbXVnZpArR#H(r/s8W-!s8W-!q/FU2G7Ntp8,rVhs7Ni+LP*L[~> +, +1164 5395 5K , +1198 5395 0D , +1259 5368 53 74 /2W +$C +.D[AsDZh'_KH1WC*<HH/+N)'6OFMAAn#PpGs1R:dC)b'*fMKR%-!KV<_SXAk7^%/Xh2oL.5_/q@ +#W`G-%!08pdVi2YrRJT2p](9fs46"J6Xd$EXfDjY@q7A$$n,OUE:<~> +, +1339 5393 7C , +1414 5393 0F , +1448 5393 52 49 /7M +$C ++U++g6m-H$K]n$]*<H\uDNfBa^72=,YM9*AIfKHJs8W&LYOB6S^Uh#29@^83L6ODnTnNn(#T`~> +, +1503 5369 56 73 /2Y +$C +0H#B9QnN4+s8W-!s8V8CQOen!_qlG%7D'0jKH&BdDcb]fhr"<\p](9Ns8Ke5YN]nI\7oB'd&DQ@ +>Vg_4Y11Z82'Ie**&+&EJq*~> +, +1564 5395 4M , +1598 5393 5G , +1648 5395 55 46 /2G +$C ++N308lb?6ErglC\e\-CBqJO$>h0h4h:&_W"YGV>(e(40jlhdkb*0(n+@AEk<~> +, +1703 5393 5G , +1753 5395 4M , +719 5236 3F , +780 5236 58 72 /7M +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qco"??GfF?_0Zp7?*;dfE5?Pos8W-!s7M]^ +s+AH!#Cl~> +, +838 5234 3R , +916 5236 35 73 /4B +$C +0Esb+"P*PPs8W-!s8W-!s8V6a07FEB%#Z/ks8W,Vqtkj:[L0nZ`p\\%_LM~> +, +949 5234 5Z , +1004 5236 28 72 /7D +$C +0EsY0/Z\pOs8W-!s8W-!s8W-!s8W-!s8W-!lS&`s4p`JB2)k~> +, +1033 5236 7D , +1062 5234 5Z , +1117 5235 82 48 /3X +$C +--V`>h0uuM[/YPgrB9d@+!SJRhOje2e\;&ZVUk)5[%C.MH@FT)^[7iQJ+m9?>HRpIY?pm>YNtG4 +lW<i0='tEF]"Q[tSt*;=F&6Q9h].OYhu~> +, +1200 5236 2V , +1229 5236 3P , +1287 5207 55 76 /7K +$C ++p6(UU(D9p_BI4g&2<;jh&tN#o\CkkFnFSgJ,d.Xs(u]/=CJ9h&r&_O@t^O*>/J*d6!EuahV:&- +aAQDs_@@-!5s.7@DNJb"HG82g\$+]hs53/>Bn"bZS_ZAA[]D/Z`.uhrTnOs!J,~> +, +1373 5236 4B , +1406 5236 38 47 /3Z +$C +0H#A^_V2d)s8W-!s8W-!hqnUF[?3rg<K18!0`S\NG9dORiPEE.~> +, +1446 5235 3L , +1496 5207 7K , +1551 5236 5V , +1640 5234 3R , +1688 5236 3P , +1746 5235 4J , +1809 5236 5V , +1897 5235 3L , +1947 5235 3H , +2003 5234 3R , +2051 5234 6H , +2123 5235 4J , +2156 5236 7M , +2214 5234 3R , +2292 5236 60 69 /5R +$C +1BfGjiK1'#,=ctPrr<#qs8MRA)uos<s8W-!s8W-!s8W-!s8T[WEraVc~> +, +2353 5236 2V , +2382 5236 5V , +2470 5235 51 73 /2Z +$C +5EglT+SH@k^#U$'FpL$[_nllJqgH5-rV-'chuE_+s8Vrqrg*Md?)<,t[I'gC0OD_A]3VSk$n_r) ++92B@s8W+%2$O#4bf,_b~> +, +2526 5234 5Z , +2610 5236 2V , +2639 5235 3T , +2700 5234 3R , +2748 5236 3P , +2806 5235 4J , +2839 5236 2V , +2868 5236 4B , +2901 5236 2V , +2930 5234 3R , +2978 5236 3Z , +3047 5234 1V , +3115 5234 47 45 /4V +$C ++PbNY":bub6JI/]+?BW7cp>6;dVhoQ]fg:0<qZHofDkmNmA9jMDd-Gsf%O0Q[[%b4@>(^9K!A.h +L(kIQ~> +, +3167 5217 56 62 /1I +$C +3!q,3aUeFOs8W,sL(f.]^j&07KBS.Ncm,Lc$,2!#oUEfYVpfsAH@Pgis8W,r?GEo@[G>\?a(]_F +m=`,+Ph9rm$$Ii'Xr("?'E~> +, +3258 5236 3Z , +3298 5234 3R , +3345 5236 4B , +3379 5234 3R , +3427 5236 3Z , +3497 5235 4J , +3530 5234 5Z , +3615 5235 3L , +3695 5236 3P , +3753 5234 3R , +3801 5235 3X , +3921 5236 48 43 /6H +$C +0H-5NSR;Ess8W-!s8Tdkms/EWheWql2"95c2)l)`$#mk,\7%cB:]~> +, +3981 5234 46 45 /1Z +$C ++O4a+i.reS6.$'k_BN_8!X@j2h&tE;W_I/@C:^R_oWehD^WDC>HN)Lg[CpEoV/7fdL6]!.K*7m( +:t.1mJq*~> +, +4041 5236 48 60 /6D +$C +3#\:_Rc"/Fs8W-!s8W-!s8SZ":&Re)s8W)TmI%f]?&K12K-?0~> +, +4167 5236 0M , +4227 5236 3M , +4287 5262 47 4 /2H +$C +/ddj:TE~> +, +4347 5240 46 48 /5H +$C +0W7)r4)i)l*&-_=DA[?1L)l$X3,TRP_hK1e%DrYmE5TO"&5\Vq#Uhu*$50#*"UHMK&6'>dT`k`h +$A*pH(9An~> +, +4407 5236 0M , +4467 5234 4V , +4519 5217 1I , +4587 5236 45 60 /0W +$C +2@YoEU`9@6s8W-!s8W-!s8W-!s8W-!s3/9>qu~> +, +4647 5234 1Z , +4699 5236 59 42 /4Z +$C +-3a&@>IqP[\#uk!pK,sIp!p`u]g'*B]!niOVlf4`<qY"VFhKqV]\mHa#(<CEo`~> +, +4767 5234 1Z , +4827 5236 0W , +4911 5236 4B , +4944 5234 5Z , +4999 5236 3Z , +719 5115 7B , +779 5114 40 49 /3J +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +822 5114 3R , +895 5116 2V , +924 5116 3P , +1007 5116 7D , +1036 5115 3L , +1086 5115 4J , +1119 5114 3R , +1166 5116 3Z , +1231 5116 3F , +1292 5115 3H , +1373 5114 6L , +1417 5114 5Z , +1472 5116 5V , +1560 5116 5V , +1648 5115 3L , +1698 5116 3P , +1757 5115 3T , +1818 5114 3J , +1868 5115 4O , +1084 4949 41 53 /0Q +$C ++pr&gi<,b:3[5fp76'KO+P.W`s8W-!s8W-!q)&U5qbp#bs8W,,~> +, +1140 4949 1Y , +1190 4934 47 57 /0C +$C +,DOA<cbKM[s8W"e0*iX*5(hf*SGFJXpd)WXG_@%'ldL@4qtbgBs0_j7^Y2og=_!2QCaI_B.5_IK +JmF9$>VMlh.41\~> +, +1316 4949 1A , +1354 4968 2K , +1462 4949 0Q , +1518 4951 0S , +1572 4974 6J , +1627 4955 1U , +1678 4949 0Q , +1734 4949 1Y , +1784 4934 0C , +1844 4951 0E , +1895 4949 5B , +1946 4951 50 38 /3C +$C ++NIhb/bO$fDbof)Y-%#jHL#m,Fa\CN?!Gobe,GP\X*X'f\Jtl#!>Y(gTE~> +, +2003 4949 5B , +2060 4951 0E , +2133 4940 1E , +2167 4949 4T , +2218 4949 0Q , +2272 4951 5X , +2326 4949 0Q , +2396 4949 5L , +2439 4949 2C , +2491 4949 4T , +2545 4951 42 39 /5Z +$C +,D/u\C/Fs1s8W-!s81[ILR($hp;&?uC$gU.*J4YuMW(Uj'LP[~> +, +2597 4949 5B , +2651 4949 5B , +2705 4951 0A , +2766 4938 6R , +2875 4979 0O , +2922 4974 6J , +2974 4951 5X , +3088 4951 34 55 /3E +$C +,D/uZWR_%Ks8W-!s8W-!s8W-!s7m`"++rp3%tbiC%gSQu~> +, +3140 4949 37 56 /0I +$C +2:=`8&9*9"#`*[iJ[u0!6+RH2gg>9_^]1E^lEeo<)W?@T+-nE.E4B\9$]k>fs8W"OAc's~> +, +3196 4949 34 58 /3I +$C +20(rQ6,F,&&^AZg\j?"2S(C^@8\b:$>Q=PLs8W-!s8W,6?h^bkIsTi*[^WB@Ya'hI=K>98L(r0'~> +, +3300 4974 6J , +3352 4934 46 55 /0M +$C +/d:M:;ldCpqgSFVn%ZI%\RW3Hm[)\)p?@":?Z)4bV=s/%\mK?AgTRL?l+6_/^718$bs:pMG.#*~> +, +3466 4951 3E , +3518 4949 0I , +3574 4949 3I , +3631 4979 0O , +3685 4940 15 66 /2G +$X +?i]Zrp],[AHiQ>1*WR8^%fd,j#J^S[#J^H""5j4L!Up-Z!;HQh!;HQl!.4co!.4cq!.Fos!'UBH +!'UBH!'UBH!'UBH!'UBH!.Fos!.4co!.4eE!;HQh!;HTi!Up-Z"5j:>#N,j&#J^k#%tG`%*rnJ) +490a/p]0d`n,P]R~> +, +3738 4938 5P , +719 4766 3F , +780 4766 7M , +838 4764 3R , +916 4765 7B , +976 4738 3V , +1036 4738 3V , +1096 4764 3R , +1144 4766 3Z , +1214 4766 7D , +1243 4764 3R , +1291 4766 4B , +1324 4765 4J , +1387 4764 6L , +1431 4764 52 49 /3B +$C +-,RJ#Jd4TY+S0[\0^1M^2l>gu<qXnToWS5,FoUmEs8W%)rjpk_Fh_cG[d)RJ9#F9R9#61SMQibj +PlW!~> +, +1486 4766 3Z , +1525 4766 3P , +1584 4764 3R , +1632 4766 3Z , +1702 4764 3B , +1757 4766 4B , +1820 4765 4J , +1853 4766 7M , +1911 4766 2V , +1940 4764 3J , +2012 4765 3X , +2095 4766 2V , +2124 4766 3P , +2183 4765 3T , +2244 4764 3B , +2298 4765 3X , +2411 4765 3X , +2494 4766 2V , +2523 4766 7D , +2553 4766 7D , +2611 4765 2Z , +2666 4764 3R , +2744 4765 3L , +2794 4765 4J , +2857 4738 3V , +2917 4764 3B , +2972 4766 2V , +3001 4766 3P , +3059 4765 4J , +3122 4745 31 93 /5Z +$C +"KA5$<2ioaX%J_TkuZ=+f<21RX8]1"oY:G+s8W,ds8D]jp[@j)hqRkn]A*&HgV(4BmCQ0~> +, +3155 4766 43 69 /5Q +$C +-jHk!!TAb"J,fQKs8W-!s8W-!s8W-!s8U<pLX:JlKAhU%NZJ]A#D\(iJ,~> +, +3205 4764 47 71 /3M +$C ++bZ9b&;.g[6b3C/4U1*mheu6;Dr-tcl0E<?(B4?kqYKH%VRoJ1G*^#'_(8Wma':L>$\fH%$]k>f +s82iW2';kune/#~> +, +3255 4764 47 71 /5M +$C ++p(%4KH3$?0=h9*Uu%T:h0h4h:&_W*^Uj:An%\m0?iC$)s8W-!s82i"otU8$qka8c?WR/k^SPda +V/7^e'!Y9_0VH6I~> +, +3305 4751 23 27 /0L +$C +0k&hmpMY93^MeSYh7p_lq5@]N~> +, +3360 4766 5Q , +3410 4764 3M , +3460 4764 5M , +3510 4745 28 93 /3D +$C +3RbHUG4"&?]C+PE]C,RirpTT2^[Jr;^An65s3grIWrK*t='h6DF^7nJWD_7r<2jY:J,~> +, +3543 4751 0L , +3598 4765 3X , +3681 4766 7M , +3740 4764 3R , +3787 4766 3Z , +3827 4764 3R , +3905 4745 5Z , +3938 4764 5M , +3988 4751 0L , +4013 4764 5M , +4063 4745 3D , +4126 4766 2V , +4155 4764 3J , +4227 4765 4J , +4260 4766 7M , +4318 4764 3R , +4396 4765 7B , +4456 4738 3V , +4516 4738 3V , +4576 4764 3R , +4624 4766 3Z , +4694 4766 7D , +4723 4764 3R , +4771 4766 4B , +4804 4765 4J , +4867 4764 6L , +4911 4764 3B , +4966 4766 3Z , +5005 4788 6A , +719 4646 3P , +777 4644 3R , +825 4646 3Z , +893 4644 3B , +948 4646 4B , +1009 4645 4J , +1042 4646 7M , +1100 4644 3R , +1176 4644 3J , +1218 4644 6L , +1263 4646 3Z , +1302 4644 3R , +1350 4644 3R , +1398 4646 3P , +1456 4631 23 61 /4K +$C +0k&hmpMY93^MeSYh=p[<GW$"$s8V\cKH39Qs(g>C'E~> +, +1509 4645 49 49 /0R +$C +0LWIuBK`$_G15:74P>iOnD+<@h)?.ig=r\*mFD0;NrIZ1ldPaI&ao>+heop[J#4:<_$+[[:CUFm +DeZ]Fg()T=)u~> +, +1595 4644 6L , +1639 4644 3B , +1694 4644 3B , +1749 4646 3Z , +1788 4645 3T , +1849 4646 2V , +1878 4646 3P , +1936 4645 3L , +1986 4645 4J , +2019 4644 3R , +2067 4644 3J , +2138 4646 2V , +2167 4646 3P , +2225 4644 6L , +2270 4646 3Z , +2309 4644 3R , +2357 4645 3L , +2407 4644 3J , +2449 4644 3R , +2525 4646 4B , +2558 4646 3Z , +2598 4644 3B , +2652 4646 5V , +2769 4646 7D , +2798 4644 3R , +2846 4646 4B , +2879 4645 4J , +2940 4645 4J , +2973 4644 3B , +3056 4646 3Z , +3096 4646 2V , +3125 4617 7K , +3180 4646 7M , +3238 4645 4J , +3271 4631 0L , +3324 4645 3L , +3374 4646 3P , +3432 4645 3T , +3520 4619 50 75 /4U +$C +3&j1e3dDA@TS%P"l+_F[mDHCShXA3tg\\__L>/WQIdW]oh<jbb^V0@?g\1*Fh;>^8n&O,%pqH_* +p]#1/Hf+_tn,In+mU*]#_[gY&?5WS6DBHV&#/cW9~> +, +3605 4644 6L , +3649 4644 3B , +3704 4644 3B , +3759 4646 3Z , +3798 4645 3T , +3859 4646 2V , +3888 4646 3P , +3946 4645 3L , +3996 4645 4J , +4029 4644 3R , +4077 4644 3J , +4147 4646 2V , +4176 4646 3P , +4234 4644 6L , +4279 4646 3Z , +4318 4644 3R , +4366 4645 3L , +4416 4644 3J , +4458 4644 3R , +4533 4646 4B , +4566 4646 3Z , +4606 4644 3B , +4660 4646 5V , +4776 4645 4J , +4809 4644 3B , +4863 4618 3V , +4951 4645 4J , +4984 4644 3B , +719 4525 2Z , +774 4524 3B , +829 4525 4J , +861 4525 4J , +894 4524 3B , +949 4526 5V , +1045 4525 11 12 /4U +$X +*rnNUJ&)*Bs5<q8s5<q8s5<pmJ&!-+~> +, +719 4367 33 69 /0P +$C +0H%XJ!UM?&s8W-!s8W-!s8W-!s8W-!s8W-!s)k!s!MdF~> +, +753 4367 3P , +840 4338 7K , +896 4365 3R , +943 4367 3P , +1002 4365 3R , +1050 4367 3Z , +1089 4366 3L , +1139 4367 7D , +1168 4352 0L , +1230 4367 47 56 /0M +$C +-Oe`/+Q*5!s8W-!s8W-!s8W-!,J;WWs8W-!s7hZE~> +, +1290 4367 48 60 /3M +$C +,D@S_MVl*@fa*!YQV41'l#aLB/sf5-db7nuBjmiqb8kc<I>?S9^>Ek<fR:IQmIpF)L'3#)Y!;sd +s8V/![Jg~> +, +1350 4393 2H , +1410 4371 5H , +1462 4365 1V , +1530 4365 4V , +1582 4348 1I , +1650 4367 0W , +1710 4365 1Z , +1762 4367 4Z , +1830 4365 1Z , +1890 4367 0W , +1972 4366 4J , +2005 4366 3L , +2055 4366 3H , +2110 4365 3R , +2158 4365 3J , +2230 4366 3L , +2309 4365 3J , +2351 4365 6L , +2396 4367 3Z , +2435 4365 3R , +2483 4365 3R , +2531 4367 3P , +2618 4366 3L , +2668 4367 3Z , +2708 4338 7K , +2763 4366 7B , +2823 4367 5V , +2912 4365 3R , +2960 4367 3P , +3018 4366 4J , +3080 4366 3L , +3130 4367 3P , +3188 4366 3T , +3278 4366 3L , +3357 4365 3J , +3399 4366 4J , +3432 4367 3Z , +3471 4367 2V , +3501 4367 3P , +3559 4338 7K , +3644 4365 6L , +3688 4365 3B , +3743 4367 3P , +3801 4366 4J , +3834 4366 3L , +3884 4367 2V , +3913 4367 3P , +3971 4367 2V , +4000 4367 3P , +4058 4338 7K , +4143 4367 4B , +4176 4366 7B , +4237 4367 3Z , +4276 4366 4J , +4309 4367 7M , +4367 4365 3R , +4415 4367 3Z , +4484 4365 3B , +4539 4339 3V , +4599 4366 4J , +4631 4367 2V , +4660 4365 3B , +4715 4367 3P , +4773 4365 3J , +4816 4352 0L , +4870 4366 3L , +4920 4367 3P , +4978 4366 3T , +719 4247 2V , +748 4246 4J , +809 4247 3Z , +849 4245 3R , +896 4246 4J , +929 4246 7B , +989 4247 3Z , +1029 4247 3P , +1087 4245 3J , +1158 4246 3L , +1236 4247 3Z , +1276 4245 3R , +1323 4247 4B , +1357 4245 3R , +1405 4247 3Z , +1444 4245 3R , +1492 4247 3P , +1550 4245 6L , +1595 4245 3R , +1671 4246 4J , +1704 4245 3B , +1787 4246 3L , +1865 4246 4J , +1898 4245 3B , +1952 4219 3V , +2012 4269 6A , +2046 4247 7D , +2075 4245 3R , +2123 4246 55 47 /4S +$C +.aN80rp/h061h@qkr8H5rjSg"8c@(ef(At+5J$]0oUGf-2d]Y_\*g;!Eo<U`1]Mt~> +, +2179 4245 3R , +2227 4247 7D , +2285 4247 5R , +2346 4247 2V , +2375 4247 5V , +2463 4246 2Z , +2519 4245 3B , +2581 4235 45 85 /6B +$C +/mdGEmJh+ZpA_VhqgRGrrP*:*rnk3Ps)6ZcrP.asIc%X5^Mhm+hm`"MJ(s\q^Mj!W~> +, +2634 4247 3F , +2695 4246 3H , +2778 4246 3X , +2861 4247 2V , +2890 4246 3T , +2952 4218 7K , +3007 4245 3R , +3055 4246 4J , +3115 4245 3B , +3170 4247 3P , +3255 4246 4J , +3288 4247 7M , +3346 4245 3R , +3421 4218 7K , +3477 4247 2V , +3506 4246 4S , +3562 4245 3R , +3610 4247 3P , +3696 4245 3J , +3738 4245 6L , +3783 4247 3Z , +3822 4245 3R , +3870 4245 3R , +3918 4247 3P , +3984 4246 4U , +4053 4247 3F , +4114 4247 7M , +4172 4245 3R , +4247 4245 3B , +4302 4219 3V , +4362 4246 4J , +4394 4247 2V , +4423 4245 3B , +4478 4247 3P , +4536 4245 3J , +4606 4246 3L , +4656 4247 3Z , +4696 4218 7K , +4751 4246 7B , +4811 4247 5V , +4900 4245 3R , +4948 4247 3P , +5006 4246 4J , +719 4125 6L , +763 4125 3B , +818 4127 3P , +876 4126 4J , +909 4126 3L , +959 4127 2V , +988 4127 3P , +1046 4125 3J , +1147 4153 2H , +1207 4125 4V , +1259 4108 1I , +1319 4125 1V , +1387 4127 45 62 /0Y +$C +2@YoEU`9@6s8W-!s8W-!s8V[E,.I+BaFaHls6p~> +, +1447 4125 4V , +1499 4127 56 43 /5T +$C +1Bn:Ro[EN6F_)fts8W-!s8W-!s8W-!s8W)srHDINZ.ep"nC!a.@>)."]2rE/0VA~> +, +1612 4126 49 49 /1K +$C +2%'[N%\3idSEM*PS)LqQp@\.VID>LSpV$=q^?tsV\,GcDhY4b_^Y+U\gYMb7hmV(DblQhPmqb2A +]2h^#:]~> +, +1662 4126 42 49 /4Y +$C +2\D;ZK>WI>pNUZOGoaF9^>@ac@H"[)GK71@^Y@SZ^$WSDq]hB`lsB\cqg[AXmI.gHh>d3+h7iis +h:pnp5diannAo!b(a/;~> +, +1706 4126 26 74 /0W +$C +4QnmjiU7:$_r8<HGAE95s7ZKehtR$Is*rpUqsXQ5s6]jcn,M;>qlJ-\n8,!:*&m~> +, +1734 4126 52 49 /3C +$C +1br@`BKS-G%hA=EGEH=>3tI)8h[Su?iSCr[g\ZJ=]>!%6hs^",gV2SF[RVtk[ep*<msfia]C5cF +`SEHL&)i8HA%V7/pibWkEiso~> +, +1790 4126 39 49 /0I +$C +-P?\G#>U(]%gY*b0_fOIDm8jU^E<LMqtJ03&f;3)_%rpQ*sNeq4(3osICltsmsBE;hfdlODf&U$ +@ARIgTr9Z<~> +, +1889 4099 3V , +1949 4126 3L , +1999 4127 2V , +2028 4127 3Z , +2068 4125 3J , +2110 4112 0L , +2187 4125 3J , +2229 4126 7B , +2290 4125 6L , +2334 4127 7M , +2443 4126 3L , +2493 4125 3J , +2594 4153 2H , +2654 4127 6H , +2714 4125 1Z , +2774 4127 45 60 /3U +$C +2@YoEU`9@6s8W-!s8W-!s8W-!s8W-!s3/9>qu~> +, +2834 4127 0Y , +2894 4125 1Z , +2954 4127 6D , +3101 4127 6H , +3161 4125 48 45 /1G +$C +3k744+D-15#AAdpoL9e"#TK*e&7PNu60UU_rVuijpY5GpI>50sLP@d5A2Znl&'+_Ml`/:<Y\T>r +/6!H_C23s&~> +, +3221 4127 0Y , +3281 4125 43 45 /6F +$C +--Bs+k9*%T&:G,"nKk6P"+"kk2m9\ds6X:'>#;Fq8V0QRcT29O5bS`qZp[t!6#*3fV#UJ^D6DID +fJ$MB6gQEDC((Zh~> +, +3341 4125 1Z , +3401 4125 52 62 /2N +$C ++rokY#W"`MK<U/9H6SI9Jd1>]"Q)ebODiWjSs/p#8cSY$^]4?6s0]W?Xo5C#XgD4-C[Eb.?%s!Y +(e]T6Yde+\@<)>Is8W'dK%Ji~> +, +3462 4126 4U , +3556 4127 77 70 /1H +$C +/d_ribJ29<O`89m(g$03D:`"Cqka1(IsocD[(gLij0e8bea:smqb-YKXh*hJBn"l\\+Hlk/,QKX +rg!GYIs#nSX6TPreb+?8~> +, +3634 4125 3J , +3728 4126 3X , +3811 4125 3R , +3859 4127 7D , +3888 4127 7D , +3969 4126 3L , +4019 4125 3J , +4114 4126 4J , +4147 4127 7M , +4205 4125 3R , +4306 4098 7K , +4362 4125 3R , +4409 4127 3P , +4468 4125 3R , +4516 4127 3Z , +4555 4127 2V , +4584 4125 6L , +4682 4125 3B , +4737 4099 3V , +4797 4126 4J , +4829 4127 2V , +4858 4125 3B , +4913 4127 3P , +4971 4125 3J , +5014 4112 0L , +718 4005 1V , +786 4005 4V , +838 3988 1I , +906 4007 3U , +966 4005 1Z , +1018 4007 4Z , +1086 4005 1Z , +1146 4007 3U , +1233 4006 3L , +1283 4005 6L , +1327 4005 6L , +1372 4005 3R , +1420 3979 3V , +1480 4006 4J , +1512 4005 3J , +1588 4006 4J , +1621 4007 7M , +1679 4005 3R , +1761 4005 3B , +1816 3979 3V , +1876 4006 4J , +1908 4007 2V , +1937 4005 3B , +1992 4007 3P , +2050 4005 3J , +2134 4033 2H , +2186 4007 57 42 /0T +$C +1Bn>>`AIOjTZI4d[["5%V/7_s>>!UMd^GFJTsPQAXefkb'l)8[FQeq":"!pCFIT)^-L!H\\kUUj +PB<:G+cQNO:A(N8~> +, +2281 4006 27 72 /3Y +$C +1T2<V4lPiRgUL\cpjJ/%h>ata\,Wr9p\jjaid<iF$oP<-GDEgn2';iEpd*Bdn$m*~> +, +2309 4006 52 49 /0K +$C +4d;!Q$pDM^GDGXrjB)oa)r;P$pC7*#qqp<0\,6("HggF>&a',eqec;?s7ZHL[dNOtDjss[*O,M0 +gb@96f\#/epNUZOG]<0!2#~> +, +2364 4006 32 65 /3K +$C +1HH$WHc+]/\(H'eG5-OaIJ<cUs7cEis*rqpq7t.c*ZGNGG:3q!huEH>p]%^IG^'~> +, +2440 4006 3L , +2490 4007 3P , +2548 4006 3T , +2650 4033 2H , +2702 3988 57 61 /3R +$C +1^ptq+W\=9g\1T\DsmM*laeE-h'_qgrTWY4])$<YS$/^Tl+6_/^72='lfl"W]"Y>NX/kOJ@=k"( +:Aq2C~> +, +2796 4006 3Y , +2824 4006 0K , +2879 4006 3K , +2954 4006 4J , +2987 4005 3B , +3075 4005 3J , +3117 3979 3V , +3177 4005 46 49 /6P +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +3225 4005 6L , +3270 4007 2V , +3299 4007 4B , +3332 3979 4H , +3420 4006 4J , +3453 4007 7M , +3511 4005 6P , +3592 4006 7B , +3652 3979 3V , +3712 3979 3V , +3772 4005 6P , +3820 4007 3Z , +3893 4007 7D , +3922 4005 6P , +3970 4007 4B , +4003 4006 4J , +4069 4005 6L , +4113 4005 3B , +4168 4007 3Z , +4207 4007 3P , +4266 4005 6P , +4314 4007 3Z , +4387 4005 3B , +4442 4007 4B , +4508 4006 4J , +4541 4007 7M , +4599 4005 6P , +4680 4006 4J , +4713 4005 3B , +4767 3979 3V , +4827 4007 7D , +4856 4005 6P , +4904 4006 4S , +4961 4005 6P , +5009 4007 7D , +719 3886 3X , +802 3887 2V , +831 3886 3T , +893 3858 7K , +948 3885 6P , +996 3886 4J , +1029 3872 0L , +1083 3886 3X , +1166 3887 7M , +1225 3885 6P , +1272 3887 3Z , +1312 3885 6P , +1389 3866 5Z , +1422 3885 5M , +1472 3872 0L , +1497 3885 5M , +1547 3866 3D , +1609 3887 2V , +1638 3885 3J , +1709 3886 4J , +1742 3887 7M , +1800 3885 6P , +1877 3886 4J , +1910 3885 3B , +1964 3859 3V , +2054 3887 7D , +2083 3885 6P , +2131 3887 4B , +2164 3886 4J , +2226 3885 6L , +2270 3885 3B , +2325 3887 3Z , +2364 3887 3P , +2423 3885 6P , +2471 3887 3Z , +2540 3885 3B , +2595 3887 4B , +2657 3886 4J , +2690 3887 7M , +2748 3885 6P , +2825 3885 3J , +2867 3885 6L , +2912 3887 3Z , +2951 3885 6P , +2999 3885 6P , +3047 3887 3P , +3105 3872 0L , +3160 3886 3L , +3210 3887 3P , +3268 3886 3T , +3366 3913 2H , +3426 3885 2N , +3486 3885 1Z , +3538 3885 56 62 /1A +$C +,Ap0V:'Cb1Tg"9*%d8k,,W$'NTS%Y>qG#tA:$KCgqg/:sYQ+Y&m<\c`f%9dlBk<=V[[1h`_[1Jp +-.o@;>VNZrEW?(=s7sI<pOE~> +, +3598 3885 56 44 /6N +$C +,i""TKGgGEK="%NoE_*ncnOSP#WMH?#HR+dp](9ns8W-!s8W-!s8W-!s6%7`i:[+oJ,~> +, +3666 3868 50 62 /3L +$C +,QSa(*Ou4e)i(n?qnDP!s33hh+FG=,:SK,l5_4^;62F=JK7,(0FIu?9:]Jjms8W-![D2[BrN6%# +Zrm3>FrL(k?%WGSF&jf"@>.Nd$i~> +, +3749 3886 44 74 /4S +$C +-l*@R6-s^?pio*<2r!`a^>HQ3rnd+Wn%ZR7^YdlArpKdbqu,Bf&at2;g\1AMqgG^#@BRYYCd/HJ +>T2X@s7_$;n,E?gpb00C,h+@d%f~> +, +3795 3886 42 49 /0U +$C +-k[(P#>U(N%ZkTp\lYd+Id')2hu3<Ds7ZKihZ!QRmf.e*IJ_p0HFM^IV/9XqQ&:<iW%_$~> +, +3840 3886 0U , +3884 3886 0W , +3949 3886 4J , +3982 3885 3B , +4067 3885 6L , +4111 3886 48 48 /6J +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +4161 3886 7B , +4222 3885 3J , +4264 3885 6P , +4341 3886 6J , +4421 3886 4J , +4454 3887 3Z , +4493 3886 6J , +4543 3885 6L , +4587 3885 6P , +4666 3885 3B , +4721 3887 4B , +4784 3886 6J , +4834 3887 7D , +4863 3887 7D , +4922 3887 3F , +4983 3886 3H , +719 3765 6L , +763 3765 3B , +818 3767 5V , +906 3767 5V , +995 3766 6J , +1045 3767 3P , +1103 3766 3T , +1164 3765 3J , +1231 3766 4J , +1264 3765 3B , +1343 3766 2Z , +1399 3765 6P , +1472 3739 3V , +1532 3767 3Z , +1571 3767 2V , +1600 3767 3P , +1659 3766 4J , +1691 3765 6P , +1739 3766 3T , +1800 3752 0L , +1850 3767 2V , +1879 3767 4B , +1938 3766 4J , +1970 3767 7M , +2028 3765 6P , +2101 3766 2Z , +2157 3765 3B , +2211 3765 3B , +2266 3767 7D , +2295 3765 6P , +2343 3766 6J , +2393 3767 3P , +2476 3766 55 47 /4S +$C +.aN80rp/h061h@qkr8H5rjSg"8c@(ef(At+5J$]0oUGf-2d]Y_\*g;!Eo<U`1]Mt~> +, +2532 3766 6J , +2582 3767 7D , +2612 3766 7B , +2672 3765 6P , +2745 3767 2V , +2774 3765 3J , +2841 3766 4J , +2874 3767 3Z , +2913 3766 7B , +2974 3765 6P , +3030 3766 4U , +720 3516 4A , +770 3515 20 15 /2H +$C +1`Rl=FT;<CC)Bb~> +, +795 3514 46 68 /0V +$C ++cA,X+G&LuG^0PWJd*8-D[F!LpXSNCl+6`$s*hQEWC"mhi,$GL>1J=YPlla\2du.2mJ4eHpOCor +g?ijri5$sgf!VGk$n,OTJ\V~> +, +845 3515 2H , +920 3514 7L , +992 3516 5I , +1031 3514 5G , +1081 3514 7C , +1131 3514 0F , +1164 3516 5K , +1198 3516 0D , +1259 3489 2W , +1339 3514 7C , +1414 3516 0D , +1475 3514 7C , +1525 3516 2R , +1614 3514 5G , +1664 3514 58 74 /3V +$C +--g96$(;'KK@A;uOFBLHqIFR@!\e^-4qN$9VuE:%^]401s8W,ts8RNIhqHn'XgPSQ(h%6"pP4Jh +is#mPs8W-!s44J4)F*dD%jb[Ni:$~> +, +1750 3514 4I , +1795 3516 59 72 /7C +$C +/fA4$TE!.:j:ducs8W-!s8W-!s8W-!s8W-!YP,S6V1od-6]^VX]C=E\G.;'Nq#CBos8Vbn\7kod +_;m<nn9=~> +, +1856 3514 48 49 /7C +$C ++e0*'9_`6r:#XV_"O!ed6$V>jkWYWRs82iRDn"AILVk7I@?(jB!PGH;,Rcp:^1i">p"EUXO&q(0 +WsT7`0Mh~> +, +1906 3516 0D , +1967 3516 0D , +2028 3514 5G , +2078 3516 4M , +2136 3514 0F , +2170 3514 52 49 /7M +$C ++U++g6m-H$K]n$]*<H\uDNfBa^72=,YM9*AIfKHJs8W&LYOB6S^Uh#29@^83L6ODnTnNn(#T`~> +, +2250 3516 7A , +2317 3516 60 72 /2Z +$C +0H!84,PBKR"/)b=\m6u]\m6qT9;U)0dd,?GFLkSVA2rn_hmM5+nDA/ng[4_3&)V<0q[]t?hYm?A +s8W-!s8T11B`H;mj=qeJ,Cf~> +, +719 3357 3F , +780 3357 58 72 /4O +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qco"??GfF?_0Zp7?*;dfE5?Pos8W-!s7M]^ +s+AH!#Cl~> +, +838 3355 6P , +914 3357 4B , +947 3355 3B , +1002 3357 7D , +1031 3357 7D , +1060 3355 3B , +1115 3356 3X , +1198 3357 2V , +1227 3357 3P , +1285 3328 7K , +1369 3357 4B , +1402 3357 3Z , +1442 3356 6J , +1492 3328 7K , +1547 3357 5V , +1636 3355 6P , +1684 3357 3P , +1742 3356 4J , +1803 3355 6L , +1847 3357 3Z , +1887 3355 6P , +1935 3356 6J , +1985 3356 4J , +2017 3355 6P , +2065 3355 3J , +2136 3356 6J , +2221 3355 47 45 /5J +$C ++WT&@_B@Xm#7-+#k_lB]&2ulZkm$>udX4)MBPXeWJ,fQ'r/,hrrqlRsCN%j0CLMq$@1c#I'uLE6 +'2W(k~> +, +2273 3357 57 60 /2X +$C +1Bn>>`B3dnFC`;hs8W-!s8W-!s8W-!s8W)sqd%e)/9[@sHYIX?9<hd*(gJc)s8W-!r:jIm^]~> +, +2341 3355 1G , +2393 3357 5T , +2524 3355 4V , +2584 3357 6D , +2707 3355 6F , +2759 3355 1V , +2827 3357 6H , +2887 3357 0Y , +2939 3357 5T , +3007 3338 3L , +3088 3355 6L , +3132 3356 6J , +3182 3357 7D , +3211 3357 7D , +3241 3355 6P , +3288 3356 3T , +3384 3355 5J , +3437 3342 0L , +3490 3356 4J , +3523 3357 4O , +3581 3355 6P , +3629 3357 3P , +3715 3356 6J , +3765 3355 3J , +3807 3355 3J , +3850 3355 3B , +3904 3355 6L , +3949 3357 2V , +3978 3356 6J , +4028 3356 4J , +4060 3355 6P , +4108 3355 3J , +4178 3356 4J , +4211 3357 4O , +4269 3355 6P , +4346 3357 3P , +4404 3356 6J , +4454 3357 5V , +4542 3355 6P , +4626 3355 5J , +4678 3357 61 43 /3Q +$C +2AdhJ:_A3Oo1(F=qu?]rs8W-!s8W-!s8W-!s8W-!s8W-!pO;Seqb;8cG?JF`D.WiQ<gR9_Y1)/_ +(f=s(~> +, +4746 3355 2N , +4806 3355 5J , +4858 3357 2X , +4926 3355 1G , +4978 3357 5T , +719 3236 3X , +802 3237 2V , +831 3236 4J , +864 3237 4O , +922 3237 2V , +951 3237 3P , +1035 3237 3F , +1096 3236 3H , +1176 3236 3X , +1260 3237 2V , +1289 3236 4J , +1322 3237 4O , +1405 3236 4J , +1437 3237 4O , +1496 3235 6P , +1568 3237 5R , +1630 3237 2V , +1659 3237 5V , +1747 3236 51 73 /2Z +$C +5EglT+SH@k^#U$'FpL$[_nllJqgH5-rV-'chuE_+s8Vrqrg*Md?)<,t[I'gC0OD_A]3VSk$n_r) ++92B@s8W+%2$O#4bf,_b~> +, +1802 3235 3B , +1882 3235 6L , +1926 3237 4O , +1984 3236 6J , +2034 3237 3P , +2093 3237 3P , +2151 3235 6P , +2199 3237 7D , +2258 3235 5J , +2319 3236 11 47 /4O +$X +*WSETJ&)*Bs5<q8s5<q8s58CB5CagUzzzzzzzzzzz!!")@5Ce7!s5<q8s5<q8s5<pmJ&":!*WQ~> +, +1087 3070 4T , +1208 3070 14 40 /5R +$X +!rsG$5Oa0tJ,''As8;opJ,"Ng5O]cQ#CldSzzzzzz!!!*$+5fBQJ,"Ngs8;ops8;opJ+u7t5N!'f~> +, +1246 3089 2K , +1357 3070 4T , +1408 3072 46 54 /3X +$C +,D,!,?Cf[7:U6\os8W-!s8W-!s8W-!s1eG:f%2HrQXR(+KY%uQln0,[L:I9`s7mW\It.~> +, +1464 3070 43 42 /6F +$C +,TP#L&8#>o#A?74OQqE%jo#D[9RK$r^OP_N^O<i4p-YS`GDD9t#2F_.rjn\eJV:<EMT%qZ@6oSk'E~> +, +1517 3072 0A , +1626 3070 1Y , +1683 3072 40 54 /1K +$C +,D/u\C.NjSs8W-!s8W-!s5h(sT=#q/s8RQ(]GMcm6ZCNl:]~> +, +1791 3070 2C , +1840 3070 0Q , +1897 3072 42 39 /5Z +$C +,D/u\C/Fs1s8W-!s81[ILR($hp;&?uC$gU.*J4YuMW(Uj'LP[~> +, +1952 3072 4P , +2003 3072 0A , +2058 3055 6V , +2118 3059 5P , +1084 2970 0Q , +1140 2972 0S , +1194 2995 42 4 /1S +$C +,D0PjVu~> +, +1249 2976 1U , +1301 2972 0A , +1356 2970 6F , +1405 2972 53 40 /5N +$C +,D$Sb:*i!:X&[JDoe4)[s8W-!s8W-!s8W-!s8W-!s8VhCrSP!6GO6%aV'Cjf,a`@J2Cl/bg1i/] +_Na7$-i~> +, +1463 2970 5B , +1519 2970 4T , +1570 2972 3X , +1626 2970 6F , +1679 2972 0A , +1755 2961 1E , +1786 2970 0Q , +1842 2970 1Y , +1892 2955 0C , +1956 2959 6R , +2059 2970 4T , +2118 2959 6R , +2227 3000 0O , +2275 2970 4T , +2323 2972 5N , +2382 2970 46 56 /0I +$C +24TCB&8#?;%o5Ss3hSan^Hjg,%J6%[p%7qLp&Cris8W+7qu>C-g=ooW51j2q?%s!Y0UH7\$\l0" +Eh.4Ms8W"J"L#H~> +, +2437 2970 4T , +2488 2972 3X , +2544 2970 6F , +2597 2972 0A , +2659 3000 0O , +2713 2961 2G , +2766 2959 5P , +719 2787 3F , +780 2787 58 72 /4O +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qco"??GfF?_0Zp7?*;dfE5?Pos8W-!s7M]^ +s+AH!#Cl~> +, +838 2785 6P , +915 2787 3P , +973 2786 6J , +1023 2787 5V , +1111 2785 6P , +1159 2786 3T , +1249 2785 6L , +1293 2787 4O , +1352 2786 6J , +1402 2787 3P , +1460 2787 3P , +1518 2785 6P , +1566 2787 7D , +1630 2785 5J , +1682 2787 3Q , +1750 2785 2N , +1810 2785 5J , +1862 2787 2X , +1930 2785 1G , +1982 2787 5T , +2072 2785 6L , +2116 2786 6J , +2166 2787 3P , +2253 2787 3P , +2311 2785 3B , +2366 2786 82 48 /6V +$C +--V`>h0uuM[/YPgrB9d@+!SJRhOje2e\;&ZVUk)5[%C.MH@FT)^[7iQJ+m9?>HRpIY?pm>YNtG4 +lW<i0='tEF]"Q[tSt*;=F&6Q9h].OYhu~> +, +2478 2786 2Z , +2533 2785 6P , +2610 2786 7B , +2670 2785 3J , +2713 2785 6P , +2761 2786 3T , +2850 2787 2V , +2879 2787 3P , +2966 2786 6J , +3045 2785 3J , +3087 2759 56 75 /3V +$C +/d=P.LUCpts8W-!s8W*W++t[YiU7o"_nlWIR!K5#0_F9"If'$2n,<4bs7cQnYPu4PGO6ub73.&n +$mep_/@[=OG.U\h_[93uT^3@4(ao~> +, +3147 2785 6P , +3195 2785 6L , +3240 2787 2V , +3269 2786 6J , +3319 2787 7D , +3376 2787 3F , +3437 2786 3H , +3529 2785 43 45 /6F +$C +--Bs+k9*%T&:G,"nKk6P"+"kk2m9\ds6X:'>#;Fq8V0QRcT29O5bS`qZp[t!6#*3fV#UJ^D6DID +fJ$MB6gQEDC((Zh~> +, +3589 2785 1Z , +3641 2787 5T , +3709 2785 2N , +3791 2785 6L , +3835 2785 3B , +3890 2787 5V , +3978 2787 5V , +4067 2786 6J , +4117 2787 3P , +4175 2786 3T , +4264 2786 4J , +4297 2785 3B , +4382 2785 3J , +4424 2785 6P , +4472 2787 3P , +4530 2786 3T , +4621 2785 3J , +4663 2786 4J , +4696 2787 3Z , +4735 2787 2V , +4765 2787 3P , +4823 2758 7K , +4878 2785 3J , +4951 2786 4J , +4984 2785 3B , +719 2666 2Z , +774 2665 6P , +851 2639 3V , +911 2667 3Z , +951 2665 3B , +1005 2665 6L , +1050 2665 6P , +1097 2665 3J , +1140 2665 3J , +1182 2665 6P , +1230 2666 3T , +1320 2666 2Z , +1375 2639 4H , +1460 2666 6J , +1539 2667 60 69 /2T +$C +1BfGjiK1'#,=ctPrr<#qs8MRA)uos<s8W-!s8W-!s8W-!s8T[WEraVc~> +, +1600 2667 2V , +1629 2667 5V , +1717 2666 2Z , +1773 2665 3B , +1856 2639 3V , +1916 2667 3Z , +1956 2665 3B , +2010 2638 7K , +2066 2667 3Z , +2105 2666 6J , +2155 2667 5V , +2244 2652 0L , +2299 2666 4J , +2332 2639 4H , +2387 2639 3V , +2447 2667 2V , +2476 2665 6L , +2521 2666 6J , +2571 2667 7D , +2600 2667 7D , +2629 2639 4H , +2714 2667 3P , +2772 2665 3B , +2827 2666 4J , +2859 2667 2V , +2888 2667 4B , +2922 2639 4H , +2977 2667 2V , +3006 2667 3P , +3065 2638 7K , +3150 2667 2V , +3179 2666 4J , +3241 2665 3B , +3296 2667 4B , +3358 2666 6J , +3408 2667 3P , +3494 2665 6P , +3542 2666 4S , +3598 2665 6P , +3646 2667 3P , +3704 2666 4J , +3745 2666 4U , +3816 2665 82 71 /3Z +$C +46guKZN-XOqT6Z[95/n-Y?m$)s8$(ql$Y5b9BgjXV>oe.0;\<U?XKZ%^6e0OoY-[?qHs5gde[<D +s3gaN9Bgo>^J!g>0A"h?I4qGnnbVqEfD8(e:1,l??r:9]~> +, +3899 2665 3B , +3954 2666 4J , +3986 2665 6P , +4063 2666 4J , +4096 2667 4O , +4154 2666 6J , +4204 2666 4J , +4265 2666 4J , +4298 2667 4O , +4356 2665 6P , +4432 2667 2T , +4493 2667 2V , +4522 2667 5V , +4610 2666 2Z , +4666 2665 3B , +4748 2667 2V , +4777 2666 3T , +4838 2665 6P , +4886 2667 3P , +4944 2666 4J , +4977 2667 2V , +5006 2689 6A , +719 2547 4B , +752 2545 6P , +800 2547 38 47 /3Z +$C +0H#A^_V2d)s8W-!s8W-!hqnUF[?3rg<K18!0`S\NG9dORiPEE.~> +, +867 2547 3P , +925 2546 6J , +975 2547 5V , +1063 2545 6P , +1138 2547 3P , +1196 2545 6P , +1244 2545 6P , +1292 2546 3T , +1380 2547 3P , +1438 2545 3B , +1493 2546 4J , +1553 2547 5V , +1641 2546 6J , +1691 2546 4J , +1724 2545 6L , +1768 2547 4O , +1853 2546 4J , +1886 2547 4O , +1944 2545 6P , +2020 2547 3P , +2078 2546 6J , +2128 2547 5V , +2216 2545 6P , +2292 2518 7K , +2348 2547 2V , +2377 2546 4S , +2433 2545 6P , +2481 2547 3P , +2568 2546 4J , +2601 2545 3B , +2684 2547 3F , +2745 2546 3H , +2801 2532 0L , +2854 2546 6J , +2904 2547 7D , +2933 2546 4J , +2966 2547 4O , +3024 2545 3B , +3078 2546 7B , +3139 2518 7K , +3194 2547 4O , +3281 2547 2V , +3310 2546 4J , +3371 2547 2V , +3400 2545 3J , +3470 2547 2V , +3499 2547 3P , +3557 2546 4S , +3614 2546 6J , +3664 2547 3Z , +3703 2547 2V , +3732 2546 6J , +3782 2546 2Z , +3838 2547 7D , +3867 2519 4H , +3951 2545 6P , +3999 2546 6J , +4049 2545 3J , +4091 2547 2V , +4120 2545 6P , +4168 2547 3Z , +4236 2546 4J , +4269 2545 3B , +4352 2547 4B , +4385 2545 3B , +4440 2547 7D , +4469 2547 7D , +4498 2545 3B , +4553 2546 6V , +4664 2546 4J , +4697 2547 4O , +4755 2545 6P , +4831 2545 6L , +4875 2545 3B , +4930 2546 3T , +4991 2545 6P , +719 2427 2V , +748 2427 4B , +806 2426 4J , +839 2427 4O , +897 2425 6P , +970 2426 4J , +1003 2426 6V , +1086 2425 3B , +1166 2426 6J , +1216 2427 3Z , +1255 2425 6P , +1328 2426 4J , +1361 2427 4O , +1419 2425 6P , +1492 2425 3J , +1534 2426 6J , +1584 2427 5V , +1672 2425 6P , +1728 2426 4U , +720 2176 4A , +770 2175 2H , +795 2176 47 67 /4B +$C +3Wia=KE<`/p:pY-jhY#(rT)FhoP`W:pA`nIDuIHErV-'DhgXJ[J*lt0g])3$rl9M8qfe,V,Z9-~> +, +845 2175 2H , +920 2176 79 68 /1F +$C +4rW)`YU0jr_[d6u4^mmi(Z=0[pA94rn$h'=s0qI3^\@L&qsXR^s8W-!s4@,I?iQu%^:NsJ?$]d/ +'&])ZWc\`]&>fJD$Qr2N5tI@~> +, +1003 2174 5G , +1053 2176 38 72 /4F +$C +0F]-"5Wu=Ns8W-!s8W-!s8U>r<ppP0G[s$`s8W-!J+%`.$J8Ar:r_qk*PoM~> +, +1092 2176 5K , +1125 2176 0D , +1187 2176 5K , +1220 2176 0D , +1281 2149 2W , +1362 2174 7C , +1412 2176 0D , +1473 2174 58 74 /0X +$C +--g96$(;'KK@A;uOFBLHqIFR@!\e^-4qN$9VuE:%^]401s8W,ts8RNIhqHn'XgPSQ(h%6"pP4Jh +is#mPs8W-!s44J4)F*dD%jb[Ni:$~> +, +1559 2150 2Y , +1620 2174 7M , +1675 2174 4G , +1720 2176 5K , +1753 2174 0F , +1786 2176 5K , +1820 2174 7M , +1875 2176 0D , +1936 2176 5K , +1970 2176 0D , +2031 2149 2W , +2111 2176 82 47 /5M +$C +,6]M"h=[]<s0\utlW`*CC"M)"&:B+jl!8dG[nZ0pY@"\U^Zt+Lg:ut@XjZJ3Is^h[TCmWh[H[/3 +p?M[YK\^0XbG#hehs6@imtg$u2Z~> +, +2195 2176 5K , +2228 2174 0X , +2289 2149 2W , +2345 2174 5G , +2395 2174 0F , +2428 2174 4G , +719 2017 3F , +780 2017 4O , +838 2015 6P , +915 2017 35 73 /4B +$C +0Esb+"P*PPs8W-!s8W-!s8V6a07FEB%#Z/ks8W,Vqtkj:[L0nZ`p\\%_LM~> +, +948 2015 3B , +1003 2017 7D , +1032 2017 7D , +1061 2015 3B , +1116 2016 6V , +1199 2017 2V , +1228 2017 3P , +1286 1988 7K , +1371 2017 4B , +1404 2017 3Z , +1444 2016 6J , +1494 1988 7K , +1549 2017 5V , +1638 2015 6P , +1686 2017 3P , +1744 2016 4J , +1807 2016 7B , +1867 2015 3J , +1910 2015 6P , +1958 2015 3J , +2028 2015 1V , +2096 2017 3M , +2156 2043 47 4 /5F +$C +/ddj:TE~> +, +2216 2021 5H , +2276 2015 5J , +2328 2017 3Q , +2396 2015 2N , +2479 2016 4J , +2512 2015 3B , +2597 2016 3T , +2658 2015 6P , +2706 2017 4B , +2739 2017 2V , +2768 2017 3P , +2827 2015 6P , +2904 2017 4B , +2937 2015 3B , +2992 2016 7B , +3052 2017 3Z , +3122 2016 6V , +3205 2017 2V , +3234 2016 3T , +3296 1988 7K , +3351 2015 6P , +3399 2016 4J , +3432 2015 3J , +3482 2016 11 47 /1Q +$X +*WSETJ&)*Bs5<q8s5<q8s58CB5CagUzzzzzzzzzzz!!")@5Ce7!s5<q8s5<q8s5<pmJ&":!*WQ~> +, +3529 2016 4J , +3562 2016 6V , +3645 2015 3B , +3730 2016 2Z , +3785 2016 7B , +3846 2016 4J , +3878 2016 4J , +3911 2015 3B , +3965 2017 3P , +4024 2015 3J , +4066 2002 0L , +4121 2016 6J , +4201 2017 7D , +4230 2016 6J , +4280 2016 2Z , +4335 2015 6P , +4383 2017 7D , +4412 2002 0L , +4467 2016 6J , +4517 2017 3P , +4575 2016 3T , +4666 2016 6J , +4716 2017 3P , +4804 2015 6P , +4852 2017 3P , +4910 2016 4J , +4943 2017 3Z , +4982 1989 4H , +719 1896 6V , +802 1897 2V , +831 1896 3T , +893 1868 7K , +948 1895 6P , +996 1896 4J , +1037 1896 4U , +1095 1897 3F , +1156 1897 4O , +1214 1895 6P , +1303 1896 6V , +1386 1897 2V , +1415 1896 3T , +1477 1868 7K , +1532 1895 6P , +1580 1896 4J , +1613 1895 3J , +1696 1896 6J , +1746 1897 3Z , +1786 1895 6P , +1875 1869 3V , +1935 1895 3B , +1990 1895 3J , +2032 1897 2V , +2061 1896 4J , +2094 1897 2V , +2123 1895 3B , +2177 1897 3P , +2236 1895 6P , +2284 1896 3T , +2386 1897 2V , +2415 1897 3P , +2514 1896 4J , +2547 1897 4O , +2605 1895 6P , +2653 1897 2V , +2682 1897 3Z , +2763 1869 3V , +2823 1896 6J , +2873 1897 3Z , +2913 1895 6P , +2960 1897 3P , +3019 1896 4J , +3093 1896 6V , +3176 1897 2V , +3205 1897 3P , +3264 1896 3T , +3325 1895 3B , +3379 1896 6V , +3503 1876 31 93 /5Z +$C +"KA5$<2ioaX%J_TkuZ=+f<21RX8]1"oY:G+s8W,ds8D]jp[@j)hqRkn]A*&HgV(4BmCQ0~> +, +3536 1897 2V , +3565 1897 3P , +3664 1896 4J , +3697 1897 4O , +3755 1897 2V , +3784 1895 3J , +3867 1895 6L , +3911 1896 6J , +3961 1895 3J , +4004 1895 6P , +4092 1896 4J , +4125 1897 4O , +4183 1895 6P , +4271 1896 4J , +4304 1895 3B , +4358 1869 3V , +4418 1897 7D , +4447 1895 6P , +4495 1896 4S , +4552 1895 6P , +4600 1897 7D , +4670 1896 6V , +4753 1897 2V , +4782 1897 3P , +4841 1896 3T , +4902 1895 3B , +4956 1896 6V , +718 1775 1V , +786 1775 4V , +838 1758 1I , +899 1756 3D , +957 1776 7B , +1018 1775 3J , +1060 1777 2V , +1089 1777 3P , +1147 1748 7K , +1228 1776 4J , +1260 1777 4O , +1319 1775 6P , +1392 1777 3F , +1453 1776 3H , +1533 1775 6L , +1578 1775 3B , +1632 1777 5V , +1721 1777 5V , +1809 1776 6J , +1859 1777 3P , +1917 1776 3T , +2001 1758 1I , +2069 1775 1G , +2129 1775 5J , +2189 1777 3M , +2250 1776 1Q , +1074 1622 46 55 /1J +$C +,T/uDJ,B-CrpTl:qu6?icN^lXC1RYKs6p!Es8DuqbVd-abae^jpV61sqqq/Hs6f~> +, +1134 1621 45 60 /4L +$C +1hNb=T_EOKmN1gALF!Hs]J0+thm\Yr[sbaQp\s'YaQNT.hsKmEs1Q&ChgPBGqepD][aTuICiJmc +>EAaWs1\O1XGm9KaLOU@e,~> +, +1174 1621 36 40 /1P +$C ++c[*p%Z%XZ"s/D=R!^iiq#CB.rph,-:''\uHn]aQ4r`7#DmsW]gUGqlgY5QB8f6Nc@6a~> +, +1197 1600 47 81 /4P +$C +,F0@*^"KOO2\uA*hgYJ%hu!0Frql`QJ,S:)^OQ"X][RlR%Dh"eT4@ops7bEa^C?WTf%<a<%r=4;YQ~> +, +1235 1621 19 58 /1T +$C +0^([YmirkB_mCB;nb:r8hnS'`h>c=/O8HFqp,g09LPDT(3cK`KpN@5~> +, +1258 1621 39 40 /4T +$C +/r2S:=F5hknGJ5h\deQkh;>I*rSQK3h=lEV\$/8LnU:b)rO;1Mn(W>9mIG##*U_\K4hfdjltgXq +G7SnPK2CLq~> +, +1294 1621 1P , +1353 1621 54 40 /1X +$C +1c),J$m=fPg2oc=,I`?[9Kr(iXmPAaDngbpqg3hlfc@R%lttXon%8#^p\iirhgN+dn$`2l-G+d% +mJCee[qcGcbUd+&heg'2m6htn~> +, +1411 1621 1T , +1425 1621 4L , +1465 1600 46 61 /4X +$C +,R&c)#`Cri&2<;jh'VdMDb^8hm^li\$!hDED(?#@$oFZ4PSg>QWD_<L?M<hF#m_OV6s^@bDb\Yu +\#02orVbXQqtKh.a*"k.X)_-n(eLu/_Li0~> +, +1505 1621 1P , +1544 1621 23 53 /2B +$C +2c)ZdYkO<igYmp3j7iNPhnT'_s*jr;%@;^b@?[V`s1\O1nF53j~> +, +1563 1621 33 40 /5B +$C +-l*(/#EaGmK+C]1Dn#2M^\]$jUptJB0*ssE((,j_i3fc)0Al`?F`2(H$n,To-t,@~> +, +1083 1530 37 47 /2F +$C +,!"-o&3:;X:c\mI3Y%6eNkbVos8W-!s7mWQ.GC4ts8W,o~> +, +1133 1532 39 48 /5F +$C +,D^FHWnljrAH,<!dckkb>qVI:V:+(%9,4PGXrHd%+)eXCiP*4sp@ogBSbhCHs8W+]`3%q~> +, +1182 1553 36 3 /2J +$C +-D@Es~> +, +1230 1535 36 39 /5J +$C +,H;7a_m^%6@D`QlG2\2b3+9]7)mJ:V$oh\M8e=gNKG5Q.64+9#JqOje5sbni:kGN0@9?>~> +, +1279 1530 36 36 /2N +$C +2=a!X&3::5)8i+u\d15c2l>"69iQ7BYQ+WMQrd(!Isn`6ln*r-(bf/,2o?#X&AS~> +, +1321 1532 47 34 /5N +$C +-DAQ$BJ/`LWOFQnn,NFfs8W-!s8W-!s8W-!s8W+Cs4VqhG)IB;"@b@Z-5tEl@_5?&1`0$~> +, +1373 1530 42 50 /2R +$C +25q]L+O>lM4%+.9"<3iW6,&P2-9=r#YG_>Kl2Ue`qcj*ShqHghBX.9ZlnFc6_(N]G_Vp3hs8W,u +8VpZe~> +, +1439 1522 14 59 /5R +$X +!#P\u!.4ck!:U$Y!T4(<"2G/W#J^k#%tG`%*rnM*4odbHIK4`qHiSNoquHWpquHKlp]1'hp]1'h +p]1'hp]1'hquHWpHiSNoHiSNo4odbH4ocZ)*rlfO%tFn8#J^GW"5j4<!Up*Y!-eKg!'C6$!"]~> +, +1467 1530 2F , +1518 1530 36 36 /2V +$C +2=a"W6,F+fk3*@85mHR48\.X^X*T9Hrh'5j>Md-&]kqV_D(B=&@4MNg=K#XoK`~> +, +1562 1517 41 49 /5V +$C +,CpR%4TGH]s8SMji.L5W&Jp)`&3%s%^BqPOp@R87rr/Pis',@!f4f^;8!<AY?*KQR,6eHR0jTJE +_*@~> +, +1619 1520 16 24 /2Z +$X +?i]Zrp]1'hquHWpIK4itIfOtK5Cbu65JSB!+5e71+7Kg9&,Zt9#Q=u-#QFo+~> +, +1715 1557 26 24 /6B +$C +3KcF;f)N/Xs',Ns^]4=<s7X5-rr~> +, +1753 1530 42 50 /3F +$C +.QJ=]7h?ec$/H3<cc?Z+oFPr:pnm]@I9rQFpTOVs>Q:h/Xfg*r4'pWHL(`hi-.mph>VKE4s8W+] +`3%q~> +, +1803 1530 40 35 /6F +$C +25q!0+D6C(7-5PP2`=T_+NNA8hnT3ks8W-!s8W-!s8U1"*<Oj-~> +, +1851 1530 2F , +1899 1530 2F , +1950 1530 2V , +1996 1532 40 34 /3J +$C +,D2-]eSau;K>7Hds8W-!s8W-!s8RQ"Id8P.]s*_9K*bP8iM_JF~> +, +2106 1531 12 11 /6J +$X +++QT6J)L@rs7$'Xs6tNrJ)EQ,"on~> +, +2137 1530 3F , +2193 1532 30 49 /3N +$C +,DKbll$ra5s8W-!s8W-!s8W+]mYJQmnAbcdaTi'$~> +, +2286 1553 2J , +2331 1530 2F , +2381 1530 37 36 /6N +$C +,8>kC#TOuNNe,%MC)mErU`Vne%51B>^Z77HITRDh[f9C[V/Nf-Ya'qUY[E`RL(kIQ~> +, +2428 1532 40 33 /3R +$C +,D23^<Bg[^5V$PQ8fL'#9%m=o[["5%V/7_s=K>fXU>=78&n04+PB<:ih'VAF8[orME.@c~> +, +2475 1530 2F , +2571 1532 38 45 /6R +$C +,DN5/p_Wu1s8W+H4HY-ns7-,VO8o7R\<Hpls8W-!s!*8pDZ~> +, +2620 1532 3R , +2671 1532 34 50 /3V +$C +,D/uSVd'3$s8W-!s8W,pY^b^4F?fg*p]~> +, +2715 1530 2F , +2814 1553 2J , +2863 1530 2N , +2910 1530 2V , +2953 1532 5N , +3001 1532 5N , +3054 1530 37 36 /6V +$C +.-JIa#'_7d7&V15)k58oU_s!npj`<nmJH;E%;^^q0uG,!pbEX?s8UYi,s^'+9j"?&8cuj~> +, +3100 1532 3J , +3149 1530 2R , +3256 1522 16 59 /3Z +$X +!"T&o!.P"J!:U$I!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O"2G#S#Cq:(rW)ot +rr<R["+UKh!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!T4":!;HPD!'^H*!!3~> +, +3296 1530 31 36 /6Z +$C +3qGU^*sao\+%0adJd1_6_LC<fqr51`YY'$@RKF*e;%+T[7Nu7jO<Cp&?gkG8$Y3E!M';T&0LG~> +, +3341 1530 6N , +3388 1532 3J , +3437 1530 2R , +3535 1530 2N , +3577 1532 5N , +3629 1530 2R , +3679 1530 2N , +3723 1532 41 48 /4D +$C +/e1\fX1A"X^]4?6s8W-!s8W-!s*iRKd`afM@4oG(Ft9u:Kua5ns7mX,h>~> +, +3774 1530 6V , +3820 1532 3J , +3917 1530 6N , +3964 1532 3R , +4015 1532 3V , +4059 1530 2F , +4120 1522 16 59 /7D +$X +n,W@drW%EJ%fcib#Clo,"+UK("+UK("+UK("+UK("+UK("+UK("+UK("+UK("2G#S!T3tW!.Ouu +!<3)h!T4'q"+UK("+UK("+UK("+UK("+UK("+UK("+UK("+UK("+UK(#Cm$Z*ru9?quHKl5QC~> +, +4163 1557 6B , +4212 1522 13 59 /4H +$X +^]<9mn,W4`GQ<*k49.PF*rmA_%fd,j#Cm&p#J^H""5j:>"7Q?\!Up-Z!Vc]j!;HQh!;HQh!;HQh +!;HQh!;HQh!Vc]j!Up-Z!Up-Z"5j:>"5jF"#J^S[%tG1@%fd[O*WSA(490a/GQ@45n,VAH5QC~> +, +4259 1520 17 45 /7H +$C +,P:`FDsuHX\+f:ghg]j2s"c,7[/Xn7'E~> +, +1083 1440 2F , +1133 1442 5F , +1182 1463 2J , +1230 1445 5J , +1279 1440 2N , +1321 1442 5N , +1373 1440 2R , +1439 1432 5R , +1467 1440 2F , +1518 1440 2V , +1562 1427 5V , +1619 1430 2Z , +1715 1467 6B , +1753 1440 3F , +1803 1440 6F , +1851 1440 2F , +1899 1440 2F , +1950 1440 2V , +1996 1442 3J , +2106 1441 6J , +2137 1440 3F , +2190 1442 32 49 /4L +$C +-D8o[eaIDcmHca5NOsB$gUD(V]6</FG4"%nDYpnk^R4Zl?aR$(.h+";.g?Wk:r7r$~> +, +2286 1463 2J , +2331 1440 2F , +2381 1440 6N , +2428 1442 3R , +2475 1440 2F , +2576 1440 32 48 /7L +$C +3q@5]28Tl45)C7CJdp]NDbm8&qS1qRXECPo&qX%YGsGgE.Nu\8Ln,._Ju,JS5_A8#qcir%I_s`Q +@*]0MTnm!W$kU2~> +, +2621 1440 6N , +2668 1442 3J , +2717 1440 2R , +2814 1463 2J , +2863 1440 2N , +2910 1440 2V , +2953 1442 5N , +3001 1442 5N , +3054 1440 6V , +3100 1442 3J , +3149 1440 2R , +3256 1432 3Z , +3296 1440 6Z , +3341 1440 6N , +3388 1442 3J , +3437 1440 2R , +3535 1440 2N , +3577 1442 5N , +3629 1440 2R , +3679 1440 2N , +3723 1442 4D , +3774 1440 6V , +3820 1442 3J , +3920 1440 6Z , +3965 1440 6N , +4012 1442 3J , +4061 1440 2R , +4120 1432 7D , +4163 1467 6B , +4212 1432 4H , +4259 1430 7H , +1083 1350 2F , +1133 1352 5F , +1182 1373 2J , +1230 1355 5J , +1279 1350 2N , +1321 1352 5N , +1373 1350 2R , +1439 1342 5R , +1467 1350 2F , +1518 1350 2V , +1562 1337 5V , +1619 1340 2Z , +1715 1377 6B , +1759 1352 34 48 /4P +$C +,D/uSVd'3$s8W-!s8W-!s8W-!s362r~> +, +1806 1350 6V , +1849 1350 3F , +1901 1350 6N , +1951 1352 4P , +2058 1351 6J , +2095 1352 4P , +2190 1373 2J , +2235 1350 2F , +2285 1350 6N , +2332 1352 3R , +2379 1350 2F , +2488 1342 3Z , +2522 1352 43 45 /0A +$C +/f6IWCM@FbY?ri19E3H:rk=`Np%A930<a^+J,3MZf@'Np^;$kJp&0;g?VB_]qHcBnjO?3>(T#m~> +, +2574 1350 6V , +2617 1352 5N , +2669 1350 6N , +2730 1351 12 34 /4T +$X +++QT6J)L@rs7$'Xs6tNrJ)EQ,"onW'zzzzzz++QSkJ)L@rs7$'Xs6tNr5JS@k~> +, +2824 1342 7D , +2867 1377 6B , +2916 1342 4H , +2963 1340 7H , +1083 1260 2F , +1133 1262 5F , +1182 1283 2J , +1230 1265 5J , +1279 1260 2N , +1321 1262 5N , +1373 1260 2R , +1439 1252 5R , +1467 1260 2F , +1518 1260 2V , +1562 1247 5V , +1619 1250 2Z , +1715 1287 6B , +1757 1260 6N , +1804 1262 3J , +1851 1260 2F , +1902 1262 38 34 /0E +$C +,DL+/.)5f^s8W,upV$#LmtSX^fP1'1?n2EsTo-Gh+Og~> +, +1948 1247 40 48 /4X +$C +,D1;cUc7]<mea`e^Uiik+7>?iV#KUC\khaXqkX5U5IsYYQeSA1l$^-MD?u$E3d4[~> +, +2058 1261 6J , +2093 1260 6N , +2147 1287 6B , +2196 1252 4H , +2243 1250 7H , +1074 1082 1J , +1142 1081 33 59 /0I +$C +4A^UUF@F"/+Q%*252U^rn$i=DDZ=YPqfhdarnmG;p`_rip>536&)1;rf4(o\57MEda5;CDn,N,b +J4OrFi:$~> +, +1179 1081 1T , +1201 1081 39 40 /1V +$C +/r2S:=F5hknGJ5h\deQkh;>I*rSQK3h=lEV\$/8LnU:b)rO;1Mn(W>9mIG##*U_\K4hfdjltgXq +G7SnPK2CLq~> +, +1238 1081 45 60 /4L +$C +1hNb=T_EOKmN1gALF!Hs]J0+thm\Yr[sbaQp\s'YaQNT.hsKmEs1Q&ChgPBGqepD][aTuICiJmc +>EAaWs1\O1XGm9KaLOU@e,~> +, +1306 1081 1V , +1342 1081 1P , +1381 1081 1X , +1439 1081 18 59 /5B +$C +02Qn?_oTlE%Ih9Im!le-^Ycg'^]/NXIfJm6rVqA^rpO%8JjX(##6~> +, +1461 1081 1T , +1484 1081 1V , +1520 1081 1P , +1579 1081 29 40 /0M +$C +4=hUskWFdKOC@?382o;MIR!l4^Ycg"rNfT&p@!FDh[T;.@>,+uW%_$~> +, +1604 1081 43 59 /5F +$C +5);9H:k%hbmJ)$k[sc"%]DHgOqu,F,s*&s2r$"@P,Q6AHIr>.4g[<hin$i!/lnS7HnG<a6>]9B: +^An*'PQF4n_M<X~> +, +1644 1081 38 40 /0Q +$C +1QJjIT&J%?\9klR\L;m=2n&1a^&HjD\*a'2rS<OLp@l<$[f5a_s)._k\,3YhiNTc-@>lrS+bU[~> +, +1687 1081 29 40 /5J +$C +0![qCn,*(\rVQQlhgYomrn/Cfg[FTJafi,Y.h?'AmIAr?L,ZjWpM;Z)J,~> +, +1710 1081 0Q , +1754 1081 0M , +1786 1081 2B , +1805 1081 1P , +1844 1081 5J , +1895 1081 1T , +1918 1081 1V , +1974 1081 1P , +2013 1081 1V , +2058 1081 2B , +2084 1081 5J , +2107 1060 45 61 /0U +$C +1akWRjEM[Jheu6_iS2&bpM\g`^A[4ukW`qQVsa+1g[O*trnDX8n+Q4Y7m?q3qu=/)rql]^s8BY2 +pH<G'r&26KiSOP"3'0Q2D?~> +, +2175 1081 1X , +2233 1081 1T , +2247 1081 4L , +2287 1060 46 61 /1Z +$C +,R&c)#`Cri&2<;jh'VdMDb^8hm^li\$!hDED(?#@$oFZ4PSg>QWD_<L?M<hF#m_OV6s^@bDb\Yu +\#02orVbXQqtKh.a*"k.X)_-n(eLu/_Li0~> +, +2327 1081 1P , +2366 1081 2B , +2413 1081 2B , +2432 1081 39 40 /0W +$C +3Xu]^%Z%b<"Pk3X]f0!bIJrp7s*aq8hr"Fj^Yca!mr`NMXh(sF_[0GDC()K~> +, +2495 1081 0M , +2520 1081 0W , +2563 1081 57 40 /5P +$C +/r7G64J%56H[(#-r'/9CIHWBZiO?8QnFu[jmf3=A^$bpghnSUHrpBaE&bZeY^\?Qt\(c9.]5ILm +I%%4oL[NpOlog,@h7P\$+(JejL>D8;4l*V]3,0EmGQ~> +, +2626 1081 5P , +2680 1081 0Q , +2723 1081 1V , +2760 1081 4L , +1083 990 2F , +1133 992 39 48 /5F +$C +,D^FHWnljrAH,<!dckkb>qVI:V:+(%9,4PGXrHd%+)eXCiP*4sp@ogBSbhCHs8W+]`3%q~> +, +1182 1013 2J , +1230 995 36 39 /2L +$C +,H;7a_m^%6@D`QlG2\2b3+9]7)mJ:V$oh\M8e=gNKG5Q.64+9#JqOje5sbni:kGN0@9?>~> +, +1279 990 2N , +1321 992 5N , +1373 990 2R , +1439 982 5R , +1467 990 2F , +1518 990 2V , +1562 977 5V , +1619 980 2Z , +1715 1017 6B , +1753 990 3F , +1807 992 3V , +1852 992 3J , +1901 990 2R , +2010 991 6J , +2045 990 6N , +2142 995 36 39 /1A +$C +#sr&e:mD1i-p^0,&tkp%#Uhu8:m<)r"UHSYiJ.h$@D`T10]@cq3+:Qr*&-?,$p/F\E7=~> +, +2187 992 43 45 /5T +$C +,D-4u.GIie,6.LHp"0-qoY8iS9<RSpCaHHp%N%jD?*;'3G5HYGg[%,]Dn"KgnDA/nfR::M(c2An +G,b~> +, +2237 990 6N , +2284 977 4X , +2334 1013 2J , +2385 985 30 61 /1E +$C +#ub+_9@EIHX/c#&Q_iqm?C02b?VAi>]e<%,qQ?m`H<ur7okF~> +, +2428 992 3J , +2478 995 2L , +2584 982 3Z , +2624 990 6Z , +2669 990 6N , +2716 992 3J , +2765 990 2R , +2863 990 2N , +2905 992 5N , +2957 990 2R , +3007 990 2N , +3051 992 4D , +3102 990 6V , +3148 992 3J , +3248 990 6Z , +3293 990 6N , +3340 992 3J , +3389 990 2R , +3448 982 7D , +3491 1017 6B , +3540 982 4H , +3587 980 7H , +1074 812 1J , +1134 790 43 61 /5X +$C +3E[N/qg\Wq^[M1#q1HUJ4G:N>K6@n=\(g<<qffdRqsNqIh>b4Wrr2[\If&JmmbbMJTD&/jnAEn* +(h'JM;"&U`%7>bE~> +, +1174 811 0Q , +1218 811 0M , +1242 811 42 60 /1I +$C +5)FV6;q_c>:@^=SF;sHLpt[Uk]&2ajokf2i_B\A_+o:Zb[;YI+qg35MqgF7P@$]I?Hag\C(E\.A +rV-?JAH7h_S=nXp~> +, +1306 811 1X , +1363 811 1T , +1378 811 4L , +1418 790 1Z , +1458 811 1P , +1497 811 2B , +1515 811 33 40 /2D +$C +-l*(/#EaGmK+C]1Dn#2M^\]$jUptJB0*ssE((,j_i3fc)0Al`?F`2(H$n,To-t,@~> +, +1083 720 2F , +1133 722 5F , +1182 743 2J , +1230 725 2L , +1279 720 2N , +1321 722 5N , +1373 720 2R , +1439 712 5R , +1467 720 2F , +1518 720 2V , +1562 707 5V , +1619 710 2Z , +1715 747 6B , +1754 707 5V , +1806 720 6V , +1855 720 2N , +1901 722 5F , +2010 721 6J , +2041 720 3F , +2097 722 3N , +2202 721 6J , +2233 720 3F , +2286 722 32 49 /7J +$C +-D8o[eaIDcmHca5NOsB$gUD(V]6</FG4"%nDYpnk^R4Zl?aR$(.h+";.g?Wk:r7r$~> +, +2394 721 6J , +2431 722 4P , +2538 721 6J , +2573 720 6N , +2670 743 2J , +2720 720 6Z , +2767 722 3V , +2813 720 2R , +2861 720 6N , +2959 722 4P , +3005 720 6N , +3056 722 36 48 /6B +$C +,DL&R.)5f^s8W-!s8W+c%*EdY?iU-(]6H+df\tef~> +, +3099 720 2F , +3155 710 7H , +3243 720 6F , +3290 707 5V , +3341 720 2R , +3390 720 6V , +3435 720 2F , +3485 720 6N , +3539 747 26 24 /6B +$C +3KcF;f)N/Xs',Ns^]4=<s7X5-rr~> +, +3588 712 4H , +3635 710 7H , +cleartomark end end pagesave restore showpage +%%PageTrailer +%%Page: 3 3 +%%BeginPageSetup +GS_pswrite_2_0_1001 begin +612 792 /letter setpagesize +/pagesave save store 100 dict begin +0.1 0.1 scale +%%EndPageSetup +gsave mark +K +Q q +0 0 6120 7920 re +Y +2796 7462 32 7 /6A +$C +0H"*/rO`~> +, +K +2854 7438 47 71 /1S +$C +3WtXt'>Rrc+m9sQ0^'Y9K6gtko\CnhVX*OElJqjCl_Wo>ZVjF#$"C;N@&6u`h7-nJh7N-"hjen? +qtf4(m<4c&_b11AMMA6:L(l>7_*@~> +, +2929 7462 6A , +Q q +1939.4 6809 1881.21 151 re +Y +q[1881.21 0 0 151 1939.4 6809]concat +299 24 8[299 0 0 -24 0 24]@X false 3 +colorimage +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdbcs8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s+#WMs8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8RV"JAAt9^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qbJNJ:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0# +J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0# +J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0# +J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0# +J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0# +J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0# +J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0# +J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0# +J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N1Ms8TmM^qdb$s8W-!s8TmM^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qbJNJH,ZLs8W,7^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qda9J:PGN^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qda9J:PGN^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$s8W,7^qdb$_#OH7s8W,7^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qda9J:R\"s8W-!^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$J:N0c^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$J:N0c^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$_#OH7^qdb$^qg!Ms8W-!^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$J:N1Ms8W-!s1lFc^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^jprc^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^jprc^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qg!Ms1lFc^qdbcs8W-!s1lFc^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^jprcs8W-!s8TmM^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qbJNJAAt9^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qbJNJAAt9^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdbcs8TmM^qdb$s8W-!s8TmM^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qbJNJH,ZLs8W,7^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qda9J:PGN^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qda9J:PGN^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$s8W,7^qdb$_#OH7s8W,7^qdb$^qdb$^qdb$^q]pMzz!!'gM +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^q]pM!5QCc^qdb$^qdb$^qdb$!!!#7^qdb$ +^qdb$^qdb$^qdb$^qdb$^qda9J:R\"s8W-!^qdb$^qdb$^qdb$^qdb$^q]pMz!!!#7^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qd_c!!'gM^qdb$ +^qdb$^qdb$^qdb$J:N0c^qdb$^qdb$^qdb$^q]pMz^qdb$^qdb$^]4?7^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$J:N0c^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$_#OH7^qdb$^qg!Ms8W-!^qdb$^qdb$^qdb$^qd_c!!'gM^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^]4?7^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$J:N1Ms8W-!s1lFc^qdb$^qdb$^qdb$!!!#7^qdb$^qdb$!!!#7^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$!!!#7^qdb$^qdb$^qdb$ +^qdb$^jprc^qdb$^qdb$^qdb$^qd_czz^qdb$^q]pM!5QCc^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^jprc^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qg!Ms1lFc +^qdbcs8W-!s1lFc^qdb$^qdb$^qdb$!!!#7^qdb$^qdb$^qdb$^qdb$^]4?7^qdb$^q]pMz^qd_czz +!!!#7^qdb$^qdb$^qdb$^q]pM!5QCc^qdb$^qdb$^qdb$^qdb$^qdb$^jprcs8W-!s8TmM^qdb$ +^qdb$^qdb$^]4?7^qdb$^qdb$^qdb$^qdb$^qdb$^]4?7z!!'gM^qdb$z!!'gM^]4?7!!!#7^qdb$ +^qdb$^qd_czz^qdb$^qdb$^qdb$^qdb$^qbJNJAAt9^qdb$^qdb$^qdb$zz!5QCc^qd_c!!'gM^]4?7 +zz!5QCc^qd_czz^qd_c!!'gM^qdb$^qdb$^q]pMz!!!#7^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qbJNJAAt9^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdbc +s8TmM^qdb$s8W-!s8TmM^qdb$^qdb$^qdb$^]4?7zz!5QCc^qdb$^q]pMz^qd_c!!'gM^qdb$^qdb$ +^qdb$^]4?7^qdb$^qdb$^qdb$^qd_c!!'gM^qdb$^qdb$^qdb$^qdb$^qdb$^qbJNJH,ZLs8W,7 +^qdb$^qdb$^qdb$^qdb$^]4?7z!!'gM^qdb$^qd_c!!'gM^qdb$z!!'gM^]4?7!!!#7^qdb$^]4?7 +!!!#7^q]pMz^qdb$^q]pM!5QCc^qdb$^qdb$^qdb$^qda9J:PGN^qdb$^qdb$^qdb$^]4?7^qd_c +!!'gM^qdb$!!!#7^qdb$^qdb$^qd_c!!'gM^qdb$!!!#7^q]pMzz!!'gM^]4?7!!!#7^qdb$^]4?7 +!!!#7^qdb$^qdb$!!!#7^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qda9J:PGN^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$s8W,7^qdb$_#OH7s8W,7^qdb$^qdb$^qdb$^q]pM!5QCc +^qdb$^qdb$^qdb$^qdb$^q]pMz^qdb$^qdb$^qdb$^qdb$^q]pM!5QCc^qdb$^qdb$^qdb$!!!#7 +^qdb$^qdb$^qdb$^qdb$^qdb$^qda9J:R\"s8W-!^qdb$^qdb$^qdb$^qdb$^qdb$^]4?7!!!#7 +^qdb$^qdb$zzz!!!#7^q]pMz^qdb$^q]pMz^qd_cz!5QCc^qd_c!!'gM^qdb$^qdb$^qdb$^qdb$ +J:N0c^qdb$^qdb$^qdb$^q]pM!5QCc^qd_c!!'gM^]4?7^qd_czz!!!#7^qdb$^]4?7^qd_czz!!!#7 +^q]pMzzzz^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$J:N0c^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$_#OH7^qdb$^qg!Ms8W-!^qdb$^qdb$^qdb$^qd_c!!'gM +^qdb$^qdb$^qdb$^qdb$^qd_cz!5QCc^qdb$^qdb$^qdb$^qd_c!!'gM^qdb$^qdb$^qdb$^]4?7 +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$J:N1Ms8W-!s1lFc^qdb$^qdb$^qdb$^qdb$^qdb$^]4?7 +!!!#7^qdb$^]4?7^qdb$^qdb$^qdb$^qd_cz!5QCc^qd_cz!5QCcz!!'gM^qdb$!!!#7^qdb$^qdb$ +^qdb$^qdb$^jprc^qdb$^qdb$^qdb$^qd_c!!'gM^qdb$!!!#7^q]pMz!!!#7^qdb$^]4?7^qdb$ +^q]pM!5QCczzz^qd_cz!5QCc^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^jprc^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qg!Ms1lFc^qdbcs8W-! +s1lFc^qdb$^qdb$^qdb$!!!#7^qdb$^qdb$^qdb$^qdb$^]4?7^qdb$^q]pMz^qdb$^qdb$^qdb$ +!!!#7^qdb$^qdb$^qdb$^q]pM!5QCc^qdb$^qdb$^qdb$^qdb$^qdb$^jprcs8W-!s8TmM^qdb$ +^qdb$^qdb$^]4?7^qdb$^qdb$^]4?7^qdb$^q]pMz^qdb$^q]pM!5QCcz!!'gM^qdb$z!!'gM^qdb$ +!!!#7^q]pMz^qdb$^qdb$^qdb$^qdb$^qbJNJAAt9^qdb$^qdb$^qdb$!!!#7^qdb$^]4?7zzz^qd_c +z!5QCc^qd_c!!'gM^]4?7zz!5QCc^qd_cz!5QCc^qd_c!!'gM^qdb$^qd_c!!'gM^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qbJNJAAt9^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdbcs8TmM +^qdb$s8W-!s8TmM^qdb$^qdb$^qdb$^]4?7zz!5QCc^qdb$^q]pM!5QCc^qd_cz!5QCc^qdb$^qdb$ +^]4?7^qdb$^qdb$^qdb$^qd_czz^qdb$^qdb$^qdb$^qdb$^qbJNJH,ZLs8W,7^qdb$^qdb$^qdb$ +^qdb$^]4?7z!!'gM^qdb$^qdb$^q]pMz!!!#7^qdb$^]4?7!!!#7^qdb$^]4?7!!!#7^qdb$^qdb$ +!!!#7^q]pM!5QCc^qdb$^qdb$^qdb$^qda9J:PGN^qdb$^qdb$^qdb$^]4?7^qdb$^qdb$^]4?7 +!!!#7^q]pMz^qd_cz!5QCc!!!#7^q]pMzz!!'gM^qdb$^qd_czz^qdb$^qdb$^qdb$!!!#7^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qda9J:PGN^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$s8W,7^qdb$_#OH7s8W,7^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qda9J:R\"s8W-!^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$J:N0c^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$J:N0c^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +_#OH7^qdb$^qg!Ms8W-!^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$J:N1Ms8W-!s1lFc^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^jprc^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^jprc^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qg!M +s1lFc^qdbcs8W-!s1lFc^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^jprcs8W-!s8TmM^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qbJN +JAAt9^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qbJNJAAt9^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdbcs8TmM +^qdb$s8W-!s8TmM^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qbJN +JH,ZLs8W,7^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qda9J:PGN +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qda9J:PGN^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$s8W,7^qdb$ +_#OH7s8W+LJ:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0# +J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:R\" +s8W-!J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0# +J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0c^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$J:N1Ms8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!^qdb$^qg!M +s+#WMJ:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0# +J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N1Ms8RV" +J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0# +J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#J:N0#^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^jprcs8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s1lFc^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$~> +Q +K +Q q +0 0 6120 7920 re +Y +1942 6639 49 62 /6X +$C +-D4_^OB`4hR_Saos6fpemJm3l)7.)jN"5=VpAb0Is7-j%]Dqp2n)1^[VI8//~> +, +K +1992 6638 24 65 /2J +$C +4Qnrems,k-_gFD\gj\_kn,DeS^\tqAJ*&8jfR,F.LPNN"+9#4.KAC_Je27~> +, +2009 6614 53 68 /7C +$C +3e`/.5X9nJ#sdGN"s+=nODdkEo\]WIpKat,V/:(GFK@=$KV=-b0PNh1K*tYdX]iF*hF%YU3'c\\ +kCa[oS'uJKmJG@^p\t0\s*aq%qB4h-g[1ll,PY]#JVH-m6%o~> +, +2062 6638 46 44 /2N +$C +1M&Y@cue7*hX>FS..0MEkSp1'h7%<@%u0F6^MU[=rVa@rqes)rhm\#pIG`q1pO@\]^A$JmINR=Y +_sSAur',O`iPFF~> +, +2112 6638 34 44 /7G +$C +32hc\n)+*$rSRS2rVM(o#`mj>me_FIGAInZ<l8*gFrp.mgMS*W%cP<[S,~> +, +2147 6638 34 44 /2R +$C +1DUN]6.<oF*?]8dLIo3!dsOA%s1dIIOJ4"U,1U;G_2!!IiJ29a_sQ2s^$aYPDf6*PWsqE2%h'j?TE~> +, +2205 6639 36 63 /7K +$C +3"6f26,+F,?W[9qs8T_2rpTma^]3a%s1A=1n)eE'nGGAcHliP73e7nt*ZbhuK~> +, +2250 6639 14 10 /2V +$X +"5jFZ#P\Q%#Q+i)#Q+]%"8i/o~> +, +2296 6639 57 62 /7O +$C +-NbE3"m%_4^Ycg+GQ7X!s7c!^hnT2?s8Dip3Fl^is52\jqu5u4iO\#%n,~> +, +2351 6638 63 44 /2Z +$C +,T0?rJV4N%FO5BG,$U1HkVeN@:I2S$\#/E)pY4Hin+Ub0htQJ]IJ_p:DVb?eGCB44n,%:sID>f# +[r3q/p\VFKhR;jVgW]a9]<1P8mau9r+qDJ?~> +, +2416 6638 37 44 /0D +$C +1_pW^6.$!ii<C;Fh(-s&^X@&XIsq:qrP/?fs1e#Hqu5L?n(PHZm^DE7_[Ih"<%su^J,~> +, +2479 6638 39 67 /3D +$C +1`RWWK:qc_\j;+Ko\J9hqsWt?s)%eFqfgrTp@l9#n%X%^&cOG8,Mq=e[bnO*&(k[&gK+p'>T[JE +rr)lSpYW(1@dr1:3'9;~> +, +2521 6638 2N , +2571 6638 28 59 /0H +$C +4EMY6pUlCBg(!Q/Dn!!ds4dSNJ,aHemJl=b7H*40A?"J$J+ruWs+]Lkhu~> +, +2601 6638 0H , +2631 6638 0D , +2671 6638 46 44 /3H +$C +3/WJZKEl?!mr86^7<dGo5DK&YnFutMhgb+.mJjrW^B@'ahm,CnqmQM'h<htcrP,hbc*qlHLY-s$ +0sTID%e/HF*Xr4e~> +, +2721 6638 31 44 /0L +$C +4<tIt60(gd6&1+4[,8UT^AdTuO6bb:YXorSK#1J%"d$S5$WIlXfB#5DrP&6Eg=lpg(fi??(ao~> +, +2756 6626 18 24 /3L +$C +,PZH\]6h9Zn(Za/p[.p3K7E~> +, +2801 6638 36 44 /0P +$C +0cI&%*mf#t%egJYG9W(>gHiOmgY9X5ms"0VDnCJcqql>YGPcaahsKmEs*&\dqqg3.^\6EjYepXL +_eom9\,~> +, +2864 6638 22 67 /3P +$C +2XooniU4eCkV2dMDoVhFs6fpaJ,aHemJlp1rpTmCs53SJs7u0(%WrUJ2u~> +, +2889 6638 0P , +2929 6638 3D , +2971 6638 2R , +3006 6638 3P , +3053 6638 0P , +3093 6638 3H , +3143 6638 43 67 /0T +$C +2Tg>sT_EOJ4l5WPG9_)!%H5%W2qu5t2V@a&hr!h1n*f"Lp.%=@f`0gcg\p#Z]>"19rn[I"^AYG* +0N_ht4;e]S(]T!Bn,*(`jM571,,5AQ~> +, +3211 6638 0P , +3251 6638 3H , +3324 6638 2R , +3359 6638 3H , +3409 6638 0H , +3439 6638 7G , +3466 6614 52 68 /3T +$C +,SVAC*B]7?Jdpt"VsW@"gU>maIbt%<Du4Q1kW>^0l/)BQ7<a%erP,sm^?tm.rV$62n%\aHJ+ip> +\,QC,rndIFq@@K$_[Ur7%c-o/*ni+%~> +, +3542 6638 2Z , +3607 6638 2J , +3632 6638 0T , +3669 6614 7C , +3722 6638 2R , +3757 6638 0H , +3787 6639 2V , +719 6456 60 69 /3F +$C +226&?X:j(Vs8W-!s8W-!s8W-!s8W-!s3*SAs8Vcls8W)e]ja4A~> +, +780 6456 58 72 /7M +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qco"??GfF?_0Zp7?*;dfE5?Pos8W-!s7M]^ +s+AH!#Cl~> +, +838 6456 28 69 /2V +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +868 6454 40 49 /6H +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +937 6428 56 75 /3V +$C +/d=P.LUCpts8W-!s8W*W++t[YiU7o"_nlWIR!K5#0_F9"If'$2n,<4bs7cQnYPu4PGO6ub73.&n +$mep_/@[=OG.U\h_[93uT^3@4(ao~> +, +997 6455 48 48 /6J +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +1047 6456 38 47 /3Z +$C +0H#A^_V2d)s8W-!s8W-!hqnUF[?3rg<K18!0`S\NG9dORiPEE.~> +, +1087 6455 33 63 /7H +$C +22MSu?.7U@]^UPYFoVLAs8W-!s8W,u?o*0m2B4J$*'aK's6osmLPLB~> +, +1119 6456 2V , +1148 6454 42 49 /3N +$C +-,RJ0,D$.,dtC(&BFm314U.0';Uopg0D5AFqu:T"GOO;dD/K!tg22NP(b6GB_Li1('E~> +, +1193 6455 59 48 /7B +$C +,6G^d:()^rSt(K"WZ[OKKH'R@829B/hbX7Os8W-!s8W-!s8W-!s8K(pJ6^S3s7>3jJF\7`JS/"W +3,n?~> +, +1253 6456 28 72 /4F +$C +0EsY0/Z\pOs8W-!s8W-!s8W-!s8W-!s8W-!lS&`s4p`JB2)k~> +, +1282 6455 6J , +1332 6456 3Z , +1400 6428 3V , +1460 6455 6J , +1510 6454 3N , +1554 6455 56 73 /6F +$C ++LJp$5kmV@ADpOa$L)XK9;U)$FLka1QV41'l#aLB/sf3GX^kL=qgH2riP+2XpA99P(k'-9mIh'p +IJ`R7s8W-!s8K>)a7J5P5dOC>~> +, +1638 6454 3N , +1682 6454 52 49 /3B +$C +-,RJ#Jd4TY+S0[\0^1M^2l>gu<qXnToWS5,FoUmEs8W%)rjpk_Fh_cG[d)RJ9#F9R9#61SMQibj +PlW!~> +, +1737 6456 88 47 /5V +$C +0Eoc'K:jmrq)D8+/;`aO>(?SPs8W-!s8W-!s8W-!s8W-!s8W-!ri?'Cm5<d*9l_ZL&>Ouf@AMUU +!4rFJ@)DUq/%!gM.m^-W@A]^a-57F:+CLi~> +, +1825 6456 5V , +1914 6455 6J , +1964 6456 58 47 /3P +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qcY0ReuU^)_0-YK@^p/t4&U'%SJqnU0Mh~> +, +2022 6455 59 74 /6R +$C +,6PadBFG%9o].Bt<'f[3Jd*;_2s<!EI=:?D^Ak&0qZ$Tqs8DutIK/3^Iqs28[alB*$o"p%K#8Q` +"?mZ-1+_tqs8W-!s8?J%(]Hk@a^F0ZLO]~> +, +2110 6428 3V , +2170 6455 6J , +2220 6454 3N , +2264 6455 6F , +2320 6454 6H , +2390 6455 7H , +2423 6456 7M , +2481 6454 46 49 /3R +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +2557 6455 82 48 /6V +$C +--V`>h0uuM[/YPgrB9d@+!SJRhOje2e\;&ZVUk)5[%C.MH@FT)^[7iQJ+m9?>HRpIY?pm>YNtG4 +lW<i0='tEF]"Q[tSt*;=F&6Q9h].OYhu~> +, +2640 6456 2V , +2669 6455 6R , +2731 6427 55 76 /4M +$C ++p6(UU(D9p_BI4g&2<;jh&tN#o\CkkFnFSgJ,d.Xs(u]/=CJ9h&r&_O@t^O*>/J*d6!EuahV:&- +aAQDs_@@-!5s.7@DNJb"HG82g\$+]hs53/>Bn"bZS_ZAA[]D/Z`.uhrTnOs!J,~> +, +2786 6454 3R , +2834 6455 7H , +2867 6454 6H , +2937 6456 3P , +2995 6455 6J , +3045 6456 5V , +3133 6454 3R , +3181 6455 6R , +3293 6454 15 14 /4I +$X +"2GHB5Q!bFJ,XrsJ,XrsJ,XrsJ,V\1+8>rR~> +, +3329 6454 56 62 /1A +$C +,Ap0V:'Cb1Tg"9*%d8k,,W$'NTS%Y>qG#tA:$KCgqg/:sYQ+Y&m<\c`f%9dlBk<=V[[1h`_[1Jp +-.o@;>VNZrEW?(=s7sI<pOE~> +, +3397 6456 43 61 /3W +$C +4;sIXU`9@6s8W-!s8W-!s8W-!s8W,^rdji/#K$e_NXlAXk6HM~> +, +3450 6441 23 27 /5C +$C +0k&hmpMY93^MeSYh7p_lq5@]N~> +, +3526 6454 4I , +3562 6454 1A , +3630 6456 42 61 /3Y +$C +/e+Gr)oLFbgY:I*6+_*l]+3Z/G4"%nDV_pJmG#*fh7MFNDqi"ps.'&\mA9c`]'F2`%4bk'0U7Gp +TnN[b~> +, +3683 6441 5C , +3759 6454 4I , +3803 6456 45 60 /0W +$C +2@YoEU`9@6s8W-!s8W-!s8W-!s8W-!s3/9>qu~> +, +3856 6441 5C , +3909 6455 6J , +3959 6456 3P , +4017 6455 6R , +4129 6454 4I , +4173 6454 46 45 /4X +$C ++O4a+i.reS6.$'k_BN_8!X@j2h&tE;W_I/@C:^R_oWehD^WDC>HN)Lg[CpEoV/7fdL6]!.K*7m( +:t.1mJq*~> +, +4255 6456 2V , +4284 6456 3P , +4342 6455 7H , +4375 6454 3B , +4459 6455 7H , +4492 6456 7M , +4550 6454 3R , +4626 6454 52 58 /1V +$C ++Dt22n;'$mK;'!rU-/Uq+pCM##-'`as8W-!s8W-!s8P8$eb5lLs8W-!qLA~> +, +4694 6454 47 45 /4V +$C ++PbNY":bub6JI/]+?BW7cp>6;dVhoQ]fg:0<qZHofDkmNmA9jMDd-Gsf%O0Q[[%b4@>(^9K!A.h +L(kIQ~> +, +4746 6437 56 62 /1I +$C +3!q,3aUeFOs8W,sL(f.]^j&07KBS.Ncm,Lc$,2!#oUEfYVpfsAH@Pgis8W,r?GEo@[G>\?a(]_F +m=`,+Ph9rm$$Ii'Xr("?'E~> +, +4836 6455 6V , +4919 6456 2V , +4948 6456 3P , +5007 6478 6A , +719 6335 6R , +780 6334 3B , +835 6335 6V , +947 6335 51 73 /5X +$C +5EglT+SH@k^#U$'FpL$[_nllJqgH5-rV-'chuE_+s8Vrqrg*Md?)<,t[I'gC0OD_A]3VSk$n_r) ++92B@s8W+%2$O#4bf,_b~> +, +1002 6334 3R , +1050 6307 4M , +1106 6336 2V , +1135 6336 3P , +1193 6336 3P , +1251 6336 2V , +1280 6336 3P , +1339 6307 4M , +1423 6335 6J , +1473 6335 7H , +1535 6335 7H , +1568 6336 7M , +1626 6334 3R , +1703 6336 4F , +1732 6334 3R , +1780 6336 35 73 /4B +$C +0Esb+"P*PPs8W-!s8W-!s8V6a07FEB%#Z/ks8W,Vqtkj:[L0nZ`p\\%_LM~> +, +1813 6335 7H , +1875 6334 6H , +1917 6336 2V , +1946 6335 6R , +2008 6334 3R , +2063 6335 11 12 /0D +$X +*rnNUJ&)*Bs5<q8s5<q8s5<pmJ&!-+~> +, +2109 6336 3F , +2170 6336 7M , +2228 6334 3R , +2304 6334 56 44 /3P +$C +,i""TKGgGEK="%NoE_*ncnOSP#WMH?#HR+dp](9ns8W-!s8W-!s8W-!s6%7`i:[+oJ,~> +, +2364 6317 1I , +2432 6334 52 62 /5L +$C ++rokY#W"`MK<U/9H6SI9Jd1>]"Q)ebODiWjSs/p#8cSY$^]4?6s0]W?Xo5C#XgD4-C[Eb.?%s!Y +(e]T6Yde+\@<)>Is8W'dK%Ji~> +, +2492 6334 48 45 /1G +$C +3k744+D-15#AAdpoL9e"#TK*e&7PNu60UU_rVuijpY5GpI>50sLP@d5A2Znl&'+_Ml`/:<Y\T>r +/6!H_C23s&~> +, +2544 6334 1V , +2612 6334 4X , +2693 6334 3N , +2737 6334 3B , +2792 6336 5V , +2880 6336 5V , +2969 6335 6J , +3019 6336 58 47 /6N +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qcY0ReuU^)_0-YK@^p/t4&U'%SJqnU0Mh~> +, +3077 6335 6R , +3165 6336 4B , +3198 6334 3B , +3253 6336 3Z , +3292 6334 3N , +3337 6334 3R , +3385 6334 6H , +3455 6336 3F , +3516 6335 6F , +3600 6335 7H , +3633 6334 3B , +3716 6335 7B , +3776 6308 3V , +3836 6335 6R , +3897 6335 6J , +3947 6335 7H , +3980 6334 3R , +4056 6335 7H , +4089 6336 7M , +4147 6334 3R , +4223 6334 6H , +4265 6334 3N , +4310 6336 3Z , +4349 6334 3R , +4397 6334 3R , +4445 6336 6N , +4531 6336 3Z , +4571 6336 2V , +4600 6307 4M , +4655 6336 7M , +4713 6335 7H , +4775 6335 6J , +4825 6335 6V , +4908 6335 6J , +4958 6308 55 74 /4H +$C +3%Y6hmI,4)4=>r&qn9amhgXIsrOVILFl0+]j?`gAhs!)u2d]ipr?hQFX8\<4pIY>3Is(D_lMA*j +\l\aa"r!=,"Tb7n~> +, +5022 6335 0D , +719 6216 3F , +780 6216 7M , +838 6214 3R , +911 6216 3Z , +951 6214 3R , +999 6214 6H , +1041 6215 7B , +1101 6216 4F , +1131 6215 7H , +1188 6216 2V , +1217 6214 6H , +1285 6214 6H , +1327 6216 7M , +1385 6214 3B , +1440 6215 6V , +1523 6216 6N , +1606 6216 2V , +1636 6216 6N , +1719 6216 55 69 /6L +$C +0H%LnJ9qY"s8W-!s8V1Ls8W-!?gtT*q%-&Ks1eU6s,[3[q+1Pcs8W,o:72q?LG0'b?i~> +, +1774 6216 2V , +1803 6187 4M , +1859 6215 7B , +1919 6216 3Z , +1959 6214 3R , +2032 6216 43 69 /5Q +$C +-jHk!!TAb"J,fQKs8W-!s8W-!s8W-!s8U<pLX:JlKAhU%NZJ]A#D\(iJ,~> +, +2090 6215 0D , +719 6058 58 69 /5P +$C +2?s3(!F!QE)ak,7huE0FJ,A1(s88h1s8W,brYH[V+pd[fp](9nnc/Xh+F!kcs0)I>F;YW2LG/r4Du~> +, +780 6058 6N , +838 6057 7H , +871 6056 3R , +919 6058 3Z , +958 6058 2V , +987 6058 6N , +1046 6029 4M , +1134 6057 6J , +1216 6058 6N , +1274 6056 3R , +1322 6057 6V , +1405 6058 4F , +1435 6058 2V , +1464 6058 6N , +1522 6056 3R , +1601 6037 31 93 /3B +$C +"KA5$<2ioaX%J_TkuZ=+f<21RX8]1"oY:G+s8W,ds8D]jp[@j)hqRkn]A*&HgV(4BmCQ0~> +, +1634 6103 24 26 /1F +$C +4RdSWJ)B.-pUBV'g\1)S_dTJ~> +, +1662 6058 3Z , +1702 6056 3R , +1749 6057 7H , +1782 6057 7B , +1842 6058 3Z , +1882 6058 6N , +1940 6103 24 26 /5E +$C +4`80npM\gBpUfn^qtp@3,7GK@~> +, +2001 6056 52 49 /5Z +$C +-,RJ#Jd4TY+S0[\0^1M^2l>gu<qXnToWS5,FoUmEs8W%)rjpk_Fh_cG[d)RJ9#F9R9#61SMQibj +PlW!~> +, +2056 6058 3Z , +2128 6103 1F , +2156 6056 3R , +2204 6058 6N , +2262 6057 7H , +2294 6056 3R , +2342 6058 3Z , +2382 6103 5E , +2443 6057 6F , +2499 6056 3R , +2546 6030 4H , +2602 6037 28 93 /3D +$C +3RbHUG4"&?]C+PE]C,RirpTT2^[Jr;^An65s3grIWrK*t='h6DF^7nJWD_7r<2jY:J,~> +, +2639 6085 43 6 /5D +$C +0FaZL~> +, +2686 6057 7H , +2719 6058 7M , +2777 6056 3R , +2857 6056 3N , +2901 6058 7M , +2960 6057 6J , +3010 6058 3Z , +3049 6057 6J , +3099 6056 3N , +3143 6057 7H , +3176 6056 3R , +3224 6058 3Z , +3296 6103 1F , +3331 6050 43 75 /1C +$C +,o5(4Wp70uX/c,"<Rl4t=&mdn?`ND&Y,eSf\ur_h>ut%VF^8'Kf<20SlFOA~> +, +3383 6058 56 43 /5T +$C +1Bn:Ro[EN6F_)fts8W-!s8W-!s8W-!s8W)srHDINZ.ep"nC!a.@>)."]2rE/0VA~> +, +3444 6103 5E , +3504 6058 2V , +3533 6058 6N , +3623 6058 60 69 /2T +$C +1BfGjiK1'#,=ctPrr<#qs8MRA)uos<s8W-!s8W-!s8W-!s8T[WEraVc~> +, +3684 6058 2V , +3713 6058 5V , +3801 6057 5X , +3857 6056 5Z , +3914 6085 5D , +3993 6058 2V , +4022 6058 6N , +4112 6057 7H , +4145 6058 7M , +4203 6056 3R , +4283 6056 3R , +4331 6058 6N , +4389 6057 7H , +4422 6058 3Z , +4461 6030 4H , +4550 6057 5X , +4605 6056 5Z , +4660 6058 51 47 /1L +$C +0HhbLCT6iu*o7X>[[4%/>?fXbXeft#>>!^U>GYf:I8\U0m^,;BmF&STVWhAmPBq,U8\.XIjoKYt +a@E.\>`fE~> +, +4745 6058 3Z , +4785 6056 3R , +4832 6056 6H , +4875 6057 7B , +4935 6058 4F , +4964 6057 7H , +4997 6056 6H , +719 5938 2V , +748 5938 6N , +847 5937 7H , +880 5938 7M , +938 5936 3R , +1027 5936 3R , +1075 5938 1L , +1126 5936 3R , +1174 5936 3N , +1219 5937 7B , +1279 5937 7H , +1312 5938 2V , +1341 5936 5Z , +1395 5938 6N , +1495 5936 5Z , +1550 5938 4B , +1624 5937 7H , +1657 5938 7M , +1715 5936 3R , +1804 5938 3F , +1865 5937 6F , +1962 5936 3N , +2006 5936 5Z , +2061 5938 5V , +2149 5938 5V , +2238 5937 6J , +2288 5938 6N , +2346 5937 6R , +2462 5926 26 72 /1E +$C ++p]Zp7'a4+J,fQKs8W-!Y,_k)"N'qSEea%ps8W-!s8W-!h=nN*%bla~> +, +2514 5936 43 45 /6F +$C +--Bs+k9*%T&:G,"nKk6P"+"kk2m9\ds6X:'>#;Fq8V0QRcT29O5bS`qZp[t!6#*3fV#UJ^D6DID +fJ$MB6gQEDC((Zh~> +, +2574 5936 4X , +2626 5938 5T , +2694 5936 5L , +2830 5936 47 45 /2L +$C ++WT&@_B@Xm#7-+#k_lB]&2ulZkm$>udX4)MBPXeWJ,fQ'r/,hrrqlRsCN%j0CLMq$@1c#I'uLE6 +'2W(k~> +, +2882 5938 61 43 /3Q +$C +2AdhJ:_A3Oo1(F=qu?]rs8W-!s8W-!s8W-!s8W-!s8W-!pO;Seqb;8cG?JF`D.WiQ<gR9_Y1)/_ +(f=s(~> +, +2950 5936 5L , +3010 5936 2L , +3062 5938 57 60 /2X +$C +1Bn>>`B3dnFC`;hs8W-!s8W-!s8W-!s8W)sqd%e)/9[@sHYIX?9<hd*(gJc)s8W-!r:jIm^]~> +, +3130 5936 1G , +3182 5938 5T , +3326 5936 6F , +3386 5936 4X , +3438 5938 5T , +3506 5936 5L , +3574 5926 26 72 /4E +$C +4BQs>-nF2!s8W-!s8W-!]C*SX6W!P\.m[p]s8W-!s8W-!>un;k;UuN~> +, +3619 5923 5C , +3685 5937 5X , +3740 5936 3R , +3788 5936 3N , +3833 5937 6J , +3883 5937 7B , +3943 5936 6H , +3985 5936 3R , +4072 5936 5Z , +4127 5938 4B , +4200 5937 7H , +4233 5938 7M , +4291 5936 3R , +4379 5937 5X , +4434 5938 2V , +4463 5938 6N , +4522 5937 6R , +4583 5938 2V , +4612 5938 6N , +4670 5909 4M , +4765 5936 6H , +4807 5936 3R , +4855 5937 7H , +4928 5937 5X , +4983 5910 4H , +718 5816 1A , +786 5818 45 62 /0Y +$C +2@YoEU`9@6s8W-!s8W-!s8V[E,.I+BaFaHls6p~> +, +838 5818 5T , +906 5816 5L , +1056 5816 4I , +1100 5816 4X , +1234 5822 46 48 /4G +$C +#sr&eKW$:b64+?Y'a4jk5seD"TV2Mp-p^1!'Hj(Q#VQTG@G#PS0]@cq3t<3a*&-?,@Dd'%L)_o6 +3,TRA_mK~> +, +1286 5818 59 56 /1K +$C +4rXcXPgf?4UI=:s?i'*SYHGY)J#3.29DpD!g073aCaGB,@4iD"_X&nlmIpDfLAQD5hf$!AI>?SE +pA99P)sfcDphV2Wo[horTE~> +, +1354 5816 4X , +1406 5799 57 61 /6P +$C +1^ptq+W\=9g\1T\DsmM*laeE-h'_qgrTWY4])$<YS$/^Tl+6_/^72='lfl"W]"Y>NX/kOJ@=k"( +:Aq2C~> +, +1474 5844 47 4 /2H +$C +/ddj:TE~> +, +1534 5810 1C , +1586 5818 5T , +1654 5822 46 48 /5H +$C +0W7)r4)i)l*&-_=DA[?1L)l$X3,TRP_hK1e%DrYmE5TO"&5\Vq#Uhu*$50#*"UHMK&6'>dT`k`h +$A*pH(9An~> +, +1746 5790 3V , +1806 5818 3Z , +1846 5816 3R , +1893 5817 55 47 /4S +$C +.aN80rp/h061h@qkr8H5rjSg"8c@(ef(At+5J$]0oUGf-2d]Y_\*g;!Eo<U`1]Mt~> +, +1950 5818 2V , +1979 5816 5Z , +2034 5817 7B , +2094 5816 6H , +2136 5818 4F , +2165 5790 4H , +2261 5816 3R , +2309 5818 1L , +2360 5816 3R , +2408 5816 3N , +2453 5817 7B , +2513 5817 7H , +2546 5816 3R , +2594 5817 6R , +2694 5817 5X , +2749 5790 4H , +2843 5816 1V , +2911 5818 48 60 /3M +$C +,D@S_MVl*@fa*!YQV41'l#aLB/sf5-db7nuBjmiqb8kc<I>?S9^>Ek<fR:IQmIpF)L'3#)Y!;sd +s8V/![Jg~> +, +2971 5844 2H , +3031 5822 5H , +3091 5816 2L , +3143 5818 3Q , +3211 5816 5L , +3272 5817 0D , +3353 5818 3F , +3414 5818 7M , +3472 5816 3R , +3558 5816 1A , +3626 5818 0Y , +3678 5818 5T , +3746 5816 5L , +3838 5816 3N , +3882 5816 5Z , +3937 5818 5V , +4025 5818 5V , +4114 5817 6J , +4164 5818 6N , +4222 5817 6R , +4322 5818 2V , +4351 5816 6H , +4433 5816 5Z , +4488 5818 4B , +4521 5817 7H , +4553 5816 3R , +4601 5818 6N , +4700 5817 7B , +4760 5816 6H , +4803 5816 3R , +4851 5817 6R , +4951 5817 7H , +4984 5816 5Z , +719 5697 5X , +774 5698 2V , +803 5698 6N , +862 5697 6R , +953 5696 6H , +995 5670 3V , +1055 5696 3R , +1103 5696 3N , +1148 5698 2V , +1177 5698 4B , +1210 5698 2V , +1239 5696 3N , +1313 5697 6V , +1396 5698 2V , +1425 5697 6R , +1487 5669 4M , +1542 5696 3R , +1590 5697 7H , +1654 5696 3R , +1702 5697 4S , +1758 5696 3R , +1806 5698 6N , +1864 5697 7H , +1897 5696 6H , +1970 5677 3B , +2003 5698 2V , +2032 5698 6N , +2091 5696 3N , +2135 5698 4F , +2164 5697 7B , +2224 5697 6R , +2285 5698 2V , +2315 5698 6N , +2373 5669 4M , +2457 5697 56 73 /3H +$C ++LJp$5kmV@ADpOa$L)XK9;U)$FLka1QV41'l#aLB/sf3GX^kL=qgH2riP+2XpA99P(k'-9mIh'p +IJ`R7s8W-!s8K>)a7J5P5dOC>~> +, +2513 5696 3R , +2560 5670 4H , +2647 5670 3V , +2707 5698 3Z , +2747 5696 3R , +2794 5696 6H , +2837 5696 6H , +2879 5696 3R , +2927 5696 6H , +2970 5683 5C , +3024 5698 5V , +3112 5696 5Z , +3167 5697 7B , +3227 5696 6H , +3270 5696 3R , +3347 5697 5X , +3402 5697 7B , +3463 5697 7H , +3495 5697 7H , +3528 5696 5Z , +3582 5698 6N , +3671 5670 3V , +3731 5698 3Z , +3771 5696 3R , +3818 5696 6H , +3861 5696 6H , +3903 5696 3R , +3951 5696 6H , +3994 5683 5C , +4048 5697 6J , +4098 5698 6N , +4156 5697 6R , +4247 5698 5V , +4335 5696 5Z , +4390 5697 7B , +4450 5696 6H , +4493 5696 3R , +4570 5698 5V , +4658 5696 5Z , +4713 5697 7H , +4745 5698 2V , +4775 5696 5Z , +4829 5698 6N , +4887 5677 3D , +4951 5697 7H , +4984 5696 5Z , +719 5578 3F , +780 5577 3H , +868 5576 6F , +928 5576 4X , +980 5578 5T , +1048 5576 5L , +1126 5576 3N , +1170 5576 5Z , +1225 5578 5V , +1313 5578 5V , +1402 5577 6J , +1452 5578 6N , +1510 5577 6R , +1571 5576 6H , +1621 5577 0D , +720 5331 47 66 /6Y +$C +/df5imdBG!U=fSWgUD(V]6<Sr[r1$6G5#n2n%3q\rpRT]s*t%I\+[LY\7o?eEF2euTnNqC$5b3/2u~> +, +770 5330 20 15 /6Y +$C +1`Rl=FT;<CC)Bb~> +, +795 5329 47 68 /4L +$C +3fZrD5m+sl%Z!;2&2<U+GYRGe2ll?3Utth's*h\nRRpqjf*2V?qUVca-K/p\k$^7Ls8W,i)H#,d +s80-R-i~> +, +845 5330 6Y , +920 5331 59 68 /4K +$C +2@X$h3"]p%s8W-!s8W-!s6"uU6NQC8&)SW7nDA/ng[FV0^]33ks6K]g?$]a-0U3!7"YF,d:]~> +, +981 5331 39 47 /5I +$C +0H$MYTKVuJs8W-!s8W-!pTf^+(gLC'+S,W)pYU$GG9Me#iPF:~> +, +1020 5329 52 49 /7M +$C ++U++g6m-H$K]n$]*<H\uDNfBa^72=,YM9*AIfKHJs8W&LYOB6S^Uh#29@^83L6ODnTnNn(#T`~> +, +1076 5329 41 49 /7G +$C ++N9T']F[%ge#bGo7o1=Q5gn17;Yp%#qZ$Tos!&T^s1`I=XnrMYL)(WnLN)4+"pt~> +, +1120 5329 46 49 /2I +$C ++U++g6m1FjKH4dS%@Npn#4R8n%;9Hkde`s0run4!%=!O$"j!oDs6oj9f)MddD(?#G0i6DS%7:I2 +M4a~> +, +1170 5329 40 49 /7E +$C +3f>g'n3Oo%%j7D36+e>sT3%oiqqqCITh04KCBXhpb6^M`XXX\d$A^)?6ToH"%MlEM^]+8HpKJ%X +L).gSG[X3`GQ~> +, +1214 5329 7E , +1259 5331 30 71 /2M +$C +0H#A(KA-A*s8W-!s8W-!s8?^e)F*gYGmktL:jE#]AO4eC?2sl,C=Fr1~> +, +1292 5331 59 47 /3B +$C +/fA4$TE!.:j:ducs8W-!s8W-!s8W-!s8W-!YP,S6V*Tg/bD(U.Ap1dlk(&#^$q:pOW&S<Uhu~> +, +1353 5304 53 74 /7N +$C +.D[AsDZh'_KH1WC*<HH/+N)'6OFMAAn#PpGs1R:dC)b'*fMKR%-!KV<_SXAk7^%/Xh2oL.5_/q@ +#W`G-%!08pdVi2YrRJT2p](9fs46"J6Xd$EXfDjY@q7A$$n,OUE:<~> +, +1434 5331 82 47 /5M +$C +,6]M"h=[]<s0\utlW`*CC"M)"&:B+jl!8dG[nZ0pY@"\U^Zt+Lg:ut@XjZJ3Is^h[TCmWh[H[/3 +p?M[YK\^0XbG#hehs6@imtg$u2Z~> +, +1517 5331 2M , +1550 5329 58 74 /0X +$C +--g96$(;'KK@A;uOFBLHqIFR@!\e^-4qN$9VuE:%^]401s8W,ts8RNIhqHn'XgPSQ(h%6"pP4Jh +is#mPs8W-!s44J4)F*dD%jb[Ni:$~> +, +1611 5304 7N , +1667 5329 2I , +1717 5329 32 65 /3D +$C +.EZ`8VbXVnZpArR#H(r/s8W-!s8W-!q/FU2G7Ntp8,rVhs7Ni+LP*L[~> +, +1775 5329 2I , +1825 5331 55 46 /2G +$C ++N308lb?6ErglC\e\-CBqJO$>h0h4h:&_W"YGV>(e(40jlhdkb*0(n+@AEk<~> +, +1881 5329 2I , +1931 5331 3B , +1992 5329 3D , +2025 5329 7E , +719 5173 3F , +780 5173 58 72 /7M +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qco"??GfF?_0Zp7?*;dfE5?Pos8W-!s7M]^ +s+AH!#Cl~> +, +838 5173 2V , +868 5171 6H , +946 5173 6N , +1004 5171 3R , +1052 5173 1L , +1104 5172 7H , +1174 5173 4B , +1207 5173 3Z , +1247 5172 6J , +1297 5144 4M , +1352 5173 5V , +1441 5171 3R , +1489 5173 6N , +1547 5172 7H , +1617 5172 6R , +1678 5171 3R , +1726 5173 4B , +1759 5173 2V , +1788 5173 6N , +1847 5171 3R , +1894 5171 6H , +1973 5172 6V , +2056 5173 7M , +2115 5172 6J , +2165 5172 7H , +2235 5172 6V , +2318 5173 2V , +2347 5173 4F , +2377 5173 4F , +2443 5173 7M , +2501 5172 6J , +2551 5145 3V , +2611 5145 3V , +2671 5171 3R , +2719 5173 6N , +2815 5172 6V , +2898 5173 7M , +2957 5171 3R , +3004 5173 6N , +3100 5172 6J , +3188 5172 7B , +3248 5171 6H , +3291 5171 3R , +3339 5173 3Z , +3416 5171 6H , +3458 5171 3R , +3506 5173 4F , +3535 5171 3R , +3583 5171 3N , +3628 5172 7H , +3660 5171 6H , +3740 5171 3R , +3788 5173 2V , +3817 5172 7H , +3850 5173 7M , +3908 5171 3R , +3956 5173 3Z , +4034 5172 7H , +4067 5173 7M , +4125 5171 3R , +4210 5173 54 56 /1P +$C +4ppVdd?1p<s8W-!s8-&HX6KZas7--[p&G'ls2X[8HiO-Gs8W,^_,e;>~> +, +4270 5173 57 42 /3R +$C +1Bn>>`AIOjTZI4d[["5%V/7_s>>!UMd^GFJTsPQAXefkb'l)8[FQeq":"!pCFIT)^-L!H\\kUUj +PB<:G+cQNO:A(N8~> +, +4338 5173 0Y , +4390 5171 1V , +4489 5171 5Z , +4544 5173 3Z , +4622 5172 7H , +4655 5173 7M , +4713 5171 46 49 /3R +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +4806 5171 45 59 /4P +$C ++O4a2:#LTO#X/h2Dk\k8oFNs;:#Q?+IJ%o9He868a',[C$!%@(J?fS"Pi0Ik-q#(86mtGl8:a[U +Y,ebI(%8@#hqHn0[Mmm.@)=+KZ!E($$D>6Q~> +, +4866 5171 4X , +4918 5173 5T , +4986 5171 5L , +719 5052 5X , +774 5052 7B , +835 5052 7H , +867 5052 7H , +900 5051 5Z , +954 5053 6N , +1013 5051 6H , +1063 5052 0D , +1114 5053 3F , +1175 5053 7M , +1233 5051 3R , +1314 5053 1P , +1374 5053 57 42 /0T +$C +1Bn>>`AIOjTZI4d[["5%V/7_s>>!UMd^GFJTsPQAXefkb'l)8[FQeq":"!pCFIT)^-L!H\\kUUj +PB<:G+cQNO:A(N8~> +, +1442 5053 0Y , +1494 5051 1V , +1589 5052 5X , +1644 5051 3R , +1692 5053 7M , +1750 5052 6J , +1800 5052 4S , +1857 5053 2V , +1886 5051 5Z , +1941 5052 7B , +2001 5053 3Z , +2075 5053 2V , +2104 5051 6H , +2180 5051 6H , +2222 5053 2V , +2251 5053 5V , +2340 5025 3V , +2400 5053 4F , +2429 5051 3R , +2485 5052 11 47 /4O +$X +*WSETJ&)*Bs5<q8s5<q8s58CB5CagUzzzzzzzzzzz!!")@5Ce7!s5<q8s5<q8s5<pmJ&":!*WQ~> +, +2535 5052 7H , +2568 5053 7M , +2626 5051 3R , +2708 5025 3V , +2768 5053 3Z , +2808 5051 5Z , +2862 5024 4M , +2918 5053 3Z , +2957 5052 6J , +3007 5053 5V , +3131 5051 3R , +3179 5053 6N , +3237 5052 6R , +3298 5051 6H , +3349 5052 0D , +3399 5053 33 69 /5G +$C +0H%XJ!UM?&s8W-!s8W-!s8W-!s8W-!s8W-!s)k!s!MdF~> +, +3433 5053 4B , +3500 5052 6J , +3584 5052 7B , +3644 5051 6H , +3687 5051 3R , +3735 5053 3Z , +3807 5052 7H , +3840 5051 5Z , +3894 5052 7B , +3954 5051 3N , +3999 5053 7M , +4057 5051 3R , +4105 5051 6H , +4187 5051 4P , +4247 5051 4X , +4299 5053 5T , +4367 5051 5L , +4420 5038 5C , +4478 5052 7H , +4511 5053 7M , +4569 5051 3R , +4650 5025 3V , +4710 5053 3Z , +4750 5051 5Z , +4804 5024 4M , +4860 5053 3Z , +4899 5052 6J , +4949 5053 5V , +719 4931 3R , +767 4933 1L , +818 4931 3R , +866 4931 3N , +911 4932 7B , +971 4932 7H , +1004 4931 3R , +1052 4931 6H , +1118 4931 1V , +1186 4933 3M , +1246 4959 2H , +1306 4937 5H , +1366 4931 2L , +1418 4933 3Q , +1486 4931 5L , +1564 4932 7H , +1597 4931 5Z , +1676 4904 4M , +1732 4931 3R , +1780 4932 7H , +1837 4932 6V , +1921 4933 7M , +1979 4932 6J , +2029 4932 7H , +2061 4931 3R , +2109 4932 4S , +2166 4931 3R , +2214 4933 3Z , +2278 4932 7H , +2311 4931 3R , +2359 4933 1L , +2410 4932 7H , +2468 4933 2V , +2497 4931 6H , +2564 4933 2V , +2594 4933 6N , +2677 4932 7H , +2709 4933 7M , +2768 4931 3R , +2840 4931 3R , +2888 4933 6N , +2947 4932 7H , +2979 4933 3Z , +3019 4905 4H , +3099 4932 6V , +3183 4933 2V , +3212 4932 6R , +3273 4904 4M , +3328 4931 3R , +3376 4932 7H , +3462 4931 4I , +3506 4931 4X , +3584 4932 7H , +3617 4933 7M , +3675 4931 3R , +3723 4933 6N , +3806 4905 3V , +3866 4933 3Z , +3905 4933 2V , +3935 4933 6N , +3993 4932 7H , +4025 4931 6H , +4093 4933 2V , +4122 4932 7H , +4179 4932 7H , +4212 4931 5Z , +4292 4931 6H , +4334 4932 7H , +4367 4932 6J , +4417 4933 6N , +4475 4932 6R , +4536 4932 6J , +4586 4933 3Z , +4625 4932 6R , +4712 4931 5Z , +4766 4932 7B , +4826 4932 7H , +4859 4905 3V , +4919 4932 7B , +4979 4932 7H , +5020 4932 0D , +1089 4770 40 54 /1K +$C +,D/u\C.NjSs8W-!s8W-!s5h(sT=#q/s8RQ(]GMcm6ZCNl:]~> +, +1140 4768 42 42 /6P +$C +.EZ`;KH),n#=Lqj":`^D\kUUk:J&5_DbobKli7"^?[CH*g0_:R[&p0Z(;gGG"qXfbe1dQ38;.~> +, +1195 4770 42 39 /1I +$C +,D/u\C/Fs1s8W-!s81[ILR($hp;&?uC$gU.*J4YuMW(Uj'LP[~> +, +1269 4759 14 66 /5V +$X +!#tu$!.4co!;HQh!Up-Z"5j:>#J^S[%tG1@++PF5*rnM*4odbHIK4`qHiSNoHiX'EquHKlp]1'h +p]1'hp]1'hp]1'hp]1'hquHWpquD*EHiSNoIK2P34odbH*rmA_*rlh%%tG2+#J^S["5j:>!Up*Y +!;HP=!.4c/!#ttE~> +, +1308 4757 20 51 /0Y +$C +,JD]Qhm`?ln([a5rpB[]EW>Te&3=q!^T6YL2#~> +, +1362 4757 0Y , +1417 4759 15 66 /6X +$X +?i]Zrp],[AHiQ>1*WR8^%fd,j#J^S[#J^H""5j4L!Up-Z!;HQh!;HQl!.4co!.4cq!.Fos!'UBH +!'UBH!'UBH!'UBH!'UBH!.Fos!.4co!.4eE!;HQh!;HTi!Up-Z"5j:>#N,j&#J^k#%tG`%*rnJ) +490a/p]0d`n,P]R~> +, +1529 4759 20 66 /2I +$C ++dHh8M=jqWs8W-!s8Vrl:eDAOmEZffJ,fQKs8W,un%/g5gM.0_~> +, +1305 4668 36 42 /6T +$C +3g?-NOmn"#&:Fe?)%QiZi<JeD[pK+$,onI3YY&[9PQl@TTb&?"6]=EJcra9t4X^6@s(uR+\1h," +6fG2bC()8Se,~> +, +1424 4668 14 40 /1A +$X +!rsG$5Oa0tJ,''As8;opJ,"Ng5O]cQ#CldSzzzzzz!!!*$+5fBQJ,"Ngs8;ops8;opJ+u7t5N!'f~> +, +1462 4687 46 17 /7B +$C +,D)aTW;jrsWD@7~> +, +1572 4674 41 43 /4R +$C +"JINC-p^aa'Hj(Q#V&Z&KG5Q&"[PIOJqOg\W%(gf0]@cq3,ZWg*&-?,%G5X;L)_o+]+,Zsgbp1O~> +, +1626 4693 42 4 /6J +$C +,D0PjVu~> +, +1735 4668 41 42 /0C +$C +.EY!]i<+`R#=MDD+G#<$)k_gt3^NJ=&(Q-Ds8DhWYG],6qeL-&>AIZ$Y[E9^iJR#A_J0Jja`R~> +, +1794 4657 0Y , +1303 4568 0C , +1356 4568 43 42 /6F +$C +,TP#L&8#>o#A?74OQqE%jo#D[9RK$r^OP_N^O<i4p-YS`GDD9t#2F_.rjn\eJV:<EMT%qZ@6oSk'E~> +, +1413 4568 6T , +1463 4568 42 42 /0K +$C ++qA`!i<+`R#7-,NF9mg@JdnLoU`Vrs<Rl6lU)QS9o#/-4^?`AAm]E=%-#IHPQ%K4@6F@4M0N)1A~> +, +1575 4568 6T , +1691 4559 2I , +1309 4498 28 27 /5F +$C +3Lr3Fdng#Dl[RXgs8VD3?iU0)Ds`"D~> +, +1355 4468 0K , +1408 4470 46 38 /1G +$C +,D,!,?Cg=aGVWt6=D:u3)aR\#g/cY1Q*dZiD(B=)9#XuAl-k;W_kc*8km$B28\.XEDLubiFIRk) +j9)9MlV@~> +, +1466 4470 38 56 /4P +$C +,DN$XWNH4#s8W-!s8W-!s-s8YmiVATs8W,W~> +, +1516 4468 41 53 /0Q +$C ++pr&gi<,b:3[5fp76'KO+P.W`s8W-!s8W-!q)&U5qbp#bs8W,,~> +, +1579 4498 5F , +1678 4487 7B , +1735 4474 41 43 /6L +$C +,P3#tLCMmT_hK-biO]R:E5RDM2[hbX(i[BIiJ2:`KG5Q&"[PIOJqOg\W$k7L:kF?8"URL&JtT?M5Q~> +, +1519 4370 1I , +1571 4368 0K , +1624 4368 0Q , +1678 4368 45 40 /0G +$C +24P6g0HeTYT^;uY7s.?AQ]r?O57a[\huE`Vs8W-!s8W-!s8W,@W)HM??esW~> +, +1735 4370 1I , +1787 4370 44 40 /4R +$C +-D7or'5@D&4N`HZs8W-!s8W-!s8W-!rr)e>>?nGN?J8::N#53m?)r\o6OH..~> +, +1848 4357 0Y , +1309 4198 5F , +1359 4168 6T , +1409 4168 0K , +1463 4170 4R , +1518 4168 46 56 /0I +$C +24TCB&8#?;%o5Ss3hSan^Hjg,%J6%[p%7qLp&Cris8W+7qu>C-g=ooW51j2q?%s!Y0UH7\$\l0" +Eh.4Ms8W"J"L#H~> +, +1579 4198 5F , +1678 4187 7B , +1735 4174 6L , +1521 4068 6T , +1570 4053 46 55 /0M +$C +/d:M:;ldCpqgSFVn%ZI%\RW3Hm[)\)p?@":?Z)4bV=s/%\mK?AgTRL?l+6_/^718$bs:pMG.#*~> +, +1629 4068 6T , +1680 4093 6J , +1735 4074 6L , +1784 4053 47 57 /3A +$C +,DOA<cbKM[s8W"e0*iX*5(hf*SGFJXpd)WXG_@%'ldL@4qtbgBs0_j7^Y2og=_!2QCaI_B.5_IK +JmF9$>VMlh.41\~> +, +1843 4070 1I , +1898 4070 4P , +1949 4070 4R , +2002 4068 0Q , +2079 4059 5V , +2119 4098 5F , +2165 4070 4R , +2220 4068 6F , +2269 4070 53 40 /5N +$C +,D$Sb:*i!:X&[JDoe4)[s8W-!s8W-!s8W-!s8W-!s8VhCrSP!6GO6%aV'Cjf,a`@J2Cl/bg1i/] +_Na7$-i~> +, +2327 4068 0K , +2432 4070 50 38 /1Q +$C +,T3QTor[V2r55mG]"e:BBn,tcheb%Hs3k[fIJs1f^\oS8m=50#Y.K.s5NuO)r^R2;!U6`b2#~> +, +2490 4068 6F , +2547 4068 6T , +2612 4068 1A , +2708 4069 38 56 /1V +$C ++pEW?#>U*Fcp>?.-NC"Ds0_gkCMbR1-&rg?C2I@r$O/<$_1R@F"qD%](cX8WKg9l:ai4f%@-N;? +R,kO!6+TeTl[RC`s4ZAa<mnkn@]`!)(f1~> +, +2763 4068 6T , +2818 4062 34 68 /4V +$C +";M0D=&mkKl$DX+Y,eSgde(4+>ut%VF^9<"Q_j#JlFO.!Y=m=9]le&~> +, +2867 4070 4R , +2929 4098 5F , +2982 4057 19 26 /6R +$C +,LlJ^II@"0^AdT7hg]k-J,~> +, +3082 4068 0Q , +3138 4070 43 54 /0S +$C +,D7oY.\F=OlkqJ)l#aLB/sekG\m6qT95.h2MUknq^Mg@ODn"KgpA5B0gYokC$iBVSO8o7[r^R9%hu~> +, +3192 4093 6J , +3247 4074 6L , +3301 4068 0C , +3349 4070 5N , +3408 4068 0I , +3483 4059 5V , +3514 4068 0Q , +3570 4068 6P , +3620 4053 3A , +3684 4057 6R , +3793 4098 5F , +3854 4068 14 13 /5L +$X +!rsG$5Oa0tJ,''As8;opJ,"Ng5O]cQ#Cl~> +, +3893 4068 0K , +4002 4053 45 57 /2E +$C +-O)9opF=.7E8A.oqnN1,$nhlM&:H_S'Al'+^4Hgj%J6%P5.\JBp&Cris8VJ9Ir"psqeL$a5@H1^ +$$I.X64Ut:CLL0Z6RgL~> +, +4055 4068 0K , +4108 4068 0Q , +4171 4098 5F , +4225 4059 6X , +4279 4059 6X , +4332 4057 0Y , +1313 3959 20 66 /7J +$C +,F8(AGji9Es8W-!s8Vi\fK0T9V*t,4YQ+Y&s8W,tF]]pr;RKo*~> +, +1097 3859 7J , +720 3621 46 68 /3T +$C ++cA,X+G&LuG^0PWJd*8-D[F!LpXSNCl+6`$s*hQEWC"mhi,$GL>1J=YPlla\2du.2mJ4eHpOCor +g?ijri5$sgf!VGk$n,OTJ\V~> +, +770 3622 6Y , +845 3623 58 68 /1Z +$C +4q,'94n"JT*ZtF^J,eC*Og*aCs2]uqs8@HH(E`\<*,#6Ms8W"Hs8GUGJ+*F;palu^?qL*k~> +, +906 3623 48 47 /4Z +$C +/eEgBrmgLT!f#.:D(C%AY*Hb9>H=m5Z.cU4?C.K]e(na+Lc`:/<p>%D:"!pg0H&WoFcbami7!mI +k=CR:hu~> +, +956 3621 48 49 /4E +$C ++e0*'9_`6r:#XV_"O!ed6$V>jkWYWRs82iRDn"AILVk7I@?(jB!PGH;,Rcp:^1i">p"EUXO&q(0 +WsT7`0Mh~> +, +1006 3623 86 47 /2R +$C +/f@-r.*sdMrB=m)FU+"'Bs740s8W-!s8W-!s8W-!s8W-!s8W-!s/Q+QIdM<I<5NE;3H3>8%'hj( +p6tFJT[_="2"DKC2$[PDT](P4'E~> +, +1095 3597 56 73 /0A +$C +0H#B9QnN4+s8W-!s8V8CQOen!_qlG%7D'0jKH&BdDcb]fhr"<\p](9Ns8Ke5YN]nI\7oB'd&DQ@ +>Vg_4Y11Z82'Ie**&+&EJq*~> +, +1156 3623 30 72 /7K +$C +0H#A/"5dJcs8W-!s8W-!s8W-!s8W-!s8W,lQOP&4THo7;eo5j~> +, +1189 3621 46 49 /2I +$C ++U++g6m1FjKH4dS%@Npn#4R8n%;9Hkde`s0run4!%=!O$"j!oDs6oj9f)MddD(?#G0i6DS%7:I2 +M4a~> +, +1264 3643 32 11 /5B +$C +/fB/rIf&j(~> +, +1323 3621 58 49 /2F +$C ++O3o@KZq=p%o5tr5s"jbOC&6G*ftjIJ+qRps8W-!s8W-!s8W-!rI2'2TU[h<s-\M160*QL5a,%I +_85%~> +, +1384 3621 7E , +1428 3623 2M , +1461 3623 3B , +1523 3596 7N , +1603 3623 65 68 /2J +$C +.D_q^.KGB-^]4?6s8W-!s8W-!s8W-!s3*T]J,[4_s8Tk1e(531rV~> +, +1670 3623 60 72 /0B +$C +0H!84,PBKR"/)b=\m6u]\m6qT9;U)0dd,?GFLkSVA2rn_hmM5+nDA/ng[4_3&)V<0q[]t?hYm?A +s8W-!s8T11B`H;mj=qeJ,Cf~> +, +1756 3621 4E , +1806 3623 3B , +1867 3621 0X , +1953 3623 99 69 /5F +$C ++N5Pas/u4TfDjQIqX=/QJ$o#HlgK=,+bAF'#O>"ZJ,8K3ID=@"g\UR"D1-p+Y-%0hqePNd[Zf>C +Fn]+l]j"/0Id>I`ej$QlIb1agrMT\L\mO:l?i%P&qt0,5E6ZJ>Dnjo<3@bQS~> +, +2053 3623 2R , +2142 3623 7K , +2175 3623 2M , +2209 3621 55 74 /7K +$C +.LKf,!c/Ep#WtK1LQKo%":RC8hODu?^>H[(s4dRgs8N&up&Fu?95CrQ9+2UOORMR[]3I5IiJ#/Q +a8c2>s8T9b_aj]R*_6nS,<,~> +, +719 3465 3F , +780 3465 7M , +838 3465 2V , +868 3463 6H , +935 3463 6H , +977 3463 3R , +1025 3463 3N , +1070 3464 7H , +1102 3465 2V , +1131 3463 5Z , +1186 3465 6N , +1270 3464 59 48 /7B +$C +,6G^d:()^rSt(K"WZ[OKKH'R@829B/hbX7Os8W-!s8W-!s8W-!s8K(pJ6^S3s7>3jJF\7`JS/"W +3,n?~> +, +1330 3463 6H , +1373 3463 3R , +1421 3463 6H , +1489 3464 5X , +1544 3463 5Z , +1599 3464 7H , +1631 3465 7M , +1717 3465 3F , +1778 3464 3H , +1861 3464 48 48 /3L +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +1911 3465 6N , +1969 3464 59 74 /6R +$C +,6PadBFG%9o].Bt<'f[3Jd*;_2s<!EI=:?D^Ak&0qZ$Tqs8DutIK/3^Iqs28[alB*$o"p%K#8Q` +"?mZ-1+_tqs8W-!s8?J%(]Hk@a^F0ZLO]~> +, +2057 3464 99 71 /2J +$C +.L_Q,IJnZ-WrI:o^Aa`(d1CVQj?`fImFP^Y3r\CDh-45lJ)@]DqWceK^AhPWHM%&_rNH(_g:.+2 +fBn(Te[kFWhf%=nfBq1l>OV6rrjSd!rI8.TD>No)m^2rkIqn;aYJ&E[:4dNE@E:^es&cf7%DV~> +, +2157 3465 88 47 /5V +$C +0Eoc'K:jmrq)D8+/;`aO>(?SPs8W-!s8W-!s8W-!s8W-!s8W-!ri?'Cm5<d*9l_ZL&>Ouf@AMUU +!4rFJ@)DUq/%!gM.m^-W@A]^a-57F:+CLi~> +, +2245 3465 4F , +2274 3465 2V , +2303 3464 5X , +2385 3464 7H , +2418 3463 5Z , +2500 3463 3N , +2544 3465 3Z , +2584 3463 3R , +2632 3464 3L , +2682 3464 7H , +2714 3463 3R , +2790 3464 3L , +2867 3463 6H , +2909 3465 2V , +2938 3465 5V , +3027 3437 3V , +3087 3465 4F , +3116 3463 3R , +3190 3464 6V , +3273 3465 2V , +3302 3465 6N , +3361 3464 6R , +3422 3463 5Z , +3476 3464 6V , +3586 3465 5V , +3674 3464 3L , +3724 3465 6N , +3782 3464 3L , +3832 3436 4M , +3888 3463 3R , +3936 3465 3Z , +4003 3464 3L , +4053 3437 3V , +4113 3437 3V , +4173 3465 4F , +4202 3465 2V , +4231 3463 3N , +4276 3464 3L , +4326 3464 7H , +4358 3465 2V , +4387 3463 5Z , +4442 3465 6N , +4527 3464 6V , +4610 3465 2V , +4639 3464 7H , +4672 3465 7M , +4757 3464 3L , +4834 3464 7H , +4867 3465 2V , +4896 3464 7H , +4928 3465 4F , +4957 3463 3R , +5005 3487 6A , +719 3344 5X , +774 3344 3L , +824 3345 3Z , +864 3330 5C , +914 3345 2V , +943 3345 6N , +1001 3343 3N , +1045 3345 4F , +1075 3344 7B , +1135 3344 6R , +1196 3345 2V , +1225 3345 6N , +1283 3316 4M , +1364 3345 3Z , +1403 3343 3R , +1451 3343 6H , +1494 3345 2V , +1523 3345 48 46 /2L +$C +0H5Mua@1G`p?pgVgY]KpmC-K[h7J$I]6<pqG4"_kmEa&Ns0hfQ]AIuonU(6~> +, +1573 3343 3R , +1646 3344 3L , +1696 3345 6N , +1754 3344 6R , +1840 3343 3R , +1888 3345 1L , +1939 3345 2V , +1969 3344 7H , +2026 3344 5X , +2081 3344 7B , +2142 3344 7H , +2174 3344 7H , +2207 3343 5Z , +2262 3345 6N , +2320 3343 6H , +2370 3344 0D , +2437 3345 3F , +2498 3345 7M , +2556 3345 2V , +2586 3343 6H , +2653 3345 2V , +2682 3343 6H , +2749 3344 7H , +2782 3345 7M , +2840 3343 3R , +2913 3344 7B , +2973 3343 6H , +3016 3344 7B , +3076 3344 3L , +3126 3345 4F , +3180 3344 6V , +3264 3344 3L , +3314 3317 4H , +3394 3344 7H , +3427 3343 5Z , +3506 3343 3N , +3551 3345 3Z , +3590 3343 3R , +3638 3344 3L , +3688 3344 7H , +3721 3343 3R , +3794 3345 6N , +3852 3343 3R , +3900 3344 6V , +4008 3344 6V , +4092 3345 2V , +4121 3345 6N , +4179 3344 6R , +4240 3343 5Z , +4295 3344 6V , +4378 3343 6H , +4428 3344 0D , +720 3098 47 67 /4B +$C +3Wia=KE<`/p:pY-jhY#(rT)FhoP`W:pA`nIDuIHErV-'DhgXJ[J*lt0g])3$rl9M8qfe,V,Z9-~> +, +770 3097 6Y , +845 3098 4K , +906 3098 5I , +945 3096 2I , +995 3096 4E , +1045 3098 2R , +1134 3096 7K , +1195 3098 30 72 /4M +$C +0H#A/"5dJcs8W-!s8W-!s8W-!s8W-!s8W,lQOP&4THo7;eo5j~> +, +1228 3096 2I , +719 2940 3F , +780 2940 7M , +838 2938 3R , +913 2938 3R , +961 2940 1L , +1012 2939 3L , +1062 2940 5V , +1151 2912 3V , +1211 2940 4F , +1240 2938 3R , +1315 2939 3L , +1365 2938 6H , +1407 2938 6H , +1450 2939 7B , +1510 2940 5V , +1598 2938 3R , +1646 2938 6H , +1714 2939 7H , +1747 2940 7M , +1805 2939 3L , +1855 2939 7H , +1915 2939 7H , +1948 2940 7M , +2006 2938 3R , +2088 2940 47 56 /3K +$C +-Oe`/+Q*5!s8W-!s8W-!s8W-!,J;WWs8W-!s7hZE~> +, +2148 2940 3M , +2228 2940 5V , +2316 2938 5Z , +2371 2939 6R , +2432 2939 7B , +2492 2940 4F , +2521 2938 3R , +2596 2940 2V , +2625 2938 6H , +2694 2940 4F , +2723 2938 5Z , +2778 2939 3L , +2828 2939 6R , +2889 2938 3R , +2937 2939 6R , +3025 2939 3L , +3075 2938 6H , +3144 2939 5X , +3199 2938 3R , +3247 2940 35 73 /4B +$C +0Esb+"P*PPs8W-!s8W-!s8V6a07FEB%#Z/ks8W,Vqtkj:[L0nZ`p\\%_LM~> +, +3280 2938 5Z , +3335 2940 3Z , +3375 2938 3R , +3422 2925 5C , +3475 2939 3L , +3525 2938 6H , +3594 2940 5V , +3682 2938 5Z , +3737 2939 6R , +3798 2939 7B , +3858 2940 4F , +3887 2938 3R , +3962 2939 4S , +4019 2939 3L , +4069 2940 3Z , +4108 2940 2V , +4137 2939 3L , +4187 2939 5X , +4242 2940 4F , +4271 2938 3R , +4346 2938 52 58 /4T +$C ++Dt22n;'$mK;'!rU-/Uq+pCM##-'`as8W-!s8W-!s8P8$eb5lLs8W-!qLA~> +, +4414 2940 3M , +4467 2925 5C , +4519 2939 5X , +4574 2939 7B , +4635 2939 7H , +4694 2940 4B , +4727 2939 7B , +4788 2940 3Z , +4827 2939 7H , +4860 2940 7M , +4918 2938 3R , +4966 2940 3Z , +5005 2962 6A , +719 2820 5V , +807 2818 5Z , +862 2820 3Z , +901 2818 3R , +974 2819 7H , +1007 2820 7M , +1065 2819 3L , +1115 2819 7H , +1173 2819 7H , +1205 2820 7M , +1263 2818 3R , +1337 2820 60 56 /0U +$C +3XgW_qX=IL\M;mKlgOl.?hOHu^M^X[lgM9sli6p4hu:4egK+"!s8)]/rI=h#p$)/Ds6[#ds8A#O +rTi=4p$r(^riPMa&Ie=7Xo%#~> +, +1397 2820 3Q , +1465 2820 0W , +1525 2820 45 62 /3W +$C +2@YoEU`9@6s8W-!s8W-!s8V[E,.I+BaFaHls6p~> +, +1577 2818 56 62 /1A +$C +,Ap0V:'Cb1Tg"9*%d8k,,W$'NTS%Y>qG#tA:$KCgqg/:sYQ+Y&m<\c`f%9dlBk<=V[[1h`_[1Jp +-.o@;>VNZrEW?(=s7sI<pOE~> +, +1663 2820 5V , +1751 2818 5Z , +1806 2819 6R , +1867 2819 7B , +1927 2820 4F , +1956 2818 3R , +2029 2820 2V , +2058 2818 6H , +2126 2819 3L , +2176 2820 4F , +2205 2818 6H , +2247 2818 5Z , +2327 2820 4F , +2356 2818 5Z , +2411 2819 3L , +2461 2819 6R , +2522 2818 3R , +2570 2819 6R , +2631 2805 5C , +2681 2819 3L , +2731 2818 6H , +2796 2820 59 42 /3O +$C +.En\QohYJ]jr\`Q9RhBgrn!t<huDF/ldtg:S+$CWBlou^n*MdCl9;T4J,c[8hqsLnFh[nRi%@<M +4o<_~> +, +2856 2820 3Q , +2924 2820 0W , +2984 2820 3W , +3036 2818 1A , +3105 2819 4O , +872 2657 4P , +923 2657 4R , +979 2655 0C , +1034 2657 38 54 /4V +$C +,DN$XWNH4#s8W-!s8W-!s8W-!s8W+h"mbU~> +, +1084 2655 0G , +1140 2655 0I , +1193 2655 0K , +1309 2685 28 27 /0O +$C +3Lr3Fdng#Dl[RXgs8VD3?iU0)Ds`"D~> +, +1354 2655 0Q , +1410 2657 0S , +1478 2655 5L , +1513 2657 5N , +1579 2685 0O , +1632 2644 0Y , +1084 2555 0Q , +1140 2557 0S , +1208 2555 14 40 /5R +$X +!rsG$5Oa0tJ,''As8;opJ,"Ng5O]cQ#CldSzzzzzz!!!*$+5fBQJ,"Ngs8;ops8;opJ+u7t5N!'f~> +, +1302 2557 42 51 /1C +$C +1CU:4e;SnWs8W-!s8W-!s8W'gZ`RR6s8W-!plFn~> +, +1356 2557 0S , +1416 2544 0Y , +872 2457 4P , +923 2457 4R , +979 2455 0C , +1034 2457 4V , +1084 2455 0G , +1140 2455 0I , +1193 2455 0K , +1309 2485 0O , +1352 2457 1Q , +1405 2457 5N , +1466 2457 4V , +1520 2457 4P , +1568 2455 47 56 /2N +$C +.aC\=8DsU[Ta0&X,<MN2+Q#HhqG#r\Du+BJmn`t1fDkmE^Xh$69D_@5G.uDlV:]3/_1GsMiJ$"E +K'&oMs8W,?i@Fg~> +, +1640 2455 5L , +1675 2457 5N , +1741 2485 0O , +1794 2444 0Y , +1082 2357 1Q , +1135 2357 5N , +1196 2357 4V , +1250 2357 4P , +1298 2355 2N , +1370 2355 5R , +1460 2357 50 51 /5N +$C +1a4'Re,SkfHMa!ms8VJ_s6K]-Dc^<Gs4^oRs80!(Vq9i+[_M/.pKua!s8.+ZJ(O_hr]f$6Y265J +nc/Xh]l"+,)?^#:TE~> +, +1513 2357 53 40 /5N +$C +,D$Sb:*i!:X&[JDoe4)[s8W-!s8W-!s8W-!s8W-!s8VhCrSP!6GO6%aV'Cjf,a`@J2Cl/bg1i/] +_Na7$-i~> +, +1574 2357 4V , +1628 2357 4P , +1676 2355 2N , +1740 2344 0Y , +1100 2255 5L , +1154 2255 5L , +1208 2255 5L , +1084 2155 0Q , +1140 2157 0S , +1246 2174 46 17 /2K +$C +,D)aTW;jrsWD@7~> +, +1412 2157 4V , +1464 2155 6P , +1518 2155 6F , +1572 2155 0I , +1680 2157 1C , +1734 2157 0S , +1896 2157 1C , +1950 2157 0S , +2004 2180 6J , +2059 2161 6L , +2110 2157 41 51 /7D +$C +-D4jteGK:Gs8W-!aD;=s%hC<paMIB'Dng5*^&S-*rjqa5oXIPG;JI+r_QZi~> +, +2161 2157 52 51 /2O +$C +-D3Z'#hSdJ)%qG-^9.?^>@1aG^9.16I:\c"?WZrfmB<_J?WZrfmB<_J?WUObmB<_J=dV/E]D~> +, +2220 2157 1C , +2273 2157 45 51 /7H +$C +-D81?0@RY(Sn1:hs8W-!s8W-!s8W+[s-BG[s8W-!s8W-!s8U8s$3BF_^J-r~> +, +2334 2144 0Y , +1082 2057 1Q , +1135 2057 5N , +1196 2057 4V , +1250 2057 4P , +1298 2055 2N , +1408 2074 2K , +1520 2057 4V , +1572 2055 6P , +1626 2055 6F , +1680 2055 0I , +1784 2057 50 51 /5N +$C +1a4'Re,SkfHMa!ms8VJ_s6K]-Dc^<Gs4^oRs80!(Vq9i+[_M/.pKua!s8.+ZJ(O_hr]f$6Y265J +nc/Xh]l"+,)?^#:TE~> +, +1837 2057 53 40 /5N +$C +,D$Sb:*i!:X&[JDoe4)[s8W-!s8W-!s8W-!s8W-!s8VhCrSP!6GO6%aV'Cjf,a`@J2Cl/bg1i/] +_Na7$-i~> +, +1898 2057 4V , +1952 2057 4P , +2000 2055 2N , +2108 2057 50 51 /5N +$C +1a4'Re,SkfHMa!ms8VJ_s6K]-Dc^<Gs4^oRs80!(Vq9i+[_M/.pKua!s8.+ZJ(O_hr]f$6Y265J +nc/Xh]l"+,)?^#:TE~> +, +2161 2057 53 40 /5N +$C +,D$Sb:*i!:X&[JDoe4)[s8W-!s8W-!s8W-!s8W-!s8VhCrSP!6GO6%aV'Cjf,a`@J2Cl/bg1i/] +_Na7$-i~> +, +2222 2057 4V , +2276 2057 4P , +2324 2055 2N , +2382 2080 6J , +2437 2061 6L , +2488 2057 7D , +2539 2057 2O , +2598 2057 1C , +2651 2057 7H , +2712 2044 0Y , +1082 1957 1Q , +1135 1957 5N , +1196 1957 4V , +1250 1957 4P , +1298 1955 2N , +1356 1980 6J , +1411 1961 6L , +1466 1957 4P , +1517 1957 4R , +1574 1957 4P , +1624 1955 0Q , +1701 1946 14 66 /1E +$X +!#tu$!.4co!;HQh!Up-Z"5j:>#J^S[%tG1@++PF5*rnM*4odbHIK4`qHiSNoHiX'EquHKlp]1'h +p]1'hp]1'hp]1'hp]1'hquHWpquD*EHiSNoIK2P34odbH*rmA_*rlh%%tG2+#J^S["5j:>!Up*Y +!;HP=!.4c/!#ttE~> +, +1741 1946 6X , +1794 1944 0Y , +719 1772 82 71 /1B +$C +46guKZN-XOqT6Z[95/n-Y?m$)s8$(ql$Y5b9BgjXV>oe.0;\<U?XKZ%^6e0OoY-[?qHs5gde[<D +s3gaN9Bgo>^J!g>0A"h?I4qGnnbVqEfD8(e:1,l??r:9]~> +, +802 1772 5Z , +857 1773 33 63 /7H +$C +22MSu?.7U@]^UPYFoVLAs8W-!s8W,u?o*0m2B4J$*'aK's6osmLPLB~> +, +889 1772 3R , +977 1773 7H , +1010 1774 7M , +1068 1773 3L , +1118 1773 7H , +1189 1774 3O , +1249 1774 3Q , +1317 1774 0W , +1377 1774 3W , +1429 1772 1A , +1497 1800 2H , +1557 1778 5H , +1617 1774 3W , +1669 1774 5T , +1737 1774 3W , +1789 1772 4T , +1889 1774 2V , +1918 1772 6H , +1999 1772 3N , +2043 1773 3L , +2093 1774 4F , +2122 1774 4F , +2152 1772 3R , +2199 1773 6R , +2300 1772 5Z , +2355 1774 6N , +2413 1772 3N , +2457 1772 3R , +2545 1773 7H , +2578 1772 5Z , +2673 1774 2V , +2702 1774 6N , +2760 1774 2V , +2789 1773 7H , +2822 1774 2V , +2851 1773 3L , +2901 1774 4F , +2930 1774 2V , +2959 1772 6H , +3002 1772 3R , +3089 1773 7H , +3122 1774 7M , +3180 1772 3R , +3267 1774 3O , +3327 1774 3Q , +3395 1774 0W , +3455 1774 3W , +3507 1772 1A , +3608 1774 5V , +3696 1772 5Z , +3751 1773 6R , +3812 1773 7B , +3872 1774 4F , +3901 1772 3R , +3981 1746 26 97 /2P +$C +4EtrfS>!QA\%D+`s*juts8W-!s8W-!s8W-!s8W-!rG+1n5ENe-@_q!ms5c>8l-oX8C;PK~> +, +4012 1773 7B , +4073 1772 6H , +4115 1773 7H , +4187 1774 4F , +4216 1772 5Z , +4271 1773 3L , +4321 1773 6R , +4382 1772 3R , +4430 1773 6R , +4491 1759 5C , +4556 1773 5X , +4611 1772 3R , +4659 1774 4B , +4692 1772 5Z , +4747 1774 3Z , +4787 1772 3R , +4875 1773 3L , +4925 1774 6N , +4983 1746 4H , +719 1652 5Z , +774 1653 7H , +806 1654 7M , +864 1652 3R , +912 1654 3Z , +977 1654 4B , +1010 1653 7B , +1070 1654 6N , +1129 1652 3N , +1173 1653 7H , +1206 1654 2V , +1235 1652 5Z , +1289 1654 6N , +1347 1652 6H , +1415 1653 3L , +1465 1654 3Z , +1504 1652 3R , +1577 1652 3N , +1622 1653 3L , +1672 1654 4F , +1701 1654 4F , +1730 1652 3R , +1778 1653 6R , +1847 1653 0D , +719 1496 5G , +753 1496 6N , +856 1495 6V , +939 1496 2V , +968 1496 6N , +1027 1495 6R , +1088 1494 5Z , +1142 1495 6V , +1270 1496 5V , +1358 1495 3L , +1408 1496 6N , +1466 1495 3L , +1516 1467 55 76 /7K +$C ++p6(UU(D9p_BI4g&2<;jh&tN#o\CkkFnFSgJ,d.Xs(u]/=CJ9h&r&_O@t^O*>/J*d6!EuahV:&- +aAQDs_@@-!5s.7@DNJb"HG82g\$+]hs53/>Bn"bZS_ZAA[]D/Z`.uhrTnOs!J,~> +, +1572 1494 3R , +1620 1496 3Z , +1705 1495 3L , +1755 1468 3V , +1815 1468 3V , +1875 1496 4F , +1904 1496 2V , +1933 1494 3N , +1978 1495 3L , +2028 1495 7H , +2060 1496 2V , +2089 1494 5Z , +2144 1496 6N , +2202 1494 6H , +2290 1495 7H , +2323 1496 7M , +2381 1494 3R , +2482 1496 3K , +2542 1496 3M , +2602 1522 2H , +2662 1500 5H , +2714 1494 4T , +2782 1494 47 45 /1X +$C ++PbNY":bub6JI/]+?BW7cp>6;dVhoQ]fg:0<qZHofDkmNmA9jMDd-Gsf%O0Q[[%b4@>(^9K!A.h +L(kIQ~> +, +2834 1477 56 62 /4G +$C +3!q,3aUeFOs8W,sL(f.]^j&07KBS.Ncm,Lc$,2!#oUEfYVpfsAH@Pgis8W,r?GEo@[G>\?a(]_F +m=`,+Ph9rm$$Ii'Xr("?'E~> +, +2902 1496 0W , +2962 1494 4X , +3014 1496 59 42 /2B +$C +-3a&@>IqP[\#uk!pK,sIp!p`u]g'*B]!niOVlf4`<qY"VFhKqV]\mHa#(<CEo`~> +, +3082 1494 4X , +3142 1496 0W , +3241 1496 4B , +3274 1495 7B , +3335 1496 6N , +3393 1494 3N , +3437 1495 7H , +3470 1496 2V , +3499 1494 5Z , +3553 1496 6N , +3657 1496 2V , +3686 1494 6H , +3774 1496 6N , +3832 1494 5Z , +3887 1495 7H , +3966 1496 6N , +4024 1494 5Z , +4079 1496 3Z , +4118 1496 5V , +4207 1495 3L , +4257 1496 4F , +4286 1496 4F , +4315 1468 4H , +4417 1495 7B , +4477 1494 6H , +4520 1494 3R , +4568 1495 6R , +4674 1495 6R , +4735 1496 2V , +4764 1496 3Z , +4804 1494 3R , +4852 1494 3N , +4896 1495 7H , +4929 1496 4F , +4958 1468 4H , +5021 1495 0D , +719 1376 5G , +753 1376 6N , +811 1374 6H , +853 1375 7H , +886 1374 3R , +934 1375 3L , +984 1375 6R , +1045 1361 5C , +1099 1375 3L , +1178 1375 6V , +1261 1376 2V , +1290 1376 6N , +1349 1375 6R , +1410 1374 5Z , +1464 1375 6V , +1576 1376 5V , +1664 1375 3L , +1714 1376 6N , +1772 1375 3L , +1822 1347 7K , +1878 1374 3R , +1926 1376 3Z , +1995 1376 2V , +2024 1376 6N , +2082 1375 7H , +2115 1374 3R , +2163 1376 3Z , +2202 1376 4B , +2236 1375 3L , +2286 1374 3N , +2330 1374 3R , +2407 1376 2V , +2436 1374 6H , +2507 1375 7B , +2567 1374 6H , +2610 1374 3R , +2658 1375 6R , +2747 1375 7H , +2780 1374 5Z , +2863 1374 3N , +2907 1376 3Z , +2947 1374 3R , +2995 1375 3L , +3045 1375 7H , +3077 1374 3R , +3154 1375 5X , +3209 1374 5Z , +3264 1375 7H , +3296 1376 7M , +3383 1375 7H , +3416 1376 7M , +3474 1374 3R , +3550 1375 7H , +3583 1374 5Z , +3637 1348 3V , +3726 1376 4F , +3755 1374 3R , +3803 1375 4S , +3859 1374 3R , +3907 1376 4F , +3965 1375 6V , +4048 1376 2V , +4077 1375 6R , +4139 1347 7K , +4194 1374 3R , +4242 1375 7H , +4303 1375 3L , +4353 1376 6N , +4411 1375 6R , +4500 1375 3L , +4578 1374 3N , +4622 1376 7M , +4681 1375 3L , +4731 1376 6N , +4789 1376 6N , +4847 1374 3R , +4895 1376 4F , +4951 1375 7H , +4984 1374 5Z , +719 1266 3Z , +759 1264 3R , +806 1264 3N , +851 1264 3R , +899 1266 2V , +928 1265 4S , +984 1264 3R , +1057 1264 3R , +1105 1265 4S , +1162 1264 3R , +1209 1266 6N , +1268 1265 7H , +1300 1264 6H , +1368 1266 4B , +1401 1266 3Z , +1440 1264 5Z , +1495 1266 5V , +1608 1265 7H , +1641 1266 7M , +1699 1264 3R , +1772 1265 6V , +1855 1266 2V , +1885 1266 6N , +1943 1265 6R , +2004 1264 5Z , +2058 1265 6V , +2167 1266 5V , +2255 1265 3L , +2305 1266 6N , +2363 1265 3L , +2413 1237 7K , +2469 1264 3R , +2517 1266 3Z , +2564 1265 0D , +2633 1266 3F , +2694 1266 7M , +2752 1264 3R , +2824 1264 4T , +2892 1266 3W , +2944 1264 4T , +3012 1266 0W , +3072 1264 4X , +3124 1264 1A , +3192 1264 48 45 /4E +$C +3k744+D-15#AAdpoL9e"#TK*e&7PNu60UU_rVuijpY5GpI>50sLP@d5A2Znl&'+_Ml`/:<Y\T>r +/6!H_C23s&~> +, +3252 1266 48 43 /3J +$C +0H-5NSR;Ess8W-!s8Tdkms/EWheWql2"95c2)l)`$#mk,\7%cB:]~> +, +3330 1266 4B , +3363 1265 7B , +3424 1266 6N , +3482 1264 3N , +3526 1265 7H , +3559 1266 2V , +3588 1264 5Z , +3642 1266 6N , +3726 1266 7M , +3784 1265 3L , +3834 1264 6H , +3901 1265 7H , +3934 1266 7M , +3992 1264 3R , +4065 1264 6H , +4107 1266 2V , +4136 1237 7K , +4192 1266 6N , +4250 1265 3L , +4300 1265 7H , +4333 1265 7B , +4393 1266 3Z , +4433 1264 3R , +4489 1265 4O , +1059 1111 37 47 /5D +$C +,!"-o&3:;X:c\mI3Y%6eNkbVos8W-!s7mWQ.GC4ts8W,o~> +, +1111 1113 34 50 /3V +$C +,D/uSVd'3$s8W-!s8W,pY^b^4F?fg*p]~> +, +1155 1111 5D , +1207 1113 34 48 /7N +$C +,D/uSVd'3$s8W-!s8W-!s8W-!s362r~> +, +1253 1111 37 36 /3P +$C +,8>kC#TOuNNe,%MC)mErU`Vne%51B>^Z77HITRDh[f9C[V/Nf-Ya'qUY[E`RL(kIQ~> +, +1297 1111 42 50 /6D +$C +.QJ=]7h?ec$/H3<cc?Z+oFPr:pnm]@I9rQFpTOVs>Q:h/Xfg*r4'pWHL(`hi-.mph>VKE4s8W+] +`3%q~> +, +1350 1111 37 36 /3X +$C +.-JIa#'_7d7&V15)k58oU_s!npj`<nmJH;E%;^^q0uG,!pbEX?s8UYi,s^'+9j"?&8cuj~> +, +1398 1113 38 34 /0E +$C +,DL+/.)5f^s8W,upV$#LmtSX^fP1'1?n2EsTo-Gh+Og~> +, +1463 1103 14 59 /2T +$X +!#P\u!.4ck!:U$Y!T4(<"2G/W#J^k#%tG`%*rnM*4odbHIK4`qHiSNoquHWpquHKlp]1'hp]1'h +p]1'hp]1'hquHWpHiSNoHiSNo4odbH4ocZ)*rlfO%tFn8#J^GW"5j4<!Up*Y!-eKg!'C6$!"]~> +, +1496 1111 31 36 /6Z +$C +3qGU^*sao\+%0adJd1_6_LC<fqr51`YY'$@RKF*e;%+T[7Nu7jO<Cp&?gkG8$Y3E!M';T&0LG~> +, +1543 1111 36 36 /2N +$C +2=a!X&3::5)8i+u\d15c2l>"69iQ7BYQ+WMQrd(!Isn`6ln*r-(bf/,2o?#X&AS~> +, +1590 1113 0E , +1650 1112 12 34 /0C +$X +++QT6J)L@rs7$'Xs6tNrJ)EQ,"onW'zzzzzz++QSkJ)L@rs7$'Xs6tNr5JS@k~> +, +1731 1113 38 45 /2R +$C +,Ct.N_jla]n8F'YIJ\H-p\3SEs*t(Ks8W,NYP%S?f3Xe:Y6f/68E#t&=AS~> +, +1782 1113 0E , +1830 1111 3X , +1874 1113 44 33 /5R +$C +-SqIbli$KPbWdnks1N`mgAh+nrO(tchS!+mhQL#@s66H]?Me&#hMLihS>VUJ?~> +, +1926 1134 36 3 /2J +$C +-D@Es~> +, +1974 1116 36 39 /5J +$C +,H;7a_m^%6@D`QlG2\2b3+9]7)mJ:V$oh\M8e=gNKG5Q.64+9#JqOje5sbni:kGN0@9?>~> +, +2024 1111 32 48 /4N +$C +3q@5]28Tl45)C7CJdp]NDbm8&qS1qRXECPo&qX%YGsGgE.Nu\8Ln,._Ju,JS5_A8#qcir%I_s`Q +@*]0MTnm!W$kU2~> +, +2071 1111 2N , +2118 1113 0E , +2165 1111 3P , +2213 1111 3P , +2260 1113 40 34 /6H +$C +,D2-]eSau;K>7Hds8W-!s8W-!s8RQ"Id8P.]s*_9K*bP8iM_JF~> +, +2315 1101 16 24 /2Z +$X +?i]Zrp]1'hquHWpIK4itIfOtK5Cbu65JSB!+5e71+7Kg9&,Zt9#Q=u-#QFo+~> +, +2403 1111 5D , +2453 1113 39 48 /5F +$C +,D^FHWnljrAH,<!dckkb>qVI:V:+(%9,4PGXrHd%+)eXCiP*4sp@ogBSbhCHs8W+]`3%q~> +, +2502 1111 3X , +2550 1113 0E , +2597 1098 40 49 /2V +$C +-O`guOG+.]G5]2Es7/FF&3c]lMpJ%]ha'3L%JjS2dXUNIs%i[ps4ZB0f&(W(fP%P`_HhcsUd<Y6 +$nO)iE81~> +, +2648 1111 6Z , +2706 1112 0C , +2792 1111 6Z , +2835 1111 5D , +2886 1113 0E , +2935 1113 3V , +2980 1113 6H , +3029 1098 2V , +3083 1101 2Z , +3171 1111 5D , +3223 1113 3V , +3267 1111 5D , +3319 1113 7N , +3365 1111 3P , +3426 1112 0C , +3512 1111 6Z , +3555 1111 5D , +3606 1113 0E , +3655 1113 3V , +3700 1113 6H , +3749 1098 2V , +3803 1101 2Z , +3889 1111 6D , +3939 1111 40 35 /6F +$C +25q!0+D6C(7-5PP2`=T_+NNA8hnT3ks8W-!s8W-!s8U1"*<Oj-~> +, +3987 1111 5D , +4040 1111 6Z , +4098 1112 0C , +4183 1113 3V , +4228 1113 6H , +4275 1111 5D , +4332 1103 13 59 /4H +$X +^]<9mn,W4`GQ<*k49.PF*rmA_%fd,j#Cm&p#J^H""5j:>"7Q?\!Up-Z!Vc]j!;HQh!;HQh!;HQh +!;HQh!;HQh!Vc]j!Up-Z!Up-Z"5j:>"5jF"#J^S[%tG1@%fd[O*WSA(490a/GQ@45n,VAH5QC~> +, +4386 1112 0C , +1271 1013 2T , +1302 1023 0E , +1349 1021 3P , +1400 1023 36 48 /1K +$C +,DL&R.)5f^s8W-!s8W+c%*EdY?iU-(]6H+df\tef~> +, +1494 1023 36 45 /2X +$C +49bbRn,NFfs8W-!s8W+]ee4n<YQ+Y&s8N]+~> +, +1541 1023 5F , +1590 1044 2J , +1638 1026 5J , +1686 1023 2X , +1734 1021 36 36 /5T +$C +2=a"W6,F+fk3*@85mHR48\.X^X*T9Hrh'5j>Md-&]kqV_D(B=&@4MNg=K#XoK`~> +, +1778 1008 41 49 /2X +$C +,CpR%4TGH]s8SMji.L5W&Jp)`&3%s%^BqPOp@R87rr/Pis',@!f4f^;8!<AY?*KQR,6eHR0jTJE +_*@~> +, +1831 1023 7N , +1877 1021 3P , +1922 1023 44 33 /5X +$C +,7:'em_5:%hNdi3IJ%aTotL(%]ds)OYG\MsV15;ujD_pX0hjU*~> +, +1973 1021 3P , +2023 1023 7N , +2075 1011 2Z , +2167 1021 2N , +2211 1023 41 48 /4D +$C +/e1\fX1A"X^]4?6s8W-!s8W-!s*iRKd`afM@4oG(Ft9u:Kua5ns7mX,h>~> +, +2262 1021 3X , +2308 1023 6H , +2406 1021 5T , +2456 1023 1K , +2552 1021 6Z , +2595 1021 5D , +2646 1023 0E , +2695 1023 3V , +2740 1023 6H , +2789 1008 2V , +2844 1013 4H , +2891 1011 17 45 /7H +$C +,P:`FDsuHX\+f:ghg]j2s"c,7[/Xn7'E~> +, +717 840 68 76 /3B +$C +-,HYX0Ea[np:pY-s8W-!s8W-!s8W-!s8W-!o@?4Bs8W-!^].[6f(Fk!^]~> +, +784 840 66 80 /6B +$C +2Ap,2,Q+&Q6h"h*WrN,!s8W-!s8W-!s8W-!s8W,lrr/5^Y1Fj-)I8*2L(`j#2;7G@]*j68"3:HA +s8W-!qUTHgralZaM)CeAJ,~> +, +848 838 52 54 /3F +$C +.KLZC_#p@h#>U(/LHpF%#X&=IK2dV+eM$T&p&Fgs>"C,*5!u9crVsS2lK`B]D/IhSg/]+gg/\V. +$repSKdHqQ~> +, +945 838 50 65 /6F +$C ++U+!Y`8h1E1`m%r6HhWL[6B0OiXg#65+C0$qs3YLqcN^HXX[/OPS0'#Gu+o?JBn?*&I$/W6`WU? +,RT."Wa;%iNB_pmmB?5lf5#5>0X_fd;>)NJfN^,!K*Yi~> +, +1011 838 53 50 /3J +$C +.Ktq76kD=D_@DAI_kJ?!5m%UK%FP^6D'u"@29/_KY.t#:rP-F]DZ@H:^=q=IXbIV/$XnaD6/[BV +YmZ;r@5S5pAL.~> +, +1077 840 53 47 /6J +$C +2B)5f[5FTVs8W-!s8W,n^$g<iNr+6[gBH=>L)QZm0Z'k*_d0<t'L@E~> +, +1143 838 51 50 /3N +$C +.Ktrb6kKM+#W`1rJkaVuS2pc^cp>$kU`,n]da^!Dldu&dOg"\N:Yrjo]kqqXqe9n`0U9#H0U77n +XFnBE+]qQL6OHi?~> +, +1209 838 3N , +1275 840 53 48 /6N +$C +,Cp''@6a^fVIi)Ss8W-!s8W-!s8W-!s8W-!rr)e>>@%&7[(B`qE/ZZT+lRSpL)&?<"r*Gt~> +, +1367 840 33 75 /3R +$C +3#S;Y#DT@1s8W-!s8W-!s8W-!rG+LuIg;(Pc!uCD;?,df$.I]pri^(RJ,~> +, +1399 838 46 54 /6R +$C +3X-p]U'Me\OQ^pTLP-VqH>cUJ\,Z@*e9)**;?7CA)o3pR&qm25$@u%X)TWI66.@#\f!IbNs6oj` +[C3bb0X_fL0uF>8.0^O~> +, +1480 839 38 69 /3V +$C ++p,W'l-nMQL\6<BNkbVos8W-!s8W-!s5sE`_dUH8,%irks8W-!s*rlH%hA~> +, +1516 840 6B , +1580 838 3F , +1668 838 59 54 /6V +$C +.`9AId0LaP6lpp+6&.`1kr22I>plH*\mKA]Du+DFs6dZ%s8UXLl`IqR>Ph%m9&3]UV/7_s=CE]a +#Uj/UKa]Ca('~> +, +1728 840 66 52 /3Z +$C +2Ap,2,Q+&Q6h"h*WrN,!s8W-!s8W-!s8W-!s8W,lrr/5^Y1ACp_b.!fRfXF80#tk+G,0YJ6/$sq +U'uhd~> +, +1792 838 3F , +1881 838 6V , +1941 840 3Z , +2041 839 92 52 /6Z +$C +.`dSk>2Im.\uu%'IJl3VOU$.Dg:usSX*VPL?#<fpfCa$jrTi"7II"#;l1b-^>?BE`[CX*OlLaE> +VX!L45IB6r<IN`;l)q_n](\uqCbhG._8#kLjJY!~> +, +2133 840 6B , +2197 840 3R , +2229 838 48 54 /4D +$C +.`!C?CkN93VcZ>(+eV*iJYbu)WG>McoY:8&s6ousabp,cYO2&\p=@+fYel,3.i<6T0VH:8"T~> +, +2278 840 6B , +2375 839 3V , +2411 840 6B , +2475 838 3F , +2563 839 6Z , +2655 840 3R , +2687 840 3Z , +2751 839 67 81 /7D +$C ++TW^<-Oerr-`8-d3)i6ZI09s>TUYT2829G2l1FZAp\ccFrkJL5s6p!f\,Z3shm`9e[_fptCb.9W +_ZgJWE6's[$n`AL(bS&Qs8W-!s8K<#"Fh_jP,'Xl3'7~> +, +2818 838 6V , +2878 839 6Z , +3004 840 3R , +3036 838 6R , +3117 839 3V , +3153 838 6V , +3249 839 59 81 /4H +$C +1l9'B&9bkp[.+ZP!Y4c3=EmR!#5#h-g[5$Mrnm\S^VBgJs8W++rHdA/laju=Lc\8<]nR0d(a[i3 +?%p1%Xr(En0-C5os8W-!rFBjlq;=h0Z`A_o~> +, +3310 838 3F , +3398 838 4D , +3447 840 44 52 /7H +$C +3"6tO!Jk/fs8W-!s8W-!s8W&tYY/c>aFgni_UXQG49RkI%cf=HCD_#0E7$9WJ,~> +, +3490 838 3F , +3543 839 55 53 /4L +$C +3eW1.!5LnbkW'%%eIYLe_@?>M5,#_bIJ!L8s8TS-htqi9hdQ#jnAln0a=hcmb!=W)@(_DN^T[3d +h0%W,Bm$isYeab*[1,K"_Li!~> +, +3598 839 3V , +3634 838 3F , +3687 839 7D , +3754 823 27 30 /7L +$C +4K':6g\1A[gYMUBmbcjpp\0$NY\F~> +, +3818 840 3Z , +3882 838 6V , +3942 840 7H , +3986 840 99 52 /4P +$C +3#Q@]0^8djq&gZ9#EZ[:%9;,aJ,fQKs8W-!s8W-!s8W-!s8W-!s8W-!s7Kar^TY7BBs-p!&9-#( +iMG18>73Cn0OZ::-.o(YiM\_MW=1"G9k;+U%atb)(a*4Z~> +, +4083 839 4L , +4138 840 33 80 /0A +$C +3#S;Y#DT@1s8W-!s8W-!s8W-!s8W-!s8W-!s8W,qep%K":(KCB,7Y/J~> +, +4170 840 0A , +4202 809 63 81 /4T +$C +1DUNbfR)HFGk;rZSh9h`h=lD;g\\bApZ_]Re,-<6OG!FP]j4uHhS-.rX/l-L=8,;bl`5N2rp/g` +dVnes?b3tS^Ui5Xk//U/)aD+~> +, +4301 839 3V , +4337 840 6B , +4401 838 3F , +4490 838 6V , +4550 840 3Z , +4614 838 3F , +4704 809 64 83 /0E +$C +2Aq"^;F"IPs8W-!s8W-!r88q**\S$7GleNu#TLWhkVn14e+Wb6s4dQlrql`Qs8RTKqZ#f0CVQ^R +g0"u1[:,n4(eSTM@=h`=?)Th_5XlG.W&S1Z$kr~> +, +4770 839 4L , +4825 838 6R , +4872 838 6R , +4918 838 3F , +4971 839 7D , +717 720 3R , +749 720 3Z , +842 719 3V , +878 720 6B , +942 718 3F , +1033 718 53 65 /4X +$C +,f_%DGTbrM#Wa.-_BCB=Jdp'm\d>rBdLFWQ2O?_0NiT2GqHs:&s8W-!GQ-8D^$iQ$\+R2<f5"fs +YdPB:;>(hQfWH&r28]RH(de~> +, +1099 718 52 50 /0I +$C ++U+!Y]F[%gdtC"H3[$>%#WG:55mHuRS#"s+2lEeBs8#Iis8W,Q]mjgDrmoe-X0&b10UC;-#t#+D +XFn*h:r7r$(b$iJ~> +, +1165 720 6N , +1223 718 57 64 /5B +$C +,=9O<+qXnJ#TX.<,om%9_I3O\"41eXYQ+Y&s8W-!s8W-!be^a"e`Agks8W-!p7M~> +, +1297 718 3N , +1363 720 54 46 /0M +$C +-D?sZ)=;q-C(-2k.q'rB=D:u3g/cXVcrST'Q*dZiD(B=)9#XuACX]1VM-He3-L!H\\kUUjPB<:i +h'V)-*?a,L"mQ=e5Q9,.~> +, +1421 718 5B , +1515 689 0E , +1581 719 4L , +1636 720 7H , +1680 719 4L , +1735 720 4P , +1832 718 3F , +1884 719 3V , +1920 718 3F , +1973 720 7H , +2047 719 3V , +2083 718 6V , +2173 719 4L , +2257 689 0E , +2323 720 7H , +2367 718 6V , +2427 689 63 83 /5F +$C +.KdbBf`VcrF@2QX5`K5L6&.uiK\]";S(75s5JQpls*qNXCOY!THn`FT@45Wu&qm5^eeUPk8IABs +YBt6E]6;9W64O8\6.#i)kTJ[a(j)7rFK`E]XoDbCs8TjcpAU?SBS1O+Bu=_&-5\Fm-#?O7TYcd6+9~> +, +2488 720 7H , +2531 719 4L , +2586 720 4P , +2691 769 21 29 /0Q +$C +,H;6kh7_\%rOq*;hYuuYp[,lDU^]Q~> +, +2714 718 6R , +2801 720 50 68 /5J +$C +3!toKWDJ*Es8W-!s8W-!s8W,p3+oGhO8g@2s8W,o~> +, +2867 720 6N , +2933 720 5J , +2991 718 5B , +3085 720 41 80 /0U +$C +4;iXj!:\OBs8W-!s8W-!s8W-!s.9Lfi:-707'HXjs8N&Uqfff`$JMp'NSWAL@6a~> +, +3122 719 67 52 /5N +$C ++ToO_-iss):Uq"X_P^NA6h#^=dsWQ+5CWHYp](9ns8W-!s8W-!s8W-!s6@!p^`_22J+.E&$mAXa +%R>m]%f~> +, +3188 720 3Z , +3252 718 4D , +3301 719 3V , +3337 720 3R , +3369 718 6V , +3429 720 3Z , +3501 719 15 13 /0Y +$X +"5jFZ&,[OI+9"M(5Q3nH5Q2c(+8cZE"7Q~> +, +3577 720 3B , +3644 720 6B , +3708 718 3F , +3798 719 29 72 /5R +$C +0Q\<?]KP^,*'6I#)t!.4]CFeQs*k"HhuCH@p[A+[jO>tJ*ZG>p;BPB-mJm1arr(d14>d~> +, +3827 719 52 82 /1C +$C +2\Qrr&3Zqu*Uf["oL-L`LA+Db+'2fRqH*MtrEXXDg>C_'E(#/Xg?q/VJ(nbRIfA`=qgH39DVb". +@J1Na[QYc$gYTj,X,l0;qu?PCrVu12!^,ZW,6X*^%h1c~> +, +3875 719 48 54 /5V +$C +3+PCo6-shcFRO2<mi_p[T\PHd6+::rp@lI1]R+MO^UNq9pUbn3G5h7&N]jZ'rV*eqpMKs-\%_ju +s1Q,CJ%L-cheqh8Yeb-pgcR>/N%e$~> +, +3924 719 45 54 /1G +$C +2!Bf"htQ%&htR$BqtK"F^AdUiIeU-4n$i;P[f,psI_dK$gKZn%hq3:n(AE'&m>#n)mMZQ~> +, +3959 690 66 83 /5Z +$C ++os$`fa&QA*<FM0@F.;q82j,R2bCc1Du]S/YP,G2V0053[C2@)PW"e]PVBsN_5.>c$nG;b93/HI +=1<Ns9Ip`s%YLJtSH9!9-M625PCECTqg\A>rpTm\s52^_g)rZ\Dmm+'%AFFM)GDkdTYcEj~> +, +4022 719 41 54 /1K +$C +-OU%e&9Js[coV@>l+A.rLYKH<pYXm,a7]+ZQ!oL\)<RSh"K>3s'`uHcZpU13f!YIt49)eHs)5?S +eehh30UQ?b(f4V5~> +, +4101 689 0E , +4167 719 4L , +4222 720 7H , +4266 719 4L , +4321 720 4P , +4418 718 3F , +4470 719 3V , +4506 718 3F , +4559 720 7H , +4633 718 4D , +4682 719 4L , +4737 720 3Z , +4828 718 4D , +4877 718 6V , +4937 720 3Z , +5001 744 37 8 /6D +$C +3#T?Bn%HL~> +, +cleartomark end end pagesave restore showpage +%%PageTrailer +%%Page: 4 4 +%%BeginPageSetup +GS_pswrite_2_0_1001 begin +612 792 /letter setpagesize +/pagesave save store 100 dict begin +0.1 0.1 scale +%%EndPageSetup +gsave mark +K +Q q +0 0 6120 7920 re +Y +2796 7462 32 7 /6A +$C +0H"*/rO`~> +, +K +2854 7440 48 69 /0T +$C +21n\f@.;aLJ,fQKjhY/&h3M<(5D*m`rnmU$^\7]^mJjZphf&J-rqh34p\3GBDnj$Dq]5Y(]D+KN~> +, +2929 7462 6A , +717 7079 38 69 /3V +$C ++p,W'l-nMQL\6<BNkbVos8W-!s8W-!s5sE`_dUH8,%irks8W-!s*rlH%hA~> +, +753 7080 44 52 /7H +$C +3"6tO!Jk/fs8W-!s8W-!s8W&tYY/c>aFgni_UXQG49RkI%cf=HCD_#0E7$9WJ,~> +, +796 7078 59 54 /3X +$C +.`9AId0LaP6lpp+6&.`1kr22I>plH*\mKA]Du+DFs6dZ%s8UXLl`IqR>Ph%m9&3]UV/7_s=CE]a +#Uj/UKa]Ca('~> +, +856 7080 33 80 /0A +$C +3#S;Y#DT@1s8W-!s8W-!s8W-!s8W-!s8W-!s8W,qep%K":(KCB,7Y/J~> +, +922 7079 3V , +958 7080 66 80 /3D +$C +2Ap,2,Q+&Q6h"h*WrN,!s8W-!s8W-!s8W-!s8W,lrr/5^Y1Fj-)I8*2L(`j#2;7G@]*j68"3:HA +s8W-!qUTHgralZaM)CeAJ,~> +, +1022 7078 52 54 /6D +$C +.KLZC_#p@h#>U(/LHpF%#X&=IK2dV+eM$T&p&Fgs>"C,*5!u9crVsS2lK`B]D/IhSg/]+gg/\V. +$repSKdHqQ~> +, +1107 7049 64 83 /4V +$C +2Aq"^;F"IPs8W-!s8W-!r88q**\S$7GleNu#TLWhkVn14e+Wb6s4dQlrql`Qs8RTKqZ#f0CVQ^R +g0"u1[:,n4(eSTM@=h`=?)Th_5XlG.W&S1Z$kr~> +, +1173 7078 3X , +1233 7078 46 54 /6R +$C +3X-p]U'Me\OQ^pTLP-VqH>cUJ\,Z@*e9)**;?7CA)o3pR&qm25$@u%X)TWI66.@#\f!IbNs6oj` +[C3bb0X_fL0uF>8.0^O~> +, +1280 7080 33 75 /3R +$C +3#S;Y#DT@1s8W-!s8W-!s8W-!rG+LuIg;(Pc!uCD;?,df$.I]pri^(RJ,~> +, +1312 7079 3V , +1348 7080 3R , +1380 7078 3X , +1440 7080 66 52 /6X +$C +2Ap,2,Q+&Q6h"h*WrN,!s8W-!s8W-!s8W-!s8W,lrr/5^Y1ACp_b.!fRfXF80#tk+G,0YJ6/$sq +U'uhd~> +, +1537 7079 55 53 /4L +$C +3eW1.!5LnbkW'%%eIYLe_@?>M5,#_bIJ!L8s8TS-htqi9hdQ#jnAln0a=hcmb!=W)@(_DN^T[3d +h0%W,Bm$isYeab*[1,K"_Li!~> +, +1592 7080 6X , +1656 7079 67 81 /7D +$C ++TW^<-Oerr-`8-d3)i6ZI09s>TUYT2829G2l1FZAp\ccFrkJL5s6p!f\,Z3shm`9e[_fptCb.9W +_ZgJWE6's[$n`AL(bS&Qs8W-!s8K<#"Fh_jP,'Xl3'7~> +, +1755 7079 4L , +1810 7049 4V , +1876 7049 4V , +1942 7078 6D , +1995 7079 4L , +2050 7080 7H , +2093 7079 4L , +2148 7080 6X , +2212 7078 48 54 /4D +$C +.`!C?CkN93VcZ>(+eV*iJYbu)WG>McoY:8&s6ousabp,cYO2&\p=@+fYel,3.i<6T0VH:8"T~> +, +2261 7078 6D , +2346 7078 3X , +2406 7080 41 80 /0U +$C +4;iXj!:\OBs8W-!s8W-!s8W-!s.9Lfi:-707'HXjs8N&Uqfff`$JMp'NSWAL@6a~> +, +2475 7079 3V , +2511 7080 3D , +2575 7078 6D , +2660 7079 92 52 /4B +$C +.`dSk>2Im.\uu%'IJl3VOU$.Dg:usSX*VPL?#<fpfCa$jrTi"7II"#;l1b-^>?BE`[CX*OlLaE> +VX!L45IB6r<IN`;l)q_n](\uqCbhG._8#kLjJY!~> +, +2752 7080 3R , +2784 7080 6X , +2848 7079 7D , +2915 7078 3X , +2975 7079 4B , +3067 7063 27 30 /7L +$C +4K':6g\1A[gYMUBmbcjpp\0$NY\F~> +, +3126 7079 59 81 /4H +$C +1l9'B&9bkp[.+ZP!Y4c3=EmR!#5#h-g[5$Mrnm\S^VBgJs8W++rHdA/laju=Lc\8<]nR0d(a[i3 +?%p1%Xr(En0-C5os8W-!rFBjlq;=h0Z`A_o~> +, +3187 7079 67 52 /0W +$C ++ToO_-iss):Uq"X_P^NA6h#^=dsWQ+5CWHYp](9ns8W-!s8W-!s8W-!s6@!p^`_22J+.E&$mAXa +%R>m]%f~> +, +3253 7079 3V , +3321 7080 3R , +3353 7078 6R , +3431 7079 4H , +3492 7078 6D , +3545 7078 6R , +3591 7079 3V , +3659 7080 0A , +3691 7078 6D , +3744 7080 0U , +3780 7079 3V , +3849 7080 6X , +3913 7080 3R , +3945 7080 0A , +4018 7057 28 102 /6L +$C +"KA5$<2io`.dE:5H<ur7l`0tXqHqk?fDkMNs8W-!s8VKds1\NJh>P+UqsO1V^M_lpmbR9b[r'#Z~> +, +4047 7078 3X , +4107 7080 7H , +4184 7079 3V , +4220 7080 3D , +4284 7078 6D , +4370 7078 6D , +4423 7080 99 52 /7N +$C +3#Q@]0^8djq&gZ9#EZ[:%9;,aJ,fQKs8W-!s8W-!s8W-!s8W-!s8W-!s7Kar^TY7BBs-p!&9-#( +iMG18>73Cn0OZ::-.o(YiM\_MW=1"G9k;+U%atb)(a*4Z~> +, +4520 7049 4V , +4586 7079 3V , +4622 7049 63 81 /4T +$C +1DUNbfR)HFGk;rZSh9h`h=lD;g\\bApZ_]Re,-<6OG!FP]j4uHhS-.rX/l-L=8,;bl`5N2rp/g` +dVnes?b3tS^Ui5Xk//U/)aD+~> +, +4717 7078 6R , +4764 7079 3V , +4799 7080 7H , +4843 7080 3R , +4875 7080 6X , +4939 7049 63 83 /0O +$C +.KdbBf`VcrF@2QX5`K5L6&.uiK\]";S(75s5JQpls*qNXCOY!THn`FT@45Wu&qm5^eeUPk8IABs +YBt6E]6;9W64O8\6.#i)kTJ[a(j)7rFK`E]XoDbCs8TjcpAU?SBS1O+Bu=_&-5\Fm-#?O7TYcd6+9~> +, +5000 7056 33 104 /6N +$C +1L$chG4"_R^M_os]7/W*]C4X,GPf/4pYZ#.n,NFfr@e3IYPPHSV>W'IlFNhV;Y6r'Pq#t693/G~> +, +717 6959 3V , +753 6958 3X , +862 6959 0W , +928 6958 6R , +975 6958 6D , +1075 6959 3V , +1111 6960 3D , +1175 6958 6D , +1276 6959 4B , +1368 6960 3R , +1400 6960 6X , +1464 6959 7D , +1531 6958 3X , +1591 6959 4B , +1730 6960 7N , +1827 6959 4L , +1882 6960 6X , +1946 6959 4L , +2001 6929 0O , +2062 6958 6D , +2115 6960 7H , +2166 7009 21 29 /0Q +$C +,H;6kh7_\%rOq*;hYuuYp[,lDU^]Q~> +, +2189 6958 6R , +2285 6959 7D , +2352 6958 6D , +2405 6960 0U , +2442 6959 4L , +2497 6959 0W , +2563 6960 0A , +2595 6959 3V , +2631 6958 6R , +2732 6937 6L , +2761 6958 6R , +2807 6958 6D , +2860 6958 6D , +2960 6959 80 54 /6Q +$C +22Xd3K0\[ol).5\]:p)]KZBt<%Ho`:]l`(7g[4Cml2,o+g[DW=rqh0An%XnNn,(jXqn'W2s0oVp +s0pm(^@qI(D8-%b^"LNBGPc7Vm9>(pef/lW0d335g9L$`IG7fsi9`leGo=!~> +, +3039 6959 84 54 /2B +$C +1Q%!aGo2,^E;.8^E;t:DhnJY+L[KeAnD4"$]5RImpAaOSrV$!ap\00opNuo>\$t80DZ9UjfHNI' ++9'@Qp@eHnrV,(FmCh8_rO97a]t_#CoA8<-rS%j#loi%r_q93BnA`;F#.E0m0&a^c]A,AjGBe)c +iLjj&J,~> +, +3125 6959 31 81 /6U +$C +1is`C]KP678:3@>*t@qRhgaPPhs]J$huC=g^OQ"Hrr)lSpYYuIs8.<Es5@MiT(>c@QP'f5^]~> +, +3156 6959 32 79 /2F +$C +-ZflDHc+].E;4?;^)ONYIJ<^7rV,dTn+Z;FJ+nFWpigY\pgL:_LV;[*iMceSX5O:ZIt%8ke,~> +, +3186 6959 51 82 /6Y +$C +3XH'3+Qtis+_KsCoGDmm\#/VBqgS7prnmU%mJ["`D>sP'^\;sHpYYE4#`j=]hqr;=hlt^N[MnKN +>VY(3lnu[c)S#bGmJm."s53gGS-\_Z4H'n>'Ke5~> +, +3255 6937 6L , +3284 6960 54 76 /2J +$C +3"3Ohqm'"6MPf-OmG#*fh7IjtgYKKr[r1'igUFe=h7_]hrP.b"^ZXMOs4[MM9D_qrdb<Z5Y[Fmh +eZ2^b2%11O%f~> +, +3339 6936 6N , +3422 6960 0U , +3459 6958 3X , +3519 6960 7H , +3611 6959 7D , +3678 6958 6D , +3731 6959 3V , +3767 6959 4L , +3822 6960 3R , +3854 6960 0A , +3886 6958 6R , +3979 6958 3X , +4039 6959 3V , +4075 6960 3D , +4139 6958 6D , +4192 6960 7H , +4235 6959 4B , +4327 6960 3R , +4359 6958 6R , +4405 6958 6D , +4458 6936 6N , +4495 6943 7L , +4570 6960 3R , +4602 6960 6X , +4666 6958 4D , +4715 6960 0A , +4747 6959 0W , +4813 6959 7D , +4880 6960 3R , +4912 6960 6X , +4976 6929 0O , +717 6839 4L , +772 6839 0W , +838 6839 3V , +874 6838 3X , +934 6840 7N , +1031 6839 4L , +1086 6839 3V , +1122 6840 3R , +1154 6838 4D , +1233 6809 4V , +1299 6840 0A , +1331 6839 4L , +1386 6838 4D , +1435 6838 6D , +1488 6840 7N , +1585 6838 6D , +1637 6840 6X , +1701 6839 3V , +1745 6839 15 13 /5P +$X +"5jFZ&,[OI+9"M(5Q3nH5Q2c(+8cZE"7Q~> +, +1823 6840 68 76 /5Z +$C +-,HYX0Ea[np:pY-s8W-!s8W-!s8W-!s8W-!o@?4Bs8W-!^].[6f(Fk!^]~> +, +1890 6840 3D , +1954 6838 6D , +2045 6839 29 72 /5R +$C +0Q\<?]KP^,*'6I#)t!.4]CFeQs*k"HhuCH@p[A+[jO>tJ*ZG>p;BPB-mJm1arr(d14>d~> +, +2074 6839 2F , +2112 6839 5R , +2141 6839 6U , +2171 6839 45 54 /2L +$C +,R&iA",-1-LR</pDaD)SFG#"T#5_YTs53ePj>oj9_D3Otq8%;0Hl.%E&%?^(%ILdbDVKZMGC+N1 +H[BMa(c8=5e27\$K`~> +, +2253 6838 6R , +2300 6839 3V , +2335 6840 7H , +2379 6840 3R , +2411 6840 6X , +2475 6809 0O , +2567 6809 0O , +2628 6840 3R , +2660 6839 62 51 /7E +$C ++D4L%Fo/?-OFue)I9g49-hg:&mZ[ODrp/g`dVnclhs!)r=5LEi[nHHse^sOi3Nt2)%3OL~> +, +2722 6838 6D , +2775 6838 6R , +2853 6839 3V , +2889 6840 3D , +2953 6838 6D , +3036 6839 3V , +3072 6840 3R , +3104 6839 3V , +3140 6840 0A , +3172 6838 6D , +3255 6839 3V , +3291 6840 3D , +3355 6839 4L , +3410 6839 3V , +3476 6839 4L , +3531 6809 4V , +3597 6809 4V , +3663 6838 6D , +3716 6839 4L , +3771 6840 7H , +3814 6838 6R , +3892 6840 3R , +3924 6840 6X , +4019 6839 3V , +4055 6840 3D , +4119 6838 6D , +4203 6839 3V , +4239 6840 3R , +4271 6839 3V , +4307 6840 0A , +4339 6838 6D , +4423 6839 4H , +4484 6839 4L , +4539 6840 7H , +4590 6839 5P , +4670 6840 62 76 /2P +$C +3":AY@)Ob&C]FG7s8W-!aZH^+s8W%B>^ud8JG_W]s8W,rnc/Xh+A`%;s8Vup=--kSEe%&X!fc+~> +, +4731 6840 3R , +4763 6840 6X , +4827 6839 4L , +4882 6840 0A , +4914 6840 0A , +4946 6809 4T , +5007 6823 7L , +717 6719 6Y , +768 6719 59 54 /7I +$C +,S:7E1`kW&BKb52iO<>`h<5f?E'E+tiOuq6&%>uZIc'P-DnC5Jp@$c7h:qh@n*GJ7rV-$cGQ.'E +s6]damm$g>lp%`KZ1.L+L[O[+C#R0k~> +, +837 6719 5R , +866 6719 41 54 /1K +$C +-OU%e&9Js[coV@>l+A.rLYKH<pYXm,a7]+ZQ!oL\)<RSh"K>3s'`uHcZpU13f!YIt49)eHs)5?S +eehh30UQ?b(f4V5~> +, +959 6720 3R , +991 6718 6R , +1078 6719 4L , +1174 6719 4H , +1235 6720 3R , +1267 6719 3V , +1344 6718 6R , +1391 6718 6D , +1443 6719 3V , +1520 6719 3V , +1556 6720 3D , +1620 6719 4L , +1675 6719 3V , +1752 6718 6R , +1799 6718 6D , +1851 6720 0A , +1883 6718 6D , +1936 6718 4D , +1985 6719 3V , +2021 6718 6R , +2107 6719 3V , +2143 6720 3D , +2207 6718 6D , +2301 6719 4H , +2362 6719 0W , +2428 6719 3V , +2464 6719 3V , +2500 6718 3X , +2560 6720 6X , +2624 6718 6R , +2712 6719 3V , +2748 6718 3X , +2850 6719 4L , +2905 6689 4V , +2971 6689 4V , +3037 6718 6D , +3090 6719 4L , +3145 6720 7H , +3196 6719 5P , +3286 6720 5Z , +3353 6720 3D , +3417 6718 6D , +3511 6719 7E , +3573 6719 4L , +3628 6720 0A , +3660 6719 0W , +3726 6718 6D , +3822 6720 66 62 /7L +$C +3fL*\n,7IlO-W#rqtg?L^TID4qs1H>s8M]C?f-;3p%qhBrTj=Q^[L(Gp:p@Ns3glGJ$34e^]/`^ +?EJ\VqWf7#n+qP1IujW\s8N&M3#`3DfitlXRXb~> +, +3888 6720 67 48 /2W +$C +2@GV`&AhAXs7WIgk9c^kJ,fQKs8W-!s8W-!s8W-!s8W-!s8W-!s80QTm6BpDlZ-LCRg;M$<Z"H1 +(eK>ffVU1+e_4a]TYct>0>I~> +, +3962 6720 50 66 /0A +$C +3!toKWDJ*Es8W-!s8W-!s8W-!s8W-!s8W+_L3ilE~> +, +4028 6720 50 68 /0S +$C +3!toKWDJ*Es8W-!s8W-!s8W,p3+oGhO8g@2s8W,o~> +, +4086 6718 62 68 /0C +$C +,%H]g`:._se0+U8+rA/.":`FaJHL<Ir#jlgnP/8_l+K=RhuBSRs8W,dHN.:L/c/2DlR"\d[MQ0r +lnFc7KY&DdFs2%=@;oVb:N?F7s8VoQp&Df~> +, +4160 6748 52 5 /3C +$C +0FX3EVu~> +, +4226 6725 51 52 /0G +$C +0k'&"fPoV"iJ.h'%NC-B0]@dq_f3MJ*&-?,DA[?1L)_o7i<9K::kF?7+JAs2&5[t3'HjAA$4p$c +KG>n$64+9'(9jkg~> +, +4284 6720 67 62 /3G +$C +2B)pPfi7FBVPNRD+0D[DV>JiprmLcDV>Ft:^:j)Pebu?Aqb-\WQ2[*Hqb-ZVIK#Q0qb-ZVIK#Q0 +Y3YgSF:>28g40~> +, +4350 6699 62 69 /0K +$C +49d=L?:-sWs8W-!rcAOa"5s@@#LhWC[!_u[+$bI-K7,,c+PrUeS(%8`s8$[6s8Vc'rn%$?qb(_3 +Z=C8R$mjY#GWQ*9<KKaWMW'8._MDTq<e(~> +, +4416 6699 0K , +4490 6720 0A , +4588 6689 0O , +4649 6720 3R , +4681 6719 7E , +4743 6718 6D , +4796 6718 6R , +4884 6719 3V , +4920 6720 3D , +4984 6718 6D , +717 6599 0W , +783 6598 6R , +830 6599 0W , +896 6599 4L , +951 6600 33 80 /0A +$C +3#S;Y#DT@1s8W-!s8W-!s8W-!s8W-!s8W-!s8W,qep%K":(KCB,7Y/J~> +, +1015 6600 7H , +1058 6598 6D , +1111 6598 6R , +1158 6600 3R , +1190 6600 54 51 /0M +$C +3"2G9aDuW8pNq>'D7@79gUGfo[r1'kDV`"_h7J$I]6<orT=<SL\*`nfp@e8C`V]E~> +, +1245 6598 6D , +1331 6599 4L , +1386 6600 6X , +1450 6599 7D , +1550 6600 3D , +1614 6600 3R , +1646 6599 7D , +1713 6598 6D , +1799 6599 4H , +1860 6599 0W , +1926 6599 3V , +1962 6599 3V , +1998 6598 3X , +2058 6600 6X , +2122 6598 6R , +2169 6583 27 67 /3M +$C +4K(A(G5],3G5$F>qnDglrVbWiZ4+RJs8W*VSN:lWs8B-9(f1~> +, +2230 6599 3V , +2266 6600 3D , +2330 6598 6D , +2416 6598 6D , +2469 6600 58 52 /0Q +$C +3"VGc>5=hiJm4nMe[;thlIoN\e[2HTIbJ!uh-FloDQHk2X]Cdd:NSq8V#KU;8\3cJX)st8<p;P7 +\lV!&2l8pQ?)Nhi1Ko;~> +, +2525 6600 3R , +2557 6599 3V , +2636 6577 6L , +2665 6599 7D , +2732 6598 6D , +2785 6600 0A , +2817 6598 6D , +2869 6599 3V , +2905 6598 6D , +2958 6576 6N , +3028 6599 4H , +3089 6599 0W , +3155 6599 3V , +3191 6599 3V , +3227 6598 3X , +3287 6600 6X , +3386 6599 4L , +3441 6600 0A , +3473 6599 4B , +3565 6599 4L , +3620 6569 4T , +3681 6598 6R , +3761 6599 4L , +3816 6569 4V , +3882 6569 4V , +3948 6598 6D , +4001 6599 4L , +4056 6600 7H , +4099 6598 6R , +4154 6599 5P , +4236 6600 5Z , +4303 6600 3D , +4367 6598 6D , +4454 6600 0U , +4491 6598 3X , +4551 6600 0A , +4583 6600 0A , +4615 6598 3X , +4675 6599 4B , +4767 6600 3R , +4799 6600 6X , +4863 6569 0O , +4959 6600 3R , +4991 6598 6R , +717 6479 0W , +783 6478 6R , +830 6478 6D , +883 6479 7D , +977 6480 3R , +1009 6480 6X , +1101 6479 3V , +1137 6480 3D , +1201 6478 6D , +1282 6478 6D , +1335 6480 0Q , +1391 6479 4L , +1446 6480 7N , +1544 6449 4V , +1610 6480 0A , +1642 6478 6D , +1702 6479 15 51 /3Q +$X +"5jFR&,77E+9"M(5Q3nH+9!A[&,Z\-"5j.Zzzzzzzzzzzzz"5jFR&,77E+9"M(5Q3nH+9!A[&,Z\- +"5j~> +, +1126 6262 24 72 /0U +$C ++t@n=eLsP+YGLo!9Bs:?s8$+&s8W+Is6m_k^O>!`pAMaEg\1%%5Q~> +, +1162 6272 52 58 /4T +$C ++Dt22n;'$mK;'!rU-/Uq+pCM##-'`as8W-!s8W-!s8P8$eb5lLs8W-!qLA~> +, +1230 6272 47 45 /1X +$C ++PbNY":bub6JI/]+?BW7cp>6;dVhoQ]fg:0<qZHofDkmNmA9jMDd-Gsf%O0Q[[%b4@>(^9K!A.h +L(kIQ~> +, +1282 6255 56 62 /4G +$C +3!q,3aUeFOs8W,sL(f.]^j&07KBS.Ncm,Lc$,2!#oUEfYVpfsAH@Pgis8W,r?GEo@[G>\?a(]_F +m=`,+Ph9rm$$Ii'Xr("?'E~> +, +1358 6260 19 28 /0W +$C +-E$V4mI0K?qnE$BrSN(]h>~> +, +1462 6272 4T , +1530 6274 45 62 /3W +$C +2@YoEU`9@6s8W-!s8W-!s8V[E,.I+BaFaHls6p~> +, +1582 6272 4T , +1650 6274 45 60 /0W +$C +2@YoEU`9@6s8W-!s8W-!s8W-!s8W-!s3/9>qu~> +, +1710 6272 46 45 /4X +$C ++O4a+i.reS6.$'k_BN_8!X@j2h&tE;W_I/@C:^R_oWehD^WDC>HN)Lg[CpEoV/7fdL6]!.K*7m( +:t.1mJq*~> +, +1770 6272 47 45 /2L +$C ++WT&@_B@Xm#7-+#k_lB]&2ulZkm$>udX4)MBPXeWJ,fQ'r/,hrrqlRsCN%j0CLMq$@1c#I'uLE6 +'2W(k~> +, +1822 6274 57 60 /5V +$C +1Bn>>`B3dnFC`;hs8W-!s8W-!s8W-!s8W)sqd%e)/9[@sHYIX?9<hd*(gJc)s8W-!r:jIm^]~> +, +1890 6272 48 45 /1G +$C +3k744+D-15#AAdpoL9e"#TK*e&7PNu60UU_rVuijpY5GpI>50sLP@d5A2Znl&'+_Ml`/:<Y\T>r +/6!H_C23s&~> +, +1942 6274 56 43 /5T +$C +1Bn:Ro[EN6F_)fts8W-!s8W-!s8W-!s8W)srHDINZ.ep"nC!a.@>)."]2rE/0VA~> +, +2018 6262 17 72 /1A +$C +,MV+bDqk!bn%8&GIf&lss4dSRs3grG=6dP#qQ?m&9@EI5X_I~> +, +2146 6273 15 43 /4A +$X +&+C\=5Q$$1J,XrsJ,XrsJ,V\15Pu&]"2Fm:zzzzzzzz&+C\95Q$$1J,XrsJ,XrsJ,Xrq5PuVu#N,~> +, +2182 6293 57 18 /1E +$C +1BpHu;?+kVP+LS~> +, +2302 6274 59 42 /3O +$C +.En\QohYJ]jr\`Q9RhBgrn!t<huDF/ldtg:S+$CWBlou^n*MdCl9;T4J,c[8hqsLnFh[nRi%@<M +4o<_~> +, +2362 6274 61 43 /0S +$C +2AdhJ:_A3Oo1(F=qu?]rs8W-!s8W-!s8W-!s8W-!s8W-!pO;Seqb;8cG?JF`D.WiQ<gR9_Y1)/_ +(f=s(~> +, +2430 6274 0W , +2490 6274 3W , +2542 6272 56 62 /3Y +$C +,Ap0V:'Cb1Tg"9*%d8k,,W$'NTS%Y>qG#tA:$KCgqg/:sYQ+Y&m<\c`f%9dlBk<=V[[1h`_[1Jp +-.o@;>VNZrEW?(=s7sI<pOE~> +, +2610 6300 47 4 /2H +$C +/ddj:TE~> +, +2670 6278 46 48 /5H +$C +0W7)r4)i)l*&-_=DA[?1L)l$X3,TRP_hK1e%DrYmE5TO"&5\Vq#Uhu*$50#*"UHMK&6'>dT`k`h +$A*pH(9An~> +, +2722 6272 4T , +2790 6274 3W , +2842 6272 4T , +2910 6274 0W , +2970 6272 4X , +3022 6272 3Y , +3090 6272 1G , +3150 6274 48 43 /3J +$C +0H-5NSR;Ess8W-!s8Tdkms/EWheWql2"95c2)l)`$#mk,\7%cB:]~> +, +3226 6262 0U , +3270 6272 2L , +3322 6272 4T , +3382 6274 57 42 /3R +$C +1Bn>>`AIOjTZI4d[["5%V/7_s>>!UMd^GFJTsPQAXefkb'l)8[FQeq":"!pCFIT)^-L!H\\kUUj +PB<:G+cQNO:A(N8~> +, +3442 6272 4T , +3526 6272 15 14 /1K +$X +"2GHB5Q!bFJ,XrsJ,XrsJ,XrsJ,V\1+8>rR~> +, +3570 6272 43 45 /6F +$C +--Bs+k9*%T&:G,"nKk6P"+"kk2m9\ds6X:'>#;Fq8V0QRcT29O5bS`qZp[t!6#*3fV#UJ^D6DID +fJ$MB6gQEDC((Zh~> +, +3630 6272 2L , +3690 6274 3J , +3750 6272 4X , +3810 6272 4X , +3862 6274 5T , +3938 6260 19 28 /0W +$C +-E$V4mI0K?qnE$BrSN(]h>~> +, +4042 6274 5T , +4110 6274 3W , +4170 6274 45 60 /3U +$C +2@YoEU`9@6s8W-!s8W-!s8W-!s8W-!s3/9>qu~> +, +4238 6260 0W , +2078 6206 31 28 /1G +$C +36mPQJ,fQFC&e55s%P`Xs8W*n5QC`~> +, +2130 6174 47 56 /3K +$C +-Oe`/+Q*5!s8W-!s8W-!s8W-!,J;WWs8W-!s7hZE~> +, +2190 6172 4X , +2242 6174 3R , +2302 6172 4T , +2422 6174 56 56 /1I +$C +4rUd=%c$9jZ$84^mJ$#Bs)7r;p$8gX>qQcK/dYu&YZo9^pc$)$^MgU=hgb\+s%E<:>qQqF;rOoQ +$Get~> +, +2490 6174 3J , +2550 6172 1X , +2602 6174 3O , +2670 6172 6F , +2730 6172 4X , +2790 6174 3J , +2858 6206 1G , +2918 6160 0W , +3022 6174 60 56 /3S +$C +3XgW_qX=IL\M;mKlgOl.?hOHu^M^X[lgM9sli6p4hu:4egK+"!s8)]/rI=h#p$)/Ds6[#ds8A#O +rTi=4p$r(^riPMa&Ie=7Xo%#~> +, +3082 6174 0S , +3150 6174 3U , +3210 6174 3W , +3262 6172 3Y , +3330 6200 2H , +3390 6178 5H , +3442 6174 61 56 /1K +$C +2AsYVcW'ksRPHFCXfnq_?X)rbmB<_J?Wc]Bjb.!L^;"M<gL"<r^:N(&gL"<rQhoI?gL"6'fD<Qr +U;'M~> +, +3502 6155 4G , +3562 6155 4G , +3630 6174 3U , +3698 6162 1A , +3758 6160 21 56 /4K +$C +,J&ARhqtoXDsuHX^A%$nhf8\qBI,]gTC5g_>(?~> +, +719 5946 82 71 /1B +$C +46guKZN-XOqT6Z[95/n-Y?m$)s8$(ql$Y5b9BgjXV>oe.0;\<U?XKZ%^6e0OoY-[?qHs5gde[<D +s3gaN9Bgo>^J!g>0A"h?I4qGnnbVqEfD8(e:1,l??r:9]~> +, +802 5946 52 49 /5Z +$C +-,RJ#Jd4TY+S0[\0^1M^2l>gu<qXnToWS5,FoUmEs8W%)rjpk_Fh_cG[d)RJ9#F9R9#61SMQibj +PlW!~> +, +857 5947 33 63 /4J +$C +22MSu?.7U@]^UPYFoVLAs8W-!s8W,u?o*0m2B4J$*'aK's6osmLPLB~> +, +889 5946 46 49 /6P +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +970 5947 4J , +1003 5948 58 72 /4O +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qco"??GfF?_0Zp7?*;dfE5?Pos8W-!s7M]^ +s+AH!#Cl~> +, +1061 5947 48 48 /6J +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +1111 5947 4J , +1175 5946 4T , +1243 5948 3W , +1295 5946 4T , +1363 5948 3U , +1423 5946 4X , +1475 5946 3Y , +1543 5946 48 45 /1G +$C +3k744+D-15#AAdpoL9e"#TK*e&7PNu60UU_rVuijpY5GpI>50sLP@d5A2Znl&'+_Ml`/:<Y\T>r +/6!H_C23s&~> +, +1603 5948 3J , +1689 5948 38 47 /6X +$C +0H#A^_V2d)s8W-!s8W-!hqnUF[?3rg<K18!0`S\NG9dORiPEE.~> +, +1729 5946 6P , +1776 5947 4J , +1809 5947 59 48 /4D +$C +,6G^d:()^rSt(K"WZ[OKKH'R@829B/hbX7Os8W-!s8W-!s8W-!s8K(pJ6^S3s7>3jJF\7`JS/"W +3,n?~> +, +1869 5948 6X , +1909 5948 58 47 /6N +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qcY0ReuU^)_0-YK@^p/t4&U'%SJqnU0Mh~> +, +1967 5946 40 49 /3J +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +2043 5947 6J , +2126 5947 4J , +2159 5947 4D , +2219 5920 56 75 /6T +$C +/d=P.LUCpts8W-!s8W*W++t[YiU7o"_nlWIR!K5#0_F9"If'$2n,<4bs7cQnYPu4PGO6ub73.&n +$mep_/@[=OG.U\h_[93uT^3@4(ao~> +, +2279 5948 28 72 /4F +$C +0EsY0/Z\pOs8W-!s8W-!s8W-!s8W-!s8W-!lS&`s4p`JB2)k~> +, +2308 5946 6P , +2364 5947 11 12 /0D +$X +*rnNUJ&)*Bs5<q8s5<q8s5<pmJ&!-+~> +, +2439 5948 60 69 /3F +$C +226&?X:j(Vs8W-!s8W-!s8W-!s8W-!s3*SAs8Vcls8W)e]ja4A~> +, +2500 5948 4O , +2558 5946 6P , +2639 5948 35 73 /6Z +$C +0Esb+"P*PPs8W-!s8W-!s8V6a07FEB%#Z/ks8W,Vqtkj:[L0nZ`p\\%_LM~> +, +2672 5948 28 69 /2V +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +2701 5948 6X , +2741 5946 3J , +2783 5947 4J , +2849 5946 6P , +2897 5948 4F , +2926 5946 6P , +2974 5948 88 47 /5V +$C +0Eoc'K:jmrq)D8+/;`aO>(?SPs8W-!s8W-!s8W-!s8W-!s8W-!ri?'Cm5<d*9l_ZL&>Ouf@AMUU +!4rFJ@)DUq/%!gM.m^-W@A]^a-57F:+CLi~> +, +3062 5946 6P , +3110 5948 6N , +3168 5947 4J , +3234 5948 2V , +3263 5946 3J , +3338 5947 6J , +3421 5948 6X , +3461 5946 6P , +3508 5948 6Z , +3542 5946 6P , +3590 5948 6X , +3629 5946 6P , +3677 5948 6N , +3735 5946 42 49 /3N +$C +-,RJ0,D$.,dtC(&BFm314U.0';Uopg0D5AFqu:T"GOO;dD/K!tg22NP(b6GB_Li1('E~> +, +3780 5946 6P , +3861 5947 4J , +3894 5946 5Z , +3982 5947 4J , +4015 5948 4O , +4073 5946 6P , +4154 5948 3F , +4215 5947 56 73 /6F +$C ++LJp$5kmV@ADpOa$L)XK9;U)$FLka1QV41'l#aLB/sf3GX^kL=qgH2riP+2XpA99P(k'-9mIh'p +IJ`R7s8W-!s8K>)a7J5P5dOC>~> +, +4304 5947 4J , +4337 5946 5Z , +4391 5920 6T , +4485 5948 4F , +4514 5946 6P , +4562 5947 55 47 /4S +$C +.aN80rp/h061h@qkr8H5rjSg"8c@(ef(At+5J$]0oUGf-2d]Y_\*g;!Eo<U`1]Mt~> +, +4618 5946 6P , +4666 5948 4F , +4729 5947 82 48 /6V +$C +--V`>h0uuM[/YPgrB9d@+!SJRhOje2e\;&ZVUk)5[%C.MH@FT)^[7iQJ+m9?>HRpIY?pm>YNtG4 +lW<i0='tEF]"Q[tSt*;=F&6Q9h].OYhu~> +, +4812 5948 2V , +4841 5947 59 74 /3T +$C +,6PadBFG%9o].Bt<'f[3Jd*;_2s<!EI=:?D^Ak&0qZ$Tqs8DutIK/3^Iqs28[alB*$o"p%K#8Q` +"?mZ-1+_tqs8W-!s8?J%(]Hk@a^F0ZLO]~> +, +4903 5919 55 76 /7K +$C ++p6(UU(D9p_BI4g&2<;jh&tN#o\CkkFnFSgJ,d.Xs(u]/=CJ9h&r&_O@t^O*>/J*d6!EuahV:&- +aAQDs_@@-!5s.7@DNJb"HG82g\$+]hs53/>Bn"bZS_ZAA[]D/Z`.uhrTnOs!J,~> +, +4958 5946 6P , +5006 5947 4J , +719 5828 6Z , +752 5826 5Z , +807 5828 6X , +877 5827 4D , +937 5826 3J , +980 5826 6P , +1057 5828 2V , +1086 5828 6N , +1174 5828 4F , +1203 5827 6J , +1253 5827 4J , +1286 5826 6P , +1334 5828 6X , +1404 5828 3F , +1465 5827 6F , +1551 5826 3N , +1595 5826 5Z , +1650 5828 5V , +1738 5828 5V , +1827 5827 6J , +1877 5828 6N , +1935 5827 3T , +1996 5826 3J , +2046 5827 0D , +2117 5828 3F , +2178 5828 4O , +2236 5826 6P , +2314 5826 3J , +2356 5826 6P , +2404 5826 3N , +2449 5826 5Z , +2503 5828 6N , +2561 5827 3T , +2652 5826 6P , +2700 5828 4F , +2729 5826 6P , +2777 5828 5V , +2865 5826 6P , +2913 5828 6N , +2971 5827 4J , +3034 5826 5Z , +3089 5828 6Z , +3152 5827 4J , +3185 5828 4O , +3243 5826 6P , +3321 5827 4J , +3354 5827 4D , +3414 5800 6T , +3474 5828 4F , +3503 5826 6P , +3581 5828 2V , +3610 5826 3J , +3682 5827 6J , +3762 5828 60 69 /2T +$C +1BfGjiK1'#,=ctPrr<#qs8MRA)uos<s8W-!s8W-!s8W-!s8T[WEraVc~> +, +3823 5828 2V , +3852 5828 5V , +3940 5827 51 73 /5X +$C +5EglT+SH@k^#U$'FpL$[_nllJqgH5-rV-'chuE_+s8Vrqrg*Md?)<,t[I'gC0OD_A]3VSk$n_r) ++92B@s8W+%2$O#4bf,_b~> +, +3996 5826 5Z , +4080 5826 3N , +4124 5828 4O , +4183 5827 6J , +4233 5828 6N , +4291 5828 6N , +4349 5826 6P , +4397 5828 4F , +4455 5826 5Z , +4510 5828 6Z , +4573 5827 4J , +4606 5800 55 74 /4H +$C +3%Y6hmI,4)4=>r&qn9amhgXIsrOVILFl0+]j?`gAhs!)u2d]ipr?hQFX8\<4pIY>3Is(D_lMA*j +\l\aa"r!=,"Tb7n~> +, +4661 5800 6T , +4721 5826 6P , +4806 5826 2L , +4858 5828 57 60 /5V +$C +1Bn>>`B3dnFC`;hs8W-!s8W-!s8W-!s8W)sqd%e)/9[@sHYIX?9<hd*(gJc)s8W-!r:jIm^]~> +, +4926 5826 1G , +4978 5828 5T , +726 5706 1X , +786 5708 48 60 /3F +$C +3#\:_Rc"/Fs8W-!s8W-!s8SZ":&Re)s8W)TmI%f]?&K12K-?0~> +, +906 5706 43 45 /6F +$C +--Bs+k9*%T&:G,"nKk6P"+"kk2m9\ds6X:'>#;Fq8V0QRcT29O5bS`qZp[t!6#*3fV#UJ^D6DID +fJ$MB6gQEDC((Zh~> +, +958 5706 4T , +1026 5708 48 43 /3J +$C +0H-5NSR;Ess8W-!s8Tdkms/EWheWql2"95c2)l)`$#mk,\7%cB:]~> +, +1086 5708 3W , +1138 5708 5T , +1206 5689 50 62 /6J +$C +,QSa(*Ou4e)i(n?qnDP!s33hh+FG=,:SK,l5_4^;62F=JK7,(0FIu?9:]Jjms8W-![D2[BrN6%# +Zrm3>FrL(k?%WGSF&jf"@>.Nd$i~> +, +1284 5707 4J , +1317 5708 4O , +1375 5707 48 48 /3L +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +1425 5707 4J , +1482 5680 6T , +1542 5707 3L , +1592 5706 40 49 /6H +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +1635 5706 6H , +1677 5706 6P , +1725 5706 6H , +1793 5707 6V , +1876 5708 2V , +1905 5708 6N , +1963 5707 3T , +2024 5706 5Z , +2079 5707 6V , +2187 5708 88 47 /2X +$C +0Eoc'K:jmrq)D8+/;`aO>(?SPs8W-!s8W-!s8W-!s8W-!s8W-!ri?'Cm5<d*9l_ZL&>Ouf@AMUU +!4rFJ@)DUq/%!gM.m^-W@A]^a-57F:+CLi~> +, +2276 5707 3L , +2326 5708 6N , +2384 5707 3L , +2434 5679 7K , +2489 5706 6P , +2537 5708 6X , +2602 5706 6P , +2650 5707 4S , +2706 5706 6P , +2754 5708 6N , +2812 5707 4J , +2845 5706 6H , +2912 5707 4J , +2945 5706 5Z , +3025 5707 4J , +3057 5708 4O , +3115 5706 6P , +3188 5707 3L , +3238 5680 6T , +3298 5680 6T , +3358 5708 4F , +3388 5708 2V , +3417 5706 3N , +3461 5707 3L , +3511 5707 4J , +3544 5708 2V , +3573 5706 5Z , +3627 5708 6N , +3694 5707 0D , +719 5524 60 69 /6D +$C +226&?X:j(Vs8W-!s8W-!s8W-!s8W-!s3*SAs8Vcls8W)e]ja4A~> +, +780 5524 4O , +838 5522 6P , +915 5522 3N , +959 5524 4O , +1018 5523 3L , +1068 5524 6N , +1126 5524 6N , +1184 5522 6P , +1232 5524 4F , +1288 5522 4T , +1356 5524 3W , +1408 5522 4T , +1476 5524 3U , +1536 5522 4X , +1596 5522 2L , +1648 5524 5V , +1716 5522 1G , +1768 5524 5T , +1858 5524 2V , +1887 5522 6H , +1958 5523 4D , +2018 5522 6H , +2061 5522 6P , +2109 5523 3T , +2198 5523 5X , +2253 5496 4H , +2337 5524 3O , +2397 5524 0S , +2465 5524 3U , +2525 5524 3W , +2577 5522 3Y , +2667 5523 4J , +2700 5522 5Z , +2784 5522 6H , +2826 5522 6P , +2874 5524 6N , +2932 5523 3T , +3022 5524 2X , +3110 5522 6P , +3158 5522 6H , +3201 5522 6H , +3243 5523 3L , +3293 5495 7K , +3349 5522 6P , +3396 5522 6H , +3439 5509 23 27 /5C +$C +0k&hmpMY93^MeSYh7p_lq5@]N~> +, +3492 5523 5X , +3547 5523 4D , +3608 5523 4J , +3670 5524 2V , +3699 5523 4J , +3762 5524 2V , +3791 5522 6H , +3863 5524 6N , +3921 5522 5Z , +3976 5524 6X , +4015 5524 2X , +4104 5523 3L , +4154 5524 4F , +4183 5524 4F , +4212 5496 4H , +4298 5524 6N , +4356 5522 6P , +4404 5522 3N , +4448 5522 6P , +4496 5522 6H , +4539 5522 6H , +4581 5523 3L , +4631 5524 6X , +4671 5496 4H , +4756 5523 4J , +4789 5522 5Z , +4874 5522 3N , +4918 5524 6X , +4958 5522 6P , +5006 5546 6A , +719 5403 3L , +769 5403 4J , +802 5402 6P , +874 5403 3L , +949 5402 3N , +994 5404 4O , +1052 5403 3L , +1102 5404 6N , +1160 5404 6N , +1218 5402 6P , +1266 5404 4F , +1320 5403 4J , +1353 5402 5Z , +1433 5404 6D , +1494 5403 56 73 /6F +$C ++LJp$5kmV@ADpOa$L)XK9;U)$FLka1QV41'l#aLB/sf3GX^kL=qgH2riP+2XpA99P(k'-9mIh'p +IJ`R7s8W-!s8K>)a7J5P5dOC>~> +, +1575 5403 4J , +1607 5402 5Z , +1687 5404 6X , +1726 5402 6P , +1774 5402 3N , +1819 5402 6P , +1866 5404 2V , +1896 5403 4S , +1952 5402 6P , +2025 5402 6P , +2073 5403 4S , +2129 5402 6P , +2177 5404 6N , +2235 5403 4J , +2268 5402 6H , +2335 5404 6Z , +2369 5404 6X , +2408 5402 5Z , +2463 5404 2X , +2576 5403 6V , +2660 5404 2V , +2689 5403 3T , +2750 5375 7K , +2805 5402 6P , +2853 5403 4J , +2886 5402 6H , +2953 5403 4J , +2986 5404 4O , +3044 5402 6P , +3117 5403 3L , +3167 5376 6T , +3227 5376 6T , +3287 5404 4F , +3316 5404 2V , +3345 5402 3N , +3390 5403 3L , +3440 5403 4J , +3472 5404 2V , +3501 5402 5Z , +3556 5404 6N , +3639 5402 3N , +3684 5404 6X , +3723 5402 6P , +3771 5403 3L , +3821 5403 4J , +3854 5402 6P , +3902 5402 6H , +3952 5403 11 47 /1Q +$X +*WSETJ&)*Bs5<q8s5<q8s58CB5CagUzzzzzzzzzzz!!")@5Ce7!s5<q8s5<q8s5<pmJ&":!*WQ~> +, +1087 5196 41 42 /0C +$C +.EY!]i<+`R#=MDD+G#<$)k_gt3^NJ=&(Q-Ds8DhWYG],6qeL-&>AIZ$Y[E9^iJR#A_J0Jja`R~> +, +1135 5198 53 40 /5N +$C +,D$Sb:*i!:X&[JDoe4)[s8W-!s8W-!s8W-!s8W-!s8VhCrSP!6GO6%aV'Cjf,a`@J2Cl/bg1i/] +_Na7$-i~> +, +1194 5196 46 56 /0I +$C +24TCB&8#?;%o5Ss3hSan^Hjg,%J6%[p%7qLp&Cris8W+7qu>C-g=ooW51j2q?%s!Y0UH7\$\l0" +Eh.4Ms8W"J"L#H~> +, +1249 5196 0C , +1300 5198 46 54 /0Z +$C +,D,!,?Cf[7:U6\os8W-!s8W-!s8W-!s1eG:f%2HrQXR(+KY%uQln0,[L:I9`s7mW\It.~> +, +1356 5196 43 42 /1O +$C +,TP#L&8#>o#A?74OQqE%jo#D[9RK$r^OP_N^O<i4p-YS`GDD9t#2F_.rjn\eJV:<EMT%qZ@6oSk'E~> +, +1409 5198 44 40 /4R +$C +-D7or'5@D&4N`HZs8W-!s8W-!s8W-!rr)e>>?nGN?J8::N#53m?)r\o6OH..~> +, +1532 5196 14 40 /1A +$X +!rsG$5Oa0tJ,''As8;opJ,"Ng5O]cQ#CldSzzzzzz!!!*$+5fBQJ,"Ngs8;ops8;opJ+u7t5N!'f~> +, +1570 5215 46 17 /7B +$C +,D)aTW;jrsWD@7~> +, +1681 5196 0C , +1732 5198 0Z , +1788 5196 1O , +1841 5198 4R , +1950 5196 42 42 /1Y +$C +.EZ`;KH),n#=Lqj":`^D\kUUk:J&5_DbobKli7"^?[CH*g0_:R[&p0Z(;gGG"qXfbe1dQ38;.~> +, +2007 5198 40 54 /6B +$C +,D/u\C.NjSs8W-!s8W-!s5h(sT=#q/s8RQ(]GMcm6ZCNl:]~> +, +2115 5196 36 42 /2C +$C +3g?-NOmn"#&:Fe?)%QiZi<JeD[pK+$,onI3YY&[9PQl@TTb&?"6]=EJcra9t4X^6@s(uR+\1h," +6fG2bC()8Se,~> +, +2164 5196 41 53 /5H +$C ++pr&gi<,b:3[5fp76'KO+P.W`s8W-!s8W-!q)&U5qbp#bs8W,,~> +, +2221 5198 42 39 /1I +$C +,D/u\C/Fs1s8W-!s81[ILR($hp;&?uC$gU.*J4YuMW(Uj'LP[~> +, +2276 5198 38 56 /4P +$C +,DN$XWNH4#s8W-!s8W-!s-s8YmiVATs8W,W~> +, +2327 5198 4R , +2382 5181 45 57 /2E +$C +-O)9opF=.7E8A.oqnN1,$nhlM&:H_S'Al'+^4Hgj%J6%P5.\JBp&Cris8VJ9Ir"psqeL$a5@H1^ +$$I.X64Ut:CLL0Z6RgL~> +, +2442 5185 20 51 /5P +$C +,JD]Qhm`?ln([a5rpB[]EW>Te&3=q!^T6YL2#~> +, +1084 5096 5H , +1140 5098 43 54 /0S +$C +,D7oY.\F=OlkqJ)l#aLB/sekG\m6qT95.h2MUknq^Mg@ODn"KgpA5B0gYokC$iBVSO8o7[r^R9%hu~> +, +1194 5121 42 4 /6J +$C +,D0PjVu~> +, +1249 5102 41 43 /1U +$C +,P3#tLCMmT_hK-biO]R:E5RDM2[hbX(i[BIiJ2:`KG5Q&"[PIOJqOg\W$k7L:kF?8"URL&JtT?M5Q~> +, +1301 5098 4R , +1356 5096 1O , +1405 5098 5N , +1463 5096 42 42 /5B +$C ++qA`!i<+`R#7-,NF9mg@JdnLoU`Vrs<Rl6lU)QS9o#/-4^?`AAm]E=%-#IHPQ%K4@6F@4M0N)1A~> +, +1519 5096 0C , +1570 5098 0Z , +1626 5096 1O , +1679 5098 4R , +1755 5087 14 66 /1E +$X +!#tu$!.4co!;HQh!Up-Z"5j:>#J^S[%tG1@++PF5*rnM*4odbHIK4`qHiSNoHiX'EquHKlp]1'h +p]1'hp]1'hp]1'hp]1'hquHWpquD*EHiSNoIK2P34odbH*rmA_*rlh%%tG2+#J^S["5j:>!Up*Y +!;HP=!.4c/!#ttE~> +, +1786 5096 5H , +1842 5096 1Y , +1892 5081 47 57 /0C +$C +,DOA<cbKM[s8W"e0*iX*5(hf*SGFJXpd)WXG_@%'ldL@4qtbgBs0_j7^Y2og=_!2QCaI_B.5_IK +JmF9$>VMlh.41\~> +, +1956 5085 19 26 /2A +$C +,LlJ^II@"0^AdT7hg]k-J,~> +, +2059 5096 41 42 /4T +$C +.EY!]i<+`R#=MDD+G#<$)k_gt3^NJ=&(Q-Ds8DhWYG],6qeL-&>AIZ$Y[E9^iJR#A_J0Jja`R~> +, +2107 5098 5N , +2166 5096 0I , +2221 5096 4T , +2272 5098 0Z , +2328 5096 1O , +2381 5098 4R , +2442 5085 2A , +2551 5126 28 27 /0O +$C +3Lr3Fdng#Dl[RXgs8VD3?iU0)Ds`"D~> +, +2599 5096 4T , +2647 5098 5N , +2706 5096 0I , +2761 5096 4T , +2812 5098 0Z , +2868 5096 1O , +2921 5098 4R , +2983 5126 0O , +3037 5087 15 66 /6X +$X +?i]Zrp],[AHiQ>1*WR8^%fd,j#J^S[#J^H""5j4L!Up-Z!;HQh!;HQl!.4co!.4cq!.Fos!'UBH +!'UBH!'UBH!'UBH!'UBH!.Fos!.4co!.4eE!;HQh!;HTi!Up-Z"5j:>#N,j&#J^k#%tG`%*rnJ) +490a/p]0d`n,P]R~> +, +3090 5085 5P , +720 4765 47 67 /4B +$C +3Wia=KE<`/p:pY-jhY#(rT)FhoP`W:pA`nIDuIHErV-'DhgXJ[J*lt0g])3$rl9M8qfe,V,Z9-~> +, +770 4764 20 15 /6Y +$C +1`Rl=FT;<CC)Bb~> +, +795 4765 46 67 /2F +$C +4rW=((^sTUs8W-!s8W-!s8W-!s8W-!S6ZBXr'(_0n\`3(0\H\`_nk9d*ZBP~> +, +845 4764 6Y , +920 4765 79 68 /1F +$C +4rW)`YU0jr_[d6u4^mmi(Z=0[pA94rn$h'=s0qI3^\@L&qsXR^s8W-!s4@,I?iQu%^:NsJ?$]d/ +'&])ZWc\`]&>fJD$Qr2N5tI@~> +, +1003 4763 46 49 /5G +$C ++U++g6m1FjKH4dS%@Npn#4R8n%;9Hkde`s0run4!%=!O$"j!oDs6oj9f)MddD(?#G0i6DS%7:I2 +M4a~> +, +1053 4765 38 72 /1H +$C +0F]-"5Wu=Ns8W-!s8W-!s8U>r<ppP0G[s$`s8W-!J+%`.$J8Ar:r_qk*PoM~> +, +1092 4765 30 71 /5K +$C +0H#A(KA-A*s8W-!s8W-!s8?^e)F*gYGmktL:jE#]AO4eC?2sl,C=Fr1~> +, +1125 4765 59 47 /0D +$C +/fA4$TE!.:j:ducs8W-!s8W-!s8W-!s8W-!YP,S6V*Tg/bD(U.Ap1dlk(&#^$q:pOW&S<Uhu~> +, +1187 4765 5K , +1220 4765 0D , +1281 4738 53 74 /2W +$C +.D[AsDZh'_KH1WC*<HH/+N)'6OFMAAn#PpGs1R:dC)b'*fMKR%-!KV<_SXAk7^%/Xh2oL.5_/q@ +#W`G-%!08pdVi2YrRJT2p](9fs46"J6Xd$EXfDjY@q7A$$n,OUE:<~> +, +1362 4763 48 49 /4E +$C ++e0*'9_`6r:#XV_"O!ed6$V>jkWYWRs82iRDn"AILVk7I@?(jB!PGH;,Rcp:^1i">p"EUXO&q(0 +WsT7`0Mh~> +, +1412 4765 0D , +1473 4763 58 74 /3V +$C +--g96$(;'KK@A;uOFBLHqIFR@!\e^-4qN$9VuE:%^]401s8W,ts8RNIhqHn'XgPSQ(h%6"pP4Jh +is#mPs8W-!s44J4)F*dD%jb[Ni:$~> +, +1559 4739 56 73 /0A +$C +0H#B9QnN4+s8W-!s8V8CQOen!_qlG%7D'0jKH&BdDcb]fhr"<\p](9Ns8Ke5YN]nI\7oB'd&DQ@ +>Vg_4Y11Z82'Ie**&+&EJq*~> +, +1620 4763 52 49 /2V +$C ++U++g6m-H$K]n$]*<H\uDNfBa^72=,YM9*AIfKHJs8W&LYOB6S^Uh#29@^83L6ODnTnNn(#T`~> +, +1675 4763 40 49 /4G +$C +3f>g'n3Oo%%j7D36+e>sT3%oiqqqCITh04KCBXhpb6^M`XXX\d$A^)?6ToH"%MlEM^]+8HpKJ%X +L).gSG[X3`GQ~> +, +1720 4765 5K , +1753 4763 32 65 /3D +$C +.EZ`8VbXVnZpArR#H(r/s8W-!s8W-!q/FU2G7Ntp8,rVhs7Ni+LP*L[~> +, +1786 4765 5K , +1820 4763 2V , +1875 4765 0D , +1936 4765 5K , +1970 4765 0D , +2031 4738 2W , +2111 4765 82 47 /2O +$C +,6]M"h=[]<s0\utlW`*CC"M)"&:B+jl!8dG[nZ0pY@"\U^Zt+Lg:ut@XjZJ3Is^h[TCmWh[H[/3 +p?M[YK\^0XbG#hehs6@imtg$u2Z~> +, +2195 4765 5K , +2228 4763 3V , +2289 4738 2W , +2345 4763 5G , +2395 4763 3D , +2428 4763 4G , +719 4581 6D , +780 4581 4O , +838 4579 6P , +914 4581 6Z , +947 4580 4D , +1008 4581 6N , +1066 4579 3N , +1110 4580 4J , +1143 4581 28 69 /5T +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +1172 4579 5Z , +1226 4581 6N , +1311 4581 3S , +1371 4581 61 43 /0S +$C +2AdhJ:_A3Oo1(F=qu?]rs8W-!s8W-!s8W-!s8W-!s8W-!pO;Seqb;8cG?JF`D.WiQ<gR9_Y1)/_ +(f=s(~> +, +1439 4581 3U , +1499 4581 3W , +1551 4579 3Y , +1619 4607 2H , +1679 4585 46 48 /5H +$C +0W7)r4)i)l*&-_=DA[?1L)l$X3,TRP_hK1e%DrYmE5TO"&5\Vq#Uhu*$50#*"UHMK&6'>dT`k`h +$A*pH(9An~> +, +1731 4579 52 58 /1V +$C ++Dt22n;'$mK;'!rU-/Uq+pCM##-'`as8W-!s8W-!s8P8$eb5lLs8W-!qLA~> +, +1799 4581 48 60 /3M +$C +,D@S_MVl*@fa*!YQV41'l#aLB/sf5-db7nuBjmiqb8kc<I>?S9^>Ek<fR:IQmIpF)L'3#)Y!;sd +s8V/![Jg~> +, +1859 4579 2L , +1911 4581 0S , +1979 4579 52 62 /2N +$C ++rokY#W"`MK<U/9H6SI9Jd1>]"Q)ebODiWjSs/p#8cSY$^]4?6s0]W?Xo5C#XgD4-C[Eb.?%s!Y +(e]T6Yde+\@<)>Is8W'dK%Ji~> +, +2039 4579 43 45 /6F +$C +--Bs+k9*%T&:G,"nKk6P"+"kk2m9\ds6X:'>#;Fq8V0QRcT29O5bS`qZp[t!6#*3fV#UJ^D6DID +fJ$MB6gQEDC((Zh~> +, +2120 4580 4J , +2153 4580 3L , +2203 4580 56 73 /3H +$C ++LJp$5kmV@ADpOa$L)XK9;U)$FLka1QV41'l#aLB/sf3GX^kL=qgH2riP+2XpA99P(k'-9mIh'p +IJ`R7s8W-!s8K>)a7J5P5dOC>~> +, +2258 4579 6P , +2306 4579 6H , +2377 4580 4J , +2410 4580 6V , +2493 4579 5Z , +2576 4580 3L , +2626 4581 38 47 /6X +$C +0H#A^_V2d)s8W-!s8W-!hqnUF[?3rg<K18!0`S\NG9dORiPEE.~> +, +2666 4552 7K , +2721 4580 4D , +2781 4581 2X , +2870 4579 6P , +2918 4581 6N , +2976 4580 4J , +3008 4579 6H , +3051 4566 5C , +3104 4580 3L , +3189 4581 3J , +3249 4579 4X , +3309 4581 3F , +3432 4581 3K , +3492 4581 3M , +3552 4607 2H , +3612 4585 5H , +3672 4581 3K , +3732 4579 1X , +3784 4562 56 62 /1I +$C +3!q,3aUeFOs8W,sL(f.]^j&07KBS.Ncm,Lc$,2!#oUEfYVpfsAH@Pgis8W,r?GEo@[G>\?a(]_F +m=`,+Ph9rm$$Ii'Xr("?'E~> +, +3852 4581 3U , +3912 4579 4X , +3964 4581 59 42 /4Z +$C +-3a&@>IqP[\#uk!pK,sIp!p`u]g'*B]!niOVlf4`<qY"VFhKqV]\mHa#(<CEo`~> +, +4032 4579 4X , +4092 4581 3U , +4173 4580 4J , +4206 4581 4O , +4264 4580 3L , +4314 4580 4J , +4375 4581 5T , +4404 4580 3T , +4465 4579 6P , +4513 4581 6N , +4571 4580 4J , +4604 4581 5T , +4633 4581 6Z , +4666 4581 5T , +4695 4579 6P , +4743 4579 6H , +4813 4580 3L , +4891 4580 4J , +4924 4579 5Z , +4978 4553 6T , +719 4461 4F , +748 4459 6P , +796 4460 4S , +852 4459 6P , +900 4461 4F , +963 4460 6V , +1046 4461 5T , +1075 4461 6N , +1134 4460 3T , +1195 4459 5Z , +1249 4460 6V , +1333 4446 5C , +1390 4460 3L , +1440 4461 6N , +1498 4460 3T , +1592 4460 3L , +1642 4461 6N , +1740 4459 1G , +1800 4461 3J , +1860 4461 3J , +1920 4459 1G , +1972 4442 57 61 /3R +$C +1^ptq+W\=9g\1T\DsmM*laeE-h'_qgrTWY4])$<YS$/^Tl+6_/^72='lfl"W]"Y>NX/kOJ@=k"( +:Aq2C~> +, +2107 4459 1X , +2167 4461 3F , +2294 4459 6F , +2346 4459 1V , +2414 4461 3J , +2474 4461 3W , +2526 4461 56 43 /5T +$C +1Bn:Ro[EN6F_)fts8W-!s8W-!s8W-!s8W)srHDINZ.ep"nC!a.@>)."]2rE/0VA~> +, +2594 4442 50 62 /3L +$C +,QSa(*Ou4e)i(n?qnDP!s33hh+FG=,:SK,l5_4^;62F=JK7,(0FIu?9:]Jjms8W-I>F;YW2LG/r4Du~> +, +2790 4460 48 48 /6J +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +2840 4459 3N , +2884 4461 4O , +2974 4459 6P , +3022 4461 4F , +3051 4459 6P , +3099 4461 2X , +3187 4459 6P , +3235 4461 6N , +3293 4460 4J , +3358 4459 5Z , +3413 4461 6Z , +3478 4460 4J , +3511 4461 4O , +3569 4459 6P , +3649 4460 6J , +3699 4461 6X , +3739 4461 6X , +3778 4460 6J , +3828 4433 4H , +3917 4461 28 69 /2V +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +3946 4459 6H , +4020 4460 6J , +4102 4461 6D , +4163 4460 3H , +4251 4459 3N , +4295 4459 5Z , +4350 4461 2X , +4438 4461 2X , +4527 4460 6J , +4577 4461 6N , +4635 4460 3T , +4727 4460 6J , +4777 4459 3N , +4821 4459 3N , +4866 4459 6P , +4914 4433 6T , +4974 4460 4J , +5006 4483 6A , +719 4340 6J , +769 4340 5X , +824 4341 4F , +853 4339 6P , +926 4340 4J , +959 4339 5Z , +1046 4341 3K , +1106 4341 3M , +1166 4367 2H , +1226 4345 5H , +1286 4339 2L , +1338 4341 0S , +1406 4339 2N , +1459 4326 23 61 /4K +$C +0k&hmpMY93^MeSYh=p[<GW$"$s8V\cKH39Qs(g>C'E~> +, +1508 4341 3S , +1568 4341 0S , +1636 4341 3U , +1696 4341 3W , +1748 4339 3Y , +1816 4367 2H , +1876 4345 5H , +1928 4339 1V , +1996 4341 3M , +2056 4339 2L , +2108 4341 0S , +2176 4339 2N , +2236 4339 6F , +2314 4339 6H , +2356 4341 2V , +2385 4341 2X , +2474 4313 6T , +2534 4341 4F , +2563 4313 4H , +2644 4340 6J , +2694 4313 6T , +2754 4313 6T , +2814 4341 4F , +2843 4341 2V , +2872 4339 6P , +2920 4339 6H , +2987 4341 2V , +3016 4340 4J , +3074 4340 4J , +3107 4339 5Z , +3186 4339 6P , +3234 4340 6J , +3284 4339 3N , +3328 4341 4O , +3412 4339 6P , +3460 4341 4F , +3489 4339 6P , +3537 4341 2X , +3625 4339 6P , +3673 4341 6N , +3731 4340 4J , +3789 4339 5Z , +3843 4341 6Z , +3901 4340 4J , +3934 4341 4O , +3992 4339 6P , +4065 4340 6J , +4115 4341 6X , +4155 4341 6X , +4194 4340 6J , +4244 4313 4H , +4308 4340 0D , +719 4156 94 70 /1P +$C +-+(H9aM?$Ks!JC6&0BE>['/o/rr;p]s%i[Hne'd2rAXEL:&TRjIp_j*s62KBqG%"hPCNV/s)76& +S,3/^rkI^4s3bicoUGmZ-NF*;^]2`3p[l5fr@e%ts.nQP`A.BgrBKr1H;$>Ld350/qnN~> +, +814 4155 5Z , +868 4155 6H , +911 4156 4J , +973 4155 5Z , +1028 4157 6Z , +1090 4156 4J , +1123 4157 4O , +1181 4155 6P , +1258 4157 6Z , +1291 4155 5Z , +1346 4157 4F , +1375 4157 4F , +1404 4155 5Z , +1459 4156 6V , +1542 4157 2V , +1571 4157 6N , +1629 4128 7K , +1714 4157 6Z , +1747 4157 6X , +1787 4156 6J , +1837 4128 7K , +1892 4157 2X , +1981 4155 6P , +2029 4157 6N , +2087 4156 4J , +2149 4155 3N , +2193 4155 5Z , +2248 4157 6N , +2306 4155 6H , +2349 4157 2V , +2378 4155 6H , +2420 4156 4J , +2453 4155 6H , +2523 4155 5Z , +2578 4157 6Z , +2640 4157 6D , +2701 4156 3H , +2786 4155 3N , +2830 4155 5Z , +2885 4157 2X , +2973 4157 2X , +3062 4156 6J , +3112 4157 6N , +3170 4156 3T , +3259 4155 6H , +3301 4156 4J , +3334 4157 6X , +3373 4157 2V , +3403 4157 6N , +3461 4128 7K , +3516 4155 6H , +3588 4156 4J , +3621 4157 4O , +3679 4156 6J , +3729 4156 4J , +3791 4156 6J , +3841 4157 6X , +3881 4155 6P , +3959 4157 2X , +4047 4155 6P , +4095 4157 2X , +4183 4156 5X , +4239 4155 6P , +4287 4157 6X , +4326 4155 6H , +4398 4155 5Z , +4453 4157 6Z , +4516 4156 4J , +4549 4157 4O , +4607 4155 6P , +4685 4156 6J , +4735 4157 6X , +4775 4157 6X , +4814 4156 6J , +4864 4129 4H , +4951 4155 5Z , +5006 4157 6Z , +719 4035 6H , +761 4036 4J , +794 4037 6X , +833 4037 2V , +863 4037 6N , +921 4008 7K , +976 4035 6H , +1065 4035 1V , +1133 4037 3M , +1185 4025 63 5 /4P +$C +,D.rM~> +, +1253 4035 2L , +1313 4035 1X , +1365 4037 5T , +1433 4037 3F , +1493 4037 3W , +1553 4018 3L , +1614 4036 0D , +1703 4037 6D , +1764 4037 4O , +1822 4035 6P , +1916 4035 3N , +1960 4035 5Z , +2015 4037 2X , +2103 4037 2X , +2192 4035 6P , +2239 4037 6N , +2298 4036 4J , +2330 4035 6H , +2418 4036 3T , +2479 4035 6P , +2527 4035 6H , +2569 4035 3N , +2614 4037 6X , +2653 4037 2V , +2682 4036 5X , +2738 4035 6P , +2831 4036 4J , +2864 4037 4O , +2922 4035 6P , +3016 4036 6V , +3099 4037 2V , +3128 4036 3T , +3190 4008 7K , +3245 4035 6P , +3293 4036 4J , +3326 4035 6H , +3414 4036 5X , +3469 4035 6P , +3517 4037 2V , +3546 4037 6N , +3604 4008 7K , +3706 4035 3N , +3750 4037 6X , +3790 4035 6P , +3838 4036 6J , +3888 4036 4J , +3920 4035 6P , +3968 4036 3T , +4037 4036 0D , +4101 4035 1B , +4184 4035 5Z , +4239 4036 4J , +4318 4036 6J , +4368 4037 4F , +4397 4037 4F , +4472 4036 6V , +4555 4037 2V , +4584 4036 3T , +4646 4008 7K , +4701 4035 6P , +4749 4036 4J , +4782 4035 6H , +4870 4036 6J , +4920 4037 6N , +4978 4036 3T , +719 3917 2X , +807 3915 6P , +855 3917 6N , +913 3916 4D , +1007 3917 2V , +1036 3916 4J , +1069 3915 6P , +1117 3917 2X , +1205 3915 6H , +1281 3917 2V , +1310 3917 6N , +1402 3916 4J , +1435 3917 4O , +1493 3917 2V , +1522 3915 6H , +1598 3915 6P , +1646 3917 51 47 /6C +$C +0HhbLCT6iu*o7X>[[4%/>?fXbXeft#>>!^U>GYf:I8\U0m^,;BmF&STVWhAmPBq,U8\.XIjoKYt +a@E.\>`fE~> +, +1697 3916 6J , +1747 3917 2X , +1836 3889 6T , +1896 3917 4F , +1925 3915 6P , +2007 3916 6J , +2057 3917 6X , +2097 3915 6P , +2179 3917 6Z , +2212 3916 4D , +2273 3917 6N , +2331 3915 3N , +2375 3916 4J , +2408 3917 2V , +2437 3915 5Z , +2491 3917 6N , +2550 3916 6J , +2600 3917 4F , +2637 3916 0D , +2712 3917 6D , +2773 3917 4O , +2831 3915 6P , +2913 3917 4F , +2942 3916 6J , +2992 3915 6H , +3034 3916 4J , +3101 3917 4F , +3130 3917 2V , +3159 3917 6N , +3217 3915 6P , +3299 3915 6P , +3347 3917 6C , +3398 3915 6P , +3446 3915 3N , +3491 3916 4D , +3551 3916 4J , +3584 3915 6P , +3632 3915 6H , +3708 3916 4J , +3741 3917 4O , +3799 3915 6P , +3881 3916 6J , +3931 3917 6X , +3971 3917 6X , +4010 3916 6J , +4060 3889 4H , +4151 3915 5Z , +4206 3917 6Z , +4273 3915 3N , +4317 3915 5Z , +4372 3917 2X , +4460 3917 2X , +4549 3916 6J , +4599 3917 6N , +4657 3916 3T , +4718 3915 6H , +4794 3916 4D , +4854 3915 6H , +4897 3917 2V , +4926 3917 6N , +4984 3888 7K , +718 3797 3O , +778 3797 0S , +846 3797 3U , +906 3797 3W , +958 3795 3Y , +1026 3823 2H , +1086 3801 5H , +1138 3795 1V , +1206 3797 3M , +1266 3795 2L , +1318 3797 0S , +1386 3795 2N , +1446 3795 6F , +1507 3796 1Q , +1059 3599 37 47 /5D +$C +,!"-o&3:;X:c\mI3Y%6eNkbVos8W-!s7mWQ.GC4ts8W,o~> +, +1109 3601 39 48 /2H +$C +,D^FHWnljrAH,<!dckkb>qVI:V:+(%9,4PGXrHd%+)eXCiP*4sp@ogBSbhCHs8W+]`3%q~> +, +1151 3591 50 4 /4R +$C +-D741~> +, +1207 3599 36 36 /2N +$C +2=a!X&3::5)8i+u\d15c2l>"69iQ7BYQ+WMQrd(!Isn`6ln*r-(bf/,2o?#X&AS~> +, +1254 3599 36 36 /5T +$C +2=a"W6,F+fk3*@85mHR48\.X^X*T9Hrh'5j>Md-&]kqV_D(B=&@4MNg=K#XoK`~> +, +1300 3601 40 34 /3J +$C +,D2-]eSau;K>7Hds8W-!s8W-!s8RQ"Id8P.]s*_9K*bP8iM_JF~> +, +1352 3601 36 48 /1K +$C +,DL&R.)5f^s8W-!s8W+c%*EdY?iU-(]6H+df\tef~> +, +1399 3601 34 50 /3V +$C +,D/uSVd'3$s8W-!s8W,pY^b^4F?fg*p]~> +, +1445 3586 40 49 /5T +$C +-O`guOG+.]G5]2Es7/FF&3c]lMpJ%]ha'3L%JjS2dXUNIs%i[ps4ZB0f&(W(fP%P`_HhcsUd<Y6 +$nO)iE81~> +, +1554 3600 12 34 /4T +$X +++QT6J)L@rs7$'Xs6tNrJ)EQ,"onW'zzzzzz++QSkJ)L@rs7$'Xs6tNr5JS@k~> +, +1588 3616 40 15 /4T +$C +,DNTgP_T5!e/L<=~> +, +1686 3599 37 36 /3X +$C +.-JIa#'_7d7&V15)k58oU_s!npj`<nmJH;E%;^^q0uG,!pbEX?s8UYi,s^'+9j"?&8cuj~> +, +1734 3601 38 34 /0E +$C +,DL+/.)5f^s8W,upV$#LmtSX^fP1'1?n2EsTo-Gh+Og~> +, +1782 3601 0E , +1830 3599 3X , +1876 3586 40 48 /4X +$C +,D1;cUc7]<mea`e^Uiik+7>?iV#KUC\khaXqkX5U5IsYYQeSA1l$^-MD?u$E3d4[~> +, +1943 3591 13 58 /4V +$X +s7$'`s7"qHhuM[8huM[8huM[8huM[8huM[8huM[8huM[8huM[8huM[8huM[8huM[8huM[8huM[8 +huM[8huM[8huM[8huM[8huM[8huM[8huM[8huM[8huM[8huM[8huM[8huM[8huNfHs7lW`~> +, +1980 3591 13 58 /1Z +$X +J,''=J+s"'!&ss<!&ss<!&ss<!&ss<!&ss<!&ss<!&ss<!&ss<!&ss<!&ss<!&ss<!&ss<!&ss< +!&ss<!&ss<!&ss<!&ss<!&ss<!&ss<!&ss<!&ss<!&ss<!&ss<!&ss<!&ss<!'#K's7h*=~> +, +2070 3599 36 36 /5T +$C +2=a"W6,F+fk3*@85mHR48\.X^X*T9Hrh'5j>Md-&]kqV_D(B=&@4MNg=K#XoK`~> +, +2120 3601 1K , +2224 3591 16 59 /3Z +$X +!"T&o!.P"J!:U$I!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O"2G#S#Cq:(rW)ot +rr<R["+UKh!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!T4":!;HPD!'^H*!!3~> +, +1050 3421 46 55 /4H +$C +,T/uDJ,B-CrpTl:qu6?icN^lXC1RYKs6p!Es8DuqbVd-abae^jpV61sqqq/Hs6f~> +, +1110 3420 45 60 /1N +$C +1hNb=T_EOKmN1gALF!Hs]J0+thm\Yr[sbaQp\s'YaQNT.hsKmEs1Q&ChgPBGqepD][aTuICiJmc +>EAaWs1\O1XGm9KaLOU@e,~> +, +1150 3420 36 40 /4N +$C ++c[*p%Z%XZ"s/D=R!^iiq#CB.rph,-:''\uHn]aQ4r`7#DmsW]gUGqlgY5QB8f6Nc@6a~> +, +1173 3399 47 81 /1R +$C +,F0@*^"KOO2\uA*hgYJ%hu!0Frql`QJ,S:)^OQ"X][RlR%Dh"eT4@ops7bEa^C?WTf%<a<%r=4;YQ~> +, +1211 3420 19 58 /4R +$C +0^([YmirkB_mCB;nb:r8hnS'`h>c=/O8HFqp,g09LPDT(3cK`KpN@5~> +, +1234 3420 39 40 /1V +$C +/r2S:=F5hknGJ5h\deQkh;>I*rSQK3h=lEV\$/8LnU:b)rO;1Mn(W>9mIG##*U_\K4hfdjltgXq +G7SnPK2CLq~> +, +1270 3420 4N , +1329 3420 57 40 /0Y +$C +/r7G64J%56H[(#-r'/9CIHWBZiO?8QnFu[jmf3=A^$bpghnSUHrpBaE&bZeY^\?Qt\(c9.]5ILm +I%%4oL[NpOlog,@h7P\$+(JejL>D8;4l*V]3,0EmGQ~> +, +1383 3420 4N , +1423 3420 1V , +1467 3420 39 40 /2B +$C +3?%/eK;T6(LC\T>TugNt]na&Tp?XrVn+PXUrO_Ikhm`!6h;A2*IIHpds7^d\mruYYHQ1i#qs`S' +Tn!~> +, +1512 3420 33 59 /0I +$C +4A^UUF@F"/+Q%*252U^rn$i=DDZ=YPqfhdarnmG;p`_rip>536&)1;rf4(o\57MEda5;CDn,N,b +J4OrFi:$~> +, +1541 3420 38 40 /5H +$C +1QJjIT&J%?\9klR\L;m=2n&1a^&HjD\*a'2rS<OLp@l<$[f5a_s)._k\,3YhiNTc-@>lrS+bU[~> +, +1584 3420 29 40 /0S +$C +0![qCn,*(\rVQQlhgYomrn/Cfg[FTJafi,Y.h?'AmIAr?L,ZjWpM;Z)J,~> +, +1619 3399 1R , +1657 3420 0S , +1681 3420 5H , +1724 3420 0Y , +1778 3420 4N , +1809 3410 22 21 /2D +$C +5Ao<ODg1$P]75:efJkh~> +, +1857 3420 54 40 /4V +$C +1c),J$m=fPg2oc=,I`?[9Kr(iXmPAaDngbpqg3hlfc@R%lttXon%8#^p\iirhgN+dn$`2l-G+d% +mJCee[qcGcbUd+&heg'2m6htn~> +, +1915 3420 4R , +1929 3420 1N , +1969 3399 46 61 /1Z +$C +,R&c)#`Cri&2<;jh'VdMDb^8hm^li\$!hDED(?#@$oFZ4PSg>QWD_<L?M<hF#m_OV6s^@bDb\Yu +\#02orVbXQqtKh.a*"k.X)_-n(eLu/_Li0~> +, +2009 3420 4N , +2049 3420 23 53 /4Z +$C +2c)ZdYkO<igYmp3j7iNPhnT'_s*jr;%@;^b@?[V`s1\O1nF53j~> +, +2079 3399 1R , +2117 3420 0S , +2141 3420 5H , +2184 3420 0Y , +2238 3420 4N , +2269 3410 2D , +2317 3420 4Z , +2336 3420 4N , +2367 3420 45 40 /2F +$C +1M4*^T_Ee!mdf>2/3?STHp%\oGhYjh^X^'UNqU6\s*LD,J%+l@e`@m"gB=XZ%;ho]O1X+m9sB7H~> +, +2415 3420 4Z , +2446 3399 1R , +2484 3420 0S , +2507 3420 5H , +2551 3420 0Y , +2605 3420 4N , +1067 3356 26 24 /6B +$C +3KcF;f)N/Xs',Ns^]4=<s7X5-rr~> +, +1112 3331 1K , +1158 3331 0E , +1206 3329 3X , +1249 3331 47 34 /2P +$C +-DAQ$BJ/`LWOFQnn,NFfs8W-!s8W-!s8W-!s8W+Cs4VqhG)IB;"@b@Z-5tEl@_5?&1`0$~> +, +1301 3329 37 36 /6N +$C +,8>kC#TOuNNe,%MC)mErU`Vne%51B>^Z77HITRDh[f9C[V/Nf-Ya'qUY[E`RL(kIQ~> +, +1410 3330 12 11 /3L +$X +++QT6J)L@rs7$'Xs6tNrJ)EQ,"on~> +, +1441 3331 2P , +1489 3329 42 50 /6D +$C +.QJ=]7h?ec$/H3<cc?Z+oFPr:pnm]@I9rQFpTOVs>Q:h/Xfg*r4'pWHL(`hi-.mph>VKE4s8W+] +`3%q~> +, +1542 3329 3X , +1590 3331 0E , +1686 3352 36 3 /2J +$C +-D@Es~> +, +1734 3331 0E , +1781 3329 6N , +1831 3331 34 48 /7N +$C +,D/uSVd'3$s8W-!s8W-!s8W-!s362r~> +, +1879 3331 3V , +1925 3329 6N , +1976 3331 1K , +2069 3316 40 49 /2V +$C +-O`guOG+.]G5]2Es7/FF&3c]lMpJ%]ha'3L%JjS2dXUNIs%i[ps4ZB0f&(W(fP%P`_HhcsUd<Y6 +$nO)iE81~> +, +2118 3331 0E , +2166 3329 5T , +2214 3329 5T , +2258 3331 44 33 /5X +$C +,7:'em_5:%hNdi3IJ%aTotL(%]ds)OYG\MsV15;ujD_pX0hjU*~> +, +2309 3329 6N , +2406 3352 2J , +2449 3329 6D , +2501 3329 42 50 /2R +$C +25q]L+O>lM4%+.9"<3iW6,&P2-9=r#YG_>Kl2Ue`qcj*ShqHghBX.9ZlnFc6_(N]G_Vp3hs8W,u +8VpZe~> +, +2598 3331 32 49 /7J +$C +-D8o[eaIDcmHca5NOsB$gUD(V]6</FG4"%nDYpnk^R4Zl?aR$(.h+";.g?Wk:r7r$~> +, +2651 3356 6B , +2699 3319 16 24 /2Z +$X +?i]Zrp]1'hquHWpIK4itIfOtK5Cbu65JSB!+5e71+7Kg9&,Zt9#Q=u-#QFo+~> +, +1067 3266 6B , +1112 3241 1K , +1158 3241 0E , +1206 3239 3X , +1249 3241 2P , +1301 3239 6N , +1410 3240 3L , +1442 3241 44 33 /5R +$C +-SqIbli$KPbWdnks1N`mgAh+nrO(tchS!+mhQL#@s66H]?Me&#hMLihS>VUJ?~> +, +1499 3266 6B , +1547 3229 2Z , +1067 3176 6B , +1112 3151 1K , +1158 3151 0E , +1206 3149 3X , +1249 3151 2P , +1301 3149 6N , +1410 3150 3L , +1443 3149 5D , +1493 3149 6N , +1540 3151 40 33 /3R +$C +,D23^<Bg[^5V$PQ8fL'#9%m=o[["5%V/7_s=K>fXU>=78&n04+PB<:ih'VAF8[orME.@c~> +, +1587 3149 5D , +1643 3176 6B , +1691 3139 2Z , +1050 2971 4H , +1110 2970 1N , +1150 2970 4N , +1173 2949 1R , +1211 2970 4R , +1234 2970 1V , +1270 2970 4N , +1321 2970 5H , +1365 2970 1V , +1401 2970 1N , +1461 2949 43 61 /1G +$C +3E[N/qg\Wq^[M1#q1HUJ4G:N>K6@n=\(g<<qffdRqsNqIh>b4Wrr2[\If&JmmbbMJTD&/jnAEn* +(h'JM;"&U`%7>bE~> +, +1501 2970 5H , +1545 2970 29 40 /5D +$C +4=hUskWFdKOC@?382o;MIR!l4^Ycg"rNfT&p@!FDh[T;.@>,+uW%_$~> +, +1569 2970 42 60 /1I +$C +5)FV6;q_c>:@^=SF;sHLpt[Uk]&2ajokf2i_B\A_+o:Zb[;YI+qg35MqgF7P@$]I?Hag\C(E\.A +rV-?JAH7h_S=nXp~> +, +1633 2970 0Y , +1687 2970 4N , +1726 2970 1V , +1771 2970 2B , +1807 2970 33 40 /2D +$C +-l*(/#EaGmK+C]1Dn#2M^\]$jUptJB0*ssE((,j_i3fc)0Al`?F`2(H$n,To-t,@~> +, +1067 2906 6B , +1105 2881 2P , +1157 2879 6N , +1204 2881 3J , +1251 2879 40 35 /6F +$C +25q!0+D6C(7-5PP2`=T_+NNA8hnT3ks8W-!s8W-!s8U1"*<Oj-~> +, +1297 2879 6D , +1347 2879 6F , +1395 2879 37 47 /2F +$C +,!"-o&3:;X:c\mI3Y%6eNkbVos8W-!s7mWQ.GC4ts8W,o~> +, +1443 2879 2F , +1494 2879 5T , +1540 2881 3J , +1650 2880 3L , +1688 2881 1K , +1735 2881 3V , +1783 2881 7N , +1829 2879 6N , +1926 2902 2J , +1971 2879 2F , +2021 2879 6N , +2068 2881 3R , +2115 2879 2F , +2211 2881 38 45 /5F +$C +,D1;cVsjZcs8V/<s8W+[r5=*bs0]ct^]4?6r^RDtDu~> +, +2263 2881 3V , +2311 2881 7N , +2357 2879 6N , +2454 2902 2J , +2497 2881 2P , +2549 2879 6N , +2596 2881 3J , +2643 2879 6F , +2754 2880 3L , +2792 2881 1K , +2839 2881 3V , +2887 2881 7N , +2933 2879 6N , +2994 2880 3L , +3025 2881 2P , +3083 2906 6B , +3131 2869 2Z , +1067 2816 6B , +1105 2791 2P , +1157 2789 6N , +1204 2791 3J , +1251 2789 6F , +1297 2789 6D , +1347 2789 6F , +1395 2789 2F , +1443 2789 2F , +1494 2789 5T , +1540 2791 3J , +1650 2790 3L , +1685 2789 6N , +1733 2789 2R , +1783 2791 3V , +1827 2789 2F , +1926 2812 2J , +1971 2789 2F , +2021 2789 6N , +2068 2791 3R , +2115 2789 2F , +2211 2791 38 45 /3T +$C +,DN5/p_Wu1s8W+H4HY-ns7-,VO8o7R\<Hpls8W-!s!*8pDZ~> +, +2261 2789 2R , +2311 2791 3V , +2355 2789 2F , +2454 2812 2J , +2497 2791 2P , +2549 2789 6N , +2596 2791 3J , +2643 2789 6F , +2754 2790 3L , +2789 2789 6N , +2837 2789 2R , +2887 2791 3V , +2931 2789 2F , +2994 2790 3L , +3025 2791 2P , +3083 2816 6B , +3131 2779 2Z , +1067 2726 6B , +1105 2701 2P , +1157 2699 6N , +1204 2701 3J , +1251 2699 6F , +1297 2699 6D , +1347 2699 6F , +1395 2699 2F , +1443 2699 2F , +1494 2699 5T , +1540 2701 3J , +1650 2700 3L , +1683 2701 41 48 /7B +$C +/e1\fX1A"X^]4?6s8W-!s8W-!s*iRKd`afM@4oG(Ft9u:Kua5ns7mX,h>~> +, +1733 2699 6N , +1783 2701 7N , +1826 2686 41 49 /2X +$C +,CpR%4TGH]s8SMji.L5W&Jp)`&3%s%^BqPOp@R87rr/Pis',@!f4f^;8!<AY?*KQR,6eHR0jTJE +_*@~> +, +1926 2722 2J , +1971 2699 2F , +2021 2699 6N , +2068 2701 3R , +2115 2699 2F , +2212 2701 40 45 /5H +$C +,D227'3B8&#CldRs8W-!s8W-!q#APKs8W-!s8W-!s8O\W:'n<"e,~> +, +2261 2699 6N , +2311 2701 7N , +2354 2686 2X , +2454 2722 2J , +2497 2701 2P , +2549 2699 6N , +2596 2701 3J , +2643 2699 6F , +2754 2700 3L , +2787 2701 7B , +2837 2699 6N , +2887 2701 7N , +2930 2686 2X , +2994 2700 3L , +3025 2701 2P , +3083 2726 6B , +3131 2689 2Z , +1067 2546 6B , +1105 2521 2P , +1157 2519 6N , +1204 2521 3J , +1251 2519 6F , +1362 2520 3L , +1400 2521 1K , +1447 2521 3V , +1495 2521 7N , +1541 2519 6N , +1602 2520 3L , +1633 2521 2P , +1691 2546 6B , +1739 2509 2Z , +1067 2456 6B , +1122 2430 3L , +1160 2431 1K , +1207 2431 3V , +1255 2431 7N , +1301 2429 6N , +1362 2430 3L , +1393 2431 2P , +1494 2429 3X , +1541 2429 2R , +1589 2429 2R , +1687 2429 2N , +1734 2429 5T , +1777 2431 2P , +1825 2431 2P , +1878 2429 3X , +1924 2431 3J , +1973 2429 2R , +2070 2452 2J , +2119 2431 7N , +2166 2429 3X , +2209 2429 6D , +2261 2429 6N , +2311 2431 7N , +2408 2429 32 48 /4N +$C +3q@5]28Tl45)C7CJdp]NDbm8&qS1qRXECPo&qX%YGsGgE.Nu\8Ln,._Ju,JS5_A8#qcir%I_s`Q +@*]0MTnm!W$kU2~> +, +2453 2429 6N , +2500 2431 3J , +2549 2429 2R , +2646 2452 2J , +2695 2429 2N , +2742 2429 5T , +2785 2431 2P , +2833 2431 2P , +2886 2429 3X , +2932 2431 3J , +2981 2429 2R , +3088 2421 3Z , +3128 2429 31 36 /6Z +$C +3qGU^*sao\+%0adJd1_6_LC<fqr51`YY'$@RKF*e;%+T[7Nu7jO<Cp&?gkG8$Y3E!M';T&0LG~> +, +3173 2429 6N , +3220 2431 3J , +3269 2429 2R , +3367 2429 2N , +3409 2431 2P , +3461 2429 2R , +3511 2429 2N , +3555 2431 7B , +3606 2429 3X , +3652 2431 3J , +3752 2429 6Z , +3797 2429 6N , +3844 2431 3J , +3893 2429 2R , +3952 2421 16 59 /4F +$X +n,W@drW%EJ%fcib#Clo,"+UK("+UK("+UK("+UK("+UK("+UK("+UK("+UK("2G#S!T3tW!.Ouu +!<3)h!T4'q"+UK("+UK("+UK("+UK("+UK("+UK("+UK("+UK("+UK(#Cm$Z*ru9?quHKl5QC~> +, +3995 2456 6B , +4043 2419 2Z , +1067 2366 6B , +1122 2340 3L , +1160 2341 1K , +1207 2341 3V , +1255 2341 7N , +1301 2339 6N , +1362 2340 3L , +1393 2341 2P , +1494 2339 3X , +1541 2339 2R , +1589 2339 2R , +1687 2339 2N , +1734 2339 5T , +1777 2341 2P , +1825 2341 2P , +1878 2339 3X , +1924 2341 3J , +1973 2339 2R , +2070 2362 2J , +2119 2341 7N , +2166 2339 3X , +2209 2339 6D , +2261 2339 6N , +2311 2341 7N , +2403 2341 3T , +2452 2341 3R , +2503 2341 3V , +2547 2339 2F , +2646 2362 2J , +2695 2339 2N , +2742 2339 5T , +2785 2341 2P , +2833 2341 2P , +2886 2339 3X , +2932 2341 3J , +2981 2339 2R , +3088 2331 3Z , +3128 2339 6Z , +3173 2339 6N , +3220 2341 3J , +3269 2339 2R , +3367 2339 2N , +3409 2341 2P , +3461 2339 2R , +3511 2339 2N , +3555 2341 7B , +3606 2339 3X , +3652 2341 3J , +3749 2339 6N , +3796 2341 3R , +3847 2341 3V , +3891 2339 2F , +3952 2331 4F , +3995 2366 6B , +4043 2329 2Z , +1067 2276 6B , +1105 2251 2P , +1157 2249 6N , +1204 2251 3J , +1251 2249 6F , +1362 2250 3L , +1397 2249 6N , +1445 2249 2R , +1495 2251 3V , +1539 2249 2F , +1602 2250 3L , +1633 2251 2P , +1691 2276 6B , +1739 2239 2Z , +1067 2186 6B , +1122 2160 3L , +1157 2159 6N , +1205 2159 2R , +1255 2161 3V , +1299 2159 2F , +1362 2160 3L , +1393 2161 2P , +1494 2159 3X , +1541 2159 2R , +1589 2159 2R , +1687 2159 2N , +1734 2159 5T , +1777 2161 2P , +1825 2161 2P , +1878 2159 3X , +1924 2161 3J , +1973 2159 2R , +2070 2182 2J , +2119 2161 7N , +2166 2159 3X , +2209 2159 6D , +2261 2159 6N , +2311 2161 7N , +2405 2159 38 48 /5J +$C +,!".8&9Jm93][N`F:`>ADNf16PB>>F<RlTNs8W-!IcM$nrr1L+D1>urYdPB:LY+:RL*:NQG[V!~> +, +2451 2159 6F , +2499 2159 2F , +2555 2186 6B , +2603 2149 2Z , +1067 2006 6B , +1105 1981 2P , +1157 1979 6N , +1204 1981 3J , +1251 1979 6F , +1362 1980 3L , +1395 1981 7B , +1445 1979 6N , +1495 1981 7N , +1538 1966 2X , +1602 1980 3L , +1633 1981 2P , +1691 2006 6B , +1739 1969 2Z , +1067 1916 6B , +1122 1890 3L , +1155 1891 7B , +1205 1889 6N , +1255 1891 7N , +1298 1876 2X , +1362 1890 3L , +1393 1891 2P , +1494 1889 3X , +1541 1889 2R , +1589 1889 2R , +1687 1889 2N , +1734 1889 5T , +1777 1891 2P , +1825 1891 2P , +1878 1889 3X , +1924 1891 3J , +1973 1889 2R , +2070 1912 2J , +2119 1891 7N , +2166 1889 3X , +2209 1889 6D , +2261 1889 6N , +2311 1891 7N , +2409 1891 30 45 /2N +$C +,DKblLO]@(s8W-!s8W-!s8W,iC(2,4~> +, +2452 1891 3J , +2501 1889 2R , +2549 1889 6N , +2596 1891 3R , +2694 1912 2J , +2739 1889 6F , +2788 1891 3J , +2837 1889 2R , +2885 1889 6N , +2934 1891 0E , +2983 1891 7N , +3031 1891 3V , +3076 1891 3J , +3125 1889 6N , +3225 1890 30 50 /5N +$C +-OC&>FA&/-)l2>^PBFQ'H<:&.Du])%s8W-!s8Q='hR:26[(gH.C[/eD=CE]pC)Bb~> +, +3275 1916 6B , +3323 1879 2Z , +1067 1736 6B , +1106 1696 2X , +1158 1709 3X , +1207 1709 36 36 /2N +$C +2=a!X&3::5)8i+u\d15c2l>"69iQ7BYQ+WMQrd(!Isn`6ln*r-(bf/,2o?#X&AS~> +, +1253 1711 2H , +1362 1710 3L , +1400 1711 1K , +1447 1711 3V , +1495 1711 7N , +1541 1709 6N , +1650 1710 3L , +1685 1709 6N , +1733 1709 2R , +1783 1711 3V , +1827 1709 2F , +1926 1732 2J , +1976 1709 6Z , +2023 1711 3V , +2069 1709 2R , +2117 1709 6N , +2215 1711 7N , +2261 1709 6N , +2312 1711 1K , +2355 1709 2F , +2454 1732 2J , +2503 1711 3V , +2548 1711 3J , +2658 1710 3L , +2689 1711 2P , +2737 1709 6D , +2790 1709 3X , +2838 1711 0E , +2891 1699 17 45 /7H +$C +,P:`FDsuHX\+f:ghg]j2s"c,7[/Xn7'E~> +, +2979 1709 6F , +3026 1696 2X , +3077 1709 2R , +3126 1709 3X , +3171 1709 2F , +3221 1709 6N , +3275 1736 6B , +3323 1699 2Z , +1067 1646 6B , +1106 1606 2X , +1158 1619 3X , +1207 1619 2N , +1253 1621 2H , +1362 1620 3L , +1395 1621 7B , +1445 1619 6N , +1495 1621 7N , +1538 1606 2X , +1638 1642 2J , +1688 1619 6Z , +1735 1621 3V , +1781 1619 2R , +1829 1619 6N , +1926 1621 0E , +1975 1621 3V , +2021 1606 2V , +2067 1621 7B , +2115 1619 2F , +2214 1642 2J , +2263 1621 3V , +2308 1621 3J , +2418 1620 3L , +2449 1621 2P , +2497 1619 6D , +2550 1619 3X , +2598 1621 0E , +2651 1646 6B , +2699 1609 2Z , +1050 1441 4H , +1110 1440 1N , +1150 1440 36 40 /1P +$C ++c[*p%Z%XZ"s/D=R!^iiq#CB.rph,-:''\uHn]aQ4r`7#DmsW]gUGqlgY5QB8f6Nc@6a~> +, +1173 1419 1R , +1211 1440 4R , +1234 1440 1V , +1270 1440 1P , +1321 1440 38 40 /0Q +$C +1QJjIT&J%?\9klR\L;m=2n&1a^&HjD\*a'2rS<OLp@l<$[f5a_s)._k\,3YhiNTc-@>lrS+bU[~> +, +1365 1440 1V , +1401 1440 1N , +1461 1419 1G , +1501 1440 0Q , +1545 1440 5D , +1569 1440 1I , +1633 1440 0I , +1670 1440 2B , +1714 1440 4Z , +1741 1440 4Z , +1760 1440 39 40 /5N +$C +3Xu]^%Z%b<"Pk3X]f0!bIJrp7s*aq8hr"Fj^Yca!mr`NMXh(sF_[0GDC()K~> +, +1803 1440 1V , +1840 1440 2D , +1891 1440 0Q , +1934 1440 1V , +1971 1440 1N , +2039 1440 4Z , +2057 1440 1P , +2088 1440 45 40 /5D +$C +1M4*^T_Ee!mdf>2/3?STHp%\oGhYjh^X^'UNqU6\s*LD,J%+l@e`@m"gB=XZ%;ho]O1X+m9sB7H~> +, +2136 1440 4Z , +2175 1440 1P , +2214 1440 1V , +2259 1440 4Z , +2285 1440 0S , +2308 1419 45 61 /5L +$C +1akWRjEM[Jheu6_iS2&bpM\g`^A[4ukW`qQVsa+1g[O*trnDX8n+Q4Y7m?q3qu=/)rql]^s8BY2 +pH<G'r&26KiSOP"3'0Q2D?~> +, +2376 1440 0I , +2406 1440 5N , +2441 1440 5D , +2509 1433 24 67 /5P +$C +,^#sJH<urAV>YkDs7QEls82Qjg]$*ErU'K2h7mj`mG$I/gU?K7~> +, +2520 1419 1R , +2550 1440 5N , +2593 1440 0S , +2629 1419 1R , +2667 1440 4R , +2689 1440 18 59 /5B +$C +02Qn?_oTlE%Ih9Im!le-^Ycg'^]/NXIfJm6rVqA^rpO%8JjX(##6~> +, +2703 1440 1P , +2762 1440 1V , +2799 1440 0Q , +2842 1440 0Y , +2897 1440 1P , +2928 1433 28 66 /5R +$C +5L[)Zh7J$CH[E5Mg\1T\]C5WHs0r%.s0)IQI_V`P?#$sRTE~> +, +1067 1376 6B , +1105 1349 6D , +1155 1349 6F , +1203 1349 2F , +1251 1349 2F , +1302 1349 5T , +1348 1351 3J , +1458 1350 3L , +1489 1349 6D , +1545 1351 30 49 /3N +$C +,DKbll$ra5s8W-!s8W-!s8W+]mYJQmnAbcdaTi'$~> +, +1638 1372 2J , +1683 1349 2F , +1733 1349 6N , +1780 1351 3R , +1827 1349 2F , +1928 1349 4N , +1973 1349 6N , +2020 1351 3J , +2069 1349 2R , +2166 1372 2J , +2215 1349 2N , +2262 1349 5T , +2305 1351 2P , +2353 1351 2P , +2406 1349 3X , +2452 1351 3J , +2501 1349 2R , +2608 1341 3Z , +2648 1349 6Z , +2693 1349 6N , +2740 1351 3J , +2789 1349 2R , +2887 1349 2N , +2929 1351 2P , +2981 1349 2R , +3031 1349 2N , +3075 1351 7B , +3126 1349 3X , +3172 1351 3J , +3272 1349 6Z , +3317 1349 6N , +3364 1351 3J , +3413 1349 2R , +3472 1341 4F , +3515 1376 6B , +3563 1339 2Z , +1067 1286 6B , +1105 1259 6D , +1155 1259 6F , +1203 1259 2F , +1251 1259 2F , +1302 1259 5T , +1348 1261 3J , +1458 1260 3L , +1489 1259 6D , +1542 1261 7J , +1638 1282 2J , +1683 1259 2F , +1733 1259 6N , +1780 1261 3R , +1827 1259 2F , +1924 1259 40 48 /5T +$C +,<=+5+Q3PnF*%[,Utl.mUtmBt8\I9*:Ku<I\,T8(s8Qm6osObaCO4^h95AjX_H,*h_H%'XL*8o\ +_*@~> +, +1970 1246 2X , +2021 1259 6N , +2068 1261 3J , +2166 1282 2J , +2215 1259 2N , +2262 1259 36 36 /2V +$C +2=a"W6,F+fk3*@85mHR48\.X^X*T9Hrh'5j>Md-&]kqV_D(B=&@4MNg=K#XoK`~> +, +2305 1261 2P , +2353 1261 2P , +2406 1259 3X , +2452 1261 3J , +2501 1259 2R , +2608 1251 3Z , +2648 1259 6Z , +2693 1259 6N , +2740 1261 3J , +2789 1259 2R , +2887 1259 2N , +2929 1261 2P , +2981 1259 2R , +3031 1259 2N , +3075 1261 7B , +3126 1259 3X , +3172 1261 3J , +3270 1259 2V , +3314 1246 2X , +3365 1259 6N , +3412 1261 3J , +3472 1251 4F , +3515 1286 6B , +3563 1249 2Z , +1067 1196 6B , +1111 1171 7N , +1158 1169 3X , +1201 1169 6D , +1253 1169 6N , +1303 1171 7N , +1410 1170 3L , +1447 1171 7N , +1542 1192 2J , +1587 1169 2F , +1637 1169 6N , +1684 1171 3R , +1731 1169 2F , +1840 1161 3Z , +1874 1171 43 45 /0A +$C +/f6IWCM@FbY?ri19E3H:rk=`Np%A930<a^+J,3MZf@'Np^;$kJp&0;g?VB_]qHcBnjO?3>(T#m~> +, +1926 1169 3X , +1969 1171 2P , +2021 1169 6N , +2082 1170 12 34 /4T +$X +++QT6J)L@rs7$'Xs6tNrJ)EQ,"onW'zzzzzz++QSkJ)L@rs7$'Xs6tNr5JS@k~> +, +2176 1161 4F , +2219 1196 6B , +2267 1159 2Z , +1067 1016 6B , +1109 989 6N , +1156 991 3J , +1203 989 2F , +1254 991 0E , +1300 976 4X , +1410 990 3L , +1445 989 6N , +1499 1016 6B , +1547 979 2Z , +1067 926 6B , +1105 899 6D , +1159 901 3V , +1204 901 3J , +1253 899 2R , +1362 900 3L , +1397 899 6N , +1494 904 36 39 /1A +$C +#sr&e:mD1i-p^0,&tkp%#Uhu8:m<)r"UHSYiJ.h$@D`T10]@cq3+:Qr*&-?,$p/F\E7=~> +, +1539 901 43 45 /5T +$C +,D-4u.GIie,6.LHp"0-qoY8iS9<RSpCaHHp%N%jD?*;'3G5HYGg[%,]Dn"KgnDA/nfR::M(c2An +G,b~> +, +1589 899 6N , +1636 886 4X , +1686 922 2J , +1737 894 30 61 /1E +$C +#ub+_9@EIHX/c#&Q_iqm?C02b?VAi>]e<%,qQ?m`H<ur7okF~> +, +1780 901 3J , +1830 904 36 39 /2L +$C +,H;7a_m^%6@D`QlG2\2b3+9]7)mJ:V$oh\M8e=gNKG5Q.64+9#JqOje5sbni:kGN0@9?>~> +, +1936 891 3Z , +1976 899 6Z , +2021 899 6N , +2068 901 3J , +2117 899 2R , +2215 899 2N , +2257 901 2P , +2309 899 2R , +2359 899 2N , +2403 901 7B , +2454 899 3X , +2500 901 3J , +2598 899 2V , +2642 886 2X , +2693 899 6N , +2740 901 3J , +2800 891 4F , +2843 926 6B , +2891 889 2Z , +1067 746 6B , +1106 706 2X , +1158 719 3X , +1207 719 2N , +1253 721 2H , +1362 720 3L , +1393 719 6D , +1449 721 3N , +1554 720 3L , +1585 719 6D , +1638 721 7J , +1746 720 3L , +1783 721 7N , +1890 720 3L , +1925 719 6N , +2022 742 2J , +2072 719 6Z , +2119 721 3V , +2165 719 2R , +2213 719 6N , +2311 721 7N , +2357 719 6N , +2408 721 1K , +2451 719 2F , +2550 742 2J , +2599 721 3V , +2644 721 3J , +2754 720 3L , +2786 721 44 33 /5R +$C +-SqIbli$KPbWdnks1N`mgAh+nrO(tchS!+mhQL#@s66H]?Me&#hMLihS>VUJ?~> +, +2843 746 6B , +2891 709 2Z , +cleartomark end end pagesave restore showpage +%%PageTrailer +%%Page: 5 5 +%%BeginPageSetup +GS_pswrite_2_0_1001 begin +612 792 /letter setpagesize +/pagesave save store 100 dict begin +0.1 0.1 scale +%%EndPageSetup +gsave mark +K +Q q +0 0 6120 7920 re +Y +2796 7462 32 7 /6A +$C +0H"*/rO`~> +, +K +2854 7438 47 71 /3M +$C ++bZ9b&;.g[6b3C/4U1*mheu6;Dr-tcl0E<?(B4?kqYKH%VRoJ1G*^#'_(8Wma':L>$\fH%$]k>f +s82iW2';kune/#~> +, +2929 7462 6A , +Q q +1735.35 5405 2289.31 1555 re +Y +q[2289.31 0 0 1555 1735.35 5405]concat +310 210 8[310 0 0 -210 0 210]@X false 3 +colorimage +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$ +^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qdb$^qg!Ms8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+eR@4*Ts8W-!!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!5"YeR@0J2 +s8W-!s8N'!])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!5&:2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!rr<&2R@0J2R@4*Ts8W-!!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViCs8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W+eR@4*Ts8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8SLTRK*<es8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0HC!5"YeR@0J2 +s8W-!s8N'!])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!5&:2s8W-!h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;+KeR@0J2s8W,Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCR@0KCs8W-!s4uMeh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2R/d6!R@0J2R@4*Ts8W-!!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViCs8W-!s8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0J2R@4*Ts4uMeh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;+KeRK*<es8W,Th;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0HC!5"YeR@0J2 +s8W-!s8N'!])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!5&:2s8W-!h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;+KeR@0J2s8W,Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCR@0KCs8W-!s4uMeh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2R/d6!R@0J2R@4*Ts8W-!!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViCs8W-!s8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0J2R@4*Ts4uMeh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;+KeRK*<es8W,Th;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0HC!5"YeR@0J2 +s8W-!s8N'!])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!5&:2s8W-!h;-oCh;-oCh;-oCzzzzzzzz!8ZJeh;-oCh;+KeR@0J2s8W,Th;-oCh;-oCzzzzzz +zzz!!!#Th;-oCh;-oCR@0KCs8W-!s4uMeh;-oCh;-oCh#IET!!!#Th;-oCh;-oCh;-oCh;-oCh#IET +!!!#Th;-oCh;-oCh;-nTR@0J2R/d6!R@0J2R@4*Ts8W-!!!'V2!4r42])ViC!!'V2!5&:2s8W-! +s8W-!s8W-!s8W-!!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'Y2s8W-!rr<&2!!'V2!4r42])ViC!!'V2!4r42])ViC!!'Y2s8W-!s8W-!s8W*!!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViCs8W-!s8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh#IETh;-oCh;&&2!8ZJe!!!#Th;-oCh;-oCR@0J2R@4*Ts4uMeh;-oCh;&&2!8ZJe +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;&&2!8ZJeh;-oCh;+KeRK*<es8W,Th;-oCh;-oC +h;-lezzh;-oCh;-oCh;-oCzz!8ZJeh;-oCh;-oCh3j\!R@0HC!5"YeR@0J2s8W-!s8N'!])ViC!!'V2 +!4r42])ViC!!'V2!5&:2s8W-!!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2 +!4r42])ViC!!'V2!4r42]Dqp2s8W*!!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42]Dqp2s8W*! +!5&:2s8W-!!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2 +!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2 +!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2 +!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2 +!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2 +!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2 +!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2 +!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2 +!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2 +!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!5&:2s8W-!h;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-le!!(j2h;-oC!!!#Th;&&2!8ZJeh;-oCh;+KeR@0J2s8W,T +h;-oCh;-oC!!!#Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC!!!#Th;-oCh;-oCR@0KC +s8W-!s4uMeh;-oCh;-oCh;-oCz!!(j2h;-oCh;-oCh;&&2zh;-oCh;-oCh;-oCh;-nTR@0J2R/d6! +R@0J2R@4*Ts8W-!!!'V2!4r42])ViC!!'V2!4r42])ViCs8W-!s8N'!])ViC!!'V2!4r42]Dqp2 +s8W-!s8N'!])ViC!!'Y2s8N'!])ViCs8W-!s8N'!])ViC!!'Y2s8W-!rr<&2!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'Y2s8W-!rr<&2s8W-!s8N'!])ViC!!'Y2s8N'!])ViCs8W-!s8N'!])ViC +!!'Y2s8W-!rr<&2!!'Y2s8W-!rr<&2!!'V2!4r42])ViC!!'V2!5&:2s8W-!s8W-!s8N'!])ViC +!!'Y2s8W-!s8W-!!!'V2!4r42])ViCs8W*!!4r42]Dqp2!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViCs8W-!s8Up2h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh#IETh;-oCh;&&2!8ZJe +!!!#Th;-oCh;-oCR@0J2R@4*Ts4uMeh;-oCh;&&2!8ZJeh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;&&2!8ZJeh;-oCh;+KeRK*<es8W,Th;-oCh;-oCh;-oCh;-oCh#IET!!!#Th;-oCh#IET +!!!#Th;-oCh;-oCh;-oCh;-oCh3j\!R@0HC!5"YeR@0J2s8W-!s8N'!])ViC!!'V2!4r42])ViC +!!'V2!5&:2s8W-!!!'V2!4r42])ViCs8W*!!4r42]Dqp2s8W*!!4r42]Dqp2s8W*!!5&:2rr<&2 +!!'V2!4r42]Dqp2s8W*!!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42]Dqp2s8W-!s8N'!])ViC +!!'V2!4r42]Dqp2s8W*!!4r42]Dqp2!!'Y2s8W-!rr<&2!!'Y2s8N'!]Dqp2s8W*!!5&:2rr<&2 +!!'V2!4r42]Dqp2!!'V2!4r42])ViC!!'V2!5&:2rr<&2!!'V2!5&:2rr<&2!!'V2!5&:2s8W-! +!!'Y2s8N'!])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!5&:2s8W-!h;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-le!!(j2h;-oC!!!#Th;&&2!8ZJeh;-oCh;+KeR@0J2s8W,Th;-oCh;-oC +!!!#Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC!!!#Th;-oCh;-oCR@0KCs8W-!s4uMe +h;-oCh;-oCh;-oCh;-oCh;&&2zz!!(j2h;-oCh;-oCh;-oCh;-oCh;-nTR@0J2R/d6!R@0J2R@4*T +s8W-!!!'V2!4r42])ViC!!'V2!4r42])ViCs8W-!s8N'!])ViC!!'V2!5&:2s8W-!s8W-!s8W-! +rr<&2!!'V2!5&:2s8W-!!!'V2!4r42])ViC!!'Y2s8W-!rr<&2!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'Y2s8W-!rr<&2s8W*!!4r42])ViC!!'Y2s8N'!])ViC!!'V2!4r42]Dqp2s8W*!!4r42 +]Dqp2!!'Y2s8W-!rr<&2s8W-!s8N'!])ViC!!'Y2s8W-!s8W-!s8W*!!4r42])ViCs8W-!s8W-! +s8W-!s8W*!!4r42])ViCs8W*!!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViCs8W-!s8Up2h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh#IETh;-oCh;&&2!8ZJe!!!#Th;-oC +h;-oCR@0J2R@4*Ts4uMeh;-oCh;&&2!8ZJeh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;&&2 +!8ZJeh;-oCh;+KeRK*<es8W,Th;-oCh;-oCh;-oCh;-oCh;-oCzzzh;-oCh;-oCh;-oCh;-oCh;-oC +h3j\!R@0HC!5"YeR@0J2s8W-!s8N'!])ViC!!'V2!4r42])ViC!!'V2!5&:2s8W-!!!'V2!4r42 +])ViCs8W*!!4r42])ViC!!'V2!4r42])ViCs8W-!s8N'!])ViC!!'V2!4r42]Dqp2s8W*!!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42]Dqp2s8W*!!5&:2s8W-!!!'V2!4r42]Dqp2!!'V2!4r42 +])ViC!!'Y2s8W-!rr<&2!!'Y2s8N'!]Dqp2s8W*!!5&:2s8W-!!!'V2!4r42])ViCs8W-!s8W-! +s8W-!!!'V2!5&:2rr<&2!!'V2!4r42])ViC!!'V2!5&:2rr<&2!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!5&:2s8W-!h;-oCh;-oCh;-oCzzzz!!(j2h;-oC!!!#Th;&&2!8ZJe +h;-oCh;+KeR@0J2s8W,Th;-oCh;-oC!!!#Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +!!!#Th;-oCh;-oCR@0KCs8W-!s4uMeh;-oCh;-oCh;-oCh;-oCh;&&2zz!!(j2h;-oCh;-oCh;-oC +h;-oCh;-nTR@0J2R/d6!R@0J2R@4*Ts8W-!!!'V2!4r42])ViC!!'V2!4r42])ViCs8W-!s8N'! +])ViC!!'V2!5&:2s8W-!!!'V2!5&:2rr<&2!!'Y2s8N'!])ViCs8W-!s8N'!])ViC!!'Y2s8W-! +rr<&2!!'V2!4r42])ViC!!'V2!4r42])ViC!!'Y2s8W-!rr<&2s8W-!s8N'!])ViC!!'Y2s8N'! +])ViC!!'V2!4r42])ViCs8W*!!5&:2s8W-!!!'V2!5&:2s8W-!!!'Y2s8W-!rr<&2!!'Y2s8N'! +])ViC!!'Y2s8N'!])ViC!!'Y2s8N'!])ViCs8W*!!4r42])ViCs8W*!!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViCs8W-!s8Up2h;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;&&2!8ZJe!!!#Th;-oCh;-oCR@0J2R@4*Ts4uMeh;-oCh;&&2zzzzzzzzz!8ZJeh;-oC +h;+KeRK*<es8W,Th;-oCh;-oCh;-oCh;&&2zh;-oCh;-oCh;-oCz!!(j2h;-oCh;-oCh;-oCh3j\! +R@0HC!5"YeR@0J2s8W-!s8N'!])ViC!!'V2!4r42])ViC!!'V2!5&:2s8W-!!!'V2!4r42])ViC +!!'Y2s8W-!s8W-!!!'V2!4r42]Dqp2!!'V2!5&:2s8W-!!!'V2!4r42])ViCs8W-!s8W-!rr<&2 +!!'V2!4r42])ViC!!'V2!4r42]Dqp2s8W-!s8W-!rr<&2!!'V2!4r42]Dqp2!!'V2!4r42])ViC +!!'V2!4r42]Dqp2s8W*!!4r42])ViCs8W-!s8N'!]Dqp2s8W*!!4r42])ViCs8W-!s8W-!s8W-! +!!'V2!4r42]Dqp2s8W-!s8N'!])ViC!!'V2!5&:2rr<&2!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!5&:2s8W-!h;-oCh;-oCh;-oCzzzzzz!!!#Th;&&2!8ZJeh;-oCh;+Ke +R@0J2s8W,Th;-oCh;-oCzzzzzzzzz!!!#Th;-oCh;-oCR@0KCs8W-!s4uMeh;-oCh;-oCh#IETz +!!(j2h;-oCh;-oCh;&&2z!!!#Th;-oCh;-oCh;-nTR@0J2R/d6!R@0J2R@4*Ts8W-!!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViCs8W-!s8Up2 +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC!!!#Th;-oCh;-oCR@0J2R@4*T +s4uMeh;-oCh;&&2zzzzzzzzz!8ZJeh;-oCh;+KeRK*<es8W,Th;-oCh;-oCh;-lez!8ZJeh;-oC +h;-oCh;-oCh;-lez!8ZJeh;-oCh;-oCh3j\!R@0HC!5"YeR@0J2s8W-!s8N'!])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42 +])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!5&:2s8W-!h;-oCh;-oC +h;-oCzzzzzzzz!8ZJeh;-oCh;+KeR@0J2s8W,Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0KCs8W-!s4uMeh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-nTR@0J2R/d6!R@0J2R@4*Ts8W-!!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViCs8W-!s8Up2h;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0J2R@4*Ts4uMe +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;+KeRK*<e +s8W,Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\! +R@0HC!5"YeR@0J2s8W-!s8N'!])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!5&:2s8W-!h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;+KeR@0J2s8W,Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0KCs8W-!s4uMeh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-nTR@0J2R/d6!R@0J2R@4*Ts8W-!!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViCs8W-!s8Up2h;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0J2R@4*Ts4uMe +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;+KeRK*<e +s8W,Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\! +R@0HC!5"YeR@0J2s8W-!s8N'!])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!5&:2s8W-!R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2s8W+eR@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0KCs8W-!s-]:CR@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R/d6!R@0J2R@4*Ts8W-!!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViCs8W+eR@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@4*Ts-]:C +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2RK*<e +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0HC!5"YeR@0J2s8W-!s8N'!])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViC +!!'V2!4r42])ViC!!'V2!4r42])ViC!!'V2!4r42])ViCR@0J2R@4*Ts8W-!R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2s8W-!s8SLTRK*<es8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-!R@0K!h;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-nTR@0J2R@0J2s8W-!s8SLTRGH]Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0J2R@4*Ts8W-!R@0K!h;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-nTR@0J2R@0J2s8W-!s8SLTRGH]Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0J2R@4*Ts8W-!R@0K!h;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-nTR@0J2R@0J2s8W-!s8SLTRGH]Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0J2R@4*Ts8W-!R@0K!h;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-lez!8ZJeh;-oCh;&&2zz!!(j2h;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh#IETh;-oCh;-oCh;-oCz!!(j2h;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;&&2z!!!#Th;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-nTR@0J2R@0J2s8W-!s8SLT +RGH]Th;-oCh;-oCh;-oCh;-oCh;&&2zzz!8ZJeh;-oCh;-oCh#IET!!!#Th;-oCh;-oCh;-oCh;&&2z +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;&&2zzz!8ZJeh;-oCh;-oCh;-oCh;-le!!(j2h;-oCh;-oCh;&&2zh;-oCh;-oCh;-oCz +!!(j2h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;&&2!8ZJeh;-oCh;&&2!8ZJeh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;&&2!8ZJeh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0J2R@4*Ts8W-!R@0K! +h;-oCh;-oCh;-oCh;-oCh;-oCz!!(j2h;-oCh;-oCh;-oCh#IETzz!8ZJeh;-oCh;-oCh;-oCz!!(j2 +h;-oCh;-oCh;-oCh#IETz!!(j2h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCz +!!(j2h;-oCh;-oCh;-oCh;-oCh;-lezzh;-oCh;&&2zz!!(j2h;-oCh;-oCh;&&2zh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC!!!#Th;-oC +h;-oC!!!#Th;-oCh;-oCzz!8ZJeh;-oCh;-oCh;-oC!!!#Th;-oCh;-oCz!!(j2h#IETh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-nTR@0J2R@0J2s8W-!s8SLTRGH]Th;-oCh;-oCh;-oCh;-oCh;&&2z +h;-oCh;-oCh;-oCh;-oCh;-oCh#IET!!!#Th;-oCh;-oCh;-oCh;&&2zh;-oCh;-oCh;-oC!!!#T +h;-oCh#IETh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;&&2zh;-oCh;-oC +h;-oCh;-oCh;&&2!8ZJeh;-le!!(j2h;-oCh;-oCh;&&2zh;-oCh;-oCh#IETzzzh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;&&2!8ZJeh;-oCh;&&2!8ZJe +h;-lez!8ZJez!!(j2h;-oCh;-oCh;&&2!8ZJeh;-oCh;&&2z!!!#Th;&&2!8ZJeh;-oCh;-oCh;-oC +h;-oCh;-oCh3j\!R@0J2R@4*Ts8W-!R@0K!h;-oCh;-oCh;-oCh;-oCh;-oCz!!(j2h;-oCh;-oC +h;-oCh;-oCh;-lez!8ZJeh;-oCh;-oCh;-oCz!!(j2h;-oCh;-lez!8ZJeh;-le!!(j2h;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCzzzh;-oCh;-oCh#IET!!!#Th;-oCh#IETh;-oC +h;-oCh;-oCz!!(j2h;-oCh;-oCh;&&2zh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCzzz!!!#Th;-oCh#IETh;-oCh;&&2zh;-oCh;-oCh;-oC!!!#T +h;-oCh;-oCz!!(j2h;-oCz!!(j2h;-oCh;-oCh;-oCh;-oCh;-nTR@0J2R@0J2s8W-!s8SLTRGH]T +h;-oCh;-oCh;-oCh;-oCh;&&2zh;-oCh;-oCh;-oCh;-oCh;-oCh#IET!!!#Th;-oCh;-oCh;-oC +h;&&2zh;-oCh;-oCh#IET!!!#Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;&&2zh;-oCh;-oCh;-oCh;-lez!8ZJeh;-le!!(j2h;-oCh;-oCh;&&2zh;-oCh;-oC +h;-oCz!!(j2h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;&&2!8ZJeh;-oCh;&&2!8ZJeh;-le!!(j2h;-oCh;-oCh;-oCh;-oCh;-oCh;&&2!8ZJe +h;-oCh;&&2zh;-oCh;&&2zh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0J2R@4*Ts8W-!R@0K!h;-oC +h;-oCh;-oCh;-oCh;-oCz!!(j2h;-oCh;-oCh;-oCh;-oCh;-lez!8ZJeh;-oCh;-oCh;-oCz!!(j2 +h;-oCh;-lez!8ZJeh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCz +!!(j2h;-oCh;-oCh;-oCh#IET!!!#Th;-oCh#IETh;-oCh;-oCh;-oCz!!(j2h;-oCh;-oCh;&&2z +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +!!!#Th;-oCh;-oC!!!#Th;-oCh#IETh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC!!!#Th;-oCh;-oCz +!!(j2h;-oCz!!(j2h;-oCh;-oCh;-oCh;-oCh;-nTR@0J2R@0J2s8W-!s8SLTRGH]Th;-oCh;-oC +h;-oCh;-oCh;&&2zh;-oCh;-oCh;-oCh;-oCh;-oCh#IET!!!#Th;-oCh;-oCh;-oCh;&&2zh;-oC +h;-oCh;-oC!!!#Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;&&2zh;-oCh;-oCh;-oCh;-oCh;&&2!8ZJez!!(j2h;-oCh;-oCh;&&2zh;-oCh;-oCh;-oCz!!(j2 +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;&&2 +!8ZJeh;-oCh;&&2!8ZJeh;-lez!8ZJeh;-le!!(j2h;-oCh;-oCh;&&2!8ZJeh;-oCh;&&2zh;-oC +h;&&2!8ZJeh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0J2R@4*Ts8W-!R@0K!h;-oCh;-oCh;-oC +h;-oCh;-oCz!!(j2h;-oCh;-oCh;-oCh;-oCh;-lez!8ZJeh;-oCh;-oCh;-oCz!!(j2h;-oCh;-oC +h;-oCh#IETz!!(j2h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCzzz!!!#Th;-oC +h;-oCh;-le!!(j2h#IETh;-oCh;-oCh;-oCz!!(j2h;-oCh;-oCh;-oCh#IETz!!(j2h;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC!!!#Th;-oCh;-oC!!!#T +h;-oCh;-oCzz!8ZJeh;-oCh;-oCh;-oC!!!#Th;-oCh;-oCzzzh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-nTR@0J2R@0J2s8W-!s8SLTRGH]Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;&&2z +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0J2R@4*Ts8W-!R@0K!h;-oCh;-oC +h;-oCh;-oCh#IETzzzz!!(j2h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh#IETzzzz!!(j2 +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh#IETzzzz!!(j2h;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2R@0J2s8W-!s8SLTRGH]Th;-oCh;-oCh;-oCh;-lezzzzzh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-lezzzzzh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-lezzzzzh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\! +R@0J2R@4*Ts8W-!R@0K!h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-nTR@0J2R@0J2s8W-!s8SLTRGH]Th;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\! +R@0J2R@4*Ts8W-!R@0K!h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-nTR@0J2R@0J2s8W-!s8SLTRK*<es8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +R@0J2R@4*Ts8W-!h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;+KeR@0J2s8W-!s8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +R@0J2R@4*Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0K!h;+KeR@0J2s8W-!s8W-!s4uMeh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0J2R@4*Ts4uMeh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0J2R@2meh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;+KeRGH]Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oes8W-!s4uMe +R@0J2R@4*Ts8W-!s8W,Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;+KeR@0J2s8W,Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;+KeR@0J2h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0K!h;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh>dNTs8W,Th;+KeR@0J2s8W-!s8W-!s4uMeh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0J2R@4*Ts4uMeh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0J2R@2meh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;+KeRGH]Th;-oCh;-oCh#IETh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oes8W-!s4uMe +R@0J2R@4*Ts8W-!s8W,Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;+KeR@0J2s8W,Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;+KeR@0J2h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0K!h;-oCh;-oC +h;-le!!(j2h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh>dNTs8W,Th;+KeR@0J2s8W-!s8W-!s4uMeh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0J2R@4*Ts4uMeh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0J2R@2meh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;+KeRGH]Th;-oCh;-oCh#IETh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oes8W-!s4uMe +R@0J2R@4*Ts8W-!s8W,Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh#IET!!!#Th;-oCh;-oC +h;-oCh;+KeR@0J2s8W,Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;+KeR@0J2h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0K!h;-oCh;-oC +h;-le!!(j2h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh>dNTs8W,Th;+KeR@0J2s8W-!s8W-!s4uMeh;-oCh;-oCh;-oC +h;-le!!(j2h;-oCh;-le!!(j2h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-lez!8ZJeh;-oCh;-oCh;-oCR@0J2R@4*Ts4uMeh;-oCh;-oCh;-oCh;-le +!!(j2h;-oC!!!#Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0J2R@2meh;-oCh;-oCh;-oCh#IET!!!#T +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;+KeRGH]Th;-oCh;-oCh#IETh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oes8W-!s4uMeR@0J2 +R@4*Ts8W-!s8W,Th;-oCh;-oCh;-oCh;-oCh#IETh;-oCh;-oCh;-oCh;-oCh;-oCh#IETz!!(j2 +h;-oCh;-le!!(j2h#IET!!!#Th;-oCh;-oCh;-lezz!!!#Th;-oCh;-oCh;-oCh;+KeR@0J2s8W,T +h;-oCh;-oCh;-oCh;&&2!8ZJeh;-oCh;&&2zh;-oCh;&&2!8ZJe!!!#Th;-oCh;-oCh;-oCh;&&2z +!!!#Th;-oCh#IET!!!#Th;&&2zh;-oCh;-oCh;-oCh;-oCh;+KeR@0J2h;-oCh;-oCh;-oCh;-lez +!8ZJeh;-oCh;-oCh;-oCzzzh;-oCh;&&2!8ZJe!!!#Th;&&2!8ZJeh;-oCh;-oCh#IETz!!(j2h;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +R@0K!h;-oCh;-oCh;-le!!(j2h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh>dNTs8W,Th;+KeR@0J2s8W-!s8W-!s4uMe +h;-oCh;-oCh;-oCh;-lez!8ZJeh;-oCh;-oCh;-oCz!!(j2h#IET!!!#Th;-oCh#IET!!!#Th;&&2z +h;-oCh;&&2zh;-lez!8ZJeh;-oCh;-oCh;-oCR@0J2R@4*Ts4uMeh;-oCh;-oCh;-oC!!!#Th;-oC +h;-oCz!!(j2h;-oCz!!(j2h#IETh;-oCh;-oCh#IET!!!#Th;&&2zh;-lezzzz!8ZJeh;-oCh;-oC +h;-oCR@0J2R@2meh;-oCh;-oCh;-oCh#IETh;-le!!(j2h;-oCh;-oCh;-oCh;-oCh;-lez!8ZJezzz +h;-le!!(j2h;-oCh;-le!!(j2h;-oC!!!#Th;-oCh;-oCz!!(j2h;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;+KeRGH]Th;-oCh;-oCh#IETh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oe +s8W-!s4uMeR@0J2R@4*Ts8W-!s8W,Th;-oCh;-oCh;-oCh;-oCh;-oCh;-lez!8ZJeh;-oCh;&&2zzz +!8ZJeh;-le!!(j2h;-oCz!!(j2h#IET!!!#Th;-oCh#IET!!!#Th;-oCh;-oCh;-oCh;+KeR@0J2 +s8W,Th;-oCh;-oCh;-oCh;&&2!8ZJeh;-oCh;&&2zh;-oCh;&&2!8ZJeh;-lez!8ZJezzzz!!(j2 +h#IET!!!#Th;-oCh#IET!!!#Th;-oCh;-oCh;-oCh;+KeR@0J2h;-oCh;-oCh;-oCh;-le!!(j2 +h#IET!!!#Th;-oCh;-oCzzz!!!#Th;&&2zz!!(j2h#IETh;-oCh;&&2zzz!8ZJeh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0K!h;-oCh;-oC +h;-le!!(j2h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh>dNTs8W,Th;+KeR@0J2s8W-!s8W-!s4uMeh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCz!!(j2h;-oC!!!#Th;-oCh;-oCh;-oCh;-oCh#IETh;-oCh;&&2zh;-lez!8ZJe +h;-lez!8ZJeh;-oCh;-oCh;-oCR@0J2R@4*Ts4uMeh;-oCh;-oCh;-oC!!!#Th;-oCh;-oCz!!(j2 +h;-oC!!!#Th;-oCh#IET!!!#Th;&&2zh;-oCh;-oCh;-oCh;-lez!8ZJeh;-lez!8ZJeh;-oCh;-oC +h;-oCR@0J2R@2meh;-oCh;-oCh;-oCh#IETh;-lez!8ZJeh;-lez!8ZJeh;-lez!8ZJezzzh;-le +!!(j2h;-oC!!!#Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;+KeRGH]Th;-oCh;-oCh#IETh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oe +s8W-!s4uMeR@0J2R@4*Ts8W-!s8W,Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh#IETh;-oC +h;&&2!8ZJeh;-oCh;-oCh;-oCh;-le!!(j2h;-oCz!!(j2h#IET!!!#Th;-oCh#IET!!!#Th;-oC +h;-oCh;-oCh;+KeR@0J2s8W,Th;-oCh;-oCh;-oCh;&&2!8ZJeh;-oCh;&&2zh;-oCh;&&2!8ZJe +h;-lez!8ZJez!!(j2h;-oCh;-oCh;-oCh#IET!!!#Th;-oCh#IET!!!#Th;-oCh;-oCh;-oCh;+Ke +R@0J2h;-oCh;-oCh;-oCh;-le!!(j2h;-oCz!!(j2h#IET!!!#Th;-oCh#IET!!!#Th;&&2zz!!(j2 +h#IETh;-oCh;&&2!8ZJeh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0K!h;-oCh;-oCh;-le!!(j2h;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h>dNTs8W,Th;+KeR@0J2s8W-!s8W-!s4uMeh;-oCh;-oCh;-oCh;-le!!(j2h;-oCh;-le!!(j2 +h;-oCz!!(j2h;-oC!!!#Th;-oCh#IETh;-oCh;&&2zh;-oCh;&&2zh;-lez!8ZJeh;-oCh;-oCh;-oC +R@0J2R@4*Ts4uMeh;-oCh;-oCh;-oCh;-le!!(j2h;-oC!!!#Th;-oCh;-oC!!!#Th;-oCh#IET +h;-oCh;-oCh#IET!!!#Th;-oCh#IETh;-lez!8ZJeh;-lez!8ZJeh;-oCh;-oCh;-oCR@0J2R@2me +h;-oCh;-oCh;-oCh#IETh;-oCh;&&2zh;-lez!8ZJezz!8ZJezzzh;-le!!(j2h;-oCh;-le!!(j2 +h;-oC!!!#Th;-oCh;-oCz!!(j2h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;+KeRGH]Th;-oCh;-oCh#IETh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oes8W-!s4uMeR@0J2R@4*Ts8W-! +s8W,Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;+KeR@0J2 +s8W,Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;&&2!8ZJeh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;+KeR@0J2 +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0K!h;-oCh;-oCh;-le!!(j2h;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh>dNTs8W,Th;+KeR@0J2s8W-!s8W-!s4uMeh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0J2R@4*Ts4uMeh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oC!!!#Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0J2R@2meh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;+KeRGH]Th;-oCh;-oCh#IETh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oes8W-!s4uMeR@0J2R@4*Ts8W-! +s8W,Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;+KeR@0J2 +s8W,Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;+KeR@0J2 +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0K!h;-oCh;-oCh;-le!!(j2h;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh>dNTs8W,Th;+KeR@0J2s8W-!s8W-!s4uMeh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0J2R@4*Ts4uMeh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0J2R@2meh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;+KeRGH]Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oes8W-!s4uMeR@0J2R@4*Ts8W-! +s8W,Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;+KeR@0J2 +s8W,Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;+KeR@0J2 +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0K!h;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh>dNTs8W,Th;+KeR@0J2s8W-!s8W-!s-]:CR@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@4*Ts-]:CR@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@2meh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;+KeRK*<es8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s4uMeR@0J2R@4*Ts8W-! +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;+KeR@0J2s8W-!s8Up2h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCR@0J2R@4*Ts8W-! +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=XK!R@0J2s8W-!s8Up2h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;,]T]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e +]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\e]=Y\eR@0J2R@4*Ts8W-! +h;-nTR@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0KCs8Up2h;-oC +]=YZT!!*'!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0K!h;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh>dNTh;-oCh;,]T])Vg2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RGH]Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oes8Up2h;-oC +]=YZT!!*'!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0K!h;-oCh;-oCh;-oCh;-oCh>dNT +s8W,Th;-oCh;-oCh;-oCh;-oCh>dNTh;-oCh;,]T])Vg2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RGH]Th;-oCh;-oCh;-oCs8W-!s8W-!s-]:Ch;-oCh;-oCh;-oCh;-oes8Up2h;-oC +]=YZT!!*'!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0K!h;-oCh;-oCh;-oCh;/,2s8W-! +s8W+eR@2meh;-oCh;-oCh;-oCh>dNTh;-oCh;,]T])Vg2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RGH]Th;-oCh;-oCh>dNTs8W-!s8Up2h3j\!R@0K!h;-oCh;-oCh;-oes8Up2h;-oC +]=YZT!!*'!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0K!h;-oCh;-oCh;-oes8W-!s4uMe +h;-nTR@0J2R@0J2h;-oCh;-oCh>dNTh;-oCh;,]T])Vg2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RGH]Th;-oCh;-oCh>dNTs8W,Th;-oCh3j\!R@0J2R@2meh;-oCh;-oes8Up2h;-oC +]=YZT!!*'!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0K!h;-oCh;-oCs8W-!s8Up2h;-oC +h;-oCh;+KeR@0J2h;-oCh;-oCh>dNTh;-oCh;,]T])Vg2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RGH]Th;-oes8W-!s4uMeh;-oCh;-oCh;-oCh;-nTR@0J2RGH]Th;-oes8Up2h;-oC +]=YZT!!*'!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0K!h;-oCh>dNTs8W,Th;-oCh;-oC +h;-oCh;-oCh3j\!R@0K!h;-oCh>dNTh;-oCh;,]T])Vg2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RGH]Ts8W-!s8W-!s4uMeh;-oCh;-oCh;-oCh;-oCh;+KeR@0J2h;-oes8Up2h;-oC +]=YZT!!*'!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0K!h;/,2s8W-!h;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCR@0J2R@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RGH]Ts8W-!s8Up2h;-oCh;-oCh;-oCh;-oCh;-oCh;+KeR@0J2R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8W-!s4uMeh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eR@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RGH]Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oes8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0K!h;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh>dNTh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<es8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh3j\!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8Up2h;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<eR@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8SLTR@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RGH]Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oes8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTRK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RK*<es8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0KCs8W-!s4uMeh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-nTR@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RGH]Ts8W-!s8Up2h;-oCh;-oCh;-oCh;-oCh;-oCh;+KeR@0J2R@0KCs8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0K!h;/,2s8W-!h;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCR@0J2R@0J2RK*<eh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RGH]Ts8W-!s8W-!s4uMeh;-oCh;-oCh;-oCh;-oCh;+KeR@0J2h;-oes8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0K!h;-oCh>dNTs8W,Th;-oCh;-oC +h;-oCh;-oCh3j\!R@0K!h;-oCh>dNTh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RGH]Th;-oes8W-!s4uMeh;-oCh;-oCh;-oCh;-nTR@0J2RGH]Th;-oes8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0K!h;-oCh;-oCs8W-!s8Up2h;-oC +h;-oCh;+KeR@0J2h;-oCh;-oCh>dNTh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RGH]Th;-oCh;-oCh>dNTs8W,Th;-oCh3j\!R@0J2R@2meh;-oCh;-oes8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0K!h;-oCh;-oCh;-oes8W-!s4uMe +h;-nTR@0J2R@0J2h;-oCh;-oCh>dNTh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RGH]Th;-oCh;-oCh>dNTs8W-!s8Up2h3j\!R@0K!h;-oCh;-oCh;-oes8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0K!h;-oCh;-oCh;-oes8W-!s8W-! +h;-nTR@0J2RGH]Th;-oCh;-oCh>dNTh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RGH]Th;-oCh;-oCh;-oCs8W-!s8W-!s-]:Ch;-oCh;-oCh;-oCh;-oes8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!R@0K!h;-oCh;-oCh;-oCh;-oCh>dNT +s8W,Th;-oCh;-oCh;-oCh;-oCh>dNTh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-nTR@0J2RGH]Th;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oes8Up2h;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h3j\!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!h;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts8W-! +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +]=Y]Ts8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8SLTR@0J2s8W-!s8Up2h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oC +h;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;-oCh;,]T]Dqp2s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!R@0J2R@4*Ts-]:C +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2 +R@0J2R@0J2R@0J2R@0J2R@0J2R@0J2~> +Q +K +Q q +0 0 6120 7920 re +Y +1493 5235 49 62 /6X +$C +-D4_^OB`4hR_Saos6fpemJm3l)7.)jN"5=VpAb0Is7-j%]Dqp2n)1^[VI8//~> +, +K +1543 5234 24 65 /2J +$C +4Qnrems,k-_gFD\gj\_kn,DeS^\tqAJ*&8jfR,F.LPNN"+9#4.KAC_Je27~> +, +1560 5210 53 68 /7C +$C +3e`/.5X9nJ#sdGN"s+=nODdkEo\]WIpKat,V/:(GFK@=$KV=-b0PNh1K*tYdX]iF*hF%YU3'c\\ +kCa[oS'uJKmJG@^p\t0\s*aq%qB4h-g[1ll,PY]#JVH-m6%o~> +, +1613 5234 46 44 /2N +$C +1M&Y@cue7*hX>FS..0MEkSp1'h7%<@%u0F6^MU[=rVa@rqes)rhm\#pIG`q1pO@\]^A$JmINR=Y +_sSAur',O`iPFF~> +, +1663 5234 34 44 /7G +$C +32hc\n)+*$rSRS2rVM(o#`mj>me_FIGAInZ<l8*gFrp.mgMS*W%cP<[S,~> +, +1698 5234 34 44 /2R +$C +1DUN]6.<oF*?]8dLIo3!dsOA%s1dIIOJ4"U,1U;G_2!!IiJ29a_sQ2s^$aYPDf6*PWsqE2%h'j?TE~> +, +1756 5235 40 63 /3Q +$C +,DN)aHZudD.uh/apMSg!G4"&?]6C`&G4"&?]6h9ZqgRG[^AQ5in(P8JBjn-JQ5Eg@X&.?#"pt~> +, +1801 5235 14 10 /2V +$X +"5jFZ#P\Q%#Q+i)#Q+]%"8i/o~> +, +1839 5235 69 63 /3S +$C +4;nNFDsW2YJqF17M8@o\qeLMen%Wf>^M.&arni3R]'F:>qq3]r<n@9IJ*lsqp=B6?IJq^pp=B6? +IHu=ZGJChpHh[~> +, +1935 5234 88 64 /6S +$C +2&R2pn*0<?rgs/Xs0_DPhZ"fA^93s+s1ducIfI1[<r:M;qtKJ*n,E4PYO8tthnAojm]XA(fC)f0 +IfJeR]g':"[p.b'If%Ttm[q7C5J-d+s5156lMp:C>ThfEi.u1e+omVXBTr_Z~> +, +2020 5234 66 44 /3W +$C +2j3BXZ;hLf*Ogh!Idd#JjDH(/hsfNJGMV$R^\>4ls1`Jjs7Yo.qsFE$pV$oohm,HL8%[XPhV3M6 +hmW7YH["6!IbhKVc*sqSC;[r5@I-.4_\cln[b,hDmDHG\LCXT?TP=~> +, +2113 5234 36 44 /3N +$C +0cI&%*mf#t%egJYG9W(>gHiOmgY9X5ms"0VDnCJcqql>YGPcaahsKmEs*&\dqqg3.^\6EjYepXL +_eom9\,~> +, +2153 5210 42 68 /3Y +$C +-EAIF&-%(XJ,\p:pAb',@NC5ZOIdL)D[8;\gMaRUpYXf9pYXkTGQ.KSmI,E%KLaqUn%JGP[uo8! +H[?9?=E_U7fP2Fa\9MuB42Z\I~> +, +2198 5210 3Y , +2243 5234 22 67 /3P +$C +2XooniU4eCkV2dMDoVhFs6fpaJ,aHemJlp1rpTmCs53SJs7u0(%WrUJ2u~> +, +2268 5234 2J , +2293 5234 35 44 /4A +$C +1_pW`#>ToG(S20sT\Ua.mI8\^s8VinIfJ0sh8mojqgIniD/;(a(g@t<*#L(~> +, +2330 5234 3N , +2370 5234 28 59 /3F +$C +4EMY6pUlCBg(!Q/Dn!!ds4dSNJ,aHemJl=b7H*40A?"J$J+ruWs+]Lkhu~> +, +2400 5234 2J , +2425 5234 37 44 /0D +$C +1_pW^6.$!ii<C;Fh(-s&^X@&XIsq:qrP/?fs1e#Hqu5L?n(PHZm^DE7_[Ih"<%su^J,~> +, +2465 5234 46 44 /3H +$C +3/WJZKEl?!mr86^7<dGo5DK&YnFutMhgb+.mJjrW^B@'ahm,CnqmQM'h<htcrP,hbc*qlHLY-s$ +0sTID%e/HF*Xr4e~> +, +2538 5234 63 44 /0B +$C +,T0?rJV4N%FO5BG,$U1HkVeN@:I2S$\#/E)pY4Hin+Ub0htQJ]IJ_p:DVb?eGCB44n,%:sID>f# +[r3q/p\VFKhR;jVgW]a9]<1P8mau9r+qDJ?~> +, +2603 5234 2J , +2628 5234 3F , +2658 5234 42 67 /7A +$C +,NV@W(`q%J^CT44DB6AKnDD!8n%[cI^]!R"Is9du^YTPEIc'V+GIN%Yg\Z2<+1D1+fRIB(*q.#9 +r#45Fs1a&un+Z--(q^fY#7$$7~> +, +2726 5234 3N , +2789 5234 3W , +2859 5234 2R , +2894 5234 3H , +2944 5234 2N , +3017 5234 39 67 /0F +$C +1`RWWK:qc_\j;+Ko\J9hqsWt?s)%eFqfgrTp@l9#n%X%^&cOG8,Mq=e[bnO*&(k[&gK+p'>T[JE +rr)lSpYW(1@dr1:3'9;~> +, +3059 5234 3N , +3099 5234 7G , +3134 5222 18 24 /3L +$C +,PZH\]6h9Zn(Za/p[.p3K7E~> +, +3179 5234 3N , +3242 5234 3F , +3272 5234 0D , +3312 5234 0D , +3352 5234 3P , +3400 5234 0F , +3442 5234 3N , +3482 5234 7G , +3517 5222 3L , +3562 5234 3N , +3602 5234 3H , +3652 5234 43 67 /0T +$C +2Tg>sT_EOJ4l5WPG9_)!%H5%W2qu5t2V@a&hr!h1n*f"Lp.%=@f`0gcg\p#Z]>"19rn[I"^AYG* +0N_ht4;e]S(]T!Bn,*(`jM571,,5AQ~> +, +3720 5234 3N , +3783 5234 3F , +3813 5234 2R , +3848 5234 44 44 /7C +$C +/nAD;C$c/;g32H;[j'SRFG#"QGdkBMGMDPtX*sni[K$6@Hbg<j=53,m\`MX)DV[3lYgnZPh<dA' +d!09/~> +, +3893 5234 3F , +3946 5234 0B , +4011 5234 2J , +4036 5234 3H , +4086 5234 0T , +4131 5234 0D , +4171 5234 0B , +4236 5235 2V , +1050 4995 46 55 /1J +$C +,T/uDJ,B-CrpTl:qu6?icN^lXC1RYKs6p!Es8DuqbVd-abae^jpV61sqqq/Hs6f~> +, +1110 4994 45 60 /4L +$C +1hNb=T_EOKmN1gALF!Hs]J0+thm\Yr[sbaQp\s'YaQNT.hsKmEs1Q&ChgPBGqepD][aTuICiJmc +>EAaWs1\O1XGm9KaLOU@e,~> +, +1150 4994 36 40 /1P +$C ++c[*p%Z%XZ"s/D=R!^iiq#CB.rph,-:''\uHn]aQ4r`7#DmsW]gUGqlgY5QB8f6Nc@6a~> +, +1173 4973 47 81 /4P +$C +,F0@*^"KOO2\uA*hgYJ%hu!0Frql`QJ,S:)^OQ"X][RlR%Dh"eT4@ops7bEa^C?WTf%<a<%r=4;YQ~> +, +1211 4994 19 58 /1T +$C +0^([YmirkB_mCB;nb:r8hnS'`h>c=/O8HFqp,g09LPDT(3cK`KpN@5~> +, +1234 4994 39 40 /4T +$C +/r2S:=F5hknGJ5h\deQkh;>I*rSQK3h=lEV\$/8LnU:b)rO;1Mn(W>9mIG##*U_\K4hfdjltgXq +G7SnPK2CLq~> +, +1270 4994 1P , +1321 4994 38 40 /5H +$C +1QJjIT&J%?\9klR\L;m=2n&1a^&HjD\*a'2rS<OLp@l<$[f5a_s)._k\,3YhiNTc-@>lrS+bU[~> +, +1365 4994 4T , +1401 4994 4L , +1461 4973 43 61 /1G +$C +3E[N/qg\Wq^[M1#q1HUJ4G:N>K6@n=\(g<<qffdRqsNqIh>b4Wrr2[\If&JmmbbMJTD&/jnAEn* +(h'JM;"&U`%7>bE~> +, +1501 4994 5H , +1545 4994 29 40 /5D +$C +4=hUskWFdKOC@?382o;MIR!l4^Ycg"rNfT&p@!FDh[T;.@>,+uW%_$~> +, +1569 4994 42 60 /1I +$C +5)FV6;q_c>:@^=SF;sHLpt[Uk]&2ajokf2i_B\A_+o:Zb[;YI+qg35MqgF7P@$]I?Hag\C(E\.A +rV-?JAH7h_S=nXp~> +, +1633 4994 23 53 /2B +$C +2c)ZdYkO<igYmp3j7iNPhnT'_s*jr;%@;^b@?[V`s1\O1nF53j~> +, +1651 4994 1P , +1683 4994 45 40 /5D +$C +1M4*^T_Ee!mdf>2/3?STHp%\oGhYjh^X^'UNqU6\s*LD,J%+l@e`@m"gB=XZ%;ho]O1X+m9sB7H~> +, +1731 4994 2B , +1769 4973 1G , +1809 4994 5H , +1853 4994 4T , +1889 4994 1P , +1928 4994 18 59 /5B +$C +02Qn?_oTlE%Ih9Im!le-^Ycg'^]/NXIfJm6rVqA^rpO%8JjX(##6~> +, +1963 4994 5H , +2006 4994 4T , +2043 4994 4L , +2111 4994 1T , +2133 4994 2B , +2151 4994 33 40 /5B +$C +-l*(/#EaGmK+C]1Dn#2M^\]$jUptJB0*ssE((,j_i3fc)0Al`?F`2(H$n,To-t,@~> +, +2203 4994 5B , +2242 4994 29 40 /5D +$C +4=hUskWFdKOC@?382o;MIR!l4^Ycg"rNfT&p@!FDh[T;.@>,+uW%_$~> +, +2274 4994 29 40 /0S +$C +0![qCn,*(\rVQQlhgYomrn/Cfg[FTJafi,Y.h?'AmIAr?L,ZjWpM;Z)J,~> +, +2297 4994 39 40 /5N +$C +3Xu]^%Z%b<"Pk3X]f0!bIJrp7s*aq8hr"Fj^Yca!mr`NMXh(sF_[0GDC()K~> +, +2341 4994 18 59 /0K +$C +02Qn?_oTlE%Ih9Im!le-^Ycg'^]/NXIfJm6rVqA^rpO%8JjX(##6~> +, +2363 4994 0K , +2385 4994 33 59 /4Z +$C +4A^UUF@F"/+Q%*252U^rn$i=DDZ=YPqfhdarnmG;p`_rip>536&)1;rf4(o\57MEda5;CDn,N,b +J4OrFi:$~> +, +2414 4994 5H , +2458 4994 0S , +1067 4930 26 24 /6B +$C +3KcF;f)N/Xs',Ns^]4=<s7X5-rr~> +, +1107 4903 37 47 /2F +$C +,!"-o&3:;X:c\mI3Y%6eNkbVos8W-!s7mWQ.GC4ts8W,o~> +, +1157 4903 37 36 /6N +$C +,8>kC#TOuNNe,%MC)mErU`Vne%51B>^Z77HITRDh[f9C[V/Nf-Ya'qUY[E`RL(kIQ~> +, +1204 4905 40 33 /3R +$C +,D23^<Bg[^5V$PQ8fL'#9%m=o[["5%V/7_s=K>fXU>=78&n04+PB<:ih'VAF8[orME.@c~> +, +1251 4903 2F , +1362 4904 12 11 /6J +$X +++QT6J)L@rs7$'Xs6tNrJ)EQ,"on~> +, +1395 4903 2F , +1494 4926 36 3 /2J +$C +-D@Es~> +, +1540 4890 40 48 /0G +$C +,D1;cUc7]<mea`e^Uiik+7>?iV#KUC\khaXqkX5U5IsYYQeSA1l$^-MD?u$E3d4[~> +, +1592 4903 31 36 /4B +$C +3qGU^*sao\+%0adJd1_6_LC<fqr51`YY'$@RKF*e;%+T[7Nu7jO<Cp&?gkG8$Y3E!M';T&0LG~> +, +1639 4903 36 36 /5L +$C +2=a!X&3::5)8i+u\d15c2l>"69iQ7BYQ+WMQrd(!Isn`6ln*r-(bf/,2o?#X&AS~> +, +1686 4905 38 34 /4V +$C +,DL+/.)5f^s8W,upV$#LmtSX^fP1'1?n2EsTo-Gh+Og~> +, +1734 4903 36 36 /5T +$C +2=a"W6,F+fk3*@85mHR48\.X^X*T9Hrh'5j>Md-&]kqV_D(B=&@4MNg=K#XoK`~> +, +1783 4905 34 48 /4P +$C +,D/uSVd'3$s8W-!s8W-!s8W-!s362r~> +, +1831 4905 4P , +1879 4903 5L , +1926 4903 5T , +1969 4905 47 34 /5N +$C +-DAQ$BJ/`LWOFQnn,NFfs8W-!s8W-!s8W-!s8W+Cs4VqhG)IB;"@b@Z-5tEl@_5?&1`0$~> +, +2017 4905 5N , +2070 4903 37 36 /3X +$C +.-JIa#'_7d7&V15)k58oU_s!npj`<nmJH;E%;^^q0uG,!pbEX?s8UYi,s^'+9j"?&8cuj~> +, +2116 4905 40 34 /6H +$C +,D2-]eSau;K>7Hds8W-!s8W-!s8RQ"Id8P.]s*_9K*bP8iM_JF~> +, +2165 4903 42 50 /2R +$C +25q]L+O>lM4%+.9"<3iW6,&P2-9=r#YG_>Kl2Ue`qcj*ShqHghBX.9ZlnFc6_(N]G_Vp3hs8W,u +8VpZe~> +, +2272 4895 16 59 /6X +$X +!"T&o!.P"J!:U$I!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O"2G#S#Cq:(rW)ot +rr<R["+UKh!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!Pe`O!T4":!;HPD!'^H*!!3~> +, +2322 4904 6J , +2360 4903 4B , +2407 4903 5L , +2454 4905 4V , +2502 4903 5T , +2551 4905 4P , +2599 4905 4P , +2696 4903 4B , +2741 4903 6N , +2787 4903 2F , +2848 4895 16 59 /4F +$X +n,W@drW%EJ%fcib#Clo,"+UK("+UK("+UK("+UK("+UK("+UK("+UK("+UK("2G#S!T3tW!.Ouu +!<3)h!T4'q"+UK("+UK("+UK("+UK("+UK("+UK("+UK("+UK("+UK(#Cm$Z*ru9?quHKl5QC~> +, +2934 4926 2J , +2977 4903 42 50 /6D +$C +.QJ=]7h?ec$/H3<cc?Z+oFPr:pnm]@I9rQFpTOVs>Q:h/Xfg*r4'pWHL(`hi-.mph>VKE4s8W+] +`3%q~> +, +3029 4890 40 49 /2V +$C +-O`guOG+.]G5]2Es7/FF&3c]lMpJ%]ha'3L%JjS2dXUNIs%i[ps4ZB0f&(W(fP%P`_HhcsUd<Y6 +$nO)iE81~> +, +3122 4905 44 33 /5R +$C +-SqIbli$KPbWdnks1N`mgAh+nrO(tchS!+mhQL#@s66H]?Me&#hMLihS>VUJ?~> +, +3171 4905 41 48 /4D +$C +/e1\fX1A"X^]4?6s8W-!s8W-!s*iRKd`afM@4oG(Ft9u:Kua5ns7mX,h>~> +, +3223 4905 34 50 /6T +$C +,D/uSVd'3$s8W-!s8W,pY^b^4F?fg*p]~> +, +3267 4903 2F , +3317 4903 6N , +3371 4930 6B , +3419 4893 16 24 /2Z +$X +?i]Zrp]1'hquHWpIK4itIfOtK5Cbu65JSB!+5e71+7Kg9&,Zt9#Q=u-#QFo+~> +, +1067 4840 6B , +1112 4813 4B , +1159 4813 5L , +1206 4815 4V , +1254 4813 5T , +1303 4815 4P , +1351 4815 4P , +1393 4813 6D , +1446 4813 3X , +1494 4815 4V , +1602 4814 6J , +1640 4813 4B , +1687 4813 5L , +1734 4815 4V , +1782 4813 5T , +1831 4815 4P , +1879 4815 4P , +1974 4836 2J , +2023 4813 5L , +2070 4813 5T , +2113 4815 5N , +2161 4815 5N , +2214 4813 3X , +2260 4815 6H , +2309 4813 2R , +2416 4805 6X , +2466 4814 6J , +2499 4813 2F , +2596 4800 0G , +2642 4815 44 33 /5X +$C +,7:'em_5:%hNdi3IJ%aTotL(%]ds)OYG\MsV15;ujD_pX0hjU*~> +, +2695 4815 6T , +2741 4813 6N , +2786 4815 5R , +2848 4805 4F , +2891 4840 6B , +2939 4803 2Z , +1067 4750 6B , +1106 4710 41 49 /2X +$C +,CpR%4TGH]s8SMji.L5W&Jp)`&3%s%^BqPOp@R87rr/Pis',@!f4f^;8!<AY?*KQR,6eHR0jTJE +_*@~> +, +1158 4723 3X , +1207 4723 5L , +1253 4725 39 48 /5F +$C +,D^FHWnljrAH,<!dckkb>qVI:V:+(%9,4PGXrHd%+)eXCiP*4sp@ogBSbhCHs8W+]`3%q~> +, +1362 4724 6J , +1400 4723 4B , +1447 4723 5L , +1494 4725 4V , +1542 4723 5T , +1591 4725 4P , +1639 4725 4P , +1734 4746 2J , +1784 4723 4B , +1831 4725 6T , +1877 4723 2R , +1925 4723 6N , +2023 4725 4P , +2069 4723 6N , +2120 4725 36 48 /6B +$C +,DL&R.)5f^s8W-!s8W+c%*EdY?iU-(]6H+df\tef~> +, +2163 4723 2F , +2262 4746 2J , +2312 4725 6B , +2359 4725 6T , +2407 4725 4P , +2455 4725 4P , +2548 4710 0G , +2646 4746 2J , +2695 4725 6T , +2740 4725 6H , +2850 4724 6J , +2883 4723 2F , +2933 4723 6N , +2980 4725 3R , +3027 4723 2F , +3083 4750 26 24 /6B +$C +3KcF;f)N/Xs',Ns^]4=<s7X5-rr~> +, +3131 4713 2Z , +1067 4660 6B , +1106 4620 2X , +1158 4633 3X , +1207 4633 5L , +1253 4635 5F , +1362 4634 6J , +1395 4633 2F , +1494 4656 2J , +1544 4633 4B , +1591 4635 6T , +1637 4633 2R , +1685 4633 6N , +1782 4635 4V , +1831 4635 6T , +1877 4620 2V , +1923 4635 4D , +1971 4633 2F , +2070 4656 2J , +2119 4635 6T , +2164 4635 6H , +2274 4634 6J , +2307 4633 2F , +2357 4633 6N , +2404 4635 3R , +2451 4633 2F , +2550 4656 2J , +2597 4633 6N , +2644 4635 3R , +2690 4620 2X , +2742 4633 3X , +2788 4635 6H , +2837 4633 2R , +2937 4635 30 49 /3N +$C +,DKbll$ra5s8W-!s8W-!s8W+]mYJQmnAbcdaTi'$~> +, +3030 4656 2J , +3080 4635 36 48 /1K +$C +,DL&R.)5f^s8W-!s8W+c%*EdY?iU-(]6H+df\tef~> +, +3127 4635 6T , +3175 4635 4P , +3223 4635 4P , +3313 4633 6D , +3366 4633 5T , +3411 4633 2F , +3459 4635 4D , +3515 4660 6B , +3563 4623 2Z , +1050 4455 1J , +1110 4433 1G , +1150 4454 5H , +1194 4454 5D , +1218 4454 1I , +1266 4433 47 81 /1R +$C +,F0@*^"KOO2\uA*hgYJ%hu!0Frql`QJ,S:)^OQ"X][RlR%Dh"eT4@ops7bEa^C?WTf%<a<%r=4;YQ~> +, +1304 4454 0S , +1327 4454 5H , +1370 4454 57 40 /0Y +$C +/r7G64J%56H[(#-r'/9CIHWBZiO?8QnFu[jmf3=A^$bpghnSUHrpBaE&bZeY^\?Qt\(c9.]5ILm +I%%4oL[NpOlog,@h7P\$+(JejL>D8;4l*V]3,0EmGQ~> +, +1425 4454 1P , +1456 4454 5B , +1067 4390 6B , +1106 4350 2X , +1158 4363 3X , +1207 4363 5L , +1253 4365 5F , +1362 4364 6J , +1395 4363 2F , +1445 4363 6N , +1492 4365 3R , +1539 4363 2F , +1638 4386 2J , +1688 4363 4B , +1735 4365 6T , +1781 4363 2R , +1829 4363 6N , +1921 4363 6D , +1974 4363 5T , +2019 4363 2F , +2067 4363 2F , +2118 4363 5T , +2161 4365 5N , +2262 4386 2J , +2312 4365 1K , +2359 4365 6T , +2407 4365 4P , +2455 4365 4P , +2545 4363 6D , +2598 4363 5T , +2643 4363 2F , +2691 4365 4D , +2790 4386 2J , +2837 4363 6N , +2884 4365 3R , +2930 4350 2X , +2982 4363 3X , +3028 4365 6H , +3077 4363 2R , +3177 4365 3N , +3227 4390 6B , +3275 4353 2Z , +1067 4300 6B , +1106 4260 2X , +1158 4273 3X , +1207 4273 5L , +1253 4275 5F , +1362 4274 6J , +1393 4275 5N , +1441 4273 6D , +1494 4273 3X , +1542 4275 4V , +1650 4274 6J , +1682 4275 5R , +1782 4296 2J , +1832 4275 1K , +1879 4275 6T , +1927 4275 4P , +1975 4275 4P , +2068 4275 3R , +2123 4263 17 45 /4J +$C +,P:`FDsuHX\+f:ghg]j2s"c,7[/Xn7'E~> +, +2211 4273 40 35 /6F +$C +25q!0+D6C(7-5PP2`=T_+NNA8hnT3ks8W-!s8W-!s8U1"*<Oj-~> +, +2258 4260 2X , +2309 4273 2R , +2358 4273 3X , +2403 4273 2F , +2453 4273 6N , +2507 4300 6B , +2555 4263 2Z , +1067 4210 6B , +1106 4170 2X , +1158 4183 3X , +1207 4183 5L , +1253 4185 5F , +1346 4170 2X , +1398 4185 4V , +1446 4183 5T , +1490 4170 2X , +1542 4183 3X , +1589 4170 2V , +1638 4183 3X , +1683 4183 2F , +1733 4183 6N , +1842 4184 6J , +1929 4184 30 50 /2P +$C +-OC&>FA&/-)l2>^PBFQ'H<:&.Du])%s8W-!s8Q='hR:26[(gH.C[/eD=CE]pC)Bb~> +, +1979 4210 6B , +2027 4173 2Z , +1072 4085 4F , +1115 4083 4J , +1050 3915 1J , +1118 3914 0S , +1149 3914 39 40 /4Z +$C +3?%/eK;T6(LC\T>TugNt]na&Tp?XrVn+PXUrO_Ikhm`!6h;A2*IIHpds7^d\mruYYHQ1i#qs`S' +Tn!~> +, +1194 3914 4T , +1259 3914 2B , +1278 3914 43 59 /5F +$C +5);9H:k%hbmJ)$k[sc"%]DHgOqu,F,s*&s2r$"@P,Q6AHIr>.4g[<hin$i!/lnS7HnG<a6>]9B: +^An*'PQF4n_M<X~> +, +1318 3914 1P , +1377 3915 49 55 /7F +$C +4q7FE'%O2#n,E:cqu6Waqu=G"rr9b(opW)aHb[>oqtL+q)hR'2GQ~> +, +1418 3914 1I , +1481 3914 5D , +1506 3914 39 40 /5N +$C +3Xu]^%Z%b<"Pk3X]f0!bIJrp7s*aq8hr"Fj^Yca!mr`NMXh(sF_[0GDC()K~> +, +1549 3914 0Y , +1611 3914 0Y , +1666 3914 5H , +1709 3914 4T , +1746 3914 4L , +1786 3914 5B , +1058 3825 5R , +1105 3825 47 34 /5N +$C +-DAQ$BJ/`LWOFQnn,NFfs8W-!s8W-!s8W-!s8W+Cs4VqhG)IB;"@b@Z-5tEl@_5?&1`0$~> +, +1159 3825 4P , +1207 3825 6T , +1249 3823 6D , +1302 3846 2J , +1350 3828 36 39 /2L +$C +,H;7a_m^%6@D`QlG2\2b3+9]7)mJ:V$oh\M8e=gNKG5Q.64+9#JqOje5sbni:kGN0@9?>~> +, +1395 3823 2F , +1445 3825 39 48 /5F +$C +,D^FHWnljrAH,<!dckkb>qVI:V:+(%9,4PGXrHd%+)eXCiP*4sp@ogBSbhCHs8W+]`3%q~> +, +1495 3823 5L , +1537 3825 5N , +1589 3823 2R , +1640 3823 4B , +1703 3815 14 59 /2T +$X +!#P\u!.4ck!:U$Y!T4(<"2G/W#J^k#%tG`%*rnM*4odbHIK4`qHiSNoquHWpquHKlp]1'hp]1'h +p]1'hp]1'hquHWpHiSNoHiSNo4odbH4ocZ)*rlfO%tFn8#J^GW"5j4<!Up*Y!-eKg!'C6$!"]~> +, +1731 3823 2F , +1782 3823 5T , +1826 3810 2X , +1883 3813 2Z , +1971 3823 2F , +2021 3825 5F , +2063 3815 50 4 /4R +$C +-D741~> +, +2119 3823 5L , +2166 3823 5T , +2212 3825 6H , +2264 3825 1K , +2311 3825 6T , +2357 3810 2V , +2412 3815 13 59 /4H +$X +^]<9mn,W4`GQ<*k49.PF*rmA_%fd,j#Cm&p#J^H""5j:>"7Q?\!Up-Z!Vc]j!;HQh!;HQh!;HQh +!;HQh!;HQh!Vc]j!Up-Z!Up-Z"5j:>"5jF"#J^S[%tG1@%fd[O*WSA(490a/GQ@45n,VAH5QC~> +, +2459 3813 4J , +719 3645 60 69 /6D +$C +226&?X:j(Vs8W-!s8W-!s8W-!s8W-!s3*SAs8Vcls8W)e]ja4A~> +, +780 3645 58 72 /4O +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qco"??GfF?_0Zp7?*;dfE5?Pos8W-!s7M]^ +s+AH!#Cl~> +, +838 3643 46 49 /6P +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +911 3645 38 47 /3Z +$C +0H#A^_V2d)s8W-!s8W-!hqnUF[?3rg<K18!0`S\NG9dORiPEE.~> +, +951 3643 6P , +999 3643 40 49 /6H +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +1041 3644 59 48 /4D +$C +,6G^d:()^rSt(K"WZ[OKKH'R@829B/hbX7Os8W-!s8W-!s8W-!s8K(pJ6^S3s7>3jJF\7`JS/"W +3,n?~> +, +1101 3645 28 72 /7D +$C +0EsY0/Z\pOs8W-!s8W-!s8W-!s8W-!s8W-!lS&`s4p`JB2)k~> +, +1131 3644 33 63 /4J +$C +22MSu?.7U@]^UPYFoVLAs8W-!s8W,u?o*0m2B4J$*'aK's6osmLPLB~> +, +1188 3643 52 49 /5Z +$C +-,RJ#Jd4TY+S0[\0^1M^2l>gu<qXnToWS5,FoUmEs8W%)rjpk_Fh_cG[d)RJ9#F9R9#61SMQibj +PlW!~> +, +1243 3645 35 73 /4B +$C +0Esb+"P*PPs8W-!s8W-!s8V6a07FEB%#Z/ks8W,Vqtkj:[L0nZ`p\\%_LM~> +, +1301 3643 6P , +1349 3645 51 47 /1L +$C +0HhbLCT6iu*o7X>[[4%/>?fXbXeft#>>!^U>GYf:I8\U0m^,;BmF&STVWhAmPBq,U8\.XIjoKYt +a@E.\>`fE~> +, +1401 3643 6P , +1448 3643 42 49 /3N +$C +-,RJ0,D$.,dtC(&BFm314U.0';Uopg0D5AFqu:T"GOO;dD/K!tg22NP(b6GB_Li1('E~> +, +1493 3644 4D , +1553 3644 4J , +1586 3645 28 69 /5T +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +1615 3645 58 47 /3P +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qcY0ReuU^)_0-YK@^p/t4&U'%SJqnU0Mh~> +, +1673 3616 55 76 /7K +$C ++p6(UU(D9p_BI4g&2<;jh&tN#o\CkkFnFSgJ,d.Xs(u]/=CJ9h&r&_O@t^O*>/J*d6!EuahV:&- +aAQDs_@@-!5s.7@DNJb"HG82g\$+]hs53/>Bn"bZS_ZAA[]D/Z`.uhrTnOs!J,~> +, +1754 3644 4J , +1786 3645 4O , +1844 3643 6P , +1892 3643 6H , +1935 3643 6P , +2008 3645 6D , +2069 3644 56 73 /3H +$C ++LJp$5kmV@ADpOa$L)XK9;U)$FLka1QV41'l#aLB/sf3GX^kL=qgH2riP+2XpA99P(k'-9mIh'p +IJ`R7s8W-!s8K>)a7J5P5dOC>~> +, +2150 3643 3N , +2194 3643 5Z , +2249 3645 88 47 /5V +$C +0Eoc'K:jmrq)D8+/;`aO>(?SPs8W-!s8W-!s8W-!s8W-!s8W-!ri?'Cm5<d*9l_ZL&>Ouf@AMUU +!4rFJ@)DUq/%!gM.m^-W@A]^a-57F:+CLi~> +, +2337 3645 5V , +2425 3644 48 48 /3L +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +2475 3645 3P , +2533 3644 59 74 /6R +$C +,6PadBFG%9o].Bt<'f[3Jd*;_2s<!EI=:?D^Ak&0qZ$Tqs8DutIK/3^Iqs28[alB*$o"p%K#8Q` +"?mZ-1+_tqs8W-!s8?J%(]Hk@a^F0ZLO]~> +, +2594 3643 6H , +2662 3645 5T , +2691 3643 6H , +2758 3643 6H , +2801 3645 4O , +2859 3643 5Z , +2914 3644 82 48 /3X +$C +--V`>h0uuM[/YPgrB9d@+!SJRhOje2e\;&ZVUk)5[%C.MH@FT)^[7iQJ+m9?>HRpIY?pm>YNtG4 +lW<i0='tEF]"Q[tSt*;=F&6Q9h].OYhu~> +, +2997 3645 3P , +3080 3645 5T , +3109 3645 3P , +3192 3645 55 69 /6L +$C +0H%LnJ9qY"s8W-!s8V1Ls8W-!?gtT*q%-&Ks1eU6s,[3[q+1Pcs8W,o:72q?LG0'b?i~> +, +3248 3645 5T , +3277 3616 7K , +3333 3644 4D , +3393 3645 3Z , +3433 3643 6P , +3505 3645 48 69 /5S +$C +0FGP^n$52ZaH1;q]6<Sr]t8ITgUFe<mG#+^GIP22]tO;mGPhA[s8B.im<rhtm49s$@$QdRX[?,' +(f4`k^]~> +, +3563 3644 11 12 /0D +$X +*rnNUJ&)*Bs5<q8s5<q8s5<pmJ&!-+~> +, +719 3489 6D , +780 3489 4O , +838 3487 6P , +917 3488 3L , +967 3489 3Z , +1007 3489 3Z , +1046 3488 3L , +1096 3461 55 74 /4H +$C +3%Y6hmI,4)4=>r&qn9amhgXIsrOVILFl0+]j?`gAhs!)u2d]ipr?hQFX8\<4pIY>3Is(D_lMA*j +\l\aa"r!=,"Tb7n~> +, +1152 3487 6H , +1226 3488 6R , +1287 3487 6P , +1335 3489 4B , +1368 3489 5T , +1397 3489 3P , +1456 3489 5T , +1485 3489 3P , +1543 3460 7K , +1629 3489 6D , +1690 3488 3H , +1777 3488 3X , +1860 3489 5T , +1889 3488 6R , +1951 3460 7K , +2006 3487 6P , +2054 3488 4J , +2087 3487 6H , +2160 3488 3L , +2210 3489 3Z , +2250 3487 6P , +2329 3487 6H , +2371 3487 5Z , +2426 3489 5V , +2514 3487 6P , +2562 3488 4J , +2595 3489 5T , +2624 3489 5V , +2712 3487 6P , +2760 3487 6H , +2833 3489 5V , +2921 3488 3L , +2971 3488 6R , +3032 3487 6P , +3111 3460 7K , +3167 3489 7D , +3196 3487 5Z , +3250 3488 51 73 /5X +$C +5EglT+SH@k^#U$'FpL$[_nllJqgH5-rV-'chuE_+s8Vrqrg*Md?)<,t[I'gC0OD_A]3VSk$n_r) ++92B@s8W+%2$O#4bf,_b~> +, +3306 3488 3L , +3356 3489 7D , +3416 3488 4J , +3449 3487 5Z , +3535 3488 3L , +3617 3489 5V , +3705 3487 5Z , +3760 3488 6R , +3821 3488 4D , +3881 3489 7D , +3910 3487 6P , +3990 3488 3X , +4073 3489 4O , +4132 3487 6P , +4179 3489 3P , +4269 3488 4J , +4302 3489 4O , +4360 3487 6P , +4408 3461 4H , +4496 3487 3N , +4540 3488 3L , +4590 3489 3P , +4680 3487 6H , +4722 3487 6P , +4770 3489 3P , +4828 3487 6H , +4871 3489 5T , +4900 3488 5X , +4955 3489 7D , +4984 3461 4H , +719 3368 5X , +774 3367 6P , +852 3368 4D , +912 3367 6H , +955 3367 6P , +1003 3368 6R , +1092 3368 5X , +1147 3341 4H , +1232 3367 6H , +1274 3367 6P , +1322 3368 55 47 /4S +$C +.aN80rp/h061h@qkr8H5rjSg"8c@(ef(At+5J$]0oUGf-2d]Y_\*g;!Eo<U`1]Mt~> +, +1379 3367 6P , +1427 3369 3Z , +1466 3368 3L , +1516 3369 7D , +1575 3369 4B , +1608 3368 4D , +1669 3369 3P , +1727 3367 3N , +1771 3368 4J , +1804 3369 5T , +1833 3367 5Z , +1887 3369 3P , +1946 3367 6H , +1996 3368 0D , +2066 3369 33 69 /0P +$C +0H%XJ!UM?&s8W-!s8W-!s8W-!s8W-!s8W-!s)k!s!MdF~> +, +2100 3368 4J , +2162 3369 5T , +2191 3367 6H , +2262 3368 3L , +2312 3369 7D , +2341 3367 6H , +2383 3367 5Z , +2467 3367 3N , +2511 3367 5Z , +2566 3369 5V , +2654 3369 5V , +2743 3367 5Z , +2797 3369 3P , +2884 3368 4J , +2917 3367 5Z , +3001 3368 4D , +3061 3367 6H , +3104 3367 6P , +3180 3367 6H , +3222 3369 5V , +3311 3368 3L , +3361 3369 7D , +3390 3369 7D , +3447 3369 60 69 /2T +$C +1BfGjiK1'#,=ctPrr<#qs8MRA)uos<s8W-!s8W-!s8W-!s8T[WEraVc~> +, +3508 3369 5T , +3537 3369 5V , +3625 3368 5X , +3681 3367 5Z , +3764 3369 4B , +3797 3368 4D , +3858 3369 3P , +3916 3367 3N , +3960 3368 4J , +3993 3369 5T , +4022 3367 5Z , +4076 3369 3P , +4135 3367 6H , +4205 3368 4J , +4238 3367 5Z , +4322 3369 3Z , +4362 3367 6P , +4409 3341 56 75 /6T +$C +/d=P.LUCpts8W-!s8W*W++t[YiU7o"_nlWIR!K5#0_F9"If'$2n,<4bs7cQnYPu4PGO6ub73.&n +$mep_/@[=OG.U\h_[93uT^3@4(ao~> +, +4469 3369 7D , +4499 3369 5T , +4528 3367 3N , +4572 3368 3L , +4622 3368 4J , +4655 3367 6P , +4732 3367 6H , +4774 3369 5T , +4803 3369 5V , +4892 3369 5T , +4921 3369 7D , +4950 3368 3L , +5000 3369 3Z , +719 3248 3X , +802 3249 5T , +831 3248 6R , +893 3220 7K , +948 3247 6P , +996 3248 4J , +1029 3247 6H , +1101 3248 5X , +1156 3221 4H , +1243 3248 5X , +1298 3248 4D , +1359 3249 5T , +1388 3249 7D , +1417 3248 6R , +1478 3249 5T , +1507 3249 3P , +1565 3220 7K , +1651 3249 6D , +1712 3248 3H , +1799 3247 3N , +1843 3247 5Z , +1898 3249 5V , +1986 3249 5V , +2075 3248 3L , +2125 3249 3P , +2183 3248 6R , +2244 3247 6H , +2316 3249 4B , +2349 3249 3Z , +2389 3247 5Z , +2443 3249 5V , +2563 3248 4J , +2596 3249 4O , +2654 3247 6P , +2733 3248 4S , +2790 3248 3L , +2840 3249 7D , +2869 3248 4D , +2929 3247 6P , +3008 3247 5Z , +3063 3249 4B , +3127 3221 6T , +3187 3248 3L , +3237 3249 3Z , +3277 3248 3L , +3327 3249 5V , +3415 3247 6P , +3463 3248 4J , +3495 3247 6P , +3543 3249 3Z , +3583 3247 6H , +3625 3234 23 27 /5C +$C +0k&hmpMY93^MeSYh7p_lq5@]N~> +, +3682 3248 4D , +3742 3247 6H , +3785 3249 5T , +3814 3249 3P , +3872 3220 7K , +3958 3249 2T , +4019 3249 5T , +4048 3249 5V , +4136 3248 5X , +4192 3247 5Z , +4277 3247 6H , +4319 3248 4J , +4352 3249 3Z , +4391 3249 5T , +4421 3249 3P , +4479 3220 7K , +4566 3247 3N , +4610 3247 5Z , +4665 3249 3P , +4723 3247 3N , +4768 3248 3L , +4818 3248 4J , +4850 3247 6P , +4898 3249 3P , +4956 3248 3L , +5006 3271 6A , +719 3128 4J , +752 3129 5T , +781 3127 5Z , +835 3129 3P , +918 3127 5Z , +973 3129 3Z , +1046 3127 43 45 /6F +$C +--Bs+k9*%T&:G,"nKk6P"+"kk2m9\ds6X:'>#;Fq8V0QRcT29O5bS`qZp[t!6#*3fV#UJ^D6DID +fJ$MB6gQEDC((Zh~> +, +1098 3110 57 61 /3R +$C +1^ptq+W\=9g\1T\DsmM*laeE-h'_qgrTWY4])$<YS$/^Tl+6_/^72='lfl"W]"Y>NX/kOJ@=k"( +:Aq2C~> +, +1166 3127 6F , +1226 3155 47 4 /5F +$C +/ddj:TE~> +, +1286 3133 46 48 /2J +$C +0W7)r4)i)l*&-_=DA[?1L)l$X3,TRP_hK1e%DrYmE5TO"&5\Vq#Uhu*$50#*"UHMK&6'>dT`k`h +$A*pH(9An~> +, +1346 3127 6F , +1398 3110 56 62 /4G +$C +3!q,3aUeFOs8W,sL(f.]^j&07KBS.Ncm,Lc$,2!#oUEfYVpfsAH@Pgis8W,r?GEo@[G>\?a(]_F +m=`,+Ph9rm$$Ii'Xr("?'E~> +, +1466 3129 48 43 /3J +$C +0H-5NSR;Ess8W-!s8Tdkms/EWheWql2"95c2)l)`$#mk,\7%cB:]~> +, +1526 3129 45 62 /3W +$C +2@YoEU`9@6s8W-!s8W-!s8V[E,.I+BaFaHls6p~> +, +1578 3129 56 43 /2V +$C +1Bn:Ro[EN6F_)fts8W-!s8W-!s8W-!s8W)srHDINZ.ep"nC!a.@>)."]2rE/0VA~> +, +1638 3127 52 58 /4T +$C ++Dt22n;'$mK;'!rU-/Uq+pCM##-'`as8W-!s8W-!s8P8$eb5lLs8W-!qLA~> +, +1707 3128 0D , +720 2889 47 67 /1D +$C +3Wia=KE<`/p:pY-jhY#(rT)FhoP`W:pA`nIDuIHErV-'DhgXJ[J*lt0g])3$rl9M8qfe,V,Z9-~> +, +770 2888 20 15 /2H +$C +1`Rl=FT;<CC)Bb~> +, +795 2889 47 66 /4A +$C +/df5imdBG!U=fSWgUD(V]6<Sr[r1$6G5#n2n%3q\rpRT]s*t%I\+[LY\7o?eEF2euTnNqC$5b3/2u~> +, +845 2888 2H , +920 2889 59 68 /7I +$C +2@X$h3"]p%s8W-!s8W-!s6"uU6NQC8&)SW7nDA/ng[FV0^]33ks6K]g?$]a-0U3!7"YF,d:]~> +, +981 2889 39 47 /2K +$C +0H$MYTKVuJs8W-!s8W-!pTf^+(gLC'+S,W)pYU$GG9Me#iPF:~> +, +1020 2887 52 49 /2V +$C ++U++g6m-H$K]n$]*<H\uDNfBa^72=,YM9*AIfKHJs8W&LYOB6S^Uh#29@^83L6ODnTnNn(#T`~> +, +1076 2887 41 49 /4I +$C ++N9T']F[%ge#bGo7o1=Q5gn17;Yp%#qZ$Tos!&T^s1`I=XnrMYL)(WnLN)4+"pt~> +, +1120 2887 46 49 /5G +$C ++U++g6m1FjKH4dS%@Npn#4R8n%;9Hkde`s0run4!%=!O$"j!oDs6oj9f)MddD(?#G0i6DS%7:I2 +M4a~> +, +1170 2887 40 49 /4G +$C +3f>g'n3Oo%%j7D36+e>sT3%oiqqqCITh04KCBXhpb6^M`XXX\d$A^)?6ToH"%MlEM^]+8HpKJ%X +L).gSG[X3`GQ~> +, +1214 2887 4G , +1259 2889 30 71 /5K +$C +0H#A(KA-A*s8W-!s8W-!s8?^e)F*gYGmktL:jE#]AO4eC?2sl,C=Fr1~> +, +1292 2889 59 47 /0D +$C +/fA4$TE!.:j:ducs8W-!s8W-!s8W-!s8W-!YP,S6V*Tg/bD(U.Ap1dlk(&#^$q:pOW&S<Uhu~> +, +1353 2862 53 74 /2W +$C +.D[AsDZh'_KH1WC*<HH/+N)'6OFMAAn#PpGs1R:dC)b'*fMKR%-!KV<_SXAk7^%/Xh2oL.5_/q@ +#W`G-%!08pdVi2YrRJT2p](9fs46"J6Xd$EXfDjY@q7A$$n,OUE:<~> +, +1434 2889 82 47 /2O +$C +,6]M"h=[]<s0\utlW`*CC"M)"&:B+jl!8dG[nZ0pY@"\U^Zt+Lg:ut@XjZJ3Is^h[TCmWh[H[/3 +p?M[YK\^0XbG#hehs6@imtg$u2Z~> +, +1517 2889 5K , +1550 2887 58 74 /3V +$C +--g96$(;'KK@A;uOFBLHqIFR@!\e^-4qN$9VuE:%^]401s8W,ts8RNIhqHn'XgPSQ(h%6"pP4Jh +is#mPs8W-!s44J4)F*dD%jb[Ni:$~> +, +1611 2862 2W , +1667 2887 5G , +1717 2887 32 65 /0F +$C +.EZ`8VbXVnZpArR#H(r/s8W-!s8W-!q/FU2G7Ntp8,rVhs7Ni+LP*L[~> +, +1775 2887 5G , +1825 2889 55 46 /5E +$C ++N308lb?6ErglC\e\-CBqJO$>h0h4h:&_W"YGV>(e(40jlhdkb*0(n+@AEk<~> +, +1881 2887 5G , +1931 2889 0D , +1992 2887 0F , +2025 2887 4G , +719 2733 6D , +780 2733 4O , +838 2733 5T , +868 2731 6H , +964 2733 4B , +997 2733 3Z , +1037 2732 3L , +1087 2704 7K , +1142 2733 5V , +1231 2731 6P , +1279 2733 3P , +1337 2732 4J , +1425 2732 4D , +1485 2731 6H , +1528 2731 6P , +1576 2731 6H , +1672 2732 3L , +1722 2733 3P , +1842 2731 48 45 /1G +$C +3k744+D-15#AAdpoL9e"#TK*e&7PNu60UU_rVuijpY5GpI>50sLP@d5A2Znl&'+_Ml`/:<Y\T>r +/6!H_C23s&~> +, +1902 2733 45 60 /3U +$C +2@YoEU`9@6s8W-!s8W-!s8W-!s8W-!s3/9>qu~> +, +1954 2731 4T , +2070 2732 5X , +2125 2733 7D , +2154 2731 5Z , +2209 2731 3N , +2253 2732 3H , +2365 2732 4J , +2398 2731 5Z , +2509 2732 3X , +2592 2732 3L , +2642 2733 5T , +2671 2732 4J , +2760 2733 4B , +2793 2731 5Z , +2848 2733 3Z , +2944 2731 6H , +2986 2732 4J , +3019 2733 3Z , +3058 2733 5T , +3088 2733 3P , +3146 2704 7K , +3201 2731 6H , +3300 2732 4J , +3333 2731 5Z , +3444 2732 3L , +3494 2733 3Z , +3534 2733 3Z , +3573 2733 5T , +3602 2732 4S , +3659 2731 6P , +3764 2733 4B , +3797 2733 3Z , +3837 2731 5Z , +3891 2733 5V , +4036 2731 6P , +4084 2733 5T , +4113 2732 4J , +4146 2733 4O , +4204 2731 6P , +4252 2733 3Z , +4347 2731 4T , +4415 2733 3W , +4467 2731 4T , +4535 2733 3U , +4595 2731 46 45 /1Z +$C ++O4a+i.reS6.$'k_BN_8!X@j2h&tE;W_I/@C:^R_oWehD^WDC>HN)Lg[CpEoV/7fdL6]!.K*7m( +:t.1mJq*~> +, +4655 2731 47 45 /5J +$C ++WT&@_B@Xm#7-+#k_lB]&2ulZkm$>udX4)MBPXeWJ,fQ'r/,hrrqlRsCN%j0CLMq$@1c#I'uLE6 +'2W(k~> +, +4707 2733 57 60 /2X +$C +1Bn>>`B3dnFC`;hs8W-!s8W-!s8W-!s8W)sqd%e)/9[@sHYIX?9<hd*(gJc)s8W-!r:jIm^]~> +, +4775 2731 1G , +4827 2733 56 43 /5T +$C +1Bn:Ro[EN6F_)fts8W-!s8W-!s8W-!s8W)srHDINZ.ep"nC!a.@>)."]2rE/0VA~> +, +4944 2731 5Z , +4999 2733 3Z , +726 2611 5J , +778 2613 61 43 /0S +$C +2AdhJ:_A3Oo1(F=qu?]rs8W-!s8W-!s8W-!s8W-!s8W-!pO;Seqb;8cG?JF`D.WiQ<gR9_Y1)/_ +(f=s(~> +, +846 2611 52 62 /5L +$C ++rokY#W"`MK<U/9H6SI9Jd1>]"Q)ebODiWjSs/p#8cSY$^]4?6s0]W?Xo5C#XgD4-C[Eb.?%s!Y +(e]T6Yde+\@<)>Is8W'dK%Ji~> +, +906 2611 5J , +958 2613 2X , +1026 2611 1G , +1078 2613 5T , +1147 2612 11 12 /4U +$X +*rnNUJ&)*Bs5<q8s5<q8s5<pmJ&!-+~> +, +719 2456 99 71 /5H +$C +.L_Q,IJnZ-WrI:o^Aa`(d1CVQj?`fImFP^Y3r\CDh-45lJ)@]DqWceK^AhPWHM%&_rNH(_g:.+2 +fBn(Te[kFWhf%=nfBq1l>OV6rrjSd!rI8.TD>No)m^2rkIqn;aYJ&E[:4dNE@E:^es&cf7%DV~> +, +819 2457 4O , +877 2455 6P , +925 2457 3P , +1015 2456 3L , +1097 2455 6H , +1139 2456 4J , +1172 2457 3Z , +1211 2457 28 69 /2V +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +1241 2457 3P , +1299 2428 7K , +1387 2457 2V , +1416 2455 6H , +1490 2457 3Z , +1530 2455 6P , +1577 2455 3N , +1622 2455 6P , +1670 2457 2V , +1699 2456 4S , +1755 2455 6P , +1803 2456 6R , +1897 2455 5Z , +1952 2457 3P , +2041 2455 4T , +2109 2457 3W , +2161 2455 4T , +2229 2457 3U , +2289 2455 1Z , +2349 2455 5J , +2401 2457 2X , +2469 2455 1G , +2521 2457 5T , +2582 2442 5C , +2639 2456 4J , +2672 2457 4O , +2730 2455 6P , +2817 2455 5J , +2877 2455 1G , +2937 2455 6F , +2997 2455 1Z , +3082 2455 6H , +3124 2456 4J , +3157 2456 3L , +3207 2456 4J , +3240 2455 6P , +3287 2457 5V , +3376 2455 6P , +3424 2457 3P , +3482 2456 4J , +3547 2455 6P , +3595 2457 2V , +3624 2456 4J , +3657 2457 4O , +3715 2455 6P , +3763 2457 3Z , +3835 2457 4O , +3893 2456 3L , +3943 2457 3P , +4001 2456 6R , +4062 2457 7D , +4092 2455 6P , +4139 2455 6H , +4213 2457 2V , +4242 2456 4J , +4307 2456 6R , +4368 2457 2V , +4397 2457 3Z , +4437 2455 6P , +4485 2455 3N , +4529 2456 4J , +4562 2457 7D , +4591 2429 4H , +4679 2436 31 93 /5Z +$C +"KA5$<2ioaX%J_TkuZ=+f<21RX8]1"oY:G+s8W,ds8D]jp[@j)hqRkn]A*&HgV(4BmCQ0~> +, +4712 2456 3L , +4762 2455 6H , +4836 2456 3X , +4919 2457 2V , +4948 2456 4J , +4981 2457 4O , +726 2335 1Z , +778 2337 57 42 /0T +$C +1Bn>>`AIOjTZI4d[["5%V/7_s>>!UMd^GFJTsPQAXefkb'l)8[FQeq":"!pCFIT)^-L!H\\kUUj +PB<:G+cQNO:A(N8~> +, +846 2337 3W , +898 2335 4T , +959 2316 28 93 /6B +$C +3RbHUG4"&?]C+PE]C,RirpTT2^[Jr;^An65s3grIWrK*t='h6DF^7nJWD_7r<2jY:J,~> +, +1017 2335 52 49 /3B +$C +-,RJ#Jd4TY+S0[\0^1M^2l>gu<qXnToWS5,FoUmEs8W%)rjpk_Fh_cG[d)RJ9#F9R9#61SMQibj +PlW!~> +, +1072 2337 3Z , +1136 2309 6T , +1196 2336 3L , +1246 2335 6H , +1289 2335 6H , +1331 2335 6P , +1379 2335 6H , +1447 2337 2V , +1476 2336 4J , +1533 2336 4J , +1566 2335 3B , +1645 2337 59 42 /3O +$C +.En\QohYJ]jr\`Q9RhBgrn!t<huDF/ldtg:S+$CWBlou^n*MdCl9;T4J,c[8hqsLnFh[nRi%@<M +4o<_~> +, +1705 2337 0S , +1773 2337 3U , +1833 2337 3W , +1885 2335 56 62 /1A +$C +,Ap0V:'Cb1Tg"9*%d8k,,W$'NTS%Y>qG#tA:$KCgqg/:sYQ+Y&m<\c`f%9dlBk<=V[[1h`_[1Jp +-.o@;>VNZrEW?(=s7sI<pOE~> +, +1953 2363 5F , +2013 2341 2J , +2065 2335 4T , +2133 2337 3W , +2185 2335 4T , +2253 2337 3U , +2313 2335 1Z , +2373 2335 5J , +2425 2335 4T , +2493 2337 3U , +2571 2337 4B , +2604 2335 3B , +2659 2337 3Z , +2723 2337 3P , +2782 2335 3B , +2836 2337 3Z , +2876 2337 5V , +2964 2336 3L , +3014 2337 7D , +3068 2337 4O , +3126 2336 3L , +3176 2337 3P , +3234 2336 6R , +3296 2337 7D , +3325 2337 2V , +3354 2337 3P , +3412 2308 7K , +3493 2336 5X , +3548 2309 4H , +3628 2336 4J , +3661 2337 4O , +3719 2335 6P , +3792 2336 3X , +3876 2337 2V , +3905 2337 3P , +3963 2336 6R , +4024 2335 3B , +4079 2336 3X , +4187 2337 5V , +4275 2336 3L , +4325 2337 3P , +4383 2336 3L , +4433 2308 7K , +4489 2335 6P , +4537 2337 3Z , +4584 2336 4U , +719 2180 5H , +819 2181 4O , +877 2179 6P , +925 2181 3P , +1022 2180 3L , +1111 2179 6H , +1153 2180 4J , +1186 2181 3Z , +1225 2181 2V , +1255 2181 3P , +1313 2152 7K , +1408 2181 2V , +1437 2179 6H , +1518 2181 3Z , +1558 2179 6P , +1605 2179 3N , +1650 2179 6P , +1698 2181 2V , +1727 2180 4S , +1783 2179 6P , +1831 2180 6R , +1932 2179 3B , +1987 2181 3P , +2091 2179 5J , +2143 2181 0S , +2211 2179 5L , +2271 2179 5J , +2323 2181 2X , +2391 2179 1G , +2443 2181 5T , +2504 2166 5C , +2568 2180 4J , +2601 2181 4O , +2659 2179 6P , +2746 2153 6T , +2806 2181 3Z , +2846 2179 3B , +2900 2152 7K , +2956 2181 3Z , +2995 2180 3L , +3045 2181 5V , +3175 2180 3L , +3225 2179 3N , +3269 2180 4J , +3302 2179 6H , +3384 2180 3L , +3434 2179 3N , +3478 2179 3N , +3523 2179 3B , +3577 2181 3Z , +3617 2180 6R , +3678 2181 2V , +3707 2181 3P , +3765 2152 7K , +3821 2181 7D , +3850 2153 4H , +3914 2180 11 47 /4O +$X +*WSETJ&)*Bs5<q8s5<q8s58CB5CagUzzzzzzzzzzz!!")@5Ce7!s5<q8s5<q8s5<pmJ&":!*WQ~> +, +3971 2181 2V , +4000 2180 4J , +4073 2180 3X , +4156 2181 3Z , +4196 2181 2V , +4225 2180 4J , +4258 2179 6P , +4305 2179 6H , +4388 2180 4J , +4421 2181 58 72 /4O +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qco"??GfF?_0Zp7?*;dfE5?Pos8W-!s7M]^ +s+AH!#Cl~> +, +4479 2179 6P , +4567 2180 4J , +4600 2179 6P , +4647 2181 1L , +4699 2180 4J , +4773 2181 2V , +4802 2181 3P , +4900 2180 4J , +4933 2181 4O , +4991 2179 6P , +719 2059 6P , +767 2061 3P , +825 2060 4J , +858 2061 3Z , +897 2033 4H , +993 2060 3X , +1076 2061 2V , +1105 2060 6R , +1167 2032 7K , +1222 2059 6P , +1270 2060 4J , +1342 2060 4J , +1375 2059 3B , +1469 2059 6H , +1511 2060 4J , +1544 2060 3L , +1594 2061 3P , +1652 2060 6R , +1713 2060 3L , +1763 2061 3Z , +1803 2060 6R , +1903 2059 3B , +1958 2060 4D , +2018 2060 4J , +2050 2033 6T , +2111 2060 4D , +2171 2060 4J , +2243 2040 5Z , +2283 2059 6F , +2343 2059 1Z , +2395 2061 5T , +2463 2059 5L , +2516 2040 6B , +2549 2046 23 61 /4K +$C +0k&hmpMY93^MeSYh=p[<GW$"$s8V\cKH39Qs(g>C'E~> +, +2613 2059 3N , +2657 2060 3L , +2707 2061 7D , +2736 2061 7D , +2766 2059 6H , +2853 2059 5L , +2913 2059 47 45 /1X +$C ++PbNY":bub6JI/]+?BW7cp>6;dVhoQ]fg:0<qZHofDkmNmA9jMDd-Gsf%O0Q[[%b4@>(^9K!A.h +L(kIQ~> +, +2965 2049 63 5 /4P +$C +,D.rM~> +, +3033 2059 1X , +3085 2042 56 62 /1I +$C +3!q,3aUeFOs8W,sL(f.]^j&07KBS.Ncm,Lc$,2!#oUEfYVpfsAH@Pgis8W,r?GEo@[G>\?a(]_F +m=`,+Ph9rm$$Ii'Xr("?'E~> +, +3153 2059 1Z , +3205 2061 5T , +3305 2060 4J , +3338 2059 3B , +3432 2059 3B , +3487 2033 6T , +3547 2059 6P , +3595 2061 3P , +3692 2060 4J , +3725 2061 4O , +3783 2059 6P , +3870 2061 4B , +3903 2061 2V , +3932 2061 7D , +3961 2059 6P , +4047 2061 3P , +4105 2060 3L , +4155 2061 5V , +4243 2059 6P , +4329 2059 3N , +4373 2060 4D , +4434 2061 3Z , +4473 2061 3Z , +4513 2059 6P , +4561 2061 3P , +4619 2060 4J , +4651 2061 7D , +4680 2033 4H , +4775 2061 2V , +4804 2061 3P , +4900 2060 4J , +4933 2061 4O , +4991 2059 6P , +719 1939 6P , +767 1941 3P , +825 1940 4J , +858 1941 3Z , +897 1913 4H , +978 1940 5X , +1033 1939 3B , +1088 1941 1L , +1164 1920 5Z , +1206 1939 1X , +1258 1922 1I , +1326 1939 1Z , +1378 1941 5T , +1439 1920 6B , +1472 1926 4K , +1522 1939 3B , +1577 1941 3Z , +1641 1941 3Z , +1681 1939 6P , +1729 1940 4J , +1761 1940 4D , +1822 1941 3Z , +1861 1941 3P , +1919 1939 6H , +1987 1941 4B , +2020 1941 3Z , +2060 1939 3B , +2114 1941 5V , +2227 1940 4J , +2260 1941 4O , +2318 1939 6P , +2391 1913 6T , +2451 1941 3Z , +2491 1939 3B , +2545 1939 3N , +2590 1939 6P , +2638 1939 6H , +2680 1939 6H , +2722 1941 2V , +2752 1941 3P , +2810 1912 7K , +2890 1941 7D , +2919 1939 3B , +2974 1939 3B , +3029 1913 6T , +3114 1920 5Z , +3156 1939 1Z , +3208 1941 0T , +3276 1941 3W , +3328 1939 4T , +3389 1920 6B , +3430 1940 4U , +cleartomark end end pagesave restore showpage +%%PageTrailer +%%Page: 6 6 +%%BeginPageSetup +GS_pswrite_2_0_1001 begin +612 792 /letter setpagesize +/pagesave save store 100 dict begin +0.1 0.1 scale +%%EndPageSetup +gsave mark +K +Q q +0 0 6120 7920 re +Y +2796 7462 32 7 /6A +$C +0H"*/rO`~> +, +K +2854 7438 48 71 /7O +$C ++p(%4KFSZi(W2n2h'V@jolQ\l9)I&Oe\CGM[K$:"s46M=rM?p1\I`_s?%WH,.be2cg>Ra)@(&#k +^%Zs0]tN:Y]654)DSr^;LC?.MiIcbZ@6a~> +, +2929 7462 6A , +1089 7100 40 54 /6B +$C +,D/u\C.NjSs8W-!s8W-!s5h(sT=#q/s8RQ(]GMcm6ZCNl:]~> +, +1140 7098 42 42 /1Y +$C +.EZ`;KH),n#=Lqj":`^D\kUUk:J&5_DbobKli7"^?[CH*g0_:R[&p0Z(;gGG"qXfbe1dQ38;.~> +, +1195 7100 42 39 /5Z +$C +,D/u\C/Fs1s8W-!s81[ILR($hp;&?uC$gU.*J4YuMW(Uj'LP[~> +, +1269 7089 14 66 /1E +$X +!#tu$!.4co!;HQh!Up-Z"5j:>#J^S[%tG1@++PF5*rnM*4odbHIK4`qHiSNoHiX'EquHKlp]1'h +p]1'hp]1'hp]1'hp]1'hquHWpquD*EHiSNoIK2P34odbH*rmA_*rlh%%tG2+#J^S["5j:>!Up*Y +!;HP=!.4c/!#ttE~> +, +1308 7087 20 51 /5P +$C +,JD]Qhm`?ln([a5rpB[]EW>Te&3=q!^T6YL2#~> +, +1362 7087 5P , +1417 7089 15 66 /2G +$X +?i]Zrp],[AHiQ>1*WR8^%fd,j#J^S[#J^H""5j4L!Up-Z!;HQh!;HQl!.4co!.4cq!.Fos!'UBH +!'UBH!'UBH!'UBH!'UBH!.Fos!.4co!.4eE!;HQh!;HTi!Up-Z"5j:>#N,j&#J^k#%tG`%*rnJ) +490a/p]0d`n,P]R~> +, +1529 7089 20 66 /6Z +$C ++dHh8M=jqWs8W-!s8Vrl:eDAOmEZffJ,fQKs8W,un%/g5gM.0_~> +, +1302 6998 43 42 /1O +$C +,TP#L&8#>o#A?74OQqE%jo#D[9RK$r^OP_N^O<i4p-YS`GDD9t#2F_.rjn\eJV:<EMT%qZ@6oSk'E~> +, +1358 7000 38 54 /4V +$C +,DN$XWNH4#s8W-!s8W-!s8W-!s8W+h"mbU~> +, +1408 6998 41 53 /0Q +$C ++pr&gi<,b:3[5fp76'KO+P.W`s8W-!s8W-!q)&U5qbp#bs8W,,~> +, +1529 6989 6Z , +1305 6898 36 42 /6T +$C +3g?-NOmn"#&:Fe?)%QiZi<JeD[pK+$,onI3YY&[9PQl@TTb&?"6]=EJcra9t4X^6@s(uR+\1h," +6fG2bC()8Se,~> +, +1424 6898 14 40 /1A +$X +!rsG$5Oa0tJ,''As8;opJ,"Ng5O]cQ#CldSzzzzzz!!!*$+5fBQJ,"Ngs8;ops8;opJ+u7t5N!'f~> +, +1462 6917 46 17 /7B +$C +,D)aTW;jrsWD@7~> +, +1572 6904 41 43 /4R +$C +"JINC-p^aa'Hj(Q#V&Z&KG5Q&"[PIOJqOg\W%(gf0]@cq3,ZWg*&-?,%G5X;L)_o+]+,Zsgbp1O~> +, +1626 6923 42 4 /6J +$C +,D0PjVu~> +, +1678 6898 0Q , +1736 6900 38 56 /7N +$C +,DN$XWNH4#s8W-!s8W-!s-s8YmiVATs8W,W~> +, +1786 6898 0Q , +1844 6900 4V , +1895 6898 42 42 /5B +$C ++qA`!i<+`R#7-,NF9mg@JdnLoU`Vrs<Rl6lU)QS9o#/-4^?`AAm]E=%-#IHPQ%K4@6F@4M0N)1A~> +, +1951 6898 41 42 /0C +$C +.EY!]i<+`R#=MDD+G#<$)k_gt3^NJ=&(Q-Ds8DhWYG],6qeL-&>AIZ$Y[E9^iJR#A_J0Jja`R~> +, +2002 6900 46 54 /0Z +$C +,D,!,?Cf[7:U6\os8W-!s8W-!s8W-!s1eG:f%2HrQXR(+KY%uQln0,[L:I9`s7mW\It.~> +, +2058 6898 1O , +2111 6900 44 40 /0A +$C +-D7or'5@D&4N`HZs8W-!s8W-!s8W-!rr)e>>?nGN?J8::N#53m?)r\o6OH..~> +, +2218 6917 7B , +2275 6904 41 43 /6L +$C +,P3#tLCMmT_hK-biO]R:E5RDM2[hbX(i[BIiJ2:`KG5Q&"[PIOJqOg\W$k7L:kF?8"URL&JtT?M5Q~> +, +2376 6900 45 62 /0D +$C +5%HJKqu?]1qu;0GpYUJhs70nD?iMN062UZ=p](9jg]%,dD1@YgOE^a)qqL$.s8RFms8W*~> +, +2444 6899 66 44 /3W +$C +2j3BXZ;hLf*Ogh!Idd#JjDH(/hsfNJGMV$R^\>4ls1`Jjs7Yo.qsFE$pV$oohm,HL8%[XPhV3M6 +hmW7YH["6!IbhKVc*sqSC;[r5@I-.4_\cln[b,hDmDHG\LCXT?TP=~> +, +2514 6899 34 44 /2R +$C +1DUN]6.<oF*?]8dLIo3!dsOA%s1dIIOJ4"U,1U;G_2!!IiJ29a_sQ2s^$aYPDf6*PWsqE2%h'j?TE~> +, +2549 6899 31 44 /0L +$C +4<tIt60(gd6&1+4[,8UT^AdTuO6bb:YXorSK#1J%"d$S5$WIlXfB#5DrP&6Eg=lpg(fi??(ao~> +, +2584 6899 0L , +2619 6899 36 44 /3N +$C +0cI&%*mf#t%egJYG9W(>gHiOmgY9X5ms"0VDnCJcqql>YGPcaahsKmEs*&\dqqg3.^\6EjYepXL +_eom9\,~> +, +2651 6875 53 68 /7C +$C +3e`/.5X9nJ#sdGN"s+=nODdkEo\]WIpKat,V/:(GFK@=$KV=-b0PNh1K*tYdX]iF*hF%YU3'c\\ +kCa[oS'uJKmJG@^p\t0\s*aq%qB4h-g[1ll,PY]#JVH-m6%o~> +, +2704 6899 2R , +2746 6875 53 91 /0F +$C +/pKKAgYQ7"2\tk#Ic&u\rV-9*rpTjbs51TKrql`mJ,T9?(^`K[E:CsKCk)3Vrr73Ah<gGMqdEof +$/"\U\7%W~> +, +2787 6899 34 44 /7G +$C +32hc\n)+*$rSRS2rVM(o#`mj>me_FIGAInZ<l8*gFrp.mgMS*W%cP<[S,~> +, +2822 6899 37 44 /3B +$C +1_pW^6.$!ii<C;Fh(-s&^X@&XIsq:qrP/?fs1e#Hqu5L?n(PHZm^DE7_[Ih"<%su^J,~> +, +2862 6899 3W , +2955 6899 28 59 /0H +$C +4EMY6pUlCBg(!Q/Dn!!ds4dSNJ,aHemJl=b7H*40A?"J$J+ruWs+]Lkhu~> +, +2985 6899 24 65 /2J +$C +4Qnrems,k-_gFD\gj\_kn,DeS^\tqAJ*&8jfR,F.LPNN"+9#4.KAC_Je27~> +, +3010 6899 0H , +3040 6899 22 67 /0R +$C +2XooniU4eCkV2dMDoVhFs6fpaJ,aHemJlp1rpTmCs53SJs7u0(%WrUJ2u~> +, +3065 6899 2R , +3123 6899 39 67 /3D +$C +1`RWWK:qc_\j;+Ko\J9hqsWt?s)%eFqfgrTp@l9#n%X%^&cOG8,Mq=e[bnO*&(k[&gK+p'>T[JE +rr)lSpYW(1@dr1:3'9;~> +, +3165 6899 3N , +3205 6899 7G , +3262 6899 3D , +3304 6899 46 44 /7E +$C +1M&Y@cue7*hX>FS..0MEkSp1'h7%<@%u0F6^MU[=rVa@rqes)rhm\#pIG`q1pO@\]^A$JmINR=Y +_sSAur',O`iPFF~> +, +3354 6899 0H , +3384 6899 0H , +3414 6899 3B , +3454 6899 46 44 /3H +$C +3/WJZKEl?!mr86^7<dGo5DK&YnFutMhgb+.mJjrW^B@'ahm,CnqmQM'h<htcrP,hbc*qlHLY-s$ +0sTID%e/HF*Xr4e~> +, +3504 6899 0L , +1519 6798 0C , +1572 6798 1O , +1629 6798 6T , +1679 6798 5B , +1791 6798 6T , +1907 6789 6Z , +1525 6728 28 27 /5F +$C +3Lr3Fdng#Dl[RXgs8VD3?iU0)Ds`"D~> +, +1571 6698 5B , +1624 6700 46 38 /1G +$C +,D,!,?Cg=aGVWt6=D:u3)aR\#g/cY1Q*dZiD(B=)9#XuAl-k;W_kc*8km$B28\.XEDLubiFIRk) +j9)9MlV@~> +, +1682 6700 7N , +1732 6698 0Q , +1795 6728 5F , +1894 6717 7B , +1951 6704 6L , +1735 6600 5Z , +1787 6598 5B , +1840 6598 0Q , +1894 6598 45 40 /4X +$C +24P6g0HeTYT^;uY7s.?AQ]r?O57a[\huE`Vs8W-!s8W-!s8W,@W)HM??esW~> +, +1951 6600 5Z , +2003 6600 0A , +2064 6587 5P , +1522 6522 34 33 /0H +$C +5)jtIp[)goFLP<%g/kDYMR@11E'WRe6kKWY6nB,aJRI7K%`)Q&EW?(=p(R~> +, +1624 6517 7B , +1681 6504 6L , +1730 6400 50 38 /6H +$C +,T3QTor[V2r55mG]"e:BBn,tcheb%Hs3k[fIJs1f^\oS8m=50#Y.K.s5NuO)r^R2;!U6`b2#~> +, +1783 6400 53 40 /0W +$C +,D$Sb:*i!:X&[JDoe4)[s8W-!s8W-!s8W-!s8W-!s8VhCrSP!6GO6%aV'Cjf,a`@J2Cl/bg1i/] +_Na7$-i~> +, +1844 6400 4V , +1898 6400 7N , +1946 6398 47 56 /2N +$C +.aC\=8DsU[Ta0&X,<MN2+Q#HhqG#r\Du+BJmn`t1fDkmE^Xh$69D_@5G.uDlV:]3/_1GsMiJ$"E +K'&oMs8W,?i@Fg~> +, +2004 6423 6J , +2059 6404 6L , +2110 6398 0Q , +2168 6400 7N , +2218 6398 0Q , +2276 6400 4V , +2327 6398 5B , +2383 6398 0C , +2434 6398 0Q , +2492 6400 4V , +2565 6389 1E , +2596 6398 0Q , +2652 6398 1Y , +2702 6383 47 57 /3A +$C +,DOA<cbKM[s8W"e0*iX*5(hf*SGFJXpd)WXG_@%'ldL@4qtbgBs0_j7^Y2og=_!2QCaI_B.5_IK +JmF9$>VMlh.41\~> +, +2766 6387 19 26 /6R +$C +,LlJ^II@"0^AdT7hg]k-J,~> +, +2817 6398 6T , +2875 6389 2G , +2928 6387 5P , +1529 6289 20 66 /2S +$C +,F8(AGji9Es8W-!s8Vi\fK0T9V*t,4YQ+Y&s8W,tF]]pr;RKo*~> +, +1303 6098 0C , +1356 6098 1Y , +1405 6100 0W , +1532 6098 1A , +1570 6117 7B , +1680 6104 4R , +1734 6123 6J , +1789 6098 0C , +1837 6100 0W , +1896 6098 46 56 /4Z +$C +24TCB&8#?;%o5Ss3hSan^Hjg,%J6%[p%7qLp&Cris8W+7qu>C-g=ooW51j2q?%s!Y0UH7\$\l0" +Eh.4Ms8W"J"L#H~> +, +1951 6098 0C , +2002 6100 0Z , +2058 6098 1O , +2111 6100 0A , +2218 6117 7B , +2275 6104 6L , +2376 6100 0D , +2444 6099 3W , +2514 6099 2R , +2549 6099 0L , +2584 6099 0L , +2619 6099 3N , +2651 6075 7C , +2704 6099 2R , +2746 6075 0F , +2787 6099 7G , +2822 6099 3B , +2862 6099 3W , +2955 6099 63 44 /2Z +$C +,T0?rJV4N%FO5BG,$U1HkVeN@:I2S$\#/E)pY4Hin+Ub0htQJ]IJ_p:DVb?eGCB44n,%:sID>f# +[r3q/p\VFKhR;jVgW]a9]<1P8mau9r+qDJ?~> +, +3020 6099 2J , +3045 6099 43 67 /0T +$C +2Tg>sT_EOJ4l5WPG9_)!%H5%W2qu5t2V@a&hr!h1n*f"Lp.%=@f`0gcg\p#Z]>"19rn[I"^AYG* +0N_ht4;e]S(]T!Bn,*(`jM571,,5AQ~> +, +3082 6075 7C , +3135 6099 2R , +3170 6099 28 59 /3F +$C +4EMY6pUlCBg(!Q/Dn!!ds4dSNJ,aHemJl=b7H*40A?"J$J+ruWs+]Lkhu~> +, +3200 6099 0L , +3258 6099 35 44 /4A +$C +1_pW`#>ToG(S20sT\Ua.mI8\^s8VinIfJ0sh8mojqgIniD/;(a(g@t<*#L(~> +, +3295 6099 7G , +3330 6099 2R , +3365 6099 3N , +3405 6099 3F , +3435 6099 2R , +3470 6099 0T , +3538 6099 3N , +3578 6099 3D , +3620 6099 3B , +3660 6099 43 44 /0J +$C +3YW]YkW3fPA&8]>\j='f]f4iXn%ZKL^[8Z3^Y?N\[bpKP[r7VfmCiO:D7,,\@#SB.p@f#!,Zmk~> +, +3705 6099 2R , +1519 5998 0C , +1572 5998 1O , +1629 5998 6T , +1679 5998 5B , +1789 5998 0C , +1842 5998 1Y , +1891 6000 0W , +2015 5989 6Z , +1525 5928 5F , +1575 5898 6T , +1625 5898 5B , +1679 5900 0A , +1734 5898 4Z , +1795 5928 5F , +1894 5917 7B , +1951 5904 6L , +1737 5798 6T , +1786 5783 46 55 /0M +$C +/d:M:;ldCpqgSFVn%ZI%\RW3Hm[)\)p?@":?Z)4bV=s/%\mK?AgTRL?l+6_/^718$bs:pMG.#*~> +, +1845 5798 6T , +1896 5823 6J , +1951 5804 6L , +2000 5783 3A , +2059 5800 5Z , +2114 5800 7N , +2165 5800 0A , +2218 5798 0Q , +2295 5789 1E , +2335 5828 5F , +2381 5800 0A , +2436 5798 1O , +2485 5800 0W , +2543 5798 5B , +2648 5800 6H , +2706 5798 1O , +2763 5798 6T , +2828 5798 1A , +2924 5799 38 56 /4T +$C ++pEW?#>U*Fcp>?.-NC"Ds0_gkCMbR1-&rg?C2I@r$O/<$_1R@F"qD%](cX8WKg9l:ai4f%@-N;? +R,kO!6+TeTl[RC`s4ZAa<mnkn@]`!)(f1~> +, +2979 5798 6T , +3034 5792 34 68 /1X +$C +";M0D=&mkKl$DX+Y,eSgde(4+>ut%VF^9<"Q_j#JlFO.!Y=m=9]le&~> +, +3083 5800 0A , +3145 5828 5F , +3198 5787 6R , +3298 5798 0Q , +3354 5800 43 54 /0S +$C +,D7oY.\F=OlkqJ)l#aLB/sekG\m6qT95.h2MUknq^Mg@ODn"KgpA5B0gYokC$iBVSO8o7[r^R9%hu~> +, +3408 5823 6J , +3463 5804 6L , +3517 5798 0C , +3565 5800 0W , +3624 5798 4Z , +3699 5789 1E , +3730 5798 0Q , +3786 5798 1Y , +3836 5783 3A , +3900 5787 6R , +4009 5828 5F , +4070 5798 14 13 /5L +$X +!rsG$5Oa0tJ,''As8;opJ,"Ng5O]cQ#Cl~> +, +4109 5798 5B , +4218 5783 45 57 /2E +$C +-O)9opF=.7E8A.oqnN1,$nhlM&:H_S'Al'+^4Hgj%J6%P5.\JBp&Cris8VJ9Ir"psqeL$a5@H1^ +$$I.X64Ut:CLL0Z6RgL~> +, +4271 5798 5B , +4324 5798 0Q , +4387 5828 5F , +4441 5789 2G , +4495 5789 2G , +4548 5787 5P , +1525 5728 5F , +1572 5698 1Y , +1622 5683 3A , +1679 5698 5B , +1733 5700 0A , +1795 5728 5F , +1894 5717 7B , +1951 5704 6L , +1734 5598 4Z , +1788 5598 1Y , +1835 5589 56 5 /5C +$C +-D468~> +, +1896 5598 1Y , +1946 5583 3A , +2003 5598 5B , +2057 5600 0A , +2133 5589 1E , +2164 5598 0Q , +2220 5598 1Y , +2270 5583 3A , +2334 5587 6R , +2434 5598 0Q , +2490 5600 0S , +2544 5623 6J , +2599 5604 6L , +2653 5598 0C , +2701 5600 0W , +2760 5598 4Z , +2835 5589 1E , +2866 5598 0Q , +2922 5598 1Y , +2972 5583 3A , +3036 5587 6R , +3145 5628 5F , +3206 5598 5L , +3245 5598 5B , +3354 5583 2E , +3407 5598 5B , +3460 5598 0Q , +3523 5628 5F , +3577 5589 2G , +3631 5589 2G , +3684 5587 5P , +1525 5528 5F , +1571 5498 5B , +1624 5500 1G , +1682 5500 7N , +1732 5498 0Q , +1795 5528 5F , +1894 5517 7B , +1951 5504 6L , +1735 5400 5Z , +1787 5398 5B , +1840 5398 0Q , +1894 5398 4X , +1951 5400 5Z , +2003 5400 0A , +2064 5387 5P , +1529 5289 2S , +1313 5189 2S , +1097 5089 2S , +719 4919 77 70 /1H +$C +/d_ribJ29<O`89m(g$03D:`"Cqka1(IsocD[(gLij0e8bea:smqb-YKXh*hJBn"l\\+Hlk/,QKX +rg!GYIs#nSX6TPreb+?8~> +, +797 4919 28 72 /4F +$C +0EsY0/Z\pOs8W-!s8W-!s8W-!s8W-!s8W-!lS&`s4p`JB2)k~> +, +826 4918 33 63 /7H +$C +22MSu?.7U@]^UPYFoVLAs8W-!s8W,u?o*0m2B4J$*'aK's6osmLPLB~> +, +858 4919 58 72 /4O +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qco"??GfF?_0Zp7?*;dfE5?Pos8W-!s7M]^ +s+AH!#Cl~> +, +917 4917 52 49 /5Z +$C +-,RJ#Jd4TY+S0[\0^1M^2l>gu<qXnToWS5,FoUmEs8W%)rjpk_Fh_cG[d)RJ9#F9R9#61SMQibj +PlW!~> +, +971 4918 59 48 /4D +$C +,6G^d:()^rSt(K"WZ[OKKH'R@829B/hbX7Os8W-!s8W-!s8W-!s8K(pJ6^S3s7>3jJF\7`JS/"W +3,n?~> +, +1032 4890 55 76 /7K +$C ++p6(UU(D9p_BI4g&2<;jh&tN#o\CkkFnFSgJ,d.Xs(u]/=CJ9h&r&_O@t^O*>/J*d6!EuahV:&- +aAQDs_@@-!5s.7@DNJb"HG82g\$+]hs53/>Bn"bZS_ZAA[]D/Z`.uhrTnOs!J,~> +, +1087 4919 4O , +1181 4918 7H , +1214 4919 4O , +1272 4919 28 69 /2V +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +1301 4917 40 49 /6H +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +1378 4917 46 49 /3R +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +1426 4919 51 47 /1L +$C +0HhbLCT6iu*o7X>[[4%/>?fXbXeft#>>!^U>GYf:I8\U0m^,;BmF&STVWhAmPBq,U8\.XIjoKYt +a@E.\>`fE~> +, +1477 4918 48 48 /3L +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +1527 4919 88 47 /5V +$C +0Eoc'K:jmrq)D8+/;`aO>(?SPs8W-!s8W-!s8W-!s8W-!s8W-!ri?'Cm5<d*9l_ZL&>Ouf@AMUU +!4rFJ@)DUq/%!gM.m^-W@A]^a-57F:+CLi~> +, +1616 4891 56 75 /3V +$C +/d=P.LUCpts8W-!s8W*W++t[YiU7o"_nlWIR!K5#0_F9"If'$2n,<4bs7cQnYPu4PGO6ub73.&n +$mep_/@[=OG.U\h_[93uT^3@4(ao~> +, +1676 4919 4F , +1705 4917 3R , +1788 4918 4D , +1848 4917 6H , +1891 4917 3R , +1939 4917 6H , +2015 4918 3L , +2100 4919 60 69 /6D +$C +226&?X:j(Vs8W-!s8W-!s8W-!s8W-!s3*SAs8Vcls8W)e]ja4A~> +, +2161 4918 56 73 /3H +$C ++LJp$5kmV@ADpOa$L)XK9;U)$FLka1QV41'l#aLB/sf3GX^kL=qgH2riP+2XpA99P(k'-9mIh'p +IJ`R7s8W-!s8K>)a7J5P5dOC>~> +, +2252 4918 7H , +2285 4917 3R , +2332 4919 1L , +2384 4918 7H , +2453 4917 3R , +2501 4919 58 47 /6N +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qcY0ReuU^)_0-YK@^p/t4&U'%SJqnU0Mh~> +, +2559 4918 7H , +2592 4919 38 47 /3Z +$C +0H#A^_V2d)s8W-!s8W-!hqnUF[?3rg<K18!0`S\NG9dORiPEE.~> +, +2631 4891 55 74 /7F +$C +3%Y6hmI,4)4=>r&qn9amhgXIsrOVILFl0+]j?`gAhs!)u2d]ipr?hQFX8\<4pIY>3Is(D_lMA*j +\l\aa"r!=,"Tb7n~> +, +2723 4918 82 48 /3X +$C +--V`>h0uuM[/YPgrB9d@+!SJRhOje2e\;&ZVUk)5[%C.MH@FT)^[7iQJ+m9?>HRpIY?pm>YNtG4 +lW<i0='tEF]"Q[tSt*;=F&6Q9h].OYhu~> +, +2806 4919 2V , +2835 4918 59 74 /6R +$C +,6PadBFG%9o].Bt<'f[3Jd*;_2s<!EI=:?D^Ak&0qZ$Tqs8DutIK/3^Iqs28[alB*$o"p%K#8Q` +"?mZ-1+_tqs8W-!s8?J%(]Hk@a^F0ZLO]~> +, +2897 4890 7K , +2952 4917 3R , +3000 4918 7H , +3033 4904 23 27 /5C +$C +0k&hmpMY93^MeSYh7p_lq5@]N~> +, +3092 4919 60 56 /3S +$C +3XgW_qX=IL\M;mKlgOl.?hOHu^M^X[lgM9sli6p4hu:4egK+"!s8)]/rI=h#p$)/Ds6[#ds8A#O +rTi=4p$r(^riPMa&Ie=7Xo%#~> +, +3152 4919 61 43 /0S +$C +2AdhJ:_A3Oo1(F=qu?]rs8W-!s8W-!s8W-!s8W-!s8W-!pO;Seqb;8cG?JF`D.WiQ<gR9_Y1)/_ +(f=s(~> +, +3220 4919 45 60 /3U +$C +2@YoEU`9@6s8W-!s8W-!s8W-!s8W-!s3/9>qu~> +, +3280 4919 45 62 /0Y +$C +2@YoEU`9@6s8W-!s8W-!s8V[E,.I+BaFaHls6p~> +, +3332 4917 56 62 /3Y +$C +,Ap0V:'Cb1Tg"9*%d8k,,W$'NTS%Y>qG#tA:$KCgqg/:sYQ+Y&m<\c`f%9dlBk<=V[[1h`_[1Jp +-.o@;>VNZrEW?(=s7sI<pOE~> +, +3429 4891 3V , +3489 4919 3Z , +3529 4917 5Z , +3583 4918 55 47 /4S +$C +.aN80rp/h061h@qkr8H5rjSg"8c@(ef(At+5J$]0oUGf-2d]Y_\*g;!Eo<U`1]Mt~> +, +3640 4919 2V , +3669 4918 6R , +3730 4917 3R , +3778 4917 6H , +3857 4918 3L , +3943 4919 35 73 /6Z +$C +0Esb+"P*PPs8W-!s8W-!s8V6a07FEB%#Z/ks8W,Vqtkj:[L0nZ`p\\%_LM~> +, +3976 4918 4D , +4037 4919 6N , +4095 4917 42 49 /3N +$C +-,RJ0,D$.,dtC(&BFm314U.0';Uopg0D5AFqu:T"GOO;dD/K!tg22NP(b6GB_Li1('E~> +, +4139 4918 7H , +4172 4919 2V , +4201 4917 5Z , +4255 4919 6N , +4356 4919 48 60 /6D +$C +3#\:_Rc"/Fs8W-!s8W-!s8SZ":&Re)s8W)TmI%f]?&K12K-?0~> +, +4416 4919 0Y , +4476 4919 3U , +4536 4917 46 45 /1Z +$C ++O4a+i.reS6.$'k_BN_8!X@j2h&tE;W_I/@C:^R_oWehD^WDC>HN)Lg[CpEoV/7fdL6]!.K*7m( +:t.1mJq*~> +, +4588 4919 56 43 /5T +$C +1Bn:Ro[EN6F_)fts8W-!s8W-!s8W-!s8W)srHDINZ.ep"nC!a.@>)."]2rE/0VA~> +, +4656 4917 48 45 /1G +$C +3k744+D-15#AAdpoL9e"#TK*e&7PNu60UU_rVuijpY5GpI>50sLP@d5A2Znl&'+_Ml`/:<Y\T>r +/6!H_C23s&~> +, +4708 4919 0S , +4776 4917 1Z , +4865 4918 7H , +4898 4919 4O , +4956 4918 3L , +5006 4918 7H , +719 4771 3V , +779 4797 5Z , +834 4771 3V , +894 4797 6H , +967 4798 4D , +1027 4771 3V , +1118 4798 3L , +1199 4770 7K , +1255 4799 3Z , +1294 4798 3L , +1344 4771 3V , +1404 4799 4O , +1462 4799 2V , +1491 4797 3N , +1536 4798 3L , +1586 4799 4F , +1646 4798 6R , +1707 4797 3R , +1755 4798 4S , +1811 4799 2V , +1841 4797 3N , +1885 4797 3R , +1964 4798 7H , +1997 4799 4O , +2055 4798 3L , +2105 4798 7H , +2169 4798 3L , +2219 4799 4F , +2248 4799 4F , +2277 4797 5Z , +2332 4798 3X , +2415 4797 6H , +2488 4798 3L , +2569 4798 4D , +2629 4797 6H , +2672 4797 3R , +2720 4799 3Z , +2790 4798 7H , +2823 4797 5Z , +2909 4797 6H , +2951 4797 3R , +2999 4799 4F , +3028 4797 3R , +3076 4797 3N , +3121 4798 7H , +3184 4798 3L , +3265 4799 6Z , +3298 4799 2V , +3327 4799 4F , +3356 4797 3R , +3435 4798 51 73 /5X +$C +5EglT+SH@k^#U$'FpL$[_nllJqgH5-rV-'chuE_+s8Vrqrg*Md?)<,t[I'gC0OD_A]3VSk$n_r) ++92B@s8W+%2$O#4bf,_b~> +, +3490 4771 7F , +3577 4798 7H , +3610 4771 7F , +3665 4771 3V , +3725 4799 2V , +3754 4799 6N , +3813 4770 7K , +3900 4798 3L , +3981 4799 6N , +4039 4798 3L , +4089 4799 5V , +4177 4797 3R , +4225 4784 5C , +4281 4798 5X , +4336 4799 3Z , +4376 4797 5Z , +4430 4798 3X , +4514 4797 6H , +4556 4799 2V , +4585 4799 6N , +4643 4770 7K , +4730 4798 7H , +4763 4799 4O , +4821 4797 3R , +4900 4799 6Z , +4933 4799 2V , +4962 4799 4F , +4991 4797 3R , +719 4677 6H , +761 4651 7F , +817 4677 6H , +859 4678 7H , +892 4677 3R , +940 4679 5V , +1028 4664 5C , +1078 4677 5Z , +1133 4679 3Z , +1197 4678 3L , +1272 4679 5V , +1361 4679 2V , +1390 4679 1L , +1441 4678 7H , +1474 4678 4D , +1534 4679 3Z , +1574 4677 3R , +1647 4677 5Z , +1701 4679 6Z , +1759 4678 5X , +1815 4677 5Z , +1869 4678 7H , +1902 4679 4O , +1968 4678 11 12 /4U +$X +*rnNUJ&)*Bs5<q8s5<q8s5<pmJ&!-+~> +, +2037 4677 51 73 /0F +$C +3eBr>]F[%gd07f:#T.^j2hW.!H>cOTn(ZCm^V@hHl`-t<Tk"Qfa?[n4i6aRf>U9\C$@u_DF[QV( +6o1X#^sjhA>1_C+gk"A^mf2\K?1uk'fO6iM/21^fM\)S6K*<aDJ,~> +, +2090 4677 3R , +2137 4677 3R , +2211 4678 71 49 /5E +$C +3Y;p"JV5%#*oYRCLeDb7]`umol+.>ugT,GQYA_/4DuK(tg[4b6qda`^mrgeipV$Om^A[rcpODpe +[r;/PrVq*!ZQ"C3hY6a#]D]3Ll!&#bO0.kghg8E7eW\EsRXb~> +, +2283 4678 75 49 /1X +$C +4cl(.nk$p@#I`!/LOT!8pO2+,GOWNI[sf7_j*e]>rr)6!qu:TkmJjri[dO1-rqj=D&bZKkGJEiA +XH,SaDYri#pAMGe^"^!a\$sVa]tY'0H[b\^*Q&=gG/NZ_@?)9:pMenIGIrWc%NZMn%6s~> +, +2361 4678 26 74 /0W +$C +4QnmjiU7:$_r8<HGAE95s7ZKehtR$Is*rpUqsXQ5s6]jcn,M;>qlJ-\n8,!:*&m~> +, +2389 4678 27 72 /3Y +$C +1T2<V4lPiRgUL\cpjJ/%h>ata\,Wr9p\jjaid<iF$oP<-GDEgn2';iEpd*Bdn$m*~> +, +2417 4678 44 74 /1U +$C +-l*@R6-s^?pio*<2r!`a^>HQ3rnd+Wn%ZR7^YdlArpKdbqu,Bf&at2;g\1AMqgG^#@BRYYCd/HJ +>T2X@s7_$;n,E?gpb00C,h+@d%f~> +, +2471 4658 31 93 /5Z +$C +"KA5$<2ioaX%J_TkuZ=+f<21RX8]1"oY:G+s8W,ds8D]jp[@j)hqRkn]A*&HgV(4BmCQ0~> +, +2504 4679 48 69 /5S +$C +0FGP^n$52ZaH1;q]6<Sr]t8ITgUFe<mG#+^GIP22]tO;mGPhA[s8B.im<rhtm49s$@$QdRX[?,' +(f4`k^]~> +, +2554 4658 28 93 /6B +$C +3RbHUG4"&?]C+PE]C,RirpTT2^[Jr;^An65s3grIWrK*t='h6DF^7nJWD_7r<2jY:J,~> +, +2613 4679 6Z , +2646 4677 52 49 /3B +$C +-,RJ#Jd4TY+S0[\0^1M^2l>gu<qXnToWS5,FoUmEs8W%)rjpk_Fh_cG[d)RJ9#F9R9#61SMQibj +PlW!~> +, +2700 4679 3Z , +2765 4678 6R , +2826 4677 3R , +2874 4678 7H , +2907 4678 3L , +2957 4679 2V , +2986 4679 4F , +3015 4677 6H , +3065 4678 4U , +720 4438 47 67 /4B +$C +3Wia=KE<`/p:pY-jhY#(rT)FhoP`W:pA`nIDuIHErV-'DhgXJ[J*lt0g])3$rl9M8qfe,V,Z9-~> +, +770 4437 20 15 /6Y +$C +1`Rl=FT;<CC)Bb~> +, +795 4436 46 68 /3T +$C ++cA,X+G&LuG^0PWJd*8-D[F!LpXSNCl+6`$s*hQEWC"mhi,$GL>1J=YPlla\2du.2mJ4eHpOCor +g?ijri5$sgf!VGk$n,OTJ\V~> +, +845 4437 6Y , +920 4438 59 68 /4K +$C +2@X$h3"]p%s8W-!s8W-!s6"uU6NQC8&)SW7nDA/ng[FV0^]33ks6K]g?$]a-0U3!7"YF,d:]~> +, +981 4436 58 49 /5D +$C ++O3o@KZq=p%o5tr5s"jbOC&6G*ftjIJ+qRps8W-!s8W-!s8W-!rI2'2TU[h<s-\M160*QL5a,%I +_85%~> +, +1042 4436 32 65 /0F +$C +.EZ`8VbXVnZpArR#H(r/s8W-!s8W-!q/FU2G7Ntp8,rVhs7Ni+LP*L[~> +, +1075 4436 0F , +1109 4438 30 71 /5K +$C +0H#A(KA-A*s8W-!s8W-!s8?^e)F*gYGmktL:jE#]AO4eC?2sl,C=Fr1~> +, +1142 4438 59 47 /0D +$C +/fA4$TE!.:j:ducs8W-!s8W-!s8W-!s8W-!YP,S6V*Tg/bD(U.Ap1dlk(&#^$q:pOW&S<Uhu~> +, +1203 4411 53 74 /2W +$C +.D[AsDZh'_KH1WC*<HH/+N)'6OFMAAn#PpGs1R:dC)b'*fMKR%-!KV<_SXAk7^%/Xh2oL.5_/q@ +#W`G-%!08pdVi2YrRJT2p](9fs46"J6Xd$EXfDjY@q7A$$n,OUE:<~> +, +1284 4436 0F , +1317 4436 46 49 /2I +$C ++U++g6m1FjKH4dS%@Npn#4R8n%;9Hkde`s0run4!%=!O$"j!oDs6oj9f)MddD(?#G0i6DS%7:I2 +M4a~> +, +1367 4438 48 47 /4Z +$C +/eEgBrmgLT!f#.:D(C%AY*Hb9>H=m5Z.cU4?C.K]e(na+Lc`:/<p>%D:"!pg0H&WoFcbami7!mI +k=CR:hu~> +, +1417 4436 0F , +1475 4438 5K , +1509 4438 0D , +1570 4436 0F , +1603 4436 52 49 /7M +$C ++U++g6m-H$K]n$]*<H\uDNfBa^72=,YM9*AIfKHJs8W&LYOB6S^Uh#29@^83L6ODnTnNn(#T`~> +, +1684 4436 0F , +1717 4438 59 72 /2L +$C +/fA4$TE!.:j:ducs8W-!s8W-!s8W-!s8W-!YP,S6V1od-6]^VX]C=E\G.;'Nq#CBos8Vbn\7kod +_;m<nn9=~> +, +1778 4436 2I , +1853 4436 0F , +1886 4436 2I , +1936 4438 4Z , +1986 4436 0F , +2045 4438 82 47 /2O +$C +,6]M"h=[]<s0\utlW`*CC"M)"&:B+jl!8dG[nZ0pY@"\U^Zt+Lg:ut@XjZJ3Is^h[TCmWh[H[/3 +p?M[YK\^0XbG#hehs6@imtg$u2Z~> +, +2128 4438 5K , +2161 4436 58 74 /3V +$C +--g96$(;'KK@A;uOFBLHqIFR@!\e^-4qN$9VuE:%^]401s8W,ts8RNIhqHn'XgPSQ(h%6"pP4Jh +is#mPs8W-!s44J4)F*dD%jb[Ni:$~> +, +2222 4411 2W , +2278 4436 2I , +2328 4436 0F , +719 4282 60 69 /3F +$C +226&?X:j(Vs8W-!s8W-!s8W-!s8W-!s3*SAs8Vcls8W)e]ja4A~> +, +780 4282 4O , +838 4280 3R , +931 4280 52 62 /5L +$C ++rokY#W"`MK<U/9H6SI9Jd1>]"Q)ebODiWjSs/p#8cSY$^]4?6s0]W?Xo5C#XgD4-C[Eb.?%s!Y +(e]T6Yde+\@<)>Is8W'dK%Ji~> +, +991 4280 47 45 /1X +$C ++PbNY":bub6JI/]+?BW7cp>6;dVhoQ]fg:0<qZHofDkmNmA9jMDd-Gsf%O0Q[[%b4@>(^9K!A.h +L(kIQ~> +, +1043 4270 63 5 /4P +$C +,D.rM~> +, +1111 4280 1X , +1163 4263 56 62 /1I +$C +3!q,3aUeFOs8W,sL(f.]^j&07KBS.Ncm,Lc$,2!#oUEfYVpfsAH@Pgis8W,r?GEo@[G>\?a(]_F +m=`,+Ph9rm$$Ii'Xr("?'E~> +, +1231 4280 1Z , +1283 4282 5T , +1382 4282 6Z , +1415 4281 4D , +1476 4282 6N , +1534 4280 3N , +1578 4281 7H , +1611 4282 2V , +1640 4280 3B , +1694 4282 6N , +1790 4281 5X , +1845 4280 3R , +1893 4282 4F , +1922 4280 3B , +1977 4281 3X , +2099 4281 4D , +2159 4280 6H , +2202 4280 3R , +2250 4280 6H , +2330 4281 7H , +2363 4282 4O , +2421 4280 3R , +2508 4281 5X , +2563 4281 4D , +2624 4282 6Z , +2657 4282 6Z , +2690 4280 3R , +2738 4282 3Z , +2778 4280 3R , +2825 4281 6R , +2925 4282 33 69 /0P +$C +0H%XJ!UM?&s8W-!s8W-!s8W-!s8W-!s8W-!s)k!s!MdF~> +, +2967 4270 45 85 /3D +$C +/mdGEmJh+ZpA_VhqgRGrrP*:*rnk3Ps)6ZcrP.asIc%X5^Mhm+hm`"MJ(s\q^Mj!W~> +, +3019 4280 78 73 /0R +$C +,@H[r)o3*1<Y05+0Q?6.V[a8(LHu..-Kt^T-L!H]kr22IF`1>_e^_?U^A@/FfA$7RlMpnas8Uo) +YM8pQosObaCO3S[Xeg0KQI<4+2O1YN0U7A(:r.`[a?P@e6A#FG6+Ja%,Q~> +, +3138 4282 5V , +3226 4280 3B , +3281 4281 6R , +3342 4281 4D , +3402 4282 4F , +3431 4280 3R , +3517 4282 56 56 /1I +$C +4rUd=%c$9jZ$84^mJ$#Bs)7r;p$8gX>qQcK/dYu&YZo9^pc$)$^MgU=hgb\+s%E<:>qQqF;rOoQ +$Get~> +, +3577 4280 56 44 /6N +$C +,i""TKGgGEK="%NoE_*ncnOSP#WMH?#HR+dp](9ns8W-!s8W-!s8W-!s6%7`i:[+oJ,~> +, +3645 4282 6D , +3705 4282 0Y , +3765 4280 1X , +3857 4281 7H , +3890 4280 3B , +3984 4282 3Z , +4024 4280 3R , +4071 4281 3L , +4121 4281 6R , +4222 4282 4F , +4251 4282 2V , +4280 4282 58 47 /3P +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qcY0ReuU^)_0-YK@^p/t4&U'%SJqnU0Mh~> +, +4338 4280 3R , +4386 4280 6H , +4467 4282 6Z , +4500 4282 3Z , +4540 4280 3B , +4594 4282 5V , +4722 4281 7H , +4755 4282 4O , +4813 4280 3R , +4900 4282 6Z , +4933 4282 2V , +4962 4282 4F , +4991 4280 3R , +719 4162 3P , +777 4161 3L , +827 4162 5V , +915 4160 3R , +963 4161 6R , +1049 4162 2V , +1079 4162 3P , +1162 4161 7H , +1194 4162 4O , +1253 4160 3R , +1325 4160 3R , +1373 4162 3P , +1432 4161 7H , +1464 4162 3Z , +1504 4134 7F , +1584 4161 3X , +1668 4162 2V , +1697 4161 6R , +1758 4133 7K , +1813 4160 3R , +1861 4161 7H , +1919 4161 3L , +1969 4162 3P , +2027 4161 6R , +2113 4161 3L , +2163 4161 6R , +2224 4161 6R , +2310 4161 7H , +2343 4162 4O , +2401 4160 3R , +2449 4162 5V , +2562 4161 7H , +2595 4160 3B , +2675 4161 7H , +2707 4162 4O , +2765 4160 3R , +2838 4161 7H , +2871 4160 3R , +2919 4162 1L , +2970 4161 7H , +3028 4160 3N , +3072 4161 4D , +3133 4162 3Z , +3172 4162 3Z , +3212 4160 3R , +3260 4162 3P , +3318 4161 7H , +3350 4162 4F , +3380 4134 7F , +3460 4162 2V , +3489 4162 3P , +3572 4161 7H , +3605 4162 4O , +3663 4160 3R , +3736 4161 7H , +3769 4160 3R , +3817 4162 1L , +3868 4161 7H , +3926 4161 3X , +4009 4162 2V , +4038 4161 6R , +4099 4133 7K , +4155 4160 3R , +4203 4161 7H , +4289 4160 15 14 /4I +$X +"2GHB5Q!bFJ,XrsJ,XrsJ,XrsJ,V\1+8>rR~> +, +4325 4160 52 58 /1V +$C ++Dt22n;'$mK;'!rU-/Uq+pCM##-'`as8W-!s8W-!s8P8$eb5lLs8W-!qLA~> +, +4394 4161 4U , +870 3999 46 56 /0I +$C +24TCB&8#?;%o5Ss3hSan^Hjg,%J6%[p%7qLp&Cris8W+7qu>C-g=ooW51j2q?%s!Y0UH7\$\l0" +Eh.4Ms8W"J"L#H~> +, +924 3999 1Y , +971 3990 56 5 /5C +$C +-D468~> +, +1032 3999 1Y , +1082 3984 3A , +1139 3999 5B , +1193 4001 0A , +1269 3990 1E , +1300 3999 0Q , +1356 3999 1Y , +1406 3984 3A , +1478 3999 1A , +1573 4001 42 39 /1I +$C +,D/u\C/Fs1s8W-!s81[ILR($hp;&?uC$gU.*J4YuMW(Uj'LP[~> +, +1625 3999 5B , +1683 4001 40 54 /6B +$C +,D/u\C.NjSs8W-!s8W-!s5h(sT=#q/s8RQ(]GMcm6ZCNl:]~> +, +1788 4001 42 51 /1C +$C +1CU:4e;SnWs8W-!s8W-!s8W'gZ`RR6s8W-!plFn~> +, +1842 4001 43 54 /5J +$C +,D7oY.\F=OlkqJ)l#aLB/sekG\m6qT95.h2MUknq^Mg@ODn"KgpA5B0gYokC$iBVSO8o7[r^R9%hu~> +, +1896 4024 6J , +1951 4005 6L , +2004 4001 1C , +2058 3999 1Y , +2108 3984 3A , +2168 4001 4V , +2219 3999 5B , +2270 4001 50 38 /3C +$C ++NIhb/bO$fDbof)Y-%#jHL#m,Fa\CN?!Gobe,GP\X*X'f\Jtl#!>Y(gTE~> +, +2327 3999 5B , +2384 4001 4V , +2442 3988 19 26 /6R +$C +,LlJ^II@"0^AdT7hg]k-J,~> +, +2547 4001 6B , +2600 4001 7N , +2654 4001 4V , +2705 3999 5B , +2774 3999 1A , +2871 3999 6T , +2920 3999 0Q , +2977 4001 1I , +3032 4001 7N , +3083 4001 0A , +3138 3984 2E , +3199 3990 2G , +881 3890 20 66 /2I +$C ++dHh8M=jqWs8W-!s8Vrl:eDAOmEZffJ,fQKs8W,un%/g5gM.0_~> +, +1088 3801 7N , +1140 3799 1Y , +1197 3801 6B , +1248 3799 0I , +1370 3799 1A , +1408 3818 7B , +1514 3799 2N , +1570 3799 4X , +1629 3801 6B , +1682 3801 7N , +1734 3799 1Y , +1788 3824 6J , +1843 3805 6L , +1896 3799 1Y , +1946 3784 3A , +2003 3799 5B , +2057 3801 0A , +2133 3790 1E , +2169 3801 6B , +2222 3801 7N , +2276 3801 4V , +2327 3799 5B , +2388 3788 6R , +2488 3801 45 51 /5H +$C +-D@8g_m_hOEB.'*^AYeFp](9FoY8i=E(c=E0j%Ob/uQdBiP+2f^V9aJs4@3&n<Ze";JI,=_QZi~> +, +2542 3799 4X , +2601 3801 6B , +2654 3801 7N , +2706 3799 1Y , +2760 3824 6J , +2815 3805 6L , +2866 3799 46 54 /0S +$C ++qA>jKFSQ8k_aQi+Pd/>TS%Q.PB<;m-M6uE4`C1Hf)D<As8VJ9hS6J3D1?CUgIg1(>A7;6g/]%_ +_1G];(f8)('E~> +, +2920 3801 49 51 /5L +$C +-D?r^*n0hGT5o4Rl`Wt[/slE?0"im(9;TL2/69"Eo(3HWj5I]kmIpGSs*t(II<GQ_KXtF<,asIZ +YcJN~> +, +2974 3801 43 51 /0W +$C +-D@p:I?P3As8W-!p:0^le,TIGJ,HPNs8W)M*`@DNs8W-!s2h2ts*+~> +, +3025 3801 52 51 /7F +$C +-D3Z'#hSdJ)%qG-^9.?^>@1aG^9.16I:\c"?WZrfmB<_J?WZrfmB<_J?WUObmB<_J=dV/E]D~> +, +3082 3801 43 51 /1M +$C +-D?cY_m_VM5r^g@HoKrlg[FUG^Ams)s8W-!s8VE`J$6#h](ER>H<_c@5pXquon?eH~> +, +3145 3790 2G , +3198 3788 5P , +1088 3701 7N , +1143 3701 6B , +1215 3690 1E , +1250 3701 7N , +1302 3699 1Y , +1359 3701 6B , +1410 3699 0I , +1516 3718 7B , +1570 3718 7B , +1679 3701 0A , +1736 3701 7N , +1790 3701 4V , +1849 3690 2G , +1907 3690 2I , +1298 3601 50 38 /6H +$C +,T3QTor[V2r55mG]"e:BBn,tcheb%Hs3k[fIJs1f^\oS8m=50#Y.K.s5NuO)r^R2;!U6`b2#~> +, +1351 3601 53 40 /0W +$C +,D$Sb:*i!:X&[JDoe4)[s8W-!s8W-!s8W-!s8W-!s8VhCrSP!6GO6%aV'Cjf,a`@J2Cl/bg1i/] +_Na7$-i~> +, +1412 3601 4V , +1466 3601 7N , +1514 3599 2N , +1572 3624 6J , +1627 3605 6L , +1680 3599 0I , +1736 3601 7N , +1788 3599 1O , +1844 3601 4V , +1896 3599 1Y , +1950 3584 2E , +2025 3590 1E , +2056 3599 0Q , +2112 3599 1Y , +2162 3584 3A , +2226 3588 6R , +2335 3629 5F , +2381 3599 5B , +2437 3601 1I , +2491 3601 1I , +2544 3599 1Y , +2599 3601 1I , +2706 3624 6J , +2763 3601 6B , +2814 3584 2E , +2923 3601 1I , +2975 3599 5B , +3030 3599 0I , +3091 3629 5F , +3144 3588 6R , +3253 3629 5F , +3298 3599 0S , +3350 3584 3A , +3407 3599 5B , +3461 3601 0A , +3573 3601 6B , +3626 3601 7N , +3680 3601 4V , +3731 3599 5B , +3793 3629 5F , +3846 3588 6R , +1521 3499 6T , +1570 3484 0M , +1629 3499 6T , +1680 3524 6J , +1735 3505 6L , +1791 3499 6T , +1838 3484 3A , +1897 3501 1I , +1952 3501 7N , +2003 3501 0A , +2056 3499 0Q , +2133 3490 1E , +2173 3529 5F , +2222 3500 4T , +2277 3499 6T , +2342 3499 1A , +2438 3500 4T , +2491 3501 1I , +2551 3529 5F , +2604 3488 6R , +2709 3501 6B , +2762 3501 7N , +2816 3501 4V , +2867 3499 5B , +2929 3490 2G , +2982 3488 6R , +3088 3499 34 58 /0K +$C +20(rQ6,F,&&^AZg\j?"2S(C^@8\b:$>Q=PLs8W-!s8W,6?h^bkIsTi*[^WB@Ya'hI=K>98L(r0'~> +, +3144 3488 6R , +3253 3529 5F , +3298 3499 0S , +3354 3501 5J , +3415 3529 5F , +3476 3499 1A , +3530 3499 1A , +3569 3501 0A , +3626 3501 7N , +3680 3501 4V , +3739 3490 2G , +3792 3488 5P , +1303 3401 1I , +1355 3399 5B , +1408 3399 0Q , +1462 3399 4X , +1519 3401 1I , +1571 3401 0A , +1632 3388 5P , +1097 3290 2S , +1084 3099 0Q , +1140 3101 5J , +1194 3124 6J , +1249 3105 6L , +1303 3099 0C , +1351 3101 0W , +1410 3099 0I , +1485 3090 1E , +1516 3099 0Q , +1572 3099 1Y , +1622 3084 3A , +1686 3088 6R , +1795 3129 5F , +1856 3099 14 13 /0U +$X +!rsG$5Oa0tJ,''As8;opJ,"Ng5O]cQ#Cl~> +, +1894 3099 0Q , +2004 3099 0I , +2057 3099 5B , +2114 3101 4V , +2165 3099 5B , +2218 3099 0Q , +2273 3099 5B , +2386 3101 34 55 /0G +$C +,D/uZWR_%Ks8W-!s8W-!s8W-!s7m`"++rp3%tbiC%gSQu~> +, +2450 3099 0U , +2494 3099 0K , +2597 3099 5B , +2651 3101 0A , +2706 3099 0I , +2767 3129 5F , +2821 3090 2G , +2874 3088 5P , +1084 2999 0Q , +1140 3001 5J , +1194 3024 6J , +1249 3005 6L , +1303 2999 0C , +1351 3001 0W , +1410 2999 0I , +1485 2990 1E , +1516 2999 0Q , +1572 2999 1Y , +1622 2984 3A , +1686 2988 6R , +1795 3029 5F , +1843 2999 0C , +1894 2999 4X , +1951 3001 1I , +2007 2999 6T , +2058 2999 1Y , +2113 3001 1I , +2220 3024 6J , +2270 2999 2N , +2330 3001 7N , +2380 2999 0Q , +2431 3001 0W , +2490 2999 1O , +2540 2984 3A , +2653 2999 0C , +2704 2999 4X , +2761 3001 1I , +2817 2999 6T , +2868 2999 1Y , +2923 3001 1I , +2990 2999 0U , +3026 3001 6H , +3084 2999 1O , +3140 3001 7N , +3190 2999 0Q , +3253 3029 5F , +3307 2990 2G , +3360 2988 5P , +1089 2801 6B , +1140 2799 1Y , +1195 2801 1I , +1269 2790 1E , +1308 2788 5P , +1362 2788 5P , +1417 2790 2G , +1475 2790 2I , +1304 2701 4V , +1358 2701 7N , +1409 2701 0A , +1463 2699 5B , +1586 2699 1A , +1624 2718 7B , +1736 2701 7N , +1788 2699 1Y , +1845 2701 6B , +1896 2699 0I , +1964 2699 0U , +2004 2684 2E , +2057 2699 5B , +2110 2699 0Q , +2169 2699 6T , +2241 2690 1E , +2280 2729 19 27 /0Y +$C +,LlJ^IJr&M^AdT9Dguug[K~> +, +2332 2693 34 68 /1X +$C +";M0D=&mkKl$DX+Y,eSgde(4+>ut%VF^9<"Q_j#JlFO.!Y=m=9]le&~> +, +2381 2701 0A , +2442 2729 0Y , +2497 2690 2G , +2550 2688 5P , +1304 2601 7N , +1359 2601 6B , +1431 2590 1E , +1466 2601 4V , +1520 2601 7N , +1571 2601 0A , +1625 2599 5B , +1732 2618 7B , +1786 2618 7B , +1895 2601 0A , +1952 2601 7N , +2006 2601 4V , +2065 2590 2G , +1514 2499 2N , +1573 2501 1I , +1625 2499 5B , +1680 2499 1O , +1734 2501 5J , +1794 2488 5P , +1300 2399 0Q , +1356 2401 5J , +1410 2424 6J , +1465 2405 6L , +1519 2399 0C , +1567 2401 0W , +1626 2399 0I , +1701 2390 1E , +1732 2399 0Q , +1788 2399 1Y , +1838 2384 3A , +1902 2388 6R , +2011 2429 5F , +2072 2399 0U , +2110 2399 0Q , +2222 2401 7N , +2273 2401 0A , +2331 2399 6T , +2381 2399 5B , +2437 2401 1I , +2488 2399 0Q , +2597 2399 5B , +2651 2401 0A , +2706 2399 0I , +2820 2429 0Y , +2875 2429 5F , +2976 2404 42 45 /1A +$C +,;&rqs8W-!s!*/-4fK:us8W-!s8Vec~> +, +3086 2401 4V , +3140 2401 7N , +3191 2401 0A , +3245 2399 5B , +3307 2390 2G , +3360 2388 5P , +1097 2290 2S , +1084 2199 0Q , +1140 2201 5J , +1194 2224 6J , +1249 2205 6L , +1303 2199 0C , +1351 2201 0W , +1410 2199 0I , +1485 2190 1E , +1516 2199 0Q , +1572 2199 1Y , +1622 2184 3A , +1686 2188 6R , +1795 2229 5F , +1843 2199 0C , +1894 2199 4X , +1951 2201 1I , +2007 2199 6T , +2058 2199 1Y , +2113 2201 1I , +2220 2224 6J , +2274 2199 0I , +2327 2199 5B , +2385 2201 6B , +2436 2199 1O , +2488 2199 4X , +2546 2201 4V , +2596 2199 0Q , +2659 2229 5F , +2713 2190 2G , +2766 2188 5P , +881 2090 2S , +719 1920 0P , +753 1920 6Z , +826 1919 7H , +859 1920 4O , +917 1918 3R , +1005 1920 6Z , +1038 1920 2V , +1067 1920 4F , +1096 1918 3R , +1184 1918 3N , +1228 1919 3L , +1278 1920 3P , +1337 1920 3P , +1395 1918 3B , +1449 1919 7H , +1522 1919 5X , +1577 1918 3R , +1665 1918 3B , +1720 1892 56 75 /3V +$C +/d=P.LUCpts8W-!s8W*W++t[YiU7o"_nlWIR!K5#0_F9"If'$2n,<4bs7cQnYPu4PGO6ub73.&n +$mep_/@[=OG.U\h_[93uT^3@4(ao~> +, +1780 1918 3R , +1828 1920 3P , +1886 1918 3R , +1934 1919 59 74 /6R +$C +,6PadBFG%9o].Bt<'f[3Jd*;_2s<!EI=:?D^Ak&0qZ$Tqs8DutIK/3^Iqs28[alB*$o"p%K#8Q` +"?mZ-1+_tqs8W-!s8?J%(]Hk@a^F0ZLO]~> +, +1995 1905 23 27 /5C +$C +0k&hmpMY93^MeSYh7p_lq5@]N~> +, +2067 1918 52 62 /5L +$C ++rokY#W"`MK<U/9H6SI9Jd1>]"Q)ebODiWjSs/p#8cSY$^]4?6s0]W?Xo5C#XgD4-C[Eb.?%s!Y +(e]T6Yde+\@<)>Is8W'dK%Ji~> +, +2127 1918 47 45 /1X +$C ++PbNY":bub6JI/]+?BW7cp>6;dVhoQ]fg:0<qZHofDkmNmA9jMDd-Gsf%O0Q[[%b4@>(^9K!A.h +L(kIQ~> +, +2179 1908 4P , +2247 1918 1X , +2299 1901 56 62 /4G +$C +3!q,3aUeFOs8W,sL(f.]^j&07KBS.Ncm,Lc$,2!#oUEfYVpfsAH@Pgis8W,r?GEo@[G>\?a(]_F +m=`,+Ph9rm$$Ii'Xr("?'E~> +, +2367 1918 1Z , +2419 1920 5T , +2520 1918 3N , +2564 1919 3L , +2614 1920 4F , +2643 1920 4F , +2673 1918 40 49 /3J +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +2753 1920 59 42 /3O +$C +.En\QohYJ]jr\`Q9RhBgrn!t<huDF/ldtg:S+$CWBlou^n*MdCl9;T4J,c[8hqsLnFh[nRi%@<M +4o<_~> +, +2813 1920 61 43 /0S +$C +2AdhJ:_A3Oo1(F=qu?]rs8W-!s8W-!s8W-!s8W-!s8W-!pO;Seqb;8cG?JF`D.WiQ<gR9_Y1)/_ +(f=s(~> +, +2881 1920 3U , +2941 1920 45 62 /3W +$C +2@YoEU`9@6s8W-!s8W-!s8V[E,.I+BaFaHls6p~> +, +2993 1918 56 62 /1A +$C +,Ap0V:'Cb1Tg"9*%d8k,,W$'NTS%Y>qG#tA:$KCgqg/:sYQ+Y&m<\c`f%9dlBk<=V[[1h`_[1Jp +-.o@;>VNZrEW?(=s7sI<pOE~> +, +3061 1946 47 4 /5F +$C +/ddj:TE~> +, +3121 1924 46 48 /2J +$C +0W7)r4)i)l*&-_=DA[?1L)l$X3,TRP_hK1e%DrYmE5TO"&5\Vq#Uhu*$50#*"UHMK&6'>dT`k`h +$A*pH(9An~> +, +3181 1918 5L , +3241 1920 3W , +3301 1918 1G , +3361 1920 3U , +3421 1918 1X , +3481 1901 50 62 /6J +$C +,QSa(*Ou4e)i(n?qnDP!s33hh+FG=,:SK,l5_4^;62F=JK7,(0FIu?9:]Jjms8W-![D2[BrN6%# +Zrm3>FrL(k?%WGSF&jf"@>.Nd$i~> +, +3574 1919 7H , +3607 1918 3B , +3702 1892 3V , +3762 1918 3B , +3817 1892 3V , +3917 1919 4D , +3977 1892 3V , +4077 1919 3L , +4167 1919 6R , +4228 1920 2V , +4257 1919 3L , +4307 1891 7K , +4363 1920 3P , +4421 1918 3B , +4476 1918 3J , +4518 1919 7H , +4551 1920 2V , +4580 1918 3N , +4665 1920 5V , +4753 1918 3R , +4801 1918 3J , +4844 1918 3J , +4886 1919 3L , +4936 1891 7K , +4992 1918 3R , +719 1772 3V , +779 1799 3L , +829 1800 3P , +887 1798 3R , +935 1800 4F , +964 1785 5C , +1017 1800 3Z , +1057 1799 3L , +1107 1799 7H , +1139 1800 4O , +1197 1798 3R , +1245 1800 3Z , +1314 1799 7H , +1347 1800 4O , +1405 1799 3L , +1455 1800 3P , +1541 1779 5Z , +1574 1798 3J , +1617 1799 3L , +1667 1772 55 74 /4H +$C +3%Y6hmI,4)4=>r&qn9amhgXIsrOVILFl0+]j?`gAhs!)u2d]ipr?hQFX8\<4pIY>3Is(D_lMA*j +\l\aa"r!=,"Tb7n~> +, +1722 1779 28 93 /6B +$C +3RbHUG4"&?]C+PE]C,RirpTT2^[Jr;^An65s3grIWrK*t='h6DF^7nJWD_7r<2jY:J,~> +, +1782 1772 3V , +1842 1800 3Z , +1882 1800 2V , +1911 1800 3P , +1969 1799 7H , +2001 1800 2V , +2031 1800 3P , +2089 1771 7K , +2172 1799 3L , +2249 1800 5V , +2337 1798 3R , +2385 1798 3J , +2428 1798 3J , +2470 1799 3L , +2520 1771 7K , +2576 1798 3R , +2650 1799 7H , +2683 1798 3B , +2765 1798 3J , +2807 1799 7H , +2840 1799 3L , +2890 1800 3P , +2948 1799 6R , +3009 1799 3L , +3059 1800 3Z , +3099 1799 6R , +3187 1798 3R , +3235 1800 3Z , +3274 1800 3Z , +3314 1798 3B , +3368 1800 3Z , +3408 1785 5C , +3462 1799 3L , +3512 1800 3P , +3570 1799 6R , +3658 1800 3Z , +3698 1798 3R , +3745 1799 7H , +3778 1799 4D , +3838 1800 3Z , +3878 1800 3P , +3936 1798 3J , +3986 1799 4U , +4056 1800 0P , +4090 1800 6Z , +4150 1799 7H , +4183 1800 4O , +4241 1798 3R , +4316 1800 6Z , +4349 1800 2V , +4378 1800 4F , +4407 1798 3R , +4482 1799 3X , +4565 1799 3L , +4615 1798 3J , +4684 1798 3B , +4739 1772 3V , +4799 1798 3R , +4847 1800 3P , +4905 1798 3R , +4953 1799 6R , +5014 1785 5C , +726 1678 5L , +786 1678 1X , +838 1668 4P , +906 1678 1X , +958 1661 4G , +1026 1678 1Z , +1078 1680 5T , +1169 1679 6R , +1230 1678 3R , +1278 1680 4F , +1307 1678 3R , +1355 1679 7H , +1388 1678 3R , +1435 1678 3J , +1508 1679 7H , +1541 1680 4O , +1599 1678 3R , +1677 1678 3N , +1721 1679 4D , +1782 1680 3Z , +1821 1680 3Z , +1861 1678 3R , +1909 1680 3P , +1967 1679 7H , +2030 1678 3N , +2074 1678 3B , +2129 1680 3P , +2187 1679 7H , +2220 1678 3R , +2268 1680 3P , +2326 1679 7H , +2358 1678 3J , +2431 1678 3B , +2486 1680 6Z , +2549 1679 7H , +2582 1680 4O , +2640 1678 3R , +2718 1680 6Z , +2751 1680 3Z , +2791 1679 3L , +2841 1680 5V , +2929 1678 3R , +2977 1665 5C , +3032 1679 3L , +3082 1680 3P , +3140 1679 6R , +3231 1680 3Z , +3271 1678 3R , +3318 1679 3L , +3368 1679 6R , +3429 1678 3J , +3502 1679 7H , +3535 1680 4O , +3593 1678 3R , +3671 1680 6Z , +3704 1680 2V , +3733 1680 4F , +3762 1678 3R , +3841 1680 2V , +3870 1680 3P , +3928 1679 7H , +3961 1678 3B , +4047 1680 2V , +4076 1679 7H , +4109 1665 5C , +4165 1680 2V , +4194 1680 3P , +4252 1678 3J , +4295 1678 3R , +4343 1680 3Z , +4382 1679 7H , +4415 1678 3J , +4488 1678 3B , +4543 1680 3P , +4601 1678 3R , +4680 1680 4F , +4709 1680 2V , +4738 1680 3P , +4796 1678 3R , +4875 1679 3L , +4925 1679 7H , +4989 1679 3L , +719 1559 7H , +752 1560 2V , +781 1560 5V , +869 1558 3R , +925 1559 4U , +995 1560 3F , +1056 1559 3H , +1140 1559 3L , +1190 1560 4F , +1219 1560 4F , +1248 1558 3B , +1303 1559 3X , +1386 1558 3J , +1456 1559 7H , +1489 1560 4O , +1547 1558 3R , +1623 1559 6R , +1684 1559 3L , +1734 1559 7H , +1767 1559 3L , +1845 1560 2V , +1874 1560 3P , +1932 1558 3J , +1975 1558 3R , +2023 1560 3Z , +2062 1559 7H , +2095 1558 3R , +2143 1559 6R , +2232 1559 7H , +2265 1558 3B , +2347 1558 3N , +2391 1558 3B , +2446 1560 3P , +2504 1559 7H , +2537 1559 3L , +2587 1560 2V , +2616 1560 3P , +2701 1558 3R , +2749 1560 5V , +2837 1559 5X , +2892 1558 3R , +2940 1559 6R , +3001 1559 6R , +3063 1558 3R , +3110 1559 6R , +3198 1560 3P , +3256 1558 3R , +3304 1559 3X , +3387 1560 4F , +3417 1560 2V , +3446 1560 3P , +3504 1558 3R , +3552 1558 3J , +3594 1545 5C , +3645 1559 3L , +3695 1560 3P , +3753 1559 6R , +3841 1559 3L , +3918 1560 5V , +4006 1558 3B , +4061 1560 3Z , +4100 1558 3R , +4176 1558 3R , +4224 1560 6Z , +4257 1560 6Z , +4290 1560 2V , +4320 1558 3N , +4364 1560 2V , +4393 1558 3R , +4441 1560 3P , +4499 1559 7H , +4558 1560 2V , +4587 1560 5V , +4675 1532 3V , +4735 1560 4F , +4765 1558 3R , +4812 1560 5V , +4901 1558 3R , +4949 1560 3P , +5007 1582 6A , +719 1439 7H , +752 1439 3L , +802 1439 7H , +834 1440 2V , +863 1438 3B , +918 1440 3P , +1009 1438 3N , +1053 1438 3B , +1108 1439 4D , +1168 1440 4F , +1197 1439 6R , +1290 1440 3Z , +1330 1438 3R , +1377 1439 3L , +1427 1439 6R , +1521 1439 5X , +1576 1440 4F , +1605 1438 3B , +1660 1438 3N , +1704 1439 3H , +1760 1438 3J , +1834 1438 3B , +1889 1440 6Z , +1954 1439 6R , +2015 1439 3L , +2065 1439 7H , +2098 1439 3L , +2180 1440 6Z , +2213 1440 3Z , +2253 1438 3B , +2307 1440 5V , +2428 1439 7H , +2461 1440 4O , +2519 1438 3R , +2599 1440 6Z , +2632 1440 2V , +2661 1440 4F , +2690 1438 3R , +2770 1439 3L , +2820 1440 3P , +2878 1439 6R , +2971 1440 2V , +3000 1440 3P , +3058 1438 3J , +3101 1438 3R , +3149 1440 3Z , +3188 1439 7H , +3253 1439 7H , +3286 1440 4O , +3344 1438 3R , +3392 1440 5V , +3480 1425 5C , +3537 1439 5X , +3592 1439 4D , +3653 1439 7H , +3717 1438 3J , +3759 1438 3B , +3814 1440 5V , +3902 1438 3R , +3982 1438 3N , +4026 1439 3L , +4076 1440 3Z , +4116 1438 3R , +4196 1440 2V , +4225 1438 3J , +4299 1440 3Z , +4339 1438 3R , +4386 1412 57 75 /5A +$C +,=.UUTKS!Ys8W-!s8W,i0IHuF$1o<*o_K^&&"nOq"<UE2o^ndPs%EClYQ+Y&qu?]`s1eG\mIpGH +fNSeECb:8CL,`^#>Hgm-#[d~> +, +4442 1439 4D , +4503 1440 2V , +4532 1440 3Z , +4571 1438 3R , +4619 1439 6R , +4688 1439 4U , +4763 1440 1H , +4873 1439 7H , +4906 1438 3R , +4953 1440 1L , +5005 1439 7H , +719 1320 6Z , +752 1320 2V , +781 1320 4F , +810 1318 3R , +893 1320 2V , +922 1320 3P , +1015 1320 0P , +1049 1320 3P , +1107 1320 6Z , +1140 1318 3R , +1188 1320 3Z , +1228 1320 3P , +1286 1318 3B , +1376 1318 3N , +1420 1318 3B , +1475 1320 3P , +1533 1319 7H , +1566 1319 3L , +1616 1320 2V , +1645 1320 3P , +1703 1318 3J , +1779 1318 77 71 /4A +$C +,=&o*!t[`V#=64K5_.]WbIRs<5mHuRS'uJOqJZ%VHN2m[s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8TL/cs\qRBI1I/p]~> +, +1857 1320 3P , +1915 1320 2V , +1944 1318 3N , +1988 1318 3B , +2043 1319 6R , +2104 1318 3R , +2186 1318 3N , +2230 1320 4O , +2289 1319 3L , +2339 1320 3Z , +2378 1319 3L , +2428 1318 3N , +2472 1319 7H , +2505 1318 3R , +2553 1320 3Z , +2592 1318 3J , +2669 1320 2V , +2698 1320 3P , +2790 1318 4A , +2868 1320 3F , +2929 1320 55 69 /3N +$C +0H%LnJ9qY"s8W-!s8V1Ls8W-!?gtT*q%-&Ks1eU6s,[3[q+1Pcs8W,o:72q?LG0'b?i~> +, +2985 1342 6A , +3018 1318 3R , +3066 1320 3P , +3124 1318 42 49 /6L +$C +-,RJ0,D$.,dtC(&BFm314U.0';Uopg0D5AFqu:T"GOO;dD/K!tg22NP(b6GB_Li1('E~> +, +3168 1318 3B , +3223 1319 6R , +3284 1320 2V , +3313 1320 3P , +3371 1291 7K , +3427 1305 5C , +3486 1319 3L , +3536 1320 3P , +3594 1319 6R , +3689 1319 7H , +3722 1320 4O , +3780 1318 3R , +3862 1319 5X , +3917 1292 4H , +3973 1319 7H , +4005 1318 3R , +4053 1318 3J , +4130 1318 3B , +4185 1320 6Z , +4252 1319 3L , +4336 1318 3J , +4378 1320 2V , +4407 1320 3P , +4466 1291 7K , +4521 1320 4F , +4550 1318 3R , +4632 1318 6L , +4676 1320 4O , +4735 1319 3L , +4785 1320 3Z , +4824 1319 3L , +4874 1318 6L , +4918 1319 7H , +4951 1318 3R , +4999 1320 3Z , +719 1200 5V , +807 1200 2V , +836 1171 7K , +892 1200 4O , +950 1199 7H , +1012 1199 5X , +1067 1198 3R , +1144 1198 3J , +1186 1172 3V , +1246 1200 4F , +1276 1200 2V , +1305 1199 7H , +1366 1199 3L , +1416 1198 6L , +1460 1200 3Z , +1500 1198 3B , +1554 1198 3J , +1597 1198 3J , +1668 1198 3J , +1710 1198 3R , +1758 1172 3V , +1818 1199 3L , +1868 1200 3Z , +1908 1199 3L , +1958 1199 7H , +1990 1198 3R , +2069 1200 3Z , +2109 1198 3R , +2156 1199 3L , +2206 1199 6R , +2267 1198 3J , +2318 1199 4U , +2397 1200 43 56 /5T +$C +4;sIXU`9@6s8W-!s8W-!s8W-!s8W,sn7knUJ,~> +, +2457 1198 1X , +2509 1198 1A , +2569 1198 6N , +2637 1200 6D , +2713 1198 4I , +2757 1181 6J , +2817 1198 1Z , +2869 1198 1V , +2937 1198 43 45 /6F +$C +--Bs+k9*%T&:G,"nKk6P"+"kk2m9\ds6X:'>#;Fq8V0QRcT29O5bS`qZp[t!6#*3fV#UJ^D6DID +fJ$MB6gQEDC((Zh~> +, +3020 1199 5X , +3075 1172 4H , +3161 1198 6L , +3205 1198 3B , +3260 1200 3P , +3318 1199 7H , +3351 1200 3Z , +3390 1199 3L , +3440 1198 3J , +3483 1199 7H , +3546 1200 2V , +3575 1198 3J , +3647 1171 7K , +3703 1199 4D , +3763 1199 3L , +3813 1200 3Z , +3852 1199 3L , +3902 1200 3P , +3961 1199 7H , +3993 1198 3R , +4041 1198 3R , +4089 1199 6R , +4181 1199 7H , +4214 1198 3B , +4299 1200 3Z , +4339 1198 3R , +4386 1199 3L , +4436 1198 3J , +4479 1198 3J , +4521 1198 3R , +4569 1200 5V , +4657 1199 5X , +4713 1200 4F , +4742 1198 3R , +4819 1198 6L , +4863 1198 3B , +4918 1200 5V , +5006 1222 6A , +719 1052 3V , +779 1080 4F , +808 1078 3R , +856 1079 7H , +889 1078 3R , +980 1078 4A , +1058 1080 3P , +1116 1080 2V , +1145 1078 6L , +1189 1078 3B , +1244 1079 6R , +1305 1078 3R , +1396 1078 6L , +1440 1080 4O , +1499 1079 3L , +1549 1080 3Z , +1588 1079 3L , +1638 1078 6L , +1682 1079 7H , +1715 1078 3R , +1763 1080 3Z , +1802 1078 3J , +1888 1080 6Z , +1921 1080 3Z , +1961 1078 3B , +2015 1080 5V , +2147 1079 7H , +2180 1080 4O , +2238 1078 3R , +2329 1079 5X , +2384 1079 4D , +2445 1080 6Z , +2478 1080 6Z , +2511 1078 3R , +2559 1080 3Z , +2599 1078 3R , +2646 1079 6R , +2750 1080 2V , +2779 1080 3P , +2837 1052 3V , +2897 1079 4D , +2958 1079 7H , +3033 1078 3J , +3075 1079 7H , +3108 1080 3Z , +3147 1078 3R , +3195 1079 3L , +3245 1080 5V , +3342 1079 4U , +3427 1080 1H , +3548 1052 3V , +3608 1080 3Z , +3648 1078 3B , +3702 1051 7K , +3758 1080 3Z , +3797 1079 3L , +3847 1080 5V , +3980 1079 4D , +4040 1078 3J , +4083 1080 2V , +4112 1080 3P , +4170 1051 7K , +4275 1080 5T , +4335 1078 1X , +4387 1078 1A , +4447 1078 6N , +4515 1080 6D , +4591 1078 4I , +4635 1080 48 43 /3J +$C +0H-5NSR;Ess8W-!s8Tdkms/EWheWql2"95c2)l)`$#mk,\7%cB:]~> +, +4695 1078 1Z , +4755 1078 1G , +4815 1078 5L , +4911 1059 5Z , +4944 1078 3B , +4999 1080 3Z , +726 958 45 59 /4P +$C ++O4a2:#LTO#X/h2Dk\k8oFNs;:#Q?+IJ%o9He868a',[C$!%@(J?fS"Pi0Ik-q#(86mtGl8:a[U +Y,ebI(%8@#hqHn0[Mmm.@)=+KZ!E($$D>6Q~> +, +778 941 57 61 /3R +$C +1^ptq+W\=9g\1T\DsmM*laeE-h'_qgrTWY4])$<YS$/^Tl+6_/^72='lfl"W]"Y>NX/kOJ@=k"( +:Aq2C~> +, +846 958 6F , +906 986 5F , +966 964 2J , +1026 960 3J , +1086 958 1Z , +1146 958 1G , +1206 958 5L , +1259 939 6B , +1343 959 7H , +1376 958 3B , +1482 960 6Z , +1515 958 46 49 /6P +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +1563 959 7H , +1596 958 6L , +1640 960 4O , +1749 959 5X , +1804 960 4F , +1833 958 3B , +1888 958 6L , +1932 959 3H , +1988 958 40 49 /3J +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +2082 958 3B , +2137 960 6Z , +2222 959 6R , +2283 959 3L , +2333 959 7H , +2366 959 3L , +2468 959 3X , +2551 958 3B , +2606 959 4D , +2666 960 4F , +2695 959 6R , +2808 959 7H , +2841 932 4H , +2896 932 3V , +2956 960 2V , +2985 958 6L , +3030 959 3L , +3080 960 4F , +3109 960 4F , +3138 932 4H , +3246 959 4D , +3306 958 3J , +3349 958 6P , +3455 958 4P , +3507 941 3R , +3575 958 6F , +3635 986 5F , +3695 964 2J , +3747 958 6N , +3807 958 1V , +3875 960 6D , +3927 958 1A , +3987 941 3R , +4047 958 1V , +4115 958 1Z , +4175 958 6F , +4280 959 7H , +4313 958 3B , +4420 960 6Z , +4453 960 2V , +4482 960 3P , +4541 959 6R , +4653 960 5V , +4741 959 3L , +4791 960 1L , +4843 960 2V , +4872 960 5V , +4960 959 3L , +5010 960 4F , +719 838 3J , +761 838 6P , +809 812 5A , +865 839 4D , +926 838 6P , +973 840 3P , +1032 838 6L , +1076 838 6P , +1124 838 3J , +1203 838 3B , +1258 840 6Z , +1329 838 4A , +1407 840 3F , +1468 840 3N , +1524 862 6A , +1557 838 6P , +1605 840 3P , +1663 838 6L , +1707 838 3B , +1762 839 6R , +1823 838 6P , +1871 839 6R , +1970 838 6L , +2014 840 4O , +2073 839 3L , +2123 840 3Z , +2162 839 3L , +2212 838 6L , +2256 839 7H , +2289 838 6P , +2337 840 3Z , +2376 838 3J , +2457 839 3L , +2507 840 3P , +2565 839 6R , +2664 840 2V , +2693 840 3P , +2751 838 3J , +2794 838 6P , +2842 840 3Z , +2881 839 7H , +2952 840 4F , +2981 839 3L , +3031 840 3Z , +3071 811 7K , +3126 838 6P , +3212 838 6L , +3256 840 4O , +3315 839 4D , +3375 840 3P , +3433 839 3H , +3489 838 3J , +3567 838 3B , +3622 840 6Z , +3692 839 7H , +3725 838 6P , +3772 840 1L , +3824 839 7H , +3895 839 3L , +3945 839 7H , +4015 838 3B , +4070 840 3P , +4128 838 6L , +4172 838 6P , +4228 839 4U , +4307 838 51 73 /0F +$C +3eBr>]F[%gd07f:#T.^j2hW.!H>cOTn(ZCm^V@hHl`-t<Tk"Qfa?[n4i6aRf>U9\C$@u_DF[QV( +6o1X#^sjhA>1_C+gk"A^mf2\K?1uk'fO6iM/21^fM\)S6K*<aDJ,~> +, +4360 838 6P , +4407 838 6P , +4493 839 7H , +4526 840 4O , +4584 838 6P , +4669 840 6Z , +4702 839 4D , +4763 840 3P , +4821 838 6L , +4865 839 7H , +4898 840 2V , +4927 838 3B , +4981 840 3P , +726 720 3U , +786 718 1X , +846 718 1G , +906 718 5L , +958 718 1V , +1026 720 6D , +1086 720 3W , +1146 720 3U , +1206 718 1Z , +1284 720 2V , +1313 720 3P , +1403 712 43 75 /1E +$C +4]cj`pO1qCh=pBMmea`e]C,R1rV(`tGMW"Ahfnt3n%8#b^@/]%s**;nICi;~> +, +1463 718 1G , +1515 701 4G , +1575 701 4G , +1643 720 3U , +1703 712 1E , +1755 720 3O , +1815 720 0S , +1883 712 1E , +1943 718 1Z , +2003 718 5L , +2063 720 3W , +2115 718 1V , +2199 718 4I , +2235 718 1A , +2321 720 6Z , +2354 718 3B , +2409 720 3Z , +2473 718 6P , +2521 720 1L , +2573 719 3L , +2623 720 5V , +2711 692 3V , +2771 720 4F , +2800 718 6P , +2856 719 4U , +cleartomark end end pagesave restore showpage +%%PageTrailer +%%Page: 7 7 +%%BeginPageSetup +GS_pswrite_2_0_1001 begin +612 792 /letter setpagesize +/pagesave save store 100 dict begin +0.1 0.1 scale +%%EndPageSetup +gsave mark +K +Q q +0 0 6120 7920 re +Y +2796 7462 32 7 /6A +$C +0H"*/rO`~> +, +K +2854 7440 51 69 /1K +$C +4ql]ErU'K+h=l9aqn9a^qnDN;gUHSIGMVZSqn9a_c;!a(h7r[`gY^c[\&J=Ef6JkX~> +, +2929 7462 6A , +720 7078 47 68 /1N +$C +3fZrD5m+sl%Z!;2&2<U+GYRGe2ll?3Utth's*h\nRRpqjf*2V?qUVca-K/p\k$^7Ls8W,i)H#,d +s80-R-i~> +, +770 7079 20 15 /2H +$C +1`Rl=FT;<CC)Bb~> +, +845 7080 58 68 /7G +$C +4q,'94n"JT*ZtF^qu>RBOg*aCs8W-!s8W-!s8W-!s8W,JT]X(grr~> +, +906 7080 30 71 /5K +$C +0H#A(KA-A*s8W-!s8W-!s8?^e)F*gYGmktL:jE#]AO4eC?2sl,C=Fr1~> +, +939 7080 86 47 /7I +$C +/f@-r.*sdMrB=m)FU+"'Bs740s8W-!s8W-!s8W-!s8W-!s8W-!s/Q+QIdM<I<5NE;3H3>8%'hj( +p6tFJT[_="2"DKC2$[PDT](P4'E~> +, +1028 7078 55 74 /2T +$C +.LKf,!c/Ep#WtK1LQKo%":RC8hODu?^>H[(s4dRgs8N&up&Fu?95CrQ9+2UOORMR[]3I5IiJ#/Q +a8c2>s8T9b_aj]R*_6nS,<,~> +, +1089 7078 52 49 /7M +$C ++U++g6m-H$K]n$]*<H\uDNfBa^72=,YM9*AIfKHJs8W&LYOB6S^Uh#29@^83L6ODnTnNn(#T`~> +, +1137 7078 38 74 /2X +$C +4t!i<^[;&>s)7dag]-%-htI*Ds0qsAmJlSRDu5%]J(st[pAaja~> +, +1175 7080 65 68 /7A +$C +.D_q^.KGB-^]4?6s8W-!s8W-!s8W-!s3*T]J,[4_s8Tk1e(531rV~> +, +1241 7080 60 72 /2Z +$C +0H!84,PBKR"/)b=\m6u]\m6qT9;U)0dd,?GFLkSVA2rn_hmM5+nDA/ng[4_3&)V<0q[]t?hYm?A +s8W-!s8T11B`H;mj=qeJ,Cf~> +, +1327 7078 41 49 /4I +$C ++N9T']F[%ge#bGo7o1=Q5gn17;Yp%#qZ$Tos!&T^s1`I=XnrMYL)(WnLN)4+"pt~> +, +1372 7078 7M , +1427 7080 7I , +1516 7080 7I , +1605 7078 48 49 /7C +$C ++e0*'9_`6r:#XV_"O!ed6$V>jkWYWRs82iRDn"AILVk7I@?(jB!PGH;,Rcp:^1i">p"EUXO&q(0 +WsT7`0Mh~> +, +1655 7080 59 47 /0D +$C +/fA4$TE!.:j:ducs8W-!s8W-!s8W-!s8W-!YP,S6V*Tg/bD(U.Ap1dlk(&#^$q:pOW&S<Uhu~> +, +1716 7078 58 74 /3V +$C +--g96$(;'KK@A;uOFBLHqIFR@!\e^-4qN$9VuE:%^]401s8W,ts8RNIhqHn'XgPSQ(h%6"pP4Jh +is#mPs8W-!s44J4)F*dD%jb[Ni:$~> +, +1802 7078 40 49 /4G +$C +3f>g'n3Oo%%j7D36+e>sT3%oiqqqCITh04KCBXhpb6^M`XXX\d$A^)?6ToH"%MlEM^]+8HpKJ%X +L).gSG[X3`GQ~> +, +1847 7053 55 73 /1N +$C +4ua\K4knifP0KZV'7+o4mJDA0pAY)il2B5_ql]8U#Wo5elh:#'dsnEEl["'2]lh'c]"Yc5I9g49 +06^+q,DK?gBE.H~> +, +1902 7080 0D , +1963 7078 32 65 /0F +$C +.EZ`8VbXVnZpArR#H(r/s8W-!s8W-!q/FU2G7Ntp8,rVhs7Ni+LP*L[~> +, +1997 7078 7C , +2047 7080 48 47 /4Z +$C +/eEgBrmgLT!f#.:D(C%AY*Hb9>H=m5Z.cU4?C.K]e(na+Lc`:/<p>%D:"!pg0H&WoFcbami7!mI +k=CR:hu~> +, +719 6921 78 73 /5I +$C +,@H[r)o3*1<Y05+0Q?6.V[a8(LHu..-Kt^T-L!H]kr22IF`1>_e^_?U^A@/FfA$7RlMpnas8Uo) +YM8pQosObaCO3S[Xeg0KQI<4+2O1YN0U7A(:r.`[a?P@e6A#FG6+Ja%,Q~> +, +798 6923 58 47 /6N +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qcY0ReuU^)_0-YK@^p/t4&U'%SJqnU0Mh~> +, +856 6921 42 49 /3N +$C +-,RJ0,D$.,dtC(&BFm314U.0';Uopg0D5AFqu:T"GOO;dD/K!tg22NP(b6GB_Li1('E~> +, +900 6921 46 49 /6P +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +985 6922 48 48 /3L +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +1072 6922 33 63 /7H +$C +22MSu?.7U@]^UPYFoVLAs8W-!s8W,u?o*0m2B4J$*'aK's6osmLPLB~> +, +1105 6921 52 49 /3B +$C +-,RJ#Jd4TY+S0[\0^1M^2l>gu<qXnToWS5,FoUmEs8W%)rjpk_Fh_cG[d)RJ9#F9R9#61SMQibj +PlW!~> +, +1159 6895 56 75 /6T +$C +/d=P.LUCpts8W-!s8W*W++t[YiU7o"_nlWIR!K5#0_F9"If'$2n,<4bs7cQnYPu4PGO6ub73.&n +$mep_/@[=OG.U\h_[93uT^3@4(ao~> +, +1219 6923 28 72 /4F +$C +0EsY0/Z\pOs8W-!s8W-!s8W-!s8W-!s8W-!lS&`s4p`JB2)k~> +, +1248 6921 6P , +1296 6922 55 47 /0B +$C +.aN80rp/h061h@qkr8H5rjSg"8c@(ef(At+5J$]0oUGf-2d]Y_\*g;!Eo<U`1]Mt~> +, +1353 6921 6P , +1401 6923 4F , +1468 6922 82 48 /3X +$C +--V`>h0uuM[/YPgrB9d@+!SJRhOje2e\;&ZVUk)5[%C.MH@FT)^[7iQJ+m9?>HRpIY?pm>YNtG4 +lW<i0='tEF]"Q[tSt*;=F&6Q9h].OYhu~> +, +1551 6923 28 69 /5T +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +1580 6922 59 74 /3T +$C +,6PadBFG%9o].Bt<'f[3Jd*;_2s<!EI=:?D^Ak&0qZ$Tqs8DutIK/3^Iqs28[alB*$o"p%K#8Q` +"?mZ-1+_tqs8W-!s8?J%(]Hk@a^F0ZLO]~> +, +1642 6894 55 76 /7K +$C ++p6(UU(D9p_BI4g&2<;jh&tN#o\CkkFnFSgJ,d.Xs(u]/=CJ9h&r&_O@t^O*>/J*d6!EuahV:&- +aAQDs_@@-!5s.7@DNJb"HG82g\$+]hs53/>Bn"bZS_ZAA[]D/Z`.uhrTnOs!J,~> +, +1697 6921 6P , +1745 6922 7H , +1815 6923 58 72 /4O +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qco"??GfF?_0Zp7?*;dfE5?Pos8W-!s7M]^ +s+AH!#Cl~> +, +1873 6922 3L , +1923 6921 40 49 /6H +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +2002 6922 51 73 /2Z +$C +5EglT+SH@k^#U$'FpL$[_nllJqgH5-rV-'chuE_+s8Vrqrg*Md?)<,t[I'gC0OD_A]3VSk$n_r) ++92B@s8W+%2$O#4bf,_b~> +, +2057 6921 6P , +2105 6921 6P , +2153 6923 6N , +2248 6922 2Z , +2303 6922 59 48 /7B +$C +,6G^d:()^rSt(K"WZ[OKKH'R@829B/hbX7Os8W-!s8W-!s8W-!s8K(pJ6^S3s7>3jJF\7`JS/"W +3,n?~> +, +2364 6923 5T , +2393 6923 4F , +2422 6922 7H , +2454 6908 23 27 /5C +$C +0k&hmpMY93^MeSYh7p_lq5@]N~> +, +2516 6922 3L , +2566 6923 6N , +2662 6922 3L , +2712 6895 6T , +2772 6895 6T , +2832 6923 4F , +2861 6923 5T , +2890 6921 3N , +2935 6922 3L , +2985 6922 7H , +3017 6923 5T , +3046 6921 3B , +3101 6923 6N , +3197 6921 3N , +3241 6922 3L , +3291 6923 4F , +3320 6923 4F , +3350 6921 6H , +3428 6921 52 58 /4T +$C ++Dt22n;'$mK;'!rU-/Uq+pCM##-'`as8W-!s8W-!s8P8$eb5lLs8W-!qLA~> +, +3496 6923 48 60 /0O +$C +,D@S_MVl*@fa*!YQV41'l#aLB/sf5-db7nuBjmiqb8kc<I>?S9^>Ek<fR:IQmIpF)L'3#)Y!;sd +s8V/![Jg~> +, +3556 6949 47 4 /5F +$C +/ddj:TE~> +, +3616 6927 46 48 /2J +$C +0W7)r4)i)l*&-_=DA[?1L)l$X3,TRP_hK1e%DrYmE5TO"&5\Vq#Uhu*$50#*"UHMK&6'>dT`k`h +$A*pH(9An~> +, +3676 6921 47 45 /5J +$C ++WT&@_B@Xm#7-+#k_lB]&2ulZkm$>udX4)MBPXeWJ,fQ'r/,hrrqlRsCN%j0CLMq$@1c#I'uLE6 +'2W(k~> +, +3728 6923 61 43 /0S +$C +2AdhJ:_A3Oo1(F=qu?]rs8W-!s8W-!s8W-!s8W-!s8W-!pO;Seqb;8cG?JF`D.WiQ<gR9_Y1)/_ +(f=s(~> +, +3796 6921 52 62 /5L +$C ++rokY#W"`MK<U/9H6SI9Jd1>]"Q)ebODiWjSs/p#8cSY$^]4?6s0]W?Xo5C#XgD4-C[Eb.?%s!Y +(e]T6Yde+\@<)>Is8W'dK%Ji~> +, +3887 6922 7H , +3920 6921 3B , +4013 6923 5T , +4042 6921 6H , +4084 6921 6H , +4127 6922 7B , +4187 6921 6P , +4272 6921 3N , +4316 6921 3B , +4371 6923 88 47 /2X +$C +0Eoc'K:jmrq)D8+/;`aO>(?SPs8W-!s8W-!s8W-!s8W-!s8W-!ri?'Cm5<d*9l_ZL&>Ouf@AMUU +!4rFJ@)DUq/%!gM.m^-W@A]^a-57F:+CLi~> +, +4459 6923 2X , +4548 6922 3L , +4598 6923 6N , +4656 6922 3T , +4717 6921 6H , +4796 6922 7H , +4829 6921 3B , +4922 6923 60 69 /6D +$C +226&?X:j(Vs8W-!s8W-!s8W-!s8W-!s3*SAs8Vcls8W)e]ja4A~> +, +4983 6922 56 73 /3H +$C ++LJp$5kmV@ADpOa$L)XK9;U)$FLka1QV41'l#aLB/sf3GX^kL=qgH2riP+2XpA99P(k'-9mIh'p +IJ`R7s8W-!s8K>)a7J5P5dOC>~> +, +719 6802 3L , +769 6803 6N , +827 6802 3T , +916 6803 38 47 /6X +$C +0H#A^_V2d)s8W-!s8W-!hqnUF[?3rg<K18!0`S\NG9dORiPEE.~> +, +956 6801 6P , +1003 6801 3N , +1048 6801 6P , +1096 6803 5T , +1125 6802 0B , +1181 6801 6P , +1258 6803 6X , +1298 6801 6P , +1345 6801 6H , +1388 6802 7B , +1448 6803 4F , +1477 6802 7H , +1510 6801 6H , +1560 6802 11 12 /4U +$X +*rnNUJ&)*Bs5<q8s5<q8s5<pmJ&!-+~> +, +1630 6803 6D , +1691 6803 4O , +1749 6803 5T , +1779 6801 6H , +1848 6801 6H , +1890 6801 6P , +1938 6801 3N , +1983 6802 7H , +2015 6803 5T , +2044 6801 3B , +2099 6803 6N , +2185 6802 3T , +2246 6801 6P , +2294 6801 6H , +2336 6801 3N , +2381 6803 6X , +2420 6803 5T , +2449 6802 2Z , +2505 6801 6P , +2553 6801 6H , +2622 6803 5T , +2651 6803 6N , +2737 6803 2X , +2825 6801 3B , +2880 6803 6X , +2919 6801 6P , +2996 6802 3T , +3057 6801 6P , +3105 6802 7H , +3138 6802 3L , +3188 6803 5T , +3217 6803 4F , +3274 6802 7H , +3307 6803 4O , +3365 6801 6P , +3441 6801 3N , +3485 6801 3B , +3540 6803 6N , +3598 6802 7H , +3631 6801 6P , +3679 6803 6N , +3737 6802 7H , +3769 6801 6H , +3839 6801 3B , +3894 6803 35 73 /6Z +$C +0Esb+"P*PPs8W-!s8W-!s8V6a07FEB%#Z/ks8W,Vqtkj:[L0nZ`p\\%_LM~> +, +3954 6802 7H , +3987 6803 4O , +4045 6801 6P , +4120 6801 6H , +4162 6802 7H , +4195 6803 6X , +4234 6803 5T , +4264 6803 6N , +4322 6774 7K , +4405 6802 3L , +4455 6803 6X , +4495 6774 7K , +4550 6802 7B , +4610 6803 2X , +4699 6801 6P , +4747 6803 6N , +4805 6802 7H , +4865 6802 7H , +4898 6803 4O , +4956 6802 3L , +5006 6802 7H , +719 6681 3N , +763 6681 3B , +818 6683 6N , +876 6682 0B , +933 6681 6P , +981 6655 55 74 /4H +$C +3%Y6hmI,4)4=>r&qn9amhgXIsrOVILFl0+]j?`gAhs!)u2d]ipr?hQFX8\<4pIY>3Is(D_lMA*j +\l\aa"r!=,"Tb7n~> +, +1036 6681 6H , +1104 6682 7H , +1136 6683 4O , +1194 6681 6P , +1267 6681 3N , +1312 6681 3B , +1366 6683 2X , +1455 6683 2X , +1543 6682 3L , +1593 6683 6N , +1651 6682 3T , +1712 6681 6H , +1763 6682 4U , +720 6439 47 68 /4L +$C +3fZrD5m+sl%Z!;2&2<U+GYRGe2ll?3Utth's*h\nRRpqjf*2V?qUVca-K/p\k$^7Ls8W,i)H#,d +s80-R-i~> +, +770 6440 2H , +795 6441 46 67 /6W +$C +4rW=((^sTUs8W-!s8W-!s8W-!s8W-!S6ZBXr'(_0n\`3(0\H\`_nk9d*ZBP~> +, +845 6440 2H , +920 6439 69 71 /2U +$C +,lqOI'M&cl_$:)Q';l+j>hos/,=)E?!XD!qW=GjV<4skb<55:&rI2N]s8Th5^YR"9hg]j"ID5Zo +g=U1X2AfI3:r.agLC>Rb:gg(q)o)~> +, +992 6439 7M , +1048 6441 7I , +1137 6441 7I , +1226 6439 7C , +1276 6441 0D , +1337 6439 3V , +1423 6439 4G , +1467 6439 0F , +1500 6441 39 47 /2K +$C +0H$MYTKVuJs8W-!s8W-!pTf^+(gLC'+S,W)pYU$GG9Me#iPF:~> +, +1539 6441 5K , +1573 6441 0D , +1634 6414 53 74 /2W +$C +.D[AsDZh'_KH1WC*<HH/+N)'6OFMAAn#PpGs1R:dC)b'*fMKR%-!KV<_SXAk7^%/Xh2oL.5_/q@ +#W`G-%!08pdVi2YrRJT2p](9fs46"J6Xd$EXfDjY@q7A$$n,OUE:<~> +, +1689 6439 4G , +719 6284 6D , +780 6284 4O , +838 6282 6P , +912 6282 3N , +956 6282 3B , +1011 6284 2X , +1099 6284 2X , +1188 6283 3L , +1238 6284 6N , +1296 6283 3T , +1382 6282 6H , +1424 6283 7H , +1457 6284 6X , +1496 6284 5T , +1526 6284 6N , +1584 6255 7K , +1666 6284 2X , +1754 6283 3L , +1804 6256 4H , +1887 6282 3N , +1931 6282 3B , +1986 6284 6N , +2044 6283 7H , +2077 6283 3L , +2127 6284 5T , +2156 6284 6N , +2241 6282 3B , +2296 6284 6N , +2354 6282 6P , +2429 6282 3B , +2484 6284 6X , +2551 6284 2X , +2639 6282 3B , +2694 6284 6X , +2733 6282 6P , +2809 6282 3N , +2853 6282 3B , +2908 6284 2X , +2996 6284 2X , +3085 6283 3L , +3135 6284 6N , +3193 6283 3T , +3254 6282 6H , +3296 6269 5C , +3347 6282 6H , +3389 6282 6P , +3437 6256 6T , +3497 6283 3L , +3547 6284 6X , +3587 6283 3L , +3637 6283 7H , +3669 6282 6P , +3717 6283 3T , +3806 6283 2Z , +3861 6256 4H , +3944 6282 6H , +3986 6282 6P , +4034 6284 2X , +4123 6284 5T , +4152 6282 3N , +4196 6282 3B , +4251 6284 4F , +4280 6282 3B , +4334 6284 6N , +4393 6282 6H , +4443 6283 4U , +4486 6284 77 70 /5Y +$C +/d_ribJ29<O`89m(g$03D:`"Cqka1(IsocD[(gLij0e8bea:smqb-YKXh*hJBn"l\\+Hlk/,QKX +rg!GYIs#nSX6TPreb+?8~> +, +4591 6282 6H , +4633 6282 6P , +4681 6284 2X , +4770 6284 5T , +4799 6282 3N , +4843 6282 3B , +4898 6284 4F , +4927 6282 3B , +4981 6284 6N , +719 6164 5T , +748 6162 6H , +818 6164 6N , +876 6162 3B , +931 6163 7H , +992 6163 3L , +1070 6162 3N , +1114 6162 3B , +1169 6164 2X , +1257 6164 2X , +1346 6163 3L , +1396 6164 6N , +1454 6163 3T , +1542 6162 6H , +1584 6162 6P , +1632 6136 6T , +1692 6163 3L , +1742 6164 6X , +1782 6163 3L , +1832 6163 7H , +1864 6162 3B , +1919 6164 6X , +1988 6163 3X , +2071 6164 4O , +2130 6162 6P , +2177 6164 6N , +2263 6164 5T , +2292 6163 7H , +2353 6164 5T , +2382 6162 6H , +2452 6164 6N , +2510 6162 6P , +2558 6162 6H , +2600 6163 7H , +2633 6162 6P , +2681 6163 3T , +2770 6164 5T , +2799 6164 6N , +2885 6163 2Z , +2940 6164 6X , +2980 6163 3L , +3030 6162 3N , +3074 6162 6P , +3122 6162 6H , +3192 6143 31 93 /5Z +$C +"KA5$<2ioaX%J_TkuZ=+f<21RX8]1"oY:G+s8W,ds8D]jp[@j)hqRkn]A*&HgV(4BmCQ0~> +, +3240 6152 26 72 /1E +$C ++p]Zp7'a4+J,fQKs8W-!Y,_k)"N'qSEea%ps8W-!s8W-!h=nN*%bla~> +, +3300 6152 26 72 /4E +$C +4BQs>-nF2!s8W-!s8W-!]C*SX6W!P\.m[p]s8W-!s8W-!>un;k;UuN~> +, +3345 6143 28 93 /3D +$C +3RbHUG4"&?]C+PE]C,RirpTT2^[Jr;^An65s3grIWrK*t='h6DF^7nJWD_7r<2jY:J,~> +, +3406 6162 3B , +3461 6164 6X , +3529 6163 2Z , +3584 6164 6X , +3624 6163 3L , +3674 6162 3N , +3718 6163 3H , +3774 6162 6P , +3822 6163 7H , +3854 6162 6H , +3924 6143 5Z , +3980 6152 22 72 /1Q +$C +4:D0?O8o7[s8W-!s8W-!s8W-!s8W-!s8W-!a=_9'~> +, +4032 6152 18 72 /6J +$C +/dqZ#J,fQKs8W-!s8W-!s8W-!QNdB~> +, +4077 6143 3D , +4110 6149 5C , +4162 6162 3B , +4217 6164 6X , +4284 6164 5T , +4313 6163 7H , +4373 6164 5T , +4402 6162 6H , +4471 6162 6P , +4519 6162 6H , +4561 6162 3N , +4606 6163 3L , +4656 6136 6T , +4716 6162 6P , +4764 6163 3T , +4851 6163 2Z , +4906 6136 4H , +4989 6163 3L , +719 6043 2Z , +774 6043 3L , +824 6042 3N , +869 6043 3H , +924 6042 6H , +967 6044 4F , +996 6043 3L , +1046 6042 6H , +1088 6044 4O , +1171 6023 5Z , +1213 6044 44 73 /1U +$C +,3;hTBmO*PV<N;4Q_iqm?C.MQH<ur7Wp70uX%Un5]e<%,oXunNde(4+9@EI*~> +, +1265 6023 3D , +1307 6043 4U , +719 5887 58 69 /2R +$C +2?s3(!F!QE)ak,7huE0FJ,A1(s88h1s8W,brYH[V+pd[fp](9nnc/Xh+F!kcs0)I>F;YW2LG/r4Du~> +, +780 5886 3L , +830 5885 3N , +874 5887 4O , +958 5885 3N , +1002 5885 3B , +1057 5887 2X , +1145 5887 2X , +1234 5886 3L , +1284 5887 6N , +1342 5886 3T , +1428 5887 5T , +1457 5885 6H , +1525 5886 3T , +1586 5887 5T , +1615 5886 0B , +1672 5887 5T , +1701 5886 3T , +1762 5885 6P , +1810 5886 3T , +1897 5887 5T , +1926 5887 6N , +1984 5886 7H , +2017 5885 3B , +2098 5886 71 49 /0N +$C +3Y;p"JV5%#*oYRCLeDb7]`umol+.>ugT,GQYA_/4DuK(tg[4b6qda`^mrgeipV$Om^A[rcpODpe +[r;/PrVq*!ZQ"C3hY6a#]D]3Ll!&#bO0.kghg8E7eW\EsRXb~> +, +2170 5886 42 49 /0U +$C +-k[(P#>U(N%ZkTp\lYd+Id')2hu3<Ds7ZKihZ!QRmf.e*IJ_p0HFM^IV/9XqQ&:<iW%_$~> +, +2215 5886 39 49 /1T +$C +4lg/As8.<CJ,A^3J+)9E#`n#MM#Y3gp>9c^g[0SkC>l<:a)?;/]o.,Yh8?k7G7=c~> +, +2253 5886 49 74 /1M +$C +3+QNlE;"q%\p(Z2D^*hS3-oKO4s+^PLZ,rDDEYW!rVpfjme=0iA9./6^A!'SrSQAernG3bDgUAj +hflPQf#%Zr_qTs!,"=f+s51Tgp]#]J2@Jl/JeFbC_gh~> +, +2303 5886 36 49 /4A +$C +1D4L?KH;1$9KN@diA[Y2ID9uEhuE+/X_T6!k>9J-TkGn_K#hFi6B$NJfApN?s0pmoS[Go7(g(:V +(aq(7~> +, +2358 5886 11 47 /1Q +$X +*WSETJ&)*Bs5<q8s5<q8s58CB5CagUzzzzzzzzzzz!!")@5Ce7!s5<q8s5<q8s5<pmJ&":!*WQ~> +, +2401 5885 6H , +2443 5885 6P , +2491 5859 57 75 /0J +$C +,=.UUTKS!Ys8W-!s8W,i0IHuF$1o<*o_K^&&"nOq"<UE2o^ndPs%EClYQ+Y&qu?]`s1eG\mIpGH +fNSeECb:8CL,`^#>Hgm-#[d~> +, +2547 5886 7B , +2608 5885 6P , +2655 5887 6N , +2714 5885 3N , +2758 5885 6P , +2806 5885 6H , +2873 5885 3B , +2928 5887 6Z , +2987 5885 3N , +3031 5887 4O , +3090 5886 3L , +3140 5887 6X , +3179 5886 3L , +3229 5885 3N , +3273 5886 7H , +3306 5885 6P , +3354 5887 6X , +3393 5885 6H , +3462 5885 6H , +3504 5885 6P , +3552 5859 6T , +3612 5886 3L , +3662 5887 6X , +3702 5886 3L , +3752 5886 7H , +3784 5885 6P , +3832 5886 3T , +3921 5886 2Z , +3976 5859 4H , +4059 5885 3B , +4114 5887 6N , +4172 5885 6P , +4247 5885 3B , +4302 5887 6X , +4369 5887 2X , +4457 5885 3B , +4512 5887 6X , +4551 5885 6P , +4627 5886 2Z , +4682 5887 4F , +4711 5886 3L , +4761 5887 6N , +4820 5886 3H , +4875 5885 6H , +4944 5885 3B , +4999 5887 6X , +719 5766 7H , +752 5766 3L , +802 5766 2Z , +857 5765 6H , +899 5752 5C , +949 5765 6H , +992 5766 7B , +1052 5766 2Z , +1099 5739 26 97 /2P +$C +4EtrfS>!QA\%D+`s*juts8W-!s8W-!s8W-!s8W-!rG+1n5ENe-@_q!ms5c>8l-oX8C;PK~> +, +1131 5765 6P , +1179 5765 3N , +1223 5766 7H , +1281 5766 7H , +1313 5765 3B , +1393 5766 7H , +1425 5767 4O , +1484 5765 6P , +1556 5767 6Z , +1590 5765 3B , +1644 5767 4F , +1673 5767 4F , +1703 5765 3B , +1757 5766 3X , +1841 5767 5T , +1870 5767 6N , +1928 5738 7K , +2008 5739 0J , +2064 5766 7B , +2125 5765 3B , +2179 5766 7H , +2212 5767 5T , +2241 5767 6N , +2299 5738 7K , +2380 5767 6X , +2419 5766 7B , +2480 5767 4F , +2509 5765 6P , +2557 5765 6H , +2607 5766 1Q , +969 5610 5Y , +1074 5609 3X , +1157 5608 3B , +1212 5610 6X , +1251 5609 3T , +1340 5609 2Z , +1395 5608 6P , +1443 5581 7K , +1499 5610 5T , +1528 5610 6N , +1586 5610 6N , +1644 5610 5T , +1673 5610 6N , +1732 5581 7K , +1814 5609 3X , +1897 5610 5T , +1926 5609 7H , +1959 5610 4O , +2044 5609 3L , +2094 5610 6N , +2180 5608 3B , +2235 5582 6T , +2295 5608 6P , +2343 5610 6N , +2401 5610 5T , +2430 5610 6N , +2488 5581 7K , +2572 5609 2Z , +2627 5610 6X , +2667 5609 3L , +2717 5608 3N , +2761 5608 6P , +2837 5589 5Z , +2885 5598 1E , +2930 5589 3D , +2991 5608 3N , +3035 5608 3B , +3090 5610 6N , +3148 5609 7H , +3181 5610 5T , +3210 5610 6N , +3268 5609 7B , +3328 5608 6P , +3376 5608 6H , +3446 5609 7B , +3506 5610 6N , +3564 5609 7H , +3597 5610 5T , +3626 5610 4F , +3683 5609 7H , +3716 5610 4O , +3774 5608 6P , +3850 5609 2Z , +3905 5609 3L , +3955 5610 4F , +3984 5609 3L , +4034 5610 6N , +4093 5608 3N , +4137 5610 5T , +4166 5610 6N , +4224 5581 7K , +4307 5608 3N , +4351 5610 4F , +4380 5608 3B , +4435 5608 6H , +4477 5610 5T , +4507 5610 6N , +4565 5581 7K , +4648 5609 2Z , +4703 5610 6X , +4743 5609 3L , +4793 5608 3N , +4837 5608 6P , +4913 5589 5Z , +4961 5598 4E , +5006 5589 3D , +969 5490 5T , +998 5488 6H , +1067 5490 6X , +1107 5488 6P , +1154 5489 3L , +1204 5488 3N , +1249 5490 4O , +1307 5488 6P , +1355 5489 3T , +1424 5489 4U , +1493 5490 6D , +1554 5490 4O , +1612 5488 6P , +1687 5488 3B , +1742 5489 7B , +1802 5489 7H , +1834 5488 6P , +1882 5490 6X , +1950 5489 2Z , +2005 5490 6X , +2045 5489 3L , +2095 5488 3N , +2139 5488 6P , +2214 5488 3N , +2258 5490 4O , +2317 5489 3L , +2367 5490 6X , +2406 5489 3L , +2456 5488 3N , +2500 5489 7H , +2533 5488 6P , +2581 5490 6X , +2620 5488 6H , +2690 5489 3L , +2740 5490 6X , +2780 5488 6P , +2855 5488 6H , +2897 5489 7H , +2930 5490 6X , +2969 5490 5T , +2999 5462 6T , +3059 5462 6T , +3119 5488 6P , +3167 5489 3T , +3236 5489 4U , +3305 5490 5Y , +3409 5489 2Z , +3464 5489 3L , +3514 5488 3N , +3559 5489 3H , +3614 5488 6H , +3657 5490 4F , +3686 5489 3L , +3736 5488 6H , +3778 5490 4O , +3861 5469 5Z , +3901 5482 43 75 /4A +$C +,o5(4Wp70uX/c,"<Rl4t=&mdn?`ND&Y,eSf\ur_h>ut%VF^8'Kf<20SlFOA~> +, +3954 5469 3D , +4013 5488 3N , +4057 5489 3L , +4107 5490 6N , +4191 5489 2Z , +4246 5488 6P , +4320 5489 7B , +4380 5488 6H , +4423 5488 6P , +4471 5489 3T , +4557 5489 7H , +4590 5488 3B , +4671 5488 6P , +4719 5488 6H , +4761 5488 3N , +4806 5489 3L , +4856 5462 6T , +4916 5488 6P , +4989 5489 3L , +969 5369 2Z , +1024 5370 6X , +1064 5369 3L , +1114 5368 3N , +1158 5368 6P , +1206 5355 5C , +1256 5342 6T , +1316 5370 6X , +1356 5368 6P , +1404 5369 0B , +1460 5368 6P , +1508 5370 6N , +1566 5369 7H , +1599 5370 5T , +1628 5370 6N , +1686 5341 7K , +1767 5368 6H , +1809 5342 6T , +1869 5368 6P , +1917 5368 3N , +1961 5370 5T , +1991 5369 3L , +2041 5370 4F , +2095 5370 5T , +2124 5370 6N , +2182 5369 7H , +2215 5368 6P , +2262 5370 6X , +2302 5342 6T , +2362 5370 6X , +2402 5368 6P , +2449 5369 7H , +2482 5369 3L , +2532 5369 7H , +2565 5370 5T , +2594 5368 3B , +2648 5370 6N , +2715 5369 4U , +969 5213 5Y , +1072 5212 3X , +1155 5211 3B , +1210 5213 6X , +1249 5212 3T , +1335 5212 2Z , +1391 5211 6P , +1439 5184 7K , +1494 5213 5T , +1523 5213 6N , +1581 5213 6N , +1640 5213 5T , +1669 5213 6N , +1727 5184 7K , +1809 5212 3X , +1892 5213 5T , +1921 5212 7H , +1954 5213 4O , +2038 5212 3L , +2088 5213 6N , +2172 5211 3B , +2227 5185 6T , +2287 5211 6P , +2335 5213 6N , +2393 5213 5T , +2422 5213 6N , +2480 5184 7K , +2562 5212 2Z , +2617 5213 6X , +2657 5212 3L , +2707 5211 3N , +2751 5212 3H , +2807 5211 6P , +2855 5212 7H , +2914 5192 5Z , +2970 5201 22 72 /6H +$C +4:D0?O8o7[s8W-!s8W-!s8W-!s8W-!s8W-!a=_9'~> +, +3007 5192 3D , +3066 5211 3N , +3110 5211 3B , +3165 5213 6N , +3223 5212 7H , +3256 5213 5T , +3285 5213 6N , +3343 5212 7B , +3403 5211 6P , +3451 5211 40 49 /6H +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +3519 5212 7B , +3579 5213 6N , +3637 5212 7H , +3670 5213 5T , +3699 5213 4F , +3754 5212 7H , +3787 5213 4O , +3845 5211 6P , +3919 5212 2Z , +3974 5212 3L , +4024 5213 4F , +4053 5212 3L , +4103 5213 6N , +4162 5211 3N , +4206 5213 5T , +4235 5213 6N , +4293 5184 7K , +4374 5211 3N , +4418 5213 4F , +4447 5211 3B , +4502 5211 6H , +4544 5213 5T , +4574 5213 6N , +4632 5184 7K , +4713 5212 2Z , +4768 5213 6X , +4808 5212 3L , +4858 5211 3N , +4902 5212 3H , +4958 5211 6P , +5006 5212 7H , +969 5072 5Z , +1017 5081 6J , +1062 5072 3D , +1123 5093 5T , +1152 5091 6H , +1222 5093 6X , +1262 5091 6P , +1309 5092 3L , +1359 5091 3N , +1404 5093 4O , +1462 5091 6P , +1510 5092 3T , +1579 5092 4U , +1624 5093 6D , +1685 5093 4O , +1743 5091 6P , +1819 5091 6P , +1867 5093 6N , +1925 5091 3N , +1969 5093 4F , +1999 5091 3B , +2053 5091 6H , +2096 5091 6P , +2143 5092 3T , +2232 5091 6H , +2274 5092 7H , +2307 5093 6X , +2346 5093 5T , +2376 5093 6N , +2434 5064 7K , +2518 5093 5T , +2547 5091 6H , +2616 5092 7H , +2649 5093 4O , +2707 5091 6P , +2755 5093 6N , +2840 5091 6P , +2888 5092 0B , +2944 5092 3L , +2994 5093 4F , +3023 5092 7B , +3084 5092 3L , +3134 5092 7H , +3166 5091 6P , +3214 5092 3T , +3303 5092 3L , +3353 5091 6H , +3422 5093 5T , +3451 5093 6Z , +3511 5093 5T , +3540 5092 7H , +3600 5092 3X , +3683 5091 6P , +3731 5093 6X , +3771 5091 6P , +3846 5092 3L , +3923 5091 3N , +3967 5091 3B , +4022 5093 2X , +4110 5093 2X , +4199 5092 3L , +4249 5093 6N , +4307 5092 3T , +4394 5091 6H , +4436 5092 7H , +4469 5093 6X , +4508 5093 5T , +4538 5093 6N , +4596 5064 7K , +4651 5078 5C , +4704 5092 3L , +4754 5093 6N , +4812 5092 3T , +4900 5092 7H , +4933 5093 4O , +4991 5091 6P , +969 4973 6X , +1009 4971 6P , +1056 4971 6H , +1099 4972 7B , +1159 4973 4F , +1188 4972 7H , +1221 4973 5T , +1250 4973 6N , +1308 4944 7K , +1389 4972 0B , +1445 4972 3L , +1495 4973 4F , +1524 4972 7B , +1585 4971 6P , +1657 4973 5T , +1687 4971 6H , +1754 4972 7B , +1814 4971 6H , +1857 4971 6P , +1905 4972 3T , +1991 4972 3L , +2041 4971 6H , +2108 4972 7H , +2141 4973 4O , +2199 4971 6P , +2272 4971 3N , +2316 4971 3B , +2371 4973 6N , +2429 4972 7H , +2462 4971 6P , +2509 4973 6N , +2568 4972 7H , +2600 4971 6H , +2668 4971 3B , +2722 4973 6Z , +2781 4972 7H , +2813 4973 4O , +2871 4971 6P , +2944 4972 3X , +3028 4971 3B , +3082 4973 6X , +3122 4972 3T , +3191 4972 4U , +969 4816 5Y , +1047 4815 7H , +1117 4815 3L , +1167 4816 6N , +1225 4788 4H , +1318 4788 6T , +1378 4814 3B , +1433 4816 5T , +1462 4816 6N , +1520 4815 7H , +1590 4816 5T , +1619 4816 6N , +1714 4815 7H , +1747 4816 4O , +1805 4814 6P , +1890 4814 3N , +1934 4814 3B , +1989 4816 2X , +2077 4816 2X , +2166 4815 3L , +2216 4816 6N , +2274 4815 3T , +2371 4814 6H , +2413 4815 7H , +2446 4816 6X , +2485 4816 5T , +2515 4816 6N , +2573 4787 7K , +2667 4815 3L , +2755 4814 6H , +2797 4816 5T , +2826 4816 6N , +2885 4787 7K , +2940 4816 4F , +2969 4814 6P , +3055 4788 0J , +3111 4815 7B , +3171 4814 3B , +3226 4815 7H , +3258 4814 6P , +3345 4795 5Z , +3393 4847 20 29 /6O +$C +/tiOEp[.G;qtC$f^&?i;hql-~> +, +3438 4795 3D , +3509 4814 3N , +3553 4815 3L , +3603 4815 7B , +3664 4814 6H , +3706 4814 6P , +3754 4814 6H , +3833 4815 7H , +3866 4816 4O , +3924 4814 6P , +4010 4816 6X , +4050 4814 6P , +4097 4814 6H , +4140 4815 7H , +4211 4814 3B , +4266 4816 6Z , +4337 4815 7H , +4370 4816 4O , +4428 4814 6P , +4514 4814 6H , +4556 4815 7H , +4589 4816 6X , +4628 4816 5T , +4658 4816 6N , +4716 4787 7K , +4810 4815 7H , +4843 4814 3B , +4936 4815 2Z , +4991 4814 6P , +969 4695 7H , +1002 4696 6X , +1041 4694 6P , +1089 4695 3L , +1139 4695 7H , +1172 4694 6P , +1219 4695 3T , +1306 4695 3L , +1356 4694 6H , +1423 4694 3B , +1478 4696 6N , +1536 4694 6P , +1609 4695 3X , +1692 4694 3B , +1747 4696 6X , +1786 4695 3T , +1855 4695 4U , +719 4537 51 73 /0F +$C +3eBr>]F[%gd07f:#T.^j2hW.!H>cOTn(ZCm^V@hHl`-t<Tk"Qfa?[n4i6aRf>U9\C$@u_DF[QV( +6o1X#^sjhA>1_C+gk"A^mf2\K?1uk'fO6iM/21^fM\)S6K*<aDJ,~> +, +772 4539 5T , +801 4539 6N , +859 4510 7K , +914 4539 4F , +943 4537 6P , +1018 4537 3N , +1062 4537 3B , +1117 4539 2X , +1205 4539 2X , +1294 4538 3L , +1344 4539 6N , +1402 4538 3T , +1463 4537 6H , +1530 4538 3L , +1580 4539 6X , +1620 4537 6P , +1694 4537 6P , +1742 4539 51 47 /6C +$C +0HhbLCT6iu*o7X>[[4%/>?fXbXeft#>>!^U>GYf:I8\U0m^,;BmF&STVWhAmPBq,U8\.XIjoKYt +a@E.\>`fE~> +, +1793 4537 6P , +1841 4537 3N , +1886 4538 7B , +1946 4538 7H , +1979 4537 6P , +2027 4538 3T , +2114 4539 5T , +2143 4539 6N , +2227 4537 3B , +2282 4539 6X , +2321 4538 3T , +2382 4537 6P , +2430 4539 6X , +2497 4538 7B , +2557 4539 6N , +2615 4538 7H , +2648 4539 5T , +2677 4539 4F , +2732 4538 7H , +2765 4539 4O , +2823 4537 6P , +2871 4511 4H , +2953 4538 3L , +3003 4539 6X , +3043 4537 6P , +3117 4538 3L , +3167 4539 4F , +3196 4539 4F , +3251 4538 3T , +3312 4537 3B , +3367 4539 6N , +3425 4537 6P , +3499 4537 3B , +3554 4539 6X , +3620 4538 3L , +3670 4539 6N , +3754 4537 6P , +3802 4539 6X , +3841 4539 6X , +3881 4537 3B , +3935 4539 6X , +4003 4539 5T , +4032 4537 6H , +4100 4537 6P , +4148 4539 6N , +4206 4537 3N , +4250 4537 3B , +4305 4538 7B , +4365 4539 6N , +4424 4538 7H , +4456 4537 6P , +4504 4539 6X , +4544 4537 6P , +4591 4538 3T , +4661 4538 4U , +4705 4539 58 69 /1Z +$C +1CW&nPtW/Om"HQF"*Y4Dhf$!Yn*e$+p]&#.s8U]R^Zfn*E0glO(bphK/;$Er=V-/u9Gi.9_[j62 +pY5^ds7cQnrI=g5?BmkH8e@u+<Plgml2~> +, +4766 4511 4H , +4849 4537 3N , +4893 4537 3B , +4948 4539 6N , +5006 4561 6A , +719 4418 0B , +776 4417 6P , +823 4419 6N , +882 4418 7H , +914 4419 5T , +943 4417 3B , +998 4419 6N , +1056 4404 5C , +1121 4418 3L , +1171 4419 6N , +1268 4417 6P , +1316 4419 6X , +1355 4419 6X , +1395 4417 3B , +1449 4419 6X , +1530 4419 5T , +1559 4417 6H , +1640 4417 6H , +1682 4419 5T , +1711 4390 7K , +1767 4419 6N , +1825 4418 3L , +1875 4419 4F , +1904 4419 4F , +1933 4417 6P , +1981 4418 3T , +2081 4418 2Z , +2136 4391 4H , +2231 4418 3L , +2319 4419 6X , +2359 4417 6P , +2406 4418 7H , +2439 4418 7B , +2499 4419 6X , +2539 4419 6N , +2636 4418 0B , +2693 4418 3L , +2743 4419 4F , +2772 4418 7B , +2832 4417 6P , +2918 4417 6H , +2960 4418 7H , +2993 4418 3L , +3043 4419 6X , +3082 4418 7H , +3115 4419 5T , +3144 4419 6N , +3202 4390 7K , +3297 4418 3X , +3380 4419 5T , +3409 4418 7H , +3442 4419 4O , +3538 4418 3L , +3588 4419 6N , +3684 4417 6P , +3732 4419 6C , +3783 4417 3N , +3828 4419 4F , +3857 4418 3L , +3907 4419 2X , +3995 4418 3L , +4045 4418 7H , +4078 4419 5T , +4107 4417 3B , +4162 4419 6N , +4258 4419 2X , +4346 4418 3L , +4396 4419 6X , +4436 4418 3H , +4499 4418 4U , +4555 4419 6D , +4616 4419 4O , +4674 4417 6P , +4760 4419 6X , +4800 4417 6P , +4847 4418 7H , +4880 4418 7B , +4940 4419 6X , +4980 4419 6N , +719 4298 0B , +776 4298 3L , +826 4299 4F , +855 4298 7B , +915 4297 6P , +991 4299 6Z , +1024 4299 6X , +1064 4297 3B , +1118 4299 2X , +1242 4297 5J , +1294 4299 0S , +1362 4297 5L , +1443 4299 5T , +1472 4297 6H , +1542 4298 7H , +1575 4299 4O , +1633 4297 6P , +1709 4299 6X , +1749 4297 6P , +1796 4298 7H , +1829 4298 7B , +1889 4299 6X , +1929 4299 6N , +2016 4298 0B , +2073 4298 3L , +2123 4299 4F , +2152 4298 7B , +2212 4297 6P , +2288 4297 3B , +2343 4299 6Z , +2404 4298 7H , +2437 4299 4O , +2495 4297 6P , +2572 4299 6Z , +2605 4299 5T , +2634 4299 6X , +2674 4297 6H , +2716 4298 7H , +2778 4297 6P , +2826 4299 6X , +2865 4299 6X , +2905 4297 3B , +2959 4299 6X , +2999 4321 6A , +3032 4271 6T , +3092 4299 6X , +3132 4297 3B , +3186 4298 3T , +3248 4298 7B , +3308 4297 3N , +3352 4299 5T , +3381 4299 6N , +3440 4270 7K , +3526 4297 3N , +3570 4297 3B , +3625 4299 2X , +3713 4299 2X , +3802 4298 3L , +3852 4299 6N , +3910 4298 3T , +3999 4297 3B , +4054 4299 6X , +4123 4297 6P , +4171 4299 4F , +4200 4297 6H , +4242 4297 6P , +4319 4298 7H , +4352 4299 4O , +4410 4297 6P , +4487 4299 6X , +4527 4297 6P , +4574 4298 7H , +4607 4298 7B , +4667 4299 6X , +4707 4299 6N , +4795 4298 0B , +4852 4298 3L , +4902 4299 4F , +4931 4298 7B , +4991 4297 6P , +719 4177 3B , +774 4179 6Z , +832 4178 7H , +864 4179 4O , +923 4177 6P , +996 4179 6Z , +1029 4179 5T , +1058 4179 6N , +1116 4178 3L , +1166 4179 4F , +1220 4177 6H , +1263 4179 5T , +1292 4179 6N , +1350 4150 7K , +1406 4179 4F , +1435 4177 6P , +1508 4177 3N , +1552 4177 3B , +1607 4179 2X , +1695 4179 2X , +1783 4178 3L , +1833 4179 6N , +1891 4178 3T , +1960 4178 4U , +719 4022 6D , +780 4020 3B , +860 4020 6P , +908 4022 6C , +959 4020 6P , +1007 4020 3N , +1052 4021 7B , +1112 4021 7H , +1145 4020 6P , +1217 4021 3L , +1292 4020 6H , +1335 4022 5T , +1364 4022 6N , +1422 3993 7K , +1478 4022 4F , +1507 4020 6P , +1580 4020 3N , +1624 4020 3B , +1679 4022 2X , +1767 4022 2X , +1855 4021 3L , +1905 4022 6N , +1964 4021 3T , +2025 4007 5C , +2075 4021 7H , +2107 4022 4O , +2165 4020 6P , +2238 4022 6Z , +2272 4022 5T , +2301 4022 6X , +2340 4020 6H , +2383 4021 7H , +2440 4021 3X , +2524 4020 3B , +2578 4022 6X , +2618 4021 3T , +2704 4022 5T , +2733 4020 6H , +2800 4020 6P , +2848 4022 6C , +2900 4021 3L , +2950 4022 2X , +3038 4022 5T , +3067 4022 6N , +3125 4020 6P , +3173 4021 3T , +3242 4021 4U , +3284 4022 33 69 /5G +$C +0H%XJ!UM?&s8W-!s8W-!s8W-!s8W-!s8W-!s)k!s!MdF~> +, +3318 4021 7H , +3376 4020 3N , +3420 4021 3L , +3470 4022 6N , +3553 4021 2Z , +3609 4020 6P , +3682 4020 3B , +3736 4022 6N , +3794 4020 6P , +3867 4020 3B , +3922 4022 6Z , +3980 4021 7H , +4013 4022 4O , +4071 4020 6P , +4144 4022 6Z , +4177 4020 3B , +4232 4022 4F , +4261 4022 4F , +4290 4020 3B , +4345 4021 3X , +4428 4022 5T , +4457 4022 6N , +4515 3993 7K , +4579 4021 1Q , +728 3877 37 34 /2C +$C +2%'Ns&9Qk9:Xc6+s%i[g^U<H4p7[1T(f4V5~> +, +969 3863 5I , +1048 3865 6N , +1106 3863 6P , +1179 3863 3B , +1233 3865 6Z , +1292 3864 7H , +1324 3865 4O , +1382 3863 6P , +1455 3865 6Z , +1489 3863 3B , +1543 3865 4F , +1572 3865 4F , +1601 3863 3B , +1656 3864 3X , +1739 3865 5T , +1768 3865 6N , +1827 3836 7K , +1907 3864 3X , +1991 3865 5T , +2020 3864 3T , +2081 3836 7K , +2136 3863 6P , +2184 3864 7H , +2242 3863 3N , +2286 3865 6X , +2326 3863 6P , +2374 3864 3L , +2424 3864 7H , +2456 3865 5T , +2485 3865 6N , +2544 3836 7K , +2624 3863 3N , +2669 3863 3B , +2723 3865 2X , +2812 3865 2X , +2900 3864 3L , +2950 3865 6N , +3008 3864 3T , +3069 3863 6H , +3120 3864 1Q , +968 3682 56 62 /1A +$C +,Ap0V:'Cb1Tg"9*%d8k,,W$'NTS%Y>qG#tA:$KCgqg/:sYQ+Y&m<\c`f%9dlBk<=V[[1h`_[1Jp +-.o@;>VNZrEW?(=s7sI<pOE~> +, +1028 3682 56 44 /6N +$C +,i""TKGgGEK="%NoE_*ncnOSP#WMH?#HR+dp](9ns8W-!s8W-!s8W-!s6%7`i:[+oJ,~> +, +1088 3682 4T , +1148 3682 4T , +1216 3682 47 45 /1X +$C ++PbNY":bub6JI/]+?BW7cp>6;dVhoQ]fg:0<qZHofDkmNmA9jMDd-Gsf%O0Q[[%b4@>(^9K!A.h +L(kIQ~> +, +1268 3684 56 43 /5T +$C +1Bn:Ro[EN6F_)fts8W-!s8W-!s8W-!s8W)srHDINZ.ep"nC!a.@>)."]2rE/0VA~> +, +1778 3684 0S , +1846 3682 46 45 /1Z +$C ++O4a+i.reS6.$'k_BN_8!X@j2h&tE;W_I/@C:^R_oWehD^WDC>HN)Lg[CpEoV/7fdL6]!.K*7m( +:t.1mJq*~> +, +1898 3684 5T , +1958 3682 6N , +976 3562 5J , +1036 3562 48 45 /4E +$C +3k744+D-15#AAdpoL9e"#TK*e&7PNu60UU_rVuijpY5GpI>50sLP@d5A2Znl&'+_Ml`/:<Y\T>r +/6!H_C23s&~> +, +1088 3564 5T , +1148 3564 59 42 /2B +$C +-3a&@>IqP[\#uk!pK,sIp!p`u]g'*B]!niOVlf4`<qY"VFhKqV]\mHa#(<CEo`~> +, +1216 3562 4E , +1276 3562 43 45 /6F +$C +--Bs+k9*%T&:G,"nKk6P"+"kk2m9\ds6X:'>#;Fq8V0QRcT29O5bS`qZp[t!6#*3fV#UJ^D6DID +fJ$MB6gQEDC((Zh~> +, +1778 3564 0S , +1846 3562 1Z , +1898 3564 5T , +1958 3562 6N , +2018 3562 1A , +2078 3562 6N , +2138 3562 4T , +2198 3562 4T , +2266 3562 1X , +2318 3564 5T , +976 3442 5J , +1028 3444 57 60 /2X +$C +1Bn>>`B3dnFC`;hs8W-!s8W-!s8W-!s8W)sqd%e)/9[@sHYIX?9<hd*(gJc)s8W-!r:jIm^]~> +, +1096 3442 1Z , +1156 3442 5J , +1216 3444 0O , +1268 3442 1A , +1328 3442 6N , +1388 3442 4T , +1448 3442 4T , +1516 3442 1X , +1568 3444 5T , +1786 3444 48 43 /6H +$C +0H-5NSR;Ess8W-!s8Tdkms/EWheWql2"95c2)l)`$#mk,\7%cB:]~> +, +1846 3442 4E , +1906 3442 5L , +1966 3444 45 62 /0Y +$C +2@YoEU`9@6s8W-!s8W-!s8V[E,.I+BaFaHls6p~> +, +2026 3442 1X , +2078 3442 1A , +2138 3442 6N , +2198 3442 4T , +2258 3442 4T , +2326 3442 1X , +2378 3444 5T , +976 3322 1Z , +1028 3324 5T , +1088 3322 4T , +1156 3324 6H , +1208 3305 57 61 /6P +$C +1^ptq+W\=9g\1T\DsmM*laeE-h'_qgrTWY4])$<YS$/^Tl+6_/^72='lfl"W]"Y>NX/kOJ@=k"( +:Aq2C~> +, +1786 3322 6F , +1846 3322 5J , +1906 3322 4E , +1966 3324 45 60 /0W +$C +2@YoEU`9@6s8W-!s8W-!s8W-!s8W-!s3/9>qu~> +, +2026 3322 1Z , +976 3204 48 60 /6D +$C +3#\:_Rc"/Fs8W-!s8W-!s8SZ":&Re)s8W)TmI%f]?&K12K-?0~> +, +1036 3204 6H , +1096 3202 4E , +1148 3204 0S , +1216 3202 1Z , +1786 3202 6F , +1846 3202 5J , +1906 3204 6H , +1966 3202 1X , +2026 3204 0W , +2086 3204 0W , +2138 3202 1A , +2206 3202 4E , +2266 3204 6H , +976 3084 0W , +1036 3082 4E , +1088 3082 1A , +1156 3082 1Z , +1216 3084 0W , +1778 3082 4T , +1846 3082 1Z , +1898 3084 57 42 /0T +$C +1Bn>>`AIOjTZI4d[["5%V/7_s>>!UMd^GFJTsPQAXefkb'l)8[FQeq":"!pCFIT)^-L!H\\kUUj +PB<:G+cQNO:A(N8~> +, +1958 3082 4T , +976 2964 0W , +1036 2964 0Y , +1096 2962 6F , +1148 2962 4T , +1208 2962 1A , +1276 2962 1X , +1328 2964 0T , +969 2783 60 69 /6D +$C +226&?X:j(Vs8W-!s8W-!s8W-!s8W-!s3*SAs8Vcls8W)e]ja4A~> +, +1030 2783 4O , +1088 2781 46 49 /3R +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +1169 2781 40 49 /6H +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +1211 2781 3R , +1259 2781 3N , +1304 2781 3B , +1358 2783 58 47 /3P +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qcY0ReuU^)_0-YK@^p/t4&U'%SJqnU0Mh~> +, +1416 2782 3T , +1510 2782 3X , +1593 2781 3B , +1648 2783 6X , +1687 2782 3T , +1782 2781 3B , +1837 2783 6Z , +1903 2781 3R , +1951 2782 3L , +2001 2781 3N , +2045 2783 4O , +2136 2781 3B , +2191 2783 6Z , +2257 2782 7H , +2290 2783 4O , +2348 2781 3R , +2396 2781 6H , +2438 2781 3R , +2519 2781 3N , +2563 2781 3B , +2618 2783 88 47 /5V +$C +0Eoc'K:jmrq)D8+/;`aO>(?SPs8W-!s8W-!s8W-!s8W-!s8W-!ri?'Cm5<d*9l_ZL&>Ouf@AMUU +!4rFJ@)DUq/%!gM.m^-W@A]^a-57F:+CLi~> +, +2706 2783 5V , +2795 2782 3L , +2845 2783 3P , +2903 2782 3T , +2964 2781 6H , +3038 2783 28 69 /2V +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +3067 2781 6H , +3142 2782 7H , +3175 2783 4O , +3233 2781 3R , +3314 2783 3P , +3372 2782 3L , +3422 2783 5V , +3510 2781 3R , +3591 2781 3B , +3646 2783 6Z , +3713 2782 7H , +3746 2783 4O , +3804 2781 3R , +3886 2782 3X , +3969 2783 2V , +3998 2782 3T , +4060 2754 7K , +4115 2781 3R , +4163 2782 7H , +4230 2782 7H , +4263 2781 3B , +4352 2782 2Z , +4407 2781 3R , +4489 2781 3N , +4533 2783 6X , +4573 2781 3R , +4621 2782 3L , +4671 2782 7H , +4703 2781 3R , +4751 2782 3T , +4820 2782 4U , +4872 2783 6D , +4933 2783 4O , +4991 2781 3R , +969 2663 6X , +1009 2661 3R , +1056 2663 5V , +1145 2662 3L , +1195 2663 2V , +1224 2663 3P , +1282 2663 2V , +1311 2663 3P , +1369 2634 7K , +1450 2662 3X , +1533 2661 3B , +1588 2663 6X , +1627 2662 3T , +1688 2661 6H , +1756 2662 3L , +1806 2663 6X , +1845 2661 3R , +1918 2661 3B , +1973 2635 6T , +2033 2662 7H , +2066 2663 2V , +2095 2661 3B , +2149 2663 3P , +2215 2651 45 85 /6B +$C +/mdGEmJh+ZpA_VhqgRGrrP*:*rnk3Ps)6ZcrP.asIc%X5^Mhm+hm`"MJ(s\q^Mj!W~> +, +2268 2662 0B , +2325 2662 3L , +2375 2663 4F , +2404 2662 7B , +2464 2661 3R , +2537 2635 6T , +2597 2662 3L , +2647 2663 2V , +2676 2663 6X , +2716 2661 6H , +2766 2662 4U , +728 2518 2C , +969 2506 5Y , +1078 2505 3X , +1161 2506 2V , +1190 2505 3T , +1252 2477 7K , +1307 2504 3R , +1355 2505 7H , +1419 2506 3P , +1477 2505 3L , +1527 2506 5V , +1615 2504 3R , +1694 2485 5Z , +1727 2505 2Z , +1783 2504 3R , +1830 2477 7K , +1886 2506 2V , +1915 2506 3P , +1973 2506 3P , +2032 2506 2V , +2061 2506 3P , +2119 2477 7K , +2205 2505 3X , +2288 2506 2V , +2317 2505 7H , +2350 2506 4O , +2440 2505 3L , +2522 2505 3T , +2583 2504 3B , +2638 2505 7H , +2703 2551 24 26 /5W +$C +4RdSWJ)B.-pUBV'g\1)S_dTJ~> +, +2754 2504 15 14 /4I +$X +"2GHB5Q!bFJ,XrsJ,XrsJ,XrsJ,V\1+8>rR~> +, +2791 2551 24 26 /5E +$C +4`80npM\gBpUfn^qtp@3,7GK@~> +, +2819 2485 3D , +2884 2505 7H , +2917 2506 4O , +2975 2505 3L , +3025 2505 7H , +3090 2504 3N , +3134 2504 3B , +3189 2506 6X , +3228 2506 6X , +3268 2504 3R , +3316 2504 6H , +3358 2478 6T , +3418 2504 3B , +3473 2506 3P , +3531 2505 3T , +3592 2504 6H , +3667 2505 7H , +3700 2504 3B , +3787 2505 3L , +3837 2506 3P , +3927 2504 3R , +3975 2506 6C , +4026 2506 2V , +4056 2504 6H , +4098 2505 7H , +4131 2506 2V , +4160 2506 3P , +4218 2477 7K , +4306 2505 3X , +4389 2506 2V , +4418 2505 3T , +4480 2477 7K , +4535 2504 3R , +4583 2505 7H , +4624 2505 4U , +4673 2506 6D , +4734 2506 4O , +4792 2504 3R , +4872 2504 6H , +4914 2504 3R , +4962 2504 3N , +5007 2528 6A , +969 2384 3B , +1024 2386 3P , +1082 2385 3T , +1170 2385 3X , +1253 2384 3B , +1308 2386 6X , +1347 2385 3T , +1436 2357 7K , +1492 2386 2V , +1521 2385 0B , +1577 2384 3R , +1625 2384 6H , +1695 2385 7H , +1728 2386 4O , +1786 2384 3R , +1861 2386 3P , +1919 2385 3L , +1969 2386 5V , +2057 2384 3R , +2132 2384 3B , +2187 2386 6Z , +2247 2385 3L , +2324 2358 6T , +2384 2385 3L , +2434 2386 6X , +2474 2385 7H , +2506 2386 2V , +2535 2384 3N , +2580 2385 7B , +2640 2386 4F , +2669 2385 3L , +2719 2386 6X , +2786 2385 3X , +2869 2386 2V , +2898 2385 3T , +2960 2357 7K , +3015 2384 3R , +3063 2385 7H , +3123 2384 6H , +3165 2385 7B , +3226 2385 2Z , +3281 2384 3N , +3325 2384 3B , +3380 2386 5V , +3468 2386 5V , +3557 2385 3L , +3607 2386 3P , +3665 2385 3T , +3751 2385 3L , +3801 2386 3P , +3859 2385 3T , +3947 2385 7H , +3980 2386 4O , +4038 2384 3R , +4112 2386 6X , +4152 2384 3R , +4199 2386 5V , +4288 2385 3L , +4338 2386 2V , +4367 2386 3P , +4425 2386 2V , +4454 2386 3P , +4512 2357 7K , +4594 2385 3X , +4677 2384 3B , +4732 2386 6X , +4771 2385 3T , +4833 2384 6H , +4901 2385 3L , +4951 2386 6X , +4991 2384 3R , +969 2265 3L , +1019 2266 6X , +1059 2237 7K , +1114 2265 7B , +1174 2266 5V , +1263 2264 3R , +1311 2266 3P , +1369 2265 7H , +1401 2264 6H , +1469 2266 6Z , +1502 2264 3B , +1557 2266 6X , +1621 2265 7H , +1654 2266 4O , +1712 2264 3R , +1785 2264 6H , +1827 2265 7B , +1888 2265 2Z , +1943 2264 3N , +1987 2264 3B , +2042 2266 5V , +2130 2266 5V , +2218 2265 3L , +2268 2266 3P , +2327 2265 3T , +2396 2265 4U , +728 2121 2C , +969 2109 5Y , +1085 2090 56 62 /4G +$C +3!q,3aUeFOs8W,sL(f.]^j&07KBS.Ncm,Lc$,2!#oUEfYVpfsAH@Pgis8W,r?GEo@[G>\?a(]_F +m=`,+Ph9rm$$Ii'Xr("?'E~> +, +1153 2107 4E , +1213 2107 5J , +1273 2109 0O , +1326 2094 5C , +1389 2107 1A , +1457 2109 0Y , +1509 2109 5T , +1577 2107 5L , +1630 2094 5C , +1701 2109 48 60 /3F +$C +3#\:_Rc"/Fs8W-!s8W-!s8SZ":&Re)s8W)TmI%f]?&K12K-?0~> +, +1761 2107 1X , +1821 2107 5J , +1873 2107 6N , +1941 2107 6F , +1994 2094 5C , +2065 2090 50 62 /6J +$C +,QSa(*Ou4e)i(n?qnDP!s33hh+FG=,:SK,l5_4^;62F=JK7,(0FIu?9:]Jjms8W-![D2[BrN6%# +Zrm3>FrL(k?%WGSF&jf"@>.Nd$i~> +, +2125 2109 48 43 /3J +$C +0H-5NSR;Ess8W-!s8Tdkms/EWheWql2"95c2)l)`$#mk,\7%cB:]~> +, +2185 2107 4E , +2237 2107 1A , +2298 2094 5C , +2361 2090 4G , +2421 2107 6N , +2481 2107 4T , +2542 2094 5C , +2613 2107 5L , +2673 2107 1Z , +2733 2107 6F , +2785 2107 4T , +2853 2109 3J , +2913 2107 1X , +2965 2090 6P , +3026 2094 5C , +3097 2109 0Y , +3149 2109 0S , +3217 2107 4E , +3277 2090 6J , +3337 2107 1Z , +3390 2094 5C , +3454 2107 3B , +3509 2109 6X , +3587 2107 6N , +3647 2090 4G , +3715 2107 5L , +3775 2107 4E , +3827 2107 4T , +3895 2107 1Z , +3988 2107 3N , +4032 2107 3B , +4087 2109 5V , +4175 2109 5V , +4264 2108 3L , +4314 2109 3P , +4372 2108 3T , +4441 2108 4U , +4522 2109 6D , +4583 2109 4O , +4641 2107 3R , +4689 2107 6H , +4732 2107 3R , +4819 2107 3N , +4863 2107 3B , +4918 2109 5V , +5006 2131 6A , +969 1989 5V , +1057 1988 3L , +1107 1989 3P , +1165 1988 3T , +1227 1987 6H , +1295 1989 5V , +1383 1988 3L , +1433 1989 3P , +1491 1989 2V , +1521 1961 6T , +1581 1988 7B , +1641 1989 4F , +1670 1988 3L , +1720 1988 7H , +1753 1987 3R , +1827 1987 3R , +1875 1989 6C , +1926 1989 2V , +1956 1987 6H , +1998 1988 7H , +2031 1989 2V , +2060 1989 3P , +2118 1960 7K , +2201 1988 3X , +2284 1989 2V , +2313 1988 3T , +2375 1960 7K , +2430 1987 3R , +2478 1988 7H , +2511 1987 6H , +2580 1987 3B , +2635 1989 6X , +2701 1987 3N , +2745 1987 3B , +2800 1989 3P , +2858 1988 7H , +2891 1989 6X , +2930 1987 3B , +2985 1989 4F , +3041 1989 6D , +3102 1988 3H , +3166 1988 4U , +3234 1988 94 70 /4N +$C +-+(H9aM?$Ks!JC6&0BE>['/o/rr;p]s%i[Hne'd2rAXEL:&TRjIp_j*s62KBqG%"hPCNV/s)76& +S,3/^rkI^4s3bicoUGmZ-NF*;^]2`3p[l5fr@e%ts.nQP`A.BgrBKr1H;$>Ld350/qnN~> +, +3329 1987 3B , +3383 1987 6H , +3426 1988 7H , +3485 1988 3L , +3535 1989 6X , +3575 1987 3R , +3649 1988 7H , +3682 1989 4O , +3740 1987 3R , +3814 1987 6H , +3856 1988 3L , +3906 1989 5V , +3995 1987 3R , +4068 1988 3L , +4118 1987 6H , +4186 1988 3T , +4247 1987 3B , +4302 1987 3N , +4346 1988 7B , +4406 1989 5V , +4495 1987 3R , +4543 1989 3P , +4601 1988 7H , +4633 1987 3R , +4681 1988 3T , +4768 1989 6Z , +4801 1987 3B , +4856 1989 6X , +4922 1989 6D , +4983 1988 3H , +969 1869 48 69 /5K +$C +21n\f@.;aLJ,fQKjhY/&h3M<(5D*m`rnmU$^\7]^mJjZphf&J-rqh34p\3GBDnj$Dq]5Y(]D+KN~> +, +1027 1868 4U , +1044 1867 47 71 /0V +$C ++p(%4KH3$?0=h9*Uu%T:h0h4h:&_W*^Uj:An%\m0?iC$)s8W-!s82i"otU8$qka8c?WR/k^SPda +V/7^e'!Y9_0VH6I~> +, +1102 1868 4U , +1181 1869 6D , +1242 1869 4O , +1300 1867 3R , +1384 1867 1A , +1452 1869 0Y , +1504 1869 5T , +1572 1867 5L , +1662 1867 3N , +1706 1867 3B , +1761 1869 5V , +1849 1869 5V , +1938 1868 3L , +1988 1869 3P , +2046 1868 3T , +2143 1869 2V , +2172 1867 6H , +2251 1867 6H , +2293 1869 2V , +2322 1840 7K , +2378 1869 3P , +2436 1869 2V , +2465 1869 6Z , +2499 1869 2V , +2528 1867 3N , +2572 1868 3L , +2622 1869 3P , +2680 1868 7H , +2713 1869 4F , +2742 1841 4H , +2834 1868 3T , +2895 1869 2V , +2924 1869 6Z , +2957 1869 6Z , +2991 1867 3R , +3039 1869 6X , +3078 1867 3R , +3126 1869 3P , +3184 1868 7H , +3217 1854 5C , +3279 1868 3L , +3329 1869 3P , +3387 1868 3T , +3485 1868 7H , +3518 1869 4O , +3576 1867 3R , +3669 1869 0Y , +3721 1869 0S , +3789 1867 4E , +3849 1850 6J , +3909 1867 1Z , +4000 1867 3N , +4044 1867 3B , +4099 1869 5V , +4187 1869 5V , +4276 1868 3L , +4326 1869 3P , +4384 1868 3T , +4482 1869 2V , +4511 1867 6H , +4591 1869 5V , +4679 1867 3B , +4734 1869 6X , +4773 1867 3R , +4860 1869 4F , +4889 1869 2V , +4918 1869 5V , +5006 1891 6A , +969 1749 2V , +998 1748 7H , +1031 1747 3R , +1079 1748 3T , +1148 1748 4U , +728 1604 2C , +969 1592 6D , +1030 1592 4O , +1088 1590 3R , +1244 1590 6F , +1304 1590 1Z , +1356 1592 5T , +1424 1590 5L , +1578 1590 3N , +1622 1590 3B , +1677 1592 5V , +1765 1592 5V , +1854 1591 3L , +1904 1592 3P , +1962 1591 3T , +2023 1577 5C , +2080 1591 3X , +2163 1592 4O , +2222 1592 2V , +2251 1590 3N , +2295 1592 4O , +2385 1590 6H , +2427 1590 3R , +2475 1592 3P , +2533 1591 3T , +2595 1590 6H , +2669 1591 3L , +2752 1590 6H , +2794 1591 7H , +2827 1592 6X , +2866 1592 2V , +2896 1592 3P , +2954 1563 7K , +3043 1591 7H , +3076 1590 3B , +3164 1591 3L , +3247 1592 60 69 /2T +$C +1BfGjiK1'#,=ctPrr<#qs8MRA)uos<s8W-!s8W-!s8W-!s8T[WEraVc~> +, +3308 1592 2V , +3337 1592 5V , +3425 1591 2Z , +3481 1590 3B , +3568 1564 6T , +3628 1592 6X , +3668 1590 3B , +3722 1590 3N , +3767 1590 3R , +3814 1590 6H , +3857 1590 6H , +3907 1591 4U , +3982 1592 6D , +4043 1592 4O , +4101 1590 3R , +4182 1590 6H , +4224 1590 3R , +4272 1590 3N , +4317 1590 3B , +4371 1592 3P , +4429 1591 3T , +4523 1591 3X , +4606 1590 3B , +4661 1592 6X , +4700 1591 3T , +4795 1592 2V , +4824 1590 6H , +4900 1591 7H , +4933 1592 4O , +4991 1590 3R , +969 1472 6D , +1030 1471 3H , +1125 1472 3P , +1183 1471 3L , +1233 1472 5V , +1321 1470 3R , +1408 1470 3B , +1463 1472 6Z , +1535 1471 3L , +1624 1472 2T , +1685 1472 2V , +1714 1472 5V , +1802 1471 2Z , +1858 1470 3B , +1951 1470 3N , +1995 1472 4O , +2054 1471 3L , +2104 1472 3P , +2162 1472 3P , +2220 1470 3R , +2268 1472 4F , +2335 1451 5Z , +2368 1444 6T , +2428 1472 6X , +2468 1470 3R , +2516 1471 0B , +2572 1472 2V , +2601 1470 3B , +2656 1471 7B , +2716 1470 6H , +2759 1472 4F , +2788 1444 4H , +2883 1472 6X , +2923 1470 3R , +2970 1443 7K , +3026 1472 2V , +3055 1470 6H , +3097 1471 7H , +3130 1470 3R , +3178 1472 6X , +3217 1470 3R , +3265 1471 3T , +3367 1471 3X , +3450 1472 2V , +3479 1471 7H , +3512 1472 4O , +3608 1472 5T , +3676 1470 4E , +3728 1472 0S , +3796 1470 1Z , +3856 1470 5J , +3908 1472 2X , +3976 1470 4E , +4028 1472 5T , +4089 1451 3D , +4122 1457 5C , +4186 1471 3L , +4236 1472 3P , +4294 1471 3T , +4394 1471 7H , +4427 1472 4O , +4485 1470 3R , +4572 1472 6X , +4612 1470 3R , +4659 1470 6H , +4702 1471 7H , +4774 1470 3B , +4829 1472 6Z , +4900 1471 7H , +4933 1472 4O , +4991 1470 3R , +969 1350 3N , +1013 1350 3B , +1068 1352 5V , +1156 1352 5V , +1245 1351 3L , +1295 1352 3P , +1353 1351 3T , +1439 1352 2V , +1468 1350 6H , +1535 1350 6H , +1578 1350 3R , +1626 1352 3P , +1684 1351 7H , +1741 1351 3L , +1791 1350 6H , +1859 1351 3L , +1934 1350 6H , +1976 1352 2V , +2005 1352 3P , +2064 1323 7K , +2119 1352 4F , +2148 1350 3R , +2221 1350 6H , +2264 1351 7H , +2296 1352 6X , +2336 1352 2V , +2365 1352 3P , +2423 1323 7K , +2504 1351 3L , +2554 1352 4F , +2583 1350 3B , +2637 1352 3P , +2695 1323 7K , +2776 1351 7H , +2809 1352 4O , +2867 1350 3R , +2940 1350 3N , +2984 1352 4O , +3042 1351 3L , +3092 1352 3P , +3151 1352 3P , +3209 1350 3R , +3257 1352 4F , +3294 1351 4U , +728 1207 2C , +969 1195 6D , +1030 1195 4O , +1088 1193 3R , +1169 1195 2B , +1237 1193 4E , +1297 1195 3J , +1357 1195 0Y , +1417 1193 4E , +1469 1193 1A , +1537 1195 0W , +1597 1193 1Z , +1684 1193 3N , +1728 1193 3B , +1783 1195 5V , +1871 1195 5V , +1960 1194 3L , +2010 1195 3P , +2068 1194 3T , +2137 1194 4U , +2213 1195 2T , +2274 1195 2V , +2303 1195 5V , +2391 1194 2Z , +2447 1193 3B , +2509 1183 6B , +2562 1195 6D , +2623 1194 3H , +2714 1166 7K , +2770 1193 3R , +2817 1195 3P , +2876 1193 3R , +2924 1195 6X , +2963 1194 3L , +3013 1195 4F , +3042 1195 4F , +3071 1167 4H , +3163 1194 3T , +3224 1193 3B , +3279 1193 3R , +3327 1193 6H , +3404 1195 3P , +3462 1193 3B , +3517 1194 7H , +3585 1167 6T , +3645 1195 6X , +3685 1193 3B , +3739 1194 0B , +3796 1195 2V , +3825 1194 3T , +3886 1193 3R , +3970 1194 7H , +4003 1195 4O , +4061 1193 3R , +4144 1194 0B , +4201 1194 3L , +4251 1195 6X , +4290 1195 2V , +4319 1194 3L , +4369 1194 2Z , +4424 1195 4F , +4453 1193 3R , +4501 1193 6H , +4579 1193 3B , +4634 1195 6Z , +4702 1195 6D , +4763 1193 3N , +4808 1195 4F , +4845 1183 6B , +4897 1195 6D , +4959 1194 3H , +5014 1180 23 61 /4K +$C +0k&hmpMY93^MeSYh=p[<GW$"$s8V\cKH39Qs(g>C'E~> +, +969 1075 6X , +1009 1074 3L , +1059 1074 3T , +1120 1075 2V , +1149 1073 3B , +1251 1074 2Z , +1306 1074 7B , +1367 1074 7H , +1399 1074 7H , +1432 1073 3B , +1486 1075 3P , +1545 1073 6H , +1634 1074 3L , +1684 1075 6X , +1724 1073 3R , +1819 1074 3L , +1869 1075 3P , +1974 1073 3R , +2022 1075 6C , +2073 1073 3N , +2118 1073 3R , +2166 1047 6T , +2226 1074 7H , +2258 1075 2V , +2288 1073 3B , +2342 1075 3P , +2408 1074 4U , +2472 1075 6D , +2533 1075 4O , +2591 1073 3R , +2684 1075 2B , +2752 1073 4E , +2812 1075 3J , +2872 1075 0Y , +2932 1073 4E , +2984 1073 1A , +3052 1075 0W , +3112 1073 1Z , +3211 1073 3N , +3255 1073 3B , +3310 1075 5V , +3398 1075 5V , +3487 1074 3L , +3537 1075 3P , +3595 1074 3T , +3701 1074 7H , +3734 1074 3L , +3784 1074 3H , +3839 1073 3R , +3887 1073 6H , +3976 1074 7H , +4009 1075 4O , +4067 1073 3R , +4161 1075 3P , +4219 1074 3L , +4269 1075 5V , +4357 1073 3R , +4451 1073 3B , +4506 1075 6Z , +4585 1074 3L , +4681 1074 0B , +4738 1074 3L , +4788 1075 6X , +4827 1075 2V , +4856 1074 3L , +4906 1074 2Z , +4961 1075 4F , +4990 1073 3R , +969 954 3T , +1030 953 3R , +1078 955 6Z , +1111 955 2V , +1140 955 3P , +1199 953 3R , +1246 954 3T , +1339 955 2V , +1368 955 3P , +1458 954 3L , +1540 955 6X , +1580 954 3L , +1630 954 3T , +1691 955 2V , +1720 953 3B , +1807 954 2Z , +1862 954 7B , +1923 954 7H , +1955 954 7H , +1988 953 3B , +2042 955 3P , +2133 954 3L , +2183 953 6H , +2257 954 7H , +2290 955 4O , +2348 953 3R , +2428 953 6H , +2470 953 3R , +2518 953 3N , +2563 953 3B , +2617 955 3P , +2675 954 3T , +2768 954 3X , +2851 953 3B , +2906 955 6X , +2945 954 3T , +3007 940 5C , +3064 954 3L , +3114 955 3P , +3172 954 3T , +3265 954 7H , +3298 955 4O , +3356 953 3R , +3436 954 0B , +3493 954 3L , +3543 955 4F , +3572 954 7B , +3632 953 3R , +3712 953 3B , +3767 955 6Z , +3832 954 7H , +3865 955 4O , +3923 953 3R , +4003 954 0B , +4060 954 3L , +4110 955 6X , +4149 955 2V , +4178 954 3L , +4228 954 2Z , +4283 955 4F , +4312 953 3R , +4393 955 2V , +4422 953 6H , +4496 954 7H , +4529 955 4O , +4587 953 3R , +4667 955 6X , +4707 953 3R , +4754 953 6H , +4797 954 7B , +4857 955 4F , +4886 954 7H , +4951 953 3B , +5006 955 6Z , +969 834 7H , +1002 835 4O , +1060 833 3R , +1140 833 3N , +1184 833 3B , +1239 835 5V , +1327 835 5V , +1416 834 3L , +1466 835 3P , +1524 834 3T , +1593 834 4U , +1641 835 55 69 /3N +$C +0H%LnJ9qY"s8W-!s8V1Ls8W-!?gtT*q%-&Ks1eU6s,[3[q+1Pcs8W,o:72q?LG0'b?i~> +, +1697 834 7B , +1757 835 6X , +1796 834 7H , +1829 835 4O , +1887 833 3R , +1935 835 6X , +1975 835 5V , +2063 833 3B , +2117 835 6X , +2157 833 3R , +2205 820 5C , +2264 834 7H , +2297 835 4O , +2355 833 3R , +2403 835 6X , +2442 833 3R , +2523 835 2V , +2552 833 6H , +2626 833 3B , +2681 835 3P , +2739 833 3R , +2819 807 6T , +2879 835 6X , +2919 833 3R , +2966 834 3T , +3028 833 3R , +3075 835 6Z , +3109 835 2V , +3138 835 3P , +3196 833 3R , +3244 834 3T , +3337 834 0B , +3394 834 3L , +3444 835 6X , +3483 835 2V , +3512 834 3L , +3562 834 2Z , +3617 835 4F , +3646 833 3R , +3726 834 3X , +3809 835 4O , +3868 833 3B , +3922 833 6H , +3965 833 3R , +4043 834 0B , +4100 834 3L , +4150 835 4F , +4179 834 7B , +4239 833 3R , +4318 833 42 49 /6L +$C +-,RJ0,D$.,dtC(&BFm314U.0';Uopg0D5AFqu:T"GOO;dD/K!tg22NP(b6GB_Li1('E~> +, +4362 834 3L , +4412 835 3P , +4501 834 2Z , +4556 833 3R , +4635 835 6X , +4675 833 3R , +4722 834 7H , +4755 835 6X , +4794 835 2V , +4824 833 3R , +4871 834 0B , +4928 833 3R , +4976 834 3T , +969 714 7H , +1002 715 4O , +1060 715 2V , +1089 713 6H , +1168 714 3X , +1251 714 3L , +1301 687 4H , +1365 714 1Q , +1419 714 7H , +1452 715 4O , +1510 713 3R , +1602 715 0W , +1662 713 4E , +1722 713 6F , +1774 713 4T , +1842 713 1Z , +1902 715 3J , +1962 715 3J , +2022 713 1X , +2082 715 3J , +2172 714 0B , +2229 714 3L , +2279 715 6X , +2318 715 2V , +2347 714 3L , +2397 714 2Z , +2452 715 4F , +2481 713 3R , +2567 715 2V , +2596 713 6H , +2675 713 6H , +2717 713 3R , +2765 714 7H , +2835 713 3R , +2883 714 0B , +2939 713 3R , +2987 715 6X , +3027 687 4H , +3121 714 7H , +3154 715 2V , +3183 715 5V , +3271 713 3R , +3356 714 3L , +3444 715 6D , +3505 714 3H , +3599 713 6L , +3643 713 3B , +3698 715 5V , +3786 715 5V , +3875 714 3L , +3925 715 3P , +3983 714 3T , +4081 715 6X , +4121 713 3R , +4168 714 7H , +4201 714 7B , +4261 715 6X , +4301 715 3P , +4359 713 6H , +4440 714 3L , +4490 715 3P , +4586 713 3R , +4634 715 6X , +4673 715 6X , +4713 713 3B , +4767 715 6X , +4815 714 4U , +4872 715 6D , +4933 715 4O , +4991 713 3R , +cleartomark end end pagesave restore showpage +%%PageTrailer +%%Page: 8 8 +%%BeginPageSetup +GS_pswrite_2_0_1001 begin +612 792 /letter setpagesize +/pagesave save store 100 dict begin +0.1 0.1 scale +%%EndPageSetup +gsave mark +K +Q q +0 0 6120 7920 re +Y +2796 7462 32 7 /6A +$C +0H"*/rO`~> +, +K +2854 7438 47 71 /2K +$C +,6CW5`$"8'6nH6K6+T@n$,&8uo^o>rqG6S[p]'ZjlM[c[[C3ON>74kmXb<CPPVEL`KG>n$;Puo" +JES-3"Psf6S&0'.l+cJtlMpnAs''WshealX>74iU<Zsh,_N81K~> +, +2929 7462 6A , +969 7079 55 47 /4S +$C +.aN80rp/h061h@qkr8H5rjSg"8c@(ef(At+5J$]0oUGf-2d]Y_\*g;!Eo<U`1]Mt~> +, +1026 7079 48 48 /6J +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +1076 7080 28 72 /4F +$C +0EsY0/Z\pOs8W-!s8W-!s8W-!s8W-!s8W-!lS&`s4p`JB2)k~> +, +1105 7079 59 48 /7B +$C +,6G^d:()^rSt(K"WZ[OKKH'R@829B/hbX7Os8W-!s8W-!s8W-!s8K(pJ6^S3s7>3jJF\7`JS/"W +3,n?~> +, +1165 7078 46 49 /3R +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +1252 7080 28 69 /5T +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +1281 7078 40 49 /3J +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +1362 7079 33 63 /7H +$C +22MSu?.7U@]^UPYFoVLAs8W-!s8W,u?o*0m2B4J$*'aK's6osmLPLB~> +, +1395 7080 58 72 /4O +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qco"??GfF?_0Zp7?*;dfE5?Pos8W-!s7M]^ +s+AH!#Cl~> +, +1453 7078 3R , +1540 7078 52 49 /5Z +$C +-,RJ#Jd4TY+S0[\0^1M^2l>gu<qXnToWS5,FoUmEs8W%)rjpk_Fh_cG[d)RJ9#F9R9#61SMQibj +PlW!~> +, +1595 7080 35 73 /4B +$C +0Esb+"P*PPs8W-!s8W-!s8V6a07FEB%#Z/ks8W,Vqtkj:[L0nZ`p\\%_LM~> +, +1628 7080 4B , +1661 7078 3R , +1709 7080 58 47 /6N +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qcY0ReuU^)_0-YK@^p/t4&U'%SJqnU0Mh~> +, +1767 7079 59 74 /3T +$C +,6PadBFG%9o].Bt<'f[3Jd*;_2s<!EI=:?D^Ak&0qZ$Tqs8DutIK/3^Iqs28[alB*$o"p%K#8Q` +"?mZ-1+_tqs8W-!s8?J%(]Hk@a^F0ZLO]~> +, +1828 7080 5T , +1857 7080 6N , +1916 7051 55 76 /7K +$C ++p6(UU(D9p_BI4g&2<;jh&tN#o\CkkFnFSgJ,d.Xs(u]/=CJ9h&r&_O@t^O*>/J*d6!EuahV:&- +aAQDs_@@-!5s.7@DNJb"HG82g\$+]hs53/>Bn"bZS_ZAA[]D/Z`.uhrTnOs!J,~> +, +2010 7078 42 49 /3N +$C +-,RJ0,D$.,dtC(&BFm314U.0';Uopg0D5AFqu:T"GOO;dD/K!tg22NP(b6GB_Li1('E~> +, +2054 7078 5Z , +2109 7080 88 47 /5V +$C +0Eoc'K:jmrq)D8+/;`aO>(?SPs8W-!s8W-!s8W-!s8W-!s8W-!ri?'Cm5<d*9l_ZL&>Ouf@AMUU +!4rFJ@)DUq/%!gM.m^-W@A]^a-57F:+CLi~> +, +2197 7080 5V , +2286 7079 6J , +2336 7080 6N , +2394 7079 3T , +2493 7059 31 93 /3B +$C +"KA5$<2ioaX%J_TkuZ=+f<21RX8]1"oY:G+s8W,ds8D]jp[@j)hqRkn]A*&HgV(4BmCQ0~> +, +2526 7052 56 75 /6T +$C +/d=P.LUCpts8W-!s8W*W++t[YiU7o"_nlWIR!K5#0_F9"If'$2n,<4bs7cQnYPu4PGO6ub73.&n +$mep_/@[=OG.U\h_[93uT^3@4(ao~> +, +2586 7078 5Z , +2641 7078 3J , +2683 7078 3J , +2726 7080 5T , +2755 7079 51 73 /2Z +$C +5EglT+SH@k^#U$'FpL$[_nllJqgH5-rV-'chuE_+s8Vrqrg*Md?)<,t[I'gC0OD_A]3VSk$n_r) ++92B@s8W+%2$O#4bf,_b~> +, +2810 7080 4F , +2839 7052 55 74 /7F +$C +3%Y6hmI,4)4=>r&qn9amhgXIsrOVILFl0+]j?`gAhs!)u2d]ipr?hQFX8\<4pIY>3Is(D_lMA*j +\l\aa"r!=,"Tb7n~> +, +2933 7079 7H , +2966 7080 38 47 /3Z +$C +0H#A^_V2d)s8W-!s8W-!hqnUF[?3rg<K18!0`S\NG9dORiPEE.~> +, +3005 7079 7B , +3065 7080 6N , +3124 7078 3N , +3168 7079 6J , +3218 7079 7H , +3251 7078 3R , +3298 7079 3T , +3360 7059 28 93 /6B +$C +3RbHUG4"&?]C+PE]C,RirpTT2^[Jr;^An65s3grIWrK*t='h6DF^7nJWD_7r<2jY:J,~> +, +3432 7080 4B , +3465 7078 5Z , +3520 7080 4F , +3549 7080 4F , +3578 7078 5Z , +3633 7079 82 48 /3X +$C +--V`>h0uuM[/YPgrB9d@+!SJRhOje2e\;&ZVUk)5[%C.MH@FT)^[7iQJ+m9?>HRpIY?pm>YNtG4 +lW<i0='tEF]"Q[tSt*;=F&6Q9h].OYhu~> +, +3716 7078 3R , +3764 7079 3T , +3864 7079 2Z , +3919 7052 7F , +4014 7079 7H , +4047 7080 4O , +4105 7078 3R , +4192 7078 3R , +4240 7080 3Z , +4279 7080 3Z , +4319 7078 5Z , +4373 7080 3Z , +4453 7080 3Z , +4493 7078 3R , +4540 7079 7H , +4573 7079 7B , +4633 7080 3Z , +4673 7080 6N , +4770 7079 4S , +4827 7079 6J , +4877 7080 4F , +4906 7079 7B , +4966 7078 3R , +5022 7079 11 12 /0D +$X +*rnNUJ&)*Bs5<q8s5<q8s5<pmJ&!-+~> +, +969 6960 60 69 /3F +$C +226&?X:j(Vs8W-!s8W-!s8W-!s8W-!s3*SAs8Vcls8W)e]ja4A~> +, +1030 6960 4O , +1088 6958 3R , +1178 6960 45 60 /3U +$C +2@YoEU`9@6s8W-!s8W-!s8W-!s8W-!s3/9>qu~> +, +1238 6958 48 45 /1G +$C +3k744+D-15#AAdpoL9e"#TK*e&7PNu60UU_rVuijpY5GpI>50sLP@d5A2Znl&'+_Ml`/:<Y\T>r +/6!H_C23s&~> +, +1298 6958 43 45 /6F +$C +--Bs+k9*%T&:G,"nKk6P"+"kk2m9\ds6X:'>#;Fq8V0QRcT29O5bS`qZp[t!6#*3fV#UJ^D6DID +fJ$MB6gQEDC((Zh~> +, +1350 6958 52 58 /1V +$C ++Dt22n;'$mK;'!rU-/Uq+pCM##-'`as8W-!s8W-!s8P8$eb5lLs8W-!qLA~> +, +1418 6958 46 45 /4X +$C ++O4a+i.reS6.$'k_BN_8!X@j2h&tE;W_I/@C:^R_oWehD^WDC>HN)Lg[CpEoV/7fdL6]!.K*7m( +:t.1mJq*~> +, +1478 6960 48 43 /3J +$C +0H-5NSR;Ess8W-!s8Tdkms/EWheWql2"95c2)l)`$#mk,\7%cB:]~> +, +1538 6960 3J , +1598 6958 47 45 /4V +$C ++PbNY":bub6JI/]+?BW7cp>6;dVhoQ]fg:0<qZHofDkmNmA9jMDd-Gsf%O0Q[[%b4@>(^9K!A.h +L(kIQ~> +, +1658 6960 3J , +1746 6959 4S , +1803 6959 6J , +1853 6960 3Z , +1892 6960 5T , +1921 6959 6J , +1971 6959 2Z , +2026 6960 4F , +2055 6958 3R , +2139 6960 5T , +2168 6958 40 49 /3J +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +2245 6958 3N , +2289 6960 4F , +2318 6958 3R , +2366 6959 6J , +2416 6960 3Z , +2456 6958 3R , +2504 6959 3T , +2600 6959 3X , +2683 6960 4O , +2742 6958 3R , +2789 6960 6N , +2848 6958 3R , +2896 6959 4S , +2952 6958 3R , +3000 6960 3Z , +3075 6960 5T , +3104 6959 7H , +3173 6960 5T , +3202 6958 3J , +3280 6960 3Z , +3320 6958 3R , +3367 6959 7H , +3400 6960 3Z , +3439 6960 5T , +3469 6958 3R , +3516 6959 4S , +3573 6958 3R , +3621 6959 3T , +3720 6959 7B , +3780 6958 3J , +3823 6960 5T , +3852 6960 6N , +3910 6931 7K , +4001 6959 7H , +4034 6960 4O , +4092 6958 3R , +4176 6959 4S , +4233 6959 6J , +4283 6960 3Z , +4322 6960 5T , +4351 6959 6J , +4401 6959 2Z , +4456 6960 4F , +4485 6958 3R , +4570 6958 3N , +4614 6958 5Z , +4669 6960 5V , +4757 6960 5V , +4846 6959 6J , +4896 6960 6N , +4954 6959 3T , +5023 6959 0D , +969 6840 3F , +1030 6840 4O , +1088 6840 5T , +1118 6838 3J , +1189 6839 6J , +1239 6840 4F , +1268 6840 4F , +1297 6838 5Z , +1352 6839 3X , +1435 6838 3J , +1507 6838 3J , +1549 6838 3R , +1597 6839 4S , +1654 6838 3R , +1702 6840 3Z , +1741 6839 6J , +1791 6840 4F , +1850 6840 3F , +1911 6839 56 73 /6F +$C ++LJp$5kmV@ADpOa$L)XK9;U)$FLka1QV41'l#aLB/sf3GX^kL=qgH2riP+2XpA99P(k'-9mIh'p +IJ`R7s8W-!s8K>)a7J5P5dOC>~> +, +1996 6838 3N , +2040 6838 5Z , +2095 6840 5V , +2183 6840 5V , +2272 6839 6J , +2322 6840 6N , +2380 6839 3T , +2441 6838 3J , +2511 6839 7H , +2544 6838 5Z , +2628 6839 2Z , +2683 6838 3R , +2760 6838 3R , +2808 6840 51 47 /6C +$C +0HhbLCT6iu*o7X>[[4%/>?fXbXeft#>>!^U>GYf:I8\U0m^,;BmF&STVWhAmPBq,U8\.XIjoKYt +a@E.\>`fE~> +, +2859 6838 3R , +2907 6838 3N , +2952 6839 7B , +3012 6839 7H , +3045 6838 3R , +3093 6839 3T , +3183 6839 3X , +3266 6840 5T , +3295 6839 7H , +3328 6840 4O , +3386 6838 5Z , +3441 6839 7B , +3501 6839 7H , +3563 6838 3N , +3607 6840 4O , +3666 6838 3R , +3713 6838 3N , +3758 6839 6F , +3813 6840 5T , +3843 6840 6N , +3901 6811 7K , +3985 6838 3R , +4033 6840 3Z , +4072 6840 3Z , +4112 6838 5Z , +4166 6840 3Z , +4237 6840 3Z , +4277 6838 3R , +4324 6839 7H , +4357 6839 7B , +4417 6840 3Z , +4457 6840 6N , +4515 6838 3J , +4587 6838 3R , +4635 6839 6J , +4685 6838 3N , +4729 6840 4O , +4816 6839 7H , +4849 6840 5T , +4878 6840 5V , +4966 6838 3R , +5022 6839 0D , +969 6720 77 70 /1H +$C +/d_ribJ29<O`89m(g$03D:`"Cqka1(IsocD[(gLij0e8bea:smqb-YKXh*hJBn"l\\+Hlk/,QKX +rg!GYIs#nSX6TPreb+?8~> +, +1079 6718 3N , +1123 6719 6J , +1173 6720 4F , +1202 6720 4F , +1263 6719 7H , +1296 6718 5Z , +1383 6719 7H , +1416 6720 4O , +1474 6718 3R , +1553 6720 59 42 /2B +$C +-3a&@>IqP[\#uk!pK,sIp!p`u]g'*B]!niOVlf4`<qY"VFhKqV]\mHa#(<CEo`~> +, +1621 6718 1G , +1681 6720 48 43 /6H +$C +0H-5NSR;Ess8W-!s8Tdkms/EWheWql2"95c2)l)`$#mk,\7%cB:]~> +, +1741 6720 45 62 /0Y +$C +2@YoEU`9@6s8W-!s8W-!s8V[E,.I+BaFaHls6p~> +, +1801 6718 1G , +1853 6718 56 62 /3Y +$C +,Ap0V:'Cb1Tg"9*%d8k,,W$'NTS%Y>qG#tA:$KCgqg/:sYQ+Y&m<\c`f%9dlBk<=V[[1h`_[1Jp +-.o@;>VNZrEW?(=s7sI<pOE~> +, +1921 6720 3U , +1981 6718 4X , +2066 6718 3N , +2110 6718 5Z , +2165 6720 5V , +2253 6720 5V , +2342 6719 6J , +2392 6720 6N , +2450 6719 3T , +2542 6719 3X , +2625 6720 5T , +2654 6719 7H , +2687 6720 4O , +2784 6720 3U , +2844 6718 1G , +2904 6718 43 45 /3H +$C +--Bs+k9*%T&:G,"nKk6P"+"kk2m9\ds6X:'>#;Fq8V0QRcT29O5bS`qZp[t!6#*3fV#UJ^D6DID +fJ$MB6gQEDC((Zh~> +, +2956 6718 1V , +3024 6718 4X , +3084 6720 6H , +3144 6720 6H , +3204 6718 4V , +3264 6720 6H , +3349 6719 6J , +3399 6719 7H , +3464 6718 3J , +3506 6719 7H , +3539 6720 3Z , +3578 6719 6J , +3628 6719 7H , +3661 6718 3R , +3709 6691 7K , +3765 6720 5T , +3794 6718 3N , +3872 6692 6T , +3932 6718 5Z , +3987 6720 5T , +4016 6720 6N , +4074 6719 7H , +4107 6718 3J , +4182 6718 3N , +4226 6719 6J , +4276 6720 6N , +4367 6720 5V , +4455 6719 6J , +4505 6719 6F , +4561 6718 3R , +4642 6718 3J , +4684 6719 7B , +4745 6720 3Z , +4784 6718 3R , +4865 6719 7H , +4898 6720 4O , +4956 6719 6J , +5006 6719 7H , +969 6599 6J , +1019 6600 6N , +1102 6599 7B , +1162 6600 6N , +1221 6598 3R , +1269 6600 6C , +1320 6572 6T , +1380 6598 3R , +1428 6598 3N , +1473 6599 7H , +1505 6598 3R , +1553 6599 3T , +1639 6598 3R , +1687 6600 3Z , +1727 6600 3Z , +1766 6598 5Z , +1821 6600 3Z , +1885 6600 4O , +1943 6599 6J , +1993 6598 3J , +2061 6600 6N , +2119 6598 5Z , +2174 6599 7H , +2231 6598 5Z , +2286 6598 3N , +2330 6598 3N , +2375 6599 7B , +2435 6600 3Z , +2474 6600 3Z , +2514 6598 3R , +2562 6599 3T , +2631 6599 0D , +728 6455 37 34 /2C +$C +2%'Ns&9Qk9:Xc6+s%i[g^U<H4p7[1T(f4V5~> +, +969 6443 3F , +1030 6443 4O , +1088 6441 3R , +1171 6441 47 45 /2L +$C ++WT&@_B@Xm#7-+#k_lB]&2ulZkm$>udX4)MBPXeWJ,fQ'r/,hrrqlRsCN%j0CLMq$@1c#I'uLE6 +'2W(k~> +, +1223 6441 56 44 /6N +$C +,i""TKGgGEK="%NoE_*ncnOSP#WMH?#HR+dp](9ns8W-!s8W-!s8W-!s6%7`i:[+oJ,~> +, +1291 6443 6H , +1351 6441 3H , +1411 6441 4V , +1471 6443 6H , +1552 6441 3N , +1596 6441 5Z , +1651 6443 5V , +1739 6443 5V , +1828 6442 6J , +1878 6443 58 47 /3P +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qcY0ReuU^)_0-YK@^p/t4&U'%SJqnU0Mh~> +, +1936 6442 3T , +2005 6442 0D , +2049 6443 3F , +2110 6443 4O , +2168 6443 5T , +2198 6441 3J , +2267 6441 3N , +2311 6441 5Z , +2366 6443 5V , +2454 6443 5V , +2543 6442 6J , +2593 6443 3P , +2651 6442 3T , +2739 6442 7H , +2772 6442 6J , +2822 6442 6F , +2877 6441 3R , +2925 6441 3J , +2996 6442 6J , +3074 6443 3P , +3132 6442 7B , +3192 6443 5V , +3281 6442 2Z , +3336 6441 3R , +3384 6443 3Z , +3451 6441 5Z , +3506 6443 4B , +3567 6441 5Z , +3622 6415 6T , +3682 6442 7H , +3714 6443 5T , +3743 6441 5Z , +3798 6443 3P , +3864 6431 45 85 /6B +$C +/mdGEmJh+ZpA_VhqgRGrrP*:*rnk3Ps)6ZcrP.asIc%X5^Mhm+hm`"MJ(s\q^Mj!W~> +, +3917 6442 4S , +3973 6442 6J , +4023 6443 4F , +4052 6442 7B , +4113 6441 3R , +4190 6415 6T , +4250 6442 6J , +4300 6443 5T , +4329 6443 3Z , +4369 6441 3J , +4440 6442 7H , +4473 6441 5Z , +4557 6441 3N , +4601 6441 5Z , +4656 6443 3P , +4714 6442 7H , +4747 6443 3Z , +4786 6441 5Z , +4841 6443 4F , +4900 6442 7H , +4933 6443 4O , +4991 6441 3R , +969 6322 6J , +1019 6295 6T , +1079 6295 6T , +1139 6321 3R , +1187 6322 6J , +1237 6323 3Z , +1277 6322 6J , +1327 6323 3P , +1385 6321 3N , +1429 6321 3R , +1504 6322 6J , +1554 6323 3P , +1612 6322 3T , +1700 6295 6T , +1760 6323 4F , +1789 6322 6J , +1839 6321 3N , +1884 6321 3R , +1931 6323 5V , +2020 6321 3R , +2068 6323 3P , +2126 6322 7H , +2185 6321 5Z , +2240 6323 4B , +2300 6322 7H , +2333 6323 4O , +2391 6321 3R , +2466 6321 3N , +2510 6322 7B , +2571 6323 3Z , +2610 6321 3J , +2653 6321 5Z , +2707 6323 3Z , +2755 6322 0D , +2799 6323 1H , +2877 6322 4S , +2933 6322 6J , +2983 6323 5T , +3012 6323 4F , +3041 6322 6J , +3091 6322 2Z , +3147 6323 4F , +3176 6321 3R , +3250 6321 5Z , +3305 6295 6T , +3365 6322 7H , +3397 6323 5T , +3426 6321 5Z , +3481 6323 3P , +3539 6321 3J , +3608 6322 6J , +3658 6323 3Z , +3698 6321 3R , +3753 6322 11 47 /1Q +$X +*WSETJ&)*Bs5<q8s5<q8s58CB5CagUzzzzzzzzzzz!!")@5Ce7!s5<q8s5<q8s5<pmJ&":!*WQ~> +, +3804 6349 47 4 /5F +$C +/ddj:TE~> +, +3856 6323 57 42 /0T +$C +1Bn>>`AIOjTZI4d[["5%V/7_s>>!UMd^GFJTsPQAXefkb'l)8[FQeq":"!pCFIT)^-L!H\\kUUj +PB<:G+cQNO:A(N8~> +, +3943 6322 27 72 /3Y +$C +1T2<V4lPiRgUL\cpjJ/%h>ata\,Wr9p\jjaid<iF$oP<-GDEgn2';iEpd*Bdn$m*~> +, +3971 6322 52 49 /0K +$C +4d;!Q$pDM^GDGXrjB)oa)r;P$pC7*#qqp<0\,6("HggF>&a',eqec;?s7ZHL[dNOtDjss[*O,M0 +gb@96f\#/epNUZOG]<0!2#~> +, +4026 6322 32 65 /3K +$C +1HH$WHc+]/\(H'eG5-OaIJ<cUs7cEis*rqpq7t.c*ZGNGG:3q!huEH>p]%^IG^'~> +, +4094 6322 6J , +4144 6323 3P , +4202 6322 3T , +4296 6349 5F , +4348 6304 57 61 /3R +$C +1^ptq+W\=9g\1T\DsmM*laeE-h'_qgrTWY4])$<YS$/^Tl+6_/^72='lfl"W]"Y>NX/kOJ@=k"( +:Aq2C~> +, +4435 6322 3Y , +4463 6322 0K , +4518 6322 3K , +4560 6308 23 27 /0L +$C +0k&hmpMY93^MeSYh7p_lq5@]N~> +, +4611 6322 7H , +4644 6321 5Z , +4725 6321 3N , +4769 6323 4O , +4828 6322 6J , +4878 6323 3P , +4936 6294 7K , +4991 6321 46 49 /3R +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +969 6202 7H , +1002 6203 4O , +1060 6201 3R , +1136 6201 3N , +1180 6202 7B , +1241 6203 3Z , +1280 6201 3J , +1323 6201 5Z , +1377 6203 3Z , +1445 6175 6T , +1505 6201 5Z , +1560 6201 3J , +1602 6203 5T , +1631 6202 7H , +1664 6203 5T , +1693 6201 5Z , +1747 6203 3P , +1834 6202 7H , +1867 6201 5Z , +1950 6202 6J , +2000 6203 4F , +2029 6203 5T , +2058 6174 7K , +2114 6203 3P , +2200 6203 5T , +2229 6202 7H , +2262 6201 3J , +2332 6203 4O , +2390 6201 5Z , +2445 6202 7H , +2477 6175 6T , +2537 6201 5Z , +2592 6203 5T , +2621 6203 3P , +2679 6202 7H , +2741 6202 6J , +2791 6202 7H , +2852 6202 7H , +2885 6203 4O , +2943 6201 3R , +3019 6174 7K , +3075 6203 5T , +3104 6202 4S , +3160 6201 3R , +3208 6203 3P , +3295 6175 6T , +3355 6201 5Z , +3410 6203 5T , +3439 6203 3P , +3497 6202 7H , +3559 6182 3B , +3592 6203 5T , +3621 6203 3P , +3708 6201 3J , +3750 6201 3N , +3795 6203 3Z , +3834 6201 3R , +3882 6201 3R , +3930 6203 3P , +4017 6201 3N , +4061 6201 5Z , +4116 6201 5Z , +4171 6203 3Z , +4210 6202 3T , +4271 6203 5T , +4300 6203 3P , +4358 6202 6J , +4408 6202 7H , +4441 6201 3R , +4489 6201 3J , +4531 6182 28 93 /6B +$C +3RbHUG4"&?]C+PE]C,RirpTT2^[Jr;^An65s3grIWrK*t='h6DF^7nJWD_7r<2jY:J,~> +, +4565 6188 23 61 /1M +$C +0k&hmpMY93^MeSYh=p[<GW$"$s8V\cKH39Qs(g>C'E~> +, +4626 6229 5F , +4678 6201 56 62 /3Y +$C +,Ap0V:'Cb1Tg"9*%d8k,,W$'NTS%Y>qG#tA:$KCgqg/:sYQ+Y&m<\c`f%9dlBk<=V[[1h`_[1Jp +-.o@;>VNZrEW?(=s7sI<pOE~> +, +4746 6203 0Y , +4798 6201 1V , +4858 6203 61 43 /0S +$C +2AdhJ:_A3Oo1(F=qu?]rs8W-!s8W-!s8W-!s8W-!s8W-!pO;Seqb;8cG?JF`D.WiQ<gR9_Y1)/_ +(f=s(~> +, +4926 6201 1G , +4978 6184 56 62 /4G +$C +3!q,3aUeFOs8W,sL(f.]^j&07KBS.Ncm,Lc$,2!#oUEfYVpfsAH@Pgis8W,r?GEo@[G>\?a(]_F +m=`,+Ph9rm$$Ii'Xr("?'E~> +, +953 6056 58 100 /6I +$C +,EE>P_qsamH4ASG/c1"Sh=pl_pOBsH^\tqI\,Y@#qtL,?hgb[<ruqOq_;VnKA75Ans1a'XIsp3u ++fK;GXg#5d*qmL+TE~> +, +997 6082 27 72 /3Y +$C +1T2<V4lPiRgUL\cpjJ/%h>ata\,Wr9p\jjaid<iF$oP<-GDEgn2';iEpd*Bdn$m*~> +, +1025 6082 26 74 /0W +$C +4QnmjiU7:$_r8<HGAE95s7ZKehtR$Is*rpUqsXQ5s6]jcn,M;>qlJ-\n8,!:*&m~> +, +1052 6082 39 49 /3G +$C +-P?\G#>U(]%gY*b0_fOIDm8jU^E<LMqtJ03&f;3)_%rpQ*sNeq4(3osICltsmsBE;hfdlODf&U$ +@ARIgTr9Z<~> +, +1091 6082 0K , +1147 6082 42 49 /2A +$C +2\D;ZK>WI>pNUZOGoaF9^>@ac@H"[)GK71@^Y@SZ^$WSDq]hB`lsB\cqg[AXmI.gHh>d3+h7iis +h:pnp5diannAo!b(a/;~> +, +1191 6082 75 49 /1X +$C +4cl(.nk$p@#I`!/LOT!8pO2+,GOWNI[sf7_j*e]>rr)6!qu:TkmJjri[dO1-rqj=D&bZKkGJEiA +XH,SaDYri#pAMGe^"^!a\$sVa]tY'0H[b\^*Q&=gG/NZ_@?)9:pMenIGIrWc%NZMn%6s~> +, +1269 6082 3G , +1355 6081 5Z , +1410 6083 3Z , +1495 6109 5F , +1555 6083 0Y , +1607 6083 0S , +1675 6081 1G , +1735 6064 50 62 /3L +$C +,QSa(*Ou4e)i(n?qnDP!s33hh+FG=,:SK,l5_4^;62F=JK7,(0FIu?9:]Jjms8W-![D2[BrN6%# +Zrm3>FrL(k?%WGSF&jf"@>.Nd$i~> +, +1795 6081 4X , +1886 6082 3Y , +1914 6082 1X , +1992 6082 2A , +2028 6055 59 76 /3W +$C +.DjA]Se*q+-la@!U7d,L:!sL9lJA/jrVs"uY?P^`[["5%X>U]qcqqVP(bh0kW%bWZ>1Kfkp?ulc +"G-kEd0[Y96+T@;VY&\_^9>$GJ+)h*s1\O#pI#f=qeL*(6sPH`;LmS\L7s;*$3~> +, +2086 6082 3G , +2125 6082 0K , +2180 6082 2A , +2225 6082 1X , +2303 6082 3G , +2387 6082 7H , +2420 6081 5Z , +2512 6081 3N , +2556 6083 4O , +2615 6082 6J , +2665 6083 3P , +2723 6054 7K , +2778 6081 3R , +2863 6082 7H , +2896 6083 4O , +2954 6081 3R , +3039 6082 6J , +3089 6055 6T , +3149 6055 6T , +3209 6081 3R , +3257 6082 6J , +3307 6083 3Z , +3347 6082 6J , +3397 6083 3P , +3455 6081 3N , +3499 6081 3R , +3584 6081 5Z , +3639 6083 4B , +3709 6082 7H , +3742 6083 4O , +3800 6081 3R , +3885 6081 3N , +3929 6082 7B , +3990 6083 3Z , +4029 6081 3J , +4072 6081 5Z , +4126 6083 3Z , +4166 6068 1M , +4228 6082 6J , +4278 6083 3P , +4336 6082 3T , +4441 6109 5F , +4501 6081 52 62 /2N +$C ++rokY#W"`MK<U/9H6SI9Jd1>]"Q)ebODiWjSs/p#8cSY$^]4?6s0]W?Xo5C#XgD4-C[Eb.?%s!Y +(e]T6Yde+\@<)>Is8W'dK%Ji~> +, +4561 6081 4X , +4621 6083 48 60 /6D +$C +3#\:_Rc"/Fs8W-!s8W-!s8SZ":&Re)s8W)TmI%f]?&K12K-?0~> +, +4681 6081 1G , +4733 6081 6N , +4801 6083 3U , +4853 6081 1V , +4951 6082 7H , +4984 6081 5Z , +969 5961 3N , +1013 5963 4O , +1072 5962 6J , +1122 5963 3P , +1180 5934 7K , +1235 5961 3R , +1308 5962 2Z , +1364 5962 6J , +1414 5961 3N , +1458 5962 6F , +1539 5962 7H , +1571 5961 5Z , +1651 5962 7H , +1683 5963 4O , +1742 5961 3R , +1814 5962 3T , +1876 5961 3R , +1923 5963 4B , +1957 5962 6J , +2007 5962 7B , +2067 5963 4F , +2096 5962 7H , +2154 5962 6J , +2204 5935 6T , +2264 5935 6T , +2324 5961 3R , +2372 5962 6J , +2422 5963 3Z , +2461 5962 6J , +2511 5963 3P , +2570 5961 3N , +2614 5961 3R , +2687 5961 5Z , +2741 5963 4B , +2800 5962 7H , +2832 5963 4O , +2891 5961 3R , +2963 5961 3N , +3008 5962 7B , +3068 5963 3Z , +3108 5961 3J , +3150 5961 5Z , +3205 5963 3Z , +3252 5962 0D , +719 5806 58 69 /6Q +$C +1CW&nPtW/Om"HQF"*Y4Dhf$!Yn*e$+p]&#.s8U]R^Zfn*E0glO(bphK/;$Er=V-/u9Gi.9_[j62 +pY5^ds7cQnrI=g5?BmkH8e@u+<Plgml2~> +, +780 5804 3R , +828 5804 3N , +872 5805 6J , +922 5805 7B , +983 5804 3J , +1025 5804 3R , +1113 5805 7H , +1146 5806 4O , +1204 5804 3R , +1294 5806 4F , +1323 5805 6J , +1373 5806 3P , +1431 5777 7K , +1487 5805 7B , +1547 5805 6J , +1597 5777 7K , +1653 5804 3R , +1743 5805 6J , +1793 5804 3N , +1837 5804 3N , +1882 5804 3R , +1930 5778 6T , +1990 5805 7H , +2022 5804 3R , +2070 5805 3T , +2173 5805 2Z , +2228 5778 7F , +2326 5805 7H , +2359 5806 4O , +2417 5804 3R , +2514 5804 2L , +2566 5806 0S , +2634 5804 2N , +2729 5806 4B , +2762 5805 7B , +2823 5806 3P , +2881 5804 3N , +2925 5805 7H , +2958 5806 5T , +2987 5804 5Z , +3041 5806 3P , +3141 5806 4O , +3199 5805 6J , +3249 5804 3J , +3333 5806 3P , +3391 5804 5Z , +3488 5805 7B , +3548 5804 3J , +3591 5804 3R , +3639 5806 3Z , +3678 5828 6A , +3711 5805 3T , +3772 5804 3R , +3820 5806 4B , +3854 5806 5T , +3883 5806 3P , +3941 5804 3R , +3989 5805 3T , +4091 5806 4B , +4124 5805 7B , +4185 5806 3P , +4243 5804 3N , +4287 5805 7H , +4320 5806 5T , +4349 5804 5Z , +4403 5806 3P , +4462 5804 3J , +4504 5791 0L , +4570 5806 3P , +4628 5804 5Z , +4725 5804 3N , +4769 5804 5Z , +4824 5806 3P , +4882 5805 7H , +4915 5806 3Z , +4954 5804 5Z , +5009 5806 4F , +719 5686 4B , +752 5686 4F , +781 5684 5Z , +836 5685 3X , +956 5685 6J , +1006 5686 3P , +1064 5685 3T , +1162 5685 4S , +1219 5684 3R , +1266 5686 3Z , +1306 5658 7F , +1400 5686 4B , +1433 5684 3R , +1481 5685 3X , +1601 5685 4S , +1658 5685 6J , +1708 5686 3Z , +1747 5686 5T , +1776 5685 6J , +1826 5685 2Z , +1881 5686 4F , +1910 5684 3R , +1958 5684 3J , +2001 5671 0L , +2063 5685 6J , +2113 5686 4F , +2142 5686 5V , +2230 5684 5Z , +2285 5684 3J , +2327 5685 7H , +2397 5685 6J , +2447 5686 4F , +2476 5686 4F , +2542 5685 6J , +2592 5658 6T , +2652 5658 6T , +2712 5686 4F , +2741 5686 5T , +2770 5684 3N , +2815 5685 6J , +2865 5685 7H , +2897 5686 5T , +2926 5684 5Z , +2981 5686 3P , +3039 5684 3J , +3118 5686 3P , +3176 5684 3R , +3224 5684 3R , +3272 5685 3T , +3369 5685 7H , +3402 5684 5Z , +3493 5686 4O , +3551 5685 6J , +3601 5685 4S , +3658 5684 3R , +3742 5684 3J , +3784 5684 5Z , +3839 5686 5V , +3927 5684 3R , +4011 5684 5Z , +4066 5686 4B , +4135 5685 7H , +4168 5686 4O , +4226 5684 3R , +4274 5686 5T , +4303 5686 3Z , +4379 5686 4F , +4408 5684 5Z , +4463 5657 7K , +4518 5686 5T , +4547 5684 3N , +4628 5686 5T , +4657 5686 3P , +4751 5686 60 69 /5R +$C +1BfGjiK1'#,=ctPrr<#qs8MRA)uos<s8W-!s8W-!s8W-!s8T[WEraVc~> +, +4812 5686 5T , +4841 5686 5V , +4929 5685 2Z , +4985 5684 5Z , +719 5538 6T , +779 5566 3Z , +819 5564 5Z , +873 5537 7K , +929 5566 3Z , +968 5565 6J , +1018 5566 5V , +1107 5564 3J , +1157 5565 0D , +1246 5566 3F , +1307 5566 4O , +1365 5564 3R , +1459 5566 5V , +1547 5564 5Z , +1602 5565 3T , +1663 5564 3R , +1711 5566 3Z , +1750 5566 3P , +1855 5564 3N , +1899 5564 5Z , +1954 5566 3P , +2012 5564 3N , +2057 5565 7B , +2117 5566 3Z , +2156 5566 3Z , +2196 5564 3R , +2244 5566 3P , +2302 5564 3N , +2346 5538 7F , +2448 5564 3N , +2492 5564 5Z , +2547 5566 3P , +2605 5564 3J , +2648 5565 7H , +2680 5566 3Z , +2720 5565 7B , +2780 5564 3N , +2824 5565 7H , +2857 5566 5T , +2886 5564 5Z , +2941 5566 3P , +2999 5564 3J , +3087 5538 6T , +3147 5566 3Z , +3187 5564 5Z , +3241 5565 4S , +3298 5566 5T , +3327 5565 3T , +3388 5564 3R , +3436 5565 3T , +3544 5565 2Z , +3599 5538 7F , +3702 5566 5R , +3763 5566 5T , +3792 5566 5V , +3880 5565 2Z , +3936 5564 5Z , +4040 5593 43 6 /2F +$C +0FaZL~> +, +4134 5538 6T , +4194 5566 3Z , +4234 5564 5Z , +4288 5564 3N , +4333 5564 3R , +4380 5564 3J , +4423 5564 3J , +4465 5564 3R , +4513 5564 3J , +4556 5551 0L , +4627 5564 3N , +4671 5566 4O , +4730 5565 6J , +4780 5566 3P , +4838 5566 3P , +4896 5564 3R , +4944 5566 4F , +4973 5564 3J , +5015 5551 0L , +719 5444 3J , +761 5444 3R , +809 5446 3P , +867 5445 3T , +937 5434 45 85 /6B +$C +/mdGEmJh+ZpA_VhqgRGrrP*:*rnk3Ps)6ZcrP.asIc%X5^Mhm+hm`"MJ(s\q^Mj!W~> +, +989 5446 3Z , +1029 5444 3R , +1077 5444 3N , +1121 5444 3R , +1169 5446 5T , +1198 5445 4S , +1254 5444 3R , +1347 5444 5Z , +1402 5418 6T , +1462 5444 3R , +1510 5446 3Z , +1549 5445 6J , +1599 5445 7H , +1632 5444 5Z , +1686 5446 3Z , +1726 5444 3J , +1814 5445 6J , +1864 5446 3P , +1922 5445 3T , +2034 5444 1G , +2094 5446 3U , +2146 5444 1V , +2210 5473 2F , +2301 5446 3Z , +2341 5444 3R , +2388 5418 6T , +2448 5446 4F , +2478 5445 6J , +2528 5444 3N , +2572 5444 3R , +2664 5445 7B , +2724 5446 3P , +2782 5444 3J , +2825 5445 7H , +2857 5446 3Z , +2897 5445 7B , +2957 5444 3N , +3002 5445 7H , +3034 5445 7B , +3095 5446 3Z , +3134 5444 3R , +3182 5445 3T , +3286 5446 5T , +3315 5446 3P , +3373 5445 7H , +3406 5444 3R , +3454 5446 3Z , +3493 5446 3Z , +3533 5445 7B , +3593 5418 6T , +3653 5445 7H , +3686 5444 3J , +3772 5425 3B , +3805 5491 24 26 /5W +$C +4RdSWJ)B.-pUBV'g\1)S_dTJ~> +, +3833 5444 3N , +3877 5445 6J , +3927 5446 4F , +3957 5446 4F , +4028 5445 2Z , +4083 5445 6J , +4133 5444 3N , +4178 5445 6F , +4233 5444 3J , +4276 5491 24 26 /0N +$C +4`80npM\gBpUfn^qtp@3,7GK@~> +, +4303 5425 28 93 /3D +$C +3RbHUG4"&?]C+PE]C,RirpTT2^[Jr;^An65s3grIWrK*t='h6DF^7nJWD_7r<2jY:J,~> +, +4337 5431 0L , +4404 5444 5Z , +4459 5446 4B , +4492 5445 7H , +4524 5444 3R , +4572 5446 3P , +4674 5445 7B , +4734 5444 3J , +4777 5444 3R , +4825 5445 3T , +4928 5445 2Z , +4983 5418 7F , +719 5324 5Z , +774 5325 7H , +806 5326 4O , +864 5324 3R , +912 5326 3Z , +997 5297 7K , +1053 5326 3Z , +1092 5325 6J , +1142 5298 6T , +1202 5326 4O , +1260 5326 5T , +1289 5324 3N , +1334 5324 3J , +1420 5324 3J , +1462 5298 7F , +1518 5324 3J , +1560 5325 7H , +1593 5324 3R , +1641 5326 5V , +1729 5324 3J , +1772 5311 0L , +1840 5325 2Z , +1895 5298 7F , +1995 5324 3J , +2037 5325 7H , +2070 5326 3Z , +2109 5325 7B , +2170 5324 3N , +2214 5325 7H , +2247 5325 7B , +2307 5326 3Z , +2347 5324 3R , +2394 5325 3T , +2500 5324 3N , +2544 5324 5Z , +2599 5326 3P , +2657 5325 7H , +2690 5326 3Z , +2729 5324 5Z , +2784 5326 4F , +2858 5326 4B , +2891 5326 4F , +2920 5324 5Z , +2975 5325 3X , +3066 5325 0D , +3152 5305 3B , +3185 5326 3F , +3247 5326 4O , +3305 5324 3R , +3396 5326 33 69 /0P +$C +0H%XJ!UM?&s8W-!s8W-!s8W-!s8W-!s8W-!s)k!s!MdF~> +, +3430 5326 3P , +3488 5326 4B , +3521 5324 3R , +3569 5326 3Z , +3609 5326 3P , +3667 5324 5Z , +3767 5324 3J , +3809 5326 4O , +3868 5324 3R , +3915 5326 4F , +3945 5326 4F , +4018 5325 3T , +4079 5324 5Z , +4134 5324 3R , +4182 5324 3J , +4269 5298 6T , +4329 5326 3Z , +4369 5324 5Z , +4423 5325 4S , +4480 5326 5T , +4509 5325 3T , +4570 5324 3R , +4664 5324 3J , +4706 5325 7B , +4767 5298 6T , +4827 5298 6T , +4887 5324 5Z , +4941 5326 3Z , +4981 5325 7H , +5014 5311 0L , +719 5206 4O , +777 5204 5Z , +832 5205 3X , +915 5204 3R , +963 5205 4S , +1020 5204 3R , +1067 5206 3Z , +1107 5191 0L , +1166 5206 4B , +1199 5204 5Z , +1254 5206 3Z , +1326 5206 3Z , +1366 5205 6J , +1416 5178 6T , +1476 5206 5T , +1505 5205 3T , +1598 5178 6T , +1658 5206 3Z , +1698 5204 5Z , +1752 5205 7H , +1785 5204 5Z , +1839 5205 7H , +1872 5178 7F , +1928 5178 6T , +1988 5206 5T , +2017 5206 3P , +2075 5177 7K , +2165 5205 7B , +2225 5204 3J , +2268 5206 5T , +2297 5206 3P , +2355 5177 7K , +2442 5206 3F , +2503 5205 6F , +2591 5205 6J , +2641 5206 3P , +2699 5205 3T , +2792 5205 6J , +2874 5204 3J , +2916 5204 3N , +2961 5206 3Z , +3000 5206 5T , +3029 5178 6T , +3089 5205 7H , +3122 5206 5T , +3151 5206 3P , +3209 5177 7K , +3297 5206 4F , +3326 5205 6J , +3376 5206 3P , +3434 5177 7K , +3490 5205 7B , +3550 5205 6J , +3600 5177 7K , +3656 5204 3R , +3712 5205 1Q , +3761 5204 3J , +3803 5204 3R , +3851 5204 3R , +3931 5205 7H , +3964 5206 4O , +4022 5204 3R , +4102 5206 5V , +4190 5205 6J , +4240 5206 3P , +4298 5205 7B , +4359 5205 6J , +4409 5206 4F , +4469 5178 6T , +4529 5205 6J , +4579 5177 7K , +4635 5204 3R , +4683 5204 3J , +4757 5206 4B , +4790 5204 5Z , +4845 5206 3Z , +4917 5205 36 49 /1C +$C +1D4L?KH;1$9KN@diA[Y2ID9uEhuE+/X_T6!k>9J-TkGn_K#hFi6B$NJfApN?s0pmoS[Go7(g(:V +(aq(7~> +, +4956 5205 48 74 /3Q +$C +09hbl>TVA,5COXAaL:g$L\BU9fR*)%mr/6_pAa#sg])`WYXF!8pAMGWIdR.5[sbaQpL4$8D;Pad +Z1kbV^CS6OeZo/QhuC=g^\qf]O!k."KnI5"~> +, +5006 5228 31 6 /6U +$C +0H#?:g]~> +, +719 5085 3K , +752 5085 46 74 /2O +$C +09UKL\9M`_G>H-?M!r].g-P^$0Aa.O]&'pg^Mi@ThpS`bs4a^uhX,Odhn@e3pj6qgFrtX=+(R)& +II?tC_g#sVp]'(LqtL!eZf&RZ!0^6`GWY~> +, +804 5065 3B , +837 5086 43 69 /5Q +$C +-jHk!!TAb"J,fQKs8W-!s8W-!s8W-!s8U<pLX:JlKAhU%NZJ]A#D\(iJ,~> +, +887 5065 3D , +946 5085 6J , +996 5086 3P , +1054 5085 3T , +1139 5085 71 49 /0N +$C +3Y;p"JV5%#*oYRCLeDb7]`umol+.>ugT,GQYA_/4DuK(tg[4b6qda`^mrgeipV$Om^A[rcpODpe +[r;/PrVq*!ZQ"C3hY6a#]D]3Ll!&#bO0.kghg8E7eW\EsRXb~> +, +1211 5085 3Y , +1239 5085 1C , +1278 5085 3Q , +1336 5065 3B , +1369 5086 5Q , +1419 5065 3D , +1478 5086 5T , +1507 5086 3P , +1590 5085 72 70 /6G +$C +,%^^slb?6lGn>CBqKh"i\,AI.:L!gi\,&i!:"T=js/,,]PCKEWrR-2Ho`")>l["&&TCol^\mK?h +]!q+.9f[18+Mkhf~> +, +1662 5084 5Z , +1717 5086 4F , +1746 5085 7B , +1806 5086 5V , +1894 5084 3R , +1967 5086 5Q , +2025 5085 0D , +2042 5065 3D , +720 4842 47 68 /4L +$C +3fZrD5m+sl%Z!;2&2<U+GYRGe2ll?3Utth's*h\nRRpqjf*2V?qUVca-K/p\k$^7Ls8W,i)H#,d +s80-R-i~> +, +770 4843 20 15 /6Y +$C +1`Rl=FT;<CC)Bb~> +, +795 4844 47 66 /6Y +$C +/df5imdBG!U=fSWgUD(V]6<Sr[r1$6G5#n2n%3q\rpRT]s*t%I\+[LY\7o?eEF2euTnNqC$5b3/2u~> +, +845 4843 20 15 /6Y +$C +1`Rl=FT;<CC)Bb~> +, +920 4844 99 69 /5F +$C ++N5Pas/u4TfDjQIqX=/QJ$o#HlgK=,+bAF'#O>"ZJ,8K3ID=@"g\UR"D1-p+Y-%0hqePNd[Zf>C +Fn]+l]j"/0Id>I`ej$QlIb1agrMT\L\mO:l?i%P&qt0,5E6ZJ>Dnjo<3@bQS~> +, +1020 4844 30 71 /2M +$C +0H#A(KA-A*s8W-!s8W-!s8?^e)F*gYGmktL:jE#]AO4eC?2sl,C=Fr1~> +, +1053 4842 58 74 /3V +$C +--g96$(;'KK@A;uOFBLHqIFR@!\e^-4qN$9VuE:%^]401s8W,ts8RNIhqHn'XgPSQ(h%6"pP4Jh +is#mPs8W-!s44J4)F*dD%jb[Ni:$~> +, +1114 4817 53 74 /7N +$C +.D[AsDZh'_KH1WC*<HH/+N)'6OFMAAn#PpGs1R:dC)b'*fMKR%-!KV<_SXAk7^%/Xh2oL.5_/q@ +#W`G-%!08pdVi2YrRJT2p](9fs46"J6Xd$EXfDjY@q7A$$n,OUE:<~> +, +1170 4842 46 49 /5G +$C ++U++g6m1FjKH4dS%@Npn#4R8n%;9Hkde`s0run4!%=!O$"j!oDs6oj9f)MddD(?#G0i6DS%7:I2 +M4a~> +, +1220 4842 32 65 /0F +$C +.EZ`8VbXVnZpArR#H(r/s8W-!s8W-!q/FU2G7Ntp8,rVhs7Ni+LP*L[~> +, +1278 4842 52 49 /2V +$C ++U++g6m-H$K]n$]*<H\uDNfBa^72=,YM9*AIfKHJs8W&LYOB6S^Uh#29@^83L6ODnTnNn(#T`~> +, +1334 4818 56 73 /0A +$C +0H#B9QnN4+s8W-!s8V8CQOen!_qlG%7D'0jKH&BdDcb]fhr"<\p](9Ns8Ke5YN]nI\7oB'd&DQ@ +>Vg_4Y11Z82'Ie**&+&EJq*~> +, +1395 4842 0F , +1428 4844 2M , +1462 4842 2V , +1517 4844 59 47 /3B +$C +/fA4$TE!.:j:ducs8W-!s8W-!s8W-!s8W-!YP,S6V*Tg/bD(U.Ap1dlk(&#^$q:pOW&S<Uhu~> +, +1578 4842 40 49 /4G +$C +3f>g'n3Oo%%j7D36+e>sT3%oiqqqCITh04KCBXhpb6^M`XXX\d$A^)?6ToH"%MlEM^]+8HpKJ%X +L).gSG[X3`GQ~> +, +719 4687 0P , +753 4687 3P , +848 4687 3F , +909 4686 6F , +965 4672 0L , +1027 4686 6J , +1077 4687 4F , +1106 4687 4F , +1172 4686 3X , +1255 4687 5T , +1284 4686 3T , +1346 4658 7K , +1401 4685 3R , +1449 4686 7H , +1519 4685 3N , +1563 4687 3Z , +1603 4685 3R , +1651 4686 6J , +1701 4686 7H , +1733 4687 5T , +1762 4685 5Z , +1817 4687 3P , +1913 4685 3N , +1957 4685 5Z , +2012 4687 5V , +2100 4687 5V , +2189 4686 6J , +2239 4687 3P , +2297 4686 3T , +2358 4685 3J , +2400 4672 0L , +2461 4686 6J , +2511 4687 3P , +2569 4686 3T , +2667 4686 6J , +2717 4687 4F , +2746 4687 4F , +2819 4685 2L , +2879 4668 3L , +2939 4685 4X , +2991 4685 1V , +3089 4686 3X , +3172 4687 5T , +3201 4686 3T , +3263 4658 7K , +3318 4685 3R , +3366 4686 7H , +3436 4685 3N , +3480 4685 5Z , +3535 4687 5V , +3623 4687 5V , +3712 4686 6J , +3762 4687 3P , +3820 4686 3T , +3881 4685 3J , +3959 4686 6J , +4009 4685 3N , +4053 4685 3N , +4098 4685 3R , +4146 4659 6T , +4206 4686 7H , +4276 4686 6J , +4364 4685 3N , +4408 4685 5Z , +4463 4687 5V , +4551 4687 5V , +4640 4685 5Z , +4694 4687 3P , +4790 4685 3J , +4832 4685 3R , +4880 4686 7H , +4951 4685 5Z , +5006 4687 4B , +719 4538 7K , +775 4565 3R , +822 4567 3P , +881 4565 3R , +929 4567 3Z , +968 4567 5T , +997 4565 3N , +1075 4565 5Z , +1130 4539 6T , +1190 4566 7H , +1222 4567 5T , +1251 4565 5Z , +1306 4567 3P , +1364 4565 3J , +1440 4567 5T , +1469 4567 3P , +1559 4566 6J , +1609 4566 3T , +1670 4566 3T , +1731 4567 5T , +1760 4566 7H , +1793 4567 5T , +1822 4565 5Z , +1877 4567 3P , +1967 4566 7H , +2000 4565 5Z , +2087 4566 3X , +2170 4567 5T , +2199 4566 3T , +2261 4538 7K , +2316 4565 3R , +2364 4566 7H , +2397 4589 6A , +2430 4565 3J , +2472 4539 6T , +2532 4565 3R , +2580 4565 3N , +2625 4567 5T , +2654 4567 4B , +2687 4567 5T , +2716 4565 3N , +2791 4565 5Z , +2846 4539 6T , +2906 4566 7H , +2938 4567 5T , +2967 4565 5Z , +3022 4567 3P , +3080 4565 3J , +3131 4566 0D , +3205 4567 58 69 /5P +$C +2?s3(!F!QE)ak,7huE0FJ,A1(s88h1s8W,brYH[V+pd[fp](9nnc/Xh+F!kcs0)I>F;YW2LG/r4Du~> +, +3266 4567 6C , +3318 4565 3N , +3362 4565 3R , +3410 4539 6T , +3470 4566 7H , +3535 4566 6J , +3585 4565 3J , +3659 4567 3P , +3717 4565 5Z , +3772 4566 7H , +3804 4565 3R , +3852 4566 3T , +3946 4565 5Z , +4001 4566 7H , +4033 4567 4O , +4091 4565 3R , +4139 4567 3Z , +4179 4566 3X , +4262 4567 5T , +4291 4565 3J , +4334 4565 3R , +4382 4552 0L , +4439 4566 7H , +4472 4567 4O , +4530 4565 3R , +4610 4567 5V , +4698 4565 3R , +4746 4566 6J , +4796 4567 3P , +4854 4567 5T , +4883 4567 3P , +4942 4538 7K , +4997 4565 3J , +719 4446 6J , +769 4447 3Z , +809 4445 3R , +897 4446 7H , +930 4447 4O , +988 4445 3R , +1076 4445 3J , +1118 4446 6J , +1168 4447 5V , +1257 4445 3R , +1344 4446 6J , +1394 4445 3J , +1476 4446 7H , +1509 4447 4O , +1567 4445 3R , +1615 4419 7F , +1711 4446 6J , +1761 4447 3Z , +1801 4445 3R , +1889 4447 5T , +1918 4447 3P , +2016 4447 3F , +2077 4446 6F , +2173 4447 48 69 /5K +$C +21n\f@.;aLJ,fQKjhY/&h3M<(5D*m`rnmU$^\7]^mJjZphf&J-rqh34p\3GBDnj$Dq]5Y(]D+KN~> +, +2231 4446 0D , +2248 4445 47 71 /0V +$C ++p(%4KH3$?0=h9*Uu%T:h0h4h:&_W*^Uj:An%\m0?iC$)s8W-!s82i"otU8$qka8c?WR/k^SPda +V/7^e'!Y9_0VH6I~> +, +2306 4446 0D , +2363 4447 3F , +2424 4447 4O , +2482 4445 3R , +2570 4446 6J , +2620 4447 4F , +2649 4447 4F , +2678 4445 5Z , +2733 4446 3X , +2816 4446 6J , +2866 4446 2Z , +2921 4447 4F , +2951 4445 3R , +3039 4447 4B , +3072 4445 5Z , +3127 4447 3Z , +3166 4447 5V , +3255 4445 3J , +3338 4445 5Z , +3393 4447 4B , +3467 4446 7H , +3500 4447 4O , +3558 4447 5T , +3587 4447 3P , +3645 4418 7K , +3701 4445 3J , +3784 4447 4F , +3813 4447 5T , +3842 4446 6F , +3898 4445 3R , +3987 4446 40 49 /0G +$C +-j^/!+R.k4$gs*1oGc8$K7#W86i[2dJ+rF1^O>"&otU4tpA99M[]mT"f\tene/0S~> +, +4028 4446 42 49 /3S +$C +-k[(P#>U(N%ZkTp\lYd+Id')2hu3<Ds7ZKihZ!QRmf.e*IJ_p0HFM^IV/9XqQ&:<iW%_$~> +, +4072 4446 0W , +4100 4446 3S , +4144 4446 39 49 /6K +$C +4lg/As8.<CJ,A^3J+)9E#`n#MM#Y3gp>9c^g[0SkC>l<:a)?;/]o.,Yh8?k7G7=c~> +, +4191 4432 0L , +4257 4446 49 74 /4K +$C +3+QNlE;"q%\p(Z2D^*hS3-oKO4s+^PLZ,rDDEYW!rVpfjme=0iA9./6^A!'SrSQAernG3bDgUAj +hflPQf#%Zr_qTs!,"=f+s51Tgp]#]J2@Jl/JeFbC_gh~> +, +4307 4446 3Y , +4335 4446 1C , +4374 4446 3K , +4415 4432 0L , +4481 4446 6J , +4531 4447 3P , +4589 4446 3T , +4675 4420 6I , +4719 4446 3S , +4763 4446 0K , +4819 4446 3K , +4901 4446 6J , +4951 4447 3Z , +4991 4445 3R , +719 4325 3J , +761 4327 4F , +790 4327 5T , +820 4298 7K , +875 4327 4O , +933 4326 7H , +966 4327 4F , +995 4299 7F , +1096 4326 3T , +1157 4327 5T , +1186 4327 4B , +1219 4327 4B , +1253 4325 3R , +1301 4327 3Z , +1340 4325 3R , +1388 4327 3P , +1446 4326 7H , +1524 4327 5T , +1553 4327 3P , +1656 4327 5R , +1717 4327 5T , +1746 4327 5V , +1834 4326 2Z , +1890 4325 5Z , +1952 4315 6B , +2005 4327 3F , +2066 4326 6F , +2130 4326 0D , +2216 4325 51 73 /4W +$C +3eBr>]F[%gd07f:#T.^j2hW.!H>cOTn(ZCm^V@hHl`-t<Tk"Qfa?[n4i6aRf>U9\C$@u_DF[QV( +6o1X#^sjhA>1_C+gk"A^mf2\K?1uk'fO6iM/21^fM\)S6K*<aDJ,~> +, +2269 4325 3R , +2316 4325 3R , +2409 4326 3K , +2442 4300 50 75 /4U +$C +3&j1e3dDA@TS%P"l+_F[mDHCShXA3tg\\__L>/WQIdW]oh<jbb^V0@?g\1*Fh;>^8n&O,%pqH_* +p]#1/Hf+_tn,In+mU*]#_[gY&?5WS6DBHV&#/cW9~> +, +2492 4300 47 75 /7I +$C +-Dt8Gs1eHGs4dSNn,IiEG_<oj6hkg9@GqFfID:2cGPAQEp\/n+^V@JVDu9G"n*e()rtbAR4b((m +hei>RrP&"!*o>_We1l[r]+khM%h@.-_a)]~> +, +2542 4326 3G , +2581 4326 1C , +2628 4306 31 93 /5Z +$C +"KA5$<2ioaX%J_TkuZ=+f<21RX8]1"oY:G+s8W,ds8D]jp[@j)hqRkn]A*&HgV(4BmCQ0~> +, +2661 4325 46 71 /6E +$C +-fG0#Ee,@L_[[W?*OoP4[gh*J]6C`rmea`sk-8e0L-H"6K5R;WU(9306,*[[Bg"L`o_t2lfDkm& +n+H?ls%;26g>+9-L6]!.K*bYY@7(ApM#~> +, +2711 4306 3D , +2788 4327 5T , +2817 4327 3P , +2919 4326 6G , +2991 4325 52 49 /5Z +$C +-,RJ#Jd4TY+S0[\0^1M^2l>gu<qXnToWS5,FoUmEs8W%)rjpk_Fh_cG[d)RJ9#F9R9#61SMQibj +PlW!~> +, +3046 4327 4F , +3075 4326 7B , +3135 4327 5V , +3223 4325 3R , +3315 4327 5Q , +3409 4327 4B , +3442 4325 5Z , +3497 4327 3Z , +3581 4299 6T , +3641 4327 3Z , +3681 4325 3R , +3728 4325 3N , +3773 4327 5T , +3802 4325 3J , +3844 4325 3R , +3936 4326 3T , +3997 4325 3R , +4045 4327 4B , +4078 4327 5T , +4107 4327 3P , +4166 4327 5T , +4195 4326 7H , +4227 4327 5T , +4256 4325 5Z , +4311 4327 3P , +4369 4325 3J , +4420 4326 0D , +4505 4327 3F , +4566 4327 4O , +4624 4325 3R , +4716 4298 7K , +4772 4325 3R , +4819 4327 3P , +4878 4325 3R , +4926 4327 3Z , +4965 4327 5T , +4994 4325 3N , +719 4205 5Z , +774 4179 6T , +834 4206 7H , +866 4207 5T , +895 4205 5Z , +950 4207 3P , +1008 4205 3J , +1076 4206 6J , +1126 4207 3Z , +1165 4205 3R , +1238 4206 6J , +1288 4205 3J , +1355 4207 4B , +1389 4205 5Z , +1443 4207 4F , +1472 4207 4F , +1501 4205 5Z , +1556 4206 3X , +1639 4205 3J , +1690 4206 1Q , +976 4052 47 4 /2H +$C +/ddj:TE~> +, +1036 4024 1G , +1096 4024 2L , +1148 4024 1V , +1216 4026 0Y , +1268 4026 2B , +1336 4024 4X , +1388 4024 56 62 /3Y +$C +,Ap0V:'Cb1Tg"9*%d8k,,W$'NTS%Y>qG#tA:$KCgqg/:sYQ+Y&m<\c`f%9dlBk<=V[[1h`_[1Jp +-.o@;>VNZrEW?(=s7sI<pOE~> +, +1456 4024 1G , +1516 4024 2L , +1576 4026 48 60 /0O +$C +,D@S_MVl*@fa*!YQV41'l#aLB/sf5-db7nuBjmiqb8kc<I>?S9^>Ek<fR:IQmIpF)L'3#)Y!;sd +s8V/![Jg~> +, +1636 4007 3L , +1696 4026 6H , +1756 4024 4V , +1808 4024 6N , +1868 4026 56 43 /5T +$C +1Bn:Ro[EN6F_)fts8W-!s8W-!s8W-!s8W)srHDINZ.ep"nC!a.@>)."]2rE/0VA~> +, +1936 4024 2N , +2014 4025 0G , +2055 4025 3S , +2099 4025 0W , +2127 4025 3S , +2171 4025 6K , +976 3932 2H , +1036 3904 1G , +1096 3904 2L , +1148 3904 1V , +1216 3906 0Y , +1268 3906 2B , +1336 3904 4X , +1396 3906 6D , +1456 3904 4V , +1516 3906 6H , +1576 3904 4X , +1636 3887 3L , +1696 3906 6H , +1756 3904 4V , +1808 3904 6N , +1868 3906 5T , +1936 3904 2N , +2014 3905 0G , +2055 3905 3S , +2099 3905 0W , +2127 3905 3S , +2171 3905 6K , +976 3812 2H , +1036 3784 1G , +1096 3784 2L , +1148 3784 1V , +1208 3786 59 42 /0Q +$C +.En\QohYJ]jr\`Q9RhBgrn!t<huDF/ldtg:S+$CWBlou^n*MdCl9;T4J,c[8hqsLnFh[nRi%@<M +4o<_~> +, +1276 3786 0Y , +1336 3784 2N , +1388 3784 1V , +1448 3786 57 60 /5V +$C +1Bn>>`B3dnFC`;hs8W-!s8W-!s8W-!s8W)sqd%e)/9[@sHYIX?9<hd*(gJc)s8W-!r:jIm^]~> +, +1534 3785 4K , +1584 3785 27 72 /1A +$C +1T2<V4lPiRgUL\cpjJ/%h>ata\,Wr9p\jjaid<iF$oP<-GDEgn2';iEpd*Bdn$m*~> +, +1612 3785 1C , +1651 3785 3K , +976 3692 2H , +1036 3664 1G , +1096 3664 2L , +1148 3664 1V , +1208 3666 5V , +1276 3664 4X , +1336 3666 0Y , +1396 3647 3L , +1448 3666 5V , +1508 3664 1V , +1594 3665 4K , +1644 3665 1A , +1672 3665 1C , +1711 3665 3K , +969 3483 82 71 /3Z +$C +46guKZN-XOqT6Z[95/n-Y?m$)s8$(ql$Y5b9BgjXV>oe.0;\<U?XKZ%^6e0OoY-[?qHs5gde[<D +s3gaN9Bgo>^J!g>0A"h?I4qGnnbVqEfD8(e:1,l??r:9]~> +, +1052 3483 5Z , +1107 3484 7H , +1139 3483 3R , +1195 3484 1Q , +1246 3484 7H , +1279 3485 4O , +1337 3483 3R , +1425 3511 2H , +1485 3483 1G , +1545 3483 2L , +1597 3483 1V , +1657 3485 0Q , +1725 3485 0Y , +1785 3483 2N , +1837 3483 1V , +1897 3485 5V , +1992 3484 6J , +2042 3485 3P , +2100 3484 3T , +2202 3511 2H , +2262 3483 1G , +2322 3483 2L , +2374 3483 1V , +2434 3485 5V , +2502 3483 4X , +2562 3485 0Y , +2622 3466 3L , +2674 3485 5V , +2734 3483 1V , +2829 3484 4S , +2886 3484 6J , +2936 3485 38 47 /3Z +$C +0H#A^_V2d)s8W-!s8W-!hqnUF[?3rg<K18!0`S\NG9dORiPEE.~> +, +2975 3485 28 69 /5T +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +3004 3484 6J , +3054 3484 2Z , +3109 3485 4F , +3138 3483 3R , +3186 3483 3J , +3263 3484 6J , +3313 3485 3Z , +3353 3483 3R , +3435 3483 5Z , +3490 3484 4S , +3546 3483 3R , +3594 3485 3Z , +3633 3485 3Z , +3673 3485 5T , +3702 3484 3T , +3763 3484 3T , +3824 3483 3R , +3872 3485 3P , +3966 3484 2Z , +4021 3457 7F , +4111 3484 7H , +4144 3485 4O , +4202 3483 3R , +4284 3457 6T , +4344 3484 6J , +4394 3483 3N , +4438 3484 6F , +4494 3483 3R , +4542 3485 3Z , +4581 3470 0L , +4641 3484 2Z , +4696 3484 7B , +4757 3484 7H , +969 3364 6J , +1019 3365 3Z , +1059 3363 3R , +1145 3364 7B , +1205 3363 3J , +1248 3363 3R , +1296 3365 4B , +1329 3364 7B , +1389 3365 4F , +1455 3364 6J , +1505 3363 3J , +1585 3364 6J , +1635 3365 3Z , +1675 3336 7K , +1730 3364 7B , +1790 3365 88 47 /2X +$C +0Eoc'K:jmrq)D8+/;`aO>(?SPs8W-!s8W-!s8W-!s8W-!s8W-!ri?'Cm5<d*9l_ZL&>Ouf@AMUU +!4rFJ@)DUq/%!gM.m^-W@A]^a-57F:+CLi~> +, +1879 3363 3R , +1927 3365 3P , +1985 3364 7H , +2017 3363 3J , +2098 3364 7H , +2131 3363 5Z , +2231 3363 2L , +2291 3346 3L , +2351 3363 4X , +2403 3363 1V , +2502 3364 7H , +2535 3363 5Z , +2628 3365 3Z , +2668 3363 3R , +2715 3364 7H , +2748 3365 3Z , +2787 3365 5T , +2817 3363 3R , +2864 3364 4S , +2921 3363 3R , +3008 3364 7H , +3041 3365 4O , +3099 3363 3R , +3184 3364 6J , +3234 3363 3N , +3278 3364 7H , +3311 3364 7B , +3371 3364 6J , +3421 3365 4F , +3487 3364 3X , +3570 3365 5T , +3599 3364 3T , +3661 3364 7H , +3693 3365 4O , +3788 3364 6J , +3838 3365 3P , +3896 3364 3T , +3994 3365 4O , +4052 3363 3R , +4100 3365 5T , +4129 3336 7K , +4185 3365 4O , +4243 3364 7H , +4313 3344 31 93 /5Z +$C +"KA5$<2ioaX%J_TkuZ=+f<21RX8]1"oY:G+s8W,ds8D]jp[@j)hqRkn]A*&HgV(4BmCQ0~> +, +4346 3365 5T , +4375 3365 3P , +4434 3363 3J , +4476 3365 5T , +4505 3364 3T , +4566 3363 3R , +4650 3364 7H , +4683 3365 4O , +4741 3363 3R , +969 3244 2Z , +1024 3243 52 49 /3B +$C +-,RJ#Jd4TY+S0[\0^1M^2l>gu<qXnToWS5,FoUmEs8W%)rjpk_Fh_cG[d)RJ9#F9R9#61SMQibj +PlW!~> +, +1079 3245 3Z , +1118 3244 3T , +1179 3243 3R , +1227 3245 3Z , +1267 3224 3D , +1325 3243 3B , +1380 3245 4B , +1438 3244 6J , +1513 3244 3X , +1596 3245 5T , +1626 3244 3T , +1687 3216 7K , +1742 3243 3R , +1790 3244 7H , +1848 3244 6J , +1898 3245 4B , +1931 3244 7H , +1964 3243 3R , +2012 3245 3Z , +2076 3217 6T , +2136 3244 6J , +2186 3243 3N , +2231 3244 6F , +2286 3245 5T , +2315 3245 3P , +2373 3216 7K , +2437 3244 0D , +976 3090 2H , +1028 3062 3Y , +1096 3062 1G , +1156 3062 2L , +1216 3064 0O , +1276 3045 3L , +1336 3064 6H , +1396 3062 4V , +1448 3062 6N , +1508 3064 56 43 /5T +$C +1Bn:Ro[EN6F_)fts8W-!s8W-!s8W-!s8W)srHDINZ.ep"nC!a.@>)."]2rE/0VA~> +, +1576 3062 2N , +1654 3063 0G , +1695 3063 3S , +1739 3063 0W , +1767 3063 3S , +1811 3063 6K , +1883 3043 5Z , +1916 3062 3B , +1971 3064 3Z , +2043 3090 2H , +2095 3062 3Y , +2163 3045 3L , +2241 3063 0G , +2282 3063 3S , +2326 3063 0W , +2354 3063 3S , +2398 3063 6K , +2445 3043 3D , +976 2970 2H , +1028 2942 3Y , +1096 2942 4V , +1156 2944 6H , +1216 2942 2N , +1276 2942 4X , +1336 2944 6H , +1388 2944 0Q , +1456 2944 0Y , +1516 2942 2N , +1568 2942 1V , +1628 2944 5V , +1714 2943 4K , +1764 2943 1A , +1792 2943 1C , +1831 2943 3K , +1897 2923 5Z , +1930 2942 3B , +1985 2944 3Z , +2057 2970 2H , +2109 2942 3Y , +2177 2942 2N , +2255 2943 4K , +2305 2943 1A , +2333 2943 1C , +2372 2943 3K , +2413 2923 3D , +976 2850 2H , +1036 2824 6D , +1096 2822 4V , +1148 2824 5T , +1208 2822 1V , +1278 2797 6I , +1322 2823 3S , +1366 2823 0K , +1422 2823 3K , +976 2730 2H , +1036 2704 6D , +1096 2702 4V , +1156 2704 6H , +1216 2702 4X , +1276 2685 3L , +1336 2704 6H , +1396 2702 4V , +1448 2702 6N , +1508 2704 5T , +1576 2702 2N , +1654 2703 0G , +1695 2703 3S , +1739 2703 0W , +1767 2703 3S , +1811 2703 6K , +1883 2683 5Z , +1916 2702 3B , +1971 2704 3Z , +2043 2730 2H , +2103 2704 6D , +2163 2685 3L , +2241 2703 0G , +2282 2703 3S , +2326 2703 0W , +2354 2703 3S , +2398 2703 6K , +2445 2683 3D , +976 2610 2H , +1028 2584 5V , +1096 2582 4X , +1156 2584 0Y , +1216 2565 3L , +1268 2584 5V , +1328 2582 1V , +1414 2583 4K , +1464 2583 1A , +1492 2583 1C , +1531 2583 3K , +976 2490 2H , +1028 2445 56 62 /1I +$C +3!q,3aUeFOs8W,sL(f.]^j&07KBS.Ncm,Lc$,2!#oUEfYVpfsAH@Pgis8W,r?GEo@[G>\?a(]_F +m=`,+Ph9rm$$Ii'Xr("?'E~> +, +1096 2462 1G , +1156 2462 2N , +1208 2464 0T , +1294 2463 4K , +1344 2463 1A , +1372 2463 1C , +1411 2463 3K , +976 2370 2H , +1028 2325 1I , +1096 2342 1G , +1156 2342 2N , +1208 2325 57 61 /6P +$C +1^ptq+W\=9g\1T\DsmM*laeE-h'_qgrTWY4])$<YS$/^Tl+6_/^72='lfl"W]"Y>NX/kOJ@=k"( +:Aq2C~> +, +1294 2343 4K , +1344 2343 1A , +1372 2343 1C , +1411 2343 3K , +976 2250 2H , +1036 2224 6H , +1096 2222 4X , +1156 2224 3U , +1216 2224 0Y , +1276 2222 4X , +1336 2224 6D , +1414 2223 6K , +1453 2223 3G , +1492 2223 0W , +1520 2223 1A , +1547 2223 3G , +1570 2197 6I , +976 2130 2H , +1036 2102 3H , +1088 2102 1V , +1156 2102 1G , +1208 2102 1V , +1276 2102 4X , +1354 2103 0K , +1410 2103 3S , +1454 2103 6K , +1493 2103 1X , +1571 2103 2A , +1615 2103 0W , +1651 2089 0L , +1708 2130 2H , +1768 2102 3H , +1820 2102 1V , +1888 2102 1G , +1940 2102 1V , +2008 2102 4X , +2086 2103 2A , +2130 2103 0G , +2171 2103 3K , +2204 2103 1A , +2232 2103 49 49 /1K +$C +2%'[N%\3idSEM*PS)LqQp@\.VID>LSpV$=q^?tsV\,GcDhY4b_^Y+U\gYMb7hmV(DblQhPmqb2A +]2h^#:]~> +, +2282 2103 3G , +2329 2089 0L , +2379 2102 3B , +2434 2104 3Z , +2506 2130 2H , +2566 2102 3H , +2618 2102 1V , +2686 2102 1G , +2738 2102 1V , +2806 2102 4X , +2884 2103 4K , +2934 2103 1A , +2962 2103 1C , +3001 2103 2A , +3045 2103 44 74 /4S +$C +-l*@R6-s^?pio*<2r!`a^>HQ3rnd+Wn%ZR7^YdlArpKdbqu,Bf&at2;g\1AMqgG^#@BRYYCd/HJ +>T2X@s7_$;n,E?gpb00C,h+@d%f~> +, +3091 2103 0W , +3119 2103 3G , +3158 2103 4K , +969 1921 82 71 /1B +$C +46guKZN-XOqT6Z[95/n-Y?m$)s8$(ql$Y5b9BgjXV>oe.0;\<U?XKZ%^6e0OoY-[?qHs5gde[<D +s3gaN9Bgo>^J!g>0A"h?I4qGnnbVqEfD8(e:1,l??r:9]~> +, +1052 1921 3B , +1107 1922 7H , +1139 1921 3R , +1195 1922 1Q , +1245 1949 2H , +1305 1921 3H , +1357 1921 1V , +1425 1921 1G , +1477 1921 1V , +1545 1921 4X , +1623 1923 28 69 /5T +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +1652 1921 3J , +1719 1921 3B , +1774 1923 3P , +1832 1923 4F , +1861 1895 7F , +1942 1923 3Z , +1981 1921 3R , +2029 1923 4F , +2058 1921 3R , +2106 1922 55 47 /4S +$C +.aN80rp/h061h@qkr8H5rjSg"8c@(ef(At+5J$]0oUGf-2d]Y_\*g;!Eo<U`1]Mt~> +, +2163 1922 6J , +2213 1923 3P , +2271 1922 7H , +2329 1923 4B , +2362 1921 3B , +2417 1923 3Z , +2481 1921 3J , +2523 1921 3B , +2578 1923 2X , +2666 1921 3R , +2739 1922 3X , +2823 1923 5T , +2852 1922 3T , +2913 1894 7K , +2968 1921 3R , +3016 1922 7H , +3049 1921 3J , +3116 1902 5Z , +3150 1923 4B , +3183 1921 3B , +3238 1923 3Z , +3302 1921 3R , +3350 1923 6C , +3402 1922 6J , +3452 1923 2X , +3540 1895 6T , +3600 1923 4F , +3629 1921 3R , +3677 1908 0L , +3727 1921 3R , +3775 1923 3P , +3833 1922 7H , +3866 1923 3Z , +3905 1895 7F , +3986 1922 3X , +4069 1923 5T , +4098 1922 3T , +4159 1894 7K , +4215 1921 3R , +4263 1922 7H , +4295 1921 3J , +4338 1902 3D , +4379 1922 0D , +976 1768 2H , +1036 1740 3H , +1096 1740 4X , +1156 1742 3U , +1216 1740 4X , +1276 1740 2L , +1328 1740 1V , +1388 1740 3Y , +1456 1740 1G , +1516 1740 2L , +1576 1742 0O , +1636 1723 3L , +1696 1742 6H , +1756 1740 4V , +1808 1740 6N , +1868 1742 56 43 /5T +$C +1Bn:Ro[EN6F_)fts8W-!s8W-!s8W-!s8W)srHDINZ.ep"nC!a.@>)."]2rE/0VA~> +, +1936 1740 2N , +2014 1741 0G , +2055 1741 3S , +2099 1741 0W , +2127 1741 3S , +2171 1741 6K , +976 1648 2H , +1036 1620 3H , +1096 1620 4X , +1156 1622 3U , +1216 1620 4X , +1276 1620 2L , +1328 1620 1V , +1388 1620 3Y , +1456 1620 4V , +1516 1622 6H , +1576 1620 2N , +1636 1620 4X , +1696 1622 6H , +1748 1622 0Q , +1816 1622 0Y , +1876 1620 2N , +1928 1620 1V , +1988 1622 5V , +2074 1621 4K , +2124 1621 1A , +2152 1621 1C , +2191 1621 3K , +976 1528 2H , +1036 1500 3H , +1096 1500 4X , +1156 1502 3U , +1216 1500 4X , +1276 1500 2L , +1328 1500 1V , +1396 1500 2L , +1456 1500 4V , +1516 1502 3U , +1576 1500 4V , +1636 1502 6H , +1714 1501 0G , +1755 1501 3S , +1799 1501 0W , +1827 1501 3S , +1871 1501 6K , +969 1319 1B , +1052 1319 3B , +1107 1320 7H , +1139 1319 3R , +1195 1320 1Q , +1245 1347 2H , +1305 1319 3H , +1365 1319 4X , +1425 1321 3U , +1485 1319 4X , +1545 1319 2L , +1597 1319 1V , +1665 1319 2L , +1725 1319 4V , +1785 1321 3U , +1845 1319 4V , +1905 1321 6H , +1983 1321 28 69 /2V +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +2012 1319 3J , +2079 1320 7H , +2112 1321 4O , +2170 1319 3R , +2243 1319 3N , +2288 1319 3B , +2342 1321 4F , +2371 1319 3B , +2426 1320 7B , +2486 1321 3Z , +2551 1319 3B , +2605 1321 4B , +2664 1320 7H , +2696 1321 4O , +2754 1319 3R , +2827 1320 2Z , +2883 1319 3B , +2937 1321 6C , +3014 1321 2V , +3043 1321 3P , +3126 1319 3J , +3168 1319 3R , +3216 1321 4F , +3245 1319 3R , +3293 1319 3N , +3338 1320 7H , +3370 1321 2V , +3399 1319 3B , +3454 1321 3P , +3537 1321 2X , +3626 1319 3R , +3673 1321 3P , +3732 1320 7B , +3817 1321 2V , +3846 1320 7H , +3879 1319 3R , +3927 1321 2X , +4015 1319 3J , +4065 1320 0D , +976 1166 2H , +1036 1138 3H , +1096 1138 4X , +1156 1140 3U , +1216 1138 4X , +1276 1138 2L , +1328 1138 1V , +1396 1140 6D , +1456 1138 4V , +1516 1140 6H , +1576 1138 4X , +1636 1121 3L , +1696 1140 6H , +1756 1138 4V , +1808 1138 6N , +1868 1140 5T , +1936 1138 2N , +2014 1139 0G , +2055 1139 3S , +2099 1139 0W , +2127 1139 3S , +2171 1139 52 49 /3C +$C +1br@`BKS-G%hA=EGEH=>3tI)8h[Su?iSCr[g\ZJ=]>!%6hs^",gV2SF[RVtk[ep*<msfia]C5cF +`SEHL&)i8HA%V7/pibWkEiso~> +, +2227 1139 6K , +976 1046 2H , +1028 1020 0Q , +1096 1020 0Y , +1156 1018 2N , +1208 1018 1V , +1268 1020 5V , +1354 1019 4K , +1404 1019 1A , +1432 1019 1C , +1471 1019 3K , +719 839 0P , +753 839 3P , +836 810 7K , +891 837 3R , +939 839 3P , +998 837 3R , +1045 839 3Z , +1085 838 6J , +1135 839 4F , +1164 824 0L , +1214 838 7H , +1247 839 4O , +1305 837 3R , +1380 839 2X , +1468 838 6J , +1518 839 3P , +1576 838 7B , +1637 838 6J , +1687 839 4F , +1741 811 6T , +1801 838 6J , +1851 810 7K , +1907 837 3R , +1981 839 4B , +2014 837 3B , +2069 839 3Z , +2135 837 3R , +2183 838 6J , +2233 837 3N , +2277 839 4O , +2361 838 3X , +2444 839 2V , +2473 838 3T , +2535 810 7K , +2590 837 3R , +2638 838 7H , +2697 839 2V , +2726 839 3P , +2810 837 3J , +2852 837 3R , +2900 837 3N , +2945 838 7H , +2977 839 2V , +3006 837 3B , +3061 839 3P , +3145 837 6E , +3221 837 3B , +3276 839 4B , +3335 838 6G , +3407 837 3B , +3462 839 4F , +3491 838 7B , +3551 839 2X , +3639 837 3R , +3713 839 5Q , +3789 838 7H , +3822 837 3R , +3869 839 4F , +3899 839 4F , +3928 837 3J , +3996 838 3X , +4079 839 4O , +4138 839 2V , +4167 837 3N , +4211 839 4O , +4294 837 3B , +4349 839 4B , +4408 838 7H , +4441 839 4O , +4499 837 3R , +4573 810 7K , +4629 837 3R , +4676 839 3P , +4735 837 3R , +4783 839 3Z , +4822 839 2V , +4851 837 3N , +4922 839 3F , +4983 838 6F , +719 717 3B , +774 691 6T , +834 718 7H , +866 719 2V , +895 717 3B , +950 719 3P , +1008 717 3J , +1076 718 7H , +1108 719 4O , +1166 717 3R , +1239 718 3X , +1323 719 2V , +1352 718 3T , +1413 690 7K , +1468 717 3R , +1516 718 7H , +1574 718 6J , +1624 717 3N , +1668 717 3N , +1713 717 3R , +1761 691 6T , +1821 718 7H , +1853 717 3J , +1904 718 0D , +cleartomark end end pagesave restore showpage +%%PageTrailer +%%Page: 9 9 +%%BeginPageSetup +GS_pswrite_2_0_1001 begin +612 792 /letter setpagesize +/pagesave save store 100 dict begin +0.1 0.1 scale +%%EndPageSetup +gsave mark +K +Q q +0 0 6120 7920 re +Y +2796 7462 32 7 /6A +$C +0H"*/rO`~> +, +K +2854 7438 46 71 /1N +$C +-fG0#Ee,@L_[[W?*OoP4[gh*J]6C`rmea`sk-8e0L-H"6K5R;WU(9306,*[[Bg"L`o_t2lfDkm& +n+H?ls%;26g>+9-L6]!.K*bYY@7(ApM#~> +, +2929 7462 6A , +719 7080 60 69 /3F +$C +226&?X:j(Vs8W-!s8W-!s8W-!s8W-!s3*SAs8Vcls8W)e]ja4A~> +, +780 7080 58 72 /7M +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qco"??GfF?_0Zp7?*;dfE5?Pos8W-!s7M]^ +s+AH!#Cl~> +, +838 7078 46 49 /3R +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +922 7079 49 74 /4K +$C +3+QNlE;"q%\p(Z2D^*hS3-oKO4s+^PLZ,rDDEYW!rVpfjme=0iA9./6^A!'SrSQAernG3bDgUAj +hflPQf#%Zr_qTs!,"=f+s51Tgp]#]J2@Jl/JeFbC_gh~> +, +972 7079 27 72 /1A +$C +1T2<V4lPiRgUL\cpjJ/%h>ata\,Wr9p\jjaid<iF$oP<-GDEgn2';iEpd*Bdn$m*~> +, +1000 7079 36 49 /4A +$C +1D4L?KH;1$9KN@diA[Y2ID9uEhuE+/X_T6!k>9J-TkGn_K#hFi6B$NJfApN?s0pmoS[Go7(g(:V +(aq(7~> +, +1039 7079 32 65 /0M +$C +1HH$WHc+]/\(H'eG5-OaIJ<cUs7cEis*rqpq7t.c*ZGNGG:3q!huEH>p]%^IG^'~> +, +1116 7052 56 75 /6T +$C +/d=P.LUCpts8W-!s8W*W++t[YiU7o"_nlWIR!K5#0_F9"If'$2n,<4bs7cQnYPu4PGO6ub73.&n +$mep_/@[=OG.U\h_[93uT^3@4(ao~> +, +1176 7079 48 48 /3L +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +1226 7080 38 47 /6X +$C +0H#A^_V2d)s8W-!s8W-!hqnUF[?3rg<K18!0`S\NG9dORiPEE.~> +, +1266 7079 3L , +1316 7080 88 47 /2X +$C +0Eoc'K:jmrq)D8+/;`aO>(?SPs8W-!s8W-!s8W-!s8W-!s8W-!ri?'Cm5<d*9l_ZL&>Ouf@AMUU +!4rFJ@)DUq/%!gM.m^-W@A]^a-57F:+CLi~> +, +1404 7078 3R , +1452 7079 33 63 /7H +$C +22MSu?.7U@]^UPYFoVLAs8W-!s8W,u?o*0m2B4J$*'aK's6osmLPLB~> +, +1484 7078 3R , +1532 7080 6X , +1572 7078 40 49 /3J +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +1651 7079 3L , +1701 7080 6X , +1741 7078 3R , +1825 7080 28 72 /7D +$C +0EsY0/Z\pOs8W-!s8W-!s8W-!s8W-!s8W-!lS&`s4p`JB2)k~> +, +1854 7078 3R , +1902 7080 58 47 /3P +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qcY0ReuU^)_0-YK@^p/t4&U'%SJqnU0Mh~> +, +1960 7051 55 76 /7K +$C ++p6(UU(D9p_BI4g&2<;jh&tN#o\CkkFnFSgJ,d.Xs(u]/=CJ9h&r&_O@t^O*>/J*d6!EuahV:&- +aAQDs_@@-!5s.7@DNJb"HG82g\$+]hs53/>Bn"bZS_ZAA[]D/Z`.uhrTnOs!J,~> +, +2016 7079 7H , +2048 7080 7M , +2107 7078 3J , +2149 7065 23 27 /5C +$C +0k&hmpMY93^MeSYh7p_lq5@]N~> +, +2210 7078 3R , +2258 7080 51 47 /1L +$C +0HhbLCT6iu*o7X>[[4%/>?fXbXeft#>>!^U>GYf:I8\U0m^,;BmF&STVWhAmPBq,U8\.XIjoKYt +a@E.\>`fE~> +, +2309 7052 6T , +2370 7080 6X , +2409 7078 3R , +2457 7078 3J , +2499 7078 3J , +2542 7078 3R , +2590 7079 59 74 /3T +$C +,6PadBFG%9o].Bt<'f[3Jd*;_2s<!EI=:?D^Ak&0qZ$Tqs8DutIK/3^Iqs28[alB*$o"p%K#8Q` +"?mZ-1+_tqs8W-!s8?J%(]Hk@a^F0ZLO]~> +, +2688 7080 28 69 /5T +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +2717 7080 3P , +2812 7079 7H , +2845 7080 7M , +2903 7078 3R , +2988 7080 35 73 /4B +$C +0Esb+"P*PPs8W-!s8W-!s8V6a07FEB%#Z/ks8W,Vqtkj:[L0nZ`p\\%_LM~> +, +3021 7078 52 49 /5Z +$C +-,RJ#Jd4TY+S0[\0^1M^2l>gu<qXnToWS5,FoUmEs8W%)rjpk_Fh_cG[d)RJ9#F9R9#61SMQibj +PlW!~> +, +3076 7080 7D , +3105 7080 7D , +3134 7078 5Z , +3189 7079 82 48 /3X +$C +--V`>h0uuM[/YPgrB9d@+!SJRhOje2e\;&ZVUk)5[%C.MH@FT)^[7iQJ+m9?>HRpIY?pm>YNtG4 +lW<i0='tEF]"Q[tSt*;=F&6Q9h].OYhu~> +, +3272 7080 5T , +3301 7080 3P , +3359 7051 7K , +3452 7080 4B , +3485 7078 5Z , +3540 7080 6X , +3579 7080 2X , +3676 7079 11 47 /4O +$X +*WSETJ&)*Bs5<q8s5<q8s58CB5CagUzzzzzzzzzzz!!")@5Ce7!s5<q8s5<q8s5<pmJ&":!*WQ~> +, +3730 7079 3L , +3780 7080 3P , +3875 7078 5Z , +3930 7052 6T , +3990 7079 7H , +4022 7080 5T , +4051 7078 5Z , +4106 7080 3P , +4164 7079 3L , +4214 7080 7D , +4281 7080 2X , +4369 7080 5T , +4398 7080 3P , +4457 7079 59 48 /4D +$C +,6G^d:()^rSt(K"WZ[OKKH'R@829B/hbX7Os8W-!s8W-!s8W-!s8K(pJ6^S3s7>3jJF\7`JS/"W +3,n?~> +, +4517 7078 3J , +4595 7078 3J , +4637 7080 5T , +4666 7051 7K , +4722 7080 3P , +4780 7065 5C , +4842 7079 7H , +4875 7080 7M , +4933 7078 3R , +4981 7080 3P , +719 6958 5Z , +774 6960 3P , +832 6958 3R , +907 6958 5Z , +962 6960 6X , +1029 6960 2X , +1117 6958 5Z , +1172 6960 6X , +1211 6958 3R , +1287 6959 3T , +1348 6958 3R , +1396 6958 42 49 /6L +$C +-,RJ0,D$.,dtC(&BFm314U.0';Uopg0D5AFqu:T"GOO;dD/K!tg22NP(b6GB_Li1('E~> +, +1440 6960 5T , +1469 6960 2X , +1558 6959 3L , +1608 6960 7D , +1663 6959 3T , +1724 6960 5T , +1753 6931 7K , +1809 6960 5T , +1838 6959 7H , +1870 6958 3J , +1940 6939 31 93 /3B +$C +"KA5$<2ioaX%J_TkuZ=+f<21RX8]1"oY:G+s8W,ds8D]jp[@j)hqRkn]A*&HgV(4BmCQ0~> +, +1973 6959 3X , +2057 6960 5T , +2086 6959 7H , +2118 6960 7M , +2203 6932 6T , +2263 6958 5Z , +2318 6958 3J , +2360 6958 3J , +2402 6960 5T , +2432 6959 51 73 /5X +$C +5EglT+SH@k^#U$'FpL$[_nllJqgH5-rV-'chuE_+s8Vrqrg*Md?)<,t[I'gC0OD_A]3VSk$n_r) ++92B@s8W+%2$O#4bf,_b~> +, +2487 6960 7D , +2516 6958 3R , +2590 6958 3R , +2638 6960 2X , +2726 6959 5X , +2781 6958 3R , +2829 6959 3T , +2890 6959 3T , +2952 6958 3R , +2999 6959 3T , +3087 6959 3T , +3148 6958 3R , +3196 6958 6L , +3240 6960 5T , +3269 6960 2X , +3358 6959 3L , +3408 6960 7D , +3463 6932 6T , +3523 6958 5Z , +3578 6960 5T , +3607 6960 3P , +3665 6959 7H , +3698 6939 28 93 /3D +$C +3RbHUG4"&?]C+PE]C,RirpTT2^[Jr;^An65s3grIWrK*t='h6DF^7nJWD_7r<2jY:J,~> +, +3731 6945 5C , +3783 6959 7H , +3816 6960 7M , +3874 6958 3R , +3922 6960 3P , +4006 6959 3L , +4056 6960 3P , +4140 6958 5Z , +4195 6932 6T , +4255 6959 7H , +4287 6960 5T , +4316 6958 5Z , +4371 6960 3P , +4429 6959 3L , +4479 6960 7D , +4535 6959 4D , +4595 6960 3P , +4653 6960 5T , +4683 6959 7H , +4715 6958 3J , +4783 6958 3J , +4825 6932 6T , +4885 6958 3R , +4933 6958 6L , +4978 6960 5T , +5007 6982 6A , +719 6840 4B , +752 6840 5T , +781 6838 3R , +829 6840 6X , +877 6839 11 12 /0D +$X +*rnNUJ&)*Bs5<q8s5<q8s5<pmJ&!-+~> +, +944 6840 3F , +1005 6840 7M , +1063 6838 3R , +1136 6839 4D , +1197 6840 3P , +1255 6840 5T , +1284 6839 7H , +1342 6838 3J , +1384 6812 6T , +1444 6838 3R , +1492 6838 6L , +1536 6840 5T , +1565 6840 4B , +1599 6840 5T , +1628 6838 3R , +1676 6840 6X , +1715 6838 3J , +1783 6839 3L , +1833 6840 6X , +1872 6838 3R , +1945 6839 7H , +1978 6840 7M , +2036 6838 3R , +2109 6840 4B , +2142 6838 5Z , +2197 6840 7D , +2226 6840 7D , +2255 6838 5Z , +2309 6839 3X , +2393 6840 5T , +2422 6840 3P , +2480 6811 7K , +2544 6839 4O , +976 6647 47 45 /2L +$C ++WT&@_B@Xm#7-+#k_lB]&2ulZkm$>udX4)MBPXeWJ,fQ'r/,hrrqlRsCN%j0CLMq$@1c#I'uLE6 +'2W(k~> +, +1179 6647 6L , +1223 6647 3R , +1271 6649 3P , +1329 6648 7H , +1362 6649 5T , +1391 6649 2X , +1479 6647 3R , +1527 6648 7H , +1560 6649 6X , +1599 6647 3R , +1647 6647 3J , +968 6529 61 43 /3Q +$C +2AdhJ:_A3Oo1(F=qu?]rs8W-!s8W-!s8W-!s8W-!s8W-!pO;Seqb;8cG?JF`D.WiQ<gR9_Y1)/_ +(f=s(~> +, +1179 6529 2X , +1267 6529 5T , +1296 6529 7D , +1325 6529 7D , +1355 6529 5T , +1384 6529 2X , +1472 6527 3R , +1520 6528 7H , +1552 6529 6X , +1592 6527 3R , +1640 6527 3J , +976 6409 45 62 /0Y +$C +2@YoEU`9@6s8W-!s8W-!s8V[E,.I+BaFaHls6p~> +, +1179 6409 5T , +1208 6409 3P , +1266 6407 6L , +1311 6409 7M , +1369 6407 3R , +1417 6407 3J , +968 6270 56 62 /4G +$C +3!q,3aUeFOs8W,sL(f.]^j&07KBS.Ncm,Lc$,2!#oUEfYVpfsAH@Pgis8W,r?GEo@[G>\?a(]_F +m=`,+Ph9rm$$Ii'Xr("?'E~> +, +1179 6261 6T , +1239 6287 5Z , +1294 6289 5T , +1323 6289 3P , +1381 6288 7H , +1414 6287 3J , +968 6169 57 60 /2X +$C +1Bn>>`B3dnFC`;hs8W-!s8W-!s8W-!s8W)sqd%e)/9[@sHYIX?9<hd*(gJc)s8W-!r:jIm^]~> +, +1179 6169 7M , +1237 6167 3R , +1285 6169 5T , +1314 6140 7K , +1370 6169 7M , +1428 6168 7H , +1486 6167 5Z , +1540 6169 4B , +1598 6168 3X , +1682 6169 5T , +1711 6168 3T , +1772 6140 7K , +1828 6167 3R , +1876 6168 7H , +1908 6214 24 26 /0N +$C +4`80npM\gBpUfn^qtp@3,7GK@~> +, +1936 6167 3J , +2003 6169 4B , +2037 6167 5Z , +2091 6169 3P , +2149 6168 7H , +2207 6148 3B , +2240 6203 37 35 /0D +$C +-2\f*rhoG,Wc_+n;rNL.hZbL"L5glk0]>>B4;?"k,!-s&i@YbS?)tAVT%3.dqr(qU~> +, +2279 6148 3D , +968 6049 59 42 /3O +$C +.En\QohYJ]jr\`Q9RhBgrn!t<huDF/ldtg:S+$CWBlou^n*MdCl9;T4J,c[8hqsLnFh[nRi%@<M +4o<_~> +, +1179 6048 3X , +1262 6049 5T , +1291 6048 3T , +1353 6048 7H , +1385 6049 7M , +1468 6047 5Z , +1523 6049 4B , +1581 6094 24 26 /5W +$C +4RdSWJ)B.-pUBV'g\1)S_dTJ~> +, +1616 6048 43 62 /3D +$C +.Ds"4S07$SmXbo4kr22KdVncIrgpUt5O3eps8W-!s8W-!s7X2"rk%W'?em=-df$PTY0sPk<[o#l +TnN~> +, +1669 6094 0N , +1722 6047 6L , +1766 6049 7M , +1824 6048 3L , +1874 6049 6X , +1914 6048 3L , +1964 6047 6L , +2008 6048 7H , +2041 6047 3R , +2089 6049 6X , +2153 6049 5T , +2182 6049 3P , +2266 6048 3X , +2349 6049 5T , +2378 6048 3T , +2439 6020 7K , +2495 6047 3R , +2543 6048 7H , +2575 6094 0N , +2603 6047 3J , +2670 6049 4B , +2704 6047 5Z , +2758 6049 3P , +2817 6048 7H , +2874 6028 3B , +2907 6083 0D , +2946 6028 28 93 /3D +$C +3RbHUG4"&?]C+PE]C,RirpTT2^[Jr;^An65s3grIWrK*t='h6DF^7nJWD_7r<2jY:J,~> +, +719 5858 3F , +780 5858 7M , +838 5856 3R , +911 5856 5Z , +966 5858 3P , +1024 5856 3R , +1072 5856 3J , +1139 5858 88 47 /5V +$C +0Eoc'K:jmrq)D8+/;`aO>(?SPs8W-!s8W-!s8W-!s8W-!s8W-!ri?'Cm5<d*9l_ZL&>Ouf@AMUU +!4rFJ@)DUq/%!gM.m^-W@A]^a-57F:+CLi~> +, +1228 5857 3L , +1278 5858 6X , +1317 5857 56 73 /3H +$C ++LJp$5kmV@ADpOa$L)XK9;U)$FLka1QV41'l#aLB/sf3GX^kL=qgH2riP+2XpA99P(k'-9mIh'p +IJ`R7s8W-!s8K>)a7J5P5dOC>~> +, +1373 5856 3R , +1421 5857 3T , +1507 5837 3B , +1540 5892 0D , +1579 5837 3D , +1637 5857 3L , +1687 5858 6X , +1727 5856 3R , +1800 5856 3J , +1842 5830 6T , +1902 5856 3R , +1950 5856 6L , +1995 5858 5T , +2024 5858 4B , +2057 5858 5T , +2086 5856 6L , +2155 5857 7H , +2188 5856 5Z , +2268 5858 60 69 /5R +$C +1BfGjiK1'#,=ctPrr<#qs8MRA)uos<s8W-!s8W-!s8W-!s8T[WEraVc~> +, +2329 5858 5T , +2358 5858 5V , +2446 5857 5X , +2501 5856 5Z , +2564 5846 45 85 /3D +$C +/mdGEmJh+ZpA_VhqgRGrrP*:*rnk3Ps)6ZcrP.asIc%X5^Mhm+hm`"MJ(s\q^Mj!W~> +, +2617 5858 3F , +2678 5857 3H , +2742 5857 11 12 /0D +$X +*rnNUJ&)*Bs5<q8s5<q8s5<pmJ&!-+~> +, +719 5695 3F , +780 5693 6L , +825 5695 7D , +862 5683 3D , +914 5695 3F , +976 5694 3H , +1067 5695 48 69 /5K +$C +21n\f@.;aLJ,fQKjhY/&h3M<(5D*m`rnmU$^\7]^mJjZphf&J-rqh34p\3GBDnj$Dq]5Y(]D+KN~> +, +1125 5694 0D , +1142 5693 47 71 /0V +$C ++p(%4KH3$?0=h9*Uu%T:h0h4h:&_W*^Uj:An%\m0?iC$)s8W-!s82i"otU8$qka8c?WR/k^SPda +V/7^e'!Y9_0VH6I~> +, +1228 5694 3X , +1311 5695 5T , +1340 5694 3T , +1402 5666 7K , +1457 5693 3R , +1505 5694 7H , +1538 5693 3J , +1616 5694 3T , +1677 5693 5Z , +1768 5695 3P , +1826 5693 5Z , +1881 5694 7H , +1950 5694 4D , +2010 5695 3P , +2068 5695 5T , +2098 5695 4B , +2131 5693 5Z , +2185 5695 6X , +2225 5695 5V , +2313 5695 7D , +2342 5667 55 74 /4H +$C +3%Y6hmI,4)4=>r&qn9amhgXIsrOVILFl0+]j?`gAhs!)u2d]ipr?hQFX8\<4pIY>3Is(D_lMA*j +\l\aa"r!=,"Tb7n~> +, +2434 5694 7H , +2467 5694 3L , +2517 5694 3H , +2572 5693 3R , +2664 5721 47 4 /5F +$C +/ddj:TE~> +, +2716 5695 3O , +2784 5695 0Y , +2844 5693 52 62 /2N +$C ++rokY#W"`MK<U/9H6SI9Jd1>]"Q)ebODiWjSs/p#8cSY$^]4?6s0]W?Xo5C#XgD4-C[Eb.?%s!Y +(e]T6Yde+\@<)>Is8W'dK%Ji~> +, +2896 5693 52 58 /4T +$C ++Dt22n;'$mK;'!rU-/Uq+pCM##-'`as8W-!s8W-!s8P8$eb5lLs8W-!qLA~> +, +2956 5695 2X , +3053 5694 3L , +3103 5695 3P , +3161 5694 3T , +3265 5721 5F , +3317 5695 2X , +3385 5693 46 45 /1Z +$C ++O4a+i.reS6.$'k_BN_8!X@j2h&tE;W_I/@C:^R_oWehD^WDC>HN)Lg[CpEoV/7fdL6]!.K*7m( +:t.1mJq*~> +, +3445 5695 0Y , +3505 5676 50 62 /6J +$C +,QSa(*Ou4e)i(n?qnDP!s33hh+FG=,:SK,l5_4^;62F=JK7,(0FIu?9:]Jjms8W-![D2[BrN6%# +Zrm3>FrL(k?%WGSF&jf"@>.Nd$i~> +, +3557 5695 2X , +3617 5693 4T , +3715 5693 5Z , +3770 5667 6T , +3830 5694 7H , +3862 5695 5T , +3891 5693 5Z , +3946 5695 3P , +4004 5693 3J , +4047 5680 23 61 /1M +$C +0k&hmpMY93^MeSYh=p[<GW$"$s8V\cKH39Qs(g>C'E~> +, +4109 5695 5T , +4138 5695 3P , +4196 5693 3J , +4239 5694 7H , +4271 5693 3R , +4319 5694 3L , +4369 5694 3T , +4430 5680 5C , +4492 5693 3R , +4540 5694 3L , +4590 5693 6L , +4634 5695 7M , +4729 5694 3X , +4812 5695 5T , +4841 5694 3T , +4903 5666 7K , +4958 5693 3R , +5006 5694 7H , +719 5575 5V , +807 5574 3L , +857 5547 4H , +948 5574 7H , +981 5574 3L , +1031 5574 3H , +1086 5573 3R , +1170 5573 3R , +1218 5575 5T , +1247 5574 7H , +1280 5575 7M , +1338 5573 3R , +1386 5575 6X , +1460 5573 5Z , +1515 5575 6X , +1589 5574 5X , +1644 5573 5Z , +1699 5574 7H , +1731 5575 7M , +1790 5560 5C , +1849 5574 3L , +1899 5575 3P , +1957 5574 3T , +2052 5574 7H , +2085 5575 7M , +2143 5573 3R , +2225 5575 5T , +2254 5575 3P , +2312 5574 7H , +2345 5573 3R , +2393 5575 6X , +2432 5547 6T , +2492 5575 6X , +2532 5573 3R , +2580 5574 7H , +2612 5574 3L , +2662 5574 7H , +2695 5575 5T , +2724 5573 5Z , +2779 5575 3P , +2873 5573 5Z , +2928 5575 4B , +2995 5574 3L , +3079 5575 3P , +3137 5574 4D , +3197 5575 5V , +3286 5574 5X , +3341 5573 3R , +3389 5575 6X , +3462 5575 7D , +3491 5574 3L , +3541 5573 6L , +3585 5574 3H , +3641 5575 5T , +3670 5575 3P , +3728 5546 7K , +3818 5574 3L , +3902 5574 4D , +3962 5575 3P , +4020 5575 5T , +4050 5574 7H , +4116 5573 3J , +4158 5547 6T , +4218 5573 3R , +4266 5573 6L , +4311 5575 5T , +4340 5575 4B , +4373 5575 5T , +4402 5573 3R , +4450 5575 6X , +4523 5574 55 47 /0B +$C +.aN80rp/h061h@qkr8H5rjSg"8c@(ef(At+5J$]0oUGf-2d]Y_\*g;!Eo<U`1]Mt~> +, +4580 5574 3L , +4630 5575 6X , +4669 5575 5T , +4698 5573 3R , +4746 5573 3J , +4823 5575 4B , +4856 5575 6X , +4896 5573 5Z , +4950 5575 5V , +719 5454 3X , +802 5455 5T , +831 5454 3T , +893 5426 7K , +948 5453 3R , +996 5454 7H , +1055 5454 7H , +1088 5453 5Z , +1169 5454 3X , +1252 5455 5T , +1281 5454 3T , +1343 5426 7K , +1398 5453 3R , +1446 5454 7H , +1487 5454 0D , +1530 5455 55 69 /3N +$C +0H%LnJ9qY"s8W-!s8V1Ls8W-!?gtT*q%-&Ks1eU6s,[3[q+1Pcs8W,o:72q?LG0'b?i~> +, +1586 5453 5Z , +1640 5455 6X , +1707 5453 3R , +1755 5455 1L , +1806 5454 3L , +1856 5455 5V , +1945 5427 6T , +2005 5455 7D , +2034 5453 3R , +2082 5440 5C , +2133 5455 5T , +2162 5455 3P , +2246 5455 3F , +2307 5454 3H , +2389 5455 5K , +2447 5454 0D , +2464 5453 0V , +2547 5481 5F , +2599 5455 3O , +2667 5455 0Y , +2727 5453 2N , +2779 5453 4T , +2839 5455 2X , +2968 5455 42 61 /3Y +$C +/e+Gr)oLFbgY:I*6+_*l]+3Z/G4"%nDV_pJmG#*fh7MFNDqi"ps.'&\mA9c`]'F2`%4bk'0U7Gp +TnN[b~> +, +3028 5453 44 62 /0H +$C ++V`E:#TOMNi=Q?;#TJF1FIU-c:T!.K^\`N\f"H30;LN48YejNMFc+aT"j_n_s8W-!s8S0obPh~> +, +3107 5455 5V , +3195 5453 3R , +3243 5454 3L , +3293 5455 3P , +3351 5453 3J , +3419 5455 48 69 /1B +$C +0FGP^n$52ZaH1;q]6<Sr]t8ITgUFe<mG#+^GIP22]tO;mGPhA[s8B.im<rhtm49s$@$QdRX[?,' +(f4`k^]~> +, +3469 5453 47 71 /0O +$C ++bZ9b&;.g[6b3C/4U1*mheu6;Dr-tcl0E<?(B4?kqYKH%VRoJ1G*^#'_(8Wma':L>$\fH%$]k>f +s82iW2';kune/#~> +, +3545 5453 6L , +3589 5455 7M , +3648 5454 3L , +3698 5455 6X , +3737 5454 3L , +3787 5453 6L , +3831 5454 7H , +3864 5453 3R , +3912 5455 6X , +3951 5453 3J , +4020 5454 7H , +4053 5453 5Z , +4134 5454 3L , +4184 5455 3P , +4268 5453 3R , +4316 5455 3P , +4374 5454 7H , +4407 5455 6X , +4446 5427 4H , +4529 5454 3X , +4612 5455 5T , +4641 5454 3T , +4703 5426 7K , +4758 5453 3R , +4806 5454 7H , +4839 5440 5C , +4891 5454 5X , +4946 5454 4D , +5007 5454 7H , +719 5335 1B , +769 5333 0O , +853 5307 6T , +913 5335 5T , +942 5335 1L , +994 5333 3R , +1042 5335 7D , +1071 5333 3J , +1147 5334 7H , +1180 5333 5Z , +1269 5334 3L , +1353 5333 6L , +1397 5334 3L , +1447 5335 3P , +1506 5334 0B , +1562 5334 3L , +1612 5333 3J , +1688 5334 3X , +1771 5335 5T , +1800 5334 3T , +1862 5306 7K , +1917 5333 3R , +1965 5334 7H , +2006 5334 0D , +2057 5335 33 69 /0P +$C +0H%XJ!UM?&s8W-!s8W-!s8W-!s8W-!s8W-!s)k!s!MdF~> +, +2091 5335 3P , +2183 5335 5R , +2244 5335 5T , +2273 5335 5V , +2361 5334 5X , +2417 5333 5Z , +2479 5323 3D , +2532 5335 3F , +2593 5334 3H , +2649 5320 5C , +2707 5334 3L , +2757 5335 7D , +2786 5335 7D , +2848 5334 3X , +2931 5335 5T , +2960 5334 3T , +3022 5306 7K , +3077 5333 3R , +3125 5334 7H , +3158 5333 3J , +3233 5335 5V , +3321 5334 3L , +3371 5307 4H , +3460 5333 3J , +3502 5307 6T , +3562 5333 3R , +3610 5333 6L , +3655 5335 5T , +3684 5335 4B , +3717 5307 4H , +3805 5334 3X , +3888 5335 5T , +3917 5334 3T , +3979 5334 7H , +4011 5335 7M , +4102 5334 3L , +4152 5335 3P , +4210 5334 3T , +4304 5335 7M , +4362 5333 3R , +4410 5335 5T , +4439 5306 7K , +4495 5335 7M , +4553 5334 7H , +4586 5320 5C , +4644 5334 3L , +4694 5335 3P , +4752 5334 3T , +4846 5334 5X , +4901 5334 3L , +4951 5335 6X , +4991 5333 3R , +719 5215 3P , +777 5214 4D , +837 5215 5V , +926 5214 5X , +981 5213 3R , +1029 5215 6X , +1068 5213 3J , +1136 5214 3L , +1186 5215 7D , +1215 5214 3X , +1298 5214 3L , +1348 5187 4H , +1404 5213 3J , +1471 5215 5V , +1560 5213 3R , +1608 5214 3L , +1658 5215 3P , +1741 5213 3J , +1783 5213 6L , +1828 5215 6X , +1867 5213 3R , +1915 5213 3R , +1963 5215 3P , +2046 5187 6T , +2106 5215 5T , +2135 5215 1L , +2187 5213 3R , +2235 5215 7D , +2264 5213 3J , +2314 5214 0D , +719 5052 77 70 /5Y +$C +/d_ribJ29<O`89m(g$03D:`"Cqka1(IsocD[(gLij0e8bea:smqb-YKXh*hJBn"l\\+Hlk/,QKX +rg!GYIs#nSX6TPreb+?8~> +, +822 5051 40 49 /3E +$C +-j^/!+R.k4$gs*1oGc8$K7#W86i[2dJ+rF1^O>"&otU4tpA99M[]mT"f\tene/0S~> +, +863 5051 42 49 /0U +$C +-k[(P#>U(N%ZkTp\lYd+Id')2hu3<Ds7ZKihZ!QRmf.e*IJ_p0HFM^IV/9XqQ&:<iW%_$~> +, +907 5051 26 74 /3U +$C +4QnmjiU7:$_r8<HGAE95s7ZKehtR$Is*rpUqsXQ5s6]jcn,M;>qlJ-\n8,!:*&m~> +, +935 5051 0U , +979 5051 52 49 /0E +$C +1br@`BKS-G%hA=EGEH=>3tI)8h[Su?iSCr[g\ZJ=]>!%6hs^",gV2SF[RVtk[ep*<msfia]C5cF +`SEHL&)i8HA%V7/pibWkEiso~> +, +1035 5051 39 49 /1T +$C +4lg/As8.<CJ,A^3J+)9E#`n#MM#Y3gp>9c^g[0SkC>l<:a)?;/]o.,Yh8?k7G7=c~> +, +1107 5024 6T , +1167 5051 3L , +1217 5052 6X , +1257 5051 3L , +1307 5052 5V , +1395 5050 3R , +1443 5051 7H , +1475 5050 3R , +1523 5052 6X , +1588 5050 6L , +1632 5051 3L , +1682 5052 3P , +1765 5051 5X , +1821 5050 3R , +1894 5051 3L , +1969 5050 6L , +2013 5050 5Z , +2068 5052 7D , +2097 5050 5Z , +2151 5051 4D , +2212 5052 6X , +2276 5052 3P , +2334 5051 3L , +2384 5052 5V , +2473 5050 3R , +2545 5050 5Z , +2600 5052 6X , +2665 5051 3L , +2715 5052 3P , +2798 5052 68 69 /0J +$C +0H$[rA+_5T6k\-D?F6%lV>cfSV>cfSV<b<XV<b<XV<b<XV<au0V:+UQI1X[;+c#3aS2\=r\(g<D +s4dQlrr<#urI<8q?C)&:<#?oJ'\G0KZ43K-~> +, +2865 5050 74 73 /5X +$C +,(YRQ%&b?ZH3,5AE/5&C$ueTN/fZ!"kS)Bh6$0\D"k*EDV<b=f^:O1;e<G\E7)6k9`k)3Ms8N&e +htqm"\I5n([s%Xtpi!ULf%S"M-Xag/"q(io.>&2)aCuWNJVbia~> +, +2941 5052 58 69 /6Q +$C +1CW&nPtW/Om"HQF"*Y4Dhf$!Yn*e$+p]&#.s8U]R^Zfn*E0glO(bphK/;$Er=V-/u9Gi.9_[j62 +pY5^ds7cQnrI=g5?BmkH8e@u+<Plgml2~> +, +3027 5051 0B , +3083 5051 3L , +3133 5052 7D , +3163 5051 4D , +3223 5050 3R , +3279 5051 0D , +3347 5050 78 73 /0R +$C +,@H[r)o3*1<Y05+0Q?6.V[a8(LHu..-Kt^T-L!H]kr22IF`1>_e^_?U^A@/FfA$7RlMpnas8Uo) +YM8pQosObaCO3S[Xeg0KQI<4+2O1YN0U7A(:r.`[a?P@e6A#FG6+Ja%,Q~> +, +3426 5052 3P , +3484 5052 7D , +3513 5024 4H , +3593 5051 3L , +3668 5052 4B , +3702 5050 3R , +3750 5051 3X , +3858 5052 3P , +3916 5051 3L , +3966 5052 5V , +4055 5050 3R , +4102 5050 3J , +4170 5051 3L , +4220 5052 6X , +4259 5050 3R , +4332 5051 3H , +4388 5052 3P , +4446 5050 5Z , +4501 5051 3X , +4584 5052 3P , +4650 5051 4O , +976 4859 48 45 /1G +$C +3k744+D-15#AAdpoL9e"#TK*e&7PNu60UU_rVuijpY5GpI>50sLP@d5A2Znl&'+_Ml`/:<Y\T>r +/6!H_C23s&~> +, +1036 4842 52 62 /3J +$C ++@+eUP*c4Ks8W,pX=",]Jd9c`&<qSE"s6,8q?d!moU,:CT2/fiqYG^As8W,,^\t;5XhV!F=SiO[ +fNuH%Fr3h=R^!50@>.Nd$i~> +, +1088 4859 56 44 /3P +$C +,i""TKGgGEK="%NoE_*ncnOSP#WMH?#HR+dp](9ns8W-!s8W-!s8W-!s6%7`i:[+oJ,~> +, +1156 4859 1G , +1606 4861 48 60 /6D +$C +3#\:_Rc"/Fs8W-!s8W-!s8SZ":&Re)s8W)TmI%f]?&K12K-?0~> +, +1658 4859 3P , +1726 4859 2L , +1778 4861 2X , +1846 4859 43 45 /3H +$C +--Bs+k9*%T&:G,"nKk6P"+"kk2m9\ds6X:'>#;Fq8V0QRcT29O5bS`qZp[t!6#*3fV#UJ^D6DID +fJ$MB6gQEDC((Zh~> +, +1906 4861 0Y , +1966 4859 1G , +2168 4861 3Q , +2236 4859 1G , +2296 4861 48 43 /6H +$C +0H-5NSR;Ess8W-!s8Tdkms/EWheWql2"95c2)l)`$#mk,\7%cB:]~> +, +2356 4859 47 45 /1X +$C ++PbNY":bub6JI/]+?BW7cp>6;dVhoQ]fg:0<qZHofDkmNmA9jMDd-Gsf%O0Q[[%b4@>(^9K!A.h +L(kIQ~> +, +2416 4859 1X , +2468 4861 56 43 /5T +$C +1Bn:Ro[EN6F_)fts8W-!s8W-!s8W-!s8W)srHDINZ.ep"nC!a.@>)."]2rE/0VA~> +, +2678 4842 4G , +2738 4859 3P , +2806 4861 6H , +2858 4842 4G , +2926 4861 45 60 /0W +$C +2@YoEU`9@6s8W-!s8W-!s8W-!s8W-!s3/9>qu~> +, +2986 4859 1Z , +3188 4842 57 61 /6P +$C +1^ptq+W\=9g\1T\DsmM*laeE-h'_qgrTWY4])$<YS$/^Tl+6_/^72='lfl"W]"Y>NX/kOJ@=k"( +:Aq2C~> +, +3256 4859 1Z , +3316 4861 0W , +3376 4861 0W , +3436 4859 1X , +3488 4861 3O , +968 4739 56 62 /1A +$C +,Ap0V:'Cb1Tg"9*%d8k,,W$'NTS%Y>qG#tA:$KCgqg/:sYQ+Y&m<\c`f%9dlBk<=V[[1h`_[1Jp +-.o@;>VNZrEW?(=s7sI<pOE~> +, +1036 4741 0W , +1096 4739 1G , +1156 4739 2L , +1216 4741 48 60 /3M +$C +,D@S_MVl*@fa*!YQV41'l#aLB/sf5-db7nuBjmiqb8kc<I>?S9^>Ek<fR:IQmIpF)L'3#)Y!;sd +s8V/![Jg~> +, +1606 4722 6J , +1666 4741 6H , +1726 4739 1G , +1778 4722 6P , +2168 4741 5T , +2236 4739 1G , +2288 4741 59 42 /2B +$C +-3a&@>IqP[\#uk!pK,sIp!p`u]g'*B]!niOVlf4`<qY"VFhKqV]\mHa#(<CEo`~> +, +2348 4722 6P , +2686 4741 6H , +2746 4739 1Z , +2806 4739 2N , +968 4619 1A , +1036 4621 0W , +1088 4619 3P , +1156 4619 1Z , +1606 4602 6J , +1666 4621 6H , +1726 4619 1Z , +1786 4619 1Z , +1838 4621 5T , +2176 4619 1X , +2236 4621 0W , +2296 4621 0Y , +2348 4621 2B , +2416 4619 1Z , +2678 4619 4T , +2746 4619 1Z , +2806 4619 1G , +2866 4621 0W , +976 4499 2N , +1036 4499 1G , +1096 4501 6H , +1156 4501 3M , +1208 4499 1A , +1276 4501 0W , +1328 4499 3P , +1396 4499 1Z , +1606 4501 0W , +1666 4501 0Y , +1718 4501 3Q , +1786 4499 1Z , +2176 4499 1X , +2236 4501 6H , +2296 4499 1G , +2348 4501 5T , +2416 4482 6J , +2476 4499 1Z , +2678 4501 3O , +2738 4501 2X , +2806 4501 0Y , +2858 4499 4T , +2926 4499 1Z , +719 4310 3N , +775 4308 5Z , +829 4310 6X , +901 4310 0J , +968 4308 5X , +1044 4310 6Q , +1137 4309 0B , +1194 4309 3L , +1244 4310 7D , +1273 4309 4D , +1333 4308 3R , +1381 4308 40 49 /6H +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +1423 4295 5C , +1480 4308 3R , +1528 4310 28 69 /2V +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +1557 4309 7H , +1590 4310 7M , +1648 4308 3R , +1696 4310 6X , +1775 4304 45 71 /3L +$C +3^iXBs8W,Rhu!HRs8W-!s1\C!c%`VjC3=-Ls8W,f^\?XckCZs0eC;_bs8LpMhuE`Vs8W,rJ)>bU +[+#~> +, +1828 4309 1T , +1859 4282 59 76 /0Y +$C +.DjA]Se*q+-la@!U7d,L:!sL9lJA/jrVs"uY?P^`[["5%X>U]qcqqVP(bh0kW%bWZ>1Kfkp?ulc +"G-kEd0[Y96+T@;VY&\_^9>$GJ+)h*s1\O#pI#f=qeL*(6sPH`;LmS\L7s;*$3~> +, +1917 4309 44 74 /4S +$C +-l*@R6-s^?pio*<2r!`a^>HQ3rnd+Wn%ZR7^YdlArpKdbqu,Bf&at2;g\1AMqgG^#@BRYYCd/HJ +>T2X@s7_$;n,E?gpb00C,h+@d%f~> +, +1995 4308 5Z , +2050 4310 6X , +2129 4304 3L , +2182 4309 1T , +2221 4309 1T , +2252 4282 0Y , +2302 4282 0Y , +2360 4309 4S , +2406 4309 4S , +2484 4308 6L , +2528 4309 48 48 /3L +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +2578 4310 58 47 /6N +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qcY0ReuU^)_0-YK@^p/t4&U'%SJqnU0Mh~> +, +2668 4309 51 73 /2Z +$C +5EglT+SH@k^#U$'FpL$[_nllJqgH5-rV-'chuE_+s8Vrqrg*Md?)<,t[I'gC0OD_A]3VSk$n_r) ++92B@s8W+%2$O#4bf,_b~> +, +2723 4308 3R , +2803 4309 4D , +2863 4308 6H , +2906 4308 3R , +2954 4309 3T , +3015 4295 5C , +3071 4309 3X , +3154 4310 7M , +3213 4308 3R , +3260 4310 6X , +3300 4308 3R , +3380 4309 1T , +3427 4295 5C , +3484 4309 1T , +3523 4309 1T , +3570 4295 5C , +3627 4308 3R , +3675 4309 7H , +3707 4308 6L , +3760 4309 0D , +3834 4309 3L , +3884 4310 6X , +3924 4308 3R , +4004 4310 7M , +4062 4308 3R , +4110 4310 1L , +4162 4309 3L , +4212 4309 3T , +4273 4308 3R , +4321 4308 6L , +4365 4310 2V , +4394 4310 5V , +4482 4309 3L , +4532 4310 7D , +4593 4309 0B , +4650 4309 3L , +4700 4310 7D , +4729 4309 4D , +4789 4308 3R , +4837 4308 6H , +4911 4310 4B , +4944 4308 5Z , +4999 4310 6X , +719 4189 7H , +752 4190 7M , +810 4188 3R , +883 4188 6L , +927 4188 5Z , +982 4190 6X , +1021 4190 6X , +1061 4188 3R , +1109 4188 6H , +1151 4162 6T , +1211 4188 5Z , +1266 4190 6N , +1324 4189 3T , +1385 4190 2V , +1414 4190 6N , +1472 4161 7K , +1553 4188 6L , +1597 4188 5Z , +1652 4190 7D , +1681 4188 5Z , +1736 4189 4D , +1796 4190 6X , +1860 4188 6L , +1905 4188 5Z , +1959 4190 5V , +2048 4162 6T , +2108 4188 5Z , +2162 4190 6N , +2221 4188 3R , +2268 4190 6N , +2327 4189 7H , +2359 4188 6H , +2410 4189 0D , +719 4027 5Y , +870 4000 58 100 /1R +$C +,EE>P_qsamH4ASG/c1"Sh=pl_pOBsH^\tqI\,Y@#qtL,?hgb[<ruqOq_;VnKA75Ans1a'XIsp3u ++fK;GXg#5d*qmL+TE~> +, +914 4026 0U , +958 4026 52 49 /0K +$C +4d;!Q$pDM^GDGXrjB)oa)r;P$pC7*#qqp<0\,6("HggF>&a',eqec;?s7ZHL[dNOtDjss[*O,M0 +gb@96f\#/epNUZOG]<0!2#~> +, +1014 4026 0M , +1144 3999 6T , +1204 4026 3L , +1254 4027 6X , +1294 4026 3L , +1344 4027 5V , +1432 4025 3R , +1480 4026 7H , +1512 4025 3R , +1560 4027 6X , +1690 3998 7K , +1746 4027 2V , +1775 4026 0B , +1831 4025 3R , +1879 4025 6H , +2011 4026 7H , +2044 4027 7M , +2102 4025 3R , +2240 4027 4B , +2273 4026 4D , +2334 4027 7D , +2363 4027 7D , +2481 3999 6T , +2541 4026 3L , +2591 4026 7H , +2624 4027 7M , +2772 4027 6N , +2830 4026 3L , +2880 4027 5V , +2968 4025 3R , +3106 4025 5Z , +3161 4027 4B , +3284 4026 3L , +3334 4027 6N , +3482 4027 0P , +3516 4027 6N , +3574 4027 4B , +3607 4025 3R , +3655 4027 6X , +3695 4027 6N , +3753 4025 5Z , +3898 4027 4B , +3931 4025 5Z , +3986 4027 6N , +4044 4026 7H , +4167 4027 4B , +4200 4027 2V , +4229 4027 7D , +4258 4025 3R , +4306 4012 1M , +4421 4027 4B , +4454 4025 5Z , +4509 4027 6X , +4639 4025 3R , +4687 4027 1L , +4738 4026 3L , +4788 4027 5V , +4877 3999 6T , +4937 4027 7D , +4966 4025 3R , +5014 4012 5C , +726 3899 43 75 /4C +$C +4]cj`pO1qCh=pBMmea`e]C,R1rV(`tGMW"Ahfnt3n%8#b^@/]%s**;nICi;~> +, +786 3907 6D , +846 3905 1X , +898 3907 5T , +958 3905 4T , +1026 3905 3H , +1086 3899 4C , +1138 3888 4G , +1206 3905 1Z , +1266 3907 0W , +1318 3907 3Q , +1386 3899 4C , +1438 3905 3P , +1498 3907 5T , +1566 3907 45 62 /0Y +$C +2@YoEU`9@6s8W-!s8W-!s8V[E,.I+BaFaHls6p~> +, +1626 3905 2L , +1686 3905 1X , +1746 3905 2N , +1806 3905 1Z , +1882 3905 15 14 /4I +$X +"2GHB5Q!bFJ,XrsJ,XrsJ,XrsJ,V\1+8>rR~> +, +1934 3906 37 62 /0P +$C +0HLcd%h?m?&7NJ"iOa:#hVGqaqtJqHON50>Y_.&i8)`YSq?T$UhbED72ldsGV#>N;s3gr7V>e*- +Y0sbD[G"Xu9#X.)e1dN~> +, +2002 3905 4I , +2046 3907 6D , +2106 3905 1X , +2158 3907 5T , +2218 3905 4T , +2287 3906 0D , +719 3744 5Y , +838 3743 4S , +884 3743 27 72 /3Y +$C +1T2<V4lPiRgUL\cpjJ/%h>ata\,Wr9p\jjaid<iF$oP<-GDEgn2';iEpd*Bdn$m*~> +, +912 3743 0M , +945 3743 75 49 /6O +$C +4cl(.nk$p@#I`!/LOT!8pO2+,GOWNI[sf7_j*e]>rr)6!qu:TkmJjri[dO1-rqj=D&bZKkGJEiA +XH,SaDYri#pAMGe^"^!a\$sVa]tY'0H[b\^*Q&=gG/NZ_@?)9:pMenIGIrWc%NZMn%6s~> +, +1023 3743 42 49 /4Y +$C +2\D;ZK>WI>pNUZOGoaF9^>@ac@H"[)GK71@^Y@SZ^$WSDq]hB`lsB\cqg[AXmI.gHh>d3+h7iis +h:pnp5diannAo!b(a/;~> +, +1068 3717 47 75 /7I +$C +-Dt8Gs1eHGs4dSNn,IiEG_<oj6hkg9@GqFfID:2cGPAQEp\/n+^V@JVDu9G"n*e()rtbAR4b((m +hei>RrP&"!*o>_We1l[r]+khM%h@.-_a)]~> +, +1166 3716 6T , +1226 3743 3L , +1276 3744 6X , +1316 3743 3L , +1366 3744 5V , +1454 3742 3R , +1502 3743 7H , +1534 3742 3R , +1582 3744 6X , +1664 3744 2V , +1693 3742 6H , +1777 3744 6N , +1835 3742 5Z , +1890 3743 7H , +1965 3743 4D , +2025 3742 6H , +2068 3742 3R , +2116 3743 3T , +2218 3743 2Z , +2273 3716 4H , +2371 3743 3L , +2421 3744 6N , +2479 3716 4H , +2577 3742 5Z , +2632 3744 4B , +2707 3743 7H , +2740 3744 7M , +2798 3742 3R , +2888 3715 7K , +2944 3742 3R , +2991 3744 6N , +3050 3742 3R , +3098 3744 6X , +3137 3744 2V , +3166 3742 6L , +3253 3742 5Z , +3308 3716 6T , +3368 3743 7H , +3400 3744 2V , +3429 3742 5Z , +3484 3744 6N , +3542 3742 6H , +3585 3729 5C , +3652 3743 2Z , +3707 3743 4D , +3768 3743 7H , +3842 3744 2V , +3871 3742 6H , +3955 3743 3X , +4038 3742 5Z , +4093 3744 6X , +4132 3743 7H , +4165 3744 7M , +4266 3744 5V , +4354 3742 3R , +4402 3744 6N , +4460 3743 7H , +4493 3744 2V , +4522 3742 5Z , +4577 3744 6N , +4635 3744 2V , +4664 3744 6N , +4722 3715 7K , +4820 3744 7M , +4878 3742 3R , +4926 3744 6X , +4966 3742 3R , +5021 3743 0D , +719 3622 77 71 /4A +$C +,=&o*!t[`V#=64K5_.]WbIRs<5mHuRS'uJOqJZ%VHN2m[s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8TL/cs\qRBI1I/p]~> +, +797 3624 6N , +855 3624 7D , +884 3624 2V , +913 3623 56 73 /3H +$C ++LJp$5kmV@ADpOa$L)XK9;U)$FLka1QV41'l#aLB/sf3GX^kL=qgH2riP+2XpA99P(k'-9mIh'p +IJ`R7s8W-!s8K>)a7J5P5dOC>~> +, +969 3622 3R , +1049 3624 3F , +1110 3623 3H , +1198 3624 5K , +1256 3623 0D , +1273 3622 0V , +1323 3609 5C , +1380 3623 3L , +1462 3623 4S , +1508 3623 3Y , +1536 3623 0M , +1569 3623 6O , +1647 3623 4Y , +1692 3597 7I , +1781 3624 2V , +1810 3624 6N , +1900 3624 5R , +1961 3624 2V , +1990 3624 5V , +2078 3623 2Z , +2134 3622 5Z , +2196 3612 3D , +2249 3624 3F , +2310 3623 3H , +2398 3624 2V , +2427 3622 6H , +2501 3624 6N , +2559 3622 5Z , +2614 3623 7H , +2679 3624 6X , +2719 3622 3R , +2766 3622 6H , +2809 3623 7H , +2841 3624 6X , +2881 3624 2V , +2910 3622 6L , +2954 3623 7H , +2987 3622 3R , +3035 3623 3T , +3129 3623 7H , +3162 3622 5Z , +3249 3623 3L , +3331 3624 43 69 /0Z +$C +-jHk!!TAb"J,fQKs8W-!s8W-!s8W-!s8U<pLX:JlKAhU%NZJ]A#D\(iJ,~> +, +3381 3646 6A , +3414 3623 2Z , +3470 3624 2V , +3499 3623 7H , +3563 3623 3T , +3624 3622 3R , +3672 3622 3R , +3720 3596 6T , +3812 3623 2Z , +3867 3624 2V , +3896 3623 7H , +3929 3624 5V , +4017 3623 3L , +4067 3596 6T , +4159 3623 7H , +4192 3622 5Z , +4279 3623 2Z , +4334 3622 3R , +4413 3622 6L , +4457 3622 5Z , +4512 3624 7D , +4541 3622 5Z , +4596 3623 4D , +4656 3624 6X , +4695 3622 3R , +4743 3623 3T , +4836 3623 3X , +4919 3624 2V , +4948 3623 7H , +4981 3624 7M , +719 3504 4B , +752 3502 5Z , +807 3504 6X , +846 3502 3R , +894 3475 7K , +950 3504 6X , +989 3502 5Z , +1044 3503 4D , +1104 3504 6N , +1162 3503 3T , +1264 3503 3L , +1314 3504 6N , +1372 3503 3T , +1472 3503 2Z , +1527 3503 3L , +1577 3502 6L , +1622 3503 3H , +1677 3475 7K , +1733 3504 6X , +1772 3502 5Z , +1827 3503 4D , +1887 3504 6N , +1945 3503 3T , +2015 3503 0D , +2096 3504 33 69 /5G +$C +0H%XJ!UM?&s8W-!s8W-!s8W-!s8W-!s8W-!s)k!s!MdF~> +, +2130 3504 6N , +2188 3502 6H , +2230 3503 7H , +2263 3502 3R , +2311 3503 3L , +2361 3503 3T , +2422 3489 5C , +2486 3504 2V , +2515 3503 7H , +2587 3502 6L , +2631 3503 3L , +2681 3504 6N , +2778 3503 2Z , +2833 3502 3R , +2920 3503 3L , +3009 3504 4B , +3042 3503 4D , +3103 3504 7D , +3132 3504 7D , +3161 3526 6A , +3194 3502 6L , +3238 3502 5Z , +3293 3504 7D , +3322 3502 5Z , +3377 3503 4D , +3437 3504 6X , +3515 3504 2V , +3544 3504 5V , +3632 3503 3L , +3682 3475 7K , +3738 3502 3R , +3825 3483 3B , +3858 3549 5W , +3886 3476 6T , +3946 3504 2V , +3975 3504 1L , +4027 3504 5V , +4115 3503 3L , +4165 3476 6T , +4225 3549 0N , +4292 3504 2V , +4321 3504 6N , +4419 3504 66 70 /3P +$C +/ej4u/T3g&+n;qC<n?)KXf]1G>OA8/Xnt``D/H-HBjRpEd_/jhFg\e]/)%E(>$di!6n%M*=4;<' +:$Ls"Y-$-#?!Gd#kr5L*FIoV_\kUM&mD1=>LE3:VKR)+,~> +, +4486 3504 0Z , +4536 3504 0Z , +4626 3503 7H , +4659 3502 3R , +4706 3504 6X , +4746 3504 5V , +4834 3504 2V , +4863 3504 6N , +4922 3502 5Z , +4976 3504 7D , +5005 3526 6A , +719 3382 5Z , +774 3355 7K , +829 3356 4H , +885 3363 28 93 /3D +$C +3RbHUG4"&?]C+PE]C,RirpTT2^[Jr;^An65s3grIWrK*t='h6DF^7nJWD_7r<2jY:J,~> +, +918 3369 5C , +974 3383 3X , +1057 3384 7M , +1116 3384 2V , +1145 3382 6L , +1189 3384 7M , +1276 3384 2V , +1305 3382 6H , +1377 3383 3T , +1438 3384 2V , +1467 3382 6H , +1510 3356 6T , +1570 3384 7D , +1599 3383 3L , +1649 3356 4H , +1704 3382 3R , +1752 3383 3T , +1843 3383 3L , +1893 3382 6H , +1965 3384 2V , +1994 3382 6H , +2044 3383 0D , +2091 3384 5G , +2125 3384 4B , +2188 3383 4S , +2234 3383 3Y , +2262 3383 0M , +2295 3383 6O , +2373 3383 4Y , +2418 3357 7I , +2505 3383 2Z , +2560 3382 3R , +2608 3355 7K , +2664 3384 2V , +2693 3384 6N , +2751 3382 6H , +2822 3383 3X , +2905 3384 2V , +2934 3383 7H , +2967 3384 7M , +3054 3383 3L , +3133 3429 5W , +3168 3378 42 68 /3R +$C +,6C.B@Yc!O6s;VWl;SG\2+Vjq='h6m\g]7$"5p[p"jn=g"n]Q:YHR9ls8W+KJ)B#ZrP,T9aB/(! +++s-cXbZrV^Amr`/b[e=Fg0<&'!Pe\6F@4M0Mh~> +, +3221 3429 0N , +3249 3369 5C , +3303 3383 7H , +3336 3384 7M , +3394 3382 46 49 /3R +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +3471 3384 6X , +3511 3382 3R , +3558 3384 5V , +3647 3383 3L , +3697 3384 2V , +3726 3384 6N , +3784 3384 2V , +3813 3384 6N , +3871 3355 7K , +3956 3382 6L , +4000 3384 7M , +4059 3383 3L , +4109 3384 6X , +4148 3383 3L , +4198 3382 6L , +4242 3383 7H , +4275 3382 3R , +4323 3384 6X , +4362 3382 6H , +4434 3382 6H , +4476 3384 7M , +4535 3382 5Z , +4589 3383 4D , +4649 3384 7D , +4679 3383 3T , +4768 3383 2Z , +4823 3382 3R , +4900 3383 7H , +4933 3384 7M , +4991 3382 3R , +719 3236 6T , +779 3263 3L , +829 3263 7H , +862 3264 7M , +949 3264 6N , +1007 3263 3L , +1057 3264 5V , +1145 3262 3R , +1222 3262 5Z , +1277 3264 4B , +1339 3263 3L , +1389 3264 6N , +1476 3264 5G , +1510 3264 6N , +1568 3264 4B , +1601 3262 3R , +1649 3264 6X , +1689 3264 6N , +1747 3262 5Z , +1831 3264 2V , +1860 3264 5V , +1948 3263 3L , +1998 3235 7K , +2054 3262 3R , +2131 3264 4B , +2164 3264 2V , +2193 3264 7D , +2222 3262 3R , +2278 3263 0D , +2324 3264 5G , +2358 3264 4B , +2420 3263 4S , +2466 3263 3Y , +2494 3263 0M , +2527 3263 6O , +2605 3263 4Y , +2650 3237 7I , +2737 3263 2Z , +2792 3262 3R , +2840 3235 7K , +2896 3264 2V , +2925 3264 6N , +2983 3262 6H , +3055 3263 3X , +3138 3264 2V , +3167 3263 7H , +3200 3264 7M , +3288 3263 7H , +3321 3264 7M , +3379 3262 3R , +3457 3262 6L , +3501 3264 7M , +3560 3263 3L , +3610 3264 6X , +3649 3263 3L , +3699 3262 6L , +3743 3263 7H , +3776 3262 3R , +3824 3264 6X , +3894 3309 5W , +3929 3268 46 48 /4G +$C +#sr&eKW$:b64+?Y'a4jk5seD"TV2Mp-p^1!'Hj(Q#VQTG@G#PS0]@cq3t<3a*&-?,@Dd'%L)_o6 +3,TRA_mK~> +, +3982 3309 0N , +4010 3249 5C , +4065 3263 7H , +4098 3264 7M , +4156 3262 3R , +4234 3264 6X , +4274 3262 3R , +4321 3264 5V , +4410 3263 3L , +4460 3264 2V , +4489 3264 6N , +4547 3264 2V , +4576 3264 6N , +4634 3235 7K , +4720 3262 6L , +4764 3264 7M , +4823 3263 3L , +4873 3264 6X , +4912 3263 3L , +4962 3262 6L , +5006 3286 6A , +719 3143 7H , +752 3142 3R , +799 3144 6X , +839 3142 6H , +911 3144 5V , +999 3143 4D , +1060 3142 6H , +1102 3143 7H , +1163 3143 2Z , +1218 3142 3R , +1295 3143 3L , +1374 3143 3T , +1435 3142 3R , +1483 3142 6L , +1527 3144 2V , +1556 3144 5V , +1645 3143 3L , +1695 3144 7D , +1752 3144 2V , +1781 3144 6N , +1839 3143 7H , +1872 3142 3R , +1920 3115 7K , +1975 3142 3R , +2023 3144 6X , +2093 3115 7K , +2149 3144 2V , +2178 3143 0B , +2234 3144 2V , +2263 3144 6N , +2321 3115 7K , +2407 3143 3L , +2486 3144 4B , +2519 3144 2V , +2548 3144 7D , +2577 3142 3R , +2653 3143 3T , +2714 3142 3R , +2762 3142 6H , +2804 3142 6L , +2849 3144 6X , +2888 3144 2V , +2917 3116 6T , +2977 3143 7H , +3010 3142 5Z , +3065 3144 6X , +3133 3144 6N , +3191 3143 4D , +3251 3144 5V , +3340 3143 2Z , +3395 3142 3R , +3443 3144 6X , +3510 3142 5Z , +3565 3144 4B , +3626 3143 3L , +3676 3144 6N , +3762 3142 5Z , +3817 3116 6T , +3877 3142 3R , +3925 3144 6N , +4011 3144 4B , +4044 3144 2V , +4073 3144 7D , +4102 3142 3R , +4178 3144 4B , +4211 3144 6X , +4251 3142 5Z , +4305 3144 5V , +4422 3143 3X , +4505 3144 7M , +4564 3144 2V , +4593 3142 6L , +4637 3144 7M , +4722 3143 7H , +4755 3144 7M , +4813 3142 3R , +4889 3143 2Z , +4944 3144 2V , +4973 3143 7H , +5006 3166 6A , +719 3024 5V , +807 3023 3L , +857 2996 6T , +963 3022 6L , +1007 3023 3L , +1057 3024 6N , +1162 3023 2Z , +1217 3022 3R , +1312 3024 7D , +1341 3022 5Z , +1396 3023 3L , +1446 3023 3T , +1507 3022 3R , +1555 3023 3T , +1624 3023 0D , +1688 3022 0R , +1767 3023 7H , +1799 3024 7M , +1857 3022 3R , +1905 3024 6X , +1945 3023 3X , +2028 3024 2V , +2057 3022 6H , +2100 3022 3R , +2148 3009 5C , +2220 3023 4S , +2266 3023 3Y , +2294 3023 0M , +2327 3023 6O , +2405 3023 4Y , +2450 2997 7I , +2554 3022 6H , +2596 3024 7M , +2655 3022 5Z , +2709 3023 4D , +2769 3024 7D , +2799 3023 3T , +2906 3023 2Z , +2961 3022 3R , +3056 3023 7H , +3089 3024 7M , +3147 3022 3R , +3242 3024 6N , +3300 3023 3L , +3350 3024 5V , +3438 3022 3R , +3533 3022 5Z , +3588 3024 4B , +3668 3023 3L , +3765 3023 2Z , +3820 3024 2V , +3849 3023 7H , +3882 3024 5V , +3970 3023 3L , +4020 2996 6T , +4127 3024 4B , +4160 3024 2V , +4189 3024 7D , +4218 3022 3R , +4313 3024 2V , +4342 3024 6N , +4447 3023 7H , +4480 3024 7M , +4538 3022 3R , +4633 3023 3T , +4694 3024 2V , +4723 3024 6X , +4763 3022 3R , +4811 3022 6L , +4855 3023 7H , +4888 3022 5Z , +4942 3024 6X , +4982 2996 4H , +726 2896 4C , +786 2904 0Y , +846 2902 2L , +906 2902 1X , +958 2904 5T , +1026 2902 43 45 /3H +$C +--Bs+k9*%T&:G,"nKk6P"+"kk2m9\ds6X:'>#;Fq8V0QRcT29O5bS`qZp[t!6#*3fV#UJ^D6DID +fJ$MB6gQEDC((Zh~> +, +1086 2896 4C , +1138 2902 4T , +1206 2904 3M , +1267 2903 0D , +720 2639 79 71 /5C +$C +,,$7f'L<:D#RDCmi<Mb-H_LpJ*$BlU&8m\RK6hF#dVlfLmF(lSp%I_;p\sjYqu?]rs8Vh#l[S?: +^MSJcgA8D8Xeg0KQ*dZi@ARCcX>#kn$Igc&_Li"96)"~> +, +803 2615 56 73 /0A +$C +0H#B9QnN4+s8W-!s8V8CQOen!_qlG%7D'0jKH&BdDcb]fhr"<\p](9Ns8Ke5YN]nI\7oB'd&DQ@ +>Vg_4Y11Z82'Ie**&+&EJq*~> +, +864 2639 32 65 /3D +$C +.EZ`8VbXVnZpArR#H(r/s8W-!s8W-!q/FU2G7Ntp8,rVhs7Ni+LP*L[~> +, +898 2641 30 71 /2M +$C +0H#A(KA-A*s8W-!s8W-!s8?^e)F*gYGmktL:jE#]AO4eC?2sl,C=Fr1~> +, +931 2639 52 49 /2V +$C ++U++g6m-H$K]n$]*<H\uDNfBa^72=,YM9*AIfKHJs8W&LYOB6S^Uh#29@^83L6ODnTnNn(#T`~> +, +987 2641 59 47 /0D +$C +/fA4$TE!.:j:ducs8W-!s8W-!s8W-!s8W-!YP,S6V*Tg/bD(U.Ap1dlk(&#^$q:pOW&S<Uhu~> +, +1048 2639 40 49 /7E +$C +3f>g'n3Oo%%j7D36+e>sT3%oiqqqCITh04KCBXhpb6^M`XXX\d$A^)?6ToH"%MlEM^]+8HpKJ%X +L).gSG[X3`GQ~> +, +1117 2641 0D , +1178 2639 2V , +1234 2639 3D , +1292 2639 7E , +1336 2639 58 49 /2F +$C ++O3o@KZq=p%o5tr5s"jbOC&6G*ftjIJ+qRps8W-!s8W-!s8W-!rI2'2TU[h<s-\M160*QL5a,%I +_85%~> +, +1398 2615 0A , +1459 2615 0A , +1520 2639 2V , +1575 2641 39 47 /5I +$C +0H$MYTKVuJs8W-!s8W-!pTf^+(gLC'+S,W)pYU$GG9Me#iPF:~> +, +1614 2639 3D , +1648 2639 46 49 /2I +$C ++U++g6m1FjKH4dS%@Npn#4R8n%;9Hkde`s0run4!%=!O$"j!oDs6oj9f)MddD(?#G0i6DS%7:I2 +M4a~> +, +1698 2639 58 74 /3V +$C +--g96$(;'KK@A;uOFBLHqIFR@!\e^-4qN$9VuE:%^]401s8W,ts8RNIhqHn'XgPSQ(h%6"pP4Jh +is#mPs8W-!s44J4)F*dD%jb[Ni:$~> +, +1784 2641 2M , +1817 2641 0D , +1903 2641 58 68 /7G +$C +4q,'94n"JT*ZtF^qu>RBOg*aCs8W-!s8W-!s8W-!s8W,JT]X(grr~> +, +1964 2641 2M , +1997 2641 86 47 /2R +$C +/f@-r.*sdMrB=m)FU+"'Bs740s8W-!s8W-!s8W-!s8W-!s8W-!s/Q+QIdM<I<5NE;3H3>8%'hj( +p6tFJT[_="2"DKC2$[PDT](P4'E~> +, +2086 2639 55 74 /7K +$C +.LKf,!c/Ep#WtK1LQKo%":RC8hODu?^>H[(s4dRgs8N&up&Fu?95CrQ9+2UOORMR[]3I5IiJ#/Q +a8c2>s8T9b_aj]R*_6nS,<,~> +, +2147 2639 2V , +2195 2639 38 74 /2X +$C +4t!i<^[;&>s)7dag]-%-htI*Ds0qsAmJlSRDu5%]J(st[pAaja~> +, +2233 2641 65 68 /7A +$C +.D_q^.KGB-^]4?6s8W-!s8W-!s8W-!s3*T]J,[4_s8Tk1e(531rV~> +, +2299 2641 60 72 /2Z +$C +0H!84,PBKR"/)b=\m6u]\m6qT9;U)0dd,?GFLkSVA2rn_hmM5+nDA/ng[4_3&)V<0q[]t?hYm?A +s8W-!s8T11B`H;mj=qeJ,Cf~> +, +719 2478 3F , +780 2478 7M , +838 2476 3R , +911 2478 4B , +945 2476 5Z , +999 2478 7D , +1028 2478 7D , +1057 2476 5Z , +1112 2477 3X , +1195 2478 28 69 /2V +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +1225 2478 6N , +1283 2449 55 76 /7K +$C ++p6(UU(D9p_BI4g&2<;jh&tN#o\CkkFnFSgJ,d.Xs(u]/=CJ9h&r&_O@t^O*>/J*d6!EuahV:&- +aAQDs_@@-!5s.7@DNJb"HG82g\$+]hs53/>Bn"bZS_ZAA[]D/Z`.uhrTnOs!J,~> +, +1363 2476 5Z , +1418 2450 6T , +1478 2477 7H , +1511 2478 2V , +1540 2476 5Z , +1594 2478 6N , +1653 2476 6H , +1720 2450 6T , +1780 2478 6X , +1820 2476 5Z , +1874 2477 0B , +1931 2478 2V , +1960 2477 3T , +2021 2476 3R , +2069 2477 3T , +2155 2477 51 73 /2Z +$C +5EglT+SH@k^#U$'FpL$[_nllJqgH5-rV-'chuE_+s8Vrqrg*Md?)<,t[I'gC0OD_A]3VSk$n_r) ++92B@s8W+%2$O#4bf,_b~> +, +2210 2450 4H , +2291 2478 3F , +2352 2477 56 73 /6F +$C ++LJp$5kmV@ADpOa$L)XK9;U)$FLka1QV41'l#aLB/sf3GX^kL=qgH2riP+2XpA99P(k'-9mIh'p +IJ`R7s8W-!s8K>)a7J5P5dOC>~> +, +2433 2478 5K , +2491 2477 11 12 /4U +$X +*rnNUJ&)*Bs5<q8s5<q8s5<pmJ&!-+~> +, +2508 2476 0V , +2583 2477 3L , +2633 2478 6X , +2672 2476 3R , +2745 2478 6N , +2803 2476 5Z , +2858 2477 7H , +2915 2476 6H , +2958 2477 4D , +3018 2450 6T , +3078 2450 6T , +3138 2476 5Z , +3193 2478 6X , +3232 2477 7H , +3265 2476 3R , +3313 2477 3T , +3399 2477 2Z , +3454 2450 4H , +3535 2477 3L , +3585 2478 6N , +3643 2450 4H , +3724 2478 5R , +3785 2478 2V , +3814 2478 5V , +3902 2477 2Z , +3958 2476 5Z , +4020 2466 45 85 /6B +$C +/mdGEmJh+ZpA_VhqgRGrrP*:*rnk3Ps)6ZcrP.asIc%X5^Mhm+hm`"MJ(s\q^Mj!W~> +, +4073 2478 3F , +4134 2477 6F , +4215 2477 3X , +4298 2478 2V , +4327 2477 3T , +4388 2449 7K , +4444 2476 3R , +4492 2477 7H , +4532 2477 4O , +870 2330 42 4 /6J +$C +,D0PjVu~> +, +925 2305 41 42 /0C +$C +.EY!]i<+`R#=MDD+G#<$)k_gt3^NJ=&(Q-Ds8DhWYG],6qeL-&>AIZ$Y[E9^iJR#A_J0Jja`R~> +, +976 2305 45 40 /4X +$C +24P6g0HeTYT^;uY7s.?AQ]r?O57a[\huE`Vs8W-!s8W-!s8W,@W)HM??esW~> +, +1033 2307 42 39 /1I +$C +,D/u\C/Fs1s8W-!s81[ILR($hp;&?uC$gU.*J4YuMW(Uj'LP[~> +, +1089 2305 36 42 /6T +$C +3g?-NOmn"#&:Fe?)%QiZi<JeD[pK+$,onI3YY&[9PQl@TTb&?"6]=EJcra9t4X^6@s(uR+\1h," +6fG2bC()8Se,~> +, +1140 2305 42 42 /1Y +$C +.EZ`;KH),n#=Lqj":`^D\kUUk:J&5_DbobKli7"^?[CH*g0_:R[&p0Z(;gGG"qXfbe1dQ38;.~> +, +1195 2307 1I , +2220 2330 6J , +2276 2307 38 56 /4P +$C +,DN$XWNH4#s8W-!s8W-!s-s8YmiVATs8W,W~> +, +2327 2307 44 40 /0A +$C +-D7or'5@D&4N`HZs8W-!s8W-!s8W-!rr)e>>?nGN?J8::N#53m?)r\o6OH..~> +, +2385 2305 6T , +2435 2305 42 42 /5B +$C ++qA`!i<+`R#7-,NF9mg@JdnLoU`Vrs<Rl6lU)QS9o#/-4^?`AAm]E=%-#IHPQ%K4@6F@4M0N)1A~> +, +2491 2307 1I , +2542 2305 41 53 /0Q +$C ++pr&gi<,b:3[5fp76'KO+P.W`s8W-!s8W-!q)&U5qbp#bs8W,,~> +, +2598 2305 1Y , +2655 2307 40 54 /6B +$C +,D/u\C.NjSs8W-!s8W-!s5h(sT=#q/s8RQ(]GMcm6ZCNl:]~> +, +2709 2307 6B , +2758 2305 0Q , +2816 2307 4P , +2863 2307 53 40 /0W +$C +,D$Sb:*i!:X&[JDoe4)[s8W-!s8W-!s8W-!s8W-!s8VhCrSP!6GO6%aV'Cjf,a`@J2Cl/bg1i/] +_Na7$-i~> +, +2921 2305 5B , +3354 2330 6J , +3404 2307 50 38 /6H +$C +,T3QTor[V2r55mG]"e:BBn,tcheb%Hs3k[fIJs1f^\oS8m=50#Y.K.s5NuO)r^R2;!U6`b2#~> +, +3463 2307 1I , +3516 2305 43 42 /1O +$C +,TP#L&8#>o#A?74OQqE%jo#D[9RK$r^OP_N^O<i4p-YS`GDD9t#2F_.rjn\eJV:<EMT%qZ@6oSk'E~> +, +3566 2290 47 57 /0C +$C +,DOA<cbKM[s8W"e0*iX*5(hf*SGFJXpd)WXG_@%'ldL@4qtbgBs0_j7^Y2og=_!2QCaI_B.5_IK +JmF9$>VMlh.41\~> +, +3626 2307 38 54 /0E +$C +,DN$XWNH4#s8W-!s8W-!s8W-!s8W+h"mbU~> +, +3677 2305 5B , +3731 2307 0A , +3786 2290 45 57 /6V +$C +-O)9opF=.7E8A.oqnN1,$nhlM&:H_S'Al'+^4Hgj%J6%P5.\JBp&Cris8VJ9Ir"psqeL$a5@H1^ +$$I.X64Ut:CLL0Z6RgL~> +, +3838 2305 0Q , +3892 2307 46 54 /3X +$C +,D,!,?Cf[7:U6\os8W-!s8W-!s8W-!s1eG:f%2HrQXR(+KY%uQln0,[L:I9`s7mW\It.~> +, +870 2230 6J , +924 2205 46 56 /4Z +$C +24TCB&8#?;%o5Ss3hSan^Hjg,%J6%[p%7qLp&Cris8W+7qu>C-g=ooW51j2q?%s!Y0UH7\$\l0" +Eh.4Ms8W"J"L#H~> +, +980 2207 4P , +1035 2205 6T , +1086 2205 1O , +1136 2205 47 56 /5L +$C +.aC\=8DsU[Ta0&X,<MN2+Q#HhqG#r\Du+BJmn`t1fDkmE^Xh$69D_@5G.uDlV:]3/_1GsMiJ$"E +K'&oMs8W,?i@Fg~> +, +1196 2207 0E , +1247 2205 5B , +1302 2205 4Z , +1359 2207 6B , +1410 2205 1Y , +1465 2207 1I , +1517 2205 5B , +1572 2190 6V , +1627 2207 1I , +1680 2205 1Y , +1732 2205 4X , +1787 2207 0A , +1842 2205 4Z , +2220 2230 6J , +2276 2207 4P , +2327 2207 0A , +2385 2205 6T , +2435 2205 5B , +2491 2207 1I , +2542 2205 0Q , +2598 2205 1Y , +2651 2207 0A , +2704 2205 0Q , +2762 2207 4P , +2809 2207 0W , +2867 2205 5B , +870 2130 6J , +923 2105 5B , +976 2107 46 38 /5X +$C +,D,!,?Cg=aGVWt6=D:u3)aR\#g/cY1Q*dZiD(B=)9#XuAl-k;W_kc*8km$B28\.XEDLubiFIRk) +j9)9MlV@~> +, +1028 2090 0C , +1086 2105 1Y , +1141 2107 1I , +1192 2105 0Q , +1251 2105 6T , +1301 2105 5B , +1358 2107 0E , +1409 2105 5B , +1465 2105 41 42 /0C +$C +.EY!]i<+`R#=MDD+G#<$)k_gt3^NJ=&(Q-Ds8DhWYG],6qeL-&>AIZ$Y[E9^iJR#A_J0Jja`R~> +, +1516 2105 0Q , +1574 2107 4P , +1626 2105 1Y , +1679 2107 0A , +2220 2130 6J , +2276 2107 4P , +2327 2107 0A , +2385 2105 6T , +2435 2105 5B , +2491 2107 1I , +2542 2105 0Q , +2594 2107 6H , +2654 2107 4P , +2706 2105 4Z , +2758 2105 0Q , +2812 2107 3X , +870 2030 6J , +924 1990 6V , +977 2005 5B , +1032 2005 1Y , +1081 2007 0W , +1139 2005 5B , +1192 2005 0Q , +1249 2007 1I , +1300 1990 46 55 /0M +$C +/d:M:;ldCpqgSFVn%ZI%\RW3Hm[)\)p?@":?Z)4bV=s/%\mK?AgTRL?l+6_/^718$bs:pMG.#*~> +, +2220 2030 6J , +2275 2007 1I , +2327 2005 5B , +2378 1990 47 57 /3A +$C +,DOA<cbKM[s8W"e0*iX*5(hf*SGFJXpd)WXG_@%'ldL@4qtbgBs0_j7^Y2og=_!2QCaI_B.5_IK +JmF9$>VMlh.41\~> +, +2435 2005 5B , +2490 2005 1O , +2542 2005 0Q , +2598 2005 4Z , +2651 2005 5B , +2708 2007 0E , +2760 2005 1O , +2812 1990 0M , +870 1930 6J , +922 1907 3X , +980 1907 4P , +1032 1890 6V , +1084 1907 3X , +1142 1907 0E , +1196 1907 4P , +1248 1890 6V , +1300 1907 3X , +1354 1905 0Q , +1406 1905 5L , +1464 1905 1O , +1519 1905 0C , +1572 1907 43 54 /5J +$C +,D7oY.\F=OlkqJ)l#aLB/sekG\m6qT95.h2MUknq^Mg@ODn"KgpA5B0gYokC$iBVSO8o7[r^R9%hu~> +, +1626 1890 6V , +1681 1907 1I , +1734 1905 1Y , +1786 1905 4X , +1841 1907 0A , +1896 1905 4Z , +2220 1930 6J , +2275 1907 1I , +2327 1905 5B , +2378 1890 3A , +2435 1905 5B , +2490 1905 1O , +2542 1905 0Q , +2600 1907 4P , +2651 1907 0A , +2704 1905 0Q , +2759 1905 5B , +2815 1907 1I , +2864 1907 50 38 /3C +$C ++NIhb/bO$fDbof)Y-%#jHL#m,Fa\CN?!Gobe,GP\X*X'f\Jtl#!>Y(gTE~> +, +2922 1905 1O , +2978 1907 0E , +870 1830 6J , +922 1807 3X , +980 1807 4P , +1032 1790 6V , +1084 1807 3X , +1142 1807 0E , +1196 1807 4P , +1248 1790 6V , +1300 1807 3X , +1354 1805 0Q , +1411 1805 0C , +1464 1805 1Y , +1520 1807 0E , +1572 1805 1Y , +1627 1807 1I , +2220 1830 6J , +2277 1805 6T , +2327 1805 5B , +2380 1805 0Q , +2436 1790 6V , +2491 1807 1I , +2546 1807 4P , +2598 1805 4Z , +870 1730 6J , +922 1707 3X , +980 1707 4P , +1032 1690 6V , +1084 1707 3X , +1142 1707 0E , +1196 1707 4P , +1248 1690 6V , +1300 1707 3X , +1354 1705 0Q , +1408 1705 0Q , +1462 1707 3X , +1520 1707 4P , +1573 1705 0C , +1626 1707 5J , +1679 1707 0A , +1733 1705 5B , +1791 1705 6T , +1845 1705 6T , +2220 1730 6J , +2272 1705 0Q , +2328 1705 1O , +2382 1707 5J , +2435 1705 5B , +2493 1707 6B , +2544 1705 1Y , +2599 1705 0C , +2650 1705 4X , +2709 1705 6T , +870 1630 6J , +926 1607 4P , +977 1607 0A , +1035 1605 6T , +1085 1605 5B , +1141 1607 1I , +1192 1605 0Q , +1244 1605 5L , +1302 1605 1O , +1357 1605 0C , +1410 1607 5J , +1464 1590 6V , +1519 1607 1I , +1572 1605 1Y , +1624 1605 4X , +1679 1607 0A , +1734 1605 4Z , +2220 1630 6J , +2272 1605 0Q , +2327 1605 5B , +2380 1607 5X , +2434 1605 0Q , +2486 1607 3C , +2544 1605 1O , +2599 1607 1I , +2654 1607 4P , +2706 1605 1O , +2756 1605 5L , +2816 1607 0E , +2867 1605 5B , +870 1530 6J , +926 1507 4P , +977 1507 0A , +1035 1505 6T , +1085 1505 5B , +1141 1507 1I , +1192 1505 0Q , +1244 1505 5L , +1302 1505 1Y , +1357 1507 1I , +1410 1505 4Z , +1463 1505 5B , +1519 1507 1I , +1568 1507 6H , +1628 1507 4P , +1680 1505 4Z , +1732 1505 0Q , +1786 1507 3X , +2220 1530 6J , +2272 1505 0Q , +2329 1507 1I , +2382 1505 1Y , +2434 1505 4X , +2490 1490 6V , +2542 1507 3X , +2599 1505 0C , +2652 1505 1Y , +2708 1507 0E , +2760 1505 1Y , +2815 1507 1I , +720 1242 47 68 /0W +$C ++NdW;+G5=f3[!o4!Y*QgX/gPa^955#FMI_Q?iOL1p%qCbf*isd+G6`nY1IHDXg#;h>]9@dDr0@> +DV_pJmFZBqZ4;E+B<^l?7#(~> +, +770 1243 20 15 /2H +$C +1`Rl=FT;<CC)Bb~> +, +845 1244 7G , +906 1244 2M , +939 1244 2R , +1028 1242 55 74 /7K +$C +.LKf,!c/Ep#WtK1LQKo%":RC8hODu?^>H[(s4dRgs8N&up&Fu?95CrQ9+2UOORMR[]3I5IiJ#/Q +a8c2>s8T9b_aj]R*_6nS,<,~> +, +1089 1242 52 49 /2V +$C ++U++g6m-H$K]n$]*<H\uDNfBa^72=,YM9*AIfKHJs8W&LYOB6S^Uh#29@^83L6ODnTnNn(#T`~> +, +1137 1242 2X , +1175 1244 7A , +1241 1244 60 72 /0B +$C +0H!84,PBKR"/)b=\m6u]\m6qT9;U)0dd,?GFLkSVA2rn_hmM5+nDA/ng[4_3&)V<0q[]t?hYm?A +s8W-!s8T11B`H;mj=qeJ,Cf~> +, +1327 1242 41 49 /7G +$C ++N9T']F[%ge#bGo7o1=Q5gn17;Yp%#qZ$Tos!&T^s1`I=XnrMYL)(WnLN)4+"pt~> +, +1372 1242 2V , +1427 1244 2R , +1516 1244 2R , +1605 1242 48 49 /4E +$C ++e0*'9_`6r:#XV_"O!ed6$V>jkWYWRs82iRDn"AILVk7I@?(jB!PGH;,Rcp:^1i">p"EUXO&q(0 +WsT7`0Mh~> +, +1655 1244 0D , +1716 1242 3V , +1777 1242 7E , +719 1081 3F , +780 1081 7M , +838 1081 28 69 /5T +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +868 1079 40 49 /3J +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +942 1079 3J , +984 1079 3R , +1032 1079 6L , +1077 1080 7H , +1109 1081 5T , +1138 1079 5Z , +1193 1081 6N , +1284 1081 7D , +1313 1081 5T , +1342 1079 3J , +1385 1080 7H , +1417 1079 3J , +1492 1080 3L , +1542 1081 7D , +1571 1081 7D , +1633 1080 7H , +1666 1081 7M , +1724 1079 3R , +1805 1079 6L , +1849 1079 5Z , +1904 1081 5V , +1992 1081 5V , +2081 1080 3L , +2131 1081 6N , +2189 1080 3T , +2250 1079 3J , +2324 1080 3T , +2385 1079 5Z , +2440 1079 6L , +2484 1080 4D , +2544 1081 5V , +2633 1079 3R , +2681 1081 6N , +2739 1080 7H , +2771 1079 3R , +2819 1080 3T , +2914 1081 5T , +2943 1081 6N , +3035 1080 7H , +3068 1081 7M , +3126 1079 3R , +3208 1081 3F , +3269 1080 6F , +3359 1081 5K , +3417 1080 4U , +3434 1079 0V , +3518 1081 5V , +3606 1080 3L , +3656 1081 6N , +3748 1053 56 75 /6T +$C +/d=P.LUCpts8W-!s8W*W++t[YiU7o"_nlWIR!K5#0_F9"If'$2n,<4bs7cQnYPu4PGO6ub73.&n +$mep_/@[=OG.U\h_[93uT^3@4(ao~> +, +3808 1080 3L , +3858 1052 55 76 /4M +$C ++p6(UU(D9p_BI4g&2<;jh&tN#o\CkkFnFSgJ,d.Xs(u]/=CJ9h&r&_O@t^O*>/J*d6!EuahV:&- +aAQDs_@@-!5s.7@DNJb"HG82g\$+]hs53/>Bn"bZS_ZAA[]D/Z`.uhrTnOs!J,~> +, +3914 1079 3R , +3962 1079 3J , +4004 1066 23 27 /0L +$C +0k&hmpMY93^MeSYh7p_lq5@]N~> +, +4063 1052 4M , +4119 1081 5T , +4148 1080 55 47 /4S +$C +.aN80rp/h061h@qkr8H5rjSg"8c@(ef(At+5J$]0oUGf-2d]Y_\*g;!Eo<U`1]Mt~> +, +4204 1081 5T , +4233 1081 6N , +4291 1052 4M , +4382 1080 7H , +4415 1081 7M , +4473 1079 3R , +4555 1080 3T , +4616 1081 5T , +4645 1081 4B , +4678 1081 4B , +4712 1079 3R , +4760 1081 6X , +4799 1079 3R , +4847 1081 6N , +4905 1079 6L , +4950 1079 3R , +4998 1079 3J , +719 960 2Z , +774 959 3R , +822 960 7H , +855 960 82 48 /6V +$C +--V`>h0uuM[/YPgrB9d@+!SJRhOje2e\;&ZVUk)5[%C.MH@FT)^[7iQJ+m9?>HRpIY?pm>YNtG4 +lW<i0='tEF]"Q[tSt*;=F&6Q9h].OYhu~> +, +938 959 3R , +986 959 3R , +1034 961 6N , +1155 960 7H , +1188 961 7M , +1246 959 3R , +1357 960 2Z , +1412 959 3R , +1460 961 7M , +1518 960 3L , +1568 960 4S , +1625 961 5T , +1654 959 5Z , +1709 960 4D , +1769 961 6X , +1872 959 3J , +1914 933 6T , +1974 959 3R , +2022 959 6L , +2067 961 5T , +2096 961 4B , +2129 961 5T , +2158 959 3R , +2206 960 3T , +2329 961 5T , +2358 961 6N , +2479 960 7H , +2512 961 7M , +2570 959 5Z , +2624 959 3J , +2667 959 3R , +2778 961 5V , +2866 960 3L , +2916 961 6N , +3036 933 6T , +3096 960 3L , +3146 932 4M , +3202 959 3R , +3250 959 3J , +3354 960 3L , +3404 961 6N , +3462 960 3T , +3585 960 7H , +3618 961 7M , +3676 959 3R , +3786 960 2Z , +3841 959 3R , +3889 961 7M , +3947 960 3L , +3997 960 4S , +4054 961 5T , +4083 959 5Z , +4138 960 4D , +4198 961 6X , +4300 961 5T , +4329 961 5V , +4417 933 6T , +4477 961 7D , +4507 959 3R , +4554 961 5V , +4643 959 3R , +4691 961 6N , +4749 960 7H , +4781 959 3R , +4829 960 3T , +4952 961 5T , +4981 961 6N , +719 841 5R , +780 841 5T , +809 841 5V , +897 840 2Z , +953 839 5Z , +1015 829 45 85 /3D +$C +/mdGEmJh+ZpA_VhqgRGrrP*:*rnk3Ps)6ZcrP.asIc%X5^Mhm+hm`"MJ(s\q^Mj!W~> +, +1068 841 3F , +1129 840 6F , +1193 840 4U , +1279 839 51 73 /0F +$C +3eBr>]F[%gd07f:#T.^j2hW.!H>cOTn(ZCm^V@hHl`-t<Tk"Qfa?[n4i6aRf>U9\C$@u_DF[QV( +6o1X#^sjhA>1_C+gk"A^mf2\K?1uk'fO6iM/21^fM\)S6K*<aDJ,~> +, +1332 839 5Z , +1386 841 5V , +1474 839 3R , +1567 839 6L , +1611 839 5Z , +1666 841 5V , +1754 841 5V , +1843 839 5Z , +1897 841 6N , +1999 841 3F , +2060 839 6L , +2105 841 7D , +2177 839 6L , +2221 839 5Z , +2276 841 5V , +2364 841 5V , +2453 840 3L , +2503 841 6N , +2561 840 3T , +2622 839 3J , +2707 840 3L , +2757 841 6X , +2797 839 3R , +2890 841 7D , +2919 841 5T , +2948 839 3J , +2991 840 7H , +3023 839 3R , +3071 840 3T , +3177 840 3L , +3227 839 3J , +3314 840 6V , +3397 839 3R , +3445 841 7D , +3474 841 7D , +3511 840 4U , +3598 841 6Q , +3659 839 3R , +3707 840 3L , +3757 841 6X , +3842 841 5T , +3871 841 6N , +3974 841 5V , +4062 841 5T , +4091 841 6N , +4150 840 3T , +4255 840 7H , +4288 841 7M , +4346 840 3L , +4396 840 7H , +4474 839 3J , +4516 839 5Z , +4571 841 5V , +4659 839 3R , +4752 841 3F , +4813 840 6F , +4914 841 5K , +4972 840 4U , +4989 839 0V , +719 719 5Z , +774 693 6T , +834 720 7H , +866 721 5T , +895 719 5Z , +950 721 6N , +1008 719 3J , +1076 720 3L , +1126 721 6X , +1165 719 3R , +1238 720 4D , +1298 721 6N , +1356 719 3J , +1399 720 4D , +1459 693 6T , +1519 693 6T , +1579 719 5Z , +1634 721 6X , +1673 720 7H , +1706 719 3R , +1754 720 3T , +1815 706 0L , +1865 720 3L , +1915 719 3J , +1982 721 6N , +2041 719 5Z , +2095 720 7H , +2128 719 3R , +2176 720 3T , +2262 720 3L , +2312 720 2Z , +2367 719 5Z , +2422 720 4S , +2478 719 3R , +2534 720 4U , +cleartomark end end pagesave restore showpage +%%PageTrailer +%%Page: 10 10 +%%BeginPageSetup +GS_pswrite_2_0_1001 begin +612 792 /letter setpagesize +/pagesave save store 100 dict begin +0.1 0.1 scale +%%EndPageSetup +gsave mark +K +Q q +0 0 6120 7920 re +Y +2771 7462 32 7 /6A +$C +0H"*/rO`~> +, +K +2829 7440 43 69 /0Z +$C +-jHk!!TAb"J,fQKs8W-!s8W-!s8W-!s8U<pLX:JlKAhU%NZJ]A#D\(iJ,~> +, +2879 7438 47 71 /5M +$C ++p(%4KH3$?0=h9*Uu%T:h0h4h:&_W*^Uj:An%\m0?iC$)s8W-!s82i"otU8$qka8c?WR/k^SPda +V/7^e'!Y9_0VH6I~> +, +2954 7462 6A , +718 7078 56 62 /3Y +$C +,Ap0V:'Cb1Tg"9*%d8k,,W$'NTS%Y>qG#tA:$KCgqg/:sYQ+Y&m<\c`f%9dlBk<=V[[1h`_[1Jp +-.o@;>VNZrEW?(=s7sI<pOE~> +, +786 7078 46 45 /1Z +$C ++O4a+i.reS6.$'k_BN_8!X@j2h&tE;W_I/@C:^R_oWehD^WDC>HN)Lg[CpEoV/7fdL6]!.K*7m( +:t.1mJq*~> +, +846 7080 45 60 /3U +$C +2@YoEU`9@6s8W-!s8W-!s8W-!s8W-!s3/9>qu~> +, +906 7080 3U , +992 7062 22 91 /5O +$C +,DOO+ItH5Ds8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!hku6kfPBm~> +, +1024 7106 47 4 /5F +$C +/ddj:TE~> +, +1084 7078 52 62 /2N +$C ++rokY#W"`MK<U/9H6SI9Jd1>]"Q)ebODiWjSs/p#8cSY$^]4?6s0]W?Xo5C#XgD4-C[Eb.?%s!Y +(e]T6Yde+\@<)>Is8W'dK%Ji~> +, +1144 7080 45 62 /3W +$C +2@YoEU`9@6s8W-!s8W-!s8V[E,.I+BaFaHls6p~> +, +1204 7078 43 45 /3H +$C +--Bs+k9*%T&:G,"nKk6P"+"kk2m9\ds6X:'>#;Fq8V0QRcT29O5bS`qZp[t!6#*3fV#UJ^D6DID +fJ$MB6gQEDC((Zh~> +, +1256 7061 56 62 /4G +$C +3!q,3aUeFOs8W,sL(f.]^j&07KBS.Ncm,Lc$,2!#oUEfYVpfsAH@Pgis8W,r?GEo@[G>\?a(]_F +m=`,+Ph9rm$$Ii'Xr("?'E~> +, +1324 7080 3U , +1384 7078 48 45 /1G +$C +3k744+D-15#AAdpoL9e"#TK*e&7PNu60UU_rVuijpY5GpI>50sLP@d5A2Znl&'+_Ml`/:<Y\T>r +/6!H_C23s&~> +, +1436 7061 57 61 /6P +$C +1^ptq+W\=9g\1T\DsmM*laeE-h'_qgrTWY4])$<YS$/^Tl+6_/^72='lfl"W]"Y>NX/kOJ@=k"( +:Aq2C~> +, +1504 7078 47 45 /1X +$C ++PbNY":bub6JI/]+?BW7cp>6;dVhoQ]fg:0<qZHofDkmNmA9jMDd-Gsf%O0Q[[%b4@>(^9K!A.h +L(kIQ~> +, +1564 7080 48 60 /6D +$C +3#\:_Rc"/Fs8W-!s8W-!s8SZ":&Re)s8W)TmI%f]?&K12K-?0~> +, +1677 7079 71 49 /5E +$C +3Y;p"JV5%#*oYRCLeDb7]`umol+.>ugT,GQYA_/4DuK(tg[4b6qda`^mrgeipV$Om^A[rcpODpe +[r;/PrVq*!ZQ"C3hY6a#]D]3Ll!&#bO0.kghg8E7eW\EsRXb~> +, +1749 7079 27 72 /3Y +$C +1T2<V4lPiRgUL\cpjJ/%h>ata\,Wr9p\jjaid<iF$oP<-GDEgn2';iEpd*Bdn$m*~> +, +1777 7079 52 49 /0K +$C +4d;!Q$pDM^GDGXrjB)oa)r;P$pC7*#qqp<0\,6("HggF>&a',eqec;?s7ZHL[dNOtDjss[*O,M0 +gb@96f\#/epNUZOG]<0!2#~> +, +1833 7079 49 74 /4K +$C +3+QNlE;"q%\p(Z2D^*hS3-oKO4s+^PLZ,rDDEYW!rVpfjme=0iA9./6^A!'SrSQAernG3bDgUAj +hflPQf#%Zr_qTs!,"=f+s51Tgp]#]J2@Jl/JeFbC_gh~> +, +1883 7079 42 49 /0U +$C +-k[(P#>U(N%ZkTp\lYd+Id')2hu3<Ds7ZKihZ!QRmf.e*IJ_p0HFM^IV/9XqQ&:<iW%_$~> +, +1927 7079 5E , +1999 7062 26 91 /1D +$C +3#auA%M%t-s4@;Ns8W-!s8W-!s8W-!s8W-!s8W,Vs8K#4i,&,~> +, +1079 6958 82 71 /1B +$C +46guKZN-XOqT6Z[95/n-Y?m$)s8$(ql$Y5b9BgjXV>oe.0;\<U?XKZ%^6e0OoY-[?qHs5gde[<D +s3gaN9Bgo>^J!g>0A"h?I4qGnnbVqEfD8(e:1,l??r:9]~> +, +1162 6958 52 49 /5Z +$C +-,RJ#Jd4TY+S0[\0^1M^2l>gu<qXnToWS5,FoUmEs8W%)rjpk_Fh_cG[d)RJ9#F9R9#61SMQibj +PlW!~> +, +1217 6959 33 63 /4J +$C +22MSu?.7U@]^UPYFoVLAs8W-!s8W,u?o*0m2B4J$*'aK's6osmLPLB~> +, +1274 6960 28 69 /5T +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +1303 6960 88 47 /2X +$C +0Eoc'K:jmrq)D8+/;`aO>(?SPs8W-!s8W-!s8W-!s8W-!s8W-!ri?'Cm5<d*9l_ZL&>Ouf@AMUU +!4rFJ@)DUq/%!gM.m^-W@A]^a-57F:+CLi~> +, +1392 6932 56 75 /6T +$C +/d=P.LUCpts8W-!s8W*W++t[YiU7o"_nlWIR!K5#0_F9"If'$2n,<4bs7cQnYPu4PGO6ub73.&n +$mep_/@[=OG.U\h_[93uT^3@4(ao~> +, +1452 6960 28 72 /4F +$C +0EsY0/Z\pOs8W-!s8W-!s8W-!s8W-!s8W-!lS&`s4p`JB2)k~> +, +1481 6958 46 49 /6P +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +1529 6960 2X , +1617 6958 6P , +1665 6960 58 47 /3P +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qcY0ReuU^)_0-YK@^p/t4&U'%SJqnU0Mh~> +, +1723 6959 4J , +1756 6958 6P , +1804 6959 59 74 /6R +$C +,6PadBFG%9o].Bt<'f[3Jd*;_2s<!EI=:?D^Ak&0qZ$Tqs8DutIK/3^Iqs28[alB*$o"p%K#8Q` +"?mZ-1+_tqs8W-!s8?J%(]Hk@a^F0ZLO]~> +, +1873 6959 11 12 /4U +$X +*rnNUJ&)*Bs5<q8s5<q8s5<pmJ&!-+~> +, +718 6801 56 62 /3Y +$C +,Ap0V:'Cb1Tg"9*%d8k,,W$'NTS%Y>qG#tA:$KCgqg/:sYQ+Y&m<\c`f%9dlBk<=V[[1h`_[1Jp +-.o@;>VNZrEW?(=s7sI<pOE~> +, +786 6803 3W , +838 6803 56 43 /2V +$C +1Bn:Ro[EN6F_)fts8W-!s8W-!s8W-!s8W)srHDINZ.ep"nC!a.@>)."]2rE/0VA~> +, +906 6801 2N , +984 6802 5E , +1056 6802 27 72 /3Y +$C +1T2<V4lPiRgUL\cpjJ/%h>ata\,Wr9p\jjaid<iF$oP<-GDEgn2';iEpd*Bdn$m*~> +, +1084 6802 4K , +1126 6775 59 76 /0Y +$C +.DjA]Se*q+-la@!U7d,L:!sL9lJA/jrVs"uY?P^`[["5%X>U]qcqqVP(bh0kW%bWZ>1Kfkp?ulc +"G-kEd0[Y96+T@;VY&\_^9>$GJ+)h*s1\O#pI#f=qeL*(6sPH`;LmS\L7s;*$3~> +, +1184 6802 39 49 /3G +$C +-P?\G#>U(]%gY*b0_fOIDm8jU^E<LMqtJ03&f;3)_%rpQ*sNeq4(3osICltsmsBE;hfdlODf&U$ +@ARIgTr9Z<~> +, +1223 6802 32 65 /0M +$C +1HH$WHc+]/\(H'eG5-OaIJ<cUs7cEis*rqpq7t.c*ZGNGG:3q!huEH>p]%^IG^'~> +, +1280 6803 54 52 /4E +$C +:n^40$47>@JO0\T:kF?7+J==>'Hj(Q#S\DT"U#M^W%9JO@GpK3@D`QlE+-Wo(i[BI*&)?LL)_%L +_hK-biJ.kt%LsI<~> +, +1336 6802 3G , +1375 6802 49 49 /1K +$C +2%'[N%\3idSEM*PS)LqQp@\.VID>LSpV$=q^?tsV\,GcDhY4b_^Y+U\gYMb7hmV(DblQhPmqb2A +]2h^#:]~> +, +1425 6802 3G , +1464 6802 0K , +1519 6802 0M , +1553 6825 31 6 /2D +$C +0H#?:g]~> +, +1586 6802 3G , +1625 6802 1K , +1675 6802 3G , +1714 6802 0K , +1769 6802 0M , +1803 6825 2D , +1836 6802 17 12 /1G +$C +1HH&qqtJgP~> +, +1861 6802 1G , +1886 6802 1G , +1911 6825 2D , +1944 6802 3G , +1983 6802 1K , +2033 6802 3G , +2072 6802 0K , +2128 6802 0M , +2160 6803 54 52 /4G +$C +33_oAnF5r+K8(?_E5RDM0]@cq*&-?,$oh\3LC?.N_ZpX+%cF$I:kF?7+AdZC'Hj(Q";DuP"UGeb +T`k]M5sbp1_SKYh@6a~> +, +2241 6802 40 49 /0G +$C +-j^/!+R.k4$gs*1oGc8$K7#W86i[2dJ+rF1^O>"&otU4tpA99M[]mT"f\tene/0S~> +, +2282 6802 0U , +2326 6802 75 49 /1X +$C +4cl(.nk$p@#I`!/LOT!8pO2+,GOWNI[sf7_j*e]>rr)6!qu:TkmJjri[dO1-rqj=D&bZKkGJEiA +XH,SaDYri#pAMGe^"^!a\$sVa]tY'0H[b\^*Q&=gG/NZ_@?)9:pMenIGIrWc%NZMn%6s~> +, +2404 6802 1X , +2482 6802 42 49 /2A +$C +2\D;ZK>WI>pNUZOGoaF9^>@ac@H"[)GK71@^Y@SZ^$WSDq]hB`lsB\cqg[AXmI.gHh>d3+h7iis +h:pnp5diannAo!b(a/;~> +, +2526 6802 0K , +2582 6802 4K , +718 6681 56 62 /3Y +$C +,Ap0V:'Cb1Tg"9*%d8k,,W$'NTS%Y>qG#tA:$KCgqg/:sYQ+Y&m<\c`f%9dlBk<=V[[1h`_[1Jp +-.o@;>VNZrEW?(=s7sI<pOE~> +, +786 6683 3W , +838 6683 2V , +906 6681 2N , +984 6682 5E , +1056 6682 27 72 /1A +$C +1T2<V4lPiRgUL\cpjJ/%h>ata\,Wr9p\jjaid<iF$oP<-GDEgn2';iEpd*Bdn$m*~> +, +1084 6682 4K , +1126 6655 0Y , +1184 6682 3G , +1223 6682 0M , +1280 6683 4E , +1336 6682 3G , +1375 6682 1K , +1425 6682 3G , +1464 6682 0K , +1519 6682 0M , +1553 6705 2D , +1586 6682 3G , +1625 6682 1K , +1675 6682 3G , +1714 6682 0K , +1769 6682 0M , +1803 6705 2D , +1836 6682 1G , +1861 6682 1G , +1886 6682 1G , +1911 6705 2D , +1944 6682 3G , +1983 6682 1K , +2033 6682 3G , +2072 6682 0K , +2128 6682 0M , +2160 6683 4G , +2241 6684 56 50 /4I +$C +-4BkRs8W-!s8;@8J)nFqs8W-!s8W+L~> +, +2327 6682 0G , +2368 6682 0U , +2412 6682 1X , +2490 6682 1X , +2568 6682 2A , +2612 6682 0K , +2668 6682 4K , +1079 6563 60 69 /3F +$C +226&?X:j(Vs8W-!s8W-!s8W-!s8W-!s3*SAs8Vcls8W)e]ja4A~> +, +1140 6563 58 72 /7M +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qco"??GfF?_0Zp7?*;dfE5?Pos8W-!s7M]^ +s+AH!#Cl~> +, +1198 6561 6P , +1281 6562 51 73 /2Z +$C +5EglT+SH@k^#U$'FpL$[_nllJqgH5-rV-'chuE_+s8Vrqrg*Md?)<,t[I'gC0OD_A]3VSk$n_r) ++92B@s8W+%2$O#4bf,_b~> +, +1336 6563 5T , +1365 6563 3P , +1424 6562 6R , +1519 6561 42 49 /6L +$C +-,RJ0,D$.,dtC(&BFm314U.0';Uopg0D5AFqu:T"GOO;dD/K!tg22NP(b6GB_Li1('E~> +, +1563 6561 5Z , +1618 6563 2X , +1706 6563 2X , +1795 6562 48 48 /3L +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +1845 6563 3P , +1903 6562 6R , +1999 6563 5T , +2028 6561 40 49 /6H +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +2106 6535 6T , +2166 6561 6P , +2214 6563 38 47 /3Z +$C +0H#A^_V2d)s8W-!s8W-!hqnUF[?3rg<K18!0`S\NG9dORiPEE.~> +, +2253 6563 7M , +2312 6562 3L , +2362 6535 6T , +2422 6561 6H , +2500 6562 4J , +2533 6563 7M , +2591 6561 6P , +2675 6561 6L , +2719 6561 5Z , +2774 6563 2X , +2862 6563 2X , +2951 6562 3L , +3001 6563 3P , +3059 6562 6R , +3155 6562 4J , +3188 6563 7M , +3246 6562 3L , +3296 6562 4J , +3365 6562 6R , +3426 6563 5T , +3455 6563 35 73 /6Z +$C +0Esb+"P*PPs8W-!s8W-!s8V6a07FEB%#Z/ks8W,Vqtkj:[L0nZ`p\\%_LM~> +, +3488 6563 6Z , +3522 6561 6P , +3570 6563 3Z , +3609 6561 6H , +3687 6563 2X , +3775 6561 5Z , +3830 6561 6H , +3872 6562 4J , +3941 6563 6Z , +3974 6563 3Z , +4014 6561 5Z , +4068 6563 2X , +4193 6563 3F , +4254 6562 56 73 /3H +$C ++LJp$5kmV@ADpOa$L)XK9;U)$FLka1QV41'l#aLB/sf3GX^kL=qgH2riP+2XpA99P(k'-9mIh'p +IJ`R7s8W-!s8K>)a7J5P5dOC>~> +, +4346 6563 48 69 /0T +$C +21n\f@.;aLJ,fQKjhY/&h3M<(5D*m`rnmU$^\7]^mJjZphf&J-rqh34p\3GBDnj$Dq]5Y(]D+KN~> +, +4404 6562 4U , +4421 6561 5M , +4479 6562 4U , +4557 6563 33 69 /5G +$C +0H%XJ!UM?&s8W-!s8W-!s8W-!s8W-!s8W-!s)k!s!MdF~> +, +4591 6563 3P , +4685 6534 55 76 /7K +$C ++p6(UU(D9p_BI4g&2<;jh&tN#o\CkkFnFSgJ,d.Xs(u]/=CJ9h&r&_O@t^O*>/J*d6!EuahV:&- +aAQDs_@@-!5s.7@DNJb"HG82g\$+]hs53/>Bn"bZS_ZAA[]D/Z`.uhrTnOs!J,~> +, +4741 6561 6P , +4788 6563 3P , +4847 6561 6P , +4895 6563 3Z , +4934 6562 3L , +4984 6563 4F , +5013 6548 23 27 /5C +$C +0k&hmpMY93^MeSYh7p_lq5@]N~> +, +1079 6441 5Z , +1134 6443 3P , +1192 6443 4F , +1221 6415 55 74 /7F +$C +3%Y6hmI,4)4=>r&qn9amhgXIsrOVILFl0+]j?`gAhs!)u2d]ipr?hQFX8\<4pIY>3Is(D_lMA*j +\l\aa"r!=,"Tb7n~> +, +1314 6442 3L , +1401 6441 6H , +1443 6442 59 48 /4D +$C +,6G^d:()^rSt(K"WZ[OKKH'R@829B/hbX7Os8W-!s8W-!s8W-!s8K(pJ6^S3s7>3jJF\7`JS/"W +3,n?~> +, +1504 6442 2Z , +1559 6441 6H , +1601 6441 6P , +1649 6442 4J , +1718 6441 5Z , +1773 6443 6Z , +1843 6443 5T , +1872 6442 4J , +1905 6441 6H , +1984 6443 6Z , +2017 6442 4D , +2078 6443 3P , +2136 6441 6L , +2180 6442 4J , +2213 6443 5T , +2242 6441 5Z , +2296 6443 3P , +2355 6442 3L , +2405 6443 4F , +2434 6443 5T , +2463 6442 4J , +2495 6415 7F , +2587 6443 5T , +2616 6441 6H , +2694 6443 5T , +2723 6443 2X , +2811 6415 6T , +2871 6443 4F , +2901 6441 6P , +2948 6443 2X , +3037 6441 6P , +3085 6443 3P , +3143 6442 4J , +3175 6441 6P , +3223 6442 6R , +3292 6442 4U , +3345 6441 78 73 /0R +$C +,@H[r)o3*1<Y05+0Q?6.V[a8(LHu..-Kt^T-L!H]kr22IF`1>_e^_?U^A@/FfA$7RlMpnas8Uo) +YM8pQosObaCO3S[Xeg0KQI<4+2O1YN0U7A(:r.`[a?P@e6A#FG6+Ja%,Q~> +, +3424 6443 3P , +3482 6441 6P , +3566 6442 6R , +3627 6443 5T , +3656 6443 6Z , +3689 6443 6Z , +3723 6441 6P , +3771 6443 3Z , +3810 6441 6P , +3858 6443 3P , +3916 6441 6L , +3961 6441 6P , +4044 6443 5T , +4073 6441 6H , +4151 6442 4J , +4184 6443 7M , +4242 6442 3L , +4292 6442 4J , +4361 6442 5E , +4433 6442 1A , +4461 6442 4K , +4503 6415 0Y , +4561 6442 3G , +4600 6442 0M , +4677 6443 2X , +4765 6442 4D , +4826 6441 6H , +4868 6442 4J , +4936 6442 2Z , +4991 6441 6P , +1079 6322 4J , +1112 6323 7M , +1170 6321 6P , +1260 6323 3P , +1318 6322 3L , +1368 6323 2X , +1456 6321 6P , +1546 6321 5Z , +1601 6323 6Z , +1676 6322 3L , +1726 6323 3P , +1826 6321 6P , +1874 6323 51 47 /6C +$C +0HhbLCT6iu*o7X>[[4%/>?fXbXeft#>>!^U>GYf:I8\U0m^,;BmF&STVWhAmPBq,U8\.XIjoKYt +a@E.\>`fE~> +, +1925 6323 5T , +1955 6321 6H , +1997 6322 4J , +2030 6323 5T , +2059 6323 3P , +2117 6294 7K , +2215 6322 82 48 /6V +$C +--V`>h0uuM[/YPgrB9d@+!SJRhOje2e\;&ZVUk)5[%C.MH@FT)^[7iQJ+m9?>HRpIY?pm>YNtG4 +lW<i0='tEF]"Q[tSt*;=F&6Q9h].OYhu~> +, +2298 6323 5T , +2327 6322 6R , +2389 6294 7K , +2444 6321 6P , +2492 6322 4J , +2533 6322 4U , +2617 6323 3F , +2678 6323 7M , +2736 6321 6P , +2826 6323 3P , +2884 6321 5Z , +2939 6322 4J , +2971 6323 5T , +3000 6321 5Z , +3055 6323 3P , +3156 6321 5Z , +3211 6323 6Z , +3286 6322 3L , +3378 6322 6V , +3461 6323 5T , +3490 6322 6R , +3552 6294 7K , +3607 6321 6P , +3655 6322 4J , +3730 6321 6L , +3774 6323 4F , +3803 6322 3L , +3853 6321 6H , +3896 6321 6H , +3979 6323 5T , +4008 6321 6H , +4092 6321 6L , +4136 6321 5Z , +4191 6323 2X , +4279 6295 6T , +4339 6323 4F , +4368 6321 6P , +4416 6322 4J , +4449 6321 6P , +4497 6323 4F , +4526 6295 7F , +4624 6322 3L , +4674 6322 2Z , +4729 6321 6H , +4772 6321 6P , +4820 6323 3P , +4878 6322 4J , +4952 6323 5T , +4981 6323 3P , +1079 6203 60 69 /2T +$C +1BfGjiK1'#,=ctPrr<#qs8MRA)uos<s8W-!s8W-!s8W-!s8T[WEraVc~> +, +1140 6203 5T , +1169 6203 2X , +1257 6202 2Z , +1313 6201 5Z , +1375 6191 45 85 /6B +$C +/mdGEmJh+ZpA_VhqgRGrrP*:*rnk3Ps)6ZcrP.asIc%X5^Mhm+hm`"MJ(s\q^Mj!W~> +, +1428 6203 3F , +1489 6202 3H , +1553 6202 4U , +1624 6203 58 69 /2R +$C +2?s3(!F!QE)ak,7huE0FJ,A1(s88h1s8W,brYH[V+pd[fp](9nnc/Xh+F!kcs0)I>F;YW2LG/r4Du~> +, +1685 6202 55 47 /0B +$C +.aN80rp/h061h@qkr8H5rjSg"8c@(ef(At+5J$]0oUGf-2d]Y_\*g;!Eo<U`1]Mt~> +, +1742 6201 6P , +1789 6203 3P , +1848 6202 4J , +1910 6201 6H , +1952 6201 6P , +2000 6175 57 75 /5A +$C +,=.UUTKS!Ys8W-!s8W,i0IHuF$1o<*o_K^&&"nOq"<UE2o^ndPs%EClYQ+Y&qu?]`s1eG\mIpGH +fNSeECb:8CL,`^#>Hgm-#[d~> +, +2056 6202 4D , +2117 6201 6P , +2164 6203 3P , +2223 6201 6L , +2267 6201 6P , +2343 6201 6H , +2385 6175 6T , +2445 6201 6P , +2493 6201 6L , +2538 6203 5T , +2567 6203 6Z , +2600 6203 5T , +2629 6201 6L , +2674 6202 3L , +2724 6202 4J , +2756 6203 5T , +2785 6201 5Z , +2840 6203 3P , +2898 6201 6H , +2968 6202 3L , +3018 6203 3Z , +3058 6201 6P , +3134 6202 3L , +3184 6203 4F , +3213 6201 6H , +3255 6201 5Z , +3338 6203 2X , +3426 6201 5Z , +3481 6203 3Z , +3520 6201 6P , +3597 6203 3Z , +3637 6201 6P , +3684 6201 6H , +3727 6202 4J , +3759 6203 3Z , +3799 6203 5T , +3828 6201 6L , +3872 6202 4J , +3905 6201 6P , +3953 6202 6R , +4022 6202 4U , +4068 6203 77 70 /1H +$C +/d_ribJ29<O`89m(g$03D:`"Cqka1(IsocD[(gLij0e8bea:smqb-YKXh*hJBn"l\\+Hlk/,QKX +rg!GYIs#nSX6TPreb+?8~> +, +4174 6201 6H , +4216 6201 6P , +4264 6175 5A , +4320 6202 4D , +4381 6201 6P , +4428 6203 3P , +4487 6201 6L , +4531 6201 6P , +4606 6203 5T , +4635 6201 6H , +4705 6201 6P , +4753 6203 5T , +4782 6202 4J , +4815 6203 7M , +4873 6201 6P , +4921 6203 3Z , +4989 6202 3L , +1079 6081 6H , +1121 6083 5T , +1150 6083 3P , +1209 6054 7K , +1264 6083 4F , +1293 6081 6P , +1369 6081 6L , +1413 6083 7M , +1472 6082 3L , +1522 6083 3Z , +1561 6082 3L , +1611 6081 6L , +1655 6082 4J , +1688 6081 6P , +1736 6083 3Z , +1804 6062 31 93 /3B +$C +"KA5$<2ioaX%J_TkuZ=+f<21RX8]1"oY:G+s8W,ds8D]jp[@j)hqRkn]A*&HgV(4BmCQ0~> +, +1837 6083 3Z , +1877 6082 4D , +1937 6083 3P , +1995 6081 6P , +2043 6062 28 93 /6B +$C +3RbHUG4"&?]C+PE]C,RirpTT2^[Jr;^An65s3grIWrK*t='h6DF^7nJWD_7r<2jY:J,~> +, +2076 6068 5C , +2129 6083 2X , +2217 6081 6P , +2265 6082 3L , +2315 6083 3P , +2373 6083 5T , +2402 6083 3P , +2461 6054 7K , +2544 6082 3L , +2621 6083 59 56 /1K +$C +4rXcXPgf?4UI=:s?i'*SYHGY)J#3.29DpD!g073aCaGB,@4iD"_X&nlmIpDfLAQD5hf$!AI>?SE +pA99P)sfcDphV2Wo[horTE~> +, +2689 6081 1Z , +2741 6064 57 61 /6P +$C +1^ptq+W\=9g\1T\DsmM*laeE-h'_qgrTWY4])$<YS$/^Tl+6_/^72='lfl"W]"Y>NX/kOJ@=k"( +:Aq2C~> +, +2801 6083 52 56 /1M +$C +4rJJ@WR:bGs8W-!s,^*Z*ZcA+E;2B0HoKrlg[G/hs8W)3FnO@__H\D'.Ibo]YcJN~> +, +2869 6083 48 43 /6H +$C +0H-5NSR;Ess8W-!s8Tdkms/EWheWql2"95c2)l)`$#mk,\7%cB:]~> +, +2929 6081 1Z , +2989 6081 43 45 /3H +$C +--Bs+k9*%T&:G,"nKk6P"+"kk2m9\ds6X:'>#;Fq8V0QRcT29O5bS`qZp[t!6#*3fV#UJ^D6DID +fJ$MB6gQEDC((Zh~> +, +3049 6081 3H , +3130 6081 5Z , +3185 6083 6Z , +3246 6082 4J , +3279 6083 7M , +3337 6082 3L , +3387 6082 4J , +3448 6081 6L , +3492 6083 7M , +3551 6082 3L , +3601 6083 3Z , +3640 6082 3L , +3690 6081 6L , +3734 6082 4J , +3767 6081 46 49 /6P +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +3815 6083 3Z , +3854 6068 5C , +3908 6081 5Z , +3963 6083 3Z , +4031 6082 3L , +4109 6081 40 49 /3J +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +4151 6081 6P , +4199 6055 5A , +4255 6082 4D , +4316 6081 6P , +4363 6083 3P , +4422 6081 6L , +4466 6081 6P , +4542 6081 5Z , +4597 6083 6Z , +4659 6082 3G , +4698 6082 49 49 /4I +$C +2%'[N%\3idSEM*PS)LqQp@\.VID>LSpV$=q^?tsV\,GcDhY4b_^Y+U\gYMb7hmV(DblQhPmqb2A +]2h^#:]~> +, +4748 6082 3G , +4787 6082 0K , +4842 6082 0M , +4876 6082 36 49 /1C +$C +1D4L?KH;1$9KN@diA[Y2ID9uEhuE+/X_T6!k>9J-TkGn_K#hFi6B$NJfApN?s0pmoS[Go7(g(:V +(aq(7~> +, +4952 6083 5T , +4981 6083 3P , +1079 5962 3L , +1129 5963 3P , +1187 5934 7K , +1243 5963 4F , +1272 5961 6P , +1346 5962 2Z , +1401 5963 3Z , +1441 5962 3L , +1491 5961 6L , +1535 5962 56 73 /6F +$C ++LJp$5kmV@ADpOa$L)XK9;U)$FLka1QV41'l#aLB/sf3GX^kL=qgH2riP+2XpA99P(k'-9mIh'p +IJ`R7s8W-!s8K>)a7J5P5dOC>~> +, +1591 5961 6P , +1639 5962 4J , +1671 5961 3J , +1722 5962 4U , +1790 5963 58 69 /1O +$C +2@Q(1K@pO*U',[hrr:jSrr2r;qu?Q^s6m_u$/!#eO[T*8s6m`&\+qD$s0r%-s0^dl3C#*5~> +, +1851 5962 4I , +1901 5962 3G , +1940 5962 0K , +1996 5962 0M , +2029 5962 1C , +2102 5962 3L , +2152 5963 3Z , +2192 5961 6P , +2266 5961 3J , +2308 5961 6P , +2356 5935 6T , +2416 5962 3L , +2466 5963 3Z , +2506 5962 3L , +2556 5962 4J , +2588 5961 6P , +2636 5962 6R , +2724 5962 2Z , +2779 5935 7F , +2861 5962 2Z , +2916 5963 4F , +2945 5962 3L , +2995 5963 3P , +3054 5962 6F , +3109 5961 3J , +3177 5961 5Z , +3232 5963 3Z , +3298 5963 2X , +3386 5963 5T , +3415 5963 3P , +3474 5962 4D , +3534 5961 3J , +3601 5961 3J , +3643 5963 5T , +3672 5934 7K , +3728 5963 3P , +3786 5961 3J , +3837 5962 4U , +3903 5961 51 73 /0F +$C +3eBr>]F[%gd07f:#T.^j2hW.!H>cOTn(ZCm^V@hHl`-t<Tk"Qfa?[n4i6aRf>U9\C$@u_DF[QV( +6o1X#^sjhA>1_C+gk"A^mf2\K?1uk'fO6iM/21^fM\)S6K*<aDJ,~> +, +3956 5961 6P , +4003 5961 6P , +4077 5962 44 74 /1U +$C +-l*@R6-s^?pio*<2r!`a^>HQ3rnd+Wn%ZR7^YdlArpKdbqu,Bf&at2;g\1AMqgG^#@BRYYCd/HJ +>T2X@s7_$;n,E?gpb00C,h+@d%f~> +, +4123 5962 1A , +4151 5962 0K , +4207 5962 4K , +4265 5942 3B , +4298 5961 46 71 /1N +$C +-fG0#Ee,@L_[[W?*OoP4[gh*J]6C`rmea`sk-8e0L-H"6K5R;WU(9306,*[[Bg"L`o_t2lfDkm& +n+H?ls%;26g>+9-L6]!.K*bYY@7(ApM#~> +, +4348 5942 6B , +4407 5963 6Z , +4440 5961 5Z , +4494 5963 3Z , +4559 5962 3L , +4634 5961 6L , +4678 5961 5Z , +4733 5963 2X , +4821 5935 6T , +4881 5963 4F , +4910 5961 6P , +4958 5962 4J , +4991 5961 6P , +1079 5842 6R , +1140 5843 5T , +1169 5841 3J , +1212 5841 6L , +1256 5842 4D , +1316 5841 3J , +1359 5841 3J , +1401 5843 5T , +1430 5841 5Z , +1485 5843 3P , +1551 5842 4U , +718 5684 3Y , +786 5686 3W , +838 5686 2V , +906 5684 2N , +958 5684 52 58 /1V +$C ++Dt22n;'$mK;'!rU-/Uq+pCM##-'`as8W-!s8W-!s8P8$eb5lLs8W-!qLA~> +, +1026 5684 48 45 /4E +$C +3k744+D-15#AAdpoL9e"#TK*e&7PNu60UU_rVuijpY5GpI>50sLP@d5A2Znl&'+_Ml`/:<Y\T>r +/6!H_C23s&~> +, +1086 5667 50 62 /3L +$C +,QSa(*Ou4e)i(n?qnDP!s33hh+FG=,:SK,l5_4^;62F=JK7,(0FIu?9:]Jjms8W-![D2[BrN6%# +Zrm3>FrL(k?%WGSF&jf"@>.Nd$i~> +, +1146 5684 3H , +1224 5685 5E , +1296 5685 1A , +1324 5685 0K , +1380 5685 4K , +1430 5685 0U , +1474 5685 5E , +1579 5668 5O , +1604 5685 0M , +1637 5685 2A , +1674 5658 0Y , +1732 5685 26 74 /3U +$C +4QnmjiU7:$_r8<HGAE95s7ZKehtR$Is*rpUqsXQ5s6]jcn,M;>qlJ-\n8,!:*&m~> +, +1759 5685 1A , +1787 5685 1C , +1826 5685 0M , +1859 5668 1D , +1079 5564 1B , +1162 5564 5Z , +1217 5565 4J , +1274 5566 5T , +1303 5566 2X , +1392 5538 6T , +1452 5566 4F , +1481 5564 6P , +1529 5566 2X , +1617 5564 6P , +1665 5566 3P , +1723 5565 4J , +1756 5564 6P , +1804 5565 6R , +1873 5565 4U , +718 5407 3Y , +778 5407 56 44 /3P +$C +,i""TKGgGEK="%NoE_*ncnOSP#WMH?#HR+dp](9ns8W-!s8W-!s8W-!s6%7`i:[+oJ,~> +, +838 5407 1V , +898 5407 1V , +966 5407 47 45 /4V +$C ++PbNY":bub6JI/]+?BW7cp>6;dVhoQ]fg:0<qZHofDkmNmA9jMDd-Gsf%O0Q[[%b4@>(^9K!A.h +L(kIQ~> +, +1018 5409 2V , +1104 5382 47 75 /7I +$C +-Dt8Gs1eHGs4dSNn,IiEG_<oj6hkg9@GqFfID:2cGPAQEp\/n+^V@JVDu9G"n*e()rtbAR4b((m +hei>RrP&"!*o>_We1l[r]+khM%h@.-_a)]~> +, +1154 5408 2A , +1198 5408 0M , +1232 5408 48 74 /3Q +$C +09hbl>TVA,5COXAaL:g$L\BU9fR*)%mr/6_pAa#sg])`WYXF!8pAMGWIdR.5[sbaQpL4$8D;Pad +Z1kbV^CS6OeZo/QhuC=g^\qf]O!k."KnI5"~> +, +1282 5408 0K , +1337 5408 2A , +1382 5408 1X , +1459 5408 3G , +1531 5391 5O , +1556 5408 0U , +1600 5382 7I , +1650 5408 0M , +1684 5408 1A , +1711 5408 0U , +1756 5408 0K , +1811 5408 1C , +1875 5408 1G , +1900 5408 1G , +1925 5408 1G , +1950 5391 1D , +1079 5289 1H , +1157 5287 3J , +1224 5289 5T , +1253 5289 58 47 /3P +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qcY0ReuU^)_0-YK@^p/t4&U'%SJqnU0Mh~> +, +1336 5289 3F , +1398 5288 6F , +1478 5289 0T , +1536 5288 4U , +1553 5287 5M , +1628 5268 3B , +1662 5288 2Z , +1717 5288 4D , +1777 5288 4J , +1835 5289 3P , +1893 5287 5Z , +1948 5288 4J , +1980 5287 6P , +2053 5288 6R , +2114 5289 5T , +2143 5289 6Z , +2177 5289 6Z , +2210 5287 6P , +2258 5289 3Z , +2297 5287 6P , +2345 5289 3P , +2403 5287 6L , +2448 5287 6P , +2521 5289 5T , +2550 5289 3P , +2633 5288 4D , +2693 5289 3P , +2752 5289 5T , +2781 5288 4J , +2813 5287 3J , +2881 5289 6Z , +2914 5287 5Z , +2969 5289 3Z , +3039 5315 5F , +3091 5289 57 60 /5V +$C +1Bn>>`B3dnFC`;hs8W-!s8W-!s8W-!s8W)sqd%e)/9[@sHYIX?9<hd*(gJc)s8W-!r:jIm^]~> +, +3159 5287 1Z , +3219 5289 3W , +3279 5270 3L , +3331 5289 5V , +3391 5287 1V , +3477 5288 48 48 /3L +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +3527 5289 3P , +3585 5288 6R , +3678 5315 5F , +3730 5289 59 42 /3O +$C +.En\QohYJ]jr\`Q9RhBgrn!t<huDF/ldtg:S+$CWBlou^n*MdCl9;T4J,c[8hqsLnFh[nRi%@<M +4o<_~> +, +3798 5289 3W , +3858 5287 2N , +3910 5287 1V , +3970 5289 5V , +4031 5268 6B , +4072 5288 4U , +726 5130 47 45 /2L +$C ++WT&@_B@Xm#7-+#k_lB]&2ulZkm$>udX4)MBPXeWJ,fQ'r/,hrrqlRsCN%j0CLMq$@1c#I'uLE6 +'2W(k~> +, +786 5130 4E , +838 5132 2V , +898 5132 59 42 /4Z +$C +-3a&@>IqP[\#uk!pK,sIp!p`u]g'*B]!niOVlf4`<qY"VFhKqV]\mHa#(<CEo`~> +, +966 5130 4E , +1026 5130 3H , +1104 5105 7I , +1154 5131 2A , +1198 5131 0M , +1232 5131 3Q , +1282 5131 0K , +1337 5131 2A , +1382 5131 1X , +1459 5131 3G , +1531 5114 5O , +1556 5131 0U , +1600 5105 7I , +1650 5131 0M , +1684 5131 1A , +1711 5131 0U , +1756 5131 0K , +1811 5131 1C , +1875 5131 1G , +1900 5131 1G , +1925 5131 1G , +1950 5114 1D , +1079 5012 3F , +1140 5012 7M , +1198 5010 6P , +1271 5012 59 69 /1O +$C +0H%XJ!UM?&s8W-!s8W-!s78N96ntkUT_tep`#I[Lhf$!Ys)7o6s53kVli3g\QX1<'9+2Gd.UX,J +Z5ZsI~> +, +1332 5010 5Z , +1386 5010 3J , +1429 5011 4J , +1461 5010 3J , +1504 5010 6L , +1548 5012 3Z , +1588 5012 5T , +1617 4984 6T , +1677 5011 4J , +1734 5010 3J , +1777 5011 4D , +1837 5011 2Z , +1892 5010 6L , +1937 5010 5Z , +1991 5012 2X , +2080 5012 2X , +2168 5011 3L , +2218 5012 3P , +2276 5011 6R , +2362 5012 5T , +2391 5010 3J , +2459 5012 3P , +2517 5010 5Z , +2572 5011 4J , +2629 5012 5T , +2658 5012 2X , +2747 4984 6T , +2807 5012 4F , +2836 5010 6P , +2884 5012 2X , +2972 5010 6P , +3020 5012 3P , +3078 5011 4J , +3111 5010 6P , +3159 5011 6R , +3228 5011 4U , +726 4853 2L , +778 4855 5V , +846 4853 1Z , +906 4853 2L , +966 4855 48 60 /3M +$C +,D@S_MVl*@fa*!YQV41'l#aLB/sf5-db7nuBjmiqb8kc<I>?S9^>Ek<fR:IQmIpF)L'3#)Y!;sd +s8V/_0-YK@^p/t4&U'%SJqnU0Mh~> +, +1215 4735 5T , +1244 4735 2X , +1332 4707 6T , +1392 4735 4F , +1422 4733 6P , +1469 4735 2X , +1558 4733 6P , +1606 4735 3P , +1664 4734 4J , +1696 4733 6P , +1744 4734 6R , +1983 4733 5Z , +2038 4707 6T , +2098 4734 4J , +2130 4735 5T , +2159 4733 5Z , +2214 4735 3P , +2272 4733 3J , +2323 4734 11 47 /4O +$X +*WSETJ&)*Bs5<q8s5<q8s58CB5CagUzzzzzzzzzzz!!")@5Ce7!s5<q8s5<q8s5<pmJ&":!*WQ~> +, +2525 4761 5F , +2585 4735 3W , +2637 4735 2V , +2705 4733 2N , +2765 4735 3W , +2825 4733 2L , +2885 4733 4E , +2937 4733 1V , +3005 4733 4V , +3065 4735 6H , +3125 4733 4V , +3177 4735 2V , +3238 4720 5C , +3449 4761 5F , +3509 4733 4V , +3569 4735 6D , +3629 4735 6D , +3681 4735 4Z , +3749 4733 4E , +3809 4735 45 60 /0W +$C +2@YoEU`9@6s8W-!s8W-!s8W-!s8W-!s3/9>qu~> +, +3861 4733 56 44 /6N +$C +,i""TKGgGEK="%NoE_*ncnOSP#WMH?#HR+dp](9ns8W-!s8W-!s8W-!s6%7`i:[+oJ,~> +, +3929 4733 1Z , +3982 4720 5C , +4193 4761 5F , +4253 4733 4V , +4305 4735 2V , +4365 4735 4Z , +4433 4733 4E , +4493 4735 0W , +4545 4733 6N , +4613 4733 1Z , +4666 4720 5C , +4870 4734 3L , +4920 4735 3P , +4978 4734 6R , +1086 4641 5F , +1146 4613 3H , +1206 4613 1Z , +1266 4615 0W , +1326 4613 1Z , +1386 4613 2L , +1438 4613 1V , +1506 4615 3W , +1558 4615 61 43 /0S +$C +2AdhJ:_A3Oo1(F=qu?]rs8W-!s8W-!s8W-!s8W-!s8W-!pO;Seqb;8cG?JF`D.WiQ<gR9_Y1)/_ +(f=s(~> +, +1626 4613 4E , +1686 4596 50 62 /6J +$C +,QSa(*Ou4e)i(n?qnDP!s33hh+FG=,:SK,l5_4^;62F=JK7,(0FIu?9:]Jjms8W-![D2[BrN6%# +Zrm3>FrL(k?%WGSF&jf"@>.Nd$i~> +, +1746 4613 1Z , +1807 4614 4U , +1874 4615 3F , +1935 4615 7M , +1993 4613 6P , +2073 4615 6D , +2133 4615 0W , +2193 4613 4E , +2253 4613 3H , +2305 4615 5V , +2391 4613 3J , +2433 4614 4D , +2494 4614 2Z , +2549 4613 6L , +2593 4613 5Z , +2648 4615 2X , +2736 4615 2X , +2825 4614 3L , +2875 4615 3P , +2933 4614 6R , +3019 4615 5T , +3048 4613 3J , +3115 4615 3P , +3174 4613 5Z , +3228 4614 4J , +3286 4615 5T , +3315 4615 2X , +3403 4587 6T , +3463 4615 4F , +3492 4613 6P , +3540 4615 2X , +3629 4613 6P , +3676 4615 3P , +3735 4614 4J , +3767 4613 6P , +3815 4614 6R , +3884 4614 4U , +726 4456 2L , +786 4458 0W , +846 4458 3W , +898 4439 56 62 /1I +$C +3!q,3aUeFOs8W,sL(f.]^j&07KBS.Ncm,Lc$,2!#oUEfYVpfsAH@Pgis8W,r?GEo@[G>\?a(]_F +m=`,+Ph9rm$$Ii'Xr("?'E~> +, +958 4456 3Y , +1026 4456 4V , +1086 4456 4E , +1146 4458 6H , +1206 4456 2N , +1284 4457 0U , +1328 4431 7I , +1378 4457 3G , +1417 4457 39 49 /1T +$C +4lg/As8.<CJ,A^3J+)9E#`n#MM#Y3gp>9c^g[0SkC>l<:a)?;/]o.,Yh8?k7G7=c~> +, +1456 4457 2A , +1501 4457 0M , +1534 4457 1A , +1562 4457 0U , +1606 4457 0K , +1079 4336 1B , +1162 4336 5Z , +1217 4337 4J , +1274 4338 5T , +1303 4338 2X , +1392 4310 6T , +1452 4338 4F , +1481 4336 6P , +1529 4338 2X , +1617 4336 6P , +1665 4338 3P , +1723 4337 4J , +1756 4336 6P , +1804 4337 6R , +1873 4337 4U , +719 4154 7I , +769 4180 2A , +813 4180 0M , +847 4180 3Q , +897 4180 0K , +952 4180 2A , +997 4180 1X , +1074 4180 3G , +1180 4179 2L , +1240 4179 4V , +1292 4181 2V , +1360 4181 6D , +1420 4181 3W , +1480 4162 6J , +1532 4179 6N , +1600 4181 6H , +1660 4179 1Z , +1796 4169 22 72 /6H +$C +4:D0?O8o7[s8W-!s8W-!s8W-!s8W-!s8W-!a=_9'~> +, +1858 4180 0U , +1902 4154 7I , +1952 4180 0M , +1986 4180 1A , +2013 4180 0U , +2058 4180 0K , +2138 4180 1G , +2163 4180 1G , +2188 4180 1G , +2228 4169 18 72 /1S +$C +/dqZ#J,fQKs8W-!s8W-!s8W-!QNdB~> +, +1079 4059 68 73 /2D +$C +,(YRQ!t[`UJ\hm/%0QnAJHaj2#G?]gJe(-OdL@`W<Mc^%Q_j@^YNtl]s8W&srVl9Qqdd,6hf$9D +hf$!ACLO,LKn^Eq0OV-+A+7Db0N'/"jJ4%~> +, +1150 4059 5Z , +1204 4061 3P , +1263 4061 6Z , +1296 4061 5T , +1325 4032 7K , +1381 4060 4D , +1441 4061 3Z , +1480 4059 6P , +1570 4059 5Z , +1625 4033 6T , +1685 4060 4J , +1717 4061 5T , +1746 4059 5Z , +1801 4061 3P , +1859 4059 3J , +1943 4061 6Z , +1976 4059 5Z , +2031 4061 3Z , +2113 4060 6V , +2196 4061 5T , +2225 4060 6R , +2287 4032 7K , +2342 4059 6P , +2390 4060 4J , +2465 4034 7I , +2515 4060 2A , +2559 4060 0M , +2593 4060 3Q , +2643 4060 0K , +2698 4060 2A , +2743 4060 1X , +2820 4060 3G , +2875 4060 4U , +2959 4060 99 71 /5H +$C +.L_Q,IJnZ-WrI:o^Aa`(d1CVQj?`fImFP^Y3r\CDh-45lJ)@]DqWceK^AhPWHM%&_rNH(_g:.+2 +fBn(Te[kFWhf%=nfBq1l>OV6rrjSd!rI8.TD>No)m^2rkIqn;aYJ&E[:4dNE@E:^es&cf7%DV~> +, +3059 4061 5T , +3088 4060 6R , +3149 4032 7K , +3205 4059 6P , +3253 4060 4J , +3285 4083 6A , +3319 4059 3J , +3361 4033 6T , +3421 4059 6P , +3469 4059 6L , +3513 4061 5T , +3542 4061 6Z , +3576 4061 5T , +3605 4059 6L , +3649 4046 23 61 /1M +$C +0k&hmpMY93^MeSYh=p[<GW$"$s8V\cKH39Qs(g>C'E~> +, +3715 4059 3J , +3757 4059 6P , +3805 4059 6P , +3895 4060 4J , +3928 4061 7M , +3986 4059 6P , +4076 4061 2X , +4164 4060 3L , +4214 4061 3P , +4272 4060 4D , +4333 4060 3L , +4383 4061 4F , +4453 4059 6P , +4501 4061 3P , +4559 4060 4J , +4592 4061 3Z , +4631 4033 7F , +4730 4061 6Z , +4763 4059 5Z , +4818 4061 3Z , +4900 4060 4J , +4933 4061 7M , +4991 4059 6P , +1079 3940 6V , +1162 3941 5T , +1191 3940 6R , +1253 3912 7K , +1308 3939 6P , +1356 3940 4J , +1414 3941 5T , +1443 3941 3P , +1526 3939 3J , +1568 3939 6P , +1616 3939 6L , +1661 3940 4J , +1693 3941 5T , +1722 3939 5Z , +1777 3941 3P , +1860 3939 1N , +1935 3939 5Z , +1990 3941 6Z , +2048 3940 72 70 /1P +$C +,%^^slb?6lGn>CBqKh"i\,AI.:L!gi\,&i!:"T=js/,,]PCKEWrR-2Ho`")>l["&&TCol^\mK?h +]!q+.9f[18+Mkhf~> +, +2120 3939 5Z , +2175 3941 4F , +2204 3940 4D , +2264 3941 2X , +2353 3939 6P , +2425 3941 0Z , +2483 3940 4U , +726 3782 2N , +786 3782 1Z , +846 3782 3H , +898 3782 1V , +966 3784 48 43 /3J +$C +0H-5NSR;Ess8W-!s8Tdkms/EWheWql2"95c2)l)`$#mk,\7%cB:]~> +, +1026 3782 4V , +1078 3765 57 61 /6P +$C +1^ptq+W\=9g\1T\DsmM*laeE-h'_qgrTWY4])$<YS$/^Tl+6_/^72='lfl"W]"Y>NX/kOJ@=k"( +:Aq2C~> +, +1172 3766 5O , +1197 3783 5E , +1269 3783 1A , +1297 3783 0K , +1353 3783 4K , +1403 3783 0U , +1447 3783 5E , +1544 3783 1G , +1569 3783 1G , +1594 3783 1G , +1619 3766 1D , +1079 3664 1H , +1157 3662 40 49 /3J +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +1229 3664 5T , +1258 3664 3P , +1346 3664 3F , +1407 3663 6F , +1493 3664 0T , +1551 3663 4U , +1568 3662 5M , +1618 3649 5C , +1673 3663 2Z , +1728 3663 4D , +1789 3663 4J , +1851 3664 3P , +1909 3662 5Z , +1964 3663 4J , +1996 3662 46 49 /6P +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +2075 3663 4J , +2108 3664 7M , +2166 3663 3L , +2216 3663 4J , +2279 3709 24 26 /5W +$C +4RdSWJ)B.-pUBV'g\1)S_dTJ~> +, +2314 3662 2N , +2374 3662 1Z , +2434 3662 3H , +2486 3662 1V , +2554 3664 48 43 /6H +$C +0H-5NSR;Ess8W-!s8Tdkms/EWheWql2"95c2)l)`$#mk,\7%cB:]~> +, +2614 3662 4V , +2666 3645 57 61 /3R +$C +1^ptq+W\=9g\1T\DsmM*laeE-h'_qgrTWY4])$<YS$/^Tl+6_/^72='lfl"W]"Y>NX/kOJ@=k"( +:Aq2C~> +, +2815 3662 15 14 /4I +$X +"2GHB5Q!bFJ,XrsJ,XrsJ,XrsJ,V\1+8>rR~> +, +2852 3709 24 26 /5E +$C +4`80npM\gBpUfn^qtp@3,7GK@~> +, +2910 3664 5T , +2939 3662 3J , +3011 3664 3Z , +3051 3663 3L , +3101 3664 3Z , +3140 3662 6P , +3188 3664 4F , +3217 3636 7F , +3305 3664 3P , +3363 3662 6P , +3411 3662 6P , +3459 3663 6R , +3520 3662 6P , +3568 3663 6R , +3660 3663 2Z , +3715 3662 6P , +3763 3662 6L , +3808 3663 3L , +3858 3663 4D , +3918 3662 3J , +3960 3662 6P , +4038 3663 4J , +4071 3662 5Z , +4125 3636 6T , +4217 3664 4F , +4246 3662 6P , +4294 3663 0B , +4350 3662 6P , +4398 3664 4F , +4459 3663 6V , +4542 3664 5T , +4571 3664 3P , +4630 3663 6R , +4691 3662 5Z , +4745 3663 6V , +4829 3662 3J , +4901 3663 3L , +4951 3664 3Z , +4991 3662 6P , +1079 3543 3L , +1129 3543 4D , +1189 3543 4J , +1222 3542 5Z , +1276 3544 2X , +1365 3543 3L , +1415 3543 4J , +1447 3544 5T , +1476 3542 6L , +1521 3543 3L , +1571 3544 4F , +1600 3544 4F , +1629 3516 7F , +1717 3543 6R , +1778 3542 6P , +1826 3542 3J , +1868 3543 4J , +1901 3544 3Z , +1940 3542 5Z , +1995 3516 7F , +2051 3542 6P , +2099 3543 6R , +2193 3543 2Z , +2248 3516 7F , +2336 3543 4J , +2369 3544 7M , +2427 3542 6P , +2507 3544 5G , +2541 3544 3P , +2599 3544 6Z , +2632 3542 6P , +2680 3544 3Z , +2720 3544 3P , +2778 3542 5Z , +2865 3515 7K , +2921 3543 3L , +2971 3544 3Z , +3010 3543 2Z , +3065 3543 3L , +3115 3515 7K , +3171 3542 6P , +3252 3542 6L , +3296 3542 5Z , +3351 3544 4F , +3380 3544 4F , +3409 3542 6P , +3457 3542 6L , +3501 3543 4J , +3534 3542 5Z , +3589 3544 3Z , +3661 3544 5T , +3690 3544 2X , +3778 3544 2X , +3867 3542 6P , +3915 3543 6R , +3976 3544 5T , +4005 3543 3L , +4055 3543 4J , +4087 3542 6P , +4135 3544 4F , +4164 3516 7F , +4252 3543 6V , +4335 3544 7M , +4394 3542 6P , +4441 3544 3P , +4530 3543 4J , +4563 3544 7M , +4621 3542 6P , +4700 3544 4F , +4729 3543 3L , +4779 3542 3J , +4821 3543 4J , +4885 3544 3Z , +4925 3542 6P , +4972 3544 6Z , +5006 3566 6A , +1079 3422 6P , +1127 3424 3Z , +1166 3422 6P , +1214 3424 3P , +1272 3422 6L , +1317 3422 6P , +1390 3423 0B , +1446 3423 3L , +1496 3424 3P , +1554 3424 5T , +1584 3422 3J , +1626 3424 7M , +1684 3422 6P , +1732 3422 3J , +1782 3423 4U , +726 3265 1Z , +778 3267 2V , +838 3265 1V , +906 3267 6H , +958 3248 3R , +1044 3240 7I , +1094 3266 2A , +1138 3266 0M , +1172 3266 3Q , +1222 3266 0K , +1277 3266 2A , +1322 3266 1X , +1399 3266 3G , +1471 3249 5O , +1496 3266 0U , +1540 3240 7I , +1590 3266 0M , +1624 3266 1A , +1651 3266 0U , +1696 3266 0K , +1751 3266 1C , +1815 3266 1G , +1840 3266 1G , +1865 3266 1G , +1890 3249 1D , +1079 3147 3F , +1140 3147 7M , +1198 3145 6P , +1294 3145 3H , +1354 3145 2L , +1414 3145 4E , +1466 3147 2V , +1568 3145 3J , +1610 3146 4D , +1671 3146 2Z , +1726 3145 6L , +1770 3145 5Z , +1825 3147 2X , +1913 3147 2X , +2002 3146 3L , +2052 3147 3P , +2110 3146 6R , +2210 3147 5T , +2239 3145 3J , +2322 3147 3P , +2380 3145 5Z , +2435 3146 4J , +2509 3147 5T , +2538 3147 2X , +2626 3119 6T , +2686 3147 4F , +2716 3145 6P , +2763 3147 2X , +2852 3145 6P , +2900 3147 3P , +2958 3146 4J , +2990 3145 6P , +3038 3146 6R , +3107 3146 4U , +3165 3145 0F , +3218 3145 5Z , +3272 3147 2X , +3360 3145 6P , +3450 3146 6F , +3506 3145 6P , +3553 3119 7F , +3651 3146 2Z , +3706 3147 5T , +3735 3147 3P , +3794 3146 6R , +3855 3147 5T , +3884 3147 3P , +3942 3118 7K , +3998 3145 3J , +4081 3146 3L , +4131 3147 3Z , +4171 3145 6P , +4261 3147 3P , +4319 3145 5Z , +4374 3146 4J , +4449 3147 5T , +4478 3147 2X , +4566 3119 6T , +4626 3147 4F , +4656 3145 6P , +4703 3147 2X , +4792 3145 6P , +4840 3147 3P , +4898 3146 4J , +4930 3145 6P , +4978 3146 6R , +1079 3026 6V , +1162 3027 7M , +1221 3025 6P , +1268 3027 3P , +1357 3026 4J , +1390 3027 7M , +1448 3025 6P , +1496 3027 3Z , +1535 3025 6P , +1615 3027 5T , +1644 3025 3J , +1717 3025 6L , +1761 3026 4D , +1822 3027 3Z , +1861 3027 3Z , +1901 3025 6P , +1949 3027 3P , +2007 3026 4J , +2039 3027 4F , +2068 2999 7F , +2156 3027 3P , +2214 3025 5Z , +2300 3026 6V , +2383 3026 3L , +2433 2999 7F , +2520 3026 4J , +2553 3025 5Z , +2639 3026 4J , +2672 2999 7F , +2727 2999 6T , +2787 3025 6P , +2867 3026 4J , +2900 3027 7M , +2958 3025 5Z , +3012 3025 3J , +3055 3025 6P , +3134 3026 6F , +3190 3025 6P , +3237 2999 7F , +3293 3025 3J , +3367 3026 4J , +3400 3025 5Z , +3486 3027 5G , +3520 3027 3P , +3578 3027 6Z , +3611 3025 6P , +3659 3027 3Z , +3699 3027 3P , +3757 3025 5Z , +3843 3006 3B , +3876 3027 6Z , +3910 3025 5Z , +3964 3027 3Z , +4035 3025 6P , +4083 3027 6C , +4134 3026 3L , +4184 3027 2X , +4273 2999 6T , +4333 3027 4F , +4362 3025 6P , +4410 3012 5C , +4465 3027 57 56 /4O +$C +1BIj_76C4CF_)fts8W-!s8W-!s8W-!ru_7m-ia5Hs8W-!s8W-!s5`+K+;`kc[D2~> +, +4533 3025 4V , +4585 3027 0S , +4653 3025 1Z , +4706 3006 6B , +4747 3026 4U , +4820 3025 1B , +4903 3025 5Z , +4958 3026 4J , +4990 3025 6P , +1079 2906 6R , +1140 2907 5T , +1169 2907 6Z , +1202 2907 6Z , +1236 2905 6P , +1284 2907 3Z , +1323 2905 6P , +1371 2907 3P , +1429 2905 6L , +1474 2905 6P , +1547 2907 5T , +1576 2907 3P , +1659 2906 4D , +1719 2907 3P , +1777 2907 5T , +1806 2906 4J , +1839 2905 3J , +1906 2907 6Z , +1940 2905 5Z , +1994 2907 3Z , +2065 2933 5F , +2117 2907 5V , +2185 2905 1Z , +2245 2907 3W , +2305 2888 6J , +2357 2907 5V , +2417 2905 1V , +2503 2906 3L , +2553 2907 3P , +2611 2906 6R , +2704 2933 5F , +2756 2907 3O , +2824 2907 3W , +2884 2905 2N , +2936 2905 1V , +2996 2907 5V , +3065 2906 4U , +726 2748 1Z , +778 2750 4Z , +846 2748 1Z , +898 2750 2V , +958 2748 1V , +1044 2749 0U , +1088 2723 7I , +1138 2749 3G , +1177 2749 1T , +1216 2749 2A , +1261 2749 0M , +1294 2749 1A , +1322 2749 0U , +1366 2749 0K , +1079 2628 1B , +1162 2628 5Z , +1217 2629 4J , +1300 2630 5T , +1329 2630 2X , +1417 2602 6T , +1477 2630 4F , +1507 2628 6P , +1554 2630 2X , +1643 2628 6P , +1691 2630 3P , +1749 2629 4J , +1781 2628 6P , +1829 2629 6R , +1898 2629 11 47 /1Q +$X +*WSETJ&)*Bs5<q8s5<q8s58CB5CagUzzzzzzzzzzz!!")@5Ce7!s5<q8s5<q8s5<pmJ&":!*WQ~> +, +1965 2630 3P , +2023 2628 5Z , +2078 2630 3Z , +2117 2630 2X , +2206 2629 3L , +2256 2630 4F , +2285 2630 4F , +2314 2602 7F , +2420 2630 3Z , +2460 2628 6P , +2507 2602 6T , +2567 2630 4F , +2597 2629 3L , +2647 2628 6L , +2691 2628 6P , +2739 2629 6R , +2850 2629 2Z , +2905 2602 7F , +3011 2630 3F , +3072 2629 6F , +3186 2628 3H , +3246 2628 1Z , +3298 2630 2V , +3366 2628 2N , +3470 2628 5Z , +3525 2630 3Z , +3616 2630 2T , +3677 2630 5T , +3706 2630 2X , +3794 2629 2Z , +3850 2628 5Z , +3955 2628 6L , +3999 2630 7M , +4058 2629 3L , +4108 2630 3P , +4166 2630 3P , +4224 2628 6P , +4272 2630 4F , +4351 2628 3J , +4393 2628 6P , +4441 2630 3P , +4499 2629 6R , +4611 2628 5Z , +4666 2602 6T , +4726 2628 6P , +4774 2630 3Z , +4813 2629 3L , +4863 2629 4J , +4896 2630 5T , +4925 2628 5Z , +4979 2630 3P , +1079 2509 6V , +1162 2510 5T , +1191 2509 4J , +1224 2510 7M , +1282 2510 5T , +1311 2510 3P , +1395 2509 4J , +1427 2510 7M , +1485 2508 6P , +1558 2509 3L , +1608 2482 6T , +1668 2482 6T , +1728 2510 4F , +1758 2510 5T , +1787 2508 6L , +1831 2509 3L , +1881 2509 4J , +1914 2510 5T , +1943 2508 5Z , +1997 2510 3P , +2064 2509 4U , +726 2353 6D , +786 2351 4V , +846 2351 2L , +898 2351 6N , +966 2351 3H , +1044 2352 71 49 /0N +$C +3Y;p"JV5%#*oYRCLeDb7]`umol+.>ugT,GQYA_/4DuK(tg[4b6qda`^mrgeipV$Om^A[rcpODpe +[r;/PrVq*!ZQ"C3hY6a#]D]3Ll!&#bO0.kghg8E7eW\EsRXb~> +, +1116 2352 1A , +1144 2352 0K , +1200 2352 4K , +1250 2352 0U , +1294 2352 0N , +1079 2233 3F , +1140 2233 7M , +1198 2231 6P , +1287 2233 6Z , +1320 2231 5Z , +1375 2231 6L , +1419 2232 4D , +1480 2231 3J , +1562 2233 2X , +1650 2231 5Z , +1705 2232 6R , +1766 2231 6P , +1814 2233 4F , +1884 2233 5T , +1913 2233 3P , +2012 2233 5G , +2046 2233 3P , +2104 2233 6Z , +2137 2231 6P , +2185 2233 3Z , +2225 2233 3P , +2283 2231 5Z , +2379 2233 5T , +2408 2231 3J , +2491 2232 6R , +2552 2233 5T , +2581 2233 6Z , +2614 2233 6Z , +2648 2231 6P , +2696 2233 3Z , +2735 2231 6P , +2783 2233 3P , +2841 2232 4J , +2882 2232 4U , +2940 2231 0R , +3019 2233 3P , +3077 2233 4F , +3106 2205 7F , +3203 2231 5Z , +3258 2233 3P , +3316 2231 6P , +3405 2232 6V , +3488 2233 5T , +3517 2232 6R , +3579 2204 7K , +3634 2231 6P , +3682 2232 4J , +3756 2233 7M , +3814 2232 3L , +3864 2231 3J , +3947 2232 4J , +3980 2233 7M , +4038 2231 6P , +4127 2232 6F , +4183 2231 6P , +4230 2205 7F , +4286 2232 2Z , +4341 2231 5Z , +4396 2232 3L , +4446 2233 3Z , +4485 2232 6R , +4589 2233 6Z , +4622 2231 5Z , +4677 2231 6L , +4721 2232 4D , +4782 2231 3J , +4864 2232 3L , +4914 2232 4J , +4989 2232 3L , +1079 2084 7K , +1135 2113 5T , +1164 2112 0B , +1220 2111 6P , +1268 2113 3P , +1358 2112 4J , +1391 2113 5T , +1420 2113 2X , +1508 2111 6P , +1564 2112 4U , +1612 2113 2T , +1673 2113 5T , +1702 2113 2X , +1790 2112 2Z , +1846 2111 5Z , +1908 2101 45 85 /3D +$C +/mdGEmJh+ZpA_VhqgRGrrP*:*rnk3Ps)6ZcrP.asIc%X5^Mhm+hm`"MJ(s\q^Mj!W~> +, +1961 2113 3F , +2022 2112 6F , +2109 2112 6R , +2170 2111 5Z , +2225 2111 6P , +2273 2111 3J , +2346 2113 3P , +2404 2111 5Z , +2459 2112 4J , +2523 2113 2X , +2611 2112 3L , +2661 2113 5T , +2690 2113 3P , +2749 2112 4J , +2781 2112 3L , +2831 2113 5T , +2860 2113 3P , +2949 2112 3L , +3030 2085 6T , +3090 2113 3Z , +3130 2113 5T , +3159 2112 0B , +3215 2112 3L , +3265 2112 4J , +3298 2111 6P , +3378 2112 6F , +3434 2111 6P , +3481 2085 7F , +3537 2112 2Z , +3592 2111 5Z , +3647 2112 3L , +3697 2113 3Z , +3736 2112 6R , +3829 2113 6Z , +3862 2111 5Z , +3917 2111 6L , +3961 2112 4D , +4022 2111 3J , +4093 2113 6Z , +4126 2111 5Z , +4181 2113 3Z , +4251 2111 6P , +4299 2112 3L , +4349 2111 6L , +4393 2113 7M , +4481 2112 4J , +4514 2111 5Z , +4568 2085 6T , +4628 2113 4F , +4657 2111 6P , +4705 2112 0B , +4762 2111 6P , +4810 2113 4F , +4870 2112 4J , +4903 2113 3Z , +4942 2111 6P , +4990 2111 6P , +1079 1992 3L , +1129 1993 3P , +1187 1992 6R , +1283 1992 3L , +1333 1992 4D , +1393 1992 4J , +1426 1991 5Z , +1480 1993 2X , +1569 1992 3L , +1619 1992 4J , +1651 1993 5T , +1680 1991 6L , +1725 1992 3L , +1775 1993 4F , +1804 1993 4F , +1833 1965 7F , +1924 1993 2X , +2012 1991 5Z , +2067 1992 0B , +2123 1991 6P , +2207 1992 4J , +2240 1993 7M , +2298 1991 6P , +2381 1993 6Z , +2414 1991 5Z , +2469 1991 6L , +2513 1992 4D , +2574 1991 3J , +2650 1992 4J , +2683 1993 7M , +2741 1991 6P , +2789 1993 3Z , +2828 1991 6P , +2912 1992 6V , +2995 1993 7M , +3054 1991 6P , +3101 1993 3P , +3160 1991 6P , +3208 1992 0B , +3264 1991 6P , +3312 1993 3Z , +3387 1992 4J , +3420 1993 7M , +3478 1991 6P , +3562 1992 4J , +3595 1993 3Z , +3634 1991 6P , +3682 1991 6P , +3767 1993 5T , +3796 1991 3J , +3874 1991 6P , +3922 1993 3P , +3980 1992 4J , +4013 1991 6P , +4061 1993 3Z , +4100 1991 6P , +4148 1992 6R , +4217 1992 4U , +4271 1972 3B , +4304 1991 2D , +4375 1992 3L , +4425 1993 3P , +4483 1992 0B , +4540 1992 3L , +4590 1991 3J , +4668 1992 3L , +4718 1993 3P , +4776 1992 6R , +4873 1992 4J , +4906 1991 6P , +4953 1993 6C , +5005 1992 4J , +1079 1872 6V , +1162 1873 5T , +1191 1872 6R , +1253 1844 7K , +1308 1871 6P , +1356 1872 4J , +1389 1871 3J , +1431 1858 5C , +1493 1873 7M , +1551 1871 5Z , +1606 1872 6V , +1689 1871 6P , +1737 1872 0B , +1794 1871 6P , +1841 1873 3Z , +1881 1858 5C , +1944 1872 6R , +2005 1871 5Z , +2097 1873 2X , +2185 1872 3L , +2235 1873 5T , +2264 1873 3P , +2323 1872 4J , +2355 1872 3L , +2405 1873 5T , +2434 1873 3P , +2529 1872 3L , +2615 1845 6T , +2675 1873 3Z , +2715 1873 5T , +2744 1872 0B , +2800 1872 3L , +2850 1872 4J , +2883 1871 6P , +2968 1872 6F , +3024 1871 6P , +3071 1845 7F , +3127 1872 2Z , +3182 1871 5Z , +3237 1872 3L , +3287 1873 3Z , +3326 1872 6R , +3425 1873 6Z , +3458 1871 5Z , +3513 1871 6L , +3557 1872 4D , +3618 1871 3J , +3668 1872 4U , +3685 1852 6B , +3778 1873 3F , +3839 1873 7M , +3897 1871 6P , +3981 1873 2T , +4042 1873 5T , +4071 1873 2X , +4159 1872 2Z , +4215 1871 5Z , +4277 1861 3D , +4330 1873 3F , +4391 1872 6F , +4490 1873 6D , +4550 1871 4V , +4610 1871 2L , +4662 1871 6N , +4730 1871 3H , +4819 1871 6L , +4863 1871 5Z , +4918 1873 2X , +5006 1895 6A , +1079 1753 2X , +1167 1752 3L , +1217 1753 3P , +1275 1752 6R , +1371 1753 2X , +1459 1751 5Z , +1514 1752 0B , +1570 1751 6P , +1618 1751 3J , +1696 1752 4J , +1729 1753 7M , +1787 1751 6P , +1870 1752 6F , +1926 1751 6P , +1973 1725 7F , +2029 1752 2Z , +2084 1751 5Z , +2139 1752 3L , +2189 1753 3Z , +2228 1752 6R , +2326 1753 6Z , +2359 1751 5Z , +2414 1751 6L , +2458 1752 4D , +2519 1751 3J , +2595 1752 4J , +2628 1751 5Z , +2718 1752 4J , +2751 1753 7M , +2809 1751 6P , +2892 1724 7K , +2948 1753 5T , +2977 1752 0B , +3033 1751 6P , +3081 1753 3P , +3176 1752 0N , +3248 1752 1A , +3276 1752 0K , +3332 1752 4K , +3382 1752 0U , +3426 1752 0N , +3514 1752 4U , +3592 1753 58 69 /1Z +$C +1CW&nPtW/Om"HQF"*Y4Dhf$!Yn*e$+p]&#.s8U]R^Zfn*E0glO(bphK/;$Er=V-/u9Gi.9_[j62 +pY5^ds7cQnrI=g5?BmkH8e@u+<Plgml2~> +, +3653 1725 7F , +3745 1752 6R , +3806 1751 6P , +3854 1753 6Z , +3887 1752 3L , +3937 1752 4D , +3998 1753 4F , +4027 1752 4J , +4059 1738 5C , +4120 1752 4J , +4153 1753 7M , +4211 1751 6P , +4295 1753 6Z , +4328 1753 5T , +4357 1753 3Z , +4397 1751 3J , +4439 1752 4J , +4508 1725 6T , +4568 1753 3Z , +4608 1751 6P , +4655 1751 3J , +4698 1751 3J , +4776 1751 5Z , +4831 1753 6Z , +4900 1752 4J , +4933 1753 7M , +4991 1751 6P , +1079 1605 6T , +1139 1633 3Z , +1179 1633 5T , +1208 1633 2X , +1296 1632 3L , +1346 1633 3Z , +1385 1605 7F , +1474 1632 2Z , +1529 1632 4D , +1590 1632 4J , +1622 1632 4J , +1655 1631 5Z , +1709 1633 3P , +1800 1633 5T , +1829 1633 3P , +1919 1632 3L , +1969 1633 3P , +2066 1631 46 45 /1Z +$C ++O4a+i.reS6.$'k_BN_8!X@j2h&tE;W_I/@C:^R_oWehD^WDC>HN)Lg[CpEoV/7fdL6]!.K*7m( +:t.1mJq*~> +, +2118 1633 2V , +2178 1631 1V , +2246 1633 6H , +2298 1614 3R , +2359 1618 5C , +2423 1633 0W , +2483 1633 3W , +2543 1631 3H , +2595 1631 1V , +2655 1631 3Y , +2723 1631 4V , +2775 1633 57 42 /3R +$C +1Bn>>`AIOjTZI4d[["5%V/7_s>>!UMd^GFJTsPQAXefkb'l)8[FQeq":"!pCFIT)^-L!H\\kUUj +PB<:G+cQNO:A(N8~> +, +2868 1631 5Z , +2923 1633 3Z , +2993 1631 1V , +3061 1631 1Z , +3113 1633 3R , +3173 1631 1V , +3265 1632 6V , +3348 1633 5T , +3377 1632 6R , +3439 1604 7K , +3494 1631 6P , +3542 1632 4J , +3606 1631 6L , +3650 1632 3L , +3700 1632 4D , +3761 1631 3J , +3803 1631 6P , +3851 1631 3J , +3923 1632 4J , +3956 1633 7M , +4014 1631 6P , +4093 1633 6Z , +4126 1631 5Z , +4181 1631 6L , +4225 1632 4D , +4286 1631 3J , +4358 1632 4J , +4391 1631 5Z , +4477 1632 2Z , +4532 1631 6P , +4611 1633 2X , +4699 1631 5Z , +4754 1632 0B , +4810 1631 6P , +4858 1632 6R , +4951 1632 4J , +4984 1631 5Z , +1079 1512 4J , +1112 1513 7M , +1170 1512 3L , +1220 1512 4J , +1286 1512 6V , +1369 1513 5T , +1398 1512 6R , +1460 1484 7K , +1515 1511 6P , +1563 1512 4J , +1604 1512 4U , +1654 1493 32 89 /1S +$C +0>[sLLV<.0SdDp9pM]O!s7cQns8W-!s8W-!s8W-!s8W-!s8W-!rh"i`^h3?~> +, +1687 1512 4D , +1748 1511 3J , +1790 1512 4J , +1855 1511 6P , +1903 1513 3P , +1961 1512 4J , +1994 1511 6P , +2042 1513 3Z , +2081 1513 5T , +2110 1513 3P , +2168 1484 7K , +2258 1512 3L , +2341 1513 2X , +2429 1511 6P , +2477 1513 3P , +2535 1512 4D , +2628 1512 6V , +2711 1513 5T , +2740 1512 6R , +2802 1484 7K , +2857 1511 6P , +2905 1512 4J , +2971 1484 7K , +3027 1513 5T , +3056 1512 0B , +3112 1511 6P , +3160 1511 3J , +3236 1513 5T , +3265 1512 4J , +3331 1512 4J , +3364 1513 7M , +3422 1511 6P , +3503 1513 6Z , +3536 1511 5Z , +3591 1511 6L , +3635 1512 4D , +3696 1511 3J , +3746 1512 4U , +3820 1513 3F , +3881 1513 7M , +3939 1511 6P , +4027 1539 5F , +4087 1511 2N , +4147 1513 3W , +4207 1511 3H , +4259 1494 1I , +4327 1513 0W , +4387 1511 4E , +4439 1494 57 61 /6P +$C +1^ptq+W\=9g\1T\DsmM*laeE-h'_qgrTWY4])$<YS$/^Tl+6_/^72='lfl"W]"Y>NX/kOJ@=k"( +:Aq2C~> +, +4507 1511 4V , +4567 1513 6D , +4620 1498 5C , +4686 1539 5F , +4746 1513 6D , +4806 1511 4V , +4866 1513 6H , +4926 1511 2L , +4986 1511 1Z , +1079 1392 3L , +1129 1393 3P , +1187 1392 6R , +1280 1419 5F , +1340 1393 0W , +1400 1391 4E , +1460 1391 3H , +1512 1391 1V , +1580 1393 6D , +1640 1391 4V , +1700 1393 6H , +1778 1391 5Z , +1833 1365 6T , +1893 1392 4J , +1925 1393 5T , +1954 1391 5Z , +2009 1393 3P , +2067 1391 3J , +2135 1392 3L , +2185 1393 3Z , +2224 1391 46 49 /3R +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +2297 1393 3P , +2355 1391 5Z , +2410 1392 4J , +2467 1393 5T , +2496 1393 2X , +2585 1365 6T , +2645 1393 4F , +2674 1391 3R , +2722 1393 2X , +2810 1391 3R , +2858 1393 3P , +2916 1392 4J , +2949 1391 3R , +2997 1392 6R , +3066 1392 4U , +726 1236 6D , +786 1236 6H , +846 1234 4E , +898 1236 0S , +966 1234 1Z , +1044 1209 7I , +1094 1235 2A , +1138 1235 0M , +1172 1235 3Q , +1222 1235 0K , +1277 1235 2A , +1322 1235 1X , +1399 1235 3G , +1471 1218 5O , +1496 1235 0U , +1540 1209 7I , +1590 1235 0M , +1624 1235 1A , +1651 1235 0U , +1696 1235 0K , +1751 1235 1C , +1815 1235 1G , +1840 1235 1G , +1865 1235 1G , +1890 1218 1D , +1079 1114 4A , +1157 1116 3P , +1215 1116 5T , +1244 1116 2X , +1332 1088 6T , +1392 1116 4F , +1422 1114 3R , +1469 1116 2X , +1558 1114 3R , +1606 1116 3P , +1664 1115 4J , +1696 1114 3R , +1744 1115 6R , +1830 1114 5Z , +1885 1088 6T , +1945 1115 4J , +1978 1116 5T , +2007 1114 5Z , +2061 1116 3P , +2120 1114 3J , +2170 1115 1Q , +2219 1114 2L , +2279 1116 0W , +2339 1114 4E , +2399 1114 3H , +2459 1114 3H , +2512 1101 5C , +2569 1114 2L , +2629 1114 4V , +2689 1116 0W , +2749 1114 4V , +2809 1116 6H , +2861 1116 0S , +2929 1114 4E , +2981 1097 1I , +3042 1101 5C , +3092 1115 3L , +3142 1116 3P , +3200 1115 6R , +3285 1116 4Z , +3353 1116 3W , +3413 1114 3H , +3465 1114 6N , +3533 1114 4E , +3593 1116 0W , +3654 1115 4U , +726 940 6J , +786 959 6H , +846 957 4E , +898 957 3Y , +984 958 0N , +1056 958 1A , +1084 958 0K , +1140 958 4K , +1190 958 0U , +1234 958 0N , +726 820 6J , +786 839 6H , +846 837 4E , +898 837 3Y , +984 838 0U , +1028 812 7I , +1078 838 0M , +1112 838 1A , +1139 838 0U , +1184 838 0K , +1272 821 5O , +1297 838 2A , +1341 838 1T , +1372 811 0Y , +1455 838 1G , +1480 838 1G , +1505 838 1G , +1530 821 1D , +1079 719 2T , +1140 719 5T , +1169 719 2X , +1257 718 2Z , +1313 717 5Z , +1375 707 3D , +1428 719 3F , +1489 718 6F , +1577 719 5T , +1606 719 2X , +1694 691 6T , +1754 719 4F , +1784 717 3R , +1831 719 2X , +1920 717 3R , +1968 719 3P , +2026 718 4J , +2058 717 3J , +2133 717 5Z , +2188 719 3P , +2246 719 4F , +2275 691 7F , +2364 690 7K , +2420 719 4F , +2449 717 5Z , +2503 718 2Z , +2559 718 3L , +2609 719 4F , +2671 690 7K , +2727 719 3Z , +2766 718 3L , +2816 718 2Z , +2871 717 3J , +2914 704 5C , +2972 717 3J , +3014 717 5Z , +3102 718 4J , +3135 719 7M , +3193 717 3R , +3281 745 5F , +3341 700 6J , +3401 719 0W , +3461 717 4V , +3513 717 3Y , +3581 717 4E , +3641 719 0W , +3727 717 5Z , +3782 691 6T , +3842 718 4J , +3874 719 5T , +3903 717 5Z , +3958 719 3P , +4050 719 5T , +4079 717 3J , +4154 719 3P , +4212 717 5Z , +4267 718 4J , +4333 719 3Z , +4373 717 3R , +4420 717 6L , +4465 717 5Z , +4519 690 7K , +4575 719 3P , +4633 719 5T , +4662 717 3J , +4705 717 3R , +4753 718 6R , +4822 718 4U , +4872 719 3F , +4933 719 7M , +4991 717 3R , +cleartomark end end pagesave restore showpage +%%PageTrailer +%%Page: 11 11 +%%BeginPageSetup +GS_pswrite_2_0_1001 begin +612 792 /letter setpagesize +/pagesave save store 100 dict begin +0.1 0.1 scale +%%EndPageSetup +gsave mark +K +Q q +0 0 6120 7920 re +Y +2771 7462 32 7 /6A +$C +0H"*/rO`~> +, +K +2829 7440 43 69 /0Z +$C +-jHk!!TAb"J,fQKs8W-!s8W-!s8W-!s8U<pLX:JlKAhU%NZJ]A#D\(iJ,~> +, +2879 7440 0Z , +2954 7462 6A , +1086 7061 50 62 /3L +$C +,QSa(*Ou4e)i(n?qnDP!s33hh+FG=,:SK,l5_4^;62F=JK7,(0FIu?9:]Jjms8W-![D2[BrN6%# +Zrm3>FrL(k?%WGSF&jf"@>.Nd$i~> +, +1146 7080 48 43 /6H +$C +0H-5NSR;Ess8W-!s8Tdkms/EWheWql2"95c2)l)`$#mk,\7%cB:]~> +, +1206 7078 48 45 /1G +$C +3k744+D-15#AAdpoL9e"#TK*e&7PNu60UU_rVuijpY5GpI>50sLP@d5A2Znl&'+_Ml`/:<Y\T>r +/6!H_C23s&~> +, +1258 7078 56 62 /3Y +$C +,Ap0V:'Cb1Tg"9*%d8k,,W$'NTS%Y>qG#tA:$KCgqg/:sYQ+Y&m<\c`f%9dlBk<=V[[1h`_[1Jp +-.o@;>VNZrEW?(=s7sI<pOE~> +, +1390 7078 47 45 /2L +$C ++WT&@_B@Xm#7-+#k_lB]&2ulZkm$>udX4)MBPXeWJ,fQ'r/,hrrqlRsCN%j0CLMq$@1c#I'uLE6 +'2W(k~> +, +1442 7078 56 44 /6N +$C +,i""TKGgGEK="%NoE_*ncnOSP#WMH?#HR+dp](9ns8W-!s8W-!s8W-!s6%7`i:[+oJ,~> +, +1510 7080 6H , +1570 7080 6H , +1630 7078 46 45 /1Z +$C ++O4a+i.reS6.$'k_BN_8!X@j2h&tE;W_I/@C:^R_oWehD^WDC>HN)Lg[CpEoV/7fdL6]!.K*7m( +:t.1mJq*~> +, +1682 7080 56 43 /5T +$C +1Bn:Ro[EN6F_)fts8W-!s8W-!s8W-!s8W)srHDINZ.ep"nC!a.@>)."]2rE/0VA~> +, +1742 7078 52 58 /1V +$C ++Dt22n;'$mK;'!rU-/Uq+pCM##-'`as8W-!s8W-!s8P8$eb5lLs8W-!qLA~> +, +1832 7078 42 49 /6L +$C +-,RJ0,D$.,dtC(&BFm314U.0';Uopg0D5AFqu:T"GOO;dD/K!tg22NP(b6GB_Li1('E~> +, +1876 7078 52 49 /3B +$C +-,RJ#Jd4TY+S0[\0^1M^2l>gu<qXnToWS5,FoUmEs8W%)rjpk_Fh_cG[d)RJ9#F9R9#61SMQibj +PlW!~> +, +1931 7080 88 47 /5V +$C +0Eoc'K:jmrq)D8+/;`aO>(?SPs8W-!s8W-!s8W-!s8W-!s8W-!ri?'Cm5<d*9l_ZL&>Ouf@AMUU +!4rFJ@)DUq/%!gM.m^-W@A]^a-57F:+CLi~> +, +2019 7080 5V , +2108 7079 48 48 /3L +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +2158 7080 58 47 /6N +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qcY0ReuU^)_0-YK@^p/t4&U'%SJqnU0Mh~> +, +2216 7079 59 74 /3T +$C +,6PadBFG%9o].Bt<'f[3Jd*;_2s<!EI=:?D^Ak&0qZ$Tqs8DutIK/3^Iqs28[alB*$o"p%K#8Q` +"?mZ-1+_tqs8W-!s8?J%(]Hk@a^F0ZLO]~> +, +2305 7080 28 69 /5T +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +2334 7078 40 49 /3J +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +2405 7080 6N , +2463 7078 3B , +2518 7079 33 63 /7H +$C +22MSu?.7U@]^UPYFoVLAs8W-!s8W,u?o*0m2B4J$*'aK's6osmLPLB~> +, +2580 7080 5T , +2609 7080 5V , +2697 7052 56 75 /3V +$C +/d=P.LUCpts8W-!s8W*W++t[YiU7o"_nlWIR!K5#0_F9"If'$2n,<4bs7cQnYPu4PGO6ub73.&n +$mep_/@[=OG.U\h_[93uT^3@4(ao~> +, +2757 7080 28 72 /7D +$C +0EsY0/Z\pOs8W-!s8W-!s8W-!s8W-!s8W-!lS&`s4p`JB2)k~> +, +2787 7078 46 49 /3R +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +2834 7080 5V , +2923 7078 3R , +2971 7080 6N , +3029 7079 7H , +3061 7078 3R , +3109 7079 3T , +3178 7079 11 12 /0D +$X +*rnNUJ&)*Bs5<q8s5<q8s5<pmJ&!-+~> +, +3224 7080 60 69 /3F +$C +226&?X:j(Vs8W-!s8W-!s8W-!s8W-!s3*SAs8Vcls8W)e]ja4A~> +, +3285 7080 58 72 /7M +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qco"??GfF?_0Zp7?*;dfE5?Pos8W-!s7M]^ +s+AH!#Cl~> +, +3343 7078 3R , +3427 7061 50 62 /3L +$C +,QSa(*Ou4e)i(n?qnDP!s33hh+FG=,:SK,l5_4^;62F=JK7,(0FIu?9:]Jjms8W-![D2[BrN6%# +Zrm3>FrL(k?%WGSF&jf"@>.Nd$i~> +, +3487 7080 6H , +3547 7078 1G , +3599 7078 3Y , +3689 7078 6L , +3733 7078 3B , +3788 7080 5V , +3876 7080 5V , +3965 7079 48 48 /6J +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +4015 7080 6N , +4073 7079 3T , +4162 7080 5T , +4191 7078 3J , +4262 7080 6N , +4320 7078 3B , +4375 7079 7H , +4437 7080 38 47 /3Z +$C +0H#A^_V2d)s8W-!s8W-!hqnUF[?3rg<K18!0`S\NG9dORiPEE.~> +, +4477 7078 3R , +4524 7078 6L , +4569 7078 3B , +4623 7051 55 76 /7K +$C ++p6(UU(D9p_BI4g&2<;jh&tN#o\CkkFnFSgJ,d.Xs(u]/=CJ9h&r&_O@t^O*>/J*d6!EuahV:&- +aAQDs_@@-!5s.7@DNJb"HG82g\$+]hs53/>Bn"bZS_ZAA[]D/Z`.uhrTnOs!J,~> +, +4679 7080 6N , +4737 7080 5T , +4766 7078 3J , +4809 7078 3R , +4857 7079 3T , +4947 7079 6J , +4997 7078 3J , +1079 6959 6J , +1154 6958 3J , +1196 6932 55 74 /4H +$C +3%Y6hmI,4)4=>r&qn9amhgXIsrOVILFl0+]j?`gAhs!)u2d]ipr?hQFX8\<4pIY>3Is(D_lMA*j +\l\aa"r!=,"Tb7n~> +, +1252 6960 6N , +1310 6958 3B , +1365 6960 6N , +1423 6932 4H , +1479 6960 5V , +1592 6960 35 73 /6Z +$C +0Esb+"P*PPs8W-!s8W-!s8V6a07FEB%#Z/ks8W,Vqtkj:[L0nZ`p\\%_LM~> +, +1625 6958 3B , +1680 6960 3Z , +1752 6941 3L , +1812 6960 6H , +1872 6958 1G , +1924 6958 3Y , +2052 6958 43 45 /3H +$C +--Bs+k9*%T&:G,"nKk6P"+"kk2m9\ds6X:'>#;Fq8V0QRcT29O5bS`qZp[t!6#*3fV#UJ^D6DID +fJ$MB6gQEDC((Zh~> +, +2112 6958 1Z , +2164 6958 1V , +2233 6959 0D , +726 6784 3L , +786 6803 6H , +846 6803 45 62 /3W +$C +2@YoEU`9@6s8W-!s8W-!s8V[E,.I+BaFaHls6p~> +, +906 6801 52 62 /2N +$C ++rokY#W"`MK<U/9H6SI9Jd1>]"Q)ebODiWjSs/p#8cSY$^]4?6s0]W?Xo5C#XgD4-C[Eb.?%s!Y +(e]T6Yde+\@<)>Is8W'dK%Ji~> +, +984 6802 42 49 /3S +$C +-k[(P#>U(N%ZkTp\lYd+Id')2hu3<Ds7ZKihZ!QRmf.e*IJ_p0HFM^IV/9XqQ&:<iW%_$~> +, +1028 6776 47 75 /7I +$C +-Dt8Gs1eHGs4dSNn,IiEG_<oj6hkg9@GqFfID:2cGPAQEp\/n+^V@JVDu9G"n*e()rtbAR4b((m +hei>RrP&"!*o>_We1l[r]+khM%h@.-_a)]~> +, +1078 6802 39 49 /3G +$C +-P?\G#>U(]%gY*b0_fOIDm8jU^E<LMqtJ03&f;3)_%rpQ*sNeq4(3osICltsmsBE;hfdlODf&U$ +@ARIgTr9Z<~> +, +1117 6802 39 49 /6K +$C +4lg/As8.<CJ,A^3J+)9E#`n#MM#Y3gp>9c^g[0SkC>l<:a)?;/]o.,Yh8?k7G7=c~> +, +1156 6802 42 49 /4Y +$C +2\D;ZK>WI>pNUZOGoaF9^>@ac@H"[)GK71@^Y@SZ^$WSDq]hB`lsB\cqg[AXmI.gHh>d3+h7iis +h:pnp5diannAo!b(a/;~> +, +1201 6802 32 65 /0M +$C +1HH$WHc+]/\(H'eG5-OaIJ<cUs7cEis*rqpq7t.c*ZGNGG:3q!huEH>p]%^IG^'~> +, +1234 6802 27 72 /3Y +$C +1T2<V4lPiRgUL\cpjJ/%h>ata\,Wr9p\jjaid<iF$oP<-GDEgn2';iEpd*Bdn$m*~> +, +1262 6802 3S , +1306 6802 52 49 /0K +$C +4d;!Q$pDM^GDGXrjB)oa)r;P$pC7*#qqp<0\,6("HggF>&a',eqec;?s7ZHL[dNOtDjss[*O,M0 +gb@96f\#/epNUZOG]<0!2#~> +, +1394 6785 22 91 /0X +$C +,DOO+ItH5Ds8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!hku6kfPBm~> +, +1419 6802 4Y , +1463 6802 6K , +1494 6775 59 76 /0Y +$C +.DjA]Se*q+-la@!U7d,L:!sL9lJA/jrVs"uY?P^`[["5%X>U]qcqqVP(bh0kW%bWZ>1Kfkp?ulc +"G-kEd0[Y96+T@;VY&\_^9>$GJ+)h*s1\O#pI#f=qeL*(6sPH`;LmS\L7s;*$3~> +, +1577 6802 17 12 /4E +$C +1HH&qqtJgP~> +, +1602 6802 4E , +1627 6802 4E , +1652 6785 26 91 /5U +$C +3#auA%M%t-s4@;Ns8W-!s8W-!s8W-!s8W-!s8W,Vs8K#4i,&,~> +, +1079 6681 82 71 /3Z +$C +46guKZN-XOqT6Z[95/n-Y?m$)s8$(ql$Y5b9BgjXV>oe.0;\<U?XKZ%^6e0OoY-[?qHs5gde[<D +s3gaN9Bgo>^J!g>0A"h?I4qGnnbVqEfD8(e:1,l??r:9]~> +, +1162 6681 3B , +1217 6682 7H , +1274 6683 5T , +1303 6683 5V , +1392 6655 3V , +1452 6683 7D , +1481 6681 3R , +1529 6683 5V , +1617 6681 3R , +1665 6683 6N , +1723 6682 7H , +1756 6681 3R , +1804 6682 3T , +1873 6682 0D , +726 6526 3W , +778 6526 61 43 /0S +$C +2AdhJ:_A3Oo1(F=qu?]rs8W-!s8W-!s8W-!s8W-!s8W-!pO;Seqb;8cG?JF`D.WiQ<gR9_Y1)/_ +(f=s(~> +, +846 6524 1G , +906 6507 3L , +966 6524 1Z , +1086 6524 2L , +1146 6526 6H , +1206 6524 1Z , +1266 6524 1G , +1318 6524 1V , +1386 6524 1Z , +1498 6524 56 62 /3Y +$C +,Ap0V:'Cb1Tg"9*%d8k,,W$'NTS%Y>qG#tA:$KCgqg/:sYQ+Y&m<\c`f%9dlBk<=V[[1h`_[1Jp +-.o@;>VNZrEW?(=s7sI<pOE~> +, +1566 6526 3W , +1618 6524 1V , +1678 6526 0S , +1746 6524 1G , +1798 6507 56 62 /1I +$C +3!q,3aUeFOs8W,sL(f.]^j&07KBS.Ncm,Lc$,2!#oUEfYVpfsAH@Pgis8W,r?GEo@[G>\?a(]_F +m=`,+Ph9rm$$Ii'Xr("?'E~> +, +1892 6508 0X , +1917 6525 0K , +1973 6525 4Y , +2017 6525 75 49 /1X +$C +4cl(.nk$p@#I`!/LOT!8pO2+,GOWNI[sf7_j*e]>rr)6!qu:TkmJjri[dO1-rqj=D&bZKkGJEiA +XH,SaDYri#pAMGe^"^!a\$sVa]tY'0H[b\^*Q&=gG/NZ_@?)9:pMenIGIrWc%NZMn%6s~> +, +2095 6525 3G , +2134 6508 5U , +2200 6508 0X , +2225 6525 3S , +2269 6499 7I , +2319 6525 0M , +2353 6525 27 72 /1A +$C +1T2<V4lPiRgUL\cpjJ/%h>ata\,Wr9p\jjaid<iF$oP<-GDEgn2';iEpd*Bdn$m*~> +, +2380 6525 3S , +2425 6525 0K , +2480 6525 36 49 /4A +$C +1D4L?KH;1$9KN@diA[Y2ID9uEhuE+/X_T6!k>9J-TkGn_K#hFi6B$NJfApN?s0pmoS[Go7(g(:V +(aq(7~> +, +2519 6508 5U , +726 6406 3W , +778 6406 0S , +846 6404 1G , +906 6387 3L , +966 6404 1Z , +1044 6405 3S , +1088 6379 7I , +1138 6405 0M , +1172 6405 1A , +1199 6405 3S , +1244 6405 0K , +1332 6388 0X , +1357 6405 4Y , +1401 6405 6K , +1432 6378 0Y , +1515 6405 4Y , +1560 6405 6K , +1591 6378 0Y , +1674 6405 4E , +1699 6405 4E , +1724 6405 4E , +1748 6388 5U , +1079 6284 78 73 /5I +$C +,@H[r)o3*1<Y05+0Q?6.V[a8(LHu..-Kt^T-L!H]kr22IF`1>_e^_?U^A@/FfA$7RlMpnas8Uo) +YM8pQosObaCO3S[Xeg0KQI<4+2O1YN0U7A(:r.`[a?P@e6A#FG6+Ja%,Q~> +, +1158 6286 6N , +1216 6286 7D , +1245 6258 4H , +1333 6285 51 73 /5X +$C +5EglT+SH@k^#U$'FpL$[_nllJqgH5-rV-'chuE_+s8Vrqrg*Md?)<,t[I'gC0OD_A]3VSk$n_r) ++92B@s8W+%2$O#4bf,_b~> +, +1388 6286 5T , +1417 6285 7H , +1450 6286 5V , +1538 6285 6J , +1588 6258 3V , +1680 6286 5T , +1709 6286 5V , +1797 6285 6J , +1847 6257 7K , +1903 6284 3R , +1984 6285 7H , +2017 6258 4H , +2072 6258 3V , +2132 6284 3R , +2180 6284 3J , +2256 6285 6J , +2306 6286 38 47 /3Z +$C +0H#A^_V2d)s8W-!s8W-!hqnUF[?3rg<K18!0`S\NG9dORiPEE.~> +, +2346 6284 3R , +2427 6286 5T , +2456 6286 5V , +2544 6258 3V , +2604 6286 7D , +2634 6284 3R , +2681 6286 5V , +2770 6284 3R , +2818 6286 6N , +2876 6285 7H , +2908 6284 3R , +2956 6285 3T , +3017 6271 23 27 /0L +$C +0k&hmpMY93^MeSYh7p_lq5@]N~> +, +3075 6285 5X , +3130 6285 59 48 /4D +$C +,6G^d:()^rSt(K"WZ[OKKH'R@829B/hbX7Os8W-!s8W-!s8W-!s8K(pJ6^S3s7>3jJF\7`JS/"W +3,n?~> +, +3191 6285 7H , +3223 6271 0L , +3281 6285 6J , +3331 6284 3J , +3406 6285 3T , +3467 6284 3B , +3522 6284 6L , +3566 6285 4D , +3626 6286 5V , +3715 6284 3R , +3763 6286 6N , +3821 6285 7H , +3853 6284 3R , +3901 6285 3T , +3995 6285 4D , +4055 6286 6N , +4113 6285 3T , +4175 6284 3R , +4222 6286 3Z , +4294 6284 3Y , +4362 6286 3W , +4414 6284 1V , +4474 6286 0S , +4542 6284 1G , +4594 6267 1I , +4655 6271 0L , +4713 6286 33 69 /0P +$C +0H%XJ!UM?&s8W-!s8W-!s8W-!s8W-!s8W-!s)k!s!MdF~> +, +4747 6286 6N , +4805 6286 6Z , +4838 6284 3R , +4886 6286 3Z , +4926 6286 6N , +4984 6284 3B , +1079 6211 24 26 /5W +$C +4RdSWJ)B.-pUBV'g\1)S_dTJ~> +, +1107 6165 5X , +1162 6166 5T , +1191 6165 7H , +1224 6166 5V , +1312 6165 6J , +1362 6138 3V , +1422 6164 3J , +1465 6211 24 26 /0N +$C +4`80npM\gBpUfn^qtp@3,7GK@~> +, +1541 6165 6J , +1591 6166 3Z , +1631 6164 3R , +1728 6166 6N , +1786 6164 3B , +1841 6165 7H , +1915 6138 26 97 /2P +$C +4EtrfS>!QA\%D+`s*juts8W-!s8W-!s8W-!s8W-!rG+1n5ENe-@_q!ms5c>8l-oX8C;PK~> +, +1946 6165 4D , +2007 6164 3J , +2049 6165 7H , +2130 6166 0Z , +2180 6188 6A , +2213 6165 5X , +2269 6166 5T , +2298 6165 7H , +2379 6165 3T , +2440 6164 3R , +2488 6164 3R , +2536 6138 3V , +2596 6151 23 61 /4K +$C +0k&hmpMY93^MeSYh=p[<GW$"$s8V\cKH39Qs(g>C'E~> +, +2670 6165 7H , +2703 6166 7M , +2761 6164 3R , +2809 6138 4H , +2914 6164 3R , +2962 6166 6N , +3020 6164 6L , +3064 6164 3B , +3119 6166 5V , +3207 6138 3V , +3267 6165 6J , +3317 6164 3J , +3360 6164 3J , +3450 6165 5X , +3505 6164 3B , +3560 6165 7H , +3592 6166 7M , +3700 6165 5X , +3755 6166 5T , +3784 6165 7H , +3817 6166 5V , +3905 6165 6J , +3955 6138 3V , +4015 6164 3J , +4106 6165 6J , +4156 6166 6N , +4214 6165 3T , +4324 6211 5W , +4352 6138 3V , +4412 6166 7M , +4470 6164 3B , +4525 6165 7H , +4557 6164 3B , +4612 6211 0N , +4690 6145 31 93 /3B +$C +"KA5$<2ioaX%J_TkuZ=+f<21RX8]1"oY:G+s8W,ds8D]jp[@j)hqRkn]A*&HgV(4BmCQ0~> +, +4723 6164 6L , +4768 6164 52 49 /5Z +$C +-,RJ#Jd4TY+S0[\0^1M^2l>gu<qXnToWS5,FoUmEs8W%)rjpk_Fh_cG[d)RJ9#F9R9#61SMQibj +PlW!~> +, +4822 6166 7D , +4851 6164 5Z , +4906 6165 4D , +4966 6166 3Z , +5006 6145 28 93 /3D +$C +3RbHUG4"&?]C+PE]C,RirpTT2^[Jr;^An65s3grIWrK*t='h6DF^7nJWD_7r<2jY:J,~> +, +1079 6046 5T , +1108 6046 5V , +1196 6045 6J , +1246 6017 7K , +1302 6044 3R , +1350 6044 3J , +1419 6045 6J , +1469 6044 3J , +1538 6018 3V , +1598 6046 3Z , +1638 6044 5Z , +1692 6045 55 47 /0B +$C +.aN80rp/h061h@qkr8H5rjSg"8c@(ef(At+5J$]0oUGf-2d]Y_\*g;!Eo<U`1]Mt~> +, +1749 6046 5T , +1778 6045 3T , +1839 6044 3R , +1887 6045 3T , +1976 6045 5X , +2031 6018 4H , +2114 6046 3F , +2175 6045 56 73 /3H +$C ++LJp$5kmV@ADpOa$L)XK9;U)$FLka1QV41'l#aLB/sf3GX^kL=qgH2riP+2XpA99P(k'-9mIh'p +IJ`R7s8W-!s8K>)a7J5P5dOC>~> +, +2239 6034 45 85 /6B +$C +/mdGEmJh+ZpA_VhqgRGrrP*:*rnk3Ps)6ZcrP.asIc%X5^Mhm+hm`"MJ(s\q^Mj!W~> +, +2291 6046 48 69 /5K +$C +21n\f@.;aLJ,fQKjhY/&h3M<(5D*m`rnmU$^\7]^mJjZphf&J-rqh34p\3GBDnj$Dq]5Y(]D+KN~> +, +2349 6045 0D , +2366 6044 47 71 /0V +$C ++p(%4KH3$?0=h9*Uu%T:h0h4h:&_W*^Uj:An%\m0?iC$)s8W-!s82i"otU8$qka8c?WR/k^SPda +V/7^e'!Y9_0VH6I~> +, +2424 6045 0D , +2494 6046 60 69 /2T +$C +1BfGjiK1'#,=ctPrr<#qs8MRA)uos<s8W-!s8W-!s8W-!s8T[WEraVc~> +, +2555 6046 5T , +2584 6046 5V , +2672 6045 5X , +2728 6044 5Z , +2790 6034 6B , +2843 6046 3F , +2904 6045 3H , +2987 6045 3T , +3048 6044 5Z , +3103 6044 3R , +3151 6044 3J , +3221 6046 6N , +3279 6044 5Z , +3334 6045 7H , +3366 6031 0L , +3420 6046 7M , +3478 6044 5Z , +3533 6045 82 48 /6V +$C +--V`>h0uuM[/YPgrB9d@+!SJRhOje2e\;&ZVUk)5[%C.MH@FT)^[7iQJ+m9?>HRpIY?pm>YNtG4 +lW<i0='tEF]"Q[tSt*;=F&6Q9h].OYhu~> +, +3616 6044 3R , +3664 6045 0B , +3721 6044 3R , +3768 6046 3Z , +3808 6031 0L , +3862 6046 3Z , +3902 6044 3R , +3949 6044 6L , +3994 6044 5Z , +4048 6017 7K , +4104 6046 6N , +4162 6046 5T , +4191 6044 3J , +4234 6044 3R , +4310 6045 7H , +4343 6046 7M , +4401 6044 3R , +4477 6045 6V , +4560 6046 5T , +4589 6045 3T , +4651 6044 3R , +4726 6045 0B , +4783 6045 6J , +4833 6046 3Z , +4872 6046 5T , +4901 6044 3R , +4949 6045 7H , +4982 6018 4H , +1079 5924 5Z , +1134 5926 6Z , +1207 5897 7K , +1263 5926 3Z , +1302 5925 6J , +1352 5898 3V , +1412 5926 7M , +1470 5926 5T , +1499 5924 6L , +1544 5924 3J , +1626 5926 6Z , +1659 5924 5Z , +1714 5926 3Z , +1753 5926 5V , +1842 5925 6J , +1892 5925 7H , +1924 5924 3J , +2007 5925 7H , +2040 5926 7M , +2098 5925 6J , +2148 5925 7H , +2220 5926 3F , +2281 5925 3H , +2376 5926 5K , +2434 5925 0D , +2451 5924 0V , +2540 5925 3T , +2601 5924 5Z , +2656 5924 3R , +2704 5924 3J , +2754 5925 0D , +2835 5926 0P , +2869 5926 6N , +2927 5924 3J , +2969 5925 7H , +3002 5924 3R , +3050 5925 6J , +3100 5925 3T , +3161 5911 0L , +3225 5924 5Z , +3280 5926 6N , +3338 5926 7D , +3367 5898 4H , +3462 5926 0P , +3496 5926 6N , +3554 5926 6Z , +3587 5924 3R , +3635 5926 3Z , +3675 5926 6N , +3733 5924 5Z , +3787 5971 0N , +3815 5924 3J , +3897 5924 5Z , +3952 5925 6V , +4035 5926 6N , +4132 5926 6Z , +4165 5924 5Z , +4220 5926 3Z , +4259 5926 5V , +4348 5925 6J , +4398 5925 7H , +4470 5926 5T , +4499 5924 3J , +4580 5924 3J , +4622 5925 4D , +4683 5898 3V , +4743 5898 3V , +4803 5924 5Z , +4857 5926 3Z , +4897 5925 7H , +4930 5924 3R , +4977 5925 3T , +1079 5806 5T , +1108 5806 6N , +1166 5805 7H , +1199 5804 3R , +1247 5806 3Z , +1286 5806 6N , +1344 5805 6J , +1394 5806 7D , +1424 5806 7D , +1453 5778 4H , +1508 5791 0L , +1572 5805 6J , +1622 5806 6N , +1680 5805 3T , +1779 5804 3R , +1827 5806 51 47 /6C +$C +0HhbLCT6iu*o7X>[[4%/>?fXbXeft#>>!^U>GYf:I8\U0m^,;BmF&STVWhAmPBq,U8\.XIjoKYt +a@E.\>`fE~> +, +1878 5805 7H , +1911 5804 3R , +1959 5806 3Z , +1998 5806 6N , +2057 5805 6J , +2107 5806 7D , +2175 5778 3V , +2235 5806 3Z , +2275 5804 5Z , +2329 5777 7K , +2385 5806 3Z , +2424 5805 6J , +2474 5806 5V , +2563 5804 3J , +2644 5805 6J , +2694 5806 3Z , +2734 5804 3R , +2821 5778 3V , +2881 5806 3Z , +2921 5804 5Z , +2975 5805 0B , +3032 5806 5T , +3061 5805 3T , +3122 5804 3R , +3170 5805 3T , +3271 5805 7H , +3304 5804 5Z , +3398 5804 6L , +3442 5804 5Z , +3497 5806 6N , +3555 5805 0B , +3612 5804 3R , +3660 5806 3Z , +3699 5805 7H , +3772 5805 5X , +3827 5804 3R , +3875 5805 7H , +3908 5805 6V , +3991 5804 3R , +4039 5804 3R , +4087 5806 6N , +4184 5805 7H , +4217 5806 7M , +4275 5805 6J , +4325 5805 7H , +4397 5805 6J , +4447 5806 6N , +4505 5805 3T , +4605 5804 5Z , +4660 5805 7H , +4692 5806 7M , +4750 5804 3R , +4798 5806 3Z , +4878 5806 6Z , +4911 5804 5Z , +4966 5806 3Z , +5005 5828 6A , +1079 5686 5V , +1167 5685 6J , +1217 5685 7H , +1250 5684 3J , +1327 5684 3J , +1369 5685 4D , +1430 5684 6L , +1474 5686 7M , +1566 5685 6J , +1616 5684 3J , +1693 5666 32 89 /4Q +$C +0>[sLLV<.0SdDp9pM]O!s7cQns8W-!s8W-!s8W-!s8W-!s8W-!rh"i`^h3?~> +, +1726 5686 59 69 /1O +$C +0H%XJ!UM?&s8W-!s8W-!s78N96ntkUT_tep`#I[Lhf$!Ys)7o6s53kVli3g\QX1<'9+2Gd.UX,J +Z5ZsI~> +, +1787 5686 58 69 /5P +$C +2?s3(!F!QE)ak,7huE0FJ,A1(s88h1s8W,brYH[V+pd[fp](9nnc/Xh+F!kcs0)I>F;YW2LG/r4Du~> +, +1848 5684 74 73 /2Z +$C +,(YRQ%&b?ZH3,5AE/5&C$ueTN/fZ!"kS)Bh6$0\D"k*EDV<b=f^:O1;e<G\E7)6k9`k)3Ms8N&e +htqm"\I5n([s%Xtpi!ULf%S"M-Xag/"q(io.>&2)aCuWNJVbia~> +, +1932 5685 0D , +2008 5686 3F , +2069 5686 7M , +2127 5684 3R , +2210 5686 6Z , +2243 5686 5T , +2272 5686 7D , +2301 5684 3R , +2384 5685 3T , +2445 5684 3R , +2493 5684 3J , +2535 5684 6L , +2580 5686 3Z , +2619 5686 5T , +2648 5658 3V , +2708 5685 7H , +2741 5684 5Z , +2796 5686 3Z , +2871 5684 3J , +2913 5658 4H , +2969 5686 6N , +3027 5685 7H , +3060 5685 6J , +3110 5686 6C , +3197 5686 6Z , +3230 5684 5Z , +3285 5686 3Z , +3359 5684 3J , +3401 5658 3V , +3461 5684 3R , +3509 5684 6L , +3554 5686 5T , +3583 5686 6Z , +3616 5658 4H , +3672 5686 5T , +3701 5686 6N , +3759 5657 7K , +3848 5685 5X , +3903 5686 5T , +3932 5685 7H , +3965 5686 5V , +4053 5685 6J , +4103 5658 3V , +4163 5684 3J , +4239 5686 5T , +4268 5684 3J , +4344 5685 4D , +4404 5684 3J , +4447 5684 3R , +4495 5686 6Z , +4528 5685 4D , +4588 5686 7D , +4650 5685 6V , +4733 5686 7M , +4792 5684 3R , +4839 5686 6N , +4931 5685 6J , +4981 5686 6N , +1079 5564 3R , +1127 5566 6C , +1178 5565 7H , +1211 5564 3R , +1259 5566 3Z , +1298 5566 6N , +1357 5565 6J , +1407 5566 7D , +1464 5538 3V , +1524 5566 3Z , +1564 5564 5Z , +1618 5537 7K , +1674 5566 3Z , +1713 5565 6J , +1763 5566 5V , +1880 5565 6V , +1963 5566 3Z , +2003 5566 5T , +2032 5565 7H , +2065 5564 3R , +2112 5564 3J , +2182 5565 7H , +2215 5566 7M , +2273 5564 3R , +2348 5565 5X , +2403 5566 5T , +2432 5565 7H , +2465 5566 5V , +2553 5565 6J , +2603 5538 3V , +2690 5565 7H , +2723 5564 5Z , +2805 5565 6J , +2882 5566 6Z , +2915 5566 5T , +2944 5566 7D , +2973 5564 3R , +3048 5565 3T , +3109 5564 3R , +3157 5564 3J , +3199 5564 6L , +3244 5566 3Z , +3283 5566 5T , +3312 5538 3V , +3372 5565 7H , +3405 5564 5Z , +3460 5566 3Z , +3507 5565 0D , +3577 5566 0P , +3611 5566 6Z , +3671 5565 6J , +3748 5566 5V , +3836 5565 6J , +3886 5564 3J , +3929 5565 3H , +3984 5566 6Z , +4018 5566 5T , +4047 5566 7D , +4076 5564 3R , +4151 5566 5T , +4180 5564 3J , +4250 5537 7K , +4306 5566 5T , +4335 5565 0B , +4391 5564 3R , +4439 5566 6N , +4497 5551 0L , +4551 5566 5T , +4580 5565 7H , +4641 5566 5V , +4729 5565 6J , +4779 5538 4H , +4863 5565 6J , +4913 5566 7D , +4942 5564 3J , +4984 5564 5Z , +1079 5446 7M , +1137 5445 6J , +1187 5445 0B , +1244 5444 3R , +1319 5445 6J , +1396 5445 3T , +1457 5444 3R , +1505 5418 3V , +1565 5445 7H , +1598 5446 7M , +1683 5417 7K , +1739 5446 3Z , +1778 5444 3R , +1826 5445 6J , +1876 5445 7H , +1909 5444 3R , +1956 5446 3Z , +2025 5445 7H , +2058 5446 7M , +2116 5445 6J , +2166 5446 6N , +2251 5446 0Z , +2328 5445 5X , +2383 5446 5T , +2412 5445 7H , +2445 5431 4K , +2497 5445 7H , +2530 5446 7M , +2588 5444 3R , +2663 5446 5V , +2751 5444 3R , +2799 5445 6J , +2849 5446 6N , +2907 5446 5T , +2936 5446 6N , +2995 5417 7K , +3076 5446 5T , +3105 5444 3J , +3173 5445 7H , +3206 5446 7M , +3264 5445 6J , +3314 5445 7H , +3373 5446 5T , +3402 5446 6Z , +3461 5445 6J , +3537 5418 3V , +3597 5446 5T , +3626 5446 6C , +3678 5444 3R , +3726 5446 7D , +3781 5444 5Z , +3836 5446 6Z , +3895 5445 7H , +3928 5446 7M , +3986 5444 3R , +4060 5446 5V , +4148 5445 6J , +4198 5444 3J , +4241 5445 3H , +4322 5446 5T , +4351 5444 3J , +4419 5446 6N , +4477 5444 5Z , +4532 5446 6N , +4590 5468 6A , +4623 5446 48 46 /5J +$C +0H5Mua@1G`p?pgVgY]KpmC-K[h7J$I]6<pqG4"_kmEa&Ns0hfQ]AIuonU(6~> +, +4673 5444 3R , +4721 5446 3Z , +4761 5444 5Z , +4842 5445 7H , +4875 5446 7M , +4933 5444 3R , +4981 5446 6N , +1079 5325 7H , +1112 5326 7M , +1170 5324 3R , +1246 5324 6L , +1290 5324 5Z , +1345 5326 3Z , +1384 5326 3Z , +1424 5324 3R , +1472 5324 3J , +1514 5298 3V , +1574 5324 5Z , +1629 5326 6N , +1687 5325 3T , +1748 5326 5T , +1777 5326 6N , +1836 5297 7K , +1920 5298 3V , +1980 5326 5T , +2009 5326 6C , +2061 5324 3R , +2109 5326 7D , +2166 5324 5Z , +2221 5326 6Z , +2282 5325 7H , +2315 5326 7M , +2373 5324 3R , +2449 5326 5T , +2478 5326 5V , +2566 5325 6J , +2616 5297 7K , +2672 5324 3R , +2749 5324 3J , +2791 5326 7M , +2850 5324 5Z , +2904 5325 4D , +2964 5326 7D , +2994 5325 3T , +3083 5325 5X , +3138 5324 3R , +3215 5325 3T , +3276 5326 3Z , +3316 5325 6J , +3366 5325 6V , +3449 5326 6N , +3515 5325 0D , +3586 5305 3B , +3619 5326 58 69 /6Q +$C +1CW&nPtW/Om"HQF"*Y4Dhf$!Yn*e$+p]&#.s8U]R^Zfn*E0glO(bphK/;$Er=V-/u9Gi.9_[j62 +pY5^ds7cQnrI=g5?BmkH8e@u+<Plgml2~> +, +3680 5325 4D , +3741 5325 7H , +3802 5324 3J , +3844 5324 3R , +3892 5324 3R , +3969 5325 7H , +4002 5326 7M , +4060 5324 3R , +4137 5326 7M , +4195 5325 6J , +4245 5326 6N , +4303 5325 3T , +4364 5326 7D , +4394 5326 5T , +4423 5326 6N , +4481 5297 7K , +4565 5324 5Z , +4620 5326 6Z , +4682 5325 5X , +4737 5326 5T , +4766 5325 7H , +4799 5326 5V , +4887 5325 6J , +4937 5298 3V , +4997 5324 3J , +1079 5205 4D , +1139 5204 3J , +1182 5204 3R , +1230 5205 3T , +1316 5205 6J , +1366 5204 3J , +1433 5204 3J , +1475 5205 7H , +1508 5206 5T , +1537 5178 3V , +1597 5178 3V , +1657 5206 7D , +1686 5204 3R , +1734 5204 3J , +1802 5206 5T , +1831 5206 6N , +1912 5205 40 49 /3E +$C +-j^/!+R.k4$gs*1oGc8$K7#W86i[2dJ+rF1^O>"&otU4tpA99M[]mT"f\tene/0S~> +, +1953 5205 4Y , +1997 5205 0K , +2053 5205 49 49 /1K +$C +2%'[N%\3idSEM*PS)LqQp@\.VID>LSpV$=q^?tsV\,GcDhY4b_^Y+U\gYMb7hmV(DblQhPmqb2A +]2h^#:]~> +, +2103 5205 4Y , +2147 5205 4A , +2194 5185 3B , +2227 5204 46 71 /1N +$C +-fG0#Ee,@L_[[W?*OoP4[gh*J]6C`rmea`sk-8e0L-H"6K5R;WU(9306,*[[Bg"L`o_t2lfDkm& +n+H?ls%;26g>+9-L6]!.K*bYY@7(ApM#~> +, +2277 5185 3D , +2319 5205 0D , +2336 5185 3D , +2418 5206 3F , +2479 5206 7M , +2537 5204 3R , +2617 5232 47 4 /2H +$C +/ddj:TE~> +, +2677 5204 2N , +2737 5204 1G , +2789 5204 1V , +2857 5204 1G , +2935 5205 6J , +2985 5206 6N , +3043 5205 3T , +3136 5232 2H , +3188 5206 0S , +3256 5204 1G , +3316 5204 43 45 /6F +$C +--Bs+k9*%T&:G,"nKk6P"+"kk2m9\ds6X:'>#;Fq8V0QRcT29O5bS`qZp[t!6#*3fV#UJ^D6DID +fJ$MB6gQEDC((Zh~> +, +3376 5206 48 60 /0O +$C +,D@S_MVl*@fa*!YQV41'l#aLB/sf5-db7nuBjmiqb8kc<I>?S9^>Ek<fR:IQmIpF)L'3#)Y!;sd +s8V/![Jg~> +, +3436 5204 2N , +3496 5204 1G , +3548 5204 1V , +3616 5204 1G , +3694 5204 5Z , +3749 5178 3V , +3809 5205 7H , +3841 5206 5T , +3870 5204 5Z , +3925 5206 6N , +3983 5204 3J , +4051 5205 6J , +4101 5206 3Z , +4140 5204 3R , +4213 5206 6N , +4271 5204 5Z , +4326 5205 7H , +4383 5206 5T , +4412 5206 5V , +4501 5178 3V , +4561 5206 7D , +4590 5204 3R , +4638 5206 5V , +4726 5204 3R , +4774 5206 6N , +4832 5205 7H , +4865 5204 3R , +4913 5205 3T , +4982 5205 0D , +726 5049 45 60 /3U +$C +2@YoEU`9@6s8W-!s8W-!s8W-!s8W-!s3/9>qu~> +, +786 5047 1G , +838 5047 3Y , +906 5047 1Z , +966 5049 3U , +1044 5022 7I , +1094 5048 4Y , +1138 5048 0M , +1172 5048 48 74 /0S +$C +09hbl>TVA,5COXAaL:g$L\BU9fR*)%mr/6_pAa#sg])`WYXF!8pAMGWIdR.5[sbaQpL4$8D;Pad +Z1kbV^CS6OeZo/QhuC=g^\qf]O!k."KnI5"~> +, +1222 5048 0K , +1277 5048 4Y , +1322 5048 1X , +1399 5048 3G , +1471 5031 0X , +1496 5048 3S , +1540 5022 7I , +1590 5048 0M , +1624 5048 1A , +1651 5048 3S , +1696 5048 0K , +1751 5048 4A , +1815 5048 4E , +1840 5048 4E , +1865 5048 4E , +1890 5031 5U , +1079 4927 77 71 /4A +$C +,=&o*!t[`V#=64K5_.]WbIRs<5mHuRS'uJOqJZ%VHN2m[s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8TL/cs\qRBI1I/p]~> +, +1157 4929 6N , +1215 4929 5T , +1244 4929 5V , +1332 4901 3V , +1392 4929 7D , +1422 4927 3R , +1469 4929 5V , +1558 4927 3R , +1606 4929 6N , +1664 4928 7H , +1696 4927 3R , +1744 4928 3T , +1851 4927 5Z , +1906 4901 3V , +1966 4928 7H , +1998 4929 5T , +2027 4927 5Z , +2082 4929 6N , +2140 4927 3J , +2191 4928 11 47 /1Q +$X +*WSETJ&)*Bs5<q8s5<q8s58CB5CagUzzzzzzzzzzz!!")@5Ce7!s5<q8s5<q8s5<pmJ&":!*WQ~> +, +2261 4955 2H , +2329 4910 32 81 /5A +$C +/d,!54ii1_mDFD/rnmbUs8W-!s8W-!ni/K'Og*aB9:,\Ys*t~> +, +2373 4927 56 44 /3P +$C +,i""TKGgGEK="%NoE_*ncnOSP#WMH?#HR+dp](9ns8W-!s8W-!s8W-!s6%7`i:[+oJ,~> +, +2441 4927 6F , +2493 4927 1V , +2561 4929 3W , +2621 4929 48 60 /6D +$C +3#\:_Rc"/Fs8W-!s8W-!s8SZ":&Re)s8W)TmI%f]?&K12K-?0~> +, +2673 4910 57 61 /3R +$C +1^ptq+W\=9g\1T\DsmM*laeE-h'_qgrTWY4])$<YS$/^Tl+6_/^72='lfl"W]"Y>NX/kOJ@=k"( +:Aq2C~> +, +2780 4928 6J , +2830 4929 6N , +2888 4928 3T , +3003 4955 2H , +3055 4929 59 42 /3O +$C +.En\QohYJ]jr\`Q9RhBgrn!t<huDF/ldtg:S+$CWBlou^n*MdCl9;T4J,c[8hqsLnFh[nRi%@<M +4o<_~> +, +3123 4929 6H , +3183 4927 1G , +3235 4910 1I , +3303 4929 3U , +3363 4927 1Z , +3415 4929 56 43 /2V +$C +1Bn:Ro[EN6F_)fts8W-!s8W-!s8W-!s8W)srHDINZ.ep"nC!a.@>)."]2rE/0VA~> +, +3483 4910 3L , +3535 4927 1V , +3595 4929 57 60 /5V +$C +1Bn>>`B3dnFC`;hs8W-!s8W-!s8W-!s8W)sqd%e)/9[@sHYIX?9<hd*(gJc)s8W-!r:jIm^]~> +, +3664 4928 0D , +3753 4927 82 71 /1B +$C +46guKZN-XOqT6Z[95/n-Y?m$)s8$(ql$Y5b9BgjXV>oe.0;\<U?XKZ%^6e0OoY-[?qHs5gde[<D +s3gaN9Bgo>^J!g>0A"h?I4qGnnbVqEfD8(e:1,l??r:9]~> +, +3836 4927 5Z , +3891 4928 7H , +3923 4927 46 49 /6P +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +4019 4928 3T , +4080 4929 5T , +4109 4929 6Z , +4142 4929 6Z , +4176 4927 6P , +4224 4929 3Z , +4263 4927 6P , +4311 4929 6N , +4369 4927 6L , +4414 4927 6P , +4508 4929 5T , +4537 4929 6N , +4642 4928 4D , +4702 4929 6N , +4760 4929 5T , +4790 4928 7H , +4822 4927 3J , +4911 4929 6Z , +4944 4927 5Z , +4999 4929 3Z , +1086 4835 2H , +1138 4809 5V , +1206 4807 1Z , +1266 4809 3W , +1326 4790 3L , +1378 4809 5V , +1438 4807 1V , +1524 4808 6J , +1574 4809 6N , +1632 4808 3T , +1725 4835 2H , +1777 4809 3O , +1845 4809 3W , +1905 4807 2N , +1957 4807 1V , +2017 4809 5V , +2086 4808 0D , +726 4652 3U , +786 4652 3W , +846 4650 6F , +898 4650 1V , +958 4650 3Y , +1026 4650 47 45 /1X +$C ++PbNY":bub6JI/]+?BW7cp>6;dVhoQ]fg:0<qZHofDkmNmA9jMDd-Gsf%O0Q[[%b4@>(^9K!A.h +L(kIQ~> +, +1078 4652 57 42 /3R +$C +1Bn>>`AIOjTZI4d[["5%V/7_s>>!UMd^GFJTsPQAXefkb'l)8[FQeq":"!pCFIT)^-L!H\\kUUj +PB<:G+cQNO:A(N8~> +, +1164 4625 7I , +1214 4651 4Y , +1258 4651 0M , +1292 4651 0S , +1342 4651 0K , +1397 4651 4Y , +1442 4651 75 49 /6O +$C +4cl(.nk$p@#I`!/LOT!8pO2+,GOWNI[sf7_j*e]>rr)6!qu:TkmJjri[dO1-rqj=D&bZKkGJEiA +XH,SaDYri#pAMGe^"^!a\$sVa]tY'0H[b\^*Q&=gG/NZ_@?)9:pMenIGIrWc%NZMn%6s~> +, +1519 4651 3G , +1591 4634 0X , +1616 4651 3S , +1660 4625 7I , +1710 4651 0M , +1744 4651 1A , +1771 4651 3S , +1816 4651 0K , +1871 4651 36 49 /4A +$C +1D4L?KH;1$9KN@diA[Y2ID9uEhuE+/X_T6!k>9J-TkGn_K#hFi6B$NJfApN?s0pmoS[Go7(g(:V +(aq(7~> +, +1935 4651 4E , +1960 4651 4E , +1985 4651 4E , +2010 4634 5U , +1079 4532 3F , +1140 4532 7M , +1198 4530 6P , +1287 4530 3Y , +1347 4530 3Y , +1415 4530 1X , +1467 4532 3R , +1570 4531 6J , +1620 4532 6N , +1678 4531 3T , +1788 4530 6F , +1848 4530 2L , +1908 4530 1G , +1960 4532 2V , +2063 4530 3J , +2105 4531 4D , +2166 4531 5X , +2221 4530 6L , +2265 4530 5Z , +2320 4532 88 47 /2X +$C +0Eoc'K:jmrq)D8+/;`aO>(?SPs8W-!s8W-!s8W-!s8W-!s8W-!ri?'Cm5<d*9l_ZL&>Ouf@AMUU +!4rFJ@)DUq/%!gM.m^-W@A]^a-57F:+CLi~> +, +2408 4532 2X , +2497 4531 6J , +2547 4532 6N , +2605 4531 3T , +2666 4530 3J , +2748 4531 6J , +2798 4532 3Z , +2838 4530 6P , +2928 4532 6N , +2986 4530 5Z , +3041 4531 7H , +3116 4532 5T , +3145 4532 2X , +3233 4504 3V , +3293 4532 7D , +3323 4530 6P , +3370 4532 2X , +3459 4530 6P , +3507 4532 6N , +3565 4531 7H , +3597 4530 6P , +3645 4531 3T , +3714 4531 0D , +3773 4530 1B , +3856 4530 5Z , +3911 4531 7H , +3943 4530 6P , +4034 4531 3T , +4095 4532 5T , +4124 4532 6Z , +4157 4532 6Z , +4191 4530 6P , +4239 4532 3Z , +4278 4530 6P , +4326 4532 6N , +4384 4530 6L , +4429 4530 6P , +4518 4532 5T , +4547 4532 6N , +4647 4531 4D , +4707 4532 6N , +4765 4532 5T , +4795 4531 7H , +4827 4530 3J , +4911 4532 6Z , +4944 4530 5Z , +4999 4532 3Z , +1086 4438 2H , +1138 4412 5V , +1206 4410 1Z , +1266 4412 3W , +1326 4393 3L , +1378 4412 5V , +1438 4410 1V , +1524 4411 6J , +1574 4412 6N , +1632 4411 3T , +1725 4438 2H , +1777 4412 3O , +1845 4412 3W , +1905 4410 2N , +1957 4410 1V , +2017 4412 5V , +2086 4411 0D , +726 4255 3U , +786 4253 1X , +838 4255 3O , +906 4253 1Z , +966 4255 6H , +1044 4254 71 49 /0N +$C +3Y;p"JV5%#*oYRCLeDb7]`umol+.>ugT,GQYA_/4DuK(tg[4b6qda`^mrgeipV$Om^A[rcpODpe +[r;/PrVq*!ZQ"C3hY6a#]D]3Ll!&#bO0.kghg8E7eW\EsRXb~> +, +1116 4254 1A , +1144 4254 0K , +1200 4254 49 74 /1M +$C +3+QNlE;"q%\p(Z2D^*hS3-oKO4s+^PLZ,rDDEYW!rVpfjme=0iA9./6^A!'SrSQAernG3bDgUAj +hflPQf#%Zr_qTs!,"=f+s51Tgp]#]J2@Jl/JeFbC_gh~> +, +1250 4254 3S , +1294 4254 0N , +1079 4135 3F , +1140 4135 7M , +1198 4133 6P , +1270 4133 3Y , +1338 4133 1Z , +1398 4135 3U , +1458 4133 1X , +1510 4135 3O , +1578 4135 47 56 /3K +$C +-Oe`/+Q*5!s8W-!s8W-!s8W-!,J;WWs8W-!s7hZE~> +, +1630 4135 5V , +1698 4135 3W , +1758 4133 6F , +1836 4133 5Z , +1891 4107 3V , +1951 4134 7H , +1983 4135 5T , +2012 4133 5Z , +2067 4135 6N , +2125 4134 6J , +2175 4135 7D , +2229 4107 3V , +2289 4134 6J , +2339 4135 3Z , +2379 4134 6J , +2429 4135 2X , +2517 4133 6P , +2565 4134 7H , +2598 4133 6P , +2646 4135 3Z , +2710 4135 5T , +2739 4133 3J , +2807 4135 6N , +2865 4133 5Z , +2919 4134 7H , +2977 4135 3Z , +3016 4133 6P , +3064 4133 6L , +3109 4133 5Z , +3163 4106 7K , +3219 4135 6N , +3277 4135 5T , +3306 4133 3J , +3349 4133 6P , +3397 4134 3T , +3466 4134 0D , +718 3978 61 43 /0S +$C +2AdhJ:_A3Oo1(F=qu?]rs8W-!s8W-!s8W-!s8W-!s8W-!pO;Seqb;8cG?JF`D.WiQ<gR9_Y1)/_ +(f=s(~> +, +786 3976 1Z , +838 3978 2V , +898 3976 3P , +984 3951 7I , +1034 3977 4Y , +1078 3977 0M , +1112 3977 48 74 /3Q +$C +09hbl>TVA,5COXAaL:g$L\BU9fR*)%mr/6_pAa#sg])`WYXF!8pAMGWIdR.5[sbaQpL4$8D;Pad +Z1kbV^CS6OeZo/QhuC=g^\qf]O!k."KnI5"~> +, +1162 3977 0K , +1217 3977 4Y , +1262 3977 6O , +1339 3977 3G , +1411 3960 0X , +1436 3977 3S , +1480 3951 7I , +1530 3977 0M , +1564 3977 1A , +1591 3977 3S , +1636 3977 0K , +1691 3977 4A , +1755 3977 4E , +1780 3977 4E , +1805 3977 4E , +1830 3960 5U , +1079 3856 77 71 /1C +$C +,=&o*!t[`V#=64K5_.]WbIRs<5mHuRS'uJOqJZ%VHN2m[s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8TL/cs\qRBI1I/p]~> +, +1157 3858 6N , +1215 3858 5T , +1244 3858 2X , +1332 3830 3V , +1392 3858 7D , +1422 3856 6P , +1469 3858 2X , +1558 3856 6P , +1606 3858 6N , +1664 3857 7H , +1696 3856 6P , +1744 3857 3T , +1889 3856 5Z , +1944 3830 3V , +2004 3857 7H , +2036 3858 5T , +2065 3856 5Z , +2120 3858 6N , +2178 3856 3J , +2229 3857 1Q , +2338 3884 2H , +2390 3839 1I , +2458 3856 1X , +2518 3856 6F , +2570 3856 1V , +2638 3856 2L , +2698 3856 1X , +2750 3858 0S , +2810 3858 0S , +2878 3856 1G , +2930 3858 2V , +2998 3856 2N , +3051 3843 0L , +3168 3884 2H , +3220 3856 1V , +3288 3856 1Z , +3348 3856 1G , +3408 3858 6H , +3468 3856 1X , +3528 3858 6D , +3588 3858 6D , +3641 3843 0L , +3758 3884 2H , +3810 3856 1V , +3878 3856 1Z , +3938 3856 1G , +3998 3858 6H , +4058 3856 1X , +4118 3858 6D , +4178 3858 6D , +4316 3856 6L , +4360 3856 5Z , +4415 3858 2X , +4503 3858 2X , +4592 3857 6J , +4642 3858 6N , +4700 3857 3T , +4761 3843 0L , +4870 3857 6J , +4920 3858 6N , +4978 3857 3T , +1086 3764 2H , +1138 3736 1V , +1206 3738 6H , +1266 3736 1G , +1318 3738 2V , +1386 3736 6F , +1446 3738 3W , +1506 3736 1Z , +1558 3738 2V , +1618 3736 1V , +1687 3737 0D , +1789 3738 0P , +1823 3738 6N , +1941 3737 7H , +1974 3738 7M , +2032 3736 6P , +2147 3736 1G , +2207 3736 2N , +2267 3736 2N , +2379 3736 3J , +2421 3737 4D , +2482 3737 5X , +2537 3736 6L , +2581 3736 5Z , +2636 3738 2X , +2724 3738 2X , +2813 3737 6J , +2863 3738 6N , +2921 3737 3T , +2982 3723 0L , +3064 3737 7H , +3097 3738 7M , +3155 3736 6P , +3269 3764 2H , +3329 3736 1G , +3389 3736 2L , +3449 3736 2L , +3509 3736 1Z , +3569 3738 3U , +3629 3736 1Z , +3689 3738 6H , +3749 3736 1G , +3801 3736 1V , +3869 3736 1X , +3929 3738 6H , +3982 3723 0L , +4073 3764 2H , +4133 3738 3W , +4185 3738 2V , +4253 3736 2N , +4313 3738 3W , +4373 3736 2L , +4433 3736 1G , +4485 3736 1V , +4553 3736 1X , +4613 3738 6H , +4673 3736 1X , +4725 3738 2V , +4786 3723 0L , +4870 3737 6J , +4920 3738 6N , +4978 3737 3T , +1086 3644 2H , +1146 3616 6F , +1206 3616 1Z , +1266 3618 3U , +1326 3616 1Z , +1386 3616 2L , +1438 3616 1V , +1506 3618 3W , +1558 3618 0S , +1626 3616 1G , +1686 3599 3L , +1746 3616 1Z , +1826 3616 5Z , +1881 3590 3V , +1941 3617 7H , +1973 3618 5T , +2002 3616 5Z , +2057 3618 6N , +2115 3616 3J , +2185 3617 6J , +2235 3618 3Z , +2275 3616 6P , +2350 3618 6N , +2408 3616 5Z , +2463 3617 7H , +2523 3618 5T , +2552 3618 2X , +2640 3590 3V , +2700 3618 7D , +2730 3616 6P , +2777 3618 2X , +2866 3616 6P , +2914 3618 6N , +2972 3617 7H , +3004 3616 6P , +3052 3617 3T , +3121 3617 0D , +3166 3618 0P , +3200 3618 6N , +3286 3617 7H , +3319 3618 7M , +3377 3616 6P , +3460 3618 3W , +3512 3618 2V , +3580 3616 2N , +3640 3616 1Z , +3692 3618 3R , +3781 3616 3J , +3823 3617 4D , +3884 3617 5X , +3939 3616 6L , +3983 3616 5Z , +4038 3618 2X , +4126 3618 2X , +4215 3617 6J , +4265 3618 6N , +4323 3617 3T , +4384 3603 0L , +4435 3617 7H , +4468 3618 7M , +4526 3616 6P , +4609 3618 3U , +4669 3616 1G , +4729 3616 6F , +4781 3616 1V , +4870 3617 6J , +4920 3618 6N , +4978 3617 3T , +1078 3479 1I , +1146 3496 1G , +1198 3496 1V , +1258 3496 1V , +1326 3496 1Z , +1386 3498 6H , +1438 3498 2V , +1534 3498 5T , +1563 3498 6N , +1621 3497 3T , +1682 3496 6P , +1730 3498 6C , +1817 3498 6Z , +1850 3496 5Z , +1905 3498 3Z , +1944 3498 2X , +2033 3496 3J , +2109 3497 6J , +2159 3498 3Z , +2199 3496 6P , +2281 3498 6N , +2339 3496 5Z , +2394 3497 7H , +2461 3498 5T , +2490 3498 2X , +2578 3470 3V , +2638 3498 7D , +2668 3496 6P , +2715 3498 2X , +2804 3496 6P , +2852 3498 6N , +2910 3497 7H , +2942 3496 6P , +2990 3497 3T , +3059 3497 0D , +3110 3498 3F , +3171 3498 7M , +3229 3496 6P , +3318 3496 2L , +3378 3496 1X , +3430 3498 2V , +3498 3498 6D , +3558 3498 3W , +3618 3479 3L , +3670 3496 3P , +3738 3498 6H , +3798 3496 1Z , +3885 3497 6J , +3935 3498 6N , +3993 3497 3T , +4095 3496 1Z , +4147 3498 2V , +4207 3496 1V , +4275 3498 6H , +4327 3479 57 61 /6P +$C +1^ptq+W\=9g\1T\DsmM*laeE-h'_qgrTWY4])$<YS$/^Tl+6_/^72='lfl"W]"Y>NX/kOJ@=k"( +:Aq2C~> +, +4395 3496 2L , +4455 3479 3L , +4515 3496 1Z , +4567 3496 1V , +4662 3496 3J , +4704 3497 4D , +4765 3497 5X , +4820 3496 6L , +4864 3496 5Z , +4919 3498 2X , +5007 3520 6A , +1079 3378 2X , +1167 3377 6J , +1217 3378 6N , +1275 3377 3T , +1337 3376 3J , +1404 3377 6J , +1454 3378 3Z , +1493 3376 46 49 /3R +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +1566 3378 6N , +1625 3376 5Z , +1679 3377 7H , +1737 3378 5T , +1766 3378 2X , +1854 3350 3V , +1914 3378 7D , +1943 3376 3R , +1991 3378 2X , +2080 3376 3R , +2127 3378 6N , +2186 3377 7H , +2218 3376 3R , +2266 3377 3T , +2335 3377 0D , +718 3221 0S , +786 3219 1Z , +838 3221 2V , +898 3219 3P , +958 3219 3Y , +1018 3219 3P , +1078 3219 1V , +1138 3219 1V , +1206 3219 1X , +1258 3221 2V , +1344 3194 7I , +1394 3220 4Y , +1438 3220 0M , +1472 3220 3Q , +1522 3220 0K , +1577 3220 4Y , +1622 3220 6O , +1699 3220 3G , +1771 3203 0X , +1796 3220 3S , +1840 3194 7I , +1890 3220 0M , +1924 3220 1A , +1951 3220 3S , +1996 3220 0K , +2051 3220 4A , +2115 3220 4E , +2140 3220 4E , +2165 3220 4E , +2190 3203 5U , +1079 3099 1C , +1157 3101 6N , +1215 3101 5T , +1244 3101 2X , +1332 3073 3V , +1392 3101 7D , +1422 3099 3R , +1469 3101 2X , +1558 3099 3R , +1606 3101 6N , +1664 3100 7H , +1696 3099 3R , +1744 3100 3T , +1830 3099 5Z , +1885 3073 3V , +1945 3100 7H , +1978 3101 5T , +2007 3099 5Z , +2061 3101 6N , +2120 3099 3J , +2170 3100 1Q , +2219 3127 2H , +2279 3101 3W , +2331 3101 2V , +2399 3099 2N , +2459 3101 3W , +2519 3099 2L , +2579 3099 1G , +2631 3099 1V , +2699 3099 1X , +2759 3101 6H , +2819 3099 1X , +2871 3101 2V , +2932 3086 0L , +2989 3127 2H , +3057 3082 5A , +3101 3099 3P , +3169 3099 6F , +3221 3099 1V , +3289 3101 3W , +3349 3101 6D , +3401 3082 6P , +3462 3086 0L , +3512 3100 6J , +3562 3101 6N , +3620 3100 3T , +3713 3127 2H , +3765 3101 3O , +3833 3101 6H , +3893 3099 1G , +3945 3082 1I , +4013 3101 3U , +4073 3099 1Z , +4125 3101 2V , +4193 3082 3L , +4245 3099 1V , +4305 3101 5V , +4374 3100 0D , +718 2944 0S , +786 2942 1Z , +846 2942 6F , +906 2942 6F , +966 2942 1G , +1026 2925 3L , +1086 2942 1Z , +1164 2917 7I , +1214 2943 4Y , +1258 2943 0M , +1292 2943 3Q , +1342 2943 0K , +1397 2943 4Y , +1442 2943 6O , +1519 2943 3G , +1591 2926 0X , +1616 2943 3S , +1660 2917 7I , +1710 2943 0M , +1744 2943 1A , +1771 2943 3S , +1816 2943 0K , +1871 2943 4A , +1935 2943 4E , +1960 2943 4E , +1985 2943 4E , +2010 2926 5U , +1079 2822 1B , +1162 2822 5Z , +1217 2823 7H , +1274 2824 5T , +1303 2824 2X , +1392 2796 3V , +1452 2824 7D , +1481 2822 3R , +1529 2824 2X , +1617 2822 3R , +1665 2824 6N , +1723 2823 7H , +1756 2822 3R , +1804 2823 3T , +1890 2803 3B , +1923 2822 3J , +1965 2823 4D , +2026 2823 5X , +2081 2822 3J , +2123 2823 4D , +2184 2824 2X , +2272 2822 3R , +2320 2823 3T , +2406 2823 5X , +2461 2796 4H , +2547 2824 3U , +2607 2822 1G , +2659 2822 3Y , +2727 2822 1Z , +2787 2824 3U , +2840 2803 3D , +2881 2823 0D , +726 2665 1X , +778 2648 1I , +838 2665 1V , +906 2667 3W , +966 2665 1X , +1018 2667 2V , +1104 2666 3S , +1148 2640 7I , +1198 2666 3G , +1237 2666 6K , +1276 2666 4Y , +1321 2666 0M , +1354 2666 1A , +1382 2666 3S , +1426 2666 0K , +1514 2649 0X , +1539 2666 4Y , +1583 2666 6K , +1614 2639 0Y , +1697 2666 4E , +1722 2666 4E , +1747 2666 4E , +1772 2649 5U , +1079 2545 1B , +1162 2545 5Z , +1217 2546 7H , +1274 2547 5T , +1303 2547 2X , +1392 2519 3V , +1452 2547 7D , +1481 2545 3R , +1529 2547 2X , +1617 2545 3R , +1665 2547 6N , +1723 2546 7H , +1756 2545 3R , +1804 2546 3T , +1873 2546 0D , +1915 2547 3F , +1976 2547 7M , +2034 2545 3R , +2082 2547 3Z , +2122 2545 3R , +2195 2547 5T , +2224 2545 3J , +2291 2547 6N , +2349 2545 5Z , +2429 2545 5Z , +2483 2519 3V , +2544 2546 7H , +2576 2547 5T , +2605 2545 5Z , +2660 2547 6N , +2743 2546 3T , +2804 2546 6J , +2854 2546 7H , +2887 2546 6J , +2937 2546 5X , +2992 2546 6J , +3042 2545 3J , +3084 2545 3R , +3140 2546 0D , +718 2371 1I , +786 2388 1G , +846 2388 2L , +906 2390 0O , +984 2389 3S , +1028 2363 7I , +1078 2389 0M , +1112 2389 1A , +1139 2389 3S , +1184 2389 0K , +1264 2389 4Y , +1309 2389 6K , +1340 2362 0Y , +1423 2389 4E , +1448 2389 4E , +1473 2389 4E , +718 2251 1I , +786 2268 1G , +846 2268 2L , +906 2270 0O , +984 2269 4A , +1023 2269 26 74 /3U +$C +4QnmjiU7:$_r8<HGAE95s7ZKehtR$Is*rpUqsXQ5s6]jcn,M;>qlJ-\n8,!:*&m~> +, +1051 2269 4Y , +1095 2269 1K , +1145 2269 3G , +1217 2269 0D , +1242 2269 0D , +1267 2269 0D , +1292 2252 0X , +1317 2269 3S , +1361 2243 7I , +1411 2269 0M , +1445 2269 1A , +1472 2269 3S , +1517 2269 0K , +1572 2269 4A , +1636 2269 4E , +1661 2269 4E , +1686 2269 4E , +1711 2252 5U , +718 2131 1I , +786 2148 1G , +846 2148 2L , +906 2150 0O , +1026 2148 2L , +1086 2148 1X , +1138 2150 2V , +1206 2150 6D , +1266 2150 3W , +1326 2131 3L , +1378 2148 3P , +1446 2150 6H , +1506 2148 1Z , +1584 2149 4A , +1623 2149 3U , +1651 2149 4Y , +1695 2149 1K , +1745 2149 3G , +1817 2149 0D , +1842 2149 0D , +1867 2149 0D , +1917 2132 0X , +1942 2149 3S , +1986 2123 7I , +2036 2149 0M , +2070 2149 1A , +2097 2149 3S , +2142 2149 0K , +2197 2149 4A , +2261 2149 4E , +2286 2149 4E , +2311 2149 4E , +2336 2132 5U , +718 2011 1I , +786 2028 1G , +846 2028 2L , +906 2030 0O , +1026 2030 6D , +1086 2028 1X , +1146 2030 6H , +1206 2011 3L , +1266 2028 1Z , +1318 2028 1V , +1404 2029 4A , +1443 2029 3U , +1471 2029 4Y , +1515 2029 1K , +1565 2029 3G , +1637 2029 0D , +1662 2029 0D , +1687 2029 0D , +718 1891 1I , +786 1908 1G , +846 1908 2L , +906 1910 0O , +1018 1891 1I , +1086 1910 6H , +1146 1908 1X , +1198 1891 1I , +1266 1908 1G , +1326 1891 3L , +1386 1908 1G , +1438 1908 1V , +1506 1908 1Z , +1584 1909 6O , +1662 1909 4Y , +1706 1909 4A , +1745 1909 0M , +1778 1909 3G , +1817 1909 6K , +1889 1892 0X , +1914 1908 0V , +2004 1902 11 100 /2E +$X +"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:> +"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:> +"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:>"5j:> +"5j:>"5j:>"5j:>"5j:>"5j:>~> +, +2063 1910 0Z , +2113 1892 5U , +718 1771 1I , +786 1788 1G , +846 1788 2L , +906 1790 0O , +1026 1788 6F , +1086 1790 45 60 /3U +$C +2@YoEU`9@6s8W-!s8W-!s8W-!s8W-!s3/9>qu~> +, +1146 1788 1G , +1198 1790 59 42 /2B +$C +-3a&@>IqP[\#uk!pK,sIp!p`u]g'*B]!niOVlf4`<qY"VFhKqV]\mHa#(<CEo`~> +, +1266 1788 1Z , +1326 1788 6F , +1404 1789 6O , +1482 1789 4Y , +1526 1789 4A , +1565 1789 0M , +1598 1789 3G , +1637 1789 6K , +1079 1670 3F , +1140 1670 7M , +1198 1668 3R , +1278 1670 3W , +1330 1670 2V , +1398 1670 6D , +1458 1668 1X , +1536 1668 3J , +1578 1669 4D , +1639 1669 5X , +1694 1668 6L , +1738 1668 5Z , +1793 1670 2X , +1881 1670 2X , +1970 1669 6J , +2020 1670 6N , +2078 1669 3T , +2164 1670 5T , +2193 1668 3J , +2260 1670 6N , +2319 1668 5Z , +2373 1669 7H , +2431 1670 5T , +2460 1670 2X , +2548 1642 3V , +2608 1670 7D , +2637 1668 3R , +2685 1670 2X , +2774 1668 3R , +2821 1670 6N , +2880 1669 7H , +2912 1668 3R , +2960 1669 3T , +3029 1669 0D , +718 1494 1I , +786 1513 3U , +846 1511 1G , +906 1511 2L , +966 1511 1Z , +1044 1512 3S , +1088 1486 7I , +1138 1512 3G , +1177 1512 6K , +1216 1512 4Y , +1261 1512 0M , +1294 1512 1A , +1322 1512 3S , +1366 1512 0K , +1454 1495 0X , +1479 1512 4Y , +1523 1512 6K , +1554 1485 0Y , +1637 1512 4E , +1662 1512 4E , +1687 1512 4E , +1712 1495 5U , +1079 1391 1B , +1162 1391 5Z , +1217 1392 7H , +1274 1393 5T , +1303 1393 2X , +1392 1365 3V , +1452 1393 7D , +1481 1391 3R , +1529 1393 2X , +1617 1391 3R , +1665 1393 6N , +1723 1392 7H , +1756 1391 3R , +1804 1392 3T , +1873 1392 0D , +726 1236 6H , +786 1234 1G , +846 1234 2N , +906 1236 3W , +966 1234 1X , +1018 1234 3Y , +1078 1234 3P , +1138 1234 1V , +1198 1234 1V , +1266 1234 1X , +1318 1236 2V , +1404 1209 7I , +1454 1235 4Y , +1498 1235 0M , +1532 1235 3Q , +1582 1235 0K , +1637 1235 4Y , +1682 1235 6O , +1759 1235 3G , +1831 1218 0X , +1856 1235 3S , +1900 1209 7I , +1950 1235 0M , +1984 1235 1A , +2011 1235 3S , +2056 1235 0K , +2111 1235 4A , +2175 1235 4E , +2200 1235 4E , +2225 1235 4E , +2250 1218 5U , +1079 1114 1C , +1157 1116 6N , +1215 1116 5T , +1244 1116 2X , +1332 1088 3V , +1392 1116 7D , +1422 1114 3R , +1469 1116 2X , +1558 1114 3R , +1606 1116 6N , +1664 1115 7H , +1696 1114 3R , +1744 1115 3T , +1947 1114 5Z , +2002 1088 3V , +2062 1115 7H , +2094 1116 5T , +2123 1114 5Z , +2178 1116 6N , +2236 1114 3J , +2287 1115 1Q , +2453 1142 2H , +2513 1116 3W , +2565 1116 2V , +2633 1114 2N , +2693 1116 3W , +2753 1114 2L , +2813 1114 1G , +2865 1114 1V , +2933 1114 1X , +2993 1116 6H , +3053 1114 1X , +3105 1116 2V , +3166 1101 0L , +3341 1142 2H , +3409 1097 5A , +3453 1114 3P , +3521 1114 6F , +3573 1114 1V , +3641 1116 3W , +3701 1116 6D , +3753 1097 6P , +3814 1101 0L , +3989 1142 2H , +4049 1114 6F , +4109 1114 1Z , +4169 1116 3U , +4229 1114 1Z , +4289 1114 2L , +4341 1114 1V , +4409 1116 3W , +4461 1116 0S , +4529 1114 1G , +4589 1097 3L , +4649 1114 1Z , +4702 1101 0L , +4870 1115 6J , +4920 1116 6N , +4978 1115 3T , +1086 1022 2H , +1138 996 3O , +1206 996 6H , +1266 994 1G , +1318 977 1I , +1386 996 3U , +1446 994 1Z , +1498 996 2V , +1566 977 3L , +1618 994 1V , +1678 996 5V , +1747 995 0D , +1814 996 3F , +1875 996 7M , +1933 994 3R , +2013 996 6D , +2073 996 3U , +2133 994 1G , +2193 994 6F , +2245 996 5V , +2331 994 3J , +2373 995 4D , +2434 995 5X , +2489 994 6L , +2533 994 5Z , +2588 996 2X , +2676 996 2X , +2765 995 6J , +2815 996 6N , +2873 995 3T , +2959 996 5T , +2988 994 3J , +3055 996 6N , +3114 994 5Z , +3168 995 7H , +3226 996 5T , +3255 996 2X , +3343 968 3V , +3403 996 7D , +3432 994 3R , +3480 996 2X , +3569 994 3R , +3616 996 6N , +3675 995 7H , +3707 994 3R , +3755 995 3T , +3824 995 0D , +726 839 6H , +786 837 1G , +846 839 3W , +906 837 6F , +966 837 1Z , +1044 838 0N , +1116 838 1A , +1144 838 0K , +1200 838 1M , +1250 838 3S , +1294 838 0N , +1079 719 3F , +1140 719 7M , +1198 717 3R , +1278 717 1G , +1330 717 3Y , +1398 717 1X , +1450 719 2B , +1518 717 1Z , +1578 719 3K , +1630 719 5V , +1698 719 3W , +1758 717 6F , +1836 717 5Z , +1891 691 3V , +1951 718 7H , +1983 719 5T , +2012 717 5Z , +2067 719 6N , +2125 718 6J , +2175 719 7D , +2229 691 3V , +2289 718 6J , +2339 719 3Z , +2379 718 6J , +2429 719 2X , +2517 717 3R , +2565 718 7H , +2598 717 3R , +2646 719 3Z , +2710 719 5T , +2739 717 3J , +2807 719 6N , +2865 717 5Z , +2919 718 7H , +2977 719 3Z , +3016 717 3R , +3064 717 6L , +3109 717 5Z , +3163 690 7K , +3219 719 6N , +3277 719 5T , +3306 717 3J , +3349 717 3R , +3397 718 3T , +3466 718 0D , +cleartomark end end pagesave restore showpage +%%PageTrailer +%%Page: 12 12 +%%BeginPageSetup +GS_pswrite_2_0_1001 begin +612 792 /letter setpagesize +/pagesave save store 100 dict begin +0.1 0.1 scale +%%EndPageSetup +gsave mark +K +Q q +0 0 6120 7920 re +Y +2771 7462 32 7 /6A +$C +0H"*/rO`~> +, +K +2829 7440 43 69 /0Z +$C +-jHk!!TAb"J,fQKs8W-!s8W-!s8W-!s8U<pLX:JlKAhU%NZJ]A#D\(iJ,~> +, +2879 7440 48 69 /5S +$C +0FGP^n$52ZaH1;q]6<Sr]t8ITgUFe<mG#+^GIP22]tO;mGPhA[s8B.im<rhtm49s$@$QdRX[?,' +(f4`k^]~> +, +2954 7462 6A , +726 7078 43 45 /6F +$C +--Bs+k9*%T&:G,"nKk6P"+"kk2m9\ds6X:'>#;Fq8V0QRcT29O5bS`qZp[t!6#*3fV#UJ^D6DID +fJ$MB6gQEDC((Zh~> +, +786 7078 47 45 /2L +$C ++WT&@_B@Xm#7-+#k_lB]&2ulZkm$>udX4)MBPXeWJ,fQ'r/,hrrqlRsCN%j0CLMq$@1c#I'uLE6 +'2W(k~> +, +846 7078 48 45 /4E +$C +3k744+D-15#AAdpoL9e"#TK*e&7PNu60UU_rVuijpY5GpI>50sLP@d5A2Znl&'+_Ml`/:<Y\T>r +/6!H_C23s&~> +, +906 7080 45 60 /0W +$C +2@YoEU`9@6s8W-!s8W-!s8W-!s8W-!s3/9>qu~> +, +966 7078 46 45 /4X +$C ++O4a+i.reS6.$'k_BN_8!X@j2h&tE;W_I/@C:^R_oWehD^WDC>HN)Lg[CpEoV/7fdL6]!.K*7m( +:t.1mJq*~> +, +1044 7053 47 75 /7I +$C +-Dt8Gs1eHGs4dSNn,IiEG_<oj6hkg9@GqFfID:2cGPAQEp\/n+^V@JVDu9G"n*e()rtbAR4b((m +hei>RrP&"!*o>_We1l[r]+khM%h@.-_a)]~> +, +1094 7079 42 49 /4Y +$C +2\D;ZK>WI>pNUZOGoaF9^>@ac@H"[)GK71@^Y@SZ^$WSDq]hB`lsB\cqg[AXmI.gHh>d3+h7iis +h:pnp5diannAo!b(a/;~> +, +1138 7079 32 65 /0M +$C +1HH$WHc+]/\(H'eG5-OaIJ<cUs7cEis*rqpq7t.c*ZGNGG:3q!huEH>p]%^IG^'~> +, +1172 7079 48 74 /3Q +$C +09hbl>TVA,5COXAaL:g$L\BU9fR*)%mr/6_pAa#sg])`WYXF!8pAMGWIdR.5[sbaQpL4$8D;Pad +Z1kbV^CS6OeZo/QhuC=g^\qf]O!k."KnI5"~> +, +1222 7079 52 49 /0K +$C +4d;!Q$pDM^GDGXrjB)oa)r;P$pC7*#qqp<0\,6("HggF>&a',eqec;?s7ZHL[dNOtDjss[*O,M0 +gb@96f\#/epNUZOG]<0!2#~> +, +1277 7079 4Y , +1322 7079 75 49 /1X +$C +4cl(.nk$p@#I`!/LOT!8pO2+,GOWNI[sf7_j*e]>rr)6!qu:TkmJjri[dO1-rqj=D&bZKkGJEiA +XH,SaDYri#pAMGe^"^!a\$sVa]tY'0H[b\^*Q&=gG/NZ_@?)9:pMenIGIrWc%NZMn%6s~> +, +1399 7079 39 49 /0I +$C +-P?\G#>U(]%gY*b0_fOIDm8jU^E<LMqtJ03&f;3)_%rpQ*sNeq4(3osICltsmsBE;hfdlODf&U$ +@ARIgTr9Z<~> +, +1471 7062 22 91 /0X +$C +,DOO+ItH5Ds8W-!s8W-!s8W-!s8W-!s8W-!s8W-!s8W-!hku6kfPBm~> +, +1496 7079 42 49 /0U +$C +-k[(P#>U(N%ZkTp\lYd+Id')2hu3<Ds7ZKihZ!QRmf.e*IJ_p0HFM^IV/9XqQ&:<iW%_$~> +, +1540 7053 7I , +1590 7079 0M , +1624 7079 27 72 /3Y +$C +1T2<V4lPiRgUL\cpjJ/%h>ata\,Wr9p\jjaid<iF$oP<-GDEgn2';iEpd*Bdn$m*~> +, +1651 7079 0U , +1696 7079 0K , +1751 7079 36 49 /1C +$C +1D4L?KH;1$9KN@diA[Y2ID9uEhuE+/X_T6!k>9J-TkGn_K#hFi6B$NJfApN?s0pmoS[Go7(g(:V +(aq(7~> +, +1815 7079 17 12 /4E +$C +1HH&qqtJgP~> +, +1840 7079 4E , +1865 7079 4E , +1890 7062 26 91 /5U +$C +3#auA%M%t-s4@;Ns8W-!s8W-!s8W-!s8W-!s8W,Vs8K#4i,&,~> +, +1079 6958 77 71 /4A +$C +,=&o*!t[`V#=64K5_.]WbIRs<5mHuRS'uJOqJZ%VHN2m[s8W-!s8W-!s8W-!s8W-!s8W-!s8W-! +s8TL/cs\qRBI1I/p]~> +, +1157 6960 58 47 /3P +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qcY0ReuU^)_0-YK@^p/t4&U'%SJqnU0Mh~> +, +1215 6960 28 69 /5T +$C +0EsY0/Z\pOs8W-!s8W-!s8UZV!6=[bnj'F(4Fd/9cueOPom9^R~> +, +1244 6960 88 47 /2X +$C +0Eoc'K:jmrq)D8+/;`aO>(?SPs8W-!s8W-!s8W-!s8W-!s8W-!ri?'Cm5<d*9l_ZL&>Ouf@AMUU +!4rFJ@)DUq/%!gM.m^-W@A]^a-57F:+CLi~> +, +1332 6932 56 75 /6T +$C +/d=P.LUCpts8W-!s8W*W++t[YiU7o"_nlWIR!K5#0_F9"If'$2n,<4bs7cQnYPu4PGO6ub73.&n +$mep_/@[=OG.U\h_[93uT^3@4(ao~> +, +1392 6960 28 72 /4F +$C +0EsY0/Z\pOs8W-!s8W-!s8W-!s8W-!s8W-!lS&`s4p`JB2)k~> +, +1422 6958 46 49 /6P +$C +-,NAa6m1Fn6.$*73'`&aK62am628mY0Bmtis7m*gOP2Sf&P)g"d^T5Td_BWLIC-(4TnX27.`-fF +$kr~> +, +1469 6960 2X , +1558 6958 6P , +1606 6960 3P , +1664 6959 33 63 /4J +$C +22MSu?.7U@]^UPYFoVLAs8W-!s8W,u?o*0m2B4J$*'aK's6osmLPLB~> +, +1696 6958 6P , +1744 6959 59 74 /6R +$C +,6PadBFG%9o].Bt<'f[3Jd*;_2s<!EI=:?D^Ak&0qZ$Tqs8DutIK/3^Iqs28[alB*$o"p%K#8Q` +"?mZ-1+_tqs8W-!s8?J%(]Hk@a^F0ZLO]~> +, +1830 6958 52 49 /3B +$C +-,RJ#Jd4TY+S0[\0^1M^2l>gu<qXnToWS5,FoUmEs8W%)rjpk_Fh_cG[d)RJ9#F9R9#61SMQibj +PlW!~> +, +1885 6932 6T , +1945 6959 4J , +1978 6960 5T , +2007 6958 3B , +2061 6960 3P , +2120 6958 40 49 /6H +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +2170 6959 11 47 /1Q +$X +*WSETJ&)*Bs5<q8s5<q8s58CB5CagUzzzzzzzzzzz!!")@5Ce7!s5<q8s5<q8s5<pmJ&":!*WQ~> +, +2219 6986 47 4 /5F +$C +/ddj:TE~> +, +2279 6958 52 62 /2N +$C ++rokY#W"`MK<U/9H6SI9Jd1>]"Q)ebODiWjSs/p#8cSY$^]4?6s0]W?Xo5C#XgD4-C[Eb.?%s!Y +(e]T6Yde+\@<)>Is8W'dK%Ji~> +, +2339 6960 45 62 /3W +$C +2@YoEU`9@6s8W-!s8W-!s8V[E,.I+BaFaHls6p~> +, +2399 6941 50 62 /3L +$C +,QSa(*Ou4e)i(n?qnDP!s33hh+FG=,:SK,l5_4^;62F=JK7,(0FIu?9:]Jjms8W-![D2[BrN6%# +Zrm3>FrL(k?%WGSF&jf"@>.Nd$i~> +, +2459 6960 3W , +2511 6958 52 58 /4T +$C ++Dt22n;'$mK;'!rU-/Uq+pCM##-'`as8W-!s8W-!s8P8$eb5lLs8W-!qLA~> +, +2579 6958 6F , +2717 6959 48 48 /3L +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +2767 6960 3P , +2825 6959 6R , +2918 6986 5F , +2970 6960 59 42 /4Z +$C +-3a&@>IqP[\#uk!pK,sIp!p`u]g'*B]!niOVlf4`<qY"VFhKqV]\mHa#(<CEo`~> +, +3038 6958 48 45 /1G +$C +3k744+D-15#AAdpoL9e"#TK*e&7PNu60UU_rVuijpY5GpI>50sLP@d5A2Znl&'+_Ml`/:<Y\T>r +/6!H_C23s&~> +, +3098 6960 48 43 /6H +$C +0H-5NSR;Ess8W-!s8Tdkms/EWheWql2"95c2)l)`$#mk,\7%cB:]~> +, +3158 6960 3W , +3218 6958 1G , +3270 6958 56 62 /1A +$C +,Ap0V:'Cb1Tg"9*%d8k,,W$'NTS%Y>qG#tA:$KCgqg/:sYQ+Y&m<\c`f%9dlBk<=V[[1h`_[1Jp +-.o@;>VNZrEW?(=s7sI<pOE~> +, +3338 6960 0W , +3398 6958 4X , +3459 6959 11 12 /0D +$X +*rnNUJ&)*Bs5<q8s5<q8s5<pmJ&!-+~> +, +726 6802 6F , +786 6802 2L , +846 6804 6H , +906 6802 47 45 /1X +$C ++PbNY":bub6JI/]+?BW7cp>6;dVhoQ]fg:0<qZHofDkmNmA9jMDd-Gsf%O0Q[[%b4@>(^9K!A.h +L(kIQ~> +, +966 6804 0W , +1026 6804 0W , +1078 6802 1A , +1146 6802 1G , +1206 6804 6H , +1284 6777 7I , +1334 6803 4Y , +1378 6803 0M , +1412 6803 3Q , +1462 6803 0K , +1517 6803 4Y , +1562 6803 75 49 /1X +$C +4cl(.nk$p@#I`!/LOT!8pO2+,GOWNI[sf7_j*e]>rr)6!qu:TkmJjri[dO1-rqj=D&bZKkGJEiA +XH,SaDYri#pAMGe^"^!a\$sVa]tY'0H[b\^*Q&=gG/NZ_@?)9:pMenIGIrWc%NZMn%6s~> +, +1639 6803 0I , +1711 6786 0X , +1736 6803 0U , +1780 6777 7I , +1830 6803 0M , +1864 6803 3Y , +1891 6803 0U , +1936 6803 0K , +1991 6803 1C , +2055 6803 4E , +2080 6803 4E , +2105 6803 4E , +2130 6786 5U , +1079 6684 60 69 /3F +$C +226&?X:j(Vs8W-!s8W-!s8W-!s8W-!s3*SAs8Vcls8W)e]ja4A~> +, +1140 6684 58 72 /7M +$C +/d9Kb^\ONo$/Jdgs8W-!s8W-!s8W-!s8W-!YP7E9qco"??GfF?_0Zp7?*;dfE5?Pos8W-!s7M]^ +s+AH!#Cl~> +, +1198 6682 6P , +1271 6682 3B , +1326 6684 4F , +1355 6683 6R , +1441 6682 40 49 /3J +$C +-j6.OO?qjd4WT+Y*Y<6al2Bk]s53UOW$qu[aM?1,Jl%[X5u9$7OCGa'/qIGHka0']s6FNF[_g[* +CiJm[8oV!~> +, +1484 6656 55 74 /7F +$C +3%Y6hmI,4)4=>r&qn9amhgXIsrOVILFl0+]j?`gAhs!)u2d]ipr?hQFX8\<4pIY>3Is(D_lMA*j +\l\aa"r!=,"Tb7n~> +, +1539 6684 3P , +1597 6683 4J , +1630 6683 3L , +1680 6684 51 47 /6C +$C +0HhbLCT6iu*o7X>[[4%/>?fXbXeft#>>!^U>GYf:I8\U0m^,;BmF&STVWhAmPBq,U8\.XIjoKYt +a@E.\>`fE~> +, +1757 6682 3B , +1811 6684 35 73 /6Z +$C +0Esb+"P*PPs8W-!s8W-!s8V6a07FEB%#Z/ks8W,Vqtkj:[L0nZ`p\\%_LM~> +, +1877 6682 6F , +1937 6682 4X , +1989 6682 4T , +2075 6683 3L , +2125 6684 3P , +2183 6683 6R , +2276 6665 50 62 /3L +$C +,QSa(*Ou4e)i(n?qnDP!s33hh+FG=,:SK,l5_4^;62F=JK7,(0FIu?9:]Jjms8W-![D2[BrN6%# +Zrm3>FrL(k?%WGSF&jf"@>.Nd$i~> +, +2336 6682 4X , +2388 6682 4T , +2474 6684 5T , +2503 6682 3J , +2570 6684 3P , +2629 6682 3B , +2683 6683 4J , +2741 6682 3J , +2783 6683 59 48 /7B +$C +,6G^d:()^rSt(K"WZ[OKKH'R@829B/hbX7Os8W-!s8W-!s8W-!s8K(pJ6^S3s7>3jJF\7`JS/"W +3,n?~> +, +2844 6656 6T , +2904 6656 6T , +2964 6682 3B , +3018 6684 38 47 /3Z +$C +0H#A^_V2d)s8W-!s8W-!hqnUF[?3rg<K18!0`S\NG9dORiPEE.~> +, +3058 6683 4J , +3090 6682 6P , +3138 6683 6R , +3207 6683 0D , +726 6526 6F , +786 6526 4X , +846 6528 0W , +906 6526 4X , +966 6526 2L , +1018 6526 4T , +1086 6528 3W , +1146 6526 47 45 /4V +$C ++PbNY":bub6JI/]+?BW7cp>6;dVhoQ]fg:0<qZHofDkmNmA9jMDd-Gsf%O0Q[[%b4@>(^9K!A.h +L(kIQ~> +, +1198 6528 56 43 /2V +$C +1Bn:Ro[EN6F_)fts8W-!s8W-!s8W-!s8W)srHDINZ.ep"nC!a.@>)."]2rE/0VA~> +, +1079 6406 82 71 /3Z +$C +46guKZN-XOqT6Z[95/n-Y?m$)s8$(ql$Y5b9BgjXV>oe.0;\<U?XKZ%^6e0OoY-[?qHs5gde[<D +s3gaN9Bgo>^J!g>0A"h?I4qGnnbVqEfD8(e:1,l??r:9]~> +, +1162 6406 3B , +1217 6407 4J , +1274 6408 5T , +1303 6408 2X , +1392 6380 6T , +1452 6408 4F , +1481 6406 6P , +1529 6408 2X , +1617 6406 6P , +1665 6408 3P , +1723 6407 4J , +1756 6406 6P , +1804 6407 6R , +1873 6407 0D , +726 6250 6F , +786 6250 4X , +838 6252 2V , +906 6250 2N , +984 6251 40 49 /0G +$C +-j^/!+R.k4$gs*1oGc8$K7#W86i[2dJ+rF1^O>"&otU4tpA99M[]mT"f\tene/0S~> +, +1025 6251 3Q , +1075 6251 4Y , +1119 6251 0K , +1175 6251 0K , +1230 6251 4Y , +1275 6251 1X , +1352 6251 0I , +1416 6251 1C , +1455 6251 0M , +1489 6251 39 49 /1T +$C +4lg/As8.<CJ,A^3J+)9E#`n#MM#Y3gp>9c^g[0SkC>l<:a)?;/]o.,Yh8?k7G7=c~> +, +1527 6251 3Y , +1555 6251 0K , +1603 6224 59 76 /0Y +$C +.DjA]Se*q+-la@!U7d,L:!sL9lJA/jrVs"uY?P^`[["5%X>U]qcqqVP(bh0kW%bWZ>1Kfkp?ulc +"G-kEd0[Y96+T@;VY&\_^9>$GJ+)h*s1\O#pI#f=qeL*(6sPH`;LmS\L7s;*$3~> +, +1079 6132 68 69 /3H +$C +0H$[rA+_5T6k\-D?F6%lV>cfSV>cfSV<b<XV<b<XV<b<XV<au0V:+UQI1X[;+c#3aS2\=r\(g<D +s4dQlrr<#urI<8q?C)&:<#?oJ'\G0KZ43K-~> +, +1146 6131 48 48 /3L +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +1196 6131 4J , +1228 6132 7M , +1287 6130 6P , +1334 6132 38 47 /6X +$C +0H#A^_V2d)s8W-!s8W-!hqnUF[?3rg<K18!0`S\NG9dORiPEE.~> +, +1413 6131 4J , +1446 6132 7M , +1504 6131 3L , +1554 6132 3P , +1650 6130 3J , +1692 6130 6P , +1740 6132 3P , +1798 6131 6R , +1860 6132 5T , +1889 6132 3P , +1947 6103 55 76 /4M +$C ++p6(UU(D9p_BI4g&2<;jh&tN#o\CkkFnFSgJ,d.Xs(u]/=CJ9h&r&_O@t^O*>/J*d6!EuahV:&- +aAQDs_@@-!5s.7@DNJb"HG82g\$+]hs53/>Bn"bZS_ZAA[]D/Z`.uhrTnOs!J,~> +, +2040 6131 6R , +2101 6131 3L , +2151 6131 4J , +2184 6131 3L , +2273 6131 4J , +2306 6130 3B , +2400 6131 3L , +2489 6131 6R , +2550 6132 5T , +2579 6132 6Z , +2612 6132 6Z , +2646 6130 6P , +2694 6132 6X , +2733 6130 6P , +2781 6132 3P , +2839 6131 4J , +2911 6131 3L , +2961 6104 6T , +3021 6104 6T , +3081 6132 4F , +3110 6132 5T , +3139 6130 42 49 /6L +$C +-,RJ0,D$.,dtC(&BFm314U.0';Uopg0D5AFqu:T"GOO;dD/K!tg22NP(b6GB_Li1('E~> +, +3184 6131 3L , +3234 6131 4J , +3266 6132 5T , +3295 6130 3B , +3350 6132 3P , +3408 6117 23 27 /5C +$C +0k&hmpMY93^MeSYh7p_lq5@]N~> +, +3472 6131 4J , +3505 6132 7M , +3563 6130 6P , +3657 6130 6F , +3717 6130 4X , +3769 6132 2V , +3837 6130 2N , +3929 6130 6L , +3973 6130 3B , +4028 6132 2X , +4116 6132 2X , +4205 6131 3L , +4255 6132 3P , +4313 6131 6R , +4412 6130 3J , +4454 6130 6P , +4502 6132 3P , +4560 6131 6R , +4622 6130 3J , +4702 6131 3L , +4791 6103 4M , +4847 6132 5T , +4876 6131 55 47 /0B +$C +.aN80rp/h061h@qkr8H5rjSg"8c@(ef(At+5J$]0oUGf-2d]Y_\*g;!Eo<U`1]Mt~> +, +4932 6130 6P , +4980 6132 3P , +1079 6011 1C , +1118 6011 0M , +1151 6011 1T , +1190 6011 3Y , +1218 6011 0K , +1265 5984 0Y , +1357 6011 6R , +1418 6010 3B , +1473 6011 82 48 /3X +$C +--V`>h0uuM[/YPgrB9d@+!SJRhOje2e\;&ZVUk)5[%C.MH@FT)^[7iQJ+m9?>HRpIY?pm>YNtG4 +lW<i0='tEF]"Q[tSt*;=F&6Q9h].OYhu~> +, +1556 6012 3P , +1639 6011 4J , +1672 6012 7M , +1730 6010 6P , +1803 6012 60 69 /5R +$C +1BfGjiK1'#,=ctPrr<#qs8MRA)uos<s8W-!s8W-!s8W-!s8T[WEraVc~> +, +1864 6012 5T , +1893 6012 2X , +1981 6011 51 73 /2Z +$C +5EglT+SH@k^#U$'FpL$[_nllJqgH5-rV-'chuE_+s8Vrqrg*Md?)<,t[I'gC0OD_A]3VSk$n_r) ++92B@s8W+%2$O#4bf,_b~> +, +2037 6010 3B , +2116 6010 6L , +2161 6012 7M , +2219 6011 3L , +2269 6012 3P , +2327 6012 3P , +2385 6010 6P , +2433 6012 4F , +2487 6011 3L , +2537 6010 3J , +2580 6010 3J , +2622 6010 3B , +2677 6010 6L , +2721 6012 5T , +2750 6011 3L , +2800 6011 4J , +2833 6010 6P , +2881 6011 6R , +2967 6011 3X , +3050 6012 5T , +3079 6011 4J , +3112 6012 7M , +3193 6011 0G , +3234 6011 3Q , +3284 6011 4Y , +3328 6011 0K , +3384 6011 0K , +3439 6011 4Y , +3484 6011 1X , +3561 6011 0I , +3609 5997 5C , +3659 6011 3L , +3709 6010 3J , +3776 6010 3J , +3819 6010 6P , +3867 6011 4J , +3924 6011 2Z , +3980 5984 7F , +4059 6012 2V , +4127 6010 1G , +4179 6012 61 43 /3Q +$C +2AdhJ:_A3Oo1(F=qu?]rs8W-!s8W-!s8W-!s8W-!s8W-!pO;Seqb;8cG?JF`D.WiQ<gR9_Y1)/_ +(f=s(~> +, +4247 6010 4X , +4307 6010 2L , +4359 6012 57 60 /2X +$C +1Bn>>`B3dnFC`;hs8W-!s8W-!s8W-!s8W)sqd%e)/9[@sHYIX?9<hd*(gJc)s8W-!r:jIm^]~> +, +4427 6010 1G , +4479 6012 2V , +4548 6011 0D , +718 5854 4T , +786 5854 4X , +838 5856 57 42 /3R +$C +1Bn>>`AIOjTZI4d[["5%V/7_s>>!UMd^GFJTsPQAXefkb'l)8[FQeq":"!pCFIT)^-L!H\\kUUj +PB<:G+cQNO:A(N8~> +, +898 5854 4T , +984 5829 7I , +1034 5855 4Y , +1078 5855 0M , +1112 5855 48 74 /0S +$C +09hbl>TVA,5COXAaL:g$L\BU9fR*)%mr/6_pAa#sg])`WYXF!8pAMGWIdR.5[sbaQpL4$8D;Pad +Z1kbV^CS6OeZo/QhuC=g^\qf]O!k."KnI5"~> +, +1162 5855 0K , +1217 5855 4Y , +1262 5855 1X , +1339 5855 0I , +1411 5838 0X , +1436 5855 0U , +1480 5829 7I , +1530 5855 0M , +1564 5855 3Y , +1591 5855 0U , +1636 5855 0K , +1691 5855 1C , +1755 5855 4E , +1780 5855 4E , +1805 5855 4E , +1830 5838 5U , +1079 5736 3F , +1140 5736 7M , +1198 5734 6P , +1279 5734 2N , +1331 5734 56 44 /6N +$C +,i""TKGgGEK="%NoE_*ncnOSP#WMH?#HR+dp](9ns8W-!s8W-!s8W-!s6%7`i:[+oJ,~> +, +1391 5736 3Q , +1451 5717 56 62 /1I +$C +3!q,3aUeFOs8W,sL(f.]^j&07KBS.Ncm,Lc$,2!#oUEfYVpfsAH@Pgis8W,r?GEo@[G>\?a(]_F +m=`,+Ph9rm$$Ii'Xr("?'E~> +, +1538 5734 3J , +1580 5735 7B , +1641 5735 2Z , +1696 5734 6L , +1740 5734 3B , +1795 5736 88 47 /5V +$C +0Eoc'K:jmrq)D8+/;`aO>(?SPs8W-!s8W-!s8W-!s8W-!s8W-!ri?'Cm5<d*9l_ZL&>Ouf@AMUU +!4rFJ@)DUq/%!gM.m^-W@A]^a-57F:+CLi~> +, +1883 5736 5V , +1972 5735 3L , +2022 5736 3P , +2080 5735 6R , +2165 5736 5T , +2194 5734 3J , +2262 5736 3P , +2320 5734 3B , +2375 5735 4J , +2434 5736 5T , +2463 5736 5V , +2551 5708 6T , +2611 5736 4F , +2641 5734 6P , +2688 5736 5V , +2777 5734 6P , +2825 5736 3P , +2883 5735 4J , +2915 5734 6P , +2963 5735 6R , +3032 5735 0D , +3075 5736 3F , +3136 5736 7M , +3194 5734 6P , +3275 5762 5F , +3335 5736 6H , +3395 5734 4X , +3455 5717 50 62 /3L +$C +,QSa(*Ou4e)i(n?qnDP!s33hh+FG=,:SK,l5_4^;62F=JK7,(0FIu?9:]Jjms8W-![D2[BrN6%# +Zrm3>FrL(k?%WGSF&jf"@>.Nd$i~> +, +3515 5734 4X , +3567 5736 3R , +3627 5717 1I , +3715 5736 5V , +3803 5734 3B , +3858 5735 6R , +3919 5734 6P , +3994 5734 3B , +4049 5736 6Z , +4109 5735 4J , +4142 5736 7M , +4200 5734 6P , +4282 5734 6F , +4342 5734 4X , +4402 5734 1G , +4462 5736 6H , +4522 5734 2L , +4574 5736 2X , +4662 5734 3J , +4704 5735 7B , +4765 5735 2Z , +4820 5734 6L , +4864 5734 3B , +4919 5736 5V , +5007 5758 6A , +1079 5616 5V , +1167 5615 48 48 /6J +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +1217 5616 3P , +1275 5615 6R , +1362 5616 5T , +1391 5614 3J , +1458 5616 3P , +1516 5614 3B , +1571 5615 4J , +1628 5616 5T , +1658 5616 5V , +1746 5588 6T , +1806 5616 4F , +1835 5614 6P , +1883 5616 5V , +1971 5614 6P , +2019 5616 3P , +2077 5615 4J , +2110 5614 6P , +2158 5615 6R , +2227 5615 0D , +718 5458 4T , +786 5460 48 60 /0O +$C +,D@S_MVl*@fa*!YQV41'l#aLB/sf5-db7nuBjmiqb8kc<I>?S9^>Ek<fR:IQmIpF)L'3#)Y!;sd +s8V/![Jg~> +, +864 5459 0U , +908 5433 7I , +958 5459 0I , +997 5459 1T , +1036 5459 4Y , +1081 5459 0M , +1114 5459 3Y , +1142 5459 0U , +1186 5459 0K , +1274 5442 0X , +1299 5459 4Y , +1343 5459 1T , +1374 5432 0Y , +1457 5459 4E , +1482 5459 4E , +1507 5459 4E , +1532 5442 5U , +1079 5338 3Z , +1162 5338 3B , +1217 5339 4J , +1274 5340 5T , +1303 5340 5V , +1392 5312 6T , +1452 5340 4F , +1481 5338 6P , +1529 5340 5V , +1617 5338 6P , +1665 5340 3P , +1723 5339 4J , +1756 5338 6P , +1804 5339 6R , +1873 5339 0D , +718 5182 4T , +786 5184 0O , +846 5182 4X , +906 5184 6H , +966 5184 6H , +1026 5182 4V , +1086 5184 6H , +1079 5062 3Z , +1162 5062 3B , +1217 5063 4J , +1274 5064 5T , +1303 5064 5V , +1392 5036 6T , +1452 5064 4F , +1481 5062 6P , +1529 5064 5V , +1617 5062 6P , +1665 5064 3P , +1723 5063 4J , +1756 5062 6P , +1804 5063 6R , +1873 5063 0D , +718 4906 4T , +786 4908 0O , +838 4908 59 42 /3O +$C +.En\QohYJ]jr\`Q9RhBgrn!t<huDF/ldtg:S+$CWBlou^n*MdCl9;T4J,c[8hqsLnFh[nRi%@<M +4o<_~> +, +906 4906 1G , +966 4908 3W , +1018 4906 4T , +1104 4907 0U , +1148 4881 7I , +1198 4907 0I , +1237 4907 1T , +1276 4907 4Y , +1321 4907 0M , +1354 4907 3Y , +1382 4907 0U , +1426 4907 0K , +1507 4907 0K , +1562 4907 4Y , +1607 4907 1X , +1684 4907 0I , +1079 4786 3Z , +1162 4786 3B , +1217 4787 4J , +1274 4788 5T , +1303 4788 5V , +1392 4760 6T , +1452 4788 4F , +1481 4786 6P , +1529 4788 5V , +1617 4786 6P , +1665 4788 3P , +1723 4787 4J , +1756 4786 6P , +1804 4787 6R , +1873 4787 0D , +718 4630 4T , +786 4630 4V , +838 4613 1I , +906 4632 0W , +966 4630 4X , +1018 4632 4Z , +1086 4630 4X , +1146 4632 0W , +1224 4605 7I , +1274 4631 4Y , +1318 4631 0M , +1352 4631 0S , +1402 4631 0K , +1457 4631 4Y , +1502 4631 1X , +1579 4631 0I , +1651 4614 0X , +1676 4631 0U , +1720 4605 7I , +1770 4631 0M , +1804 4631 3Y , +1831 4631 0U , +1876 4631 0K , +1956 4631 49 49 /1K +$C +2%'[N%\3idSEM*PS)LqQp@\.VID>LSpV$=q^?tsV\,GcDhY4b_^Y+U\gYMb7hmV(DblQhPmqb2A +]2h^#:]~> +, +2006 4631 4Y , +2051 4631 26 74 /3U +$C +4QnmjiU7:$_r8<HGAE95s7ZKehtR$Is*rpUqsXQ5s6]jcn,M;>qlJ-\n8,!:*&m~> +, +2079 4631 52 49 /0E +$C +1br@`BKS-G%hA=EGEH=>3tI)8h[Su?iSCr[g\ZJ=]>!%6hs^",gV2SF[RVtk[ep*<msfia]C5cF +`SEHL&)i8HA%V7/pibWkEiso~> +, +2134 4631 0I , +2181 4631 0D , +2206 4631 0D , +2231 4631 0D , +2248 4614 5U , +1079 4512 3F , +1140 4512 7M , +1198 4510 6P , +1246 4512 6X , +1286 4510 6P , +1369 4512 5T , +1398 4510 3J , +1475 4512 3P , +1533 4510 3B , +1622 4510 4T , +1690 4510 4V , +1742 4493 1I , +1810 4512 0W , +1870 4510 4X , +1922 4512 4Z , +1990 4510 4X , +2050 4512 0W , +2138 4512 3F , +2199 4511 56 73 /6F +$C ++LJp$5kmV@ADpOa$L)XK9;U)$FLka1QV41'l#aLB/sf3GX^kL=qgH2riP+2XpA99P(k'-9mIh'p +IJ`R7s8W-!s8K>)a7J5P5dOC>~> +, +2290 4510 6L , +2334 4510 3B , +2389 4512 5V , +2477 4512 5V , +2566 4511 6J , +2616 4512 3P , +2674 4511 6R , +2770 4512 5T , +2799 4512 5V , +2887 4484 6T , +2947 4512 4F , +2977 4510 6P , +3024 4512 5V , +3113 4510 6P , +3161 4512 3P , +3219 4511 4J , +3251 4510 6P , +3299 4511 6R , +3396 4511 2Z , +3451 4484 7F , +3543 4511 4J , +3576 4512 7M , +3634 4510 6P , +3725 4510 2L , +3777 4512 3Q , +3845 4510 2N , +3934 4512 6Z , +3967 4511 7B , +4028 4512 3P , +4086 4510 6L , +4130 4511 4J , +4163 4512 5T , +4192 4510 3B , +4246 4512 3P , +4305 4497 23 61 /1M +$C +0k&hmpMY93^MeSYh=p[<GW$"$s8V\cKH39Qs(g>C'E~> +, +4365 4512 5T , +4394 4512 3P , +4452 4510 3J , +4495 4511 4J , +4527 4510 6P , +4575 4511 6J , +4625 4511 6R , +4686 4497 5C , +4747 4511 4J , +4780 4512 7M , +4838 4510 6P , +4922 4512 3F , +4983 4511 6F , +1079 4392 5V , +1167 4390 3B , +1222 4391 6R , +1283 4391 7B , +1343 4392 4F , +1372 4390 6P , +1450 4390 6P , +1498 4392 3P , +1556 4391 4J , +1589 4392 6X , +1628 4364 7F , +1714 4364 6T , +1774 4390 3B , +1829 4392 5T , +1858 4392 3P , +1916 4391 4J , +1977 4390 4T , +2045 4390 4V , +2097 4373 1I , +2165 4392 0W , +2225 4390 4X , +2277 4392 4Z , +2345 4390 4X , +2405 4392 0W , +2487 4392 5T , +2516 4390 3J , +2587 4391 7B , +2647 4390 3J , +2690 4390 6P , +2738 4391 6R , +2827 4391 4J , +2860 4390 3B , +2944 4392 5V , +3032 4391 6J , +3082 4391 6F , +3138 4390 6P , +3215 4391 4J , +3248 4390 3B , +3302 4364 6T , +3362 4392 4F , +3391 4390 6P , +3439 4391 0B , +3496 4390 6P , +3544 4392 4F , +3603 4391 3X , +3686 4392 5T , +3715 4391 6R , +3777 4363 4M , +3832 4390 6P , +3880 4391 4J , +3913 4390 3J , +3984 4371 31 93 /5Z +$C +"KA5$<2ioaX%J_TkuZ=+f<21RX8]1"oY:G+s8W,ds8D]jp[@j)hqRkn]A*&HgV(4BmCQ0~> +, +4017 4391 3X , +4101 4392 5T , +4130 4392 3P , +4188 4391 6R , +4249 4390 3B , +4304 4391 3X , +4387 4390 3J , +4429 4371 28 93 /3D +$C +3RbHUG4"&?]C+PE]C,RirpTT2^[Jr;^An65s3grIWrK*t='h6DF^7nJWD_7r<2jY:J,~> +, +4490 4391 6J , +4540 4390 3J , +4611 4391 6R , +4672 4390 6P , +4720 4390 3J , +4762 4390 6L , +4807 4392 6X , +4846 4392 5T , +4875 4391 2Z , +4931 4390 6P , +4979 4391 6R , +1079 4271 6J , +1129 4271 2Z , +1184 4270 3B , +1239 4271 0B , +1295 4270 6P , +1351 4271 0D , +718 4114 6N , +778 4097 1I , +846 4114 2N , +906 4114 1G , +958 4114 4T , +1026 4114 4X , +1079 3996 33 69 /0P +$C +0H%XJ!UM?&s8W-!s8W-!s8W-!s8W-!s8W-!s)k!s!MdF~> +, +1113 3996 3P , +1234 3996 3F , +1295 3994 6L , +1340 3996 4F , +1377 3984 45 85 /3D +$C +/mdGEmJh+ZpA_VhqgRGrrP*:*rnk3Ps)6ZcrP.asIc%X5^Mhm+hm`"MJ(s\q^Mj!W~> +, +1429 3996 3F , +1491 3995 6F , +1546 3981 5C , +1633 3994 6N , +1693 3977 1I , +1761 3994 2N , +1821 3994 1G , +1873 3994 4T , +1941 3994 4X , +2057 3996 5T , +2086 3994 3J , +2192 3995 6J , +2306 3996 3F , +2367 3994 6L , +2412 3996 4F , +2504 3994 6L , +2548 3994 3B , +2603 3996 5V , +2691 3996 5V , +2780 3995 6J , +2830 3996 3P , +2888 3995 6R , +3012 3995 4J , +3045 3996 7M , +3103 3995 6J , +3153 3995 4J , +3250 3996 5T , +3279 3996 3P , +3337 3995 0B , +3394 3994 3B , +3448 3995 6F , +3504 3994 6P , +3552 3994 3J , +3659 3995 4J , +3692 3996 7M , +3750 3994 6P , +3862 4041 24 26 /1F +$C +4RdSWJ)B.-pUBV'g\1)S_dTJ~> +, +3890 3994 6P , +3938 3995 0B , +3994 3994 6P , +4042 3996 3P , +4100 3995 4J , +4198 3996 7M , +4256 3995 6J , +4306 3996 3P , +4364 3995 6R , +4425 3996 4F , +4455 3994 6P , +4502 3996 6X , +4606 3996 4F , +4635 3994 3B , +4690 3994 3B , +4744 3968 6T , +4804 4041 24 26 /5E +$C +4`80npM\gBpUfn^qtp@3,7GK@~> +, +4840 3995 0D , +4947 3996 0P , +4981 3996 3P , +1079 3876 5R , +1140 3876 5T , +1169 3876 5V , +1257 3875 2Z , +1313 3874 3B , +1375 3864 3D , +1428 3876 3F , +1489 3875 6F , +1545 3861 5C , +1598 3876 5T , +1627 3875 4J , +1688 3876 6Z , +1721 3876 4F , +1750 3875 7B , +1811 3874 3J , +1853 3876 7M , +1911 3874 6P , +1959 3874 3J , +2028 3875 6J , +2078 3876 3P , +2136 3848 7F , +2220 3848 6T , +2280 3874 6P , +2328 3876 3P , +2386 3875 6R , +2447 3876 5T , +2476 3876 3P , +2535 3847 4M , +2618 3875 7B , +2678 3848 6T , +2738 3875 6R , +2799 3875 6J , +2849 3875 4J , +2882 3874 6P , +2930 3874 3J , +3000 3875 4J , +3033 3874 3B , +3116 3875 4J , +3149 3876 7M , +3207 3874 6P , +3283 3874 3J , +3325 3874 6L , +3370 3876 6X , +3409 3874 6P , +3457 3874 6P , +3505 3876 3P , +3571 3875 0D , +3641 3876 3F , +3702 3876 7M , +3760 3874 6P , +3836 3874 3B , +3891 3848 6T , +3951 3875 4J , +3983 3876 5T , +4012 3874 3B , +4067 3876 3P , +4125 3875 6J , +4175 3876 4F , +4240 3876 3W , +4300 3874 2N , +4360 3876 0W , +4420 3874 4X , +4472 3874 4T , +4540 3874 1G , +4600 3874 43 45 /6F +$C +--Bs+k9*%T&:G,"nKk6P"+"kk2m9\ds6X:'>#;Fq8V0QRcT29O5bS`qZp[t!6#*3fV#UJ^D6DID +fJ$MB6gQEDC((Zh~> +, +4660 3876 0O , +4720 3874 6F , +4800 3875 6J , +4850 3876 6X , +4890 3847 4M , +4945 3875 7B , +5005 3898 6A , +1079 3756 5V , +1167 3754 6P , +1215 3756 3P , +1273 3755 4J , +1331 3756 5T , +1360 3754 3J , +1427 3756 3P , +1486 3754 3B , +1540 3755 4J , +1598 3756 6X , +1637 3754 6P , +1685 3754 6L , +1730 3754 3B , +1784 3727 4M , +1840 3756 3P , +1898 3756 5T , +1927 3754 3J , +1970 3754 6P , +2017 3755 6R , +2087 3755 0D , +718 3600 3O , +786 3600 3W , +838 3600 2V , +906 3600 48 60 /3F +$C +3#\:_Rc"/Fs8W-!s8W-!s8SZ":&Re)s8W)TmI%f]?&K12K-?0~> +, +966 3598 4V , +1044 3599 0U , +1088 3573 7I , +1138 3599 0I , +1177 3599 1T , +1216 3599 4Y , +1261 3599 0M , +1294 3599 3Y , +1322 3599 0U , +1366 3599 0K , +1454 3582 0X , +1479 3599 4Y , +1523 3599 1T , +1554 3572 0Y , +1637 3599 4E , +1662 3599 4E , +1687 3599 4E , +1712 3582 5U , +1079 3478 3Z , +1162 3478 3B , +1217 3479 4J , +1297 3480 5T , +1326 3480 5V , +1414 3452 6T , +1474 3480 4F , +1504 3478 6P , +1551 3480 5V , +1640 3478 6P , +1688 3480 3P , +1746 3479 4J , +1778 3478 6P , +1826 3479 6R , +1895 3479 0D , +1959 3479 94 70 /4N +$C +-+(H9aM?$Ks!JC6&0BE>['/o/rr;p]s%i[Hne'd2rAXEL:&TRjIp_j*s62KBqG%"hPCNV/s)76& +S,3/^rkI^4s3bicoUGmZ-NF*;^]2`3p[l5fr@e%ts.nQP`A.BgrBKr1H;$>Ld350/qnN~> +, +2054 3479 7B , +2114 3478 6L , +2158 3480 7M , +2263 3478 3B , +2318 3480 6Z , +2398 3479 4J , +2431 3480 7M , +2489 3478 6P , +2584 3480 5T , +2613 3480 3P , +2671 3480 6Z , +2705 3478 3B , +2759 3480 6X , +2799 3480 5V , +2887 3479 6J , +2937 3479 4J , +2970 3480 5T , +2999 3478 3B , +3053 3480 3P , +3159 3479 4J , +3192 3480 7M , +3250 3479 6J , +3300 3479 4J , +3379 3480 3O , +3447 3480 3W , +3499 3480 2V , +3567 3480 3F , +3627 3478 4V , +3727 3479 3X , +3810 3478 3B , +3865 3479 7B , +3925 3480 4F , +3954 3479 6R , +4062 3480 6X , +4102 3478 6P , +4149 3479 4J , +4182 3479 7B , +4242 3480 6X , +4282 3480 3P , +4388 3478 6L , +4432 3479 6J , +4482 3480 3P , +4587 3479 2Z , +4642 3478 6P , +4737 3451 4M , +4793 3478 3B , +4847 3479 4J , +4928 3479 2Z , +4983 3452 7F , +1079 3359 6J , +1129 3332 6T , +1189 3332 6T , +1249 3360 4F , +1278 3332 7F , +1334 3360 5T , +1363 3360 3P , +1421 3331 4M , +1509 3358 2L , +1569 3341 3L , +1629 3358 4X , +1681 3358 4T , +1767 3359 4J , +1800 3358 3B , +1879 3358 6P , +1927 3359 6J , +1977 3358 6L , +2021 3360 7M , +2105 3359 3X , +2188 3360 5T , +2217 3359 6R , +2278 3331 4M , +2334 3358 6P , +2382 3359 4J , +2422 3359 0D , +718 3204 3O , +778 3204 3Q , +864 3203 0U , +908 3177 7I , +958 3203 0I , +997 3203 1T , +1036 3203 4Y , +1081 3203 0M , +1114 3203 3Y , +1142 3203 0U , +1186 3203 0K , +1267 3203 71 49 /5E +$C +3Y;p"JV5%#*oYRCLeDb7]`umol+.>ugT,GQYA_/4DuK(tg[4b6qda`^mrgeipV$Om^A[rcpODpe +[r;/PrVq*!ZQ"C3hY6a#]D]3Ll!&#bO0.kghg8E7eW\EsRXb~> +, +1339 3203 3Y , +1367 3203 0K , +1422 3203 49 74 /4K +$C +3+QNlE;"q%\p(Z2D^*hS3-oKO4s+^PLZ,rDDEYW!rVpfjme=0iA9./6^A!'SrSQAernG3bDgUAj +hflPQf#%Zr_qTs!,"=f+s51Tgp]#]J2@Jl/JeFbC_gh~> +, +1472 3203 0U , +1517 3203 5E , +1621 3186 0X , +1646 3203 4Y , +1690 3203 1T , +1721 3176 0Y , +1804 3203 4E , +1829 3203 4E , +1854 3203 4E , +1879 3186 5U , +1079 3082 3Z , +1162 3082 3B , +1217 3083 4J , +1274 3084 5T , +1303 3084 5V , +1392 3056 6T , +1452 3084 4F , +1481 3082 6P , +1529 3084 5V , +1617 3082 6P , +1665 3084 3P , +1723 3083 4J , +1756 3082 6P , +1804 3083 6R , +1873 3083 0D , +720 2842 47 68 /0W +$C ++NdW;+G5=f3[!o4!Y*QgX/gPa^955#FMI_Q?iOL1p%qCbf*isd+G6`nY1IHDXg#;h>]9@dDr0@> +DV_pJmFZBqZ4;E+B<^l?7#(~> +, +770 2843 20 15 /2H +$C +1`Rl=FT;<CC)Bb~> +, +795 2844 46 67 /6W +$C +4rW=((^sTUs8W-!s8W-!s8W-!s8W-!S6ZBXr'(_0n\`3(0\H\`_nk9d*ZBP~> +, +845 2843 2H , +920 2844 71 68 /5N +$C +2@V";c`XuW"<^a,<i`(Kf1W<MQhju@oX\DoFMH8gJ#2J79@mL:YOZZ1(k%1WID4TWhf%D%J,d:` +rI=g[0"ikQQmG(r^lo-6+K,h~> +, +992 2842 46 49 /2I +$C ++U++g6m1FjKH4dS%@Npn#4R8n%;9Hkde`s0run4!%=!O$"j!oDs6oj9f)MddD(?#G0i6DS%7:I2 +M4a~> +, +1042 2844 38 72 /4F +$C +0F]-"5Wu=Ns8W-!s8W-!s8U>r<ppP0G[s$`s8W-!J+%`.$J8Ar:r_qk*PoM~> +, +1081 2842 2I , +1131 2844 39 47 /2K +$C +0H$MYTKVuJs8W-!s8W-!pTf^+(gLC'+S,W)pYU$GG9Me#iPF:~> +, +1170 2842 2I , +1220 2844 59 47 /3B +$C +/fA4$TE!.:j:ducs8W-!s8W-!s8W-!s8W-!YP,S6V*Tg/bD(U.Ap1dlk(&#^$q:pOW&S<Uhu~> +, +1281 2842 41 49 /4I +$C ++N9T']F[%ge#bGo7o1=Q5gn17;Yp%#qZ$Tos!&T^s1`I=XnrMYL)(WnLN)4+"pt~> +, +1325 2842 2I , +1375 2842 40 49 /7E +$C +3f>g'n3Oo%%j7D36+e>sT3%oiqqqCITh04KCBXhpb6^M`XXX\d$A^)?6ToH"%MlEM^]+8HpKJ%X +L).gSG[X3`GQ~> +, +719 2688 0Z , +777 2687 0D , +969 2668 32 89 /1S +$C +0>[sLLV<.0SdDp9pM]O!s7cQns8W-!s8W-!s8W-!s8W-!s8W-!rh"i`^h3?~> +, +1002 2686 52 49 /5Z +$C +-,RJ#Jd4TY+S0[\0^1M^2l>gu<qXnToWS5,FoUmEs8W%)rjpk_Fh_cG[d)RJ9#F9R9#61SMQibj +PlW!~> +, +1057 2688 7M , +1115 2688 3P , +1206 2688 73 69 /2R +$C +0H$[R@pCHJ3['Di+Kh#nl#aLB/sf5-dckkb$`2;9FLka1QV41'i@^HiV:*=u$R-(m?2K&ahf$!V +ID-ZfpA99Phf#arID4TW\(g<Dq[[Po\daEK)6sZ@rV~> +, +1312 2686 78 73 /0R +$C +,@H[r)o3*1<Y05+0Q?6.V[a8(LHu..-Kt^T-L!H]kr22IF`1>_e^_?U^A@/FfA$7RlMpnas8Uo) +YM8pQosObaCO3S[Xeg0KQI<4+2O1YN0U7A(:r.`[a?P@e6A#FG6+Ja%,Q~> +, +1391 2687 7B , +1451 2686 3J , +1493 2687 4J , +1526 2686 6P , +1574 2688 6X , +1613 2688 7M , +1671 2686 5Z , +1726 2687 7B , +1786 2687 4J , +1819 2673 5C , +1878 2688 64 69 /0Q +$C +,R.TQL^Rttqg\Wos8B_4pAb0Is8T_2rpTma^Rh`;hr"D2mskB:s51:[OIA`Ai]k3~> +, +1939 2687 0G , +1980 2687 3U , +2041 2687 4Y , +2085 2687 0K , +2141 2687 4K , +2224 2687 0M , +2257 2687 0S , +2307 2687 0I , +2379 2688 0Q , +2440 2687 46 74 /2O +$C +09UKL\9M`_G>H-?M!r].g-P^$0Aa.O]&'pg^Mi@ThpS`bs4a^uhX,Odhn@e3pj6qgFrtX=+(R)& +II?tC_g#sVp]'(LqtL!eZf&RZ!0^6`GWY~> +, +2517 2688 0Q , +2578 2687 0U , +2622 2687 0U , +2667 2687 3U , +2695 2687 2O , +2739 2687 3Y , +2767 2687 0M , +2807 2673 5C , +2865 2688 77 70 /5Y +$C +/d_ribJ29<O`89m(g$03D:`"Cqka1(IsocD[(gLij0e8bea:smqb-YKXh*hJBn"l\\+Hlk/,QKX +rg!GYIs#nSX6TPreb+?8~> +, +2943 2687 6R , +3004 2687 6R , +3065 2688 5T , +3094 2686 3J , +3136 2686 5Z , +3191 2688 3P , +3249 2710 6A , +3283 2687 99 71 /5H +$C +.L_Q,IJnZ-WrI:o^Aa`(d1CVQj?`fImFP^Y3r\CDh-45lJ)@]DqWceK^AhPWHM%&_rNH(_g:.+2 +fBn(Te[kFWhf%=nfBq1l>OV6rrjSd!rI8.TD>No)m^2rkIqn;aYJ&E[:4dNE@E:^es&cf7%DV~> +, +3383 2686 6P , +3430 2686 3J , +3473 2688 28 72 /4F +$C +0EsY0/Z\pOs8W-!s8W-!s8W-!s8W-!s8W-!lS&`s4p`JB2)k~> +, +3502 2686 6P , +3550 2660 7F , +3638 2688 59 69 /4M +$C +0H%XJ!UM?&s8W-!s8W-!s78N96ntkUT_tep`#I[Lhf$!Ys)7o6s53kVli3g\QX1<'9+2Gd.UX,J +Z5ZsI~> +, +3698 2687 7B , +3759 2687 2Z , +3814 2688 4F , +3843 2688 5T , +3872 2686 3J , +3915 2688 7M , +3973 2688 5T , +4002 2688 3P , +4060 2659 55 76 /4M +$C ++p6(UU(D9p_BI4g&2<;jh&tN#o\CkkFnFSgJ,d.Xs(u]/=CJ9h&r&_O@t^O*>/J*d6!EuahV:&- +aAQDs_@@-!5s.7@DNJb"HG82g\$+]hs53/>Bn"bZS_ZAA[]D/Z`.uhrTnOs!J,~> +, +4148 2686 68 73 /5B +$C +,(YRQ!t[`UJ\hm/%0QnAJHaj2#G?]gJe(-OdL@`W<Mc^%Q_j@^YNtl]s8W&srVl9Qqdd,6hf$9D +hf$!ACLO,LKn^Eq0OV-+A+7Db0N'/"jJ4%~> +, +4219 2686 5Z , +4273 2688 5V , +4362 2660 6T , +4422 2687 6J , +4472 2688 3P , +4530 2660 7F , +4586 2673 5C , +4645 2688 3H , +4712 2686 6P , +4760 2687 6J , +4810 2687 6R , +4871 2688 5T , +4900 2688 3P , +4958 2659 4M , +5014 2673 5C , +969 2567 4N , +1064 2567 6J , +1114 2566 3J , +1156 2566 3J , +1198 2567 6J , +1248 2566 6L , +1293 2568 7M , +1351 2567 7B , +1411 2566 3J , +1454 2566 6P , +1502 2567 4J , +1534 2567 4J , +1567 2566 3J , +1609 2553 5C , +1659 2568 0Z , +1709 2566 46 71 /6E +$C +-fG0#Ee,@L_[[W?*OoP4[gh*J]6C`rmea`sk-8e0L-H"6K5R;WU(9306,*[[Bg"L`o_t2lfDkm& +n+H?ls%;26g>+9-L6]!.K*bYY@7(ApM#~> +, +1759 2566 6E , +1809 2568 48 69 /0T +$C +21n\f@.;aLJ,fQKjhY/&h3M<(5D*m`rnmU$^\7]^mJjZphf&J-rqh34p\3GBDnj$Dq]5Y(]D+KN~> +, +1867 2567 0D , +719 2412 5S , +777 2411 0D , +969 2412 59 69 /1O +$C +0H%XJ!UM?&s8W-!s8W-!s78N96ntkUT_tep`#I[Lhf$!Ys)7o6s53kVli3g\QX1<'9+2Gd.UX,J +Z5ZsI~> +, +1029 2411 6J , +1079 2411 7B , +1140 2412 4F , +1194 2412 3H , +1261 2411 6J , +1311 2412 5T , +1340 2412 3P , +1398 2410 6P , +1446 2410 3J , +1513 2411 6J , +1563 2412 3P , +1621 2411 6R , +1707 2392 1S , +1741 2410 6P , +1789 2412 6Z , +1822 2412 6Z , +1880 2412 60 69 /6D +$C +226&?X:j(Vs8W-!s8W-!s8W-!s8W-!s3*SAs8Vcls8W)e]ja4A~> +, +1942 2412 6X , +1981 2411 6J , +2031 2412 3P , +2089 2411 4J , +2122 2410 5Z , +2176 2412 6X , +2216 2397 5C , +2265 2412 0Q , +2326 2411 0G , +2367 2411 3U , +2387 2400 48 85 /2T +$C +3*-'gmJD@ipAMaEqgRG3mJh+ZpA_VhqgRGrrP*:JIc%X5^Mhm#s0qCmJ(s\q^Mj!W~> +, +2424 2412 0Q , +2485 2411 2O , +2555 2411 3Y , +2582 2411 0K , +2663 2411 4Y , +2732 2411 81 70 /5A +$C +.jZEmIqsL\7,b>Q>Q'!Ck_MG"m4\K3qY.1hqu2rZl$#etm4\K3m_>s$qu2l<qHlnQoUkl"^6ek6 +Is\#AqHlnQoUc$R^6ek6GMa-]s0):1^:6f#SBM6_5i6n'~> +, +2810 2411 0E , +2866 2411 0M , +2899 2411 1C , +2938 2411 0S , +2988 2411 0I , +3027 2411 3U , +3055 2411 3U , +3092 2397 5C , +3142 2410 0R , +3221 2457 24 26 /5E +$C +4`80npM\gBpUfn^qtp@3,7GK@~> +, +3248 2412 3H , +3315 2410 6P , +3363 2412 5T , +3392 2412 4F , +3421 2412 4F , +3450 2384 7F , +3506 2397 5C , +3556 2410 51 73 /0F +$C +3eBr>]F[%gd07f:#T.^j2hW.!H>cOTn(ZCm^V@hHl`-t<Tk"Qfa?[n4i6aRf>U9\C$@u_DF[QV( +6o1X#^sjhA>1_C+gk"A^mf2\K?1uk'fO6iM/21^fM\)S6K*<aDJ,~> +, +3608 2410 6P , +3656 2411 2Z , +3712 2411 6J , +3762 2410 3J , +3804 2411 4J , +3837 2410 5Z , +3891 2384 6T , +3951 2410 5Z , +4006 2412 4F , +4035 2397 5C , +4085 2410 5B , +4156 2411 6J , +4206 2412 4F , +4235 2412 5T , +4264 2412 6Z , +4297 2410 5Z , +4352 2412 6X , +4392 2412 3P , +4450 2412 5T , +4479 2411 6J , +4529 2397 5C , +4579 2412 0Z , +4629 2410 6E , +4679 2410 6E , +4729 2410 6E , +4787 2411 0D , +719 2254 47 71 /6J +$C +3WtXt'>Rrc+m9sQ0^'Y9K6gtko\CnhVX*OElJqjCl_Wo>ZVjF#$"C;N@&6u`h7-nJh7N-"hjen? +qtf4(m<4c&_b11AMMA6:L(l>7_*@~> +, +777 2255 0D , +969 2256 58 69 /1Z +$C +1CW&nPtW/Om"HQF"*Y4Dhf$!Yn*e$+p]&#.s8U]R^Zfn*E0glO(bphK/;$Er=V-/u9Gi.9_[j62 +pY5^ds7cQnrI=g5?BmkH8e@u+<Plgml2~> +, +1055 2255 5H , +1180 2256 2R , +1253 2254 6P , +1301 2256 6X , +1340 2256 3P , +1398 2256 5T , +1427 2227 4M , +1483 2256 7M , +1541 2255 48 48 /3L +$C +,RFdA"qZ*,E[N!q+as1q5*0^3++6A&s8Dor\,P8nnAFT7%"`X2L'Ph>d3QUB2C8CoFk>>Sg@a0( +=DSVTg4g;!-,Mn~> +, +1591 2256 3P , +1649 2241 5C , +1699 2301 1F , +1727 2301 1F , +1755 2256 76 69 /7O +$C +4rTguUl69IG!RVg_C>RG2fQ\%nDA/ng[4b&qsX!g^Ae/es8Du4s6p!fs8W,k^]4>1s':%ql$D[D +l#;sqE.Y&i$gac#&;2K_363NOOB!t~> +, +1832 2254 6P , +1880 2254 3J , +1923 2254 6L , +1967 2254 6P , +2015 2256 3P , +2073 2255 4J , +2131 2256 5T , +2160 2256 3P , +2218 2255 4J , +2251 2254 5Z , +2330 2256 5R , +2391 2256 5T , +2420 2256 5V , +2509 2255 2Z , +2564 2254 5Z , +2619 2301 5E , +2646 2301 5E , +2674 2241 5C , +2724 2254 6P , +2772 2256 4F , +2801 2254 3J , +2844 2254 6P , +2892 2255 3X , +2975 2256 7M , +3033 2254 6P , +3081 2256 6X , +3121 2254 6P , +3193 2256 5T , +3223 2256 3P , +3306 2255 4J , +3338 2256 7M , +3397 2256 5T , +3426 2254 3J , +3493 2255 0B , +3550 2254 5Z , +3604 2256 4F , +3633 2255 7B , +3694 2256 5V , +3782 2254 6P , +3838 2255 0D , +719 2100 0T , +777 2099 0D , +969 2098 0F , +1022 2098 6P , +1069 2098 6P , +1143 2099 4K , +1193 2099 1T , +1232 2099 4Y , +1276 2099 71 49 /5E +$C +3Y;p"JV5%#*oYRCLeDb7]`umol+.>ugT,GQYA_/4DuK(tg[4b6qda`^mrgeipV$Om^A[rcpODpe +[r;/PrVq*!ZQ"C3hY6a#]D]3Ll!&#bO0.kghg8E7eW\EsRXb~> +, +1348 2122 31 6 /2D +$C +0H#?:g]~> +, +1382 2099 3Y , +1410 2099 0K , +1465 2099 0M , +1498 2099 1T , +1537 2099 0U , +1589 2079 31 93 /3B +$C +"KA5$<2ioaX%J_TkuZ=+f<21RX8]1"oY:G+s8W,ds8D]jp[@j)hqRkn]A*&HgV(4BmCQ0~> +, +1622 2100 5S , +1672 2079 28 93 /6B +$C +3RbHUG4"&?]C+PE]C,RirpTT2^[Jr;^An65s3grIWrK*t='h6DF^7nJWD_7r<2jY:J,~> +, +1706 2085 5C , +1755 2099 0M , +1788 2099 2O , +1840 2079 3B , +1873 2100 5S , +1923 2079 6B , +1982 2099 3L , +2032 2100 3P , +2090 2099 6R , +2175 2099 5E , +2247 2099 1X , +2325 2099 3U , +2353 2099 3Y , +2381 2099 44 74 /1U +$C +-l*@R6-s^?pio*<2r!`a^>HQ3rnd+Wn%ZR7^YdlArpKdbqu,Bf&at2;g\1AMqgG^#@BRYYCd/HJ +>T2X@s7_$;n,E?gpb00C,h+@d%f~> +, +2435 2079 3B , +2468 2100 5S , +2518 2079 6B , +2577 2100 5T , +2606 2100 3P , +2688 2100 0Q , +2749 2099 0S , +2799 2099 0I , +2863 2100 36 69 /4C +$C +/d=P/"STRus7ZKmg].:ls8B_4pAb0Is8R$;rP/C0s5D*#`o$~> +, +2896 2099 0K , +2936 2073 58 100 /6I +$C +,EE>P_qsamH4ASG/c1"Sh=pl_pOBsH^\tqI\,Y@#qtL,?hgb[<ruqOq_;VnKA75Ans1a'XIsp3u ++fK;GXg#5d*qmL+TE~> +, +2980 2099 0I , +3019 2099 1T , +3057 2099 0K , +3113 2099 0U , +3182 2100 61 69 /1V +$C +/fB/`!ntEghuDS`s*aqGp\CJP&I%IHG2`7opk*rJqgH(pg[5$Mmb@d!J)9Yos*iT"9D_Ac$#l1r +nOWbjKn=g~> +, +3244 2099 1T , +3282 2099 0U , +3319 2072 0Y , +3377 2099 1T , +3416 2099 4Y , +3460 2099 1X , +3538 2099 1X , +3616 2099 0I , +3655 2099 1T , +3702 2149 19 24 /6Q +$C +,PZHLmeaK*ms!Zu^UrsNZW@~> +, +3721 2099 1C , +3777 2098 103 71 /2B +$C +.UM;S\rd#[mtU:`+UQ7EnBu0%X5Ep@qu:SVs!!Nuhs'RohuDQjHN(&Dg].#FrkH.U^]'`![sS,H +huE!!DuWQ3Dqb0`s'PKVg:.*s:&TOthu!@:F`61;DtWhS^[;$0^>7iKhlH2FA,W>*J'r3MjL>cB +&8Upr~> +, +3880 2099 4Y , +3924 2099 0K , +3980 2099 0E , +4035 2099 4Y , +4080 2099 3U , +4116 2085 5C , +4166 2099 72 70 /6G +$C +,%^^slb?6lGn>CBqKh"i\,AI.:L!gi\,&i!:"T=js/,,]PCKEWrR-2Ho`")>l["&&TCol^\mK?h +]!q+.9f[18+Mkhf~> +, +4238 2098 5Z , +4293 2100 4F , +4322 2099 7B , +4382 2100 5V , +4470 2098 6P , +4543 2100 0Z , +4601 2099 0D , +cleartomark end end pagesave restore showpage +%%PageTrailer +%%Trailer +%%Pages: 12 +%%EOF diff --git a/doc/lprof.ms b/doc/lprof.ms new file mode 100644 index 00000000..81add9c0 --- /dev/null +++ b/doc/lprof.ms @@ -0,0 +1,514 @@ +.TL +Limbo profilers in Inferno +.AU +J R Firth +.AI +Vita Nuova +.br +13 June 2002 +.SP 4 +.NH 1 +Introduction +.LP +Currently there are three application level profiling tools in the +Inferno package. +.I Prof +is a time profiler which, by sampling, can provide statistics +on the percentage of time spent on each line of limbo source. +.I Cprof +is a +coverage profiler which provides the execution profile for limbo source +code. It can accumulate results over a series of runs to allow full +coverage testing. Finally, +.I mprof +is a memory profiler which provides +statistics on the amount of memory used by each line +of limbo source. +.LP +Two gui versions of these tools currently exist. +.I Wm/cprof +shows the +coverage per module and highlights those lines which have not been +executed or have been only partially executed. +.I Wm/mprof +shows the memory +usage per module and highlights lines with high memory allocation in +darker shades of red. +.I Prof +itself does not have a gui equivalent as it +was originally written to determine why acme was so slow when using it's +global editing command. A gui for it was not a requirement at that stage. +.LP +All these tools use a common library module +.CW /module/profile.m +and +.CW /appl/lib/profile.b +that acts as the direct interface with the kernel profiling device. +.LP +Note that none of these tools give kernel profile statistics. For that, the devmem driver should be used. +.LP +Although the use of these tools is very similar, there are a few differences +when it comes to interactive testing as the profilers were written to +answer different questions. Thus +.I prof +tries to determine 'why is blah so +slow ?', +.I cprof +tries to accumulate coverage records over time and +.I mprof +tries to +give a series of memory statistics at intervals during the execution of +a program or series of programs. +.NH 1 +Prof +.LP +The time profiler works by sampling. A kernel procedure sleeps for the +given sample time and then notes the particular dis instruction currently +being executed before repeating the process. After many such samples, an accurate profile can be obtained. +.LP +At it's simplest we can profile a particular command by giving the command +to execute followed by any arguments to the command eg +.sp +.RS + prof wm/polyhedra +.RE +.sp +profiles the polyhedra displayer. After letting the latter run for a reasonable +amount of time, we exit and then get the following statistics. +.br +.DS +Module: Wmlib(/dis/lib/wmlib.dis) + +34 0.06 str = load String String->PATH; + +**** module sampling points 1 **** + +.DE +.DS +Module: Bufio(/dis/lib/bufio.dis) + +340 0.06 n := 0; +341 0.12 while(b.index < b.size){ +342 0.99 (ch, i, nil) = sys->byte2char(b.buffer[0:b.size], b.index); + +**** module sampling points 19 **** + +Module: Polyfill(/dis/math/polyfill.dis) + +37 10.80 for(i := 0; i < n; i++) +38 19.86 b0[i] = b1[i] = ∞; +57 0.06 p.y += y; +58 1.18 dst.line((left, y), (right, y), Endsquare, Endsquare, 0, src, p); +63 0.12 prevx := ∞; +64 9.93 for(x := left; x <= right; x++){ +65 20.61 if(z+e < zbuf0[k] || (z-e <= zbuf1[k] && x != right && prevx != ∞)){ +66 6.46 zbuf0[k] = z-e; +67 5.71 zbuf1[k] = z+e; +68 0.74 if(prevx == ∞) +69 0.74 prevx = x; +71 0.12 else if(prevx != ∞){ +72 0.25 fillline(dst, prevx, x-1, y, src, p); +73 2.61 prevx = ∞; +75 4.35 z += dx; +76 3.17 k++; +78 0.06 if(prevx != ∞) +79 0.87 fillline(dst, prevx, right, y, src, p); +80 0.06 } +152 0.06 return (vx/z, mod); +186 0.06 sp.dzrem = mod(sp.num, sp.den) << fixshift; +187 0.06 sp.dz += sdiv(sp.dzrem, sp.den); +217 0.62 for(q = p = 0; p < ep; p++) { +218 0.37 sp = seg[p]; +220 0.12 continue; +221 0.12 sp.z += sp.dz; +222 0.19 sp.zerr += sp.dzrem; +223 0.12 if(sp.zerr >= sp.den) { +224 0.19 sp.z++; +225 0.25 sp.zerr -= sp.den; +226 0.25 if(sp.zerr < 0 || sp.zerr >= sp.den) +227 0.25 sys->print("bad ratzerr1: %d den %d dzrem %d\n", sp.zerr, sp.den, sp.dzrem); +229 0.31 seg[q] = sp; +230 0.31 q++; +233 0.25 for(p = next; seg[p] != nil; p++) { +234 0.06 sp = seg[p]; +247 0.12 ep = q; +248 0.06 next = p; +257 0.06 continue; +260 0.62 zsort(seg, ep); +262 0.25 for(p = 0; p < ep; p++) { +263 0.19 sp = seg[p]; +264 0.06 cnt = 0; +265 0.06 x = sp.z; +266 0.25 ix = (x + onehalf) >> fixshift; +267 0.06 if(ix >= maxx) +271 0.06 cnt += sp.d; +272 0.12 p++; +273 0.25 sp = seg[p]; +275 0.06 if(p == ep) { +277 0.06 return; +279 0.06 cnt += sp.d; +280 0.12 if((cnt&wind) == 0) +283 0.19 sp = seg[p]; +286 0.25 ix2 = (x2 + onehalf) >> fixshift; +291 1.92 filllinez(dst, ix, ix2, iy, zv+ix*dx, er, dx, k+ix-zr.min.x, zbuf0, zbuf1, src, spt); +293 0.06 y += (1<<fixshift); +294 0.31 iy++; +295 0.06 k += xlen; +296 0.06 zv += dy; +298 0.06 } +310 0.06 done = 1; +311 0.12 q--; +312 0.25 for(p = 0; p < q; p++) { +313 0.87 if(seg[p].z > seg[p+1].z) { +367 0.06 t = a[0]; a[0] = a[i]; a[i] = t; +373 0.06 while(i < n && ycompare(a[i], a[0]) < 0); +379 0.12 t = a[i]; a[i] = a[j]; a[j] = t; +384 0.06 qsortycompare(a, j); + +**** module sampling points 1584 **** + +Module: Polyhedra(/dis/wm/polyhedra.dis) + +327 0.12 return (int (geo.sx*v.x)+geo.tx, int (geo.sy*v.y)+geo.ty); +471 0.06 if(allf || dot(geo.view, newn[j]) < 0.0) +472 0.06 polyfilla(fv[j], new, newn[j], dot(geo.light, newn[j]), geo, concave, inc); +496 0.06 ap[j] = map(vtx, geo); +512 0.06 if(a <= -LIMIT || a >= LIMIT) +531 0.06 fillpoly(RDisp, ap, ~0, face, (0, 0), geo.zstate, dc, dx, dy); + +**** module sampling points 7 **** + + +**** total sampling points 1611 **** +.DE +.br +The output lists all lines in all modules with a sampling point. Each line +shows the line number in the corresponding source file, the percentage of +time spent on that line and the source code. We can see that about 60% of +the sampling points occur on lines 37, 38, 64 and 65 of the Polyfill module. +With this information we might then try to speed up this part of the code +by altering the algorithm or making the limbo code more efficient (for +instance by moving constant calculations or addressing out of loops). +.LP +The number of sampling points is also shown. The sampling rate can be +increased with the -s option to give better granularity. +This will cause a decrease in apparent performance but increases the +accuracy of the results. The above example showed the results for all +modules sampled. We might have restricted attention to the two main +polyhedra modules instead by executing +.sp +.RS + prof -m Polyhedra -m Polyfill wm/polyhedra +.RE +.sp +See the manual page for other options to +.I prof +and further examples. +.NH1 +Cprof +.LP +Coverage of instructions is achieved by running a special dis instruction execute routine in place of the usual one (just as the debugger does). +This routine notes down each +instruction as it is executed. The profile device then passes this information +to +.I cprof +via the io system. +.LP +The coverage profiler is used in a similar way to the time profiler. +.sp +.RS + cprof -m Zeros zeros 1024 2880 +.RE +.sp +gives +.br +.DS +Module: Zeros(zeros.dis) 56% coverage + +1 implement Zeros; +2 +3 include "sys.m"; +4 sys: Sys; +5 include "arg.m"; +6 arg: Arg; +7 include "string.m"; +8 str: String; +9 include "keyring.m"; +10 include "security.m"; +11 random: Random; +12 +13 include "draw.m"; +14 +15 Zeros: module +16 { +17 init: fn(nil: ref Draw->Context, argv: list of string); +18 }; +19 +20 init(nil: ref Draw->Context, argv: list of string) +21 { +22 z: array of byte; +23 i: int; +24 + sys = load Sys Sys->PATH; +25 + arg = load Arg Arg->PATH; +26 + str = load String String->PATH; +27 +28 + if(sys == nil || arg == nil) +29 - return; +30 +31 + bs := 0; +32 + n := 0; +33 + val := 0; +34 + rflag := 0; +35 + arg->init(argv); +36 + while ((c := arg->opt()) != 0) +37 - case c { +38 - 'r' => rflag = 1; +39 - 'v' => (val, nil) = str->toint(arg->arg(), 16); +40 - * => sys->raise(sys->sprint("fail: unknown option (%c)\n", c)); +41 } +.DE +.DS +42 + argv = arg->argv(); +43 + if(len argv >= 1) +44 + bs = int hd argv; +45 else +46 - bs = 1; +47 + if (len argv >= 2) +48 + n = int hd tl argv; +49 else +50 - n = 1; +51 + if(bs == 0 || n == 0) { +52 - sys->fprint(sys->fildes(2), "usage: zeros [-r] [-v value] blocksize [number]\n"); +53 - sys->raise("fail: usage"); +54 } +55 + if (rflag) { +56 - random = load Random Random->PATH; +57 - if (random == nil) +58 - sys->raise("fail: no security module\n"); +59 - z = random->randombuf(random->NotQuiteRandom, bs); +60 } +61 else { +62 + z = array[bs] of byte; +63 + for(i=0;i<bs;i++) +64 + z[i] = byte val; +65 } +66 + for(i=0;i<n;i++) +67 + sys->write(sys->fildes(1), z, bs); +68 + } + +**** module dis instructions 39725 **** +.DE +.br +Here the -m option has restricted attention to the Zeros module itself. +The output shows the source line number, an indicator of coverage and +the source. The indicator is + if the line has been executed, - if +it hasn't and ? if only part of it has (for instance a loop statement that has +never had it's iteration part executed). Lines with no indicator have no +corresponding dis instructions associated with them. Another option (-f) +shows coverage frequencies instead. +.LP +An alternative to +.I cprof +is +.I wm/cprof +which shows the statistics graphically. +It's options are pretty much the same as those to +.I cprof . +Unexecuted and +partially executed lines of code are shown in colour. See the man page +for exact details of the colouring convention +.LP +Results may be accumulated with the -r option so that multiple runs of +code can be made. The resulting statistics go into a file <xxx>.prf when +<xxx>.dis is the corresponding dis file. See the manual page for further +details on how to use this option and then review the accumulated +results. +.NH 1 +Mprof +.LP +When memory profiling, the kernel profile device associates each heap allocation with a line of limbo source and each heap deallocation with the line of +limbo source that allocated it. In this way, current memory usage and +high-water usage can be determined on a line by line basis. +.LP +Here it seems that memory usage at a particular point in the execution of +a program is more appropriate than the post-mortem approach of +.I prof +and +.I cprof +, so an interactive example is described (though +.I mprof +can be +used non-interactively and +.I prof +interactively if so desired). See the manual +pages for complete details and further examples. +.LP +To do this we execute +.sp +.RS + mprof -b -m Polyhedra +.RE +.sp +which kicks off profiling and restricts attention to the Polyhedra module +whenever it runs. The -b simply says begin profiling. Note that no command +to execute is given to +.I mprof +at this stage. Then run the command +.sp +.RS + wm/polyhedra & +.RE +.sp +and interact with it. Now show memory statistics +.sp +.RS + mprof +.RE +.sp +This gives +.br +.DS +Module: Polyhedra(/dis/wm/polyhedra.dis) + +44 100 100 sys = load Sys Sys->PATH; +45 132 132 draw = load Draw Draw->PATH; +46 68 68 tk = load Tk Tk->PATH; +47 1788 1788 wmlib = load Wmlib Wmlib->PATH; +48 232 232 bufio = load Bufio Bufio->PATH; +49 68 68 math = load Math Math->PATH; +50 204 204 rand = load Rand Rand->PATH; +51 0 3504 daytime = load Daytime Daytime->PATH; +52 544 544 polyfill = load Polyfill Polyfill->PATH; +53 1824 1824 smenu = load Smenu Smenu->PATH; +86 36 36 cmdch := chan of string; +95 36 36 sync := chan of int; +96 36 36 chanθ := chan of real; +103 68 68 shade = array[NSHADES] of ref Image; +116 36 36 yieldc := chan of int; +120 36 36 sm := array[2] of ref Scrollmenu; +378 68 176 s += " (" + string p.indx + ")"; +403 36 36 vec := array[2] of array of Vector; +404 740 740 vec[0] = array[V] of Vector; +405 740 740 vec[1] = array[V] of Vector; +407 36 36 norm = array[2] of array of Vector; +408 612 612 norm[0] = array[F] of Vector; +409 612 612 norm[1] = array[F] of Vector; +492 68 68 ap := array[n+1] of Point; +609 164 164 geo := ref Geom; +610 36 36 TM := array[4] of array of real; +612 272 272 TM[i] = array[4] of real; +663 8000 8000 p := ref Polyhedron; +707 740 740 p.v = array[p.V] of Vector; +710 612 612 p.f = array[p.F] of Vector; +713 132 132 p.fv = array[p.F] of array of int; +716 164 164 p.vf = array[p.V] of array of int; +729 9504 9640 return s[0: len s - 1]; +750 3672 3672 a := array[n+2] of int; +768 0 136 return (n, s[i+1:]); +779 0 104 return (r, s[i+1:]); +802 0 68 s = s[1:]; +806 0 72 s = s[0: ln-1]; +.DE +.DS +866 0 200 cmd(mainwin, ".f1.txt configure -text {" + s + "}"); +874 0 356 labs := array[n] of string; +881 0 5128 labs[i++] = string q.indx + " " + name; +884 0 68 cmd(top, mname + " configure -borderwidth 3"); +920 0 104 cmd(win, ". configure -height " + string (scrsize.y - bd * 2)); +934 0 244 cmd(win, ". configure -x " + string actr.min.x + " -y " + string actr.min.y); + +Module totals 31416 33984 +.DE +.br +We get the source line number, the amount of memory in bytes +currently allocated on that line, the high-water mark in bytes and then the source. Thus +loading the Sys module on line 44 used 100 bytes and this memory is +still allocated. Loading Daytime on line 51 used 3504 bytes but this is now +released (because the module pointer is set to nil in the source and the +memory has been reclaimed). The string concatenation on line 378 currently uses 68 bytes +but at it's worst it was 176 bytes. +.LP +Further interaction with wm/polyhedra can now be done and memory +statistics reviewed before the +profiling session is ended, throwing away the accumulated memory +statistics inside the kernel with +.sp +.RS + mprof -c +.RE +.sp +The -c option simply says cease profiling. +.LP +An alternative to +.I mprof +is +.I wm/mprof +which shows the statistics graphically. +It's options are pretty much the same as those to +.I mprof . +Lines of code +which have allocated more of the memory are shown in darker shades of red. +.NH 1 +Manual pages +.LP +Further information and other examples are given in the following +manual pages :- +.sp +.RS +.I cprof(1) +.br +.I mprof(1) +.br +.I prof(1) +.br +.I wm-cprof(1) +.br +.I wm-mprof(1) +.RE +.sp +For the lower level library module interface to these profilers +.sp +.RS +.I prof(2) +.RE +.sp +For the kernel profile device which gathers timing, coverage and memory +statistics +.sp +.RS +.I prof(3) +.RE +.br +.NH 1 +Sources +.LP +The relevant sources are +.sp +.RS +.CW /module/profile.m +.br +.CW /appl/lib/profile.b +.br +.CW /appl/cmd/cprof.b +.br +.CW /appl/cmd/mprof.b +.br +.CW /appl/cmd/prof.b +.br +.CW /appl/wm/cprof.b +.br +.CW /appl/wm/mprof.b +.br +.CW /emu/devprof.c +.br +.CW /os/port/devprof.c +.RE +.NH 1 +Addendum +.LP +A gui version of +.I prof +has been added for completeness. See the manual page +.I wm-prof(1) +and the source +.CW /appl/wm/prof.b . diff --git a/doc/lprof.pdf b/doc/lprof.pdf Binary files differnew file mode 100644 index 00000000..5adfa183 --- /dev/null +++ b/doc/lprof.pdf diff --git a/doc/mk.ms b/doc/mk.ms new file mode 100644 index 00000000..9245264f --- /dev/null +++ b/doc/mk.ms @@ -0,0 +1,1539 @@ +.TL +Maintaining Files on Plan 9 with Mk +.AU +Andrew G. Hume +andrew@research.att.com +Bob Flandrena +bobf@plan9.bell-labs.com +.AB +.PP +.CW Mk +is a tool +for describing and maintaining dependencies between +files. +It is similar to the +UNIX program +.CW make , +but provides several new capabilities. +.CW Mk\fR'\fPs +flexible rule specifications, implied +dependency derivation, and parallel +execution of maintenance actions are +well-suited to the Plan 9 environment. +Almost all Plan 9 maintenance procedures +are automated using +.CW mk . +.AE +.NH 1 +Introduction +.PP +.CW Mk +performs the same task as +.CW make +[Feld79] but is different in many ways. +This document describes +.CW mk\fR'\fPs +capabilities and discusses how they are +used in Plan 9. There are occasional references +to differences between +.CW mk +and +.CW make , +but +an appendix summarizes the details. +.PP +.CW Mk +works well in the Plan 9 environment. +It supports program construction +in a heterogeneous environment and +exploits the power of multiprocessors by executing +maintenance actions in parallel. +It interacts seamlessly with the Plan 9 command +interpreter +.CW rc +and accepts pattern-based dependency specifications +that are not limited to describing +rules for program construction. +The result is a tool that is flexible enough to +perform many maintenance tasks including +database maintenance, +hardware design, and document production. +.PP +This document begins by discussing +the syntax of the input file, +the pattern matching capabilities, and +the special rules for maintaining archives. +A brief description of +.CW mk\fR'\fPs +algorithm for deriving dependencies +is followed by a discussion +of the conventions used to resolve ambiguous +specifications. The final sections +describe parallel execution +and special features. +.PP +An earlier paper [Hume87] +provides a detailed discussion of +.CW mk\fR'\fPs +design. +.NH 1 +The \f(CWMkfile\fP +.PP +.CW Mk +reads a file describing relationships among files +and executes commands to bring the files up to date. +The specification file, called a +.CW mkfile , +contains three types of statements: +assignments, includes, and rules. +Assignment and include statements are similar +to those in C. +Rules specify dependencies between a +.I target +and its +.I prerequisites . +When the target and prerequisites are files, their +modification times determine if they +are out of date. Rules often contain a +.I recipe , +an +.I rc (1) +script that produces the target from +the prerequisites. +.PP +This simple +.CW mkfile +produces an executable +from a C source file: +.P1 +CC=pcc +f1: f1.c + $CC -o f1 f1.c +.P2 +The first line assigns the name of the portable ANSI/POSIX compiler +to the +.CW mk +variable +.CW CC ; +subsequent references of the form +.CW $CC +select this compiler. +The only rule specifies a dependence between the target file +.CW f1 +and the prerequisite file +.CW f1.c . +If the target does not exist or if the +prerequisite has been modified more recently than +the target, +.CW mk +passes the recipe to +.CW rc +for execution. Here, +.CW f1.c +is compiled and loaded to produce +.CW f1 . +.PP +The native Plan 9 environment +requires executables for +all architectures, not only the current one. +The Plan 9 version of the same +.CW mkfile +looks like: +.P1 +</$objtype/mkfile +CFLAGS=-w + +f1: f1.$O + $LD $LDFLAGS -o f1 f1.$O +f1.$O: f1.c + $CC $CFLAGS f1.c +.P2 +The first line is an include statement +that replaces itself with the contents of the file +.CW /$objtype/mkfile . +The variable +.CW $objtype +is inherited from the environment and +contains the name of the target architecture. +The prototype +.CW mkfile +for that architecture defines architecture-specific variables: +.CW CC +and +.CW LD +are the names of the compiler and loader, +.CW O +is the code character of the architecture. +The rules compile the source file into an object +file and invoke the loader to produce +.CW f1 . +Invoking +.CW mk +from the command line as follows +.P1 +% objtype=sparc mk +kc -w f1.c +kl $LDFLAGS -o f1 f1.k +% +.P2 +produces the +.CW sparc +executable of program +.CW f1 +regardless of the current architecture type. +.PP +We can extend the +.CW mkfile +to build two programs: +.P1 +</$objtype/mkfile +CFLAGS=-w +ALL=f1 f2 + +all:V: $ALL + +f1: f1.$O + $LD $LDFLAGS -o f1 f1.$O +f1.$O: f1.c + $CC $CFLAGS f1.c +f2: f2.$O + $LD $LDFLAGS -o f2 f2.$O +f2.$O: f2.c + $CC $CFLAGS f2.c +.P2 +The target +.CW all , +modified by the +.I attribute +.CW V , +builds both programs. +The attribute identifies +.CW all +as a dummy target that is +not related to a file of the same name; +its precise effect is explained later. +This example describes cascading dependencies: +the first target depends on another which depends on a third and +so on. +Here, individual rules build each +program; later we'll see how to do this with a +general rule. +.NH 1 +Variables and the environment +.PP +.CW Mk +does not distinguish between its +variables and +.CW rc +variables in the environment. +When +.CW mk +starts, it imports each environment variable into a +.CW mk +variable of the same name. Before executing a recipe, +.CW mk +exports all variables, including those +inherited from the environment, +to the environment in which +.CW rc +executes the recipe. +.PP +There are several ways for a +variable to take a value. +It can be set with an assignment statement, +inherited from the environment, or specified +on the command line. +.CW Mk +also maintains several internal variables; +these variables are described in +.I mk (1). +Assignments have the following decreasing order of precedence: +.LP +.in .7i +1) Command line assignment +.br +2) Assignment statement +.br +3) Imported from the environment +.br +4) Implicitly set by \f(CWmk\fP +.in 0 +.LP +For example, a command line assignment overrides +a value imported from the environment. +.PP +All variable values are strings. They can be +used for pattern matching and +comparison but not for arithmetic. +A +.I list +is a string containing several values separated by +white space. Each member is +handled individually during pattern matching, +target selection, and prerequisite evaluation. +.PP +A +.I namelist +is a list produced by +transforming the members of an existing list. +The transform applies a pattern to each member, +replacing each matched string with a new string, +much as in the substitute command in +.I sam (1) +or +.I ed (1). +The syntax is +.P1 +${\fIvar\fP:A%B=C%D} +.P2 +where +.I var +is a variable. +The pattern +.CW A%B +matches a member beginning with the string +.I A +and ending with the string +.I B +with any string in between; +it behaves like the regular expression +.CW A.*B . +When a member of the +.I var +list +matches this pattern, +the string +.I C +replaces +.I A , +.I D +replaces +.I B , +and the matched string replaces itself. +Any of +.I A , +.I B , +.I C , +or +.I D +may be the empty string. In effect, a namelist is +generated by applying the +.I ed (1) +substitute command +.P1 + s/\fIA\fP(.*)\fIB\fP/\fIC\fP\e1\fID\fP/ +.P2 +to each member of a variable. +.PP +Namelists are useful for generating +a list based on a predictable transformation. +For example, +.P1 + SRC=a.c b.c c.c + OBJ=${SRC:%.c=%.v} +.P2 +assigns the list \f(CW(a.v b.v c.v)\fP to +.CW OBJ . +A namelist may be used anywhere a variable is allowed +except in a recipe. +.PP +Command output is assigned to a variable +using the normal +.CW rc +syntax: +.P1 + var=`{rc command} +.P2 +The command executes in an environment populated +with previously assigned variables, including those +inherited from +.CW mk\fR'\fPs +execution environment. +The command may +be arbitrarily complex; for example, +.P1 + TARG=`{ls -d *.[cyl] | sed 's/..$//'} +.P2 +assigns a list of the C, yacc, and Alef source files in the current +directory, stripped of their suffix, to the variable +.CW TARG . +.NH 1 +The include statement +.PP +The include statement +replaces itself with the contents of a file. +It is functionally similar to the C +.CW #include +statement but uses a different syntax: +.P1 + <\fIfilename\fP +.P2 +The contents of the file are evaluated +as they are read. +An include statement may be used anywhere except +in a recipe. +.PP +Unlike +.CW make , +.CW mk +has no built-in rules. Instead, +the include statement allows generic rules +to be imported from a prototype +.CW mkfile ; +most Plan 9 +.CW mkfiles +use this approach [Flan95]. +.NH 1 +Rules +.PP +A rule has four elements: targets, +prerequisites, attributes, and a recipe. +It has the form: +.P1 +\fItargets\fP:\fIattributes\fP:\fIprerequisites\fP + \fIrecipe\fP +.P2 +The first line, containing the +targets, attributes, and prerequisites is +the +.I "rule header" ; +it +must begin at the left margin. +The recipe contains zero or more lines, +each of which begins with white space. +One or more targets must be specified but the +attributes, prerequisites, and recipe are optional. +A rule specifies +a dependency between the targets and the prerequisites; +the recipe brings the targets +up to date with the prerequisites. +Attributes modify +.CW mk\fR'\fPs +evaluation of a rule. +.PP +Normally the target is a file that depends +on one or more prerequisite files. +.CW Mk +compares the modification times of each target +and each prerequisite; a target is considered out of date +when it does not exist or when a prerequisite has been modified +more recently. +When a target is out of date, +.CW mk +executes the +recipe to bring it up to date. +When the recipe completes, +the modification time of the target is checked and +used in later dependency evaluations. +If the recipe does not update the target, +evaluation continues with the out of date target. +.PP +A prerequisite of one rule +may be the target of another. When +this happens, the rules cascade +to define a multi-step procedure. +For example, +an executable target depends on prerequisite +object files, each of which is a target +in a rule with a C source file as the prerequisite. +.CW Mk +follows a chain of dependencies until it encounters +a prerequisite that is not a target of another rule +or it finds a target that +is up to date. It then +executes the recipes in reverse order to produce +the desired target. +.PP +The rule header is evaluated when the rule is read. +Variables are replaced by their values, namelists are +generated, and +commands are replaced by their +output at this time. +.PP +Most attributes modify +.CW mk\fR'\fPs +evaluation of a rule. +An attribute is usually a single letter but some +are more complicated. +This paper only discusses commonly used attributes; +see +.I mk (1) +for a complete list. +.PP +The +.CW V +attribute identifies a +.I virtual +target; +that is, a target that is not a file. +For example, +.P1 +clean:V: + rm *.$O $O.out +.P2 +removes executables and compiler intermediate files. +The target is virtual because it does not refer to a file named +.CW clean . +Without the attribute, the recipe would not be +executed if a file named +.CW clean +existed. +The +.CW Q +silences the default printing of a recipe before +it is executed. +It is useful when the output of a recipe is +similar to the recipe: +.P1 +default:QV: + echo 'No default target; use mk all or mk install' +.P2 +.PP +A recipe is an +.CW rc +script. The recipe is optional; when it is +missing, the rule is handled specially, as described later. +Unlike +.CW make , +.CW mk +executes recipes without interpretation. +After +stripping the first white space character from each line +it passes the entire recipe to +.CW rc +on standard input. +Since +.CW mk +does not interpret a recipe, +escape conventions are exactly those of +.CW rc . +Scripts for +.CW awk +and +.CW sed +commands can be embedded just as they would +be specified from the command line. +.CW Mk +invokes +.CW rc +with the +.CW -e +flag, which causes +.CW rc +to stop if any command +in the recipe exits with a non-zero status; the +.CW E +attribute overrides this behavior and allows +.CW rc +to continue executing in the face of errors. +Before a recipe is executed, variables are exported +to the environment where +.CW rc +can see them. +Recipe commands may not read from +standard input because +.CW mk +uses it internally. +.PP +References to a variable can yield different +values depending on the location of the +reference in the +.CW mkfile . +.CW Mk +resolves variable references +in assignment statements and rule headers +when the statement is read. Variable references +in recipes are evaluated by +.CW rc +when the recipe is executed; this +happens after the entire +.CW mkfile +has been read. The value of a variable in a recipe +is the last value assigned in the file. For example, +.P1 +STRING=all + +all:VQ: + echo $STRING +STRING=none +.P2 +produces the message +.CW none . +A variable assignment in a recipe +does not affect the value of the variable in the +.CW mkfile +for two reasons. +First, +.CW mk +does not import values from +the environment when a recipe completes; +one recipe cannot pass a value through +the environment to another recipe. +Second, no recipe is executed until +.CW mk +has completed its evaluation, so even if a variable +were changed, +it would not affect the dependency evaluation. +.NH 1 +Metarules +.PP +A +.I metarule +is a rule based on a pattern. +The pattern selects a class of target and +identifies related prerequisites. +.CW Mk +metarules may select targets and prerequisites +based on any criterion that can be described by a pattern, not just +the suffix transformations associated with program +construction. +.PP +.CW Mk +has two types of patterns: +.I intrinsic +patterns or regular expressions conforming to the +syntax of +.I regexp (6). +The intrinsic patterns are shorthand +for common regular expressions. +The intrinsic pattern +.CW % +matches one or more of anything; it is equivalent to +the regular expression +.CW `.+' . +The other intrinsic pattern, +.CW & , +matches one or more of any characters except \f(CW`/'\fP +and \f(CW`.'\fP. +It matches a portion of a path and is +equivalent to the regular expression +.CW `[^./]+' . +An intrinsic pattern in a prerequisite references +the string matched by the same intrinsic pattern in the target. +For example, the rule +.P1 + %.v: %.c +.P2 +says that a file ending in +.CW .v +depends on a file of the same name with a +.CW .c +suffix: +.CW foo.v +depends on +.CW foo.c , +.CW bar.v +depends on +.CW bar.c , +and so on. +The string matched by an intrinsic pattern in the target +is supplied to the recipe in the variable +.CW $stem . +Thus the rule +.P1 +%.$O: %.c + $CC $CFLAGS $stem.c +.P2 +creates an object file for the target architecture from +a similarly named C source file. If several object +files are out of date, the rule is applied repeatedly and +.CW $stem +refers to each file in turn. +Since there is only one +.CW stem +variable, there can only be one +.CW % +or +.CW & +pattern in a target; +the pattern +.CW %-%.c +is illegal. +.PP +Metarules simplify the +.CW mkfile +for building programs +.CW f1 +and +.CW f2 : +.P1 +</$objtype/mkfile +CFLAGS=-w +ALL=f1 f2 + +all:V: $ALL + +%: %.$O + $LD -o $target $prereq +%.$O: %.c + $CC $CFLAGS $stem.c +clean:V: + rm -f $ALL *.[$OS] +.P2 +(The variable +.CW $OS +is a list of code characters for all architectures.) +Here, metarules specify +compile and load steps for all files. +The loader rule relies on two internal variables +set by +.CW mk +during evaluation of the rule: +.CW $target +is the name of the target and +.CW $prereq +the name of all prerequisites. +Metarules allow this +.CW mkfile +to be easily extended; a new program +is supported by adding its name to the third line. +.PP +A regular expression metarule must have an +.CW R +attribute. +Prerequisites may reference matching substrings in +the target using the form +.CW \e\fIn\fP +where +.I n +is a digit from 1 to 9 specifying the +.I n th +parenthesized sub-expression. In a recipe, +.CW $stem\fIn\fP +is the equivalent reference. +For example, a compile rule could be +specified using regular expressions: +.P1 +(.+)\e.$O:R: \e1.c + $CC $CFLAGS $stem1.c +.P2 +Here, +.CW \e1 +and +.CW $stem1 +refer to the name of the target object file without the +suffix. The variable +.CW $stem +associated with an intrinsic pattern is undefined +in a regular expression metarule. +.NH 1 +Archives +.PP +.CW Mk +provides a special mechanism for maintaining an archive. +An archive member is referenced using the form +.CW \fIlib\fP(\fIfile\fP) +where +.I lib +is the name of the archive and +.I file +is the name of the member. Two rules define the +dependency between an object file and its membership +in an archive: +.P1 +$LIB(foo.v):N: foo.v +$LIB: $LIB(foo.v) + ar rv $LIB foo.v +.P2 +The first rule establishes a dependency between the +archive member and the object file. +Normally, +.CW mk +detects an error when a target does not exist and the rule +contains no recipe; the +.CW N +attribute overrides this behavior because the subsequent rule +updates the member. +The second +rule establishes the dependency between the member and +the archive; its recipe inserts the member +into the archive. +This two-step specification allows the archive +to represent the state of its members. Other rules +can then specify the archive as a prerequisite instead of +listing each member. +.PP +A metarule generalizes library maintenance: +.P1 +LIB=lib.a +OBJS=etoa.$O atoe.$O ebcdic.$O + +$LIB(%):N: % +$LIB: ${OBJS:%=$LIB(%)} + ar rv $LIB $OBJS +.P2 +The namelist prerequisite of the +.CW $LIB +target generates archive member names for each object file name; +for example, +.CW etoa.$O +becomes +.CW lib.a(etoa.$O) . +This formulation always updates all members. +This is acceptable for a small archive, but may +be slow for a big one. +The rule +.P1 +$LIB: ${OBJS:%=$LIB(%)} + ar rv $LIB `{membername $newprereq} +.P2 +only updates out of date object files. +The internal variable +.CW $newprereq +contains the names of the out of +date prerequisites. The +.CW rc +script +.CW membername +transforms an archive member specification into a file name: +it translates +.CW lib.a(etoa.$O) +into +.CW etoa.$O . +.PP +The +.CW mkfile +.P1 +</$objtype/mkfile +LIB=lib.a +OBJS=etoa.$O atoe.$O ebcdic.$O + +prog: main.$O $LIB + $LD -o $target $prereq + +$LIB(%):N: % +$LIB: ${OBJS:%=$LIB(%)} + ar rv $LIB $OBJS +.P2 +builds a program by loading it with a library. +.NH 1 +Evaluation algorithm +.PP +For each target of interest, +.CW mk +uses the rules in a +.CW mkfile +to build a data +structure called a dependency graph. The nodes of +the graph represent targets and prerequisites; +a directed arc +from one node to another indicates that +the file associated with the first node depends +on the file associated with the second. +When the +.CW mkfile +has been completely read, the graph is analyzed. +In the first step, implied dependencies are resolved by +computing the +.I "transitive closure" +of the graph. +This calculation extends the graph to include all +targets that are potentially +derivable from the rules in the +.CW mkfile . +Next the graph is checked for cycles; +.CW make +accepts cyclic dependencies, but +.CW mk +does not allow them. +Subsequent steps +prune subgraphs that are irrelevant for producing the +desired target and verify that there is only one way +to build it. +The recipes associated with the +nodes on the longest path between the +target and an out of date prerequisite +are then executed in reverse order. +.PP +The transitive closure calculation is sensitive to +metarules; the patterns often select many potential targets +and cause the graph to grow rapidly. +Fortunately, +dependencies associated with the desired target +usually form a small part of the graph, so, after +pruning, analysis is tractable. +For example, the rules +.P1 +%: x.% + recipe1 +x.%: %.k + recipe2 +%.k: %.f + recipe3 +.P2 +produce a graph with four nodes for each file in the +current directory. +If the desired target is +.CW foo , +.CW mk +detects the dependency between it +and the original file +.CW foo.f +through intermediate dependencies on +.CW foo.k +and +.CW x.foo . +Nodes associated with other files are deleted during pruning because +they are irrelevant to the production of +.CW foo . +.PP +.CW Mk +avoids infinite cycles by evaluating +each metarule once. +Thus, the rule +.P1 +%: %.z + cp $prereq $prereq.z +.P2 +copies the prerequisite file once. +.NH 1 +Conventions for evaluating rules +.PP +There must be only one +way to build each target. However, during evaluation +metarule patterns often select potential targets that +conflict with the +targets of other rules. +.CW Mk +uses several conventions to resolve ambiguities +and to select the proper dependencies. +.PP +When a target selects more than one rule, +.CW mk +chooses a regular rule +over a metarule. +For example, the +.CW mkfile +.P1 +</$objtype/mkfile +CFLAGS=-w +FILES=f1.$O f2.$O f3.$O + +prog: $FILES + $LD -o $target $prereq + +%.$O: %.c + $CC $CFLAGS $stem.c + +f2.$O: f2.c + $CC f2.c +.P2 +contains two rules that could build +.CW f2.$O . +.CW Mk +selects the last rule because its target, +.CW f2.$O , +is explicitly specified, while the +.CW %.$O +rule is a metarule. In effect, +the explicit rule for +.CW f2.$O +overrides the general rule for building object files from +C source files. +.PP +When a rule has a target and prerequisites but no recipe, +those prerequisites are added to all other rules with +recipes that have the same target. +All prerequisites, regardless of where they were specified, are +available in the recipe in variable +.CW $prereq . +For example, in +.P1 +</$objtype/mkfile +CFLAGS=-w +FILES=f1.$O f2.$O f3.$O + +prog: $FILES + $LD -o $target $prereq + +%.$O: hdr.h + +%.$O: %.c + $CC $CFLAGS $stem.c +.P2 +the second rule adds +.CW hdr.h +as a prerequisite of the compile metarule; +an object file produced from a C source file +depends on +.CW hdr.h +as well as the source file. Notice that the recipe of +the compile rule uses +.CW $stem.c +instead of +.CW $prereq +because the latter specification would attempt to compile +.CW hdr.h . +.PP +When a target is virtual and there is no other rule with +the same target, +.CW mk +evaluates each prerequisite. +For example, adding the rule +.P1 +all:V: prog +.P2 +to the preceding example builds the executable +when either +.CW prog +or +.CW all +is the specified target. In effect, the +.CW all +target is an alias for +.CW prog . +.PP +When two rules have identical rule headers and both have +recipes, the later rule replaces the former one. +For example, +if a file named +.CW mkrules +contains +.P1 +$O.out: $OFILES + $LD $LFLAGS $OFILES +%.$O: %.c + $CC $CFLAGS $stem.c +.P2 +the +.CW mkfile +.P1 +OFILES=f1.$O f2.$O f3.$O + +<mkrules + +$O.out: $OFILES + $LD $LFLAGS -l $OFILES -lbio -lc +.P2 +overrides the general loader rule with a special +rule using a non-standard library search sequence. +A rule is neutralized by overriding it with a rule +with a null recipe: +.P1 +<mkrules + +$O.out:Q: $OFILES + ; +.P2 +The +.CW Q +attribute suppresses the printing of the semicolon. +.PP +When a rule has no prerequisites, the recipe is executed +only when the target does not exist. For example, +.P1 +marker: + touch $target +.P2 +defines a rule to manage a marker file. +If the file exists, it is considered up to date +regardless of its modification time. +When a virtual target has no prerequisites the +recipe is always executed. +The +.CW clean +rule is of this type: +.P1 +clean:V: + rm -f [$OS].out *.[$OS] +.P2 +When a rule without prerequisites has multiple targets, the +extra targets are aliases for the rule. +For example, in +.P1 +clean tidy nuke:V: + rm -f [$OS].out *.[$OS] +.P2 +the +rule can be invoked by any of three names. +The first rule in a +.CW mkfile +is handled specially: +when +.CW mk +is invoked without a command line target +all targets of the first non-metarule are built. +When that rule has multiple targets, the recipe +is executed once for each target; normally, the recipe +of a rule with multiple targets is only executed once. +.PP +A rule applies to a target only when its prerequisites +exist or can be derived. More than one rule may have the +same target as long as only one rule with a recipe +remains applicable after the dependency evaluation completes. +For example, consider a program built from C +and assembler source files. Two rules produce +object files: +.P1 +%.$O: %.c + $CC $CFLAGS $stem.c +%.$O: %.s + $AS $AFLAGS $stem.s +.P2 +As long as there are not two source files with names like +.CW \fIfoo\fP.c +and +.CW \fIfoo\fP.s , +.CW mk +can unambiguously select the proper rule. +If both files exist, +there are ambiguous rules to produce +.CW \fIfoo\fP.$O , +and +.CW mk +exits with an error message. +.PP +In Plan 9, many programs consist of portable code stored +in one directory and architecture-specific source stored in +another. +For example, the +.CW mkfile +.P1 +</$objtype/mkfile +CFLAGS=-w +FILES=f1.$O f2.$O f3.$O f3.$O + +prog: $FILES + $LD -o $target $prereq + +%.$O: %.$c + $CC $CFLAGS $stem.c + +%.$O: ../port/%.c + $CC $CFLAGS ../port/$stem.c +.P2 +builds the program named +.CW prog +using portable code in directory +.CW ../port +and architecture-specific code in the current directory. +As long as the +names of the C source files in +.CW ../port +do not conflict with the names of files in the current directory, +.CW mk +selects the appropriate rule. +If like-named files exist in both directories, the +specification is ambiguous and results in an error. +An explicit target resolves the ambiguity. +For example, +adding the rule +.P1 +f2.$O: f2.c + $CC $CFLAGS $f2.c +.P2 +to the previous +.CW mkfile +uses the architecture-specific version of +.CW f2.c +instead of the portable one. +Here, the explicit rule +documents which of the +like-named source files is used to build the program. +.PP +.CW Mk\fR'\fP s +heuristics can produce unintended results +when rules are not carefully specified. +For example, the rules that build +object files from C or assembler source files +.P1 +%.$O: %.c + $CC $CFLAGS $stem.c +%.$O: %.s + $AS $AFLAGS $stem.s +.P2 +illustrate a subtle pratfall. +Adding a header file dependency to the compile rule +.P1 +%.$O: %.c hdr.h + $CC $CFLAGS $stem.c +.P2 +produces the error message +.P1 +.CW "don't know how to make '\fIfile\fP.c'" +.P2 +when \fIfile\fP.s is an assembler +source file. +This occurs because +.CW \fIfile\fP.s +satisfies the assemble rule and +.CW hdr.h +satisfies the compile rule, so +either rule can potentially produce the target. +When a prerequisite exists or can be +derived, +all other prerequisites in that +rule header must exist or be derivable; here, +the existence of +.CW hdr.h +forces the evaluation of a C source file. +Specifying the dependencies in different +rules avoids this interpretation: +.P1 +%.$O: hdr.h +%.$O: %.c + $CC $CFLAGS $stem.c +.P2 +Although +.CW hdr.h +is an additional prerequisite of the compile rule, +the two rules are evaluated independently and +the existence of the C source file is not linked +to the existence of the header file. +However, this specification describes a different +dependency. Originally, only object +files derived from C files depended on +.CW hdr.h ; +now all object files, including those built +from assembler source, depend on the header file. +.PP +Metarule patterns should be as restrictive as possible to +prevent conflicts with other rules. +Consider the +.CW mkfile +.P1 +</$objtype/mkfile +BIN=/$objtype/bin +PROG=foo + +install:V: $BIN/$PROG + +%: %.c + $CC $stem.c + $LD -o $target $stem.$O + +$BIN/%: % + mv $stem $target +.P2 +The first target builds an executable +in the local directory; the second +installs it in the directory +of executables for the architecture. +Invoking +.CW mk +with the +.CW install +target produces: +.P1 0 +mk: ambiguous recipes for /mips/bin/foo: +/mips/bin/foo <-(mkfile:8)- /mips/bin/foo.c <-(mkfile:12)- foo.c +/mips/bin/foo <-(mkfile:12)- foo <-(mkfile:8)- foo.c +.P2 +The prerequisite of the +.CW install +rule, +.CW $BIN/$PROG , +matches both metarules because the +.CW % +pattern matches everything. +The +.CW & +pattern restricts the compile rule to files in the +current directory and avoids the conflict: +.P1 +&: &.c + $CC $stem.c + $LD -o $target $stem.$O +.P2 +.NH 1 +Missing intermediates +.PP +.CW Mk +does not build a missing intermediate file if a target +is up to date with the prerequisites of the intermediate. +For example, +when an executable is up to date with its source file, +.CW mk +does not compile the source to create a missing object file. +The evaluation only applies +when a target is considered up to date by pretending that the +intermediate exists. Thus, it does not apply +when the intermediate is a command line target +or when it has no prerequisites. +.PP +This capability is useful for +maintaining archives. We can modify the archive +update recipe to remove object files after +they are archived: +.P1 +$LIB(%):N: % +$LIB: ${OBJS:%=$LIB(%)} + names=`{membername $newprereq} + ar rv $LIB $names + rm -f $names +.P2 +A subsequent +.CW mk +does not remake the object files as long as the members +of the archive remain up to date with the source files. +The +.CW -i +command line option overrides this behavior +and causes all intermediates to be built. +.NH 1 +Alternative out-of-date determination +.PP +Sometimes the modification time is not useful +for deciding when a target and prerequisite are out of date. +The +.CW P +attribute replaces the default mechanism with the result of +a command. The command immediately follows the attribute +and is repeatedly executed with each +target and each prerequisite as its arguments; +if its exit status is non-zero, they are considered out of date +and the recipe is executed. Consider the +.CW mkfile +.P1 +foo.ref:Pcmp -s: foo + cp $prereq $target +.P2 +The command +.P1 +cmp -s foo.ref foo +.P2 +is executed and if +.CW foo.ref +differs from +.CW foo , +the latter file is copied to the former. +.NH 1 +Parallel processing +.PP +When possible, +.CW mk +executes recipes in parallel. +The variable +.CW $NPROC +specifies the maximum number of simultaneously executing +recipes. +Normally it is imported from the environment, +where the system has set it to the number of available processors. +It can be decreased by assigning a new +value and can be set to 1 to force single-threaded recipe execution. +This is necessary when several targets access +a common resource such as +a status file or data base. +When there is no dependency between targets, +.CW mk +assumes the +recipes can be +executed concurrently. +Normally, this allows +multiple prerequisites to be built simultaneously; +for example, the object file prerequisites of +a load rule can be produced by compiling the source files in parallel. +.CW Mk +does not define the order of execution of independent recipes. +When the prerequisites of a rule are not independent, +the dependencies between them should be specified in a rule or the +.CW mkfile +should be single-threaded. +For example, the archive update rules +.P1 +$LIB(%):N: % +$LIB: ${OBJS:%=$LIB(%)} + ar rv $LIB `{membername $newprereq} +.P2 +compile source files in parallel but update +all members of the archive at once. +It is a mistake to merge the two rules +.P1 +$LIB(%): % + ar rv $LIB $stem +.P2 +because an +.CW ar +command is executed for every +member of the library. Not only is this +inefficient, but the archive is updated +in parallel, making interference likely. +.PP +The +.CW $nproc +environment variable contains a number associated +with the processor executing a recipe. +It can be used to create unique +names when the +recipe may be executing simultaneously on several processors. +Other maintenance tools provide mechanisms to control recipe +scheduling explicitly [Cmel86], but +.CW mk\fR'\fPs +general rules are sufficient for all but the most unusual cases. +.NH 1 +Deleting target files on errors +.PP +The +.CW D +attribute +causes +.CW mk +to remove the target file when a +recipe terminates prematurely. +The error message describing the +termination condition warns +of the deletion. +A partially built file is doubly dangerous: +it is not only wrong, but is also +considered to be up to date so +a subsequent +.CW mk +will not rebuild it. For example, +.P1 +pic.out:D: mk.ms + pic $prereq | tbl | troff -ms > $target +.P2 +produces the message +.P1 +.CW "mk: pic mk.ms | ... : exit status=rc 685: deleting 'pic.out'" +.P2 +if any program in the recipe exits with an error status. +.NH 1 +Unspecified dependencies +.PP +The +.CW -w +command line flag forces the +files following the flag to be treated +as if they were just modified. +We can use this flag with a command that selects files +to force a build based on the selection criterion. +For example, if the declaration of +a global variable named +.I var +is changed in a header file, +all source files that reference +it can be rebuilt with the command +.P1 +$ mk -w`{grep -l \fIvar\fP *.[cyl]} +.P2 +.NH 1 +Conclusion +.PP +There are many programs related to +.CW make , +each choosing a different balance between +specialization and generality. +.CW Mk +emphasizes generality but allows +customization through its pattern specifications and +include facilities. +.PP +Plan 9 presents a difficult problem, particularly +because of its heterogeneous collection of +architectures and languages. +.CW Mk\fR'\fPs +flexible specification language and simple +interaction with +.CW rc +work well in this environment. +.PP +As a result, +Plan 9 relies on +.CW mk +to automate almost all maintenance. +Tasks as diverse as updating the +network data base, producing the manual, +or building a release are expressed as +.CW mk +procedures. +.NH 1 +References +.LP +[Cmel86] R. F. Cmelik, +``Concurrent Make: A Distributed Program in Concurrent C'', +AT&T Bell Laboratories Technical Report, 1986. +.LP +[Feld79] S. I. Feldman, +``Make \(em a program for maintaining computer programs'', +.I +Software Practice & Experience , +.R +1979 +Vol 9 #4, +pp. 255-266. +.LP +[Flan95] Bob Flandrena, +``Plan 9 Mkfiles'', +this volume. +.LP +[Hume87] A. G. Hume, +``Mk: A Successor to Make'', +.I +USENIX Summer Conf. Proc., +.R +Phoenix, Az. +.NH 1 +Appendix: Differences between +.CW make +and +.CW mk +.PP +The differences between +.CW mk +and +.CW make +are: +.IP \(bu 3n +.CW Make +builds targets when it needs them, allowing systematic use of side effects. +.CW Mk +constructs the entire dependency graph before building any target. +.IP \(bu +.CW Make +supports suffix rules and +.CW % +metarules. +.CW Mk +supports +.CW % +and regular expression metarules. +(Older versions of +.CW make +support only suffix rules.) +.IP \(bu +.CW Mk +performs transitive closure on metarules, +.CW make +does not. +.IP \(bu +.CW Make +supports cyclic dependencies, +.CW mk +does not. +.IP \(bu +.CW Make +evaluates recipes one line at a time, replacing variables by their values and +executing some commands internally. +.CW Mk +passes the entire recipe to the shell without +interpretation or internal execution. +.IP \(bu +.CW Make +supports parallel execution of single-line recipes when building +the prerequisites for specified targets. +.CW Mk +supports parallel execution of all recipes. +(Older versions of +.CW make +did not support parallel execution.) +.IP \(bu +.CW Make +uses special targets (beginning with a period) +to indicate special processing. +.CW Mk +uses attributes to modify rule evaluation. +.IP \(bu +.CW Mk +supports virtual +targets that are independent of the file system. +.IP \(bu +.CW Mk +allows non-standard out-of-date determination, +.CW make +does not. +.PP +It is usually easy to convert a +.CW makefile +to or from an equivalent +.CW mkfile . diff --git a/doc/mk.pdf b/doc/mk.pdf Binary files differnew file mode 100644 index 00000000..987e07b6 --- /dev/null +++ b/doc/mk.pdf diff --git a/doc/mkfile b/doc/mkfile new file mode 100644 index 00000000..bd2f0bb2 --- /dev/null +++ b/doc/mkfile @@ -0,0 +1,67 @@ +<fonts.pal +NPROC = 1 +FILES = \ + title.ps \ + bltj.ps \ + styx.ps \ + asm.ps \ + changes.ps \ + gridinstall.ps \ + ebookimp.ps \ + styx.ps \ + mk.ps \ + asm.ps \ + compiler.ps \ + sh.ps \ + dis.ps \ + acid.ps \ + acidpaper.ps \ + acidtut.ps \ + mk.ps \ + asm.ps \ + compiler.ps \ + port.ps \ + hotchips.ps \ + install.ps \ + +DIRS = \ + limbo \ + perform \ +# limbotk \ + +PRE=$FONTS'.ps 9 +.nr PS 9 +.vs 11 +.nr VS 11 +.nr dP 1 +.nr dV 1p +.nr dT 4 +.nr XT 4 +' + +all:V: dirs + +print:V: \ + title.ps \ + +dirs:V: $FILES $DIRS mkfile fonts + for(i in $DIRS) @{ + cd $i + mk + } + +%.ps:D: %.ms + { echo $PRE; cat $stem.ms } | tbl | troff -mpm | lp -dstdout > $target + +gridinstall.ps:D: gridinstall.ms + PRE='' + { echo $PRE; cat gridinstall.ms } | tbl | troff -ms | lp -dstdout > $target + +title.ps:D: title + troff $prereq | lp -dstdout > $target + +changes.ps:D: changes.ms + tbl changes.ms | troff -ms | lp -d stdout >$target + +%.pdf: %.ps + ps2pdf <$stem.ps >$stem.pdf diff --git a/doc/perform/perform.ms b/doc/perform/perform.ms new file mode 100644 index 00000000..581498cb --- /dev/null +++ b/doc/perform/perform.ms @@ -0,0 +1,982 @@ +.TL +Reliable Benchmarking with Limbo on Inferno +.AU +John Bates +Vita Nuova Limited +.SP +3rd March 1999 +.br +Revised 20th February 2000 +.AB +Our goal was to identify a mechanism for performing +accurate, reliable and realistic benchmarking measurements +with Limbo on Inferno. +The measurements would need to be \fIaccurate\fR in the sense that +we could be confident that they were sufficiently close to the real time +taken to perform the measured operation. +We would consider a measurement to be \fIreliable\fR if it could be obtained +repeatedly when carried out under the same conditions at a later date. +Additionally, a measurement is only useful if it can be claimed +to be related to the expected performance of a real applicable operation, +we would call such a measurement \fIrealistic\fR. +The emphasis in this document is on achieving a reliable measurement. +.AE +.SH +Expectation +.LP +We would like to be able to make measurements with code like: +.P1 +s := Sample.new(NREP); +for(i:=0; i<NREP; i++) { + t = tstamp(); + sys->sleep(0); + t = tstamp() - t; + s.add(t-base); +} +.P2 +Where +.CW s +is an object that can be used to record up to +.CW NREP +measurements and +.CW base +is our predetermined estimate of the cost of actually making the +measurement. The Limbo function +.CW tstamp() +uses \fIdevbench\fR to obtain a microsecond timestamp. +Such a measurement would give us an idea of the cost of making a +.CW sys->sleep(0) +call and by examining a sample of such measurements we could reason about +the true cost of the call. In particular, we would get a feel for +just how reliable our estimate of the true cost was. +.LP +The first task was to determine a suitable value to use for +.CW base +by measuring how long it took to do \fInothing\fR\(dg. +.FS +.vs 9 +.FA +\(dg This benchmark is called +.CW BASE +in the \fIdevbench\fR benchmark suite. +.FE +.P1 +s := Sample.new(NREP); +for(i:=0; i<NREP; i++) { + t = tstamp(); + t = tstamp() - t; + s.add(t-base); +} +(n, mean, min, max, std) := s.stat(); +base = min; +.P2 +By repeating the measurement a large number of times and then by +choosing the minimum measurement we could hope to choose a +sensible value for +.CW base. +Our confidence in the chosen value +and in the results of subsequent benchmarking +would be greatest if the +distribution of measurements was \fInarrow\fR with most +of the values close to the minimum. +.SH +Initial Results +.LP +We ran the initial tests on a 150MHz Pentium PC with a standard +Inferno 2.0 native kernel and later with an Inferno 2.3 native kernel. +The commands +.P1 +bench -o >x +bgrep BASE x | plot +.P2 +run the benchmark suite leaving the observations in a file called +.CW x +and then extract the line containing the results for the test called +.CW BASE +and plot them to a Wm window under Inferno\(dg. +.FS +.vs 9 +.FA +\(dg Actually, to generate the graphs in this document I used plot -g which +produces grap(1) output. +.br +.vs +.FE +The command +.CW bgrep +is used in place of +.CW grep +because the Inferno +.CW grep +uses +.CW sys->print +to output lines and so inherits a very small upper bound on line length. +The +.CW -o +option to +.CW bench +delivers the individual observations rather than summary statistics. +The +.CW BASE +test repeats the above empty loop 1000 times. +Plotting the observations in the order in which they were observed +gives the surprising result shown in Figure 1. +.KF +.G1 +copy "x0base.gr" +.G2 +.I "Figure 1. Showing the unexpected variation in the BASE results." +.KE +The majority of values appear to be small, but the graph is dominated +by the relatively small number of very large irregular observations which +lie at around 6 milliseconds to 8 milliseconds +and a clearly discernible second set of values +which look to form a more regular pattern at about +the 1 millisecond level. +The smaller set of values can be seen more clearly by removing the +large values and rescaling the graph. +The +.CW -o +option to +.CW Plot +invokes a crude scheme to remove a layer of outliers. +It does this by calculating the sample mean and standard deviation and removing values which lie more than two standard deviations away from the mean. The process is repeated for each occurrence of the +.CW -o +option to +.CW plot. +Thus +.P1 +plot -ooo +.P2 +will remove three layers of outliers and then plot the remaining values. +.KS +Running +.P1 +bgrep BASE x | plot -o +.P2 +gives the output shown in figure 2. +.KE +.KF +.G1 +copy "x0baseo.gr" +.G2 +.I "Figure 2. Great variability in the BASE results, \ +even with the large outliers removed." +.KE +Again, a large number of small values (less than 500 microseconds) +and a smaller number of larger values lying at around about the 1 millisecond +level. +Running the commands +.P1 +bgrep BASE x | plot -p 1h +bgrep BASE x | plot -p 1h -o -z +.P2 +gives a histogram showing the distribution of the results. +Firstly, with all the values +and then with one level of outliers removed \(dg. +.FS +.vs 9 +.FA +\(dg The +.CW -z +option to \fIplot\fR forces a zero origin to be part of the plot. +.FE +.KF +.G1 +copy "x0baseh.gr" +.G2 +.I "Figure 3. Histogram showing the distribution of results \ +from the BASE benchmark." +.KE +In Figure 3 we can see a small set of values up above the 7 millisecond +level and then a slightly more focused set at around about 1 millisecond but +together these groups make up much less than 10% of the total values. +.KF +.G1 +copy "x0baseho.gr" +.G2 +.I "Figure 4. Histogram showing the distribution of results \ +from the BASE benchmark with the large outliers removed." +.KE +By removing a level of outliers we can see the distribution of the +lower values more clearly, as shown in Figure 4. +Even this lower cluster ranges from about 220 microseconds up to +about 500 microseconds. +.LP +We can conclude from these initial results +that it is not going to be possible to use this mechanism to +perform accurate or reliable benchmarking unless its performance +can be improved. +.SH +The Measurement Process +.LP +At this stage we're not actually measuring anything real, but looking +to obtain some confidence in our measurements. +We have started by observing times to complete the measurement of +\fInothing\fR. We do this by writing a Limbo program (\fIbench.b\fR) +which contains the following code: +.P1 +t0, t1, base: big; +NREP: con 1000; + +s := Sample.new(NREP); +treset(); +for(i:=0; i<NREP; i++) { + t0 = tstamp(); + t1 = tstamp(); + s.add(t1-t0); +} +(nil, nil, base, nil, nil) = s.stat(); + +iob.puts("BASE:1l:Observation::Time:us "); +s.obs(iob); +iob.puts("\\n"); +iob.flush(); +.P2 +The middle section of code performs the benchmark by taking +two consecutive timestamps and noting the difference between them. +This is repeated 1000 times and the observations accumulated +in the sample variable +.CW s. +The function +.CW s.stat() +returns a tuple containing count, mean, minimum, maximum +and standard deviation for the accumulated values. +We assign the minimum value to our variable +.CW base. +The function +.CW treset() +arranges for the timestamp code to start returning +small values and so reduces the likelihood of overflow +or signing related issues. +.LP +The last section of code outputs one line containing the individual +observations separated by spaces and with a suitably formatted +initial \fIword\fR which labels the line so that +.CW plot +can make a useful interpretation of the results. +.KS +.LP +The functions +.CW treset() +and +.CW tstamp() +make use of files served by \fIdevbench\fR and look like this: +.P1 +tsfd: ref Sys->FD; +treset() +{ + tsfd = sys->open("/dev/busec", sys->OWRITE); + if(tsfd == nil) + return; + buf := array[1] of byte; + n := sys->write(tsfd, buf, len buf); + tsfd = sys->open("/dev/busec", sys->OREAD); +} +.P3 +tstamp(): big +{ + buf := array[128] of byte; + n := sys->read(tsfd, buf, len buf); + if(n < 0) + return big 0; + + return big string buf[0:n]; +} +.P2 +.KE +\fIDevbench\fR must have been previously bound into the +namespace +.P1 +bind -b '#x' /dev +.P2 +so that the files +.P1 +/dev/bctl +/dev/bdata +/dev/busec +.P2 +are available. +A microsecond timestamp is provided by reading from +.CW /dev/busec +and is reset to zero +each time anthing is written to it. +The function +.CW treset() +resets the timestamp by writing to the file and then opens it for reading. +The function +.CW tstamp() +reads the timestamp from the file and converts it into a +.CW big +value for use in the program. +The device driver ignores the offset when reading from the file so that it +is not necessary to +.CW seek +to the beginning of the file before each read. +The important part of the benchmark consists of two consecutive calls to +.CW tstamp(). +We need to identify where time is being spent; either in the calls to +.CW tstamp() +or else inside the function itself. +.SH +Costing +.LP +The \fIdevbench\fR suite of programs includes one for timing +individual lines of Limbo code and breaking down the time +spent on each line into times for each of the Dis operations +invoked by that line; the program is called \fIcost\fR. +To find out how long each part of the benchmark timing loop +takes we can invoke +.P1 +cost -f bench.b -s bench +.P2 +Which results in the following output - edited to just +show the timing loop and the function +.CW tstamp() +\&. +The first line is the output from \fIbench\fR giving the +mean, minimum, maximum and standard deviation of microsecond times for +1000 repetitions of the loop. We see a minimum of 402 microseconds +and a maximum of just over 9 milliseconds. +The remaining lines are the output of \fIcost\fR; those beginning +with a dash are Dis operation times for the preceding Limbo +source code line. Dis operation lines contain an operation name, +an execution count and the mean, minimum, maximum and +standard deviation of execution times. +.P1 +BASE:summary:Sample:n:Time:us 1000 486 402 9053 499 + +-- bench.b +\&... + treset(); +- frame 1 2.13 us 2.13 us 2.13 us 0 ns +- call 1 807 ns 807 ns 807 ns 0 ns + s := Sample.new(NREP*10); +- mframe 1 4.85 us 4.85 us 4.85 us 0 ns +- movw 1 2.27 us 2.27 us 2.27 us 0 ns +- lea 1 1.57 us 1.57 us 1.57 us 0 ns +- mcall 1 2.71 us 2.71 us 2.71 us 0 ns + for(i:=0; i<NREP*10; i++) { +- movw 1 1.99 us 1.99 us 1.99 us 0 ns +- blew 1001 1.60 us 1.51 us 34.04 us 1.03 us + t0 = tstamp(); +- frame 1000 2.43 us 2.29 us 3.40 us 133 ns +- lea 1000 1.00 us 953 ns 27.74 us 847 ns +- call 1000 1.45 us 1.29 us 2.24 us 153 ns + t1 = tstamp(); +- frame 1000 3.45 us 3.01 us 5.57 us 293 ns +- lea 1000 1.22 us 1.02 us 1.61 us 173 ns +- call 1000 1.44 us 1.29 us 1.75 us 140 ns + s.add(t1-t0); +- mframe 1000 3.65 us 3.37 us 24.73 us 700 ns +- movp 1000 1.99 us 1.48 us 2.96 us 267 ns +- subl 1000 2.43 us 2.23 us 4.80 us 173 ns +- mcall 1000 2.11 us 1.95 us 2.51 us 120 ns +- addw 1000 1.62 us 1.48 us 2.50 us 127 ns +- jmp 1000 1.50 us 1.37 us 1.81 us 120 ns + } + (nil, nil, base, nil, nil) = s.stat(); +- mframe 1 2.66 us 2.66 us 2.66 us 0 ns +- movp 1 1.39 us 1.39 us 1.39 us 0 ns +- lea 1 1.41 us 1.41 us 1.41 us 0 ns +- mcall 1 1.37 us 1.37 us 1.37 us 0 ns +- movl 1 1.56 us 1.56 us 1.56 us 0 ns + if(sflag) +- beqw 1 2.14 us 2.14 us 2.14 us 0 ns + iob.puts("BASE:summary:Sample:n:Time:us " + + s.str() + "\\n"); +- mframe 1 4.01 us 4.01 us 4.01 us 0 ns +- movp 1 2.87 us 2.87 us 2.87 us 0 ns +- mframe 1 1.75 us 1.75 us 1.75 us 0 ns +- movp 1 1.69 us 1.69 us 1.69 us 0 ns +- lea 1 1.15 us 1.15 us 1.15 us 0 ns +- mcall 1 2.35 us 2.35 us 2.35 us 0 ns +- addc 1 19.57 us 19.57 us 19.57 us 0 ns +- addc 1 8.55 us 8.55 us 8.55 us 0 ns +- lea 1 1.49 us 1.49 us 1.49 us 0 ns +- mcall 1 3.65 us 3.65 us 3.65 us 0 ns + iob.flush(); +- mframe 1 4.50 us 4.50 us 4.50 us 0 ns +- movp 1 2.13 us 2.13 us 2.13 us 0 ns +- lea 1 967 ns 967 ns 967 ns 0 ns +- mcall 1 1.89 us 1.89 us 1.89 us 0 ns + } +\&... +.P3 + +# return timestamp in microseconds +tstamp(): big +{ + buf := array[128] of byte; +- newa 2000 6.98 us 5.37 us 80.91 us 2.43 us + n := sys->read(tsfd, buf, len buf); +- mframe 2000 3.05 us 2.59 us 4.05 us 227 ns +- movp 2000 2.33 us 2.14 us 3.21 us 120 ns +- movp 2000 1.19 us 1.14 us 2.93 us 73 ns +- lena 2000 1.07 us 907 ns 34.48 us 760 ns +- lea 2000 893 ns 860 ns 33.00 us 907 ns +- mcall 2000 133.81 us 89.88 us 8.61 ms 514.44 us + if(n < 0) +- blew 2000 2.27 us 1.76 us 3.43 us 313 ns + return big 0; + + return big string buf[0:n]; +- movp 2000 2.21 us 1.67 us 3.38 us 253 ns +- slicea 2000 10.06 us 8.35 us 39.31 us 1.40 us +- cvtac 2000 12.02 us 11.13 us 16.63 us 553 ns +- cvtcl 2000 16.39 us 15.78 us 45.16 us 787 ns +- ret 2000 10.52 us 9.79 us 13.97 us 333 ns +} +.P2 +We can see from these figures that times for both calls +to +.CW tstamp() +are reasonably low. But looking at the call to +.CW "sys->read()" +in +.CW tstamp() +we can see a maximum of just over 8½ milliseconds for the \fImcall\fR +operation. We see too that this operation also has a high standard deviation +of 514 microseconds across 2000 calls and so it looks like it may be +the cause of the large observed delays. +.LP +In order to get a second view of what was happening we surrounded the +timing code with calls to enable kernel profiling. +.P1 +profon(); +for(i:=0; i<NREP*10; i++) { + t0 = tstamp(); + t1 = tstamp(); + s.add(t1-t0); +} +profoff(); +\&... +profon() +{ + if(sys->write(kpctl, array of byte "startclr", 8) < 8) + error("kprof start"); +} + +profoff() +{ + if(sys->write(kpctl, array of byte "stop", 4) < 4) + error("kprof stop"); +} +.P2 +Having previously bound in \fIdevkprof\fR +.P1 +bind -b '#T' /dev +.P2 +and opened \fI/dev/kpctl\fR for writing. +By examining the contents of \fI/dev/kpdata\fR with \fIkprof\fR +we see that the garbage collection functions \fImarkheap\fR +and \fIrungc\fR are taking up a surprisingly large amount +of kernel time for this operation. +.P1 +total: 1460 in kernel text: 1460 outside kernel text: 0 +KTZERO 80100000 +ms % sym +130 8.9 markheap +110 7.5 iunlock +100 6.8 xec +90 6.1 rungc +80 5.4 chartorune +70 4.7 c2string +60 4.1 numbconv +50 3.4 string2c +40 2.7 sched +40 2.7 wakeup +30 2.0 splhi +30 2.0 freeptrs +30 2.0 memset +30 2.0 dodiv +30 2.0 _divvu +30 2.0 strtoll +20 1.3 _mulv +20 1.3 vmachine +20 1.3 unlock +20 1.3 runproc +20 1.3 DEA +10 0.6 kwrite +.P2 +.SH +Interpreting the Results +.LP +In order to progress we need to look more closely at what is +happening inside the call to +.CW "sys->read". +As far as the kernel is concerned, there are two kinds of \fImcall\fR +operations; those which result in a call to a builtin function and those +which result in a call to a non-builtin function in another module. +.CW "Sys->read" +is of the former kind, it is a system builtin whose definition lies in the +function \fISys_read\fR. +When executing \fImcall\fR for a normal function the virtual machine +primes the register set so that on the next iteration the operations +will be fetched from the code associated with the new function. +When executing \fImcall\fR for a builtin the virtual machine actually executes +the associated function before returning to the next operation. +The code for \fISys_read\fR looks like this: +.P1 +void +Sys_read(void *fp) +{ + int n; + F_Sys_read *f; + + f = fp; + n = f->n; + if(f->buf == (Array*)H) { + *f->ret = 0; + return; + } + if(n > f->buf->len) + n = f->buf->len; + + release(); + *f->ret = kread(fdchk(f->fd), f->buf->data, n); + acquire(); +} +.P2 +The important thing to note is that in common with all builtin +functions which must perform some kernel function +\fISys_read\fR releases the interpreter before carrying out +its task and then acquires it again before returning to +the body of the \fImcall\fR operation. +Releasing the interpreter means removing this Dis thread +from the list of threads to be run and making ready +another virtual machine from the list of kernel processes +waiting to use the interpreter, if necessary by first creating a new +one. +Once the interpreter has been released the process carries +out its operation, in this case a call to \fIkread\fR, +and then attempts to reacquire the interpreter. +If no other process is using the interpreter it will get it back +immediately, otherwise the process sets its state to \fIQueueing\fR +and calls +.CW sched() +to wait for its turn. +How long it has to wait depends on how many other threads are running and +whether they are compiled or interpreted. +If another process wants to use the interpreter then it may run +for a short period of time before making a call to \fIrungc()\fR +to perform +a small amount of garbage collection +and then yielding control to our process. +If the other process is running an interpreted thread then it may execute +for up to 2048 Dis instructions or for a more variable time if +it is a compiled thread. +We can see the likely effect of this by timing calls to \fIrungc\fR. +The following code does this inside \fIdevbench\fR\(dg: +.FS +.vs 9 +.FA +\(dg This benchmark is called +.CW GCSCHED +in the \fIdevbench\fR benchmark suite. +.FE +.P1 +log("GCSCHED:1d:Observation:n:Time:us"); +for(i=0; i<1000; i++) { + (*ts)(&t0); + rungc(head); + (*ts)(&t1); + log(" %.2f", ts2us(t1-t0)); + release(); + acquire(); +} +log("\\n"); +.P2 +The calls to +.CW release() +and +.CW acquire() +allow other Dis threads to run and so exercise the memory allocation +code in much the same way that the same calls in +.CW tstamp() +do. +On each call to +.CW rungc() +the garbage collector visits 50 blocks in the heap. +The times for 1000 calls to rungc are shown in Figure 5. +.KF +.G1 +copy "x9gc.gr" +.G2 +.I "Figure 5. Times for 1000 calls to rungc()." +.KE +Running +.P1 +cat results | bcut 1-201 | plot +.P2 +will give us just the first 200 data points in a little more detail, +these are shown in Figure 6. +.KF +.G1 +copy "x9gc200.gr" +.G2 +.I "Figure 6. Times for the first 200 calls to rungc()." +.KE +We can see that the time for calls to rungc has a very repeatable pattern, +but there is no sign of the large 6 millisecond delay. +.LP +Garbage collection is also done during idle virtual machine cycles. +If no thread is ready to run the interpreter calls +.CW execatidle() +and then sleeps until there is something to do. +.CW Execatidle() +attempts to complete 3 epochs of garbage collection, checking +after each call to +.CW rungc() +to see if any thread is ready to run; if a thread is ready, normal interpretation +is resumed immediately. +.KS +The following code in \fIdevbench\fR is used to determine +how long it might take the garbage collector to run 3 epochs\(dg: +.P1 +int +idlegc(void *p) +{ + int done; + Prog *head; + vlong t0, t1, tot; + USED(p); + + head = progn(0); /* isched.head */ + done = gccolor + 3; + tot = 0; + while(gccolor < done && gcruns()) { + if(tready(nil)) + break; + (*ts)(&t0); + rungc(head); + (*ts)(&t1); + tot += t1-t0; + } + log(" %.2f", ts2us(tot)); + nidle--; + if(nidle == 0) { + log("\n"); + return 1; + } + return 0; +} +.P2 +.KE +.FS +.vs 9 +.FA +\(dg This benchmark is called +.CW GCIDLE +in the \fIdevbench\fR benchmark suite. +.FE +The code is invoked by assigning 100 to +.CW nidle +and then calling +.P1 +atidle(idlegc, 0); +.P2 +so that the interpreter will call this code when idle +in the same way that it calls the normal garbage collection code. +.KS +The function +.CW tready() +is defined as +.P1 +tready(void *a) +{ + return isched.runhd != nil || isched.yield != 0; +} +.P2 +.KE +returning \fItrue\fR whenever there is a thread in the run queue +or when another interpreter kernel process has called \fIacquire()\fR +to request that control of the interpreter be \fIyielded\fR to it. +In fact, the code mirrors the garbage collection code in the interpreter, +breaking when another thread is ready to be run. +.KF +.G1 +copy "x31.gr" +.G2 +.I "Figure 7. Times for performing three epochs of garbage collection." +.KE +.LP +Figure 7 shows the times for performing three epochs of garbage collection. +It is clear from these results that idle garbage collection can take +some considerable time even when the system is relatively quiet. +The times for completing 3 epochs of garbage collection +were of the same order of magnitude as the large delays we were +noticing with the timestamping earlier. +However, the system is clearly designed to relinquish control +whenever another thread needs to run. +It was not, therefore, clear that this could be the cause of these delays. +.SH +An Explanation +.LP +Clock interrupts happen on this system at regular intervals +of 10 milliseconds. +At each such interrupt the handler checks to see if any +kernel processes are ready to run, and if so it calls \fIsched\fR. +This gives the system its preemptive scheduling. +Suppose we are executing a call to +.CW sys->read(). +If after calling \fIrelease\fR but before returning +from the call to \fIkread\fR and calling \fIacquire\fR a clock interrupt goes off +then another process may grab the interpreter and complete a scheduler +quantum. +If no other threads are ready to run +because, like us, they are still in the kernel then +.CW tready() +will return \fIfalse\fR +and so it will choose to perform idle garbage collection. +There is an upper bound on how long this may go on for; +it is the minimum of the time it takes to perform three epochs +of garbage collection and the time to the next clock interrupt +which may be as much as 10 milliseconds. +This would give rise to the periodic high values we have seen +and would likely result in delays of the same order of magnitude +as those that we have seen. +.LP +One way to check this hypothesis would be to modify the condition +upon which the idle garbage collection is halted to include a test +for kernel processes that are ready to run. +.KS +The existing code in the function \fIport/dis.c:execatidle()\fR breaks +from the process of garbage collection only when another interpreter +requests control or when another thread is ready to run. +.P1 +done = gccolor+3; +while(gccolor < done && gcruns()) { + if(isched.yield != 0 || isched.runhd != isched.runtl) + break; + + rungc(isched.head); +} +.P2 +.KE +The result of this is that when a thread makes a call that takes +it into the kernel it is effectively given a lower priority than the idle time +garbage collection. This effect can only be seen if a clock interrupt happens +which results in control being switched to an interpreter thread which completes +its execution quantum and enters idle time garbage collection. Ordinarily, +a thread in the kernel will either run to completion or will, itself, call +.CW sched() +while waiting for an event to occur. +.LP +This effect will be visible in any Inferno thread that makes a call to a system +function which then results in a \fIrelease\fR of the interpreter - not +just this benchmarking application. +.SH +Improving the Results +.LP +We have changed the code in \fIexecatidle\fR to call \fIsched\fR +on detection of +ready kernel processes. +.KS +It now looks like this:\(dg +.P1 +done = gccolor+3; +while(gccolor < done && gcruns()) { + if(isched.yield != 0 || isched.runhd != isched.runtl) + break; + rungc(isched.head); + sched(); +} +.P2 +.KE +.FS +.vs 9 +.FA +\(dg A first attempt checked the number of processes ready +to run, making the call to +.I sched +conditional, but that did not correctly account for their priorities +relative to the process running the collector. +.FE +Processes in the kernel running at the +same priority as the collector are interleaved with the collector. +If such a process returns from a +kernel operation and attempts to \fIacquire\fR the interpreter then +this loop will exit the next time around because +.CW isched.yield +will be set. +Kernel processes which do not require the interpreter, +such as the network timers, will get to run without interrupting +the garbage collection. +The effect of this change can be, readily, seen in much smaller delays +shown in Figure 8. +.KF +.G1 +copy "x27base.gr" +.G2 +.I "Figure 8. Improved results from idle garbage collection change" +.KE +The large 6 millisecond delays have disappeared but regular 1 millisecond +delays still remain. Looking more closely at the first 200 +times, in Figure 9, we can see that the pattern looks very similar to the pattern +we know that we get from repeatedly calling \fIrungc()\fR. +.KF +.G1 +copy "x27base200.gr" +.G2 +.I "Figure 9. Improved results from idle garbage collection change - \ +the first 200 values" +.KE +Indeed, this is most likely the cause of the regular pattern. +The call to \fIrungc\fR after completing each quantum of scheduler +activity results in quite a variable delay which means that the real +time taken in executing +.CW tstamp() +will be difficult to predict. +This will be true for any Limbo function that calls a system builtin +which in turn releases the interpreter. +.LP +I suspect that the single large delay will occur when the garbage +collector completes an epoch and runs through marking each +root as a propagator. +There may be ways to improve the situation by smoothing this operation, +perhaps by making it incremental or by temporarily disabling garbage +collection or by optimising the conditions under which garbage collection +is done. +However, garbage collection has to be done sometime, and it is not +clear that, in general, deferring it is always the best thing to do - we may get good +results when the system is quiet but very bad results when garbage +collection is required. +It would seem likely that there may have been some work done on this aspect +of the virtual machine in later incarnations of the Inferno system. +.LP +There are two ways forward. We could accept that garbage collection +is an integral part of the system and not try to measure small units +of time - instead, we could measure the time for a lot of operations +and average them out and then subtract the known garbage collection +background count from the overall time to get a feel for how much time +taken performing our operation of interest. +There are several problems with this approach. +Firstly, it seems unreasonable not to be able to +measure something small with Inferno; frustrating too, when the problem +is caused by a visually regular disturbance. +Secondly, measuring something over a long period of time gives +ample opportunity for other factors to interfere with the operation +of interest (for example, interrupts from external interfaces). +.LP +The second way forward is to modify our measurement process so that +its interaction with the virtual machine is minimised in such a way that +it can be used more predictably and, hence, is more reliable. +We did this by providing a builtin function +.CW bench->microsec() +and by providing an interface which allowed garbage collection to be +disabled for a period of time. +.KS +The Limbo module prototype looks like this: +.P1 +{ + PATH: con "$Bench"; + + microsec: fn(): big; + disablegc: fn(); + enablegc: fn(); +}; +.P2 +.KE +.KS +and the Limbo function to return a timestamp just calls the builtin. +.P1 +xstamp(): big +{ + return bench->microsec(); +} +.P2 +.KE +Using \fIxstamp()\fR in place of \fItstamp()\fR +without disabling garbage collection results in a significant +improvement to the times returned by the +.CW BASE +benchmark\(dg. +These results are shown in Figure 10. +.FS +.vs 9 +.FA +\(dg The kernel used to make this recording (and all subsequent in this document) +has had the modifications made to the idle garbage collection code +described earlier. We found that switching to using a builtin with the +old kernel did result in much better times but could still occasionally +fall foul of a clock interrupt. +.FE +.KF +.G1 +copy "x28base.gr" +.G2 +.I "Figure 10. Further improvement by using a builtin timestamp." +.KE +I suspect that the few large values are as a result of external interrupts +or scheduler quantum garbage collection. +The distribution of these values is shown in Figure 11. +.KF +.G1 +copy "x28basehd.gr" +.G2 +.I "Figure 11. The distribution of the results shown in Figure 10" +.KE +Out of the 1000 measurements all but 6 of them were +recorded at 6 microseconds. +.KS +.LP +By wrapping the entire benchmark with calls to +.P1 +bench->disablegc() +.P2 +and +.P1 +bench->enablegc() +.P2 +which disable and then reenable all garbage collection +the figures can be improved even further. +.KE +.KF +.G1 +copy "x29basehd.gr" +.G2 +.I "Figure 12. The distribution of results obtained when garbage collection \ +is completely disabled." +.KE +The histogram of timestamps obtained when garbage collection +is completely disabled is shown in Figure 12. +It is clear that the values we are now getting +from \fIxstamp()\fR are much more acceptable. +Out of the 1000 measurements, five were recorded at 12 microseconds, +one at 8 microseconds and the remainder at either 6 or 7 microseconds. +.BP +.SH +Conclusion +.LP +Comparing the histogram for the original measurements +with the one obtained by making a simple change to +the interpreter and by using a builtin instead of using +.CW sys->read() +it is clear that considerable improvements have been made. +This behaviour will be visible in any Inferno thread that makes a +call to a system function which, in turn, causes the interpreter +to be released. These effects will be present in any Inferno application +that uses, for example, +.CW "sys->read(), sys->write(), sys->mount()" +and +.CW "sys->bind()" +or any other such builtin system functions. +.LP +The decision to enable or disable garbage collection whilst benchmarking +is a difficult one. +Disabling it results in slightly better measurement, but is somewhat less realistic. +The improvement gained by disabling it doesn't seem good enough to +justify the likely criticism which might be levelled at the subsequent results. +.LP +It would appear that to enable reliable benchmarking +of Limbo programs under Inferno two changes should be applied. +Firstly, a simple change should be made to the interpreter to prevent idle +garbage collection from grabbing a large time slot when scheduling +occurs at a clock interrupt +and one or more interpreter threads are in kernel operations. +Secondly, making the timestamp function a builtin +results in a simpler interface to the kernel and results in +a measurement process whose execution time is reliable. +Applied together, these changes make it possible to perform +reliable benchmarking of Limbo programs under Inferno. diff --git a/doc/perform/perform.pdf b/doc/perform/perform.pdf Binary files differnew file mode 100644 index 00000000..1d1efe5a --- /dev/null +++ b/doc/perform/perform.pdf diff --git a/doc/realinferno/real.ms b/doc/realinferno/real.ms new file mode 100644 index 00000000..e2174dba --- /dev/null +++ b/doc/realinferno/real.ms @@ -0,0 +1,611 @@ +.FP palatino +.de ]C +\&[\\$1]\\$2 +.. +.if \nZ=0 .so real.ref +.EQ +delim $$ +.EN +.TL +Real Inferno +.AU +.I "Eric Grosse" +.AI +.I "Lucent Technologies, Bell Labs" +.I "Murray Hill NJ 07974 USA" +.I "ehg@bell-labs.com" +.\"date{19 Aug 1996, minor revisions 7 Jan 1998} +.FS +Previously appeared in R.F. Boisvert (editor), +.ft I +The Quality of Numerical Software: Assessment and +Enhancement: Proceedings of the IFIP TC2/WG2.5 +Working Conference on the Quality of Numerical +Software, Oxford, +United Kingdom, 8-12 July 1996, +.ft R +Chapman Hall, +London, +1997 (pp. 270-279). +.FE +.AB +Inferno is an operating system well suited to applications that need to be +portable, graphical, and networked. This paper describes the fundamental +floating point facilities of the system, including: tight rules on +expression evaluation, binary/decimal conversion, exceptions and rounding, +and the elementary function library. +.AE +.PP +Although the focus of Inferno is interactive media, its portability across +hardware and operating platforms, its relative simplicity, and its strength +in distributed computing make it attractive for advanced scientific +computing as well. Since the appearance of a new operating system is a +relatively uncommon event, this is a special opportunity for numerical +analysts to voice their opinion about what fundamental facilities they need. +The purpose of this short paper is to describe numerical aspects of the +initial release of Inferno, and to invite comment before the tyranny of +backward compatibility makes changes impossible. +.PP +An overview of Inferno is given by Dorward et. al. +.]C "Inferno" , +but for our immediate purposes it may suffice to say that Inferno plays the +role of a traditional operating system (with compilers, process control, +networking, graphics, and so on) but can run either on bare hardware or on +top of another operating system like Windows95 or Unix. Programs for +.I "Inferno" +are written in the language +.I "Limbo" +and compiled to +machine-independent object files for the +.I "Dis" +virtual +machine, which is then implemented with runtime compilation for best +performance. Files are accessible over networks using the +.I "Styx" +protocol; together with the presentation of most system resources as files +and the manipulation of file namespaces, this permits integration of a +collection of machines into a team. Limbo looks somewhat like a mixture of C +and Pascal, augmented by modules (to cope with the namespace and dynamic +loading needs of large programs) and by a channel facility for convenient +(coarse-grain) parallel programing. Array references are bounds-checked and +memory is garbage collected. +.PP +The rest of this paper covers the fundamental floating point environment +provided by the Limbo compiler and +.I "math" +module, the ``elementary +functions,'' and finally some comments on why particular definitions were +chosen or why certain facilities were included or excluded. This discussion +assumes the reader is familiar with scientific computing in general and the +IEEE floating point standard in particular. +.NH 1 +Floating point +.PP +In Limbo, arithmetic on literal and named constants is evaluated at compile +time with all exceptions ignored. Arithmetic on variables is left by the +compiler to runtime, even if data path analysis shows the value to be a +compile time constant. This implies that tools generating Limbo source must +do their own simplification, and not expect the compiler to change $x/x$ +into $1$, or $-(y-x)$ into $x-y$, or even $x-0$ into $x$. Negation $-x$ +changes the sign of $x$; note that this not the same as $0-x$ if $x=0$. +.PP +The compiler may perform subexpression elimination and other forms of code +motion, but not across calls to the mode and status functions. It respects +parentheses. The evaluation order of $a+b+c$ follows the parse tree and is +therefore the same as for $(a+b)+c$. These are the same rules as for Fortran +and C. +.PP +Contracted multiply-add instructions (with a single rounding) are not +generated by the compiler, though they may be used in the native +.SM BLAS +libraries. All arithmetic follows the IEEE floating point standard +.]C "IEEEfp" , +except that denormalized numbers may not be supported; see the +discussion in section 3. +.PP +The most important numerical development at the language level recently has +been accurate binary/decimal conversion +.]C "Clinger" +.]C "Gay" +.]C "SteeleWhite" . +Thus printing a real using +.CW "\%g" +and reading +it on a different machine guarantees recovering identical bits. (Limbo uses +the familiar +.I "printf" +syntax of C, but checks argument types against +the format string at compile time, in keeping with its attempt to help the +programmer by stringent type checking.) A good +.I "strtod/dtoa" +is, +unfortunately, 1700 lines of source (15kbytes compiled), though with modest +average runtime penalty. This code must be used in the compiler so that +coefficients are accurately transferred to bytecodes. Smaller, faster, but +sloppier, runtimes will also be provided when mandated by limited memory and +specialized use. However, programmers may assume the features described in +this paper are present in all Inferno systems intended for general computing. +.PP +Each thread has a floating point control word (governing rounding mode and +whether a particular floating point exception causes a trap) and a floating +point status word (storing accumulated exception flags). Functions +.I "FPcontrol" +and +.I "FPstatus" +copy bits to the control or status word, in +positions specified by a mask, returning previous values of the bits. +.I "getFPcontrol" +and +.I "getFPstatus" +return the words unchanged. +.PP +The constants +.I "INVAL, ZDIV, OVFL, UNFL, INEX" +are non-overlapping +single-bit masks used to compose arguments or return values. They stand for +the five IEEE exceptions: +.IP • +``invalid operation'' ($0/0$,$0 * infinity $,$ infinity - infinity $,$sqrt{-1}$) +.IP • +``division by zero'' ($1/0$), +.IP • +``overflow'' ($1.8e308$) +.IP • +``underflow'' ($1.1e-308$) +.IP • +``inexact'' ($.3*.3$). +.PP +The constants +.I "RND_NR, RND_NINF, RND_PINF, RND_Z" +are distinct +bit patterns for ``round to nearest even'', ``round toward $-{infinity} $'', +``round toward $+{infinity} $'', ``round toward $0$'', any of which can be set +or extracted from the floating point control word using +.I "RND_MASK" . +For example, +.IP • +to arrange for the program to tolerate underflow, +.I "FPcontrol(0,UNFL)." +.IP • +to check and clear the inexact flag, +.I "FPstatus(0,INEX)." +.IP • +to set directed rounding, +.I "FPcontrol(RND_PINF,RND_MASK)." +.PP +By default, +.I "INEX" +is quiet and +.I "OVFL, UNFL, ZDIV," +and +.I "INVAL" +are fatal. By default, rounding is to nearest even, and library +functions are entitled to assume this. Functions that wish to use quiet +overflow, underflow, or zero-divide should either set and restore the +control register themselves or clearly document that the caller must do so. +The ``default'' mentioned here is what a Limbo program gets if started in a +fresh environment. Threads inherit floating point control and status from +their parent at the time of spawning and therefore one can spawn a ``round +toward 0'' shell and re-run a program to effortlessly look for rounding +instabilities in a program. +.NH 1 +Elementary functions +.PP +The constants +.I "Infinity, NaN, MachEps, Pi, Degree" +are defined. Since +Inferno has thorough support of Unicode, it was tempting to name these $infinity $, $ε $, $π $, and °, but people (or rather, their +favorite text editing tools) may not be ready yet for non-\s-2ASCII\s0 +source text. +.I "Infinity" +and +.I "NaN" +are the positive infinity +and quiet not-a-number of the IEEE standard, double precision. +.I MachEps +is $2 sup {-52}$, the unit in the last place of the mantissa $1.0$. +The value of +.I "Pi" +is the nearest machine number to the +mathematical value $π $. +.I "Degree" +is +$"Pi" / 180$. +.PP +Three useful functions +.I "fdim, fmax, fmin" +are adopted from the +Numerical C extensions +.]C "NumerC" . +The unusual one of these, often +denoted $(x-y) sub {+}$, is defined by $roman "fdim" ( x , y )=x-y$ if $x > y$, else $0$. The compiler may turn these into efficient machine instruction sequences, +possibly even branch-free, rather than function calls. There are two almost +redundant mod functions: +.I "remainder(x,y)" +is as defined by the IEEE +standard (with result $roman "|" r roman "|" <= y/2$); +.I "fmod(x,y)" +is $x roman "mod" y$, +computed in exact arithmetic with $0<= r<y$. Limbo has a ``tuple'' type, +which is the natural return value in the call $(i,f)= roman "modf" ( x )$ to +break $x$ into integer and fractional parts. The function +.I "rint" +rounds to an integer, following the rounding mode specified in the floating +point control word. +.PP +For a good-quality, freely-available elementary function library, +.I "math" +uses the IEEE subset of +.I "fdlibm" +.]C "fdlibm" . +Of course, a +conforming implementation may use entirely different source, but must take +care with accuracy and with special arguments. There are the customary +power, trigonometric, Bessel, and erf functions, and specialized versions $roman "expm1"( x )=e sup x - 1$, $roman "log1p" ( x )=log ( 1 + x )$. An additional function +$roman "pow10"( n ) = 10 sup n$ is defined; in the default implementation this is +just fdlibm's $roman "pow" ( 10. , n )$ but it is provided so that separate +trade-offs of accuracy and simplicity can be made +.]C "MacIlroy" . +.I "fdlibm" +uses extra precise argument reduction, so the computed $sin (n*Pi)$ +is small but nonzero. If demands warrant, degree versions of the +trigonometric functions will be added, but for now the style $sin (45*Degree)$ is used. +The library also provides IEEE functions +.I "ilogb, scalbn, copysign, finite, isnan," +and +.I "nextafter" . +.PP +The functions +.I "dot, norm1, norm2, iamax, gemm" +are adopted from the +.SM BLAS +.]C "blas" +to get tuned linear algebra kernels for +each architecture, possibly using extra-precise accumulators. These are +defined by $sum {{x sub i}{y sub i}}$, $sum roman | {x sub i} roman | $, $ sqrt{sum { x sub {i sup 2}}} $, $i$ such +that $roman | {x sub i} roman | = roman max $, and $C= alpha AB + beta C$ with optional transposes on $A$ +and $B$. Since Limbo has only one floating-point type, there is no need here +for a precision prefix. Limbo array slices permit the calling sequences to +be more readable than in Fortran77 or C, though restricted to unit stride. +This encourages better cache performance anyway. The matrix multiply +function +.I "gemm" +remains general stride (and is the foundation for +other operations +.]C "Kagstrom" ). +.PP +Limbo is like C in providing singly-subscripted arrays with indexing +starting at 0. Although Limbo offers arrays of arrays, as in C, for +scientific work a better choice is to adopt the style of linearizing +subscripts using Fortran storage order. This promotes easier exchange of +data with other applications and reuses effort in organizing loops to +achieve good locality. In previous language work +.]C "pine" , +we implemented +a C preprocessor that allowed the programmer to choose a convenient origin +(such as 1) and have it compiled into 0 for the base language; because we +passed arrays as dope vectors, we were even able to allow different origins +for the same array in calling and called functions. The main lesson we +learned from that experience, however, was that permutations become a +nightmare when there is anything but dogmatic adherence to a single origin. +So for an $m$ by $n$ matrix $A$, the programmer should use loops with $0<= +i<m$ and $0<= j<n$ and access $A[i+m*j]$. +.PP +For interoperability with foreign file formats and for saving main memory in +selected applications, functions are provided for copying bits between and +reals and 32-bit or 64-bit IEEE-format values. +.PP +Finally, +.I "math" +provides a tuned quicksort function +.I "sort(x,p)" +where +.I "x" +is a real array and +.I "p" +is an int array representing +a 0-origin permutation. This function leaves the contents of +.I "x" +untouched and rearranges +.I "p" +so that $x[{p sub i}]<= x[p sub {i+1}]$. This is +usually what one wants to do: sort an array of abstract data types based on +some key, but without the need to actually swap large chunks of memory. +.NH 1 +Rationale +.PP +This section discusses why certain numerical features were included or not. +.NH 2 +Rounding modes and accumulated exceptions +.PP +Directed rounding is only needed in a very few places in scientific +computing, but in those places it is indispensable. Accumulated floating +point exceptions are even more useful. User trap handling is a harder +problem, and may be worth leaving for later, possibly with a default +``retrospective diagnostics'' log +.]C "Kahan" . +.PP +Note that the exception masks must be architecture independent, since they +reside in the Limbo bytecodes, and therefore the implementation involves a +small amount of bit fiddling. Still, it is efficient enough to encourage +use. It would be difficult to port to a processor that only had static +rounding modes in instruction opcodes rather than the dynamic model +specified in section 2 of the IEEE standard. Fortunately, the Alpha +does provide both models. +.NH 2 +Sudden underflow +.PP +Some processor vendors make supporting gradual underflow just too hard. (One +must struggle upon the system trap to reconstruct exactly which instruction +was executing and what the state of the registers was. On the MIPS, it is +said to be 30 pages of assembler.) So Inferno supports denormalized numbers +only if the hardware makes this easy. Providing underflow that is correct +but very slow, as some systems do, is not necessarily doing the user a favor. +.PP +To determine portably if a particular system offers gradual underflow, mask +off UNFL and do trial arithmetic. +.NH 2 +Speed +.PP +Computers with slow (software) gradual underflow usually provide a fast +flush-to-0 alternative. This often suffices, though there are important +examples where it forces an uglier and slower coding style. A worse +situation is if the hardware uses system traps for Infinity and NaN +arithmetic. The resulting slowdown will make otherwise excellent and natural +algorithms run slowly +.]C "Demmel" . +Sadly, even some x86 implementations +that do non-finite arithmetic in hardware, do it relatively slowly. +.PP +We considered providing syntax to declare a certain program scope within +which precise IEEE behavior was required, and relaxing the rules outside +such scopes. +(The numerical C extensions +.]C "NumerC" +use pragma +for this purpose.) +These scope declarations would need to be in the +bytecodes, since significant optimization may be attempted by the runtime +compiler. After some discussion, and with some trepidation, it was agreed +that instead all compilers would be required to preserve the same result and +status as for an unoptimized version. +.NH 2 +Comparison +.PP +The standard C operators +.CW == +.CW != +.CW "<" +.CW "<=" +.CW ">" +.CW ">=" +are the only comparisons provided, and they behave exactly +like the ``math'' part of Table 4 of the IEEE standard. Programs interested +in handling NaN data should test explicitly. This seems to be the way most +people program and leads to code more understandable to nonexperts. It is +true that with more operators one can correctly write code that propagates +NaNs to a successful conclusion\-but that support has been left for later. +NaN(''tag'') should be added at that same time. +.NH 2 +Precision +.PP +All implementations run exclusively in IEEE double precision. If the +hardware has extra-precise accumulators, the round-to-double mode is set +automatically and not changeable, in keeping with Limbo's design to have +only one floating point type. Extended precision hardware, if available, may +be used by the built-in elementary function and +.SM BLAS +libraries. +Also, we contemplate adding a dotsharp function that would use a very long +accumulator for very precise inner products, independent of the order of +vector elements +.]C "kulisch" . +But reference implementations that use only +double precision, avoid contracted multiply-add, and evaluate in the order 1 +up to n will always be available for strict portability. +.PP +At the time the decision was made to restrict the system to 64-bit floating +point, Limbo integers were almost exclusively 32-bit and the consistency +argument to have a single real type was compelling. Now that Limbo has more +integer types the decision might be reconsidered. But so many engineers +needlessly struggle with programs run in short precision, that offering it +may do as much harm as good. On most modern computers used for general +purpose scientific computing, 64-bit floating point arithmetic is as fast as +32-bit, except for the memory traffic. In cases where the shorter precision +would suffice and memory is a crucial concern, the programmer should +consider carefully scaled fixed point or specialized compression. To +efficiently interoperate with data files that use the short format, +programmers may use the provided realbits32 function. While there are surely +appropriate uses for a first-class 32-bit real type, for now we follow +Kahan's sarcastic motto ``why use lead when gold will do?'' +.NH 2 +BLAS +.PP +The few +.SM BLAS +in the core library were chosen for readability and, +in case of gemm, for optimization beyond what a reasonable compiler would +attempt. We expect that compilers will (soon) be good enough that the +difference between compiling $y+=a*x$ and calling daxpy is small. Also, as +mentioned above, dot and gemm might reasonably use combined multiply-add or +a long accumulator in some optional implementations. +.NH 2 +$GAMMA ( x )$ +.PP +To avoid confusion with the C math library, which defined +.I "gamma" +as $ln GAMMA $, we offer only +.I "lgamma" +for now. This function and +.I "modf" +return an (int,real) tuple rather than assigning through an +integer pointer, in keeping with Limbo's design. The opportunity has been +taken to drop some obsolete functions like +.I "frexp" . +Other functions +are unchanged from the C math library. +.NH 2 +Future +.PP +A prototype preprocessor has been written to allow the scientific programmer +to write $A[i,j]$ for an $A$ that was created as a $Matrix(m,n)$ and to have +the subscript linearization done automatically. Here $Matrix$ is an Limbo +abstract data type containing a real array and integers $m$, $n$, and column +stride $lda$ used as in typical Fortran calling sequences. +.PP +The Limbo compiler is soon expected to implement the type +.I "complex" . +.PP +Higher level numerical libraries will also be provided, and although that +topic is beyond the scope of this paper, opinions about what should come +first would be welcome. +.PP +Distributed computing has not been mentioned here because it involves +relatively few considerations specific to floating point computation. +However, it may be worth noting that in the default environment (with +underflow trapped, so that presence or absence of denormalized numbers is +not significant) programs run independently on heterogeneous machines +nevertheless get precisely identical results, even with respect to thread +scheduling. This implies that certain communication steps can be avoided, +and that regression testing is considerably simplified. +.PP +Please direct comments on these numerical aspects of Inferno to Eric Grosse. +More general technical comments can be directed to Vita Nuova +.CW comments@vitanuova.com ). ( +I am grateful to Joe Darcy, Berkeley, +to David Gay, Bell Labs, to David Hook, University of Melbourne, +and to participants of the IFIP WG2.5 Working +Conference on Quality of Numerical Software for insightful comments on a +first draft of this paper. +.\"the principal developers of Inferno: Sean Dorward, Rob Pike, Dave Presotto, Howard Trickey, and Phil Winterbottom. +.SH +Trademarks +.LP +Inferno, Limbo, and Dis are trademarks of Vita Nuova Holdings Limited. +Unix is a trademark of Unix Systems Laboratories. +Windows95 is a trademark of Microsoft. +.EQ +delim off +.EN +.SH +References +.nr PS -1 +.nr VS -1 +.LP +.nr [N 0 1 +.de ]N +.IP \\n+([N. +.if \nZ>0 .tm \\$1 \\n([N +.. +.... +.... +.]N "Inferno" +S. Dorward, +R. Pike, +D.\ L. Presotto, +D.\ M. Ritchie, +H. Trickey, +P. Winterbottom, +``The Inferno Operating System'', +.I "Bell Labs Technical Journal" , +Vol. 2, +No. 1, +Winter 1997, pp. 5-18. +Reprinted in this volume. +.]N "Clinger" +W.\ D. Clinger. +``How to read floating point numbers accurately. +In \fIProceedings of the ACM SIGPLAN'90 Conference on Programming +Language Design and Implementation\fP, pages 92-101, 1990. +.... +.... +.]N "Demmel" +James\ W. Demmel and Xiaoye Li. +Faster numerical algorithms via exception handling. +In Jr. Earl\ Swartzlander, Mary\ Jane Irwin, and Graham Jullien, +editors, \fIProceedings: 11th Symposium on Computer Arithmetic\fP. IEEE +Computer Society Press, 1993. +.... +.... +.]N "blas" +Jack\ J. Dongarra, Jeremy\ Du Croz, Sven Hammarling, and Richard\ J. Hanson. +Algorithm 656: An extended set of Basic Linear Algebra Subprograms. +\fIACM Trans. on Mathematical Software\fP, 14(1):18-32, March 1988. +.... +.... +.]N "Gay" +D.\ M. Gay. +Correctly rounded binary-decimal and decimal-binary conversions. +Numerical Analysis Manuscript No. 90-10, AT&T Bell Laboratories, +Murray Hill, NJ, 1990. +freely redistributable, available at +.CW http://netlib.bell-labs.com/netlib/fp/ . +.... +.... +.]N "pine" +E.\ H. Grosse and W.\ M. Coughran, Jr. +The pine programming language. +Numerical Analysis Manuscript 83-4, AT&T Bell Laboratories, 1983. +.br +.CW ftp://cm.bell-labs.com/cm/cs/doc/92/pine.ps.Z . +.... +.... +.]N "IEEEfp" +IEEE. +Standard for binary floating-point arithmetic. +Technical Report Std 754-1985, ANSI, 1985. +.... +.... +.]N "Kagstrom" +Bo\ Kagstrom, Per Ling, and Charles Van\ Loan. +Portable high performance GEMM-based Level 3 BLAS. +In R.\ F.\ Sincovec et\ al., editor, \fIParallel Processing for +Scientific Computing\fP, pages 339-346. SIAM Publications, 1993. +.CW /netlib/blas/ . +.... +.... +.]N "Kahan" +W.\ Kahan. +Lecture notes on the status of IEEE Standard 754 for binary +floating-point arithmetic. +Technical report, Univ. Calif. Berkeley, May 23 1995. +Work in Progress. +.... +.... +.]N "kulisch" +U.\ Kulisch and W.L. Miranker. +\fIComputer arithmetic in theory and practice.\fP +Academic Press, 1980. +.... +.... +.]N "MacIlroy" +M.\ D. McIlroy. +Mass produced software components. +In Peter Naur and Brian Randell, editors, \fISoftware Engineering\fP, +pages 138-155, 1969. +Garmisch, Germany, October 1968. +.... +.... +.]N "fdlibm" +Kwok\ C. Ng. +.CW fdlibm : +C math library for machines that support ieee 754 +floating-point. +freely redistributable; available at +.CW http://netlib.bell-labs.com/netlib/fdlibm/ , +March 1995. +.... +.... +.]N "SteeleWhite" +G.\ L. Steele and J.\ L. White. +How to print floating point numbers accurately. +In \fIProceedings of the ACM SIGPLAN'90 Conference on Programming +Language Design and Implementation\fP, pages 112-126, 1990. +.... +.... +.]N "NumerC" +X3J11.1. +Chapter 5, floating-point C extensions. +Technical report, ANSI, March 29 1995. +.nr PS +1 +.nr VS +1 diff --git a/doc/realinferno/real.pdf b/doc/realinferno/real.pdf Binary files differnew file mode 100644 index 00000000..670abcc5 --- /dev/null +++ b/doc/realinferno/real.pdf diff --git a/doc/sh.ms b/doc/sh.ms new file mode 100644 index 00000000..b59b04a8 --- /dev/null +++ b/doc/sh.ms @@ -0,0 +1,2067 @@ +.TL +The Inferno Shell +.AU +Roger Peppé +rog@vitanuova.com +.AB +The Inferno shell +.I sh +is a reasonably small shell that brings together aspects of +several other shells along with Inferno's dynamically loaded +modules, which it uses for much of the functionality +traditionally built in to the shell. This paper focuses principally +on the features that make it unusual, and presents +an example ``network chat'' application written entirely +in +.I sh +script. +.AE +.SH +Introduction +.LP +Shells come in many shapes and sizes. The Inferno +shell +.I sh +(actually one of three shells supplied with Inferno) +is an attempt to combine the strengths of a Unix-like +shell, notably Tom Duff's +.I rc , +with some of the features peculiar to Inferno. +It owes its largest debt to +.I rc , +which provides almost all of the syntax +and most of the semantics too; when in doubt, +I copied +.I rc 's +behaviour. +In fact, I borrowed as many good ideas as I could +from elsewhere, inventing new concepts and syntax +only when unbearably tempted. See Credits +for a list of those I could remember. +.LP +This paper does not attempt to give more than +a brief overview of the aspects of +.I sh +which it holds in common with Plan 9's +.I rc . +The reader is referred +to +.I sh (1) +(the definitive reference) +and Tom Duff's paper ``Rc - The Plan 9 Shell''. +I have occasionally pinched examples from the latter, +so the differences are easily contrasted. +.SH +Overview +.LP +.I Sh +is, at its simplest level, a command interpreter that will +be familiar to all those who have used the Bourne-shell, +C shell, or any of the numerous variants thereof (e.g. +.I bash , +.I ksh , +.I tcsh ). +All of the following commands behave as expected: +.P1 +date +cat /lib/keyboard +ls -l > file.names +ls -l /dis >> file.names +wc <file +echo [a-f]*.b +ls | wc +ls; date +limbo *.b & +.P2 +An +.I rc +concept that will be less familiar to users +of more conventional shells is the rôle of +.I lists +in the shell. +Each simple +.I sh +command, and the value of any +.I sh +environment variable, consists of a list of words. +.I Sh +lists are flat, a simple ordered list of words, +where a word is a sequence of characters that +may include white-space or characters special +to the shell. The Bourne-shell and its kin +have no such concept, which means that every +time the value of any environment variable is +used, it is split into blank separated words. +For instance, the command: +.P1 +x='-l /lib/keyboard' +ls $x +.P2 +would in many shells pass the two arguments +.CW -l '' `` +and +.CW /lib/keyboard '' `` +to the +.CW ls +command. +In +.I sh , +it will pass the single argument +.CW "-l /lib/keyboard" ''. `` +.LP +The following aspects of +.I sh 's +syntax will be familiar to users of +.I rc . +.LP +File descriptor manipulation: +.P1 +echo hello, world > /dev/null >[1=2] +.P2 +Environment variable values: +.P1 +echo $var +.P2 +Count number of elements in a variable: +.P1 +echo $#var +.P2 +Run a command and substitute its output: +.P1 +rm `{grep -li microsoft *} +.P2 +Lists: +.P1 +echo (((a b) c) d) +.P2 +List concatenation: +.P1 +cat /appl/cmd/sh/^(std regex expr)^.b +.P2 +To the above, +.I sh +adds a variant of the +.CW `{} +operator: +\f5"{}\fP, +which is the same except that it does not +split the input into tokens, +for example: +.P1 +for i in "{echo one two three} { + echo loop +} +.P2 +will only print +.CW loop +once. +.LP +.I Sh +also adds a new redirection operator +.CW <> , +which opens the standard input (by default) for +reading +.I and +writing. +.SH +Command blocks +.LP +Possibly +.I sh 's +most significant departure from the +norm is its use of command blocks as values. +In a conventional shell, a command block +groups commands together into a single +syntactic unit that can then be used wherever +a simple command might appear. +For example: +.P1 +{ + echo hello + echo goodbye +} > /dev/null +.P2 +.I Sh +allows this, but it also allows a command block to appear +wherever a normal word would appear. In this +case, the command block is not executed immediately, +but is bundled up as if it was a single quoted word. +For example: +.P1 +cmd = { + echo hello + echo goodbye +} +.P2 +will store the contents of the braced block inside +the environment variable +.CW $cmd . +Printing the value of +.CW $cmd +gets the block back again, for example: +.P1 +echo $cmd +.P2 +gives +.P1 +{echo hello;echo goodbye} +.P2 +Note that when the shell parsed the block, +it ignored everything that was not +syntactically relevant to the execution +of the block; for instance, the white space +has been reduced to the minimum necessary, +and the newline has been changed to +the functionally identical semi-colon. +.LP +It is also worth pointing out that +.CW echo +is an external module, implementing only the +standard +.I Command (2) +interface; it has no knowledge of shell command +blocks. When the shell invokes an external command, +and one of the arguments is a command block, +it simply passes the equivalent string. Internally, built in commands +are slightly different for efficiency's sake, as we will see, +but for almost all purposes you can treat command blocks +as if they were strings holding functionally equivalent shell commands. +.LP +This equivalence also applies to the execution of commands. +When the +shell comes to execute a simple command (a sequence of +words), it examines the first word to decide what to execute. +In most shells, this word can be either the file name of +an external command, or the name of a command built in +to the shell (e.g. +.CW exit ). +.LP +.I Sh +follows these conventional rules, but first, it examines +the first character of the first word, and if it is an open +brace +.CW { ) ( +character, it treats it as a command block, +parses it, and executes it according to the normal syntax +rules of the shell. For the duration of this execution, it +sets the environment variable +.CW $* +to the list of arguments passed to the block. For example: +.P1 +{echo $*} hello world +.P2 +is exactly the same as +.P1 +echo hello world +.P2 +Execution of command blocks is the same whether +the command block is just a string or has already been +parsed by the shell. +For example: +.P1 +{echo hello} +.P2 +is exactly the same as +.P1 +\&'{echo hello}' +.P2 +The only difference is that the former case has its syntax +checked for correctness as soon as the shell sees the script; +whereas if the latter contained a malformed command block, +a syntax error will be raised only when it +comes to actually execute the command. +.LP +The shell's treatment of braces can be used to provide functionality +similar to the +.CW eval +command that is built in to most other shells. +.P1 +cmd = 'echo hello; echo goodbye' +\&'{'^$cmd^'}' +.P2 +In other words, simply by surrounding a string +by braces and executing it, the string +will be executed as if it had been typed to the +shell. Note the use of the caret +.CW ^ ) ( +string concatenatation operator. +.I Sh +does provide `free carets' in the same way as +.I rc , +so in the previous example +.P1 +\&'{'$cmd'}' +.P2 +would work exactly the same, but generally, +and in particular when writing scripts, it is +good style to make the carets explicit. +.SH +Assignment and scope +.LP +The assignment operator in +.I sh , +in common with most other shells +is +.CW = . +.P1 +x=a b c d +.P2 +assigns the four element list +.CW "(a b c d)" +to the environment variable named +.CW x . +The value can later be extracted +with the +.CW $ +operator, for example: +.P1 +echo $x +.P2 +will print +.P1 +a b c d +.P2 +.I Sh +also implements a form of local variable. +An execution of a braced block command +creates a new scope for the duration of that block; +the value of a variable assigned with +.CW := +in that block will be lost when the +block exits. For example: +.P1 +x = hello +{x := goodbye } +echo $x +.P2 +will print ``hello''. +Note that the scoping rules are +.I dynamic +\- variable references are interpreted +relative to their containing scope at execution time. +For example: +.P1 +x := hello +cmd := {echo $x} +{ + x := goodbye + $cmd +} +.P2 +wil print ``goodbye'', not ``hello''. For one +way of avoiding this problem, see ``Lexical +binding'' below. +.LP +One late, but useful, addition to the shell's assignment +syntax is tuple assignment. This partially +makes up for the lack of list indexing primitives in the shell. +If the left hand side of the assignment operator is +a list of variable names, each element of the list on the +right hand side is assigned in turn to its respective variable. +The last variable mentioned gets assigned all the +remaining elements. +For example, after: +.P1 +(a b c) := (one two three four five) +.P2 +.CW a +is +.CW one , +.CW b +is +.CW two , +and +.CW c +contains the three element list +.CW "(three four five)". +For example: +.P1 +(first var) = $var +.P2 +knocks the first element off +.CW $var +and puts it in +.CW $first . +.LP +One important difference between +.I sh 's +variables and variables in shells under +Unix-like operating systems derives from +the fact that Inferno's underlying process +creation primitive is +.I spawn , +not +.I fork . +This means that, even though the shell +might create a new process to accomplish +an I/O redirection, variables changed by +the sub-process are still visible in the parent +process. This applies anywhere a new process +is created that runs synchronously with respect +to the rest of the shell script - i.e. there is no +chance of parallel access to the environment. +For example, it is possible to get +access to the status value of a command executed +by the +.CW `{} +operator: +.P1 +files=`{du -a; dustatus = $status} +if {! ~ $dustatus ''} { + echo du failed +} +.P2 +When the shell does spawn an asynchronous +process (background processes and pipelines +are the two occasions that it does so), the +environment is copied so changes in one +process do not affect another. +.SH +Loadable modules +.LP +The ability to pass command blocks as values is +all very well, but does not in itself provide the +programmability that is central to the power of shell scripts +and is built in to most shells, the conditional +execution of commands, for instance. +The Inferno shell is different; +it provides no programmability within the shell itself, +but instead relies on external modules to provide this. +It has a built in command +.CW load +that loads a new module into the shell. The module +that supports standard control flow functionality +and a number of other useful tidbits is called +.CW std . +.P1 +load std +.P2 +loads this module into the shell. +.CW Std +is a Dis module that +implements the +.CW Shellbuiltin +interface; the shell looks in the directory +.CW /dis/sh +for the module file, in this case +.CW /dis/sh/std.dis . +.LP +When a module is loaded, it is given the opportunity +to define as many new commands as it wants. +Perhaps slightly confusingly, these are known as +``built-in'' commands (or just ``builtins''), to distinguish +them from commands executed in a separate process +with no access to shell internals. Built-in +commands run in the same process as the shell, and +have direct access to all its internal state (environment variables, +command line options, and state stored within the implementing +module itself). It is possible to find out +what built-in commands are currently defined with +the command +.CW loaded . +Before any modules have been loaded, typing +.P1 +loaded +.P2 +produces: +.P1 +builtin builtin +exit builtin +load builtin +loaded builtin +run builtin +unload builtin +whatis builtin +${builtin} builtin +${loaded} builtin +${quote} builtin +${unquote} builtin +.P2 +These are all the commands that are built in to the +shell proper; I'll explain the +.CW ${} +commands later. +After loading +.CW std , +executing +.CW loaded +produces: +.P1 +! std +and std +apply std +builtin builtin +exit builtin +flag std +fn std +for std +getlines std +if std +load builtin +loaded builtin +.P3 +or std +pctl std +raise std +rescue std +run builtin +status std +subfn std +unload builtin +whatis builtin +while std +~ std +.P3 +${builtin} builtin +${env} std +${hd} std +${index} std +${join} std +${loaded} builtin +${parse} std +${pid} std +${pipe} std +${quote} builtin +${split} std +${tl} std +${unquote} builtin +.P2 +The name of each command defined +by a loaded module is followed by the name of +the module, so you can see that in this case +.CW std +has defined commands such as +.CW if +and +.CW while . +These commands are reminiscent of the +commands built in to the syntax of +other shells, but have no special syntax +associated with them: they obey the normal +argument gathering and execution semantics. +.LP +As an example, consider the +.CW for +command. +.P1 +for i in a b c d { + echo $i +} +.P2 +This command traverses the list +.CW "(a b c d)" +executing +.CW "{echo $i}" +with +.CW $i +set to each element in turn. In +.I rc , +this might be written +.P1 +for (i in a b c d) { + echo $i +} +.P2 +and in fact, in +.I sh , +this is exactly equivalent. The round brackets +denote a list and, like +.I rc , +all lists are flattened before passing to an +executed command. +Unlike the +.CW for +command in +.I rc , +the braces around the command are +not optional; as with the arguments to +a normal command, gathering of arguments +stops at a newline. The exception to this rule +is that newlines within brackets are treated as white space. +This last rule also +applies to round brackets, for example: +.P1 +(for i in + a + b + c + d + {echo $i} +) +.P2 +does the same thing. +This is very useful for commands that take multiple +command block arguments, and is actually the only +line continuation mechanism that +.I sh +provides (the usual backslash +.CW \e ) ( +character is not in any way special to +.I sh ). +.SH +Control structures +.LP +Inferno commands, like shell commands in Unix +or Plan 9, return a status when they finish. +A command's status in Inferno is a short string +describing any error that has occurred; +it can be found in the environment variable +.CW $status . +This is the value that commands defined by +.CW std +use to determine conditional +execution - if it is empty, it is true; otherwise +false. +.CW Std +defines, for instance, a command +.CW ~ +that provides a simple pattern matching capability. +Its first argument is the string to test the patterns +against, and subsequent arguments give the patterns, +in normal shell wildcard syntax; its status is true +if there is a match. +.P1 +~ sh.y '*.y' +~ std.b '*.y' +.P2 +give true and false statuses respectively. +A couple of pitfalls lurk here for the unwary: +unlike its +.I rc +namesake, the patterns +.I are +expanded by the shell if left unquoted, so +one has to be careful to quote wildcard characters, +or escape them with a backslash if they are to +be used literally. +Like any other command, +.CW ~ +receives a simple list of arguments, so it has to +assume that the string tested has exactly one element; +if you provide a null variable, or one with more +than one element, then you will get unexpected results. +If in doubt, use the +\f5$"\fP +operator to make sure of that. +.LP +Used in conjunction with the +.CW $# +operator, +.CW ~ +provides a way to check the +number of elements in a list: +.P1 +~ $#var 0 +.P2 +will be true if +.CW $var +is empty. +.LP +This can be tested by the +.CW if +command, which +accepts command blocks for +its arguments, executing its second argument if +the status of the first is empty (true). +For example: +.P1 +if {~ $#var 0} { + echo '$var has no elements' +} +.P2 +Note that the start of one argument must +come on the same line as the end of of the previous, +otherwise it will be treated as a new command, +and always executed. For example: +.P1 +if {~ $#var 0} + {echo '$var has no elements'} # this will always be executed +.P2 +The way to get around this is to use list bracketing, +for example: +.P1 +(if {~ $#var 0} + {echo '$var has no elements'} +) +.P2 +will have the desired effect. +The +.CW if +command is more general than +.I rc 's +.CW if , +in that it accepts an arbitrary number +of condition/action pairs, and executes each condition +in turn until one is true, whereupon it executes the associated +action. If the last condition has no action, then it +acts as the ``else'' clause in the +.CW if . +For example: +.P1 +(if {~ $#var 0} { + echo zero elements + } + {~ $#var 1} { + echo one element + } + {echo more than one element} +) +.P2 +.LP +.CW Std +provides various other control structures. +.CW And +and +.CW or +provide the equivalent of +.I rc 's +.CW && +and +.CW || +operators. They each take any number of command +block arguments and conditionally execute each +in turn. +.CW And +stops executing when a block's status is false, +.CW or +when a block's status is true: +.P1 +and {~ $#var 1} {~ $var '*.sbl'} {echo variable ends in .sbl} +(or {mount /dev/eia0 /n/remote} + {echo mount has failed with $status} +) +.P2 +An extremely easy trap to fall into is to use +.CW $* +inside a block assuming that its value is the +same as that outside the block. For instance: +.P1 +# this will not work +if {~ $#* 2} {echo two arguments} +.P2 +It will not work because +.CW $* +is set locally for every block, whether it +is given arguments or not. A solution is to +assign +.CW $* +to a variable at the start of the block: +.P1 +args = $* +if {~ $#args 2} {echo two arguments} +.P2 +.LP +.CW While +provides looping, executing its second argument +as long as the status of the first remains true. +As the status of an empty block is always true, +.P1 +while {} {echo yes} +.P2 +will loop forever printing ``yes''. +Another looping command is +.CW getlines , +which loops reading lines from its standard +input, and executing its command argument, +setting the environment variable +.CW $line +to each line in turn. +For example: +.P1 +getlines { + echo '#' $line +} < x.b +.P2 +will print each line of the file +.CW x.b +preceded by a +.CW # +character. +.SH +Exceptions +.LP +When the shell encounters some error conditions, such +as a parsing error, or a redirection failure, +it prints a message to standard error and raises +an +.I exception . +In an interactive shell this is caught by the interactive +command loop; in a script it will cause an exit with +a false status, unless handled. +.LP +Exceptions can be handled and raised with the +.CW rescue +and +.CW raise +commands provided by +.CW std . +An exception has a short string associated with it. +.P1 +raise error +.P2 +will raise an exception named ``error''. +.P1 +rescue error {echo an error has occurred} { + command +} +.P2 +will execute +.CW command +and will, in the event that it raises an +.CW error +exception, print a diagnostic message. +The name of the exception given to +.CW rescue +can end in an asterisk +.CW * ), ( +which will match any exception starting with +the preceding characters. The +.CW * +needs quoting to avoid being expanded as a wildcard +by the shell. +.P1 +rescue '*' {echo caught an exception $exception} { + command +} +.P2 +will catch all exceptions raised by +.CW command , +regardless of name. +Within the handler block, +.CW rescue +sets the environment variable +.CW $exception +to the actual name of the exception caught. +.LP +Exceptions can be caught only within a single +process \- if an exception is not caught, then +the name of the exception becomes the +exit status of the process. +As +.I sh +starts a new process for commands with redirected +I/O, this means that +.P1 +raise error +echo got here +.P2 +behaves differently to: +.P1 +raise error > /dev/null +echo got here +.P2 +The former prints nothing, while the latter +prints ``got here''. +.LP +The exceptions +.CW break +and +.CW continue +are recognised by +.CW std 's +looping commands +.CW for , +.CW while , +and +.CW getlines . +A +.CW break +exception causes the loop to terminate; +a +.CW continue +exception causes the loop to continue +as before. For example: +.P1 +for i in * { + if {~ $i 'r*'} { + echo found $i + raise break + } +} +.P2 +will print the name of the first +file beginning with ``r'' in the +current directory. +.SH +Substitution builtins +.LP +In addition to normal commands, a loaded module +can also define +.I "substitution builtin" +commands. These are different from normal commands +in that they are executed as part of the argument +gathering process of a command, and instead of +returning an exit status, they yield a list of values +to be used as arguments to a command. They +can be thought of as a kind of `active environment variable', +whose value is created every time it is referenced. +For example, the +.CW split +substitution builtin defined by +.CW std +splits up a single argument into strings separated +by characters in its first argument: +.P1 +echo ${split e 'hello there'} +.P2 +will print +.P1 +h llo th r +.P2 +Note that, unlike the conventional shell +backquote operator, the result of the +.CW $ +command is not re-interpreted, for example: +.P1 +for i in ${split e 'hello there'} { + echo arg $i +} +.P2 +will print +.P1 +arg h +arg llo th +arg r +.P2 +Substitution builtins can only be named +as the initial command inside a dollar-referenced +command block - they live in a different namespace +from that of normal commands. +For instance, +.CW loaded +and +.CW ${loaded} +are quite distinct: the former prints a list +of all builtin names and their defining modules, whereas +the former yields a list of all the currently loaded +modules. +.LP +.CW Std +provides a number of useful commands +in the form of substitution builtins. +.CW ${join} +is the complement of +.CW ${split} : +it joins together any elements in its argument list +using its first argument as the separator, for example: +.P1 +echo ${join . file tar gz} +.P2 +will print: +.P1 +file.tar.gz +.P2 +The in-built shell operator +\f5$"\fP +is exactly equivalent to +.CW ${join} +with a space as its first argument. +.LP +List indexing is provided with +.CW ${index} , +which given a numeric index and a list +yields the +.I index 'th +item in the list (origin 1). For example: +.P1 +echo ${index 4 one two three four five} +.P2 +will print +.P1 +four +.P2 +A pair of substitution builtins with some of +the most interesting uses are defined by +the shell itself: +.CW ${quote} +packages its argument list into a single +string in such a way that it can be later +parsed by the shell and turned back into the same list. +This entails quoting any items in the list +that contain shell metacharacters, such as +.CW ; ` ' +or +.CW & '. ` +For example: +.P1 +x='a;' 'b' 'c d' '' +echo $x +echo ${quote $x} +.P2 +will print +.P1 +a; b c d +\&'a;' b 'c d' '' +.P2 +Travel in the reverse direction is possible +using +.CW ${unquote} , +which takes a single string, as produced by +.CW ${quote} , +and produces the original list again. +There are situations in +.I sh +where only a single string can be used, but +it is useful to be able to pass around the values +of arbitrary +.I sh +variables in this form; +.CW ${quote} +and +.CW ${unquote} +between them make this possible. For instance +the value of a +.I sh +list can be stored in a file and later retrieved +without loss. They are also useful to implement +various types of behaviour involving automatically +constructed shell scripts; see ``Lexical binding'', below, +for an example. +.LP +Two more list manipulation commands provided +by +.CW std +are +.CW ${hd} +and +.CW ${tl} , +which mirror their Limbo namesakes: +.CW ${hd} +returns the first element of a list, +.CW ${tl} +returns all but the first element of a list. +For example: +.P1 +x=one two three four +echo ${hd $x} +echo ${tl $x} +.P2 +will print: +.P1 +one +two three four +.P2 +Unlike their Limbo counterparts, they +do not complain if their argument list +is not long enough; they just yield a null list. +.LP +.CW Std +provides three other substitution builtins of +note. +.CW ${pid} +yields the process id of the current +process. +.CW ${pipe} +provides a somewhat more cumbersome equivalent of the +.CW >{} +and +.CW <{} +commands found in +.I rc , +i.e. branching pipelines. +For example: +.P1 +cmp ${pipe from {old}} ${pipe from {new}} +.P2 +will regression-test a new version of a command. +Using +.CW ${pipe} +yields the name of a file in the namespace +which is a pipe to its argument command. +.LP +The substitution builtin +.CW ${parse} +is used to check shell syntax without actually +executing a command. The command: +.P1 +x=${parse '{echo hello, world}'} +.P2 +will return a parsed version of the string +.CW "echo hello, world" ''; `` +if an error occurs, then a +.CW "parse error" +exception will be raised. +.SH +Functions +.LP +Shell functions are a facility provided +by the +.CW std +shell module; they associate a command +name with some code to execute when +that command is named. +.P1 +fn hello { + echo hello, world +} +.P2 +defines a new command, +.CW hello , +that prints a message when executed. +The command is passed arguments in the +usual way, for example: +.P1 +fn removems { + for i in $* { + if {grep -s Microsoft $i} { + rm $i + } + } +} +removems * +.P2 +will remove all files in the current directory +that contain the string ``Microsoft''. +.LP +The +.CW status +command provides a way to return an +arbitrary status from a function. It takes +a single argument \- its exit status +is the value of that argument. For instance: +.P1 +fn false { + status false +} +fn true { + status '' +} +.P2 +It is also possible to define new substitution builtins +with the command +.CW subfn : +the value of +.CW $result +at the end of the execution of the +command gives the value yielded. +For example: +.P1 +subfn backwards { + for i in $* { + result=$i $result + } +} +echo ${backwards a b c 'd e'} +.P2 +will reverse a list, producing: +.P1 +d e c b a +.P2 +.LP +The commands associated with shell functions +are stored as normal environment variables, and +so are exported to external commands in the usual +way. +.CW Fn +definitions are stored in environment variables +starting +.CW fn- ; +.CW subfn +definitions use environment variables starting +.CW sfn- . +It is useful to know this, as the shell core knows +nothing of these functions - they look just like +builtin commands defined by +.CW std ; +looking at the current definition of +.CW $fn-\fIname\fP +is the only way of finding out the body of code +associated with function +.I name . +.SH +Other loadable +.I sh +modules +.LP +In addition to +.CW std , +and +.CW tk , +which is mentioned later, there are +several loadable +.I sh +modules that extend +.I sh's +functionality. +.LP +.CW Expr +provides a very simple stack-based calculator, +giving simple arithmetic capability to the shell. +For example: +.P1 +load expr +echo ${expr 3 2 1 + x} +.P2 +will print +.CW 9 . +.LP +.CW String +provides shell level access to the Limbo +string library routines. For example: +.P1 +load string +echo ${tolower 'Hello, WORLD'} +.P2 +will print +.P1 +hello, world +.P2 +.CW Regex +provides regular expression matching and +substitution operations. For instance: +.P1 +load regex +if {! match '^[a-z0-9_]+$' $line} { + echo line contains invalid characters +} +.P2 +.CW File2chan +provides a way for a shell script to create a +file in the namespace with properties +under its control. For instance: +.P1 +load file2chan +(file2chan /chan/myfile + {echo read request from /chan/myfile} + {echo write request to /chan/myfile} +) +.P2 +.CW Arg +provides support for the parsing of standard +Unix-style options. +.SH +.I Sh +and Inferno devices +.LP +Devices under Inferno are implemented as files, +and usually device interaction consists of simple +strings written or read from the device files. +This is a happy coincidence, as the two things +that +.I sh +does best are file manipulation and string manipulation. +This means that +.I sh +scripts can exploit the power of direct access to +devices without the need to write more long winded +Limbo programs. You do not get the type checking +that Limbo gives you, and it is not quick, but for +knocking up quick prototypes, or ``wrapper scripts'', +it can be very useful. +.LP +Consider the way that Inferno implements network +access, for example. A file called +.CW /net/cs +implements DNS address translation. A string such as +.CW tcp!www.vitanuova.com!telnet +is written to +.CW /net/cs ; +the translated form of the address is then read +back, in the form of a (\fIfile\fP, \fItext\fP) +pair, where +.I file +is the name of a +.I clone +file in the +.CW /net +directory +(e.g. +.CW /net/tcp/clone ), +and +.I text +is a translated address as understood by the relevant +network (e.g. +.CW 194.217.172.25!23 ). +We can write a shell function that performs this +translation, returning a triple +(\fIdirectory\fP \fIclonefile\fP \fItext\fP): +.P1 +subfn cs { + addr := $1 + or { + <> /net/cs { + (if {echo -n $addr >[1=0]} { + (clone addr) := `{read 8192 0} + netdir := ${dirname $clone} + result=$netdir $clone $addr + } { + echo 'cs: cannot translate "' ^ + $addr ^ + '":' $status >[1=2] + status failed + } + ) + } + } {raise 'cs failed'} +} +.P2 +The code +.P1 +<> /net/cs { \fR....\fP } +.P2 +opens +.CW /net/cs +for reading and writing, on the standard input; +the code inside the braces can then read and +write it. +If the address translation fails, an error will +be generated on the write, so the +.CW echo +will fail - this is detected, and an appropriate exit status +set. +Being a substitution function, the only way that +.CW cs +can indicate an error is by raising an exception, but +exceptions do not propagate across processes +(a new process is created as a result of the redirection), +hence the need for the status check and the raised exception +on failure. +.LP +The external program +.CW read +is invoked to make a single read of the +result from +.CW /lib/cs . +It takes a block size, and a read offset - it +is important to set this, as the initial write of the +address to +.CW /lib/cs +will have advanced the file offset, and we will miss +a chunk of the returned address if we're not careful. +.LP +.CW Dirname +is a little shell function that uses one of the +.I string +builtin functions to get the directory name from +the pathname of the +.I clone +file. It looks like: +.P1 +load string +subfn dirname { + result = ${hd ${splitr $1 /}} +} +.P2 +Now we have an address translation function, we can +access the network interface directly. There are +three main operations possible with Inferno network +devices: connecting to a remote address, announcing +the availability of a local dial-in address, and listening +for an incoming connection on a previously announced +address. They are accessed in similar ways (see +.I ip (3) +for details): +.LP +The dial and announce operations require a new +.CW net +directory, which is created by reading the +clone file - this actually opens the +.CW ctl +file in a newly created net directory, representing +one end of a network connection. Reading a +.CW ctl +file yields the name of the new directory; +this enables an application to find the associated +.CW data +file; reads and writes to this file go to the +other end of the network connection. +The listen operation is similar, but the new +net directory is created by reading from an existing +directory's +.CW listen +file. +.LP +Here is a +.I sh +function that implements some behaviour common +to all three operations: +.P1 +fn newnetcon { + (netdir constr datacmd) := $* + id := "{read 20 0} + or {~ $constr ''} {echo -n $constr >[1=0]} { + echo cannot $constr >[1=2] + raise failed + } + net := $netdir/^$id + $datacmd <> $net^/data +} +.P2 +It takes the name of a network protocol directory +(e.g. +.CW /net/tcp ), +a possibly empty string to write into the control +file when the new directory id has been read, +and a command to be executed connected to +the newly opened +.CW data +file. The code is fairly straightforward: read +the name of a new directory from standard input +(we are assuming that the caller of +.CW newnetcon +sets up the standard input correctly); then +write the configuration string (if it is not empty), +raising an error if the write failed; then run the +command, attached to the +.CW data +file. +.LP +We set up the +.CW $net +environment variable so that +the running command knows its network +context, and can access other files in the +directory (the +.CW local +and +.CW remote +files, for example). +Given +.CW newnetcon , +the implementation of +.CW dial , +.CW announce , +and +.CW listen +is quite easy: +.P1 +fn announce { + (addr cmd) := $* + (netdir clone addr) := ${cs $addr} + newnetcon $netdir 'announce '^$addr $cmd <> $clone +} + +fn dial { + (addr cmd) := $* + (netdir clone addr) := ${cs $addr} + newnetcon $netdir 'connect '^$addr $cmd <> $clone +} + +fn listen { + newnetcon ${dirname $net} '' $1 <> $net/listen +} +.P2 +.CW Dial +and +.CW announce +differ only in the string that is written to the control +file; +.CW listen +assumes it is being called in the context of +an +.CW announce +command, so can use the value +of +.CW $net +to open the +.CW listen +file to wait for incoming connections. +.LP +The upshot of these function definitions is that we +can make connections to, and announce, services +on the network. The code for a simple client might look like: +.P1 +dial tcp!somewhere.com!5432 { + echo connected to `{cat $net/remote} + echo hello somewhere >[1=0] +} +.P2 +A server might look like: +.P1 +announce tcp!somewhere.com!5432 { + listen { + echo got connection from `{cat $net/remote} + cat + } +} +.P2 +.SH +.I Sh +and the windowing environment +.LP +The main interface to the Inferno graphics and windowing +system is a textual one, based on Osterhaut's Tk, +where commands to manipulate the graphics inside +windows are strings using a uniform syntax not +a million miles away from the syntax of +.I sh . +(See section 9 of Volume 1 for details). +The +.CW tk +.I sh +module provides an interface to the Tk graphics +subsystem, providing not only graphics capabilities, +but also the channel communication on which +Inferno's Tk event mechanism is based. +.LP +The Tk module gives each window a unique +numeric id which is used to control that window. +.P1 +load tk +wid := ${tk window 'My window'} +.P2 +loads the tk module, creates a new window titled ``My window'' +and assigns its unique identifier to the variable +.CW $wid . +Commands of the form +.CW "tk $wid" +.I tkcommand +can then be used to control graphics in the window. +When writing tk applets, it is helpful to get feedback +on errors that occur as tk commands are executed, so +here's a function that checks for errors, and minimises +the syntactic overhead of sending a Tk command: +.P1 +fn x { + args := $* + or {tk $wid $args} { + echo error on tk cmd $"args':' $status + } +} +.P2 +It assumes that +.CW $wid +has already been set. +Using +.CW x , +we could create a button in our new window: +.P1 +x button .b -text {A button} +x pack .b -side top +x update +.P2 +Note that the nice coincidence of the quoting rules +of +.I sh +and tk mean that the unquoted +.I sh +command block argument to the +.CW button +command gets through to tk unchanged, +there to become quoted text. +.LP +Once we've got a button, we want to know when +it has been pressed. Inferno Tk sends events +through Limbo channels, so the Tk module provides +access to simple string channels. A channel is +created with the +.CW chan +command. +.P1 +chan event +.P2 +creates a channel named +.CW event . +A +.CW send +command takes a string to send down the channel, +and the +.CW ${recv} +builtin yields a received value. Both operations +block until the transfer of data can proceed \- as with +Limbo channels, the operation is synchronous. For example: +.P1 +send event 'hello, world' & +echo ${recv event} +.P2 +will print ``hello, world''. Note that the send +and receive operations must execute in different +processes, hence the use of the +.CW & +backgrounding operator. +Although for implementation reasons they are +part of the Tk module, these channel operations +are potentially useful in non-graphical scripts \- +they will still work fine if there's no graphics context. +.LP +The +.CW "tk namechan" +command makes a channel known to Tk. +.P1 +tk namechan $wid event +.P2 +Then we can get events from Tk: +.P1 +x .b configure -command {send event buttonpressed} +while {} {echo ${recv event}} & +.P2 +This starts a background process that prints a message +each time the button is pressed. +Interaction with the window manager is handled in +a similar way. When a window is created, it is automatically +associated with a channel of the same name as the window id. +Strings arriving on this are window manager events, such as +.CW resize +and +.CW move . +These can be interpreted if desired, or forwarded back +to the window manager for default handling with +.CW "tk winctl" . +The following is a useful idiom that does all the usual +event handling on a window: +.P1 +while {} {tk winctl $wid ${recv $wid}} & +.P2 +One thing worth knowing is that the default +.CW exit +action (i.e. when the user closes the window) is +to kill all processes in the current process group, so +in a script that creates windows, +it is usual to fork the process group with +.CW "pctl newgrp" +early on, otherwise +it can end up killing the shell window that spawned it. +.SH +An example +.LP +By way of an example. I'll present a function that implements +a simple network chat facility, allowing two people on the +network to send text messages to one another, making use +of the network functions described earlier. +.LP +The core is a function called +.CW chat +which assumes that its standard input has +been directed to an active network connection; it creates a +window containing an entry widget and a text widget. Any text +entered into the entry widget is sent to the other end +of the connection; lines of text arriving from +the network are appended to the text widget. +.LP +The first part of the function creates the window, +forks the process group, runs the window controller +and creates the widgets inside the window: +.P1 +fn chat { + load tk + pctl newpgrp + wid := ${tk window 'Chat'} + nl := ' +\&' # newline + while {} {tk winctl $wid ${recv $wid}} & + x entry .e + x frame .f + x scrollbar .f.s -orient vertical -command {.f.t yview} + x text .f.t -yscrollcommand {.f.s set} + x pack .f.s -side left -fill y + x pack .f.t -side top -fill both -expand 1 + x pack .f -side top -fill both -expand 1 + x pack .e -side top -fill x + x pack propagate . 0 + x bind .e '<Key-'^$nl^'>' {send event enter} + x update + chan event + tk namechan $wid event event +.P2 +The middle part of +.CW chat +loops in the background getting text entered +by the user and sending it across the network +(also putting a copy in the local text widget +so that you can see what you have sent. +.P1 + while {} { + {} ${recv event} + txt := ${tk $wid .e get} + echo $txt >[1=0] + x .f.t insert end '''me: '^$txt^$nl + x .e delete 0 end + x .f.t see end + x update + } & +.P2 +Note the null command on the second line, +used to wait for the receive event without +having to deal with the value (there's only +one event that can arrive on the channel, and +we know what it is). +.LP +The final piece of +.CW chat +gets lines from the network and puts them +in the text widget. The loop will terminate when +the connection is dropped by the other party, whereupon +the window closes and the chat finished: +.P1 + getlines { + x .f.t insert end '''you: '^$line^$nl + x .f.t see end + x update + } + tk winctl $wid exit +} +.P2 +Now we can wrap up the network functions and the +chat function in a shell script, to finish off the little demo: +.P1 +#!/dis/sh +.I "Include the earlier function definitions here." +fn usage { + echo 'usage: chat [-s] address' >[1=2] + raise usage +} + +args=$* +or {~ $#args 1 2} {usage} +(addr args) := $* +if {~ $addr -s} { + # server + or {~ $#args 1} {usage} + (addr nil) := $args + announce $addr { + echo announced on `{cat $net/local} + while {} { + net := $net + listen { + echo got connection from `{cat $net/remote} + chat & + } + } + } +} { + or {~ $#args 0} {usage} + # client + dial $addr { + echo made connection + chat + } +} +.P2 +If this is placed in an executable script file +named +.CW chat , +then +.P1 +chat -s tcp!mymachine.com!5432 +.P2 +would announce a chat server using tcp +on +.CW mymachine.com +(the local machine) +on port 5432. +.P1 +chat tcp!mymachine.com!5432 +.P2 +would make a connection to +the previous server; they would both pop +up windows and allow text to be typed in from +either end. +.SH +Lexical binding +.LP +One potential problem with all this passing around +of fragments of shell script is the scope of names. +This piece of code: +.P1 +fn runit {x := Two; $*} +x := One +runit {echo $x} +.P2 +will print ``Two'', which is quite likely to confound the +expectations of the person writing the script if they +did not know that +.CW runit +set the value of +.CW $x +before calling its argument script. +Some functional languages (and the +.I es +shell) implement +.I "lexical binding" +to get around this problem. The idea +is to derive a new script from the old +one with all the necessary variables bound to +their current values, regardless of the context in which +the script is later called. +.LP +.I Sh +does not provide any explicit support for +this operation; however it is possible to fake +up a reasonably passable job. +Recall that blocks can be treated as strings if necessary, +and that +.CW ${quote} +allows the bundling of lists in such a way that they +can later be extracted again without loss. These two +features allow the writing of the following +.CW let +function (I have omitted argument checking code here and +in later code for the sake of brevity): +.P1 +subfn let { + # usage: let cmd var... + (let_cmd let_vars) := $* + if {~ $#let_cmd 0} { + echo 'usage: let {cmd} var...' >[1=2] + raise usage + } + let_prefix := '' + for let_i in $let_vars { + let_prefix = $let_prefix ^ + ${quote $let_i}^':='^${quote $$let_i}^';' + } + result=${parse '{'^$let_prefix^$let_cmd^' $*}'} +} +.P2 +.CW Let +takes a block of code, and the names of environment variables +to bind onto it; it returns the resulting new block of code. +For example: +.P1 +fn runit {x := hello, world; $*} +x := a 'b c d' 'e' +runit ${let {echo $x} x} +.P2 +will print: +.P1 +a b c d e +.P2 +Looking at the code it produces is perhaps more +enlightening than examining the function definition: +.P1 +x=a 'b c d' 'e' +echo ${let {echo $x} x} +.P2 +produces +.P1 +{x:=a 'b c d' e;{echo $x} $*} +.P2 +.CW Let +has bundled up the values of the two bound variables, +stuck them onto the beginning of the code block +and surrounded the whole thing in braces. +It makes sure that it has valid syntax by using +.CW ${parse} , +and it ensures that the correct arguments are +passed to the script by passing it +.CW $* . +.LP +Note that all the variable names used inside the +body of +.CW let +are prefixed with +.CW let_ . +This is to try to reduce the likelihood that someone +will want to lexically bind to a variable of a name used +inside +.CW let . +.SH +The module interface +.PP +It is not within the scope of this paper to discuss in +detail the public module interface to the shell, but +it is probably worth mentioning some of the other +benefits that +.I sh +derives from living within Inferno. +.PP +Unlike shells in conventional systems, where +the shell is a standalone program, accessible +only through +.CW exec() , +in Inferno, +.I sh +presents a module interface that allows programs +to gain lower level access to the primitives provided +by the shell. For example, Inferno programs can make use of +the shell syntax parsing directly, so +a shell command in a configuration script might be +checked for correctness before running it, +or parsed to avoid parsing overhead when running +a shell command within a loop. +.PP +More importantly, as long as it implements a superset +of the +.CW Shellbuiltin +interface, an application can +load +.I itself +into the shell as a module, and define builtin commands +that directly access functionality that it can provide. +.PP +This can, with minimum effort, provide an application +with a programmable interface to its primitives. +I have modified the Inferno window manager +.CW wm , +for example, so that instead of using a custom, fairly limited +format file, its configuration file is just +a shell script. +.CW Wm +loads itself into the shell, +defines a new builtin command +.CW menu +to create items in +its main menu, and runs a shell script. +The shell script has the freedom to customise +menu entries dynamically, to run arbitrary programs, +and even to publicise this interface to +.CW wm +by creating a file with +.CW file2chan +and interpreting writes to the file as calls +to the +.CW menu +command: +.P1 +file2chan /chan/wmmenu {} {menu ${unquote ${rget data}}} +.P2 +A corresponding +.CW wmmenu +shell function might be written to provide access to +the functionality: +.P1 +fn wmmenu { + echo ${quote $*} > /chan/wmmenu +} +.P2 +Inferno has blurred the boundaries between +application and library and +.I sh +exploits this \- the possibilities have only just begun +to be explored. +.SH +Discussion +.LP +Although it is a newly written shell, the use of tried +and tested semantics means that most of the +normal shell functionality works quite smoothly. +The separation between normal commands and +substitution builtins is arguable, but I think justifiable. +The distinction between the two classes of command +means that there is less awkwardness in the transition between +ordinary commands and internally implemented commands: +both return the same kind of thing. A normal command's +return value remains essentially a simple true/false status, +whereas the new substitution builtins are returning a list +with no real distinction between true and false. +.LP +I believe that the decision to keep as much functionality as +possible out +of the core shell has paid off. Allowing command blocks +as values enables external modules to define new +control-flow primitives, which in turn means that +the core shell can be kept reasonably static, +while the design of the shell modules evolves +independently. There is a syntactic price +to pay for this generality, but I think it is worth it! +.LP +There are some aspects to the design that I do not +find entirely satisfactory. It is strange, given the +throwaway and non-explicit use of subprocesses +in the shell, that exceptions do not propagate +between processes. The model is Limbo's, but +I am not sure it works perfectly for +.I sh . +I feel there should probably be some difference +between: +.P1 +raise error > /dev/null +.P2 +and +.P1 +status error > /dev/null +.P2 +The shared nature of loaded modules can cause +problems; unlike environment variables, which +are copied for asynchronously running processes, +the module instances for an asynchronously running +process remain the same. This means that a +module such as +.CW tk +must maintain mutual exclusion locks to +protect access to its data structures. This +could be solved if Limbo had some kind of polymorphic +type that enabled the shell to hold some data on +a module's behalf \- it could ask the module +to copy it when necessary. +.LP +One thing that is lost going from Limbo to +.I sh +when using the +.CW tk +module is the usual reference-counted garbage collection +of windows. Because a shell-script holds not +a direct handle on the window, but only a string +that indirectly refers to a handle held inside +the +.CW tk +module, there is no way for the system to +know when the window is no longer referred to, +so, as long as a +.CW tk +module is loaded, its windows must be +explicitly deleted. +.LP +The names defined by loaded modules will +become an issue if +loaded modules proliferate. It is not easy +to ensure that a command that you are executing +is defined by the module you think it is, given name clashes +between modules.I have been considering some +kind of scheme that would allow discrimination +between modules, but for the moment, the point +is moot \- there are no module name clashes, and +I hope that that will remain the case. +.SH +Credits +.LP +.I Sh +is almost entirely an amalgam of other people's +ideas that I have been fortunate enough to +encounter over the years. I hope they will forgive +me for the corruption I've applied... +.LP +I have been a happy user of a version of Tom Duff's +.I rc +for ten years or so; without +.I rc , +this shell would not exist in anything like its present form. +Thanks, Tom. +.LP +It was Byron Rakitzis's UNIX version of +.I rc +that I was using for most of those ten years; it was his +version of the grammar that eventually became +.I sh 's +grammar, and the name of my +.CW glom() +function came straight from his +.I rc +source. +.LP +From Paul Haahr's +.I es , +a descendent of Byron's +.I rc , +and the shell that probably holds the most in common +with +.I sh , +I stole the ``blocks as values'' idea; +the way that blocks transform into strings +and vice versa is completely +.I es 's. +The syntax of the +.CW if +command also comes directly from +.I es . +.LP +From Bruce Ellis's +.I mash , +the other programmable shell for Inferno, +I took the +.CW load +command, the +\f5"{}\fP +syntax and the +.CW <> +redirection operator. +.LP +Last, but by no means least, S. R. Bourne, +the author of the original +.I sh , +the granddaddy of this +.I sh , +is indirectly responsible for all these shells. +That so much has remained unchanged from +then is a testament to the power of his original +vision. diff --git a/doc/sh.pdf b/doc/sh.pdf Binary files differnew file mode 100644 index 00000000..44edf418 --- /dev/null +++ b/doc/sh.pdf diff --git a/doc/styx.ms b/doc/styx.ms new file mode 100644 index 00000000..1fc7e560 --- /dev/null +++ b/doc/styx.ms @@ -0,0 +1,737 @@ +.ds TM \u\s-2TM\s+2\d +.nr dT 6 +.nr XT 6 +.TL +The Styx Architecture for Distributed Systems +.AU +Rob Pike +Dennis M. Ritchie +.AI +Computing Science Research Center +Lucent Technologies, Bell Labs +Murray Hill, New Jersey +USA +.FS +.FA +Originally appeared in +.I "Bell Labs Technical Journal" , +Vol. 4, +No. 2, +April-June 1999, +pp. 146-152. +.br +Copyright © 1999 Lucent Technologies Inc. All rights reserved. +.FE +.AB +A distributed system is constructed from a set of relatively +independent components that form a unified, but geographically and +functionally diverse entity. Examples include networked operating +systems, Internet services, the national telephone +switching system, and in general +all the technology using today's diverse digital +networks. Nevertheless, distributed systems remain difficult +to design, build, and maintain, primarily because of the lack +of a clean, perspicuous interconnection model for the +components. +.LP +Our experience with two distributed operating systems, +Plan 9 and Inferno, encourages us to propose such a model. +These systems depend on, advocate, and generally push to the +limit a fruitful idea: to present their +resources as files in a hierarchical name space. +The objects appearing as files may represent stored data, but may +also be devices, dynamic information sources, interfaces to services, +and control points. The approach unifies and provides basic naming, +structuring, and access control mechanisms for all system resources. +A simple underlying network protocol, Styx, forms +the core of the architecture by presenting a common +language for communication within the system. +.LP +Even within non-distributed systems, the presentation of services +as files advantageously extends a familiar scheme for naming, classifying, +and connecting to system resources. +More important, the approach provides a natural way to build +distributed systems, by using well-known technology for attaching +remote file systems. +If resources are represented as files, +and there are remote file systems, one has +a distributed system: resources available in one place +are usable from another. +.AE +.SH +Introduction +.LP +The Styx protocol is a variant of a protocol called +.I 9P +that +was developed for the Plan 9 operating system[9man]. +For simplicity, we will use the name +Styx throughout this paper; the difference concerns only the initialization of +a connection. +.LP +The original idea behind Styx was to encode file operations between +client programs and the file system, +to be translated into messages for transmission on a computer network. +Using this technology, +Plan 9 separates the file server\(ema central repository for +permanent file storage\(emboth from the CPU server\(ema large +shared-memory multiprocessor\(emand from the user terminals. +This physical separation of function was central to the original +design of the system; +what was unexpected was how well the model could be used to +solve a wide variety of problems not usually thought of as +file system issues. +.LP +The breakthrough was to realize that by representing +a computing resource as a form of file system, +many of the difficulties of making that resource available +across the network would disappear naturally, because +Styx could export the resource transparently. +For example, +the Plan 9 window system, +.CW 8½ +[Pike91], +is implemented as a dynamic file server that publishes +files with names like +.CW /dev/mouse +and +.CW /dev/screen +to provide access to the local hardware. +The +.CW /dev/mouse +file, for instance, +may be opened and read like a regular file, in the manner of UNIX\*(TM device +files, but under +.CW 8½ +it is multiplexed: each client program has a private +.CW /dev/mouse +file that returns mouse events only when the client's window +is the active one on the display. +This design provides a clean, simple mechanism for controlling +access to the mouse. +Its real strength, though, is that the representation of the window system's +resources as files allows Styx to make those resources available across the +network. +For example, an interactive graphics program may be run on a CPU server +simply by having +.CW 8½ +serve the appropriate files to that machine. +.LP +Note that although the resources published by Styx behave like files\(emthey +have file names, file permissions, and file access methods\(emthey do not +need to exist as standard files on disk. +The +.CW /dev/mouse +file is accessed by standard file I/O mechanisms but is nonetheless a +transient object fabricated dynamically by a running program; +it has no permanent existence. +.LP +By following this approach throughout the system, Plan 9 achieves +a remarkable degree of transparency in the distribution of resources[PPTTW93]. +Besides interactive graphics, services such as debugging, maintenance, +file backup, and even access to the underlying network hardware +can be made available across the network using Styx, permitting +the construction of distributed applications and services +using nothing more sophisticated than file I/O. +.SH +The Styx protocol +.LP +Styx's place in the world is analogous to +Sun NFS[RFC][NFS] or Microsoft CIFS[CIFS], although it is simpler and easier to implement +[Welc94]. +Furthermore, NFS and CIFS are designed for sharing regular disk files; NFS in particular +is intimately tied to the implementation and caching strategy +of the underlying UNIX file system. +Unlike Styx, NFS and CIFS are clumsier at exporting dynamic device-like +files such as +.CW /dev/mouse . +.LP +Styx provides a view of a hierarchical, tree-shaped +file system name space[Nee89], together with access information about +the files (permissions, sizes, dates) and the means to read and write +the files. +Its users (that is, the people who write application programs), +don't see the protocol itself; instead they see files that they +read and write, and that provide information or change information. +.LP +In use, a Styx +.I client +is an entity on one machine that establishes communication with +another entity, the +.I server , +on the same or another machine. +The client mechanisms may be built into the operating system, as they +are in Plan 9 or Inferno[INF1][INF2], or into application libraries; +a server may be part of the operating system, or just as often +may be application code on a separate server machine. In any case, the +client and server entities +communicate by exchanging messages, and the effect is that the client +sees a hierarchical file system that exists on the server. +The Styx protocol is the specification of the messages that are exchanged. +.LP +At one level, Styx consists of messages of 13 types for +.RS +.IP \(bu +Starting communication (attaching to a file system); +.IP \(bu +Navigating the file system (that is, specifying and +gaining a handle for a named file); +.IP \(bu +Reading and writing a file; and +.IP \(bu +Performing file status inquiries and changes +.RE +.LP +However, application writers simply code requests to open, read, or write +files; a library or the operating system translates the requests +into the necessary byte sequences transmitted over a communication +channel. The Styx protocol proper specifies the interpretation of these +byte sequences. It fits, approximately, at the OSI Session Layer level +of the ISO standard classification. +Its specification is independent of most details of machine architecture +and it has been successfully used among machines of varying instruction +sets and data layout. +The protocol is summarized in Table 1. +.KF +.TS +center box; +l l +-- +lfCW l. +Name Description +attach Authenticate user of connection; return FID +clone Duplicate FID +walk Advance FID one level of name hierarchy +open Check permissions for file I/O +create Create new file +read Read contents of file +write Write contents of file +close Discard FID +remove Remove file +stat Report file state: permissions, etc. +wstat Modify file state +error Return error condition for failed operation +flush Disregard outstanding I/O requests +.TE +.ce 100 +.ps -1 +Table 1. Summary of Styx messages. +.ps +.ce 0 +.KE +.LP +In use, an operation such as +.P1 +open("/usr/rob/.profile", O_READ); +.P2 +is translated by the underlying system into a sequence of Styx messages. +After establishing the initial connection to the +file server, an +.CW attach +message authenticates the user (the person or agent accessing the files) and +returns an object called a +.CW FID +(file ID) that represents the root of the hierarchy on the server. +When the +.CW open() +operation is executed, it proceeds as follows. +.RS +.IP \(bu +A +.CW clone +message duplicates the root +.CW FID , +returning a new +.CW FID +that can navigate the hierarchy without losing the connection to the root. +.IP \(bu +The new +.CW FID +is then moved to the file +.CW /usr/rob/.profile +by a sequence of +.CW walk +messages that step along, one path component at a time +.CW usr , ( +.CW rob , +.CW .profile ). +.IP \(bu +Finally, an +.CW open +message checks that the user has permission to read the file, +permitting subsequent +.CW read +and +.CW write +operations (messages) on the +.CW FID . +.IP \(bu +Once I/O is completed, the +.CW close +message will release the +.CW FID . +.RE +.LP +At a lower level, implementations of Styx depend only on a reliable, +byte-stream Transport communications layer. For example, it runs over either +TCP/IP, the standard transmission control protocol +and Internet protocol, +or Internet link (IL), which is a sequenced, reliable datagram protocol +using IP packets. +It is worth emphasizing, though, that the model does not require the +existence of a network to join the components; Styx runs fine +over a Unix pipe or even using shared memory. +The strength of the approach is not so much how it works over a network +as that its behavior over a network is identical to its behavior locally. +.SH +Architectural approach +.LP +Styx, as a file system protocol, is merely a component in a +more encompassing approach +to system design: the presentation of resources as files. +This approach will be discussed using a sequence of examples. +.SH +.I "Example: networking +.LP +As an example, access to a TCP/IP network in Inferno and Plan 9 systems +appears as a piece of a file system, with (abbreviated) structure +as follows[PrWi93]: +.P1 +/net/ + dns/ + tcp/ + clone + stats + 0/ + ctl + status + data + listen + 1/ + ... + ... + ether0/ + 0/ + ctl + status + ... + 1/ + ... + ... +.P2 +This represents a file system structure in which one can name, read, and write `files' with +names like +.CW /net/dns , +.CW /net/tcp/clone , +.CW /net/tcp/0/ctl +and so on; +there are directories of files +.CW /net/tcp +and +.CW /net/ether0 . +On the machine that actually has the network interface, all of these +things that look like files are constructed by the kernel drivers that maintain +the TCP/IP stack; they are not real files on a disk. +Operations on the `files' turn into operations sent to the device drivers. +.LP +Suppose an application wishes to establish a connection over TCP/IP to +.CW www.bell-labs.com . +The first task is to translate the domain name +.CW www.bell-labs.com +to a numerical internet address; this is a complicated process, generally +involving communicating with local and remote Domain Name Servers. +In the Styx model, this is done by opening the file +.CW /dev/dns +and writing the literal string +.CW www.bell-labs.com +on the file; then the same file is read. +It will return the string +.CW 204.178.16.5 +as a sequence of 12 characters. +.LP +Once the numerical Internet address is acquired, the connection must be established; +this is done by opening +.CW /net/tcp/clone +and reading from it a string that specifies a directory like +.CW /net/tcp/43 , +which represents a new, unique TCP/IP channel. +To establish the connection, +write a message like +.CW "connect 204.178.16.5 +on the control file for that connection, +.CW /net/tcp/43/ctl . +Subsequently, communication with +.CW www.bell-labs.com +is done by reading and +writing on the file +.CW /net/tcp/43/data . +.LP +There are several things to note about this approach. +.RS +.IP \(bu +All the interface points look like files, and are +accessed by the same I/O mechanisms already available in +programming languages like C, C++, or Java. However, they do not +correspond to ordinary data files on disk, but instead are creations +of a middleware code layer. +.IP \(bu +Communication across the interface, by convention, uses printable character strings where +feasible instead of binary information. This means that the syntax +of communication does not depend on CPU architecture or language details. +.IP \(bu +Because the interface, as in this example with +.CW /net +as the interface with networking facilities, looks like a piece of a +hierarchical file system, it can easily and nearly automatically +be exported to a remote machine and used from afar. +.RE +.LP +In particular, the Styx implementation encourages a natural way of providing +controlled access to networks. +Lucent, like many organizations, has an internal network not +accessible to the international Internet, and has a few +gateways between the inside and outside networks. +Only the gateway machines are connected to both, and they implement +the administrative controls for safety and security. +The advantage of the Styx model is the ease with which +the outside Internet can be used from inside. +If the +.CW /net +file tree described above is provided on a gateway machine, +it can be used as a remote file system from machines on the +inside. This is safe, because this connection is one-way: +inside machines can see the external network interfaces, +but outside machines cannot see the inside. +.SH +.I "Example: debugging +.LP +A similar approach, borrowed and generalized from the UNIX +system [Kill], is useful for controlling and discovering the status +of the running processes in the operating system. +Here a directory +.CW /proc +contains a subdirectory for each process running on the +system; the names of the subdirectories correspond to +process IDs: +.P1 +/proc/ + 1/ + status + ctl + fd + text + mem + ... + 2/ + status + ctl + ... + ... +.P2 +The file names in the process directories refer to various aspects +of the corresponding process: +.CW status +contains information about the state of the process; +.CW ctl , +when written, performs operations like pausing, restarting, +or killing the process; +.CW fd +names and describes the files open in the process; +.CW text +and +.CW mem +represent the program code and the data respectively. +.LP +Where possible, the information and control are again +represented as text strings. For example, one line +from the +.CW status +file of a typical process might be +.DS +.CW "samterm dmr Read 0 20 2478910 0 0 ... +.DE +which shows the name of the program, the owner, its state, and several numbers +representing CPU time in various categories. +.LP +Once again, the approach provides several payoffs. +Because process information is represented in file form, +remote debugging (debugging programs on another machine) +is possible immediately by remote-mounting the +.CW /proc +tree on another machine. +The machine-independent representation of information means +that most operations work properly even if the remote machine +uses a different CPU architecture from the one doing the +debugging. +Most of the programs that deal +with status and control contain no machine-dependent parts +and are completely portable. +(A few are not, however: no attempt is made to render the +memory data or instructions in machine-independent form.) +.SH +.I "Example: PathStar\*(TM Access Server +.LP +The data shelf of Lucent's PathStar Access Server[PATH] uses Styx to connect +the line cards and other devices on the shelf to the control computer. +In fact, Styx is the protocol for high-level communication on the backplane. +.LP +The file system hierarchy served by the control computer includes a structure +like this: +.P1 +/trip/ + config + admin/ + ospfctl + ... + boot/ + 0/ + ctl + eeprom + memory + msg + pack + alarm + ... + 1/ + ... +/net/ + ... +.P2 +The directories under +.CW /net +are similar to those in Plan 9 or Inferno; they form the interface to the +external IP network. +The +.CW /trip +hierarchy represents the control structure of the shelf. +.LP +The subdirectories under +.CW /trip/boot +each provide access to one of the line cards or other devices in the shelf. +For example, to initialize a card one writes the text string +.CW reset +to the +.CW ctl +file of the card, while bootstrapping is done by copying the control +software for the card into the +.CW memory +file and writing a +.CW reset +message to +.CW ctl . +Once the line card is running, +the other files present an interface to the higher-level structure of the device: +.CW pack +is the port through which IP packets are transferred to and from the card, +.CW alarm +may be read to discover outstanding conditions on the card, and so on. +.LP +All this structure is exported from the shelf using Styx. +The external element management software (EMS) controls and monitors the +shelf using Styx operations. +For example, the EMS may read +.CW /trip/boot/7/alarm +and discover a diagnostic condition. +By reading and writing the other files under +.CW /trip/boot/7/ , +the card may be taken off line, diagnosed, and perhaps reset or substituted, +all from the system running the EMS, which may be elsewhere in the network. +.LP +Another example is the implementation of SNMP in the PathStar Access Server. +The functionality of SNMP is usually distributed through the various components +of a network, but here it is a straightforward adaption process, +running anywhere in the network, that translates SNMP requests to Styx +operations in the network element. +Besides dramatically simplifying the implementation, the natural +ability for aggregation permits +a single process to provide SNMP access to an arbitrarily complex network subsystem. +Yet the structure is secure: the file-oriented nature of the operations make it +easy to establish standard authentication and security controls to guarantee +that only trusted parties have access to the SNMP operations. +.LP +There are local benefits to this architecture, as well. +Styx provides a single point in the design where control can be separated +from the details of the underlying fabric, isolating both from changes in the +other. Components become more adaptable: software can be upgraded +without worrying about hidden dependencies on the hardware, +and new hardware may be installed without updating the control +software above. +.SH +Security issues +.LP +Styx provides several security mechanisms for +discouraging hostile or accidental actions that injure the integrity +of a system. +.LP +The underlying file-communication protocol includes +user and group identifiers that a server may check against +other authentication. +For example, a server may check, on a request to open a file, +that the user ID associated with the request is permitted to +perform the operation. +This mechanism is familiar from general-purpose operating +systems, and its use is well-known. +It depends on passwords or stronger mechanisms for authenticating +the identity of clients. +.LP +The Styx approach of providing remote resources +as file systems over a network encourages genuinely secure access +to the resources in a way transparent to applications, so that +authentication transactions need not be provided as part of each. +For example, in Inferno, the negotiation of an initial connection +between client and server may include installation of any of +several encrypting or message-digesting protocols that +supervise the channel. +All application use of the resources provided by the server +is then protected against interference, and the server +has strong assurance that its facilities are being used in +an authorized way. +This is relevant both for general-purpose file servers, +and, in the telephony field, is especially useful for safe +remote administration. +.SH +Summary +.LP +Presentation of resources as a piece of a possibly remote file system +is an attractive way of creating distributed systems that treads a +path between two extremes: +.IP 1 +All communication with other parts of the system is by +explicit messages sent between components. +This communication differs in style from applications' use +of local resources. +.IP 2 +All communication is by means of +closely shared resources: the CPU-addressable memory in +various parts is made directly available across a big network; +applications can read and write far-away objects exactly as +they do those on the same motherboard as their own CPU. +.LP +Something like the first of these extremes is usually more evident +in today's systems, although either the operating system or software +layered upon it usually paper over some of the rough spots. +The second remains more difficult to approach, because +networks (especially big ones like the Internet) are not very +reliable, and because +the machines on them are diverse in processor architecture +and in installed software. +.LP +The design plan described and advocated in this paper +lies between the two extremes. +It has these advantages: +.IP \(bu +.I "A simple, familiar programming model for reading and writing named files" . +File systems have well-defined naming, access, and permissions structures. +.IP \(bu +.I "Platform and language independence" . +Underlying access to resources is +at the file level, which is provided nearly everywhere, instead +of depending on facilities available only with particular languages +or operating systems. +C++ or Java classes, and C libraries can be constructed +to access the facilities. +.IP \(bu +.I "A hierarchical naming and access control structure" . +This encourages clean +and well-structured design of resource naming and access. +.IP \(bu +.I "Easy testing and debugging" . +By using well-specified, narrow interfaces +at the file level, it is straightforward to observe the communication +between distributed entities. +.IP \(bu +.I "Low cost" . +Support software, at both client and server, +can be written in a few thousand lines +of code, and will occupy only small space in products. +.LP +This approach to building systems is successful in the general-purpose +systems Plan 9 and Inferno; +it has also been used to construct systems specialized for telephony, such +as Mantra[MAN] and the PathStar Access Server. +It supplies a coherent, extensible structure both to the internal communications +within a single system and external communication between heterogeneous +components of a large digital network. +.LP +.SH +References +.nr PS -1 +.nr VS -1 +.IP [NFS] 11 +R. Sandberg, D. Goldberg, S. Kleiman, D. Walsh, and +B. Lyon, +``Design and Implementation of the Sun Network File System'', +.I "Proc. Summer 1985 USENIX Conf." , +Portland, Oregon, June 1985, +pp. 119-130. +.IP [RFC] 11 +Internet RFC 1094. +.IP [9man] 11 +.I "Plan 9 Programmer's Manual" , +Second Edition, +Vol. 1 and 2, +Bell Laboratories, +Murray Hill, N.J., +1995. +.IP [Kill84] 11 +T. J. Killian, +``Processes as Files'', +.I "Proc. Summer 1984 USENIX Conf." , +June 1984, Salt Lake City, Utah, June 1984, pp. 203-207. +.IP [Pike91] 11 +R. Pike, +``8½, the Plan 9 Window System'', +.I "Proc. Summer 1991 USENIX Conf." , +Nashville TN, June 1991, pp. 257-265. +.IP "[PPTTW93] " 11 +R. Pike, D.L. Presotto, K. Thompson, H. Trickey, and P. Winterbottom, ``The Use of Name Spaces in Plan 9'', +.I "Op. Sys. Rev." , +Vol. 27, No. 2, April 1993, pp. 72-76. +.IP [PrWi93] 11 +D. L. Presotto and P. Winterbottom, +``The Organization of Networks in Plan 9'', +.I "Proc. Winter 1993 USENIX Conf." , +San Diego, Calif., Jan. 1993, pp. 43-50. +.IP [Nee89] 11 +R. Needham, ``Names'', in +.I "Distributed systems" , +edited by S. Mullender, +Addison-Wesley, +Reading, Mass., 1989, pp. 89-101. +.IP [CIFS] +Paul Leach and Dan Perry, ``CIFS: A Common Internet File System'', Nov. 1996, +.I "http://www.microsoft.com/mind/1196/cifs.htm" . +.IP [INF1] +.I "Inferno Programmer's Manual", +Third Edition, +Vol. 1 and 2, Vita Nuova Holdings Limited, York, England, 2000. +.IP [INF2] +S.M. Dorward, R. Pike, D. L. Presotto, D. M. Ritchie, H. Trickey, +and P. Winterbottom, ``The Inferno Operating System'', +.I "Bell Labs Technical Journal" +Vol. 2, +No. 1, +Winter 1997. +.IP [MAN] +R. A. Lakshmi-Ratan, +``The Lucent Technologies Softswitch\-Realizing the Promise of Convergence'', +.I "Bell Labs Technical Journal" , +Vol. 4, +No. 2, +April-June 1999, +pp. 174-196. +.IP [PATH] +J. M. Fossaceca, J. D. Sandoz, and P. Winterbottom, +``The PathStar Access Server: Facilitating Carrier-Scale Packet Telephony'', +.I "Bell Labs Technical Journal" , +Vol. 3, +No. 4, +October-December 1998, +pp. 86-102. +.IP [Welc94] +B. Welch, +``A Comparison of Three Distributed File System Architectures: Vnode, Sprite, and Plan 9'', +.I "Computing Systems" , +Vol. 7, No. 2, pp. 175-199 (1994). +.nr PS +1 +.nr VS +1 diff --git a/doc/styx.pdf b/doc/styx.pdf Binary files differnew file mode 100644 index 00000000..f6d35d37 --- /dev/null +++ b/doc/styx.pdf |
